#include "METOOLS/Explicit/Lorentz_Calculator.H" #include "METOOLS/Currents/C_Vector.H" #include "METOOLS/Explicit/Vertex.H" #include "MODEL/Main/Single_Vertex.H" using namespace ATOOLS; namespace METOOLS { template class VVVVA_Calculator: public Lorentz_Calculator { public: typedef CVec4 CVec4Type; VVVVA_Calculator(const Vertex_Key &key): Lorentz_Calculator(key) {} std::string Label() const { return "VVVVA"; } CObject *Evaluate(const CObject_Vector &jj) { const CVec4Type &a(*jj[0]->Get()); const CVec4Type &e(*jj[2]->Get()); const CVec4Type &b(*jj[1]->Get()); CVec4Type *j(CVec4Type::New((e*b)*a-(e*a)*b)); j->SetS(a.S()|e.S()|b.S()); return j; } };// end of class VVVVA_Calculator template class VVVVA_Calculator; template class VVVVB_Calculator: public Lorentz_Calculator { public: typedef std::complex SComplex; typedef CVec4 CVec4Type; VVVVB_Calculator(const Vertex_Key &key): Lorentz_Calculator(key) {} std::string Label() const { return "VVVVB"; } CObject *Evaluate(const CObject_Vector &jj) { const CVec4Type &a(*jj[0]->Get()); const CVec4Type &e(*jj[1]->Get()); const CVec4Type &b(*jj[2]->Get()); CVec4Type *j(CVec4Type::New((e*b)*a-(e*a)*b)); j->SetS(a.S()|e.S()|b.S()); return j; } };// end of class VVVVB_Calculator template class VVVVB_Calculator; template class VVVVC_Calculator: public Lorentz_Calculator { public: typedef std::complex SComplex; typedef CVec4 CVec4Type; VVVVC_Calculator(const Vertex_Key &key): Lorentz_Calculator(key) {} std::string Label() const { return "VVVVC"; } CObject *Evaluate(const CObject_Vector &jj) { const CVec4Type &a(*jj[1]->Get()); const CVec4Type &e(*jj[0]->Get()); const CVec4Type &b(*jj[2]->Get()); CVec4Type *j(CVec4Type::New((e*b)*a-(e*a)*b)); j->SetS(a.S()|e.S()|b.S()); return j; } };// end of class VVVVC_Calculator template class VVVVC_Calculator; template class VVVV_Calculator: public Lorentz_Calculator { public: typedef std::complex SComplex; typedef CVec4 CVec4Type; VVVV_Calculator(const Vertex_Key &key): Lorentz_Calculator(key) {} std::string Label() const { return "VVVV"; } CObject *Evaluate(const CObject_Vector &jj) { if (p_v->V()->id.back()%2) { const CVec4Type &a(*jj[0]->Get()); const CVec4Type &e(*jj[2]->Get()); const CVec4Type &b(*jj[1]->Get()); CVec4Type *j(CVec4Type::New((e*b)*a+(e*a)*b-SComplex(2.0)*(a*b)*e)); j->SetS(a.S()|e.S()|b.S()); return j; } const CVec4Type &a(*jj[1]->Get()); const CVec4Type &e(*jj[0]->Get()); const CVec4Type &b(*jj[2]->Get()); CVec4Type *j(CVec4Type::New((e*b)*a+(e*a)*b-SComplex(2.0)*(a*b)*e)); j->SetS(a.S()|e.S()|b.S()); return j; } };// end of class VVVV_Calculator template class VVVV_Calculator; }// end of namespace METOOLS using namespace METOOLS; DECLARE_GETTER(VVVVA_Calculator,"DVVVVA", Lorentz_Calculator,Vertex_Key); Lorentz_Calculator *ATOOLS::Getter >:: operator()(const Vertex_Key &key) const { return new VVVVA_Calculator(key); } void ATOOLS::Getter >:: PrintInfo(std::ostream &str,const size_t width) const { str<<"VVVVA vertex"; } DECLARE_GETTER(VVVVB_Calculator,"DVVVVB", Lorentz_Calculator,Vertex_Key); Lorentz_Calculator *ATOOLS::Getter >:: operator()(const Vertex_Key &key) const { return new VVVVB_Calculator(key); } void ATOOLS::Getter >:: PrintInfo(std::ostream &str,const size_t width) const { str<<"VVVVB vertex"; } DECLARE_GETTER(VVVVC_Calculator,"DVVVVC", Lorentz_Calculator,Vertex_Key); Lorentz_Calculator *ATOOLS::Getter >:: operator()(const Vertex_Key &key) const { return new VVVVC_Calculator(key); } void ATOOLS::Getter >:: PrintInfo(std::ostream &str,const size_t width) const { str<<"VVVVC vertex"; } DECLARE_GETTER(VVVV_Calculator,"DVVVV", Lorentz_Calculator,Vertex_Key); Lorentz_Calculator *ATOOLS::Getter >:: operator()(const Vertex_Key &key) const { return new VVVV_Calculator(key); } void ATOOLS::Getter >:: PrintInfo(std::ostream &str,const size_t width) const { str<<"VVVV vertex"; }