#include "AMEGIC++/Amplitude/Single_Vertex.H" #include "ATOOLS/Org/Message.H" #include "ATOOLS/Math/Vector.H" #include "ATOOLS/Org/Shell_Tools.H" #include #include #include using namespace ATOOLS; using namespace AMEGIC; // Constructors and Destructors Single_Vertex::Single_Vertex(): order(2,0) { t = 0; nleg=3; cpl.resize(4); order[1]=1; dec=0; } Single_Vertex::Single_Vertex(const Single_Vertex& v): t(0) { *this=v; } Single_Vertex::~Single_Vertex() { for (size_t i(0);iDelete(); } } int Single_Vertex::Compare(const Single_Vertex *v) const { if (nleg!=v->nleg) return 1; if (cpl.size()!=v->cpl.size()) return 2; for (size_t i(0);icpl[i].Value()) return 2; for (size_t i(0);iColor[i])) return 3; if (!(*Lorentz[i]==*v->Lorentz[i])) return 4; } return 0; } Complex Single_Vertex::Coupling(size_t i) const { return cpl[i].Value(); } int Single_Vertex::CheckCoupling() const { for (size_t i(0);iDelete(); Lorentz=std::vector(); if (this!=&v) { for (short int i=0;i<4;i++) in[i] = v.in[i]; cpl.clear(); for (size_t j=0;jGetCopy(); } return *this; } bool Single_Vertex::operator==(const Single_Vertex& probe) { switch (nleg) // different checks for 3-leg and 4-leg vertices { case 4: return (probe.nleg == 4) && (in[0] == probe.in[0]) && (in[1] == probe.in[1]) && (in[2] == probe.in[2]) && (in[3] == probe.in[3]); case 3: return (probe.nleg == 3) && (in[0] == probe.in[0]) && (in[1] == probe.in[1]) && (in[2] == probe.in[2]); default: return 0; } } namespace AMEGIC{ std::ostream &operator<<(std::ostream& s, const Single_Vertex& sv) { return s<<'('<