#include "MODEL/Main/Single_Vertex.H" #include "ATOOLS/Org/Message.H" #include "ATOOLS/Math/Vector.H" #include "ATOOLS/Org/Shell_Tools.H" #include <iomanip> #include <stdlib.h> #include <stdio.h> #include <sstream> using namespace MODEL; using namespace ATOOLS; using namespace std; Single_Vertex::Single_Vertex(): order(2,0), dec(0) { } Single_Vertex::~Single_Vertex() { } bool Single_Vertex::PureQCD() const { for (size_t i(1); i<order.size(); i++) if(order[i]) return false; return true; } int Single_Vertex::Compare(const Single_Vertex *v) const { if (NLegs()!=v->NLegs()) return 1; if (cpl.size()!=v->cpl.size()) return 2; for (size_t i(0);i<cpl.size();++i) if (cpl[i].Value()!=v->cpl[i].Value()) return 2; for (size_t i(0);i<Lorentz.size();++i) { if (!(Color[i]==v->Color[i])) return 3; if (!(Lorentz[i]==v->Lorentz[i])) return 4; } return 0; } std::string Single_Vertex::PID() const { std::string name(in[0].IDName()); for (int i(1);i<NLegs();++i) name+='|'+in[i].IDName(); return name; } bool Single_Vertex::operator==(const Single_Vertex& probe) { return (in==probe.in && cpl==probe.cpl && order==probe.order && Color==probe.Color && Lorentz==probe.Lorentz); } namespace MODEL{ std::ostream &operator<<(std::ostream& s, const Single_Vertex& sv) { if (sv.in.size()) { s<<'('<<sv.in[0]; for (size_t i(1);i<sv.in.size();++i) s<<','<<sv.in[i]; s<<')'; } if (sv.id.size()) { s<<'['<<sv.id[0]; for (size_t i(1);i<sv.id.size();++i) s<<','<<sv.id[i]; s<<']'; } if (sv.cpl.size() && sv.Color.size() && sv.Lorentz.size()) { s<<"{{"<<sv.Coupling(0)<<"*"<<sv.Color[0].FullString()<<"*"<<sv.Lorentz[0]; for (size_t i(1);i<sv.cpl.size();++i) s<<"}{"<<sv.Coupling(i)<<"*"<<sv.Color[i].FullString()<<"*"<<sv.Lorentz[i]; s<<"}}"; } return s; } }