OpenLoops is hosted by Hepforge, IPPP Durham

Colour basis for tree-level amplitudes

Besides calculating squared matrix elements, OpenLoops also provides tree-level amplitudes with full colour information. This section describes how to retrieve the colour basis used for a process and the amplitude as a vector in the colour space which is spanned by these basis elements.

The colour basis

The colour basis elements are encoded as integer arrays and must be retrieved once for each process. First one must get the following information.
  ncolb: the number of basis elements,
  colelemsz: the size of the longest basis element,
  nheltot: the total number of helicity configurations (including vanishing configurations).

In Fortran

subroutine tree_colbasis_dim(id, ncolb, colelemsz, nheltot)
  integer, intent(in) :: id
  integer, intent(out) :: ncolb, colelemsz, nheltot

In C

void ol_tree_colbasis_dim(int id, int* ncolb, int* colelemsz, int* nheltot);

In the next step the actual basis is retrieved.

In Fortran

subroutine tree_colbasis(id, basis, needed)
  integer, intent(in) :: id
  integer, intent(out) :: basis(colelemsz,ncolb), needed(ncolb,ncolb)

In C

// int basis[ncolb][colelemsz], needed[ncolb][ncolb];
void ol_tree_colbasis(int id, int* basis, int* needed);

Here, basis(:,i) rsp. basis[i] is an integer array of length colelemsz which encodes the i-th colour basis element (in C, i starts from zero). Each basis element is a product of chains of fundamental SU(N) generators Ta and traces thereof. These objects are represented as sequences of colour indices, where the number of the corresponding external particle (starting with 1) is used as colour index, e.g.

  (Ta1Ta2Ta3)ij → {a1,a2,a3,i,j}
  Tr(Ta1Ta2Ta3) → {a1,a2,a3}

This means that in order to know if a sequence corresponds to a chain or a trace one needs to know which kind of colour charge the external particles carry. E.g. {a1,a2,a3} is a trace if the particles at positions a2 and a3 are gluons and it is a chain if they are a quark and an anti-quark.

Different chains/traces are separated by a zero and the array is padded with zeroes if it is longer than required for the considered basis element.

The amplitude

The amplitude of a process for a given phase space point can be calculated by

In Fortran

subroutine evaluate_tree_colvect(id, psp, amp, nhel)
  integer, intent(in) :: id
  real(DREALKIND), intent(in) :: psp(0:3,n_ext)
  complex(DREALKIND), intent(out) :: amp(ncolb,nheltot)
  integer, intent(out) :: nhel

amp(:,h) for h=1..nhel is an array of ncolb complex numbers such that the element amp(i,h) corresponds to the colour basis element basis(:,i).

In C

// double amp[nheltot][2*ncolb];
void ol_evaluate_tree_colvect(int id, double* pp, double* amp, int* nhel);

amp[h] for h=0..nhel-1 is an array of 2*ncolb real numbers such that the elements amp[h][2*i] and amp[h][2*i+1] are the real and imaginary parts of the amplitude which corresponds to the colour basis element basis[i].

The conventions to pass the process id and the phase space point are the same as in the interface for squared matrix elements (see Fortran, C). nhel is the number of non-vanishing helicity configurations in the amplitude.