#ifndef _HCA_Components_ #define _HCA_Components_ #include #include #include #include "TLorentzVector.h" using namespace std; enum TensorType { //the order is important! PsiJ1 = 0, PsiJ2 = 1, PsiL12 = 2, PsiJ12 = 3 }; class ComponentPermutation { public: double dCoefficient; deque dComponentHelicities; //values are +/- 1, 0 (unless is photon) //size is rank }; class WaveFunction { public: double dCoefficient; int dRank; int dSpin; //for Psi_S12, spin may not be the same as rank int dHelicity; //not actually used for anything bool dComplexConjugateFlag; deque dComponentPermutations; }; class AmplitudeTerm { //every term is independent of the external helicities, but they are all dependent on the total helicity public: //the order is extremely important: must remain consistent double dCoefficient; //the helicities of the component deques map > dComponentHelicities; map dComplexConjugateFlag; }; class ContractionScheme { public: //stay consistent: list in order: J12, L12, J1, J2 map > dNumContractions; deque dLeviCivitaContractionTensors; //empty if none inline bool operator==(const ContractionScheme& locContractionScheme) const { if(dNumContractions != locContractionScheme.dNumContractions) return false; return (dLeviCivitaContractionTensors == locContractionScheme.dLeviCivitaContractionTensors); } inline bool operator!=(const ContractionScheme& locContractionScheme) const{return (!((*this) == locContractionScheme));} }; #endif //_HCA_Components_