This is an old revision of the document!



  • DiracTrace calculates trace of Dirac matrices in $D$ dimensions
  • By default DiracTrace works in $D = 4$; for arbitrary $D$ one can use option DiracTrace[[Dimension: D]]
  • One can directly set trace of identity matrix (e.g. for dimensional regularisation): DiracTrace[[Dimension: D, TraceOfOne: 4]]
  • By default DiracTrace uses notation G_m for $\gamma_m$, G5 for $\gamma_5$ and e_abcd for Levi-Civita tensor. DiracTrace[G, G5, eps] or DiracTrace[[Gamma: G, Gamma5: G5, LeviCivita: eps]] specifies the notation for $\gamma_m$, $\gamma_5$ and Levi-Civita tensor.
  • DiracTrace[[Simplifications: rules]] will apply additional simplification rules to each processed trace


Calculate trace of $\gamma$-matrices:

defineMatrices 'G_a', 'G5', Matrix1.matrix
println DiracTrace >> 'Tr[G_a*G_b]'.t
   > 4*g_ab

Another example:

//set up matrix objects
defineMatrices 'G_a', 'G5', Matrix1.matrix
//calculate trace
println  DiracTrace >> 'Tr[(p_a*G^a + m)*G_m*(q_a*G^a-m)*G_n]'.t
   > 4*p_{m}*q_{n}+4*p_{n}*q_{m}-4*m**2*g_{mn}-4*p^{a}*g_{mn}*q_{a}

Calculate trace involving $\gamma_5$:

//set up matrix objects
defineMatrices 'G_a', 'G5', Matrix1.matrix
//calculate trace
println DiracTrace >> 'Tr[G_a*G_b*G_c*G_d*G5]'.t
   > -4*I*e_{abcd}
println DiracTrace >> 'Tr[(p_a*G^a + m)*G_m*G5*(q_a*G^a-m)*G_n]'.t
   > -4*I*p_{b}*q_{a}*e^{a}_{n}^{b}_{m}

Calculate trace in different dimensions:

defineMatrices 'G_a', 'G5', Matrix1.matrix
println DiracTrace[[Dimension: 6]] >> 'Tr[G_c*G_a*G_b*G^c]'.t
   > 48*g_ab

By default, Tr[1] is equal to $2^{\frac{D-1}{2}}$ for odd $D$ and $2^{\frac{D}{2}}$ for even. For symbolic $D$ it will be assumed that it is even:

defineMatrices 'G_a', 'G5', Matrix1.matrix
println DiracTrace[[Dimension: 'D'.t]] >> 'Tr[G_c*G_a*G_b*G^c]'.t
   > D*2**(D/2)*g_ab

One can directly overcome predefined value of Tr[1] by using additional option (required for dimensional regularisation):

defineMatrices 'G_a', 'G5', Matrix1.matrix
def dTrace = DiracTrace[[Dimension: 'D'.t, TraceOfOne: 4]]
println dTrace >> 'Tr[G_c*G_a*G_b*G^c]'.t
   > 4*D*g_ab

For traces involving $\gamma_5$ in $D$ dimensions, all $\gamma_5$-related calculations will be performed as in 4 dimensions ($Tr[\gamma_a \gamma_b \gamma_c \gamma_d \gamma_5] = -4 i e_{abcd}$ and Chiholm-Kahane identitie: $\gamma_a \gamma_b \gamma_c = g_{ab} \gamma_c-g_{ac} \gamma_b+g_{bc} \gamma_a-i e_{abcd} \gamma_5 \gamma^d$):

defineMatrices 'G_a', 'G5', Matrix1.matrix
def dTrace = DiracTrace[[Dimension: 'D'.t, TraceOfOne: 4]]
println dTrace >> 'Tr[G_a*G_b*G_c*G_d*G5]'.t
   > -4*I*e_{abcd}

println dTrace >> 'Tr[G_a*G_b*G_c*G_d*G_e*G^a*G5]'.t
   > 4*I*e_{debc}-4*I*e_{decb}+4*I*e_{dbce}-4*I*e_{ebcd}

Use another notation for gamma matrices:

defineMatrices 'F_\\mu', 'F5', Matrix2.matrix
def dTrace = DiracTrace[[Gamma: 'F_\\mu', Gamma5: 'F5', LeviCivita: 'Eps_{\\mu\\nu\\alpha\\beta}']]
println dTrace >> 'Tr[F_\\mu*F_\\nu*F_\\alpha*F_\\beta * F5]'.t
   > -4*I*Eps_{\mu\nu\alpha\beta}


  • Simplifications: one can specify additional simplifications that will be applied to each evaluated trace:
    defineMatrices 'G_a', 'G5', Matrix1.matrix
    def expr = 'Tr[(p^a + k^a)*(p^b + k^b)*G_a*G_b*G_c*G_d]'.t
    def mandelstam = setMandelstam([k_a: '0', p_a: '0', q_a: 'm', r_a: 'm'], 's', 't', 'u')
    println DiracTrace[[Simplifications: mandelstam]] >> expr
       > 4*s*g_{cd}
    which is same as
    println( (DiracTrace & mandelstam) >> expr )
       > 4*s*g_{cd}
  • ExpandAndEliminate: DiracTrace expands out products of sums containing traces of $\gamma$-matrices using ExpandAndEliminate transformation. One can replace it with another instance using DiractTrace[[ExpandAndEliminate: tr]].
  • LeviCivitaSimplify: When traces involve $\gamma_5$, DiracTrace uses LeviCivitaSimplify in for simplifying resulting expressions with Levi-Civita tensors. One can replace the default instance of LeviCivitaSimplify with another one using DiractTrace[[ExpandAndEliminate: tr]].

See also