Пример #1
0
  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;
  }
Пример #2
0
    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();
    }
Пример #3
0
    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());
    }
Пример #4
0
    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());
    }
Пример #5
0
    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;
    }