int Recola_Interface::RegisterProcess(const Process_Info& pi, int amptype) { increaseProcIndex(); msg_Debugging()<<"Recola_Interface::RegisterProcess called\n"; int procIndex(getProcIndex()); msg_Debugging()<<"ProcIndex = " <<procIndex <<"\n"; msg_Debugging()<<"process string = "<<process2Recola(pi)<<"\n"; m_procmap[procIndex]=pi; if (!pi.m_nlomode && amptype!=12) { msg_Debugging() << "no NLO mode detected!\n"; return 0; } // set procIndex to map with flavours define_process_rcl(procIndex,process2Recola(pi),"NLO"); unselect_all_gs_powers_BornAmpl_rcl(procIndex); unselect_all_gs_powers_LoopAmpl_rcl(procIndex); Data_Reader reader(" ",";","#","="); reader.AddIgnore("["); reader.AddIgnore("]"); if(pi.m_fi.m_nloqcdtype==nlo_type::loop){ select_gs_power_BornAmpl_rcl(procIndex,pi.m_maxcpl[0]-(pi.m_fi.m_nloqcdtype==nlo_type::loop)); select_gs_power_LoopAmpl_rcl(procIndex,pi.m_maxcpl[0]+(pi.m_fi.m_nloqcdtype==nlo_type::loop)); } else if (amptype==12) { select_gs_power_LoopAmpl_rcl(procIndex,pi.m_maxcpl[0]); } msg_Debugging()<<"procIndex "<<procIndex<<" returned\n"; return procIndex; }
CSpinorType LorentzRight(const CSpinorType &a,const CScalarType &b) { switch (a.B()) { case -1: { CSpinorType j(a.R(),a.B(),0,0,a.H()|b.H(),a.S()|b.S(),2); #ifdef DEBUG__BG msg_Debugging()<<"<| L "<<a<<"\n"; msg_Debugging()<<" "<<b<<"\n"; #endif j[2]=a[2]*b[0]; j[3]=a[3]*b[0]; j[1]=j[0]=SComplex(0.0,0.0); return j; } case 1: { CSpinorType j(a.R(),a.B(),0,0,a.H()|b.H(),a.S()|b.S(),1); #ifdef DEBUG__BG msg_Debugging()<<"|> R "<<a<<"\n"; msg_Debugging()<<" "<<b<<"\n"; #endif j[3]=j[2]=SComplex(0.0,0.0); j[0]=a[0]*b[0]; j[1]=a[1]*b[0]; return j; } } return CSpinorType(); }
CScalarType LorentzRight(const CSpinorType &a,const CSpinorType &b) { #ifdef DEBUG__BG msg_Debugging()<<"<> R "<<a<<"\n"; msg_Debugging()<<" "<<b<<"\n"; #endif return CScalarType(a[0]*b[0]+a[1]*b[1],0,a.S()|b.S()); }
CScalarType LorentzLeft(const CSpinorType &a,const CSpinorType &b) { #ifdef DEBUG__BG msg_Debugging()<<"<> L "<<a<<"\n"; msg_Debugging()<<" "<<b<<"\n"; #endif return CScalarType(a[2]*b[2]+a[3]*b[3],0,a.S()|b.S()); }
bool Jets(Cluster_Amplitude *ampl,int mode) { DEBUG_FUNC("mode = "<<mode); msg_Debugging()<<*ampl<<"\n"; PHASIC::Jet_Finder *jf(ampl->JF<PHASIC::Jet_Finder>()); double q2cut(jf->Ycut()*sqr(rpa->gen.Ecms())); double q2min(std::numeric_limits<double>::max()); size_t imin(0), jmin(0), kmin(0); Flavour mofl; for (size_t i(0);i<ampl->Legs().size();++i) { Cluster_Leg *li(ampl->Leg(i)); for (size_t j(Max(i+1,ampl->NIn()));j<ampl->Legs().size();++j) { Cluster_Leg *lj(ampl->Leg(j)); if (j<ampl->NIn()) continue; for (size_t k(0);k<ampl->Legs().size();++k) { if (k==i || k==j) continue; Cluster_Leg *lk(ampl->Leg(k)); if (i<ampl->NIn() && k>=ampl->NIn()) continue; if (lk->Flav().Strong() && li->Flav().Strong() && lj->Flav().Strong()) { if (i<ampl->NIn()) li->SetMom(-li->Mom()); if (k<ampl->NIn()) lk->SetMom(-lk->Mom()); double q2ijk(pT2pythia(ampl,*li,*lj,*lk,i<ampl->NIn()?-1:1)); msg_Debugging()<<"Q_{"<<ID(li->Id())<<ID(lj->Id()) <<","<<ID(lk->Id())<<"} = "<<sqrt(q2ijk)<<"\n"; if (i<ampl->NIn()) li->SetMom(-li->Mom()); if (k<ampl->NIn()) lk->SetMom(-lk->Mom()); if (mode==0) { if (q2ijk<q2cut) return false; } else { if (q2ijk<q2min) { q2min=q2ijk; mofl=Flavour(kf_gluon); if (li->Flav().IsGluon()) mofl=lj->Flav(); if (lj->Flav().IsGluon()) mofl=li->Flav(); imin=i; jmin=j; kmin=k; } } } } } } if (mode!=0 && imin!=jmin) { Vec4D_Vector p=Combine(*ampl,imin,jmin,kmin,mofl); if (p.empty()) { msg_Error()<<METHOD<<"(): Combine failed. Use R configuration."<<std::endl; return Jets(ampl,0); } Cluster_Amplitude *bampl(Cluster_Amplitude::New()); bampl->SetProc(ampl->Proc<void>()); bampl->SetMS(ampl->MS()); bampl->SetNIn(ampl->NIn()); bampl->SetJF(ampl->JF<void>()); for (int i(0), j(0);i<ampl->Legs().size();++i) { if (i==jmin) continue; if (i==imin) { bampl->CreateLeg(p[j],mofl,ampl->Leg(i)->Col()); bampl->Legs().back()->SetId(ampl->Leg(imin)->Id()|ampl->Leg(jmin)->Id()); bampl->Legs().back()->SetK(ampl->Leg(kmin)->Id()); } else { bampl->CreateLeg(p[j],ampl->Leg(i)->Flav(),ampl->Leg(i)->Col()); } ++j; } bool res=Jets(bampl,0); bampl->Delete(); return res; } msg_Debugging()<<"--- Jet veto ---\n"; return true; }