From: Christian Bauer Date: Wed, 25 Apr 2001 20:41:13 +0000 (+0000) Subject: dirac_trace() can handle arbitrary gamma strings without gamma5. The only X-Git-Tag: release_0-8-3~33 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=commitdiff_plain;h=53604c3e255c392fb31af8bcecf57f2918495d28;ds=sidebyside dirac_trace() can handle arbitrary gamma strings without gamma5. The only remaining unimplemented case is now Tr[gamma5 S_2n] --- 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