X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fclifford.cpp;h=d346c44ad3fd4548226c7f147908dd5fa3b11016;hp=eb1629d4957aad08f5a001ac2348dc89752a07bb;hb=53604c3e255c392fb31af8bcecf57f2918495d28;hpb=3acbd48bb5396559a85cfebb338f382126d8adc4 diff --git a/ginac/clifford.cpp b/ginac/clifford.cpp index eb1629d4..d346c44a 100644 --- a/ginac/clifford.cpp +++ b/ginac/clifford.cpp @@ -363,6 +363,28 @@ ex dirac_trace(const ex & e, unsigned char rl = 0) // Tr gamma_mu gamma_nu = 4 g_mu_nu if (num == 2) return 4 * lorentz_g(e.op(0).op(1), e.op(1).op(1)); + + // Traces of 4 or more gammas are computed recursively: + // Tr gamma_mu1 gamma_mu2 ... gamma_mun = + // + eta_mu1_mu2 * Tr gamma_mu3 ... gamma_mun + // - eta_mu1_mu3 * Tr gamma_mu2 gamma_mu4 ... gamma_mun + // + eta_mu1_mu4 * Tr gamma_mu3 gamma_mu3 gamma_mu5 ... gamma_mun + // - ... + // + eta_mu1_mun * Tr gamma_mu2 ... gamma_mu(n-1) + exvector v(num - 2); + int sign = 1; + const ex &ix1 = e.op(0).op(1); + ex result; + for (int i=1; i