diff --git a/extras/Hadrons/Modules/MContraction/Meson.hpp b/extras/Hadrons/Modules/MContraction/Meson.hpp index 270875a6..a46dd445 100644 --- a/extras/Hadrons/Modules/MContraction/Meson.hpp +++ b/extras/Hadrons/Modules/MContraction/Meson.hpp @@ -36,22 +36,6 @@ See the full license in the file "LICENSE" in the top level distribution directo #include #include -namespace Grid { - // Overload >> to extract gamma pair from "" string. - template - inline std::istringstream &operator>>(std::istringstream &sstr, - std::pair &buf) - { - unsigned int buf1; - unsigned int buf2; - char c; - sstr >> c >> buf1 >> buf2 >> c; - sstr.peek(); - buf = std::make_pair((T1)buf1, (T2)buf2); - return sstr; - } -} - BEGIN_HADRONS_NAMESPACE /* @@ -63,8 +47,8 @@ BEGIN_HADRONS_NAMESPACE - q1: input propagator 1 (string) - q2: input propagator 2 (string) - gammas: gamma products to insert at sink & source, pairs of gamma matrices - (space-separated integers) in square brackets (i.e. [g_sink g_src]), - in a sequence (e.g. "[15 7][7 15][7 7]"). + (space-separated strings) in angled brackets (i.e. ), + in a sequence (e.g. ""). Special values: "all" - perform all possible contractions. - mom: momentum insertion, space-separated float sequence (e.g ".1 .2 1. 0."), diff --git a/lib/qcd/spin/Dirac.cc b/lib/qcd/spin/Dirac.cc deleted file mode 100644 index a0e1086c..00000000 --- a/lib/qcd/spin/Dirac.cc +++ /dev/null @@ -1,72 +0,0 @@ -/************************************************************************************* - -Grid physics library, www.github.com/paboyle/Grid - -Source file: lib/qcd/spin/Dirac.cc - -Copyright (C) 2015 -Copyright (C) 2016 - -Author: Antonin Portelli -Author: Peter Boyle -Author: paboyle - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -See the full license in the file "LICENSE" in the top level distribution directory -*************************************************************************************/ -/* END LEGAL */ -#include - -namespace Grid { -namespace QCD { - -#include "GammaMulTable.h" - -const std::array Gamma::name = {{ - "-Gamma5 ", - "Gamma5 ", - "-GammaT ", - "GammaT ", - "-GammaTGamma5", - "GammaTGamma5 ", - "-GammaX ", - "GammaX ", - "-GammaXGamma5", - "GammaXGamma5 ", - "-GammaY ", - "GammaY ", - "-GammaYGamma5", - "GammaYGamma5 ", - "-GammaZ ", - "GammaZ ", - "-GammaZGamma5", - "GammaZGamma5 ", - "-Identity ", - "Identity ", - "-SigmaXT ", - "SigmaXT ", - "-SigmaXY ", - "SigmaXY ", - "-SigmaXZ ", - "SigmaXZ ", - "-SigmaYT ", - "SigmaYT ", - "-SigmaYZ ", - "SigmaYZ ", - "-SigmaZT ", - "SigmaZT "}}; - -}} diff --git a/lib/qcd/spin/Dirac.h b/lib/qcd/spin/Dirac.h index 6053f935..ed22ec97 100644 --- a/lib/qcd/spin/Dirac.h +++ b/lib/qcd/spin/Dirac.h @@ -32,1126 +32,28 @@ See the full license in the file "LICENSE" in the top level distribution directo #ifndef GRID_QCD_DIRAC_H #define GRID_QCD_DIRAC_H -// code generated by the Mathematica notebook gamma-gen/gamma-gen.nb -#include +// Gamma matrices using the code generated by the Mathematica notebook +// gamma-gen/gamma-gen.nb in Gamma.cc & Gamma.h +//////////////////////////////////////////////////////////////////////////////// +#include namespace Grid { -namespace QCD { -class Gamma { - public: - GRID_SERIALIZABLE_ENUM(Algebra, undef, - MinusGamma5 , 0, - Gamma5 , 1, - MinusGammaT , 2, - GammaT , 3, - MinusGammaTGamma5, 4, - GammaTGamma5 , 5, - MinusGammaX , 6, - GammaX , 7, - MinusGammaXGamma5, 8, - GammaXGamma5 , 9, - MinusGammaY , 10, - GammaY , 11, - MinusGammaYGamma5, 12, - GammaYGamma5 , 13, - MinusGammaZ , 14, - GammaZ , 15, - MinusGammaZGamma5, 16, - GammaZGamma5 , 17, - MinusIdentity , 18, - Identity , 19, - MinusSigmaXT , 20, - SigmaXT , 21, - MinusSigmaXY , 22, - SigmaXY , 23, - MinusSigmaXZ , 24, - SigmaXZ , 25, - MinusSigmaYT , 26, - SigmaYT , 27, - MinusSigmaYZ , 28, - SigmaYZ , 29, - MinusSigmaZT , 30, - SigmaZT , 31); - static constexpr unsigned int nGamma = 32; - static const std::array name; - static const std::array, nGamma> mul; - static const std::array adj; - Algebra g; - public: - Gamma(Algebra initg): g(initg) {} -}; - -inline Gamma operator*(const Gamma &g1, const Gamma &g2) +// Dirac algebra adjoint operator (not in QCD:: to overload other adj) +inline QCD::Gamma adj(const QCD::Gamma &g) { - return Gamma(Gamma::mul[g1.g][g2.g]); + return QCD::Gamma (QCD::Gamma::adj[g.g]); } -template -inline void multMinusGamma5(iVector &ret, const iVector &rhs) -{ - ret(0) = -rhs(0); - ret(1) = -rhs(1); - ret(2) = rhs(2); - ret(3) = rhs(3); -}; - -template -inline void lmultMinusGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = -rhs(0, i); - ret(1, i) = -rhs(1, i); - ret(2, i) = rhs(2, i); - ret(3, i) = rhs(3, i); - } -}; - -template -inline void rmultMinusGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = -rhs(i, 0); - ret(i, 1) = -rhs(i, 1); - ret(i, 2) = rhs(i, 2); - ret(i, 3) = rhs(i, 3); - } -}; - -template -inline void multGamma5(iVector &ret, const iVector &rhs) -{ - ret(0) = rhs(0); - ret(1) = rhs(1); - ret(2) = -rhs(2); - ret(3) = -rhs(3); -}; - -template -inline void lmultGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = rhs(0, i); - ret(1, i) = rhs(1, i); - ret(2, i) = -rhs(2, i); - ret(3, i) = -rhs(3, i); - } -}; - -template -inline void rmultGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = rhs(i, 0); - ret(i, 1) = rhs(i, 1); - ret(i, 2) = -rhs(i, 2); - ret(i, 3) = -rhs(i, 3); - } -}; - -template -inline void multMinusGammaT(iVector &ret, const iVector &rhs) -{ - ret(0) = -rhs(2); - ret(1) = -rhs(3); - ret(2) = -rhs(0); - ret(3) = -rhs(1); -}; - -template -inline void lmultMinusGammaT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = -rhs(2, i); - ret(1, i) = -rhs(3, i); - ret(2, i) = -rhs(0, i); - ret(3, i) = -rhs(1, i); - } -}; - -template -inline void rmultMinusGammaT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = -rhs(i, 2); - ret(i, 1) = -rhs(i, 3); - ret(i, 2) = -rhs(i, 0); - ret(i, 3) = -rhs(i, 1); - } -}; - -template -inline void multGammaT(iVector &ret, const iVector &rhs) -{ - ret(0) = rhs(2); - ret(1) = rhs(3); - ret(2) = rhs(0); - ret(3) = rhs(1); -}; - -template -inline void lmultGammaT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = rhs(2, i); - ret(1, i) = rhs(3, i); - ret(2, i) = rhs(0, i); - ret(3, i) = rhs(1, i); - } -}; - -template -inline void rmultGammaT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = rhs(i, 2); - ret(i, 1) = rhs(i, 3); - ret(i, 2) = rhs(i, 0); - ret(i, 3) = rhs(i, 1); - } -}; - -template -inline void multMinusGammaTGamma5(iVector &ret, const iVector &rhs) -{ - ret(0) = rhs(2); - ret(1) = rhs(3); - ret(2) = -rhs(0); - ret(3) = -rhs(1); -}; - -template -inline void lmultMinusGammaTGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = rhs(2, i); - ret(1, i) = rhs(3, i); - ret(2, i) = -rhs(0, i); - ret(3, i) = -rhs(1, i); - } -}; - -template -inline void rmultMinusGammaTGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = -rhs(i, 2); - ret(i, 1) = -rhs(i, 3); - ret(i, 2) = rhs(i, 0); - ret(i, 3) = rhs(i, 1); - } -}; - -template -inline void multGammaTGamma5(iVector &ret, const iVector &rhs) -{ - ret(0) = -rhs(2); - ret(1) = -rhs(3); - ret(2) = rhs(0); - ret(3) = rhs(1); -}; - -template -inline void lmultGammaTGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = -rhs(2, i); - ret(1, i) = -rhs(3, i); - ret(2, i) = rhs(0, i); - ret(3, i) = rhs(1, i); - } -}; - -template -inline void rmultGammaTGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = rhs(i, 2); - ret(i, 1) = rhs(i, 3); - ret(i, 2) = -rhs(i, 0); - ret(i, 3) = -rhs(i, 1); - } -}; - -template -inline void multMinusGammaX(iVector &ret, const iVector &rhs) -{ - ret(0) = timesMinusI(rhs(3)); - ret(1) = timesMinusI(rhs(2)); - ret(2) = timesI(rhs(1)); - ret(3) = timesI(rhs(0)); -}; - -template -inline void lmultMinusGammaX(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesMinusI(rhs(3, i)); - ret(1, i) = timesMinusI(rhs(2, i)); - ret(2, i) = timesI(rhs(1, i)); - ret(3, i) = timesI(rhs(0, i)); - } -}; - -template -inline void rmultMinusGammaX(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesI(rhs(i, 3)); - ret(i, 1) = timesI(rhs(i, 2)); - ret(i, 2) = timesMinusI(rhs(i, 1)); - ret(i, 3) = timesMinusI(rhs(i, 0)); - } -}; - -template -inline void multGammaX(iVector &ret, const iVector &rhs) -{ - ret(0) = timesI(rhs(3)); - ret(1) = timesI(rhs(2)); - ret(2) = timesMinusI(rhs(1)); - ret(3) = timesMinusI(rhs(0)); -}; - -template -inline void lmultGammaX(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesI(rhs(3, i)); - ret(1, i) = timesI(rhs(2, i)); - ret(2, i) = timesMinusI(rhs(1, i)); - ret(3, i) = timesMinusI(rhs(0, i)); - } -}; - -template -inline void rmultGammaX(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesMinusI(rhs(i, 3)); - ret(i, 1) = timesMinusI(rhs(i, 2)); - ret(i, 2) = timesI(rhs(i, 1)); - ret(i, 3) = timesI(rhs(i, 0)); - } -}; - -template -inline void multMinusGammaXGamma5(iVector &ret, const iVector &rhs) -{ - ret(0) = timesI(rhs(3)); - ret(1) = timesI(rhs(2)); - ret(2) = timesI(rhs(1)); - ret(3) = timesI(rhs(0)); -}; - -template -inline void lmultMinusGammaXGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesI(rhs(3, i)); - ret(1, i) = timesI(rhs(2, i)); - ret(2, i) = timesI(rhs(1, i)); - ret(3, i) = timesI(rhs(0, i)); - } -}; - -template -inline void rmultMinusGammaXGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesI(rhs(i, 3)); - ret(i, 1) = timesI(rhs(i, 2)); - ret(i, 2) = timesI(rhs(i, 1)); - ret(i, 3) = timesI(rhs(i, 0)); - } -}; - -template -inline void multGammaXGamma5(iVector &ret, const iVector &rhs) -{ - ret(0) = timesMinusI(rhs(3)); - ret(1) = timesMinusI(rhs(2)); - ret(2) = timesMinusI(rhs(1)); - ret(3) = timesMinusI(rhs(0)); -}; - -template -inline void lmultGammaXGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesMinusI(rhs(3, i)); - ret(1, i) = timesMinusI(rhs(2, i)); - ret(2, i) = timesMinusI(rhs(1, i)); - ret(3, i) = timesMinusI(rhs(0, i)); - } -}; - -template -inline void rmultGammaXGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesMinusI(rhs(i, 3)); - ret(i, 1) = timesMinusI(rhs(i, 2)); - ret(i, 2) = timesMinusI(rhs(i, 1)); - ret(i, 3) = timesMinusI(rhs(i, 0)); - } -}; - -template -inline void multMinusGammaY(iVector &ret, const iVector &rhs) -{ - ret(0) = rhs(3); - ret(1) = -rhs(2); - ret(2) = -rhs(1); - ret(3) = rhs(0); -}; - -template -inline void lmultMinusGammaY(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = rhs(3, i); - ret(1, i) = -rhs(2, i); - ret(2, i) = -rhs(1, i); - ret(3, i) = rhs(0, i); - } -}; - -template -inline void rmultMinusGammaY(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = rhs(i, 3); - ret(i, 1) = -rhs(i, 2); - ret(i, 2) = -rhs(i, 1); - ret(i, 3) = rhs(i, 0); - } -}; - -template -inline void multGammaY(iVector &ret, const iVector &rhs) -{ - ret(0) = -rhs(3); - ret(1) = rhs(2); - ret(2) = rhs(1); - ret(3) = -rhs(0); -}; - -template -inline void lmultGammaY(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = -rhs(3, i); - ret(1, i) = rhs(2, i); - ret(2, i) = rhs(1, i); - ret(3, i) = -rhs(0, i); - } -}; - -template -inline void rmultGammaY(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = -rhs(i, 3); - ret(i, 1) = rhs(i, 2); - ret(i, 2) = rhs(i, 1); - ret(i, 3) = -rhs(i, 0); - } -}; - -template -inline void multMinusGammaYGamma5(iVector &ret, const iVector &rhs) -{ - ret(0) = -rhs(3); - ret(1) = rhs(2); - ret(2) = -rhs(1); - ret(3) = rhs(0); -}; - -template -inline void lmultMinusGammaYGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = -rhs(3, i); - ret(1, i) = rhs(2, i); - ret(2, i) = -rhs(1, i); - ret(3, i) = rhs(0, i); - } -}; - -template -inline void rmultMinusGammaYGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = rhs(i, 3); - ret(i, 1) = -rhs(i, 2); - ret(i, 2) = rhs(i, 1); - ret(i, 3) = -rhs(i, 0); - } -}; - -template -inline void multGammaYGamma5(iVector &ret, const iVector &rhs) -{ - ret(0) = rhs(3); - ret(1) = -rhs(2); - ret(2) = rhs(1); - ret(3) = -rhs(0); -}; - -template -inline void lmultGammaYGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = rhs(3, i); - ret(1, i) = -rhs(2, i); - ret(2, i) = rhs(1, i); - ret(3, i) = -rhs(0, i); - } -}; - -template -inline void rmultGammaYGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = -rhs(i, 3); - ret(i, 1) = rhs(i, 2); - ret(i, 2) = -rhs(i, 1); - ret(i, 3) = rhs(i, 0); - } -}; - -template -inline void multMinusGammaZ(iVector &ret, const iVector &rhs) -{ - ret(0) = timesMinusI(rhs(2)); - ret(1) = timesI(rhs(3)); - ret(2) = timesI(rhs(0)); - ret(3) = timesMinusI(rhs(1)); -}; - -template -inline void lmultMinusGammaZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesMinusI(rhs(2, i)); - ret(1, i) = timesI(rhs(3, i)); - ret(2, i) = timesI(rhs(0, i)); - ret(3, i) = timesMinusI(rhs(1, i)); - } -}; - -template -inline void rmultMinusGammaZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesI(rhs(i, 2)); - ret(i, 1) = timesMinusI(rhs(i, 3)); - ret(i, 2) = timesMinusI(rhs(i, 0)); - ret(i, 3) = timesI(rhs(i, 1)); - } -}; - -template -inline void multGammaZ(iVector &ret, const iVector &rhs) -{ - ret(0) = timesI(rhs(2)); - ret(1) = timesMinusI(rhs(3)); - ret(2) = timesMinusI(rhs(0)); - ret(3) = timesI(rhs(1)); -}; - -template -inline void lmultGammaZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesI(rhs(2, i)); - ret(1, i) = timesMinusI(rhs(3, i)); - ret(2, i) = timesMinusI(rhs(0, i)); - ret(3, i) = timesI(rhs(1, i)); - } -}; +namespace QCD { -template -inline void rmultGammaZ(iMatrix &ret, const iMatrix &rhs) +// Dirac algebra mutliplication operator +inline Gamma operator*(const Gamma &g1, const Gamma &g2) { - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesMinusI(rhs(i, 2)); - ret(i, 1) = timesI(rhs(i, 3)); - ret(i, 2) = timesI(rhs(i, 0)); - ret(i, 3) = timesMinusI(rhs(i, 1)); - } -}; - -template -inline void multMinusGammaZGamma5(iVector &ret, const iVector &rhs) -{ - ret(0) = timesI(rhs(2)); - ret(1) = timesMinusI(rhs(3)); - ret(2) = timesI(rhs(0)); - ret(3) = timesMinusI(rhs(1)); -}; - -template -inline void lmultMinusGammaZGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesI(rhs(2, i)); - ret(1, i) = timesMinusI(rhs(3, i)); - ret(2, i) = timesI(rhs(0, i)); - ret(3, i) = timesMinusI(rhs(1, i)); - } -}; - -template -inline void rmultMinusGammaZGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesI(rhs(i, 2)); - ret(i, 1) = timesMinusI(rhs(i, 3)); - ret(i, 2) = timesI(rhs(i, 0)); - ret(i, 3) = timesMinusI(rhs(i, 1)); - } -}; - -template -inline void multGammaZGamma5(iVector &ret, const iVector &rhs) -{ - ret(0) = timesMinusI(rhs(2)); - ret(1) = timesI(rhs(3)); - ret(2) = timesMinusI(rhs(0)); - ret(3) = timesI(rhs(1)); -}; - -template -inline void lmultGammaZGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesMinusI(rhs(2, i)); - ret(1, i) = timesI(rhs(3, i)); - ret(2, i) = timesMinusI(rhs(0, i)); - ret(3, i) = timesI(rhs(1, i)); - } -}; - -template -inline void rmultGammaZGamma5(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesMinusI(rhs(i, 2)); - ret(i, 1) = timesI(rhs(i, 3)); - ret(i, 2) = timesMinusI(rhs(i, 0)); - ret(i, 3) = timesI(rhs(i, 1)); - } -}; - -template -inline void multMinusIdentity(iVector &ret, const iVector &rhs) -{ - ret(0) = -rhs(0); - ret(1) = -rhs(1); - ret(2) = -rhs(2); - ret(3) = -rhs(3); -}; - -template -inline void lmultMinusIdentity(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = -rhs(0, i); - ret(1, i) = -rhs(1, i); - ret(2, i) = -rhs(2, i); - ret(3, i) = -rhs(3, i); - } -}; - -template -inline void rmultMinusIdentity(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = -rhs(i, 0); - ret(i, 1) = -rhs(i, 1); - ret(i, 2) = -rhs(i, 2); - ret(i, 3) = -rhs(i, 3); - } -}; - -template -inline void multIdentity(iVector &ret, const iVector &rhs) -{ - ret(0) = rhs(0); - ret(1) = rhs(1); - ret(2) = rhs(2); - ret(3) = rhs(3); -}; - -template -inline void lmultIdentity(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = rhs(0, i); - ret(1, i) = rhs(1, i); - ret(2, i) = rhs(2, i); - ret(3, i) = rhs(3, i); - } -}; - -template -inline void rmultIdentity(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = rhs(i, 0); - ret(i, 1) = rhs(i, 1); - ret(i, 2) = rhs(i, 2); - ret(i, 3) = rhs(i, 3); - } -}; - -template -inline void multMinusSigmaXT(iVector &ret, const iVector &rhs) -{ - ret(0) = timesMinusI(rhs(1)); - ret(1) = timesMinusI(rhs(0)); - ret(2) = timesI(rhs(3)); - ret(3) = timesI(rhs(2)); -}; - -template -inline void lmultMinusSigmaXT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesMinusI(rhs(1, i)); - ret(1, i) = timesMinusI(rhs(0, i)); - ret(2, i) = timesI(rhs(3, i)); - ret(3, i) = timesI(rhs(2, i)); - } -}; - -template -inline void rmultMinusSigmaXT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesMinusI(rhs(i, 1)); - ret(i, 1) = timesMinusI(rhs(i, 0)); - ret(i, 2) = timesI(rhs(i, 3)); - ret(i, 3) = timesI(rhs(i, 2)); - } -}; - -template -inline void multSigmaXT(iVector &ret, const iVector &rhs) -{ - ret(0) = timesI(rhs(1)); - ret(1) = timesI(rhs(0)); - ret(2) = timesMinusI(rhs(3)); - ret(3) = timesMinusI(rhs(2)); -}; - -template -inline void lmultSigmaXT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesI(rhs(1, i)); - ret(1, i) = timesI(rhs(0, i)); - ret(2, i) = timesMinusI(rhs(3, i)); - ret(3, i) = timesMinusI(rhs(2, i)); - } -}; - -template -inline void rmultSigmaXT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesI(rhs(i, 1)); - ret(i, 1) = timesI(rhs(i, 0)); - ret(i, 2) = timesMinusI(rhs(i, 3)); - ret(i, 3) = timesMinusI(rhs(i, 2)); - } -}; - -template -inline void multMinusSigmaXY(iVector &ret, const iVector &rhs) -{ - ret(0) = timesI(rhs(0)); - ret(1) = timesMinusI(rhs(1)); - ret(2) = timesI(rhs(2)); - ret(3) = timesMinusI(rhs(3)); -}; - -template -inline void lmultMinusSigmaXY(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesI(rhs(0, i)); - ret(1, i) = timesMinusI(rhs(1, i)); - ret(2, i) = timesI(rhs(2, i)); - ret(3, i) = timesMinusI(rhs(3, i)); - } -}; - -template -inline void rmultMinusSigmaXY(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesI(rhs(i, 0)); - ret(i, 1) = timesMinusI(rhs(i, 1)); - ret(i, 2) = timesI(rhs(i, 2)); - ret(i, 3) = timesMinusI(rhs(i, 3)); - } -}; - -template -inline void multSigmaXY(iVector &ret, const iVector &rhs) -{ - ret(0) = timesMinusI(rhs(0)); - ret(1) = timesI(rhs(1)); - ret(2) = timesMinusI(rhs(2)); - ret(3) = timesI(rhs(3)); -}; - -template -inline void lmultSigmaXY(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesMinusI(rhs(0, i)); - ret(1, i) = timesI(rhs(1, i)); - ret(2, i) = timesMinusI(rhs(2, i)); - ret(3, i) = timesI(rhs(3, i)); - } -}; - -template -inline void rmultSigmaXY(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesMinusI(rhs(i, 0)); - ret(i, 1) = timesI(rhs(i, 1)); - ret(i, 2) = timesMinusI(rhs(i, 2)); - ret(i, 3) = timesI(rhs(i, 3)); - } -}; - -template -inline void multMinusSigmaXZ(iVector &ret, const iVector &rhs) -{ - ret(0) = rhs(1); - ret(1) = -rhs(0); - ret(2) = rhs(3); - ret(3) = -rhs(2); -}; - -template -inline void lmultMinusSigmaXZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = rhs(1, i); - ret(1, i) = -rhs(0, i); - ret(2, i) = rhs(3, i); - ret(3, i) = -rhs(2, i); - } -}; - -template -inline void rmultMinusSigmaXZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = -rhs(i, 1); - ret(i, 1) = rhs(i, 0); - ret(i, 2) = -rhs(i, 3); - ret(i, 3) = rhs(i, 2); - } -}; - -template -inline void multSigmaXZ(iVector &ret, const iVector &rhs) -{ - ret(0) = -rhs(1); - ret(1) = rhs(0); - ret(2) = -rhs(3); - ret(3) = rhs(2); -}; - -template -inline void lmultSigmaXZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = -rhs(1, i); - ret(1, i) = rhs(0, i); - ret(2, i) = -rhs(3, i); - ret(3, i) = rhs(2, i); - } -}; - -template -inline void rmultSigmaXZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = rhs(i, 1); - ret(i, 1) = -rhs(i, 0); - ret(i, 2) = rhs(i, 3); - ret(i, 3) = -rhs(i, 2); - } -}; - -template -inline void multMinusSigmaYT(iVector &ret, const iVector &rhs) -{ - ret(0) = rhs(1); - ret(1) = -rhs(0); - ret(2) = -rhs(3); - ret(3) = rhs(2); -}; - -template -inline void lmultMinusSigmaYT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = rhs(1, i); - ret(1, i) = -rhs(0, i); - ret(2, i) = -rhs(3, i); - ret(3, i) = rhs(2, i); - } -}; - -template -inline void rmultMinusSigmaYT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = -rhs(i, 1); - ret(i, 1) = rhs(i, 0); - ret(i, 2) = rhs(i, 3); - ret(i, 3) = -rhs(i, 2); - } -}; - -template -inline void multSigmaYT(iVector &ret, const iVector &rhs) -{ - ret(0) = -rhs(1); - ret(1) = rhs(0); - ret(2) = rhs(3); - ret(3) = -rhs(2); -}; - -template -inline void lmultSigmaYT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = -rhs(1, i); - ret(1, i) = rhs(0, i); - ret(2, i) = rhs(3, i); - ret(3, i) = -rhs(2, i); - } -}; - -template -inline void rmultSigmaYT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = rhs(i, 1); - ret(i, 1) = -rhs(i, 0); - ret(i, 2) = -rhs(i, 3); - ret(i, 3) = rhs(i, 2); - } -}; - -template -inline void multMinusSigmaYZ(iVector &ret, const iVector &rhs) -{ - ret(0) = timesI(rhs(1)); - ret(1) = timesI(rhs(0)); - ret(2) = timesI(rhs(3)); - ret(3) = timesI(rhs(2)); -}; - -template -inline void lmultMinusSigmaYZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesI(rhs(1, i)); - ret(1, i) = timesI(rhs(0, i)); - ret(2, i) = timesI(rhs(3, i)); - ret(3, i) = timesI(rhs(2, i)); - } -}; - -template -inline void rmultMinusSigmaYZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesI(rhs(i, 1)); - ret(i, 1) = timesI(rhs(i, 0)); - ret(i, 2) = timesI(rhs(i, 3)); - ret(i, 3) = timesI(rhs(i, 2)); - } -}; - -template -inline void multSigmaYZ(iVector &ret, const iVector &rhs) -{ - ret(0) = timesMinusI(rhs(1)); - ret(1) = timesMinusI(rhs(0)); - ret(2) = timesMinusI(rhs(3)); - ret(3) = timesMinusI(rhs(2)); -}; - -template -inline void lmultSigmaYZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesMinusI(rhs(1, i)); - ret(1, i) = timesMinusI(rhs(0, i)); - ret(2, i) = timesMinusI(rhs(3, i)); - ret(3, i) = timesMinusI(rhs(2, i)); - } -}; - -template -inline void rmultSigmaYZ(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesMinusI(rhs(i, 1)); - ret(i, 1) = timesMinusI(rhs(i, 0)); - ret(i, 2) = timesMinusI(rhs(i, 3)); - ret(i, 3) = timesMinusI(rhs(i, 2)); - } -}; - -template -inline void multMinusSigmaZT(iVector &ret, const iVector &rhs) -{ - ret(0) = timesMinusI(rhs(0)); - ret(1) = timesI(rhs(1)); - ret(2) = timesI(rhs(2)); - ret(3) = timesMinusI(rhs(3)); -}; - -template -inline void lmultMinusSigmaZT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesMinusI(rhs(0, i)); - ret(1, i) = timesI(rhs(1, i)); - ret(2, i) = timesI(rhs(2, i)); - ret(3, i) = timesMinusI(rhs(3, i)); - } -}; - -template -inline void rmultMinusSigmaZT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesMinusI(rhs(i, 0)); - ret(i, 1) = timesI(rhs(i, 1)); - ret(i, 2) = timesI(rhs(i, 2)); - ret(i, 3) = timesMinusI(rhs(i, 3)); - } -}; - -template -inline void multSigmaZT(iVector &ret, const iVector &rhs) -{ - ret(0) = timesI(rhs(0)); - ret(1) = timesMinusI(rhs(1)); - ret(2) = timesMinusI(rhs(2)); - ret(3) = timesI(rhs(3)); -}; - -template -inline void lmultSigmaZT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(0, i) = timesI(rhs(0, i)); - ret(1, i) = timesMinusI(rhs(1, i)); - ret(2, i) = timesMinusI(rhs(2, i)); - ret(3, i) = timesI(rhs(3, i)); - } -}; - -template -inline void rmultSigmaZT(iMatrix &ret, const iMatrix &rhs) -{ - for(unsigned int i = 0; i < Ns; ++i) - { - ret(i, 0) = timesI(rhs(i, 0)); - ret(i, 1) = timesMinusI(rhs(i, 1)); - ret(i, 2) = timesMinusI(rhs(i, 2)); - ret(i, 3) = timesI(rhs(i, 3)); - } -}; - - -// FIXME -// -// Optimisation; switch over to a "multGammaX(ret._internal,arg._internal)" style early and -// note that doing so from the lattice operator will avoid copy back and case switch overhead, as -// was done for the tensor math operator to remove operator * notation early -// + return Gamma (Gamma::mul[g1.g][g2.g]); +} -//left multiply +// general left multiply template inline auto operator*(const Gamma &G, const iScalar &arg) ->typename std::enable_if,SpinorIndex>::notvalue,iScalar>::type @@ -1184,7 +86,7 @@ inline auto operator*(const Gamma &G, const iMatrix &arg) return ret; } -//right multiply +// general right multiply template inline auto operator*(const iScalar &arg, const Gamma &G) ->typename std::enable_if,SpinorIndex>::notvalue,iScalar>::type @@ -1206,247 +108,125 @@ inline auto operator * (const iMatrix &arg, const Gamma &G) return ret; } +// Gamma-left matrices gL_mu = g_mu*(1 - g5) +//////////////////////////////////////////////////////////////////////////////// +class GammaL +{ +public: + typedef Gamma::Algebra Algebra; + Gamma gamma; +public: + GammaL(const Algebra initg): gamma(initg) {} + GammaL(const Gamma initg): gamma(initg) {} +}; + +// vector multiply template -inline auto operator*(const Gamma &G, const iVector &arg) +inline auto operator*(const GammaL &gl, const iVector &arg) ->typename std::enable_if, SpinorIndex>::value, iVector>::type { - iVector ret; - - switch (G.g) - { - case Gamma::Algebra::MinusGamma5: - multMinusGamma5(ret, arg); break; - case Gamma::Algebra::Gamma5: - multGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaT: - multMinusGammaT(ret, arg); break; - case Gamma::Algebra::GammaT: - multGammaT(ret, arg); break; - case Gamma::Algebra::MinusGammaTGamma5: - multMinusGammaTGamma5(ret, arg); break; - case Gamma::Algebra::GammaTGamma5: - multGammaTGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaX: - multMinusGammaX(ret, arg); break; - case Gamma::Algebra::GammaX: - multGammaX(ret, arg); break; - case Gamma::Algebra::MinusGammaXGamma5: - multMinusGammaXGamma5(ret, arg); break; - case Gamma::Algebra::GammaXGamma5: - multGammaXGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaY: - multMinusGammaY(ret, arg); break; - case Gamma::Algebra::GammaY: - multGammaY(ret, arg); break; - case Gamma::Algebra::MinusGammaYGamma5: - multMinusGammaYGamma5(ret, arg); break; - case Gamma::Algebra::GammaYGamma5: - multGammaYGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaZ: - multMinusGammaZ(ret, arg); break; - case Gamma::Algebra::GammaZ: - multGammaZ(ret, arg); break; - case Gamma::Algebra::MinusGammaZGamma5: - multMinusGammaZGamma5(ret, arg); break; - case Gamma::Algebra::GammaZGamma5: - multGammaZGamma5(ret, arg); break; - case Gamma::Algebra::MinusIdentity: - multMinusIdentity(ret, arg); break; - case Gamma::Algebra::Identity: - multIdentity(ret, arg); break; - case Gamma::Algebra::MinusSigmaXT: - multMinusSigmaXT(ret, arg); break; - case Gamma::Algebra::SigmaXT: - multSigmaXT(ret, arg); break; - case Gamma::Algebra::MinusSigmaXY: - multMinusSigmaXY(ret, arg); break; - case Gamma::Algebra::SigmaXY: - multSigmaXY(ret, arg); break; - case Gamma::Algebra::MinusSigmaXZ: - multMinusSigmaXZ(ret, arg); break; - case Gamma::Algebra::SigmaXZ: - multSigmaXZ(ret, arg); break; - case Gamma::Algebra::MinusSigmaYT: - multMinusSigmaYT(ret, arg); break; - case Gamma::Algebra::SigmaYT: - multSigmaYT(ret, arg); break; - case Gamma::Algebra::MinusSigmaYZ: - multMinusSigmaYZ(ret, arg); break; - case Gamma::Algebra::SigmaYZ: - multSigmaYZ(ret, arg); break; - case Gamma::Algebra::MinusSigmaZT: - multMinusSigmaZT(ret, arg); break; - case Gamma::Algebra::SigmaZT: - multSigmaZT(ret, arg); break; - default: assert(0); - } + iVector buf; - return ret; -} + buf(0) = 0.; + buf(1) = 0.; + buf(2) = 2.*arg(2); + buf(3) = 2.*arg(3); + + return gl.gamma*buf; +}; +// matrix left multiply template -inline auto operator*(const Gamma &G, const iMatrix &arg) +inline auto operator*(const GammaL &gl, const iMatrix &arg) ->typename std::enable_if, SpinorIndex>::value, iMatrix>::type { - iMatrix ret; - - switch (G.g) + iMatrix buf; + + for(unsigned int i = 0; i < Ns; ++i) { - case Gamma::Algebra::MinusGamma5: - lmultMinusGamma5(ret, arg); break; - case Gamma::Algebra::Gamma5: - lmultGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaT: - lmultMinusGammaT(ret, arg); break; - case Gamma::Algebra::GammaT: - lmultGammaT(ret, arg); break; - case Gamma::Algebra::MinusGammaTGamma5: - lmultMinusGammaTGamma5(ret, arg); break; - case Gamma::Algebra::GammaTGamma5: - lmultGammaTGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaX: - lmultMinusGammaX(ret, arg); break; - case Gamma::Algebra::GammaX: - lmultGammaX(ret, arg); break; - case Gamma::Algebra::MinusGammaXGamma5: - lmultMinusGammaXGamma5(ret, arg); break; - case Gamma::Algebra::GammaXGamma5: - lmultGammaXGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaY: - lmultMinusGammaY(ret, arg); break; - case Gamma::Algebra::GammaY: - lmultGammaY(ret, arg); break; - case Gamma::Algebra::MinusGammaYGamma5: - lmultMinusGammaYGamma5(ret, arg); break; - case Gamma::Algebra::GammaYGamma5: - lmultGammaYGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaZ: - lmultMinusGammaZ(ret, arg); break; - case Gamma::Algebra::GammaZ: - lmultGammaZ(ret, arg); break; - case Gamma::Algebra::MinusGammaZGamma5: - lmultMinusGammaZGamma5(ret, arg); break; - case Gamma::Algebra::GammaZGamma5: - lmultGammaZGamma5(ret, arg); break; - case Gamma::Algebra::MinusIdentity: - lmultMinusIdentity(ret, arg); break; - case Gamma::Algebra::Identity: - lmultIdentity(ret, arg); break; - case Gamma::Algebra::MinusSigmaXT: - lmultMinusSigmaXT(ret, arg); break; - case Gamma::Algebra::SigmaXT: - lmultSigmaXT(ret, arg); break; - case Gamma::Algebra::MinusSigmaXY: - lmultMinusSigmaXY(ret, arg); break; - case Gamma::Algebra::SigmaXY: - lmultSigmaXY(ret, arg); break; - case Gamma::Algebra::MinusSigmaXZ: - lmultMinusSigmaXZ(ret, arg); break; - case Gamma::Algebra::SigmaXZ: - lmultSigmaXZ(ret, arg); break; - case Gamma::Algebra::MinusSigmaYT: - lmultMinusSigmaYT(ret, arg); break; - case Gamma::Algebra::SigmaYT: - lmultSigmaYT(ret, arg); break; - case Gamma::Algebra::MinusSigmaYZ: - lmultMinusSigmaYZ(ret, arg); break; - case Gamma::Algebra::SigmaYZ: - lmultSigmaYZ(ret, arg); break; - case Gamma::Algebra::MinusSigmaZT: - lmultMinusSigmaZT(ret, arg); break; - case Gamma::Algebra::SigmaZT: - lmultSigmaZT(ret, arg); break; - default: assert(0); + buf(0, i) = 0.; + buf(1, i) = 0.; + buf(2, i) = 2.*arg(2, i); + buf(3, i) = 2.*arg(3, i); } - return ret; -} + return gl.gamma*buf; +}; +// matrix right multiply template -inline auto operator*(const iMatrix &arg, const Gamma &G) +inline auto operator*(const iMatrix &arg, const GammaL &gl) ->typename std::enable_if, SpinorIndex>::value, iMatrix>::type { - iMatrix ret; - - switch (G.g) + iMatrix buf; + + buf = arg*gl.gamma; + for(unsigned int i = 0; i < Ns; ++i) { - case Gamma::Algebra::MinusGamma5: - rmultMinusGamma5(ret, arg); break; - case Gamma::Algebra::Gamma5: - rmultGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaT: - rmultMinusGammaT(ret, arg); break; - case Gamma::Algebra::GammaT: - rmultGammaT(ret, arg); break; - case Gamma::Algebra::MinusGammaTGamma5: - rmultMinusGammaTGamma5(ret, arg); break; - case Gamma::Algebra::GammaTGamma5: - rmultGammaTGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaX: - rmultMinusGammaX(ret, arg); break; - case Gamma::Algebra::GammaX: - rmultGammaX(ret, arg); break; - case Gamma::Algebra::MinusGammaXGamma5: - rmultMinusGammaXGamma5(ret, arg); break; - case Gamma::Algebra::GammaXGamma5: - rmultGammaXGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaY: - rmultMinusGammaY(ret, arg); break; - case Gamma::Algebra::GammaY: - rmultGammaY(ret, arg); break; - case Gamma::Algebra::MinusGammaYGamma5: - rmultMinusGammaYGamma5(ret, arg); break; - case Gamma::Algebra::GammaYGamma5: - rmultGammaYGamma5(ret, arg); break; - case Gamma::Algebra::MinusGammaZ: - rmultMinusGammaZ(ret, arg); break; - case Gamma::Algebra::GammaZ: - rmultGammaZ(ret, arg); break; - case Gamma::Algebra::MinusGammaZGamma5: - rmultMinusGammaZGamma5(ret, arg); break; - case Gamma::Algebra::GammaZGamma5: - rmultGammaZGamma5(ret, arg); break; - case Gamma::Algebra::MinusIdentity: - rmultMinusIdentity(ret, arg); break; - case Gamma::Algebra::Identity: - rmultIdentity(ret, arg); break; - case Gamma::Algebra::MinusSigmaXT: - rmultMinusSigmaXT(ret, arg); break; - case Gamma::Algebra::SigmaXT: - rmultSigmaXT(ret, arg); break; - case Gamma::Algebra::MinusSigmaXY: - rmultMinusSigmaXY(ret, arg); break; - case Gamma::Algebra::SigmaXY: - rmultSigmaXY(ret, arg); break; - case Gamma::Algebra::MinusSigmaXZ: - rmultMinusSigmaXZ(ret, arg); break; - case Gamma::Algebra::SigmaXZ: - rmultSigmaXZ(ret, arg); break; - case Gamma::Algebra::MinusSigmaYT: - rmultMinusSigmaYT(ret, arg); break; - case Gamma::Algebra::SigmaYT: - rmultSigmaYT(ret, arg); break; - case Gamma::Algebra::MinusSigmaYZ: - rmultMinusSigmaYZ(ret, arg); break; - case Gamma::Algebra::SigmaYZ: - rmultSigmaYZ(ret, arg); break; - case Gamma::Algebra::MinusSigmaZT: - rmultMinusSigmaZT(ret, arg); break; - case Gamma::Algebra::SigmaZT: - rmultSigmaZT(ret, arg); break; - default: assert(0); + buf(i, 0) = 0.; + buf(i, 1) = 0.; + buf(i, 2) = 2.*buf(i, 2); + buf(i, 3) = 2.*buf(i, 3); } + return buf; +}; + +//general left multiply +template +inline auto operator*(const GammaL &gl, const iScalar &arg) +->typename std::enable_if,SpinorIndex>::notvalue,iScalar>::type +{ + iScalar ret; + ret._internal=gl*arg._internal; return ret; } -} - -inline QCD::Gamma adj(const QCD::Gamma &g) +template +inline auto operator*(const GammaL &gl, const iVector &arg) +->typename std::enable_if,SpinorIndex>::notvalue,iVector>::type { - return QCD::Gamma(QCD::Gamma::adj[g.g]); + iVector ret; + for(int i=0;i +inline auto operator*(const GammaL &gl, const iMatrix &arg) +->typename std::enable_if,SpinorIndex>::notvalue,iMatrix>::type +{ + iMatrix ret; + for(int i=0;i +inline auto operator*(const iScalar &arg, const GammaL &gl) +->typename std::enable_if,SpinorIndex>::notvalue,iScalar>::type +{ + iScalar ret; + ret._internal=arg._internal*gl; + return ret; +} + +template +inline auto operator * (const iMatrix &arg, const GammaL &gl) +->typename std::enable_if,SpinorIndex>::notvalue,iMatrix>::type +{ + iMatrix ret; + for(int i=0;i -Source file: lib/qcd/spin/GammaMulTable.h +namespace Grid { +namespace QCD { -Copyright (C) 2015 -Copyright (C) 2016 +const std::array Gamma::gmu = {{ + Gamma(Gamma::Algebra::GammaX), + Gamma(Gamma::Algebra::GammaY), + Gamma(Gamma::Algebra::GammaZ), + Gamma(Gamma::Algebra::GammaT)}}; -Author: Antonin Portelli +const std::array Gamma::name = {{ + "-Gamma5 ", + "Gamma5 ", + "-GammaT ", + "GammaT ", + "-GammaTGamma5", + "GammaTGamma5 ", + "-GammaX ", + "GammaX ", + "-GammaXGamma5", + "GammaXGamma5 ", + "-GammaY ", + "GammaY ", + "-GammaYGamma5", + "GammaYGamma5 ", + "-GammaZ ", + "GammaZ ", + "-GammaZGamma5", + "GammaZGamma5 ", + "-Identity ", + "Identity ", + "-SigmaXT ", + "SigmaXT ", + "-SigmaXY ", + "SigmaXY ", + "-SigmaXZ ", + "SigmaXZ ", + "-SigmaYT ", + "SigmaYT ", + "-SigmaYZ ", + "SigmaYZ ", + "-SigmaZT ", + "SigmaZT "}}; -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -See the full license in the file "LICENSE" in the top level distribution directory -*************************************************************************************/ -/* END LEGAL */ -const std::array, Gamma::nGamma> -Gamma::mul = {{ - {Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY} - , - {Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY} - , - {Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ} - , - {Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ} - , - {Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5} - , - {Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5} - , - {Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5} - , - {Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5} - , - {Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY} - , - {Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY} - , - {Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5} - , - {Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5} - , - {Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX} - , - {Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX} - , - {Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT} - , - {Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT} - , - {Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5} - , - {Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5} - , - {Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT} - , - {Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT} - , - {Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ} - , - {Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ} - , - {Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5} - , - {Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5} - , - {Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT} - , - {Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT} - , - {Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ} - , - {Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ} - , - {Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT} - , - {Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT} - , - {Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::SigmaXY, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::GammaY, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaX, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::Gamma5, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusIdentity, - Gamma::Algebra::Identity} - , - {Gamma::Algebra::SigmaXY, - Gamma::Algebra::MinusSigmaXY, - Gamma::Algebra::MinusGammaZ, - Gamma::Algebra::GammaZ, - Gamma::Algebra::MinusGammaZGamma5, - Gamma::Algebra::GammaZGamma5, - Gamma::Algebra::GammaYGamma5, - Gamma::Algebra::MinusGammaYGamma5, - Gamma::Algebra::GammaY, - Gamma::Algebra::MinusGammaY, - Gamma::Algebra::MinusGammaXGamma5, - Gamma::Algebra::GammaXGamma5, - Gamma::Algebra::MinusGammaX, - Gamma::Algebra::GammaX, - Gamma::Algebra::GammaT, - Gamma::Algebra::MinusGammaT, - Gamma::Algebra::GammaTGamma5, - Gamma::Algebra::MinusGammaTGamma5, - Gamma::Algebra::MinusSigmaZT, - Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaXZ, - Gamma::Algebra::SigmaXZ, - Gamma::Algebra::MinusGamma5, - Gamma::Algebra::Gamma5, - Gamma::Algebra::SigmaXT, - Gamma::Algebra::MinusSigmaXT, - Gamma::Algebra::MinusSigmaYZ, - Gamma::Algebra::SigmaYZ, - Gamma::Algebra::SigmaYT, - Gamma::Algebra::MinusSigmaYT, - Gamma::Algebra::Identity, - Gamma::Algebra::MinusIdentity} -}}; - -const std::array Gamma::adj = { +const std::array Gamma::adj = {{ Gamma::Algebra::MinusGamma5, Gamma::Algebra::Gamma5, Gamma::Algebra::MinusGammaT, @@ -1117,5 +77,1064 @@ const std::array Gamma::adj = { Gamma::Algebra::SigmaYZ, Gamma::Algebra::MinusSigmaYZ, Gamma::Algebra::SigmaZT, - Gamma::Algebra::MinusSigmaZT -}; + Gamma::Algebra::MinusSigmaZT}}; + +const std::array, Gamma::nGamma> Gamma::mul = {{ + {{Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY}} + , + {{Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY}} + , + {{Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ}} + , + {{Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ}} + , + {{Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5}} + , + {{Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5}} + , + {{Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5}} + , + {{Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5}} + , + {{Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY}} + , + {{Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY}} + , + {{Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5}} + , + {{Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5}} + , + {{Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX}} + , + {{Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX}} + , + {{Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT}} + , + {{Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT}} + , + {{Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5}} + , + {{Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5}} + , + {{Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT}} + , + {{Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT}} + , + {{Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ}} + , + {{Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ}} + , + {{Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5}} + , + {{Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5}} + , + {{Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT}} + , + {{Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT}} + , + {{Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ}} + , + {{Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ}} + , + {{Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT}} + , + {{Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT}} + , + {{Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::SigmaXY, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::GammaY, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaX, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::Gamma5, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusIdentity, + Gamma::Algebra::Identity}} + , + {{Gamma::Algebra::SigmaXY, + Gamma::Algebra::MinusSigmaXY, + Gamma::Algebra::MinusGammaZ, + Gamma::Algebra::GammaZ, + Gamma::Algebra::MinusGammaZGamma5, + Gamma::Algebra::GammaZGamma5, + Gamma::Algebra::GammaYGamma5, + Gamma::Algebra::MinusGammaYGamma5, + Gamma::Algebra::GammaY, + Gamma::Algebra::MinusGammaY, + Gamma::Algebra::MinusGammaXGamma5, + Gamma::Algebra::GammaXGamma5, + Gamma::Algebra::MinusGammaX, + Gamma::Algebra::GammaX, + Gamma::Algebra::GammaT, + Gamma::Algebra::MinusGammaT, + Gamma::Algebra::GammaTGamma5, + Gamma::Algebra::MinusGammaTGamma5, + Gamma::Algebra::MinusSigmaZT, + Gamma::Algebra::SigmaZT, + Gamma::Algebra::MinusSigmaXZ, + Gamma::Algebra::SigmaXZ, + Gamma::Algebra::MinusGamma5, + Gamma::Algebra::Gamma5, + Gamma::Algebra::SigmaXT, + Gamma::Algebra::MinusSigmaXT, + Gamma::Algebra::MinusSigmaYZ, + Gamma::Algebra::SigmaYZ, + Gamma::Algebra::SigmaYT, + Gamma::Algebra::MinusSigmaYT, + Gamma::Algebra::Identity, + Gamma::Algebra::MinusIdentity}} +}}; + +}} diff --git a/lib/qcd/spin/Gamma.h b/lib/qcd/spin/Gamma.h new file mode 100644 index 00000000..bc32eab9 --- /dev/null +++ b/lib/qcd/spin/Gamma.h @@ -0,0 +1,1348 @@ +#ifndef GRID_QCD_GAMMA_H +#define GRID_QCD_GAMMA_H + +// code generated by the Mathematica notebook gamma-gen/gamma-gen.nb + +#include + +namespace Grid { +namespace QCD { + +class Gamma { + public: + GRID_SERIALIZABLE_ENUM(Algebra, undef, + MinusGamma5 , 0, + Gamma5 , 1, + MinusGammaT , 2, + GammaT , 3, + MinusGammaTGamma5, 4, + GammaTGamma5 , 5, + MinusGammaX , 6, + GammaX , 7, + MinusGammaXGamma5, 8, + GammaXGamma5 , 9, + MinusGammaY , 10, + GammaY , 11, + MinusGammaYGamma5, 12, + GammaYGamma5 , 13, + MinusGammaZ , 14, + GammaZ , 15, + MinusGammaZGamma5, 16, + GammaZGamma5 , 17, + MinusIdentity , 18, + Identity , 19, + MinusSigmaXT , 20, + SigmaXT , 21, + MinusSigmaXY , 22, + SigmaXY , 23, + MinusSigmaXZ , 24, + SigmaXZ , 25, + MinusSigmaYT , 26, + SigmaYT , 27, + MinusSigmaYZ , 28, + SigmaYZ , 29, + MinusSigmaZT , 30, + SigmaZT , 31); + static constexpr unsigned int nGamma = 32; + static const std::array name; + static const std::array, nGamma> mul; + static const std::array adj; + static const std::array gmu; + Algebra g; + public: + Gamma(Algebra initg): g(initg) {} +}; + +template +inline void multMinusGamma5(iVector &ret, const iVector &rhs) +{ + ret(0) = -rhs(0); + ret(1) = -rhs(1); + ret(2) = rhs(2); + ret(3) = rhs(3); +}; + +template +inline void lmultMinusGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = -rhs(0, i); + ret(1, i) = -rhs(1, i); + ret(2, i) = rhs(2, i); + ret(3, i) = rhs(3, i); + } +}; + +template +inline void rmultMinusGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = -rhs(i, 0); + ret(i, 1) = -rhs(i, 1); + ret(i, 2) = rhs(i, 2); + ret(i, 3) = rhs(i, 3); + } +}; + +template +inline void multGamma5(iVector &ret, const iVector &rhs) +{ + ret(0) = rhs(0); + ret(1) = rhs(1); + ret(2) = -rhs(2); + ret(3) = -rhs(3); +}; + +template +inline void lmultGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = rhs(0, i); + ret(1, i) = rhs(1, i); + ret(2, i) = -rhs(2, i); + ret(3, i) = -rhs(3, i); + } +}; + +template +inline void rmultGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = rhs(i, 0); + ret(i, 1) = rhs(i, 1); + ret(i, 2) = -rhs(i, 2); + ret(i, 3) = -rhs(i, 3); + } +}; + +template +inline void multMinusGammaT(iVector &ret, const iVector &rhs) +{ + ret(0) = -rhs(2); + ret(1) = -rhs(3); + ret(2) = -rhs(0); + ret(3) = -rhs(1); +}; + +template +inline void lmultMinusGammaT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = -rhs(2, i); + ret(1, i) = -rhs(3, i); + ret(2, i) = -rhs(0, i); + ret(3, i) = -rhs(1, i); + } +}; + +template +inline void rmultMinusGammaT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = -rhs(i, 2); + ret(i, 1) = -rhs(i, 3); + ret(i, 2) = -rhs(i, 0); + ret(i, 3) = -rhs(i, 1); + } +}; + +template +inline void multGammaT(iVector &ret, const iVector &rhs) +{ + ret(0) = rhs(2); + ret(1) = rhs(3); + ret(2) = rhs(0); + ret(3) = rhs(1); +}; + +template +inline void lmultGammaT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = rhs(2, i); + ret(1, i) = rhs(3, i); + ret(2, i) = rhs(0, i); + ret(3, i) = rhs(1, i); + } +}; + +template +inline void rmultGammaT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = rhs(i, 2); + ret(i, 1) = rhs(i, 3); + ret(i, 2) = rhs(i, 0); + ret(i, 3) = rhs(i, 1); + } +}; + +template +inline void multMinusGammaTGamma5(iVector &ret, const iVector &rhs) +{ + ret(0) = rhs(2); + ret(1) = rhs(3); + ret(2) = -rhs(0); + ret(3) = -rhs(1); +}; + +template +inline void lmultMinusGammaTGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = rhs(2, i); + ret(1, i) = rhs(3, i); + ret(2, i) = -rhs(0, i); + ret(3, i) = -rhs(1, i); + } +}; + +template +inline void rmultMinusGammaTGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = -rhs(i, 2); + ret(i, 1) = -rhs(i, 3); + ret(i, 2) = rhs(i, 0); + ret(i, 3) = rhs(i, 1); + } +}; + +template +inline void multGammaTGamma5(iVector &ret, const iVector &rhs) +{ + ret(0) = -rhs(2); + ret(1) = -rhs(3); + ret(2) = rhs(0); + ret(3) = rhs(1); +}; + +template +inline void lmultGammaTGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = -rhs(2, i); + ret(1, i) = -rhs(3, i); + ret(2, i) = rhs(0, i); + ret(3, i) = rhs(1, i); + } +}; + +template +inline void rmultGammaTGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = rhs(i, 2); + ret(i, 1) = rhs(i, 3); + ret(i, 2) = -rhs(i, 0); + ret(i, 3) = -rhs(i, 1); + } +}; + +template +inline void multMinusGammaX(iVector &ret, const iVector &rhs) +{ + ret(0) = timesMinusI(rhs(3)); + ret(1) = timesMinusI(rhs(2)); + ret(2) = timesI(rhs(1)); + ret(3) = timesI(rhs(0)); +}; + +template +inline void lmultMinusGammaX(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesMinusI(rhs(3, i)); + ret(1, i) = timesMinusI(rhs(2, i)); + ret(2, i) = timesI(rhs(1, i)); + ret(3, i) = timesI(rhs(0, i)); + } +}; + +template +inline void rmultMinusGammaX(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesI(rhs(i, 3)); + ret(i, 1) = timesI(rhs(i, 2)); + ret(i, 2) = timesMinusI(rhs(i, 1)); + ret(i, 3) = timesMinusI(rhs(i, 0)); + } +}; + +template +inline void multGammaX(iVector &ret, const iVector &rhs) +{ + ret(0) = timesI(rhs(3)); + ret(1) = timesI(rhs(2)); + ret(2) = timesMinusI(rhs(1)); + ret(3) = timesMinusI(rhs(0)); +}; + +template +inline void lmultGammaX(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesI(rhs(3, i)); + ret(1, i) = timesI(rhs(2, i)); + ret(2, i) = timesMinusI(rhs(1, i)); + ret(3, i) = timesMinusI(rhs(0, i)); + } +}; + +template +inline void rmultGammaX(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesMinusI(rhs(i, 3)); + ret(i, 1) = timesMinusI(rhs(i, 2)); + ret(i, 2) = timesI(rhs(i, 1)); + ret(i, 3) = timesI(rhs(i, 0)); + } +}; + +template +inline void multMinusGammaXGamma5(iVector &ret, const iVector &rhs) +{ + ret(0) = timesI(rhs(3)); + ret(1) = timesI(rhs(2)); + ret(2) = timesI(rhs(1)); + ret(3) = timesI(rhs(0)); +}; + +template +inline void lmultMinusGammaXGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesI(rhs(3, i)); + ret(1, i) = timesI(rhs(2, i)); + ret(2, i) = timesI(rhs(1, i)); + ret(3, i) = timesI(rhs(0, i)); + } +}; + +template +inline void rmultMinusGammaXGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesI(rhs(i, 3)); + ret(i, 1) = timesI(rhs(i, 2)); + ret(i, 2) = timesI(rhs(i, 1)); + ret(i, 3) = timesI(rhs(i, 0)); + } +}; + +template +inline void multGammaXGamma5(iVector &ret, const iVector &rhs) +{ + ret(0) = timesMinusI(rhs(3)); + ret(1) = timesMinusI(rhs(2)); + ret(2) = timesMinusI(rhs(1)); + ret(3) = timesMinusI(rhs(0)); +}; + +template +inline void lmultGammaXGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesMinusI(rhs(3, i)); + ret(1, i) = timesMinusI(rhs(2, i)); + ret(2, i) = timesMinusI(rhs(1, i)); + ret(3, i) = timesMinusI(rhs(0, i)); + } +}; + +template +inline void rmultGammaXGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesMinusI(rhs(i, 3)); + ret(i, 1) = timesMinusI(rhs(i, 2)); + ret(i, 2) = timesMinusI(rhs(i, 1)); + ret(i, 3) = timesMinusI(rhs(i, 0)); + } +}; + +template +inline void multMinusGammaY(iVector &ret, const iVector &rhs) +{ + ret(0) = rhs(3); + ret(1) = -rhs(2); + ret(2) = -rhs(1); + ret(3) = rhs(0); +}; + +template +inline void lmultMinusGammaY(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = rhs(3, i); + ret(1, i) = -rhs(2, i); + ret(2, i) = -rhs(1, i); + ret(3, i) = rhs(0, i); + } +}; + +template +inline void rmultMinusGammaY(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = rhs(i, 3); + ret(i, 1) = -rhs(i, 2); + ret(i, 2) = -rhs(i, 1); + ret(i, 3) = rhs(i, 0); + } +}; + +template +inline void multGammaY(iVector &ret, const iVector &rhs) +{ + ret(0) = -rhs(3); + ret(1) = rhs(2); + ret(2) = rhs(1); + ret(3) = -rhs(0); +}; + +template +inline void lmultGammaY(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = -rhs(3, i); + ret(1, i) = rhs(2, i); + ret(2, i) = rhs(1, i); + ret(3, i) = -rhs(0, i); + } +}; + +template +inline void rmultGammaY(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = -rhs(i, 3); + ret(i, 1) = rhs(i, 2); + ret(i, 2) = rhs(i, 1); + ret(i, 3) = -rhs(i, 0); + } +}; + +template +inline void multMinusGammaYGamma5(iVector &ret, const iVector &rhs) +{ + ret(0) = -rhs(3); + ret(1) = rhs(2); + ret(2) = -rhs(1); + ret(3) = rhs(0); +}; + +template +inline void lmultMinusGammaYGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = -rhs(3, i); + ret(1, i) = rhs(2, i); + ret(2, i) = -rhs(1, i); + ret(3, i) = rhs(0, i); + } +}; + +template +inline void rmultMinusGammaYGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = rhs(i, 3); + ret(i, 1) = -rhs(i, 2); + ret(i, 2) = rhs(i, 1); + ret(i, 3) = -rhs(i, 0); + } +}; + +template +inline void multGammaYGamma5(iVector &ret, const iVector &rhs) +{ + ret(0) = rhs(3); + ret(1) = -rhs(2); + ret(2) = rhs(1); + ret(3) = -rhs(0); +}; + +template +inline void lmultGammaYGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = rhs(3, i); + ret(1, i) = -rhs(2, i); + ret(2, i) = rhs(1, i); + ret(3, i) = -rhs(0, i); + } +}; + +template +inline void rmultGammaYGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = -rhs(i, 3); + ret(i, 1) = rhs(i, 2); + ret(i, 2) = -rhs(i, 1); + ret(i, 3) = rhs(i, 0); + } +}; + +template +inline void multMinusGammaZ(iVector &ret, const iVector &rhs) +{ + ret(0) = timesMinusI(rhs(2)); + ret(1) = timesI(rhs(3)); + ret(2) = timesI(rhs(0)); + ret(3) = timesMinusI(rhs(1)); +}; + +template +inline void lmultMinusGammaZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesMinusI(rhs(2, i)); + ret(1, i) = timesI(rhs(3, i)); + ret(2, i) = timesI(rhs(0, i)); + ret(3, i) = timesMinusI(rhs(1, i)); + } +}; + +template +inline void rmultMinusGammaZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesI(rhs(i, 2)); + ret(i, 1) = timesMinusI(rhs(i, 3)); + ret(i, 2) = timesMinusI(rhs(i, 0)); + ret(i, 3) = timesI(rhs(i, 1)); + } +}; + +template +inline void multGammaZ(iVector &ret, const iVector &rhs) +{ + ret(0) = timesI(rhs(2)); + ret(1) = timesMinusI(rhs(3)); + ret(2) = timesMinusI(rhs(0)); + ret(3) = timesI(rhs(1)); +}; + +template +inline void lmultGammaZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesI(rhs(2, i)); + ret(1, i) = timesMinusI(rhs(3, i)); + ret(2, i) = timesMinusI(rhs(0, i)); + ret(3, i) = timesI(rhs(1, i)); + } +}; + +template +inline void rmultGammaZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesMinusI(rhs(i, 2)); + ret(i, 1) = timesI(rhs(i, 3)); + ret(i, 2) = timesI(rhs(i, 0)); + ret(i, 3) = timesMinusI(rhs(i, 1)); + } +}; + +template +inline void multMinusGammaZGamma5(iVector &ret, const iVector &rhs) +{ + ret(0) = timesI(rhs(2)); + ret(1) = timesMinusI(rhs(3)); + ret(2) = timesI(rhs(0)); + ret(3) = timesMinusI(rhs(1)); +}; + +template +inline void lmultMinusGammaZGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesI(rhs(2, i)); + ret(1, i) = timesMinusI(rhs(3, i)); + ret(2, i) = timesI(rhs(0, i)); + ret(3, i) = timesMinusI(rhs(1, i)); + } +}; + +template +inline void rmultMinusGammaZGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesI(rhs(i, 2)); + ret(i, 1) = timesMinusI(rhs(i, 3)); + ret(i, 2) = timesI(rhs(i, 0)); + ret(i, 3) = timesMinusI(rhs(i, 1)); + } +}; + +template +inline void multGammaZGamma5(iVector &ret, const iVector &rhs) +{ + ret(0) = timesMinusI(rhs(2)); + ret(1) = timesI(rhs(3)); + ret(2) = timesMinusI(rhs(0)); + ret(3) = timesI(rhs(1)); +}; + +template +inline void lmultGammaZGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesMinusI(rhs(2, i)); + ret(1, i) = timesI(rhs(3, i)); + ret(2, i) = timesMinusI(rhs(0, i)); + ret(3, i) = timesI(rhs(1, i)); + } +}; + +template +inline void rmultGammaZGamma5(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesMinusI(rhs(i, 2)); + ret(i, 1) = timesI(rhs(i, 3)); + ret(i, 2) = timesMinusI(rhs(i, 0)); + ret(i, 3) = timesI(rhs(i, 1)); + } +}; + +template +inline void multMinusIdentity(iVector &ret, const iVector &rhs) +{ + ret(0) = -rhs(0); + ret(1) = -rhs(1); + ret(2) = -rhs(2); + ret(3) = -rhs(3); +}; + +template +inline void lmultMinusIdentity(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = -rhs(0, i); + ret(1, i) = -rhs(1, i); + ret(2, i) = -rhs(2, i); + ret(3, i) = -rhs(3, i); + } +}; + +template +inline void rmultMinusIdentity(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = -rhs(i, 0); + ret(i, 1) = -rhs(i, 1); + ret(i, 2) = -rhs(i, 2); + ret(i, 3) = -rhs(i, 3); + } +}; + +template +inline void multIdentity(iVector &ret, const iVector &rhs) +{ + ret(0) = rhs(0); + ret(1) = rhs(1); + ret(2) = rhs(2); + ret(3) = rhs(3); +}; + +template +inline void lmultIdentity(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = rhs(0, i); + ret(1, i) = rhs(1, i); + ret(2, i) = rhs(2, i); + ret(3, i) = rhs(3, i); + } +}; + +template +inline void rmultIdentity(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = rhs(i, 0); + ret(i, 1) = rhs(i, 1); + ret(i, 2) = rhs(i, 2); + ret(i, 3) = rhs(i, 3); + } +}; + +template +inline void multMinusSigmaXT(iVector &ret, const iVector &rhs) +{ + ret(0) = timesMinusI(rhs(1)); + ret(1) = timesMinusI(rhs(0)); + ret(2) = timesI(rhs(3)); + ret(3) = timesI(rhs(2)); +}; + +template +inline void lmultMinusSigmaXT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesMinusI(rhs(1, i)); + ret(1, i) = timesMinusI(rhs(0, i)); + ret(2, i) = timesI(rhs(3, i)); + ret(3, i) = timesI(rhs(2, i)); + } +}; + +template +inline void rmultMinusSigmaXT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesMinusI(rhs(i, 1)); + ret(i, 1) = timesMinusI(rhs(i, 0)); + ret(i, 2) = timesI(rhs(i, 3)); + ret(i, 3) = timesI(rhs(i, 2)); + } +}; + +template +inline void multSigmaXT(iVector &ret, const iVector &rhs) +{ + ret(0) = timesI(rhs(1)); + ret(1) = timesI(rhs(0)); + ret(2) = timesMinusI(rhs(3)); + ret(3) = timesMinusI(rhs(2)); +}; + +template +inline void lmultSigmaXT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesI(rhs(1, i)); + ret(1, i) = timesI(rhs(0, i)); + ret(2, i) = timesMinusI(rhs(3, i)); + ret(3, i) = timesMinusI(rhs(2, i)); + } +}; + +template +inline void rmultSigmaXT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesI(rhs(i, 1)); + ret(i, 1) = timesI(rhs(i, 0)); + ret(i, 2) = timesMinusI(rhs(i, 3)); + ret(i, 3) = timesMinusI(rhs(i, 2)); + } +}; + +template +inline void multMinusSigmaXY(iVector &ret, const iVector &rhs) +{ + ret(0) = timesI(rhs(0)); + ret(1) = timesMinusI(rhs(1)); + ret(2) = timesI(rhs(2)); + ret(3) = timesMinusI(rhs(3)); +}; + +template +inline void lmultMinusSigmaXY(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesI(rhs(0, i)); + ret(1, i) = timesMinusI(rhs(1, i)); + ret(2, i) = timesI(rhs(2, i)); + ret(3, i) = timesMinusI(rhs(3, i)); + } +}; + +template +inline void rmultMinusSigmaXY(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesI(rhs(i, 0)); + ret(i, 1) = timesMinusI(rhs(i, 1)); + ret(i, 2) = timesI(rhs(i, 2)); + ret(i, 3) = timesMinusI(rhs(i, 3)); + } +}; + +template +inline void multSigmaXY(iVector &ret, const iVector &rhs) +{ + ret(0) = timesMinusI(rhs(0)); + ret(1) = timesI(rhs(1)); + ret(2) = timesMinusI(rhs(2)); + ret(3) = timesI(rhs(3)); +}; + +template +inline void lmultSigmaXY(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesMinusI(rhs(0, i)); + ret(1, i) = timesI(rhs(1, i)); + ret(2, i) = timesMinusI(rhs(2, i)); + ret(3, i) = timesI(rhs(3, i)); + } +}; + +template +inline void rmultSigmaXY(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesMinusI(rhs(i, 0)); + ret(i, 1) = timesI(rhs(i, 1)); + ret(i, 2) = timesMinusI(rhs(i, 2)); + ret(i, 3) = timesI(rhs(i, 3)); + } +}; + +template +inline void multMinusSigmaXZ(iVector &ret, const iVector &rhs) +{ + ret(0) = rhs(1); + ret(1) = -rhs(0); + ret(2) = rhs(3); + ret(3) = -rhs(2); +}; + +template +inline void lmultMinusSigmaXZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = rhs(1, i); + ret(1, i) = -rhs(0, i); + ret(2, i) = rhs(3, i); + ret(3, i) = -rhs(2, i); + } +}; + +template +inline void rmultMinusSigmaXZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = -rhs(i, 1); + ret(i, 1) = rhs(i, 0); + ret(i, 2) = -rhs(i, 3); + ret(i, 3) = rhs(i, 2); + } +}; + +template +inline void multSigmaXZ(iVector &ret, const iVector &rhs) +{ + ret(0) = -rhs(1); + ret(1) = rhs(0); + ret(2) = -rhs(3); + ret(3) = rhs(2); +}; + +template +inline void lmultSigmaXZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = -rhs(1, i); + ret(1, i) = rhs(0, i); + ret(2, i) = -rhs(3, i); + ret(3, i) = rhs(2, i); + } +}; + +template +inline void rmultSigmaXZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = rhs(i, 1); + ret(i, 1) = -rhs(i, 0); + ret(i, 2) = rhs(i, 3); + ret(i, 3) = -rhs(i, 2); + } +}; + +template +inline void multMinusSigmaYT(iVector &ret, const iVector &rhs) +{ + ret(0) = rhs(1); + ret(1) = -rhs(0); + ret(2) = -rhs(3); + ret(3) = rhs(2); +}; + +template +inline void lmultMinusSigmaYT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = rhs(1, i); + ret(1, i) = -rhs(0, i); + ret(2, i) = -rhs(3, i); + ret(3, i) = rhs(2, i); + } +}; + +template +inline void rmultMinusSigmaYT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = -rhs(i, 1); + ret(i, 1) = rhs(i, 0); + ret(i, 2) = rhs(i, 3); + ret(i, 3) = -rhs(i, 2); + } +}; + +template +inline void multSigmaYT(iVector &ret, const iVector &rhs) +{ + ret(0) = -rhs(1); + ret(1) = rhs(0); + ret(2) = rhs(3); + ret(3) = -rhs(2); +}; + +template +inline void lmultSigmaYT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = -rhs(1, i); + ret(1, i) = rhs(0, i); + ret(2, i) = rhs(3, i); + ret(3, i) = -rhs(2, i); + } +}; + +template +inline void rmultSigmaYT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = rhs(i, 1); + ret(i, 1) = -rhs(i, 0); + ret(i, 2) = -rhs(i, 3); + ret(i, 3) = rhs(i, 2); + } +}; + +template +inline void multMinusSigmaYZ(iVector &ret, const iVector &rhs) +{ + ret(0) = timesI(rhs(1)); + ret(1) = timesI(rhs(0)); + ret(2) = timesI(rhs(3)); + ret(3) = timesI(rhs(2)); +}; + +template +inline void lmultMinusSigmaYZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesI(rhs(1, i)); + ret(1, i) = timesI(rhs(0, i)); + ret(2, i) = timesI(rhs(3, i)); + ret(3, i) = timesI(rhs(2, i)); + } +}; + +template +inline void rmultMinusSigmaYZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesI(rhs(i, 1)); + ret(i, 1) = timesI(rhs(i, 0)); + ret(i, 2) = timesI(rhs(i, 3)); + ret(i, 3) = timesI(rhs(i, 2)); + } +}; + +template +inline void multSigmaYZ(iVector &ret, const iVector &rhs) +{ + ret(0) = timesMinusI(rhs(1)); + ret(1) = timesMinusI(rhs(0)); + ret(2) = timesMinusI(rhs(3)); + ret(3) = timesMinusI(rhs(2)); +}; + +template +inline void lmultSigmaYZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesMinusI(rhs(1, i)); + ret(1, i) = timesMinusI(rhs(0, i)); + ret(2, i) = timesMinusI(rhs(3, i)); + ret(3, i) = timesMinusI(rhs(2, i)); + } +}; + +template +inline void rmultSigmaYZ(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesMinusI(rhs(i, 1)); + ret(i, 1) = timesMinusI(rhs(i, 0)); + ret(i, 2) = timesMinusI(rhs(i, 3)); + ret(i, 3) = timesMinusI(rhs(i, 2)); + } +}; + +template +inline void multMinusSigmaZT(iVector &ret, const iVector &rhs) +{ + ret(0) = timesMinusI(rhs(0)); + ret(1) = timesI(rhs(1)); + ret(2) = timesI(rhs(2)); + ret(3) = timesMinusI(rhs(3)); +}; + +template +inline void lmultMinusSigmaZT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesMinusI(rhs(0, i)); + ret(1, i) = timesI(rhs(1, i)); + ret(2, i) = timesI(rhs(2, i)); + ret(3, i) = timesMinusI(rhs(3, i)); + } +}; + +template +inline void rmultMinusSigmaZT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesMinusI(rhs(i, 0)); + ret(i, 1) = timesI(rhs(i, 1)); + ret(i, 2) = timesI(rhs(i, 2)); + ret(i, 3) = timesMinusI(rhs(i, 3)); + } +}; + +template +inline void multSigmaZT(iVector &ret, const iVector &rhs) +{ + ret(0) = timesI(rhs(0)); + ret(1) = timesMinusI(rhs(1)); + ret(2) = timesMinusI(rhs(2)); + ret(3) = timesI(rhs(3)); +}; + +template +inline void lmultSigmaZT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(0, i) = timesI(rhs(0, i)); + ret(1, i) = timesMinusI(rhs(1, i)); + ret(2, i) = timesMinusI(rhs(2, i)); + ret(3, i) = timesI(rhs(3, i)); + } +}; + +template +inline void rmultSigmaZT(iMatrix &ret, const iMatrix &rhs) +{ + for(unsigned int i = 0; i < Ns; ++i) + { + ret(i, 0) = timesI(rhs(i, 0)); + ret(i, 1) = timesMinusI(rhs(i, 1)); + ret(i, 2) = timesMinusI(rhs(i, 2)); + ret(i, 3) = timesI(rhs(i, 3)); + } +}; + +template +inline auto operator*(const Gamma &G, const iVector &arg) +->typename std::enable_if, SpinorIndex>::value, iVector>::type +{ + iVector ret; + + switch (G.g) + { + case Gamma::Algebra::MinusGamma5: + multMinusGamma5(ret, arg); break; + case Gamma::Algebra::Gamma5: + multGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaT: + multMinusGammaT(ret, arg); break; + case Gamma::Algebra::GammaT: + multGammaT(ret, arg); break; + case Gamma::Algebra::MinusGammaTGamma5: + multMinusGammaTGamma5(ret, arg); break; + case Gamma::Algebra::GammaTGamma5: + multGammaTGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaX: + multMinusGammaX(ret, arg); break; + case Gamma::Algebra::GammaX: + multGammaX(ret, arg); break; + case Gamma::Algebra::MinusGammaXGamma5: + multMinusGammaXGamma5(ret, arg); break; + case Gamma::Algebra::GammaXGamma5: + multGammaXGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaY: + multMinusGammaY(ret, arg); break; + case Gamma::Algebra::GammaY: + multGammaY(ret, arg); break; + case Gamma::Algebra::MinusGammaYGamma5: + multMinusGammaYGamma5(ret, arg); break; + case Gamma::Algebra::GammaYGamma5: + multGammaYGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaZ: + multMinusGammaZ(ret, arg); break; + case Gamma::Algebra::GammaZ: + multGammaZ(ret, arg); break; + case Gamma::Algebra::MinusGammaZGamma5: + multMinusGammaZGamma5(ret, arg); break; + case Gamma::Algebra::GammaZGamma5: + multGammaZGamma5(ret, arg); break; + case Gamma::Algebra::MinusIdentity: + multMinusIdentity(ret, arg); break; + case Gamma::Algebra::Identity: + multIdentity(ret, arg); break; + case Gamma::Algebra::MinusSigmaXT: + multMinusSigmaXT(ret, arg); break; + case Gamma::Algebra::SigmaXT: + multSigmaXT(ret, arg); break; + case Gamma::Algebra::MinusSigmaXY: + multMinusSigmaXY(ret, arg); break; + case Gamma::Algebra::SigmaXY: + multSigmaXY(ret, arg); break; + case Gamma::Algebra::MinusSigmaXZ: + multMinusSigmaXZ(ret, arg); break; + case Gamma::Algebra::SigmaXZ: + multSigmaXZ(ret, arg); break; + case Gamma::Algebra::MinusSigmaYT: + multMinusSigmaYT(ret, arg); break; + case Gamma::Algebra::SigmaYT: + multSigmaYT(ret, arg); break; + case Gamma::Algebra::MinusSigmaYZ: + multMinusSigmaYZ(ret, arg); break; + case Gamma::Algebra::SigmaYZ: + multSigmaYZ(ret, arg); break; + case Gamma::Algebra::MinusSigmaZT: + multMinusSigmaZT(ret, arg); break; + case Gamma::Algebra::SigmaZT: + multSigmaZT(ret, arg); break; + default: assert(0); + } + + return ret; +} + +template +inline auto operator*(const Gamma &G, const iMatrix &arg) +->typename std::enable_if, SpinorIndex>::value, iMatrix>::type +{ + iMatrix ret; + + switch (G.g) + { + case Gamma::Algebra::MinusGamma5: + lmultMinusGamma5(ret, arg); break; + case Gamma::Algebra::Gamma5: + lmultGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaT: + lmultMinusGammaT(ret, arg); break; + case Gamma::Algebra::GammaT: + lmultGammaT(ret, arg); break; + case Gamma::Algebra::MinusGammaTGamma5: + lmultMinusGammaTGamma5(ret, arg); break; + case Gamma::Algebra::GammaTGamma5: + lmultGammaTGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaX: + lmultMinusGammaX(ret, arg); break; + case Gamma::Algebra::GammaX: + lmultGammaX(ret, arg); break; + case Gamma::Algebra::MinusGammaXGamma5: + lmultMinusGammaXGamma5(ret, arg); break; + case Gamma::Algebra::GammaXGamma5: + lmultGammaXGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaY: + lmultMinusGammaY(ret, arg); break; + case Gamma::Algebra::GammaY: + lmultGammaY(ret, arg); break; + case Gamma::Algebra::MinusGammaYGamma5: + lmultMinusGammaYGamma5(ret, arg); break; + case Gamma::Algebra::GammaYGamma5: + lmultGammaYGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaZ: + lmultMinusGammaZ(ret, arg); break; + case Gamma::Algebra::GammaZ: + lmultGammaZ(ret, arg); break; + case Gamma::Algebra::MinusGammaZGamma5: + lmultMinusGammaZGamma5(ret, arg); break; + case Gamma::Algebra::GammaZGamma5: + lmultGammaZGamma5(ret, arg); break; + case Gamma::Algebra::MinusIdentity: + lmultMinusIdentity(ret, arg); break; + case Gamma::Algebra::Identity: + lmultIdentity(ret, arg); break; + case Gamma::Algebra::MinusSigmaXT: + lmultMinusSigmaXT(ret, arg); break; + case Gamma::Algebra::SigmaXT: + lmultSigmaXT(ret, arg); break; + case Gamma::Algebra::MinusSigmaXY: + lmultMinusSigmaXY(ret, arg); break; + case Gamma::Algebra::SigmaXY: + lmultSigmaXY(ret, arg); break; + case Gamma::Algebra::MinusSigmaXZ: + lmultMinusSigmaXZ(ret, arg); break; + case Gamma::Algebra::SigmaXZ: + lmultSigmaXZ(ret, arg); break; + case Gamma::Algebra::MinusSigmaYT: + lmultMinusSigmaYT(ret, arg); break; + case Gamma::Algebra::SigmaYT: + lmultSigmaYT(ret, arg); break; + case Gamma::Algebra::MinusSigmaYZ: + lmultMinusSigmaYZ(ret, arg); break; + case Gamma::Algebra::SigmaYZ: + lmultSigmaYZ(ret, arg); break; + case Gamma::Algebra::MinusSigmaZT: + lmultMinusSigmaZT(ret, arg); break; + case Gamma::Algebra::SigmaZT: + lmultSigmaZT(ret, arg); break; + default: assert(0); + } + + return ret; +} + +template +inline auto operator*(const iMatrix &arg, const Gamma &G) +->typename std::enable_if, SpinorIndex>::value, iMatrix>::type +{ + iMatrix ret; + + switch (G.g) + { + case Gamma::Algebra::MinusGamma5: + rmultMinusGamma5(ret, arg); break; + case Gamma::Algebra::Gamma5: + rmultGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaT: + rmultMinusGammaT(ret, arg); break; + case Gamma::Algebra::GammaT: + rmultGammaT(ret, arg); break; + case Gamma::Algebra::MinusGammaTGamma5: + rmultMinusGammaTGamma5(ret, arg); break; + case Gamma::Algebra::GammaTGamma5: + rmultGammaTGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaX: + rmultMinusGammaX(ret, arg); break; + case Gamma::Algebra::GammaX: + rmultGammaX(ret, arg); break; + case Gamma::Algebra::MinusGammaXGamma5: + rmultMinusGammaXGamma5(ret, arg); break; + case Gamma::Algebra::GammaXGamma5: + rmultGammaXGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaY: + rmultMinusGammaY(ret, arg); break; + case Gamma::Algebra::GammaY: + rmultGammaY(ret, arg); break; + case Gamma::Algebra::MinusGammaYGamma5: + rmultMinusGammaYGamma5(ret, arg); break; + case Gamma::Algebra::GammaYGamma5: + rmultGammaYGamma5(ret, arg); break; + case Gamma::Algebra::MinusGammaZ: + rmultMinusGammaZ(ret, arg); break; + case Gamma::Algebra::GammaZ: + rmultGammaZ(ret, arg); break; + case Gamma::Algebra::MinusGammaZGamma5: + rmultMinusGammaZGamma5(ret, arg); break; + case Gamma::Algebra::GammaZGamma5: + rmultGammaZGamma5(ret, arg); break; + case Gamma::Algebra::MinusIdentity: + rmultMinusIdentity(ret, arg); break; + case Gamma::Algebra::Identity: + rmultIdentity(ret, arg); break; + case Gamma::Algebra::MinusSigmaXT: + rmultMinusSigmaXT(ret, arg); break; + case Gamma::Algebra::SigmaXT: + rmultSigmaXT(ret, arg); break; + case Gamma::Algebra::MinusSigmaXY: + rmultMinusSigmaXY(ret, arg); break; + case Gamma::Algebra::SigmaXY: + rmultSigmaXY(ret, arg); break; + case Gamma::Algebra::MinusSigmaXZ: + rmultMinusSigmaXZ(ret, arg); break; + case Gamma::Algebra::SigmaXZ: + rmultSigmaXZ(ret, arg); break; + case Gamma::Algebra::MinusSigmaYT: + rmultMinusSigmaYT(ret, arg); break; + case Gamma::Algebra::SigmaYT: + rmultSigmaYT(ret, arg); break; + case Gamma::Algebra::MinusSigmaYZ: + rmultMinusSigmaYZ(ret, arg); break; + case Gamma::Algebra::SigmaYZ: + rmultSigmaYZ(ret, arg); break; + case Gamma::Algebra::MinusSigmaZT: + rmultMinusSigmaZT(ret, arg); break; + case Gamma::Algebra::SigmaZT: + rmultSigmaZT(ret, arg); break; + default: assert(0); + } + + return ret; +} + +}} + +#endif // GRID_QCD_GAMMA_H diff --git a/lib/qcd/spin/gamma-gen/gamma-gen.nb b/lib/qcd/spin/gamma-gen/gamma-gen.nb index d41b3e2e..b9753df7 100644 --- a/lib/qcd/spin/gamma-gen/gamma-gen.nb +++ b/lib/qcd/spin/gamma-gen/gamma-gen.nb @@ -10,10 +10,10 @@ NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 158, 7] -NotebookDataLength[ 58006, 1512] -NotebookOptionsPosition[ 56426, 1458] -NotebookOutlinePosition[ 56786, 1474] -CellTagsIndexPosition[ 56743, 1471] +NotebookDataLength[ 56640, 1480] +NotebookOptionsPosition[ 55061, 1426] +NotebookOutlinePosition[ 55421, 1442] +CellTagsIndexPosition[ 55378, 1439] WindowFrame->Normal*) (* Beginning of Notebook Content *) @@ -64,7 +64,10 @@ Cell[BoxData["\<\"/Users/antonin/Development/Grid/lib/qcd/spin/gamma-gen\"\>"]\ 3.6942153028002653`*^9, 3.694215388363636*^9, 3.694215531793765*^9, 3.694293467607703*^9, 3.694294096138891*^9, 3.694297419616928*^9, 3.694297655191285*^9, 3.69429782738804*^9, 3.694297901657515*^9, - 3.6942984168973837`*^9}] + 3.6942984168973837`*^9, 3.6948949168128557`*^9, 3.69489495942482*^9, + 3.6949627104409447`*^9, {3.694962842273374*^9, 3.6949628507953672`*^9}, + 3.694963445768766*^9, 3.6949643976358423`*^9, {3.694964715764683*^9, + 3.6949647261937733`*^9}, 3.6949650592533703`*^9, 3.694965165070952*^9}] }, Open ]], Cell[CellGroupData[{ @@ -382,7 +385,11 @@ Cell[BoxData[ 3.694214931160738*^9, 3.6942149565175247`*^9}, 3.69421520140513*^9, 3.694215303184371*^9, 3.694215388782826*^9, 3.694215532274271*^9, 3.694293468120837*^9, 3.69429409699356*^9, 3.694297655587861*^9, - 3.694297827778974*^9, 3.694297902050129*^9, 3.694298417447421*^9}] + 3.694297827778974*^9, 3.694297902050129*^9, 3.694298417447421*^9, + 3.694894917294997*^9, 3.6948949597758904`*^9, 3.6949627108824663`*^9, + 3.694962851174364*^9, 3.6949634461305313`*^9, 3.694964397971891*^9, { + 3.6949647161810303`*^9, 3.6949647264866943`*^9}, 3.6949650598407507`*^9, + 3.694965165456048*^9}] }, Open ]], Cell["Full multiplication table:", "Text", @@ -566,14 +573,19 @@ Cell[BoxData[ 3.694214931237383*^9, 3.6942149565897913`*^9}, 3.6942152015279818`*^9, 3.694215303248364*^9, 3.694215388866436*^9, 3.694215532359406*^9, 3.694293468220346*^9, 3.694294097121203*^9, 3.694297655690278*^9, - 3.694297827858612*^9, 3.694297902125073*^9, 3.694298417530912*^9}] + 3.694297827858612*^9, 3.694297902125073*^9, 3.694298417530912*^9, + 3.694894917375866*^9, 3.694894959839177*^9, 3.694962710968522*^9, + 3.6949628512863817`*^9, 3.694963446206002*^9, 3.694964398046623*^9, { + 3.6949647162797327`*^9, 3.694964726526013*^9}, 3.6949650599380713`*^9, + 3.694965165531089*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ -Cell["Header file Dirac.h generation", "Section", - CellChangeTimes->{{3.694208986784461*^9, 3.6942090005062523`*^9}}], +Cell["Header file Gamma.h generation", "Section", + CellChangeTimes->{{3.694208986784461*^9, 3.6942090005062523`*^9}, { + 3.694965123390101*^9, 3.694965123950851*^9}}], Cell["File skeleton:", "Text", CellFrame->{{0, 0}, {0, 0.5}}, @@ -591,7 +603,7 @@ Cell[BoxData[ RowBox[{"out", " ", "=", " ", RowBox[{ "out", "<>", "\[IndentingNewLine]", - "\"\<#ifndef GRID_QCD_DIRAC_H\n#define GRID_QCD_DIRAC_H\n\n// code \ + "\"\<#ifndef GRID_QCD_GAMMA_H\n#define GRID_QCD_GAMMA_H\n\n// code \ generated by the Mathematica notebook gamma-gen/gamma-gen.nb\n\n#include \ \n\nnamespace Grid {\nnamespace QCD {\n\nclass Gamma {\n public:\n\ \>\""}]}], ";", "\[IndentingNewLine]", @@ -603,16 +615,15 @@ generated by the Mathematica notebook gamma-gen/gamma-gen.nb\n\n#include \ "\"\< static const std::array \ name;\n static const std::array, nGamma> mul;\n\ static const std::array adj;\n \ +static const std::array gmu;\n \ Algebra g;\n public:\n \ - Gamma(Algebra initg): g(initg) {} \n};\n\ninline Gamma operator*(const \ -Gamma &g1, const Gamma &g2)\n{\n return Gamma(Gamma::mul[g1.g][g2.g]);\n}\n\n\ -inline Gamma adj(const Gamma &g)\n{\n return Gamma(Gamma::adj[g.g]);\n}\n\n\ -\>\""}]}], ";", "\[IndentingNewLine]", + Gamma(Algebra initg): g(initg) {} \n};\n\n\>\""}]}], ";", + "\[IndentingNewLine]", RowBox[{"out", " ", "=", RowBox[{"out", "<>", "funcCode"}]}], ";", "\[IndentingNewLine]", RowBox[{"out", "=", - RowBox[{"out", "<>", "\"\<\n}}\n\n#endif\n\>\""}]}], ";", - "\[IndentingNewLine]", + RowBox[{"out", "<>", "\"\<\n}}\n\n#endif // GRID_QCD_GAMMA_H\n\>\""}]}], + ";", "\[IndentingNewLine]", RowBox[{"Return", "[", "out", "]"}]}]}], "]"}]}]], "Input", CellChangeTimes->{{3.69419645529875*^9, 3.694196727399803*^9}, { 3.694196786125751*^9, 3.694196882528638*^9}, {3.694197240621915*^9, @@ -628,7 +639,11 @@ inline Gamma adj(const Gamma &g)\n{\n return Gamma(Gamma::adj[g.g]);\n}\n\n\ 3.694214647829077*^9}, {3.694214730808668*^9, 3.6942148593149223`*^9}, { 3.694214900404429*^9, 3.694214905595294*^9}, {3.6942155281289682`*^9, 3.6942155289376802`*^9}, {3.694297793776082*^9, 3.694297819122456*^9}, { - 3.694297854809973*^9, 3.694297889420939*^9}}], + 3.694297854809973*^9, 3.694297889420939*^9}, {3.694963324045937*^9, + 3.694963343265525*^9}, {3.694964367519239*^9, 3.69496439461199*^9}, { + 3.694964462130747*^9, 3.6949644669959793`*^9}, 3.694964509762739*^9, { + 3.694964705045744*^9, 3.694964723148797*^9}, {3.694964992988984*^9, + 3.6949649968504257`*^9}}], Cell["Gamma enum generation:", "Text", CellFrame->{{0, 0}, {0, 0.5}}, @@ -1218,38 +1233,7 @@ iMatrix>::type\n{\n iMatrix ret;\n\n switch (G.g) \n \ RowBox[{"{", RowBox[{"g", ",", "alg"}], "}"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{"out", "=", - RowBox[{ - "out", "<>", - "\"\<\n// FIXME\n//\n// Optimisation; switch over to a \ -\\\"multGammaX(ret._internal,arg._internal)\\\" style early and\n// note that \ -doing so from the lattice operator will avoid copy back and case switch \ -overhead, as\n// was done for the tensor math operator to remove operator * \ -notation early\n//\n\n//left multiply\ntemplate \ninline auto \ -operator*(const Gamma &G, const iScalar &arg)\n->typename \ -std::enable_if,SpinorIndex>::notvalue,\ -iScalar>::type \n{\n iScalar ret;\n \ -ret._internal=G*arg._internal;\n return ret;\n}\n\ntemplate\ninline auto operator*(const Gamma &G, const iVector &arg)\n\ -->typename \ -std::enable_if,SpinorIndex>::notvalue,\ -iVector>::type \n{\n iVector ret;\n for(int i=0;i\ninline auto operator*(const Gamma &G, const \ -iMatrix &arg) \n->typename \ -std::enable_if,SpinorIndex>::notvalue,\ -iMatrix>::type \n{\n iMatrix ret;\n for(int i=0;i\ninline auto \ -operator*(const iScalar &arg, const Gamma &G)\n->typename \ -std::enable_if,SpinorIndex>::notvalue,\ -iScalar>::type \n{\n iScalar ret;\n \ -ret._internal=arg._internal*G;\n return ret;\n}\n\ntemplate\ninline auto operator * (const iMatrix &arg, const Gamma &G) \n\ -->typename \ -std::enable_if,SpinorIndex>::notvalue,\ -iMatrix>::type \n{\n iMatrix ret;\n for(int i=0;i\"", "<>", + RowBox[{"out", "<>", RowBox[{"vecFinal", "[", "]"}], "<>", "\"\<\\n\>\"", "<>", RowBox[{"lmatFinal", "[", "]"}], "<>", "\"\<\\n\>\"", "<>", RowBox[{"rmatFinal", "[", "]"}]}]}], ";", "\[IndentingNewLine]", @@ -1272,7 +1256,8 @@ iMatrix>::type \n{\n iMatrix ret;\n for(int i=0;i{{0, 0}, {0, 0.5}}, @@ -1281,7 +1266,7 @@ Cell["Header file generation:", "Text", Cell[BoxData[ RowBox[{ RowBox[{"file", "=", - RowBox[{"OpenWrite", "[", "\"\\"", "]"}]}], ";", + RowBox[{"OpenWrite", "[", "\"\\"", "]"}]}], ";", RowBox[{"WriteString", "[", RowBox[{"file", ",", RowBox[{"makeHeaderCode", "[", @@ -1289,171 +1274,154 @@ Cell[BoxData[ RowBox[{"makeEnumCode", "[", "\"\< \>\"", "]"}], ",", RowBox[{"makeFuncCode", "[", "]"}]}], "]"}]}], "]"}], ";", RowBox[{"Close", "[", "file", "]"}], ";"}]], "Input", - CellChangeTimes->{{3.694207263508134*^9, 3.694207312537463*^9}}] + CellChangeTimes->{{3.694207263508134*^9, 3.694207312537463*^9}, { + 3.6948949122726097`*^9, 3.6948949127609673`*^9}}] }, Open ]], Cell[CellGroupData[{ -Cell["Dirac.cc source file generation", "Section", - CellChangeTimes->{{3.694209250542284*^9, 3.694209266269907*^9}}], - -Cell[BoxData[{ - RowBox[{ - RowBox[{ - "out", " ", "=", " ", - "\"\, \ -Gamma::nGamma> \nGamma::mul = {{\\n\>\""}], ";"}], "\[IndentingNewLine]", - RowBox[{ - RowBox[{"Do", "[", "\[IndentingNewLine]", - RowBox[{ - RowBox[{"Do", "[", "\[IndentingNewLine]", - RowBox[{ - RowBox[{"out", "=", - RowBox[{"out", "<>", - RowBox[{"If", "[", - RowBox[{ - RowBox[{"i2", "\[Equal]", - RowBox[{"First", "[", "alg", "]"}]}], ",", "\"\< {\>\"", ",", - "\"\< \>\"", ",", "\"\< \>\""}], "]"}], "\[IndentingNewLine]", - "<>", "\"\\"", "<>", - RowBox[{"enum", "[", - RowBox[{"i1", ".", "i2"}], "]"}], "<>", - RowBox[{"If", "[", - RowBox[{ - RowBox[{"i2", "\[Equal]", - RowBox[{"Last", "[", "alg", "]"}]}], ",", "\"\<}\>\"", ",", - "\"\<\>\"", ",", "\"\<\>\""}], "]"}], "\[IndentingNewLine]", "<>", - RowBox[{"If", "[", - RowBox[{ - RowBox[{"i2", "\[Equal]", - RowBox[{"Last", "[", "alg", "]"}]}], ",", - RowBox[{"If", "[", - RowBox[{ - RowBox[{"i1", "\[Equal]", - RowBox[{"Last", "[", "alg", "]"}]}], ",", "\"\<\>\"", ",", - "\"\<\\n ,\\n\>\"", ",", "\"\<\\n ,\\n\>\""}], "]"}], ",", - "\"\<,\\n\>\"", ",", "\"\<,\\n\>\""}], "]"}]}]}], ",", - "\[IndentingNewLine]", - RowBox[{"{", - RowBox[{"i2", ",", "alg"}], "}"}]}], "]"}], ",", "\[IndentingNewLine]", - RowBox[{"{", - RowBox[{"i1", ",", "alg"}], "}"}]}], "]"}], ";"}], "\[IndentingNewLine]", - RowBox[{ - RowBox[{"out", "=", - RowBox[{"out", "<>", "\"\<\\n}};\\n\\n\>\""}]}], - ";"}], "\[IndentingNewLine]", - RowBox[{ - RowBox[{"out", " ", "=", " ", - RowBox[{ - "out", "<>", - "\"\ Gamma::adj = \ -{\\n\>\""}]}], ";"}], "\[IndentingNewLine]", - RowBox[{ - RowBox[{"Do", "[", "\[IndentingNewLine]", - RowBox[{ - RowBox[{"out", "=", - RowBox[{"out", "<>", "\"\< Gamma::\>\"", "<>", - RowBox[{"enum", "[", - RowBox[{"i", "\[ConjugateTranspose]"}], "]"}], "<>", - RowBox[{"If", "[", - RowBox[{ - RowBox[{"i", "\[Equal]", - RowBox[{"Last", "[", "alg", "]"}]}], ",", "\"\<\>\"", ",", - "\"\<,\\n\>\"", ",", "\"\<,\\n\>\""}], "]"}]}]}], ",", - "\[IndentingNewLine]", - RowBox[{"{", - RowBox[{"i", ",", "alg"}], "}"}]}], "]"}], - ";"}], "\[IndentingNewLine]", - RowBox[{ - RowBox[{"out", "=", - RowBox[{"out", "<>", "\"\<\\n};\\n\>\""}]}], - ";"}], "\[IndentingNewLine]", - RowBox[{ - RowBox[{"file", "=", - RowBox[{"OpenWrite", "[", "\"\\"", "]"}]}], - ";"}], "\[IndentingNewLine]", - RowBox[{ - RowBox[{"WriteString", "[", - RowBox[{"file", ",", "out"}], "]"}], ";"}], "\[IndentingNewLine]", - RowBox[{ - RowBox[{"Close", "[", "file", "]"}], ";"}]}], "Input", - CellChangeTimes->{{3.694188457712205*^9, 3.694188459081934*^9}, { - 3.694188583199066*^9, 3.694188690803248*^9}, {3.6941887378127832`*^9, - 3.6941889049946423`*^9}, {3.694188939559833*^9, 3.6941889419840307`*^9}, { - 3.694189004894498*^9, 3.694189029210237*^9}, 3.694189123631489*^9, { - 3.694189184854504*^9, 3.694189212219471*^9}, {3.694189278607349*^9, - 3.694189315273435*^9}, {3.694189367213715*^9, 3.694189508102169*^9}, { - 3.694189592594305*^9, 3.69418967222689*^9}, {3.69418976988986*^9, - 3.694189793142088*^9}, {3.6941898310221663`*^9, 3.694189833288706*^9}, { - 3.694189898235135*^9, 3.694189929506019*^9}, 3.6941900145565357`*^9, { - 3.694190119264579*^9, 3.694190161822473*^9}, {3.694209485052578*^9, - 3.6942094865108747`*^9}, {3.694211744604581*^9, 3.6942117644193983`*^9}, { - 3.694211794987585*^9, 3.694211795663188*^9}, 3.694213436760853*^9, { - 3.6942134707645893`*^9, 3.69421347411766*^9}, {3.694215381435295*^9, - 3.694215385261436*^9}, {3.694297237092742*^9, 3.6942972934131393`*^9}, { - 3.6942974934555683`*^9, 3.694297566898333*^9}, {3.694297598113819*^9, - 3.694297609176114*^9}, {3.694297683998802*^9, 3.694297711493322*^9}}], +Cell["Gamma.cc source file generation", "Section", + CellChangeTimes->{{3.694209250542284*^9, 3.694209266269907*^9}, { + 3.6949651357846317`*^9, 3.694965136291535*^9}}], Cell[BoxData[ RowBox[{ - RowBox[{ - RowBox[{"makeSourceCode", "[", "]"}], ":=", - RowBox[{"Module", "[", + RowBox[{"makeSourceCode", "[", "]"}], ":=", + RowBox[{"Module", "[", + RowBox[{ + RowBox[{"{", + RowBox[{"out", "=", "\"\<\>\""}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ - RowBox[{"{", - RowBox[{"out", "=", "\"\<\>\""}], "}"}], ",", "\[IndentingNewLine]", - RowBox[{ - RowBox[{"out", " ", "=", " ", - RowBox[{ - "out", "<>", "\[IndentingNewLine]", - "\"\<#include \n\nnamespace Grid {\nnamespace QCD {\n\n\ -#include \\\"GammaMulTable.h\\\"\n\nconst std::array Gamma::name = {{\n\>\""}]}], ";", "\[IndentingNewLine]", - RowBox[{"Do", "[", - RowBox[{ - RowBox[{"out", " ", "=", " ", - RowBox[{"out", "<>", "\"\< \\\"\>\"", "<>", "\[IndentingNewLine]", - RowBox[{"StringPadRight", "[", - RowBox[{ - RowBox[{"StringTrim", "[", - RowBox[{ - RowBox[{"StringReplace", "[", - RowBox[{ - RowBox[{"enum", "[", "g", "]"}], ",", - RowBox[{"\"\\"", "\[Rule]", "\"\<-\>\""}]}], "]"}], - ",", "\"\\""}], "]"}], ",", "13"}], "]"}], "<>", - "\[IndentingNewLine]", "\"\<\\\"\>\"", "<>", "\[IndentingNewLine]", - - RowBox[{"If", "[", - RowBox[{ - RowBox[{"g", "\[Equal]", - RowBox[{"Last", "[", "alg", "]"}]}], ",", "\"\<}};\\n\>\"", ",", - "\"\<,\\n\>\"", ",", "\"\<,\\n\>\""}], "]"}]}]}], ",", - RowBox[{"{", - RowBox[{"g", ",", "alg"}], "}"}]}], "]"}], ";", - "\[IndentingNewLine]", - RowBox[{"out", " ", "=", - RowBox[{"out", "<>", "\"\<\n}}\n\>\""}]}], ";", "\[IndentingNewLine]", - - RowBox[{"Return", "[", "out", "]"}]}]}], "]"}]}], - "\[IndentingNewLine]"}]], "Input", + RowBox[{"out", " ", "=", " ", + RowBox[{ + "out", "<>", "\[IndentingNewLine]", + "\"\\n\nnamespace Grid {\n\ +namespace QCD {\>\""}]}], ";", "\[IndentingNewLine]", + RowBox[{"out", " ", "=", " ", + RowBox[{ + "out", " ", "<>", + "\"\<\n\nconst std::array Gamma::gmu = {{\n \ +Gamma(Gamma::Algebra::GammaX),\n Gamma(Gamma::Algebra::GammaY),\n \ +Gamma(Gamma::Algebra::GammaZ),\n Gamma(Gamma::Algebra::GammaT)}};\n\nconst \ +std::array Gamma::name = {{\n\>\""}]}], ";", + "\[IndentingNewLine]", + RowBox[{"Do", "[", "\[IndentingNewLine]", + RowBox[{ + RowBox[{"out", " ", "=", " ", + RowBox[{"out", "<>", "\"\< \\\"\>\"", "<>", "\[IndentingNewLine]", + RowBox[{"StringPadRight", "[", + RowBox[{ + RowBox[{"StringTrim", "[", + RowBox[{ + RowBox[{"StringReplace", "[", + RowBox[{ + RowBox[{"enum", "[", "g", "]"}], ",", + RowBox[{"\"\\"", "\[Rule]", "\"\<-\>\""}]}], "]"}], + ",", "\"\\""}], "]"}], ",", "13"}], "]"}], "<>", + "\[IndentingNewLine]", "\"\<\\\"\>\"", "<>", "\[IndentingNewLine]", + RowBox[{"If", "[", + RowBox[{ + RowBox[{"g", "\[Equal]", + RowBox[{"Last", "[", "alg", "]"}]}], ",", "\"\<}};\\n\\n\>\"", + ",", "\"\<,\\n\>\"", ",", "\"\<,\\n\>\""}], "]"}]}]}], ",", + "\[IndentingNewLine]", + RowBox[{"{", + RowBox[{"g", ",", "alg"}], "}"}]}], "]"}], ";", "\[IndentingNewLine]", + RowBox[{"out", " ", "=", " ", + RowBox[{ + "out", "<>", + "\"\ Gamma::adj = \ +{{\\n\>\""}]}], ";", "\[IndentingNewLine]", + RowBox[{"Do", "[", "\[IndentingNewLine]", + RowBox[{ + RowBox[{"out", "=", + RowBox[{"out", "<>", "\"\< Gamma::\>\"", "<>", + RowBox[{"enum", "[", + RowBox[{"g", "\[ConjugateTranspose]"}], "]"}], "<>", + RowBox[{"If", "[", + RowBox[{ + RowBox[{"g", "\[Equal]", + RowBox[{"Last", "[", "alg", "]"}]}], ",", "\"\<}};\\n\\n\>\"", + ",", "\"\<,\\n\>\"", ",", "\"\<,\\n\>\""}], "]"}]}]}], ",", + "\[IndentingNewLine]", + RowBox[{"{", + RowBox[{"g", ",", "alg"}], "}"}]}], "]"}], ";", "\[IndentingNewLine]", + RowBox[{"out", " ", "=", " ", + RowBox[{ + "out", " ", "<>", + "\"\, \ +Gamma::nGamma> Gamma::mul = {{\\n\>\""}]}], ";", "\[IndentingNewLine]", + RowBox[{"Do", "[", "\[IndentingNewLine]", + RowBox[{ + RowBox[{"Do", "[", "\[IndentingNewLine]", + RowBox[{ + RowBox[{"out", "=", + RowBox[{"out", "<>", + RowBox[{"If", "[", + RowBox[{ + RowBox[{"g2", "\[Equal]", + RowBox[{"First", "[", "alg", "]"}]}], ",", "\"\< {{\>\"", ",", + "\"\< \>\"", ",", "\"\< \>\""}], "]"}], + "\[IndentingNewLine]", "<>", "\"\\"", "<>", + RowBox[{"enum", "[", + RowBox[{"g1", ".", "g2"}], "]"}], "<>", + RowBox[{"If", "[", + RowBox[{ + RowBox[{"g2", "\[Equal]", + RowBox[{"Last", "[", "alg", "]"}]}], ",", "\"\<}}\>\"", ",", + "\"\<\>\"", ",", "\"\<\>\""}], "]"}], "\[IndentingNewLine]", "<>", + RowBox[{"If", "[", + RowBox[{ + RowBox[{"g2", "\[Equal]", + RowBox[{"Last", "[", "alg", "]"}]}], ",", + RowBox[{"If", "[", + RowBox[{ + RowBox[{"g1", "\[Equal]", + RowBox[{"Last", "[", "alg", "]"}]}], ",", "\"\<\>\"", ",", + "\"\<\\n ,\\n\>\"", ",", "\"\<\\n ,\\n\>\""}], "]"}], ",", + "\"\<,\\n\>\"", ",", "\"\<,\\n\>\""}], "]"}]}]}], ",", + "\[IndentingNewLine]", + RowBox[{"{", + RowBox[{"g2", ",", "alg"}], "}"}]}], "]"}], ",", + "\[IndentingNewLine]", + RowBox[{"{", + RowBox[{"g1", ",", "alg"}], "}"}]}], "]"}], ";", + "\[IndentingNewLine]", + RowBox[{"out", "=", + RowBox[{"out", "<>", "\"\<\\n}};\\n\\n\>\""}]}], ";", + "\[IndentingNewLine]", + RowBox[{"out", " ", "=", + RowBox[{"out", "<>", "\"\<}}\\n\>\""}]}], ";", "\[IndentingNewLine]", + RowBox[{"Return", "[", "out", "]"}]}]}], "]"}]}]], "Input", CellChangeTimes->{{3.69421121373662*^9, 3.694211248473432*^9}, { 3.6942118524105463`*^9, 3.694211892664316*^9}, {3.69421196260581*^9, 3.69421202215168*^9}, {3.69421216516626*^9, 3.694212368624585*^9}, { 3.694212488334324*^9, 3.694212500692437*^9}, 3.6942134310746183`*^9, { 3.694215284859365*^9, 3.694215285515815*^9}, {3.694215368213806*^9, - 3.69421537607312*^9}, {3.694215508990799*^9, 3.694215509814066*^9}}], + 3.69421537607312*^9}, {3.694215508990799*^9, 3.694215509814066*^9}, { + 3.69489462883849*^9, 3.694894689512344*^9}, {3.6948947475649767`*^9, + 3.694894811418371*^9}, {3.6949626931212053`*^9, 3.694962703130487*^9}, { + 3.694962897531991*^9, 3.694962897865933*^9}, {3.6949629511775627`*^9, + 3.694963031525289*^9}, {3.694963065828494*^9, 3.694963098327538*^9}, { + 3.6949632020836153`*^9, 3.6949632715940027`*^9}, {3.694963440035037*^9, + 3.6949634418966017`*^9}, {3.6949651447067547`*^9, 3.694965161228381*^9}, { + 3.694967957845581*^9, 3.694967958364184*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"file", "=", - RowBox[{"OpenWrite", "[", "\"\\"", "]"}]}], ";", + RowBox[{"OpenWrite", "[", "\"\\"", "]"}]}], ";", RowBox[{"WriteString", "[", RowBox[{"file", ",", RowBox[{"makeSourceCode", "[", "]"}]}], "]"}], ";", RowBox[{"Close", "[", "file", "]"}], ";"}]], "Input", CellChangeTimes->{{3.694212294084733*^9, 3.694212304244363*^9}, { - 3.6942124200138683`*^9, 3.694212434840803*^9}}] + 3.6942124200138683`*^9, 3.694212434840803*^9}, {3.6948947822948923`*^9, + 3.694894782897565*^9}}], + +Cell[BoxData[""], "Input", + CellChangeTimes->{{3.6949630607688303`*^9, 3.694963063131344*^9}}] }, Open ]] }, WindowSize->{1246, 1005}, @@ -1476,43 +1444,43 @@ Notebook[{ Cell[558, 20, 1295, 18, 502, "Text"], Cell[CellGroupData[{ Cell[1878, 42, 513, 10, 75, "Input"], -Cell[2394, 54, 821, 12, 32, "Output"] +Cell[2394, 54, 1090, 15, 32, "Output"] }, Open ]], Cell[CellGroupData[{ -Cell[3252, 71, 114, 1, 64, "Section"], -Cell[3369, 74, 475, 14, 54, "Input"], -Cell[3847, 90, 190, 2, 30, "Text"], -Cell[4040, 94, 5454, 168, 427, "Input"], -Cell[9497, 264, 119, 1, 30, "Text"], -Cell[9619, 267, 2115, 63, 96, "Input"], -Cell[11737, 332, 133, 1, 30, "Text"], +Cell[3521, 74, 114, 1, 64, "Section"], +Cell[3638, 77, 475, 14, 54, "Input"], +Cell[4116, 93, 190, 2, 30, "Text"], +Cell[4309, 97, 5454, 168, 427, "Input"], +Cell[9766, 267, 119, 1, 30, "Text"], +Cell[9888, 270, 2115, 63, 96, "Input"], +Cell[12006, 335, 133, 1, 30, "Text"], Cell[CellGroupData[{ -Cell[11895, 337, 479, 15, 32, "Input"], -Cell[12377, 354, 1398, 30, 96, "Output"] +Cell[12164, 340, 479, 15, 32, "Input"], +Cell[12646, 357, 1648, 34, 96, "Output"] }, Open ]], -Cell[13790, 387, 110, 1, 30, "Text"], +Cell[14309, 394, 110, 1, 30, "Text"], Cell[CellGroupData[{ -Cell[13925, 392, 476, 12, 32, "Input"], -Cell[14404, 406, 6453, 162, 312, "Output"] +Cell[14444, 399, 476, 12, 32, "Input"], +Cell[14923, 413, 6697, 166, 312, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ -Cell[20906, 574, 117, 1, 64, "Section"], -Cell[21026, 577, 128, 2, 38, "Text"], -Cell[21157, 581, 2742, 49, 894, "Input"], -Cell[23902, 632, 164, 3, 38, "Text"], -Cell[24069, 637, 4876, 148, 684, "Input"], -Cell[28948, 787, 2588, 55, 201, "Input"], -Cell[31539, 844, 149, 2, 38, "Text"], -Cell[31691, 848, 17242, 426, 3456, "Input"], -Cell[48936, 1276, 137, 2, 38, "Text"], -Cell[49076, 1280, 468, 11, 32, "Input"] +Cell[21669, 585, 166, 2, 64, "Section"], +Cell[21838, 589, 128, 2, 38, "Text"], +Cell[21969, 593, 2923, 52, 705, "Input"], +Cell[24895, 647, 164, 3, 38, "Text"], +Cell[25062, 652, 4876, 148, 684, "Input"], +Cell[29941, 802, 2588, 55, 201, "Input"], +Cell[32532, 859, 149, 2, 38, "Text"], +Cell[32684, 863, 15249, 396, 2133, "Input"], +Cell[47936, 1261, 137, 2, 38, "Text"], +Cell[48076, 1265, 521, 12, 32, "Input"] }, Open ]], Cell[CellGroupData[{ -Cell[49581, 1296, 116, 1, 64, "Section"], -Cell[49700, 1299, 4128, 95, 390, "Input"], -Cell[53831, 1396, 2179, 48, 432, "Input"], -Cell[56013, 1446, 397, 9, 32, "Input"] +Cell[48634, 1282, 167, 2, 64, "Section"], +Cell[48804, 1286, 5693, 122, 831, "Input"], +Cell[54500, 1410, 448, 10, 32, "Input"], +Cell[54951, 1422, 94, 1, 32, "Input"] }, Open ]] } ] diff --git a/lib/serialisation/BaseIO.h b/lib/serialisation/BaseIO.h index 0357915d..36e6fd77 100644 --- a/lib/serialisation/BaseIO.h +++ b/lib/serialisation/BaseIO.h @@ -138,6 +138,54 @@ namespace Grid { unsigned int dimInd_{0}; }; + // Pair IO utilities ///////////////////////////////////////////////////////// + // helper function to parse input in the format "" + template + inline std::istream & operator>>(std::istream &is, std::pair &buf) + { + T1 buf1; + T2 buf2; + char c; + + // Search for "pair" delimiters. + do + { + is.get(c); + } while (c != '<' && !is.eof()); + if (c == '<') + { + int start = is.tellg(); + do + { + is.get(c); + } while (c != '>' && !is.eof()); + if (c == '>') + { + int end = is.tellg(); + int psize = end - start - 1; + + // Only read data between pair limiters. + is.seekg(start); + std::string tmpstr(psize, ' '); + is.read(&tmpstr[0], psize); + std::istringstream temp(tmpstr); + temp >> buf1 >> buf2; + buf = std::make_pair(buf1, buf2); + is.seekg(end); + } + } + is.peek(); + return is; + } + + // output to streams for pairs + template + inline std::ostream & operator<<(std::ostream &os, const std::pair &p) + { + os << "<" << p.first << " " << p.second << ">"; + return os; + } + // Abstract writer/reader classes //////////////////////////////////////////// // static polymorphism implemented using CRTP idiom class Serializable; diff --git a/lib/serialisation/MacroMagic.h b/lib/serialisation/MacroMagic.h index 855014e0..ca789312 100644 --- a/lib/serialisation/MacroMagic.h +++ b/lib/serialisation/MacroMagic.h @@ -189,6 +189,15 @@ public:\ }\ return os;\ }\ + inline friend std::istream & operator>>(std::istream &is, name &obj)\ + {\ + std::string buf;\ + is >> buf;\ + if (buf == #undefname) {obj = name::undefname;}\ + GRID_MACRO_EVAL(GRID_MACRO_MAP(GRID_MACRO_ENUMTEST,__VA_ARGS__))\ + else {obj = name::undefname;}\ + return is;\ + }\ private:\ int value_;\ }; diff --git a/tests/IO/Test_serialisation.cc b/tests/IO/Test_serialisation.cc index 8204b05b..acafc900 100644 --- a/tests/IO/Test_serialisation.cc +++ b/tests/IO/Test_serialisation.cc @@ -113,6 +113,7 @@ int main(int argc,char **argv) // test serializable class writing myclass obj(1234); // non-trivial constructor std::vector vec; + std::pair pair; std::cout << "-- serialisable class writing to 'bother.xml'..." << std::endl; write(WR,"obj",obj); @@ -120,6 +121,8 @@ int main(int argc,char **argv) vec.push_back(myclass(1234)); vec.push_back(myclass(5678)); vec.push_back(myclass(3838)); + pair = std::make_pair(myenum::red, myenum::blue); + write(WR, "objvec", vec); std::cout << "-- serialisable class writing to std::cout:" << std::endl; std::cout << obj << std::endl; @@ -127,21 +130,30 @@ int main(int argc,char **argv) std::cout << "vec[0] == obj: " << ((vec[0] == obj) ? "true" : "false") << std::endl; std::cout << "vec[1] == obj: " << ((vec[1] == obj) ? "true" : "false") << std::endl; + write(WR, "objpair", pair); + std::cout << "-- pair writing to std::cout:" << std::endl; + std::cout << pair << std::endl; + // read tests std::cout << "\n==== IO self-consistency tests" << std::endl; //// XML ioTest("iotest.xml", obj, "XML (object) "); ioTest("iotest.xml", vec, "XML (vector of objects)"); + ioTest("iotest.xml", pair, "XML (pair of objects)"); //// binary ioTest("iotest.bin", obj, "binary (object) "); ioTest("iotest.bin", vec, "binary (vector of objects)"); + ioTest("iotest.bin", pair, "binary (pair of objects)"); //// text ioTest("iotest.dat", obj, "text (object) "); ioTest("iotest.dat", vec, "text (vector of objects)"); + ioTest("iotest.dat", pair, "text (pair of objects)"); //// HDF5 +#undef HAVE_HDF5 #ifdef HAVE_HDF5 ioTest("iotest.h5", obj, "HDF5 (object) "); ioTest("iotest.h5", vec, "HDF5 (vector of objects)"); + ioTest("iotest.h5", pair, "HDF5 (pair of objects)"); #endif std::cout << "\n==== vector flattening/reconstruction" << std::endl; diff --git a/tests/core/Test_gamma.cc b/tests/core/Test_gamma.cc index 2bd6a9b2..ee31a69a 100644 --- a/tests/core/Test_gamma.cc +++ b/tests/core/Test_gamma.cc @@ -137,7 +137,7 @@ void test(const Expr &a, const Expr &b) } } -void checkMat(const Gamma::Algebra a, GridSerialRNG &rng) +void checkGamma(const Gamma::Algebra a, GridSerialRNG &rng) { SpinVector v; SpinMatrix m, &testg = testAlgebra[a]; @@ -212,6 +212,28 @@ std::cout << std::endl; #undef CHECK_PROJ } +void checkGammaL(const Gamma::Algebra a, GridSerialRNG &rng) +{ + SpinVector v; + SpinMatrix m, &testg = testAlgebra[a], pl; + GammaL gl(a); + bool pass = true; + + random(rng, v); + random(rng, m); + + pl = testAlgebra[Gamma::Algebra::Identity] + - testAlgebra[Gamma::Algebra::Gamma5]; + std::cout << GridLogMessage << "Checking left-projected " << Gamma::name[a] << ": "; + std::cout << "vecmul "; + test(gl*v, testg*pl*v); + std::cout << "matlmul "; + test(gl*m, testg*pl*m); + std::cout << "matrmul "; + test(m*gl, m*testg*pl); + std::cout << std::endl; +} + int main(int argc, char *argv[]) { Grid_init(&argc,&argv); @@ -230,7 +252,7 @@ int main(int argc, char *argv[]) std::cout << GridLogMessage << "======== Multiplication operators check" << std::endl; for (int i = 0; i < Gamma::nGamma; ++i) { - checkMat(i, sRNG); + checkGamma(i, sRNG); } std::cout << GridLogMessage << std::endl; std::cout << GridLogMessage << "======== Algebra multiplication table check" << std::endl; @@ -249,6 +271,11 @@ int main(int argc, char *argv[]) std::cout << GridLogMessage << "======== Spin projectors check" << std::endl; checkProject(sRNG); std::cout << GridLogMessage << std::endl; + std::cout << GridLogMessage << "======== Gamma-left matrices check" << std::endl; + for (int i = 0; i < Gamma::nGamma; ++i) + { + checkGammaL(i, sRNG); + } Grid_finalize();