#include "METOOLS/Explicit/Lorentz_Calculator.H" #include "MODEL/Main/Single_Vertex.H" #include "METOOLS/Explicit/Vertex.H" #include "ATOOLS/Org/Exception.H" using namespace ATOOLS; namespace METOOLS { class TT_Calculator: public Color_Calculator { private: const CObject *p_g[2], *p_q[2]; int m_g[2], m_q[2], m_d, m_n; public: inline TT_Calculator(const Vertex_Key &key): Color_Calculator(key) { m_cpl=Complex(0.5,0.0); m_n=p_v->V()->id.size()-1; if (key.p_mv->id.size()>4) THROW(not_implemented,"Help!"); int g[2]={key.p_mv->Color[key.m_n].ParticleArg(0), key.p_mv->Color[key.m_n].p_next->ParticleArg(0)}; int q[2]={key.p_mv->Color[key.m_n].ParticleArg(1), key.p_mv->Color[key.m_n].p_next->ParticleArg(2)}; if (q[0]<0 || q[1]<0) { std::swap(g[0],g[1]); q[1]=key.p_mv->Color[key.m_n].ParticleArg(2); q[0]=key.p_mv->Color[key.m_n].p_next->ParticleArg(1); } if (g[0]<0 || g[1]<0) THROW(fatal_error,"Invalid call"); for (int i(0);iid.size();++i) for (int j(0);j<2;++j) { if (key.p_mv->id[i]+1==g[j]) m_g[j]=i; if (key.p_mv->id[i]+1==q[j]) m_q[j]=i; } p_g[0]=p_g[1]=p_q[0]=p_q[1]=NULL; if (m_g[0]:: operator()(const Vertex_Key &key) const { return new TT_Calculator(key); } void ATOOLS::Getter:: PrintInfo(std::ostream &str,const size_t width) const { str<<"fundamental*fundamental"; }