#include "PDF/Main/Cluster_Definitions_Base.H" #include "ATOOLS/Org/Exception.H" using namespace PDF; using namespace ATOOLS; bool Cluster_Config::operator<(const Cluster_Config &cc) const { if (m_icc.m_i) return false; if (m_jcc.m_j) return false; if (m_kcc.m_k) return false; return m_moLeg(m_i)->Flav().StrongCharge() && p_ampl->Leg(m_j)->Flav().StrongCharge() && p_ampl->Leg(m_k)->Flav().StrongCharge(); } Cluster_Definitions_Base::Cluster_Definitions_Base() { } Cluster_Definitions_Base::~Cluster_Definitions_Base() { } int Cluster_Definitions_Base::ReCluster (Cluster_Amplitude *const ampl) { DEBUG_FUNC(""); msg_Debugging()<<*ampl<<"\n"; for (Cluster_Amplitude *campl(ampl->Next()); campl;campl=campl->Next()) { Cluster_Leg *lij(NULL); for (size_t ij(0);ijLegs().size();++ij) if (campl->Leg(ij)->K()) { lij=campl->Leg(ij); break; } if (lij==NULL) THROW(fatal_error,"Invalid amplitude"); int i(-1), j(-1), k(-1); for (size_t l(0);lPrev()->Legs().size();++l) { Cluster_Leg *cl(campl->Prev()->Leg(l)); if (cl->Id()&lij->Id()) { if (cl->Id()==campl->Prev()->IdNew()) j=l; else i=l; } if (cl->Id()==lij->K()) k=l; } if ((lij->Stat()&4) && campl->Legs().size()NIn()+2) { for (size_t l(0);lLegs().size();++l) { Cluster_Leg *cl(campl->Leg(l)); if (cl!=lij) cl->SetMom(campl->Prev()->IdLeg(cl->Id())->Mom()); } lij->SetMom(campl->Prev()->Leg(i)->Mom()+ campl->Prev()->Leg(j)->Mom()); } else { Cluster_Param cp=campl->CA()->Cluster (Cluster_Config(campl->Prev(),i,j,k,lij->Flav(),campl->MS(), NULL,campl->Kin(),((lij->Stat()&4)?1:0)| (campl->NLO()?16:0))); if (cp.m_pijt==Vec4D()) { cp=campl->CA()->Cluster (Cluster_Config(campl->Prev(),j,i,k,lij->Flav(),campl->MS(), NULL,campl->Kin(),((lij->Stat()&4)?1:0)| (campl->NLO()?16:0))); if (cp.m_pijt==Vec4D()) return -1; } for (size_t n(0);nLegs().size();++n) { Cluster_Leg *c(campl->Leg(n)); if (c->Id()&campl->Prev()->Leg(i)->Id()) c->SetMom(cp.m_pijt); else if (c->Id()&campl->Prev()->Leg(k)->Id()) c->SetMom(cp.m_pkt); else c->SetMom(cp.m_lam*campl->Prev()->IdLeg(c->Id())->Mom()); } } msg_Debugging()<<*campl<<"\n"; } return 1; }