Pol_Info::Pol_Info(const ATOOLS::Flavour& fl) { int dof = 1; pol_type='s'; if(fl.IsFermion()) { dof = 2;pol_type='h';}; if(fl.IsVector() && ATOOLS::IsZero(fl.Mass())) { dof = 2;pol_type='c';} if(fl.IsVector() && !ATOOLS::IsZero(fl.Mass())) { #ifdef Explicit_Pols dof=3; #else dof=1; #endif pol_type='c'; } if(fl.IsTensor()) dof=5; Init(dof); if(!fl.IsTensor()) { int tf[3] = {mt::p_m, mt::p_p, mt::p_l }; for(int j=0;j<dof;j++){ type[j] = tf[j]; factor[j] = 1.; } } else { type[0]=mt::p_t1;factor[0]=1.; type[1]=mt::p_t2;factor[1]=1.; type[2]=mt::p_t3;factor[2]=1.; type[3]=mt::p_t4;factor[3]=1.; type[4]=mt::p_t5;factor[4]=1.; } }
bool CF_QED::AllowSpec(const ATOOLS::Flavour &fl) { if (!fl.Strong() && fl.Mass()>10.0) return false; if (m_cfl.IntCharge()==0) return fl.Charge(); switch (m_type) { case cstp::FF: case cstp::II: return fl.IntCharge()*m_cfl.IntCharge()<0; case cstp::FI: case cstp::IF: return fl.IntCharge()*m_cfl.IntCharge()>0; default: return false; } }
double Hadron_Remnant::GetXPDF(ATOOLS::Flavour flavour,double scale) { double cut, x; cut=2.0*(flavour.HadMass()+m_hardpt.PPerp()/ sqr(m_companions.size()))/p_beam->OutMomentum()[0]; // assume heavy flavours have been pair-produced // => scale should be approximately (2m)^2 scale=Max(scale,4.0*sqr(flavour.Mass())); if (scale<p_pdfbase->Q2Min()) { msg_Error()<<"Hadron_Remnant::GetXPDF("<<flavour<<","<<scale<<"): " <<"Scale under-runs minimum given by PDF: " <<scale<<" < "<<p_pdfbase->Q2Min()<<std::endl; scale=1.001*p_pdfbase->Q2Min(); } unsigned int xtrials, pdftrials=0; while (true) { ++pdftrials; xtrials=0; do { ++xtrials; x=m_xrem*ran->Get(); if (xtrials>=m_maxtrials) { x=Min(cut,0.999999*p_pdfbase->RescaleFactor()); break; } if (x>p_pdfbase->RescaleFactor()) continue; } while (x<cut); if (x>p_pdfbase->XMin() && x<p_pdfbase->XMax()) { p_pdfbase->Calculate(x,scale); } else { m_xscheme=0; return 0.01; } if (pdftrials>=m_maxtrials) { m_xscheme=0; return 0.01; } if (p_pdfbase->GetXPDF(flavour)/x>ran->Get()) return x; } return 0.0; }
Channel_Interface::Channel_Interface(int nin,int nout,ATOOLS::Flavour *flavour,ATOOLS::Flavour res): Single_Channel(nin,nout,flavour) { if (nout != 2 || nin!=2) { msg_Error()<<"Channel_Interface::Channel_Interface(..): " <<"Cannot handle "<<nin<<" -> "<<nout<<" processes. Abort."<<std::endl; exit(169); } nin = nin; nout = nout; ms = new double[nin+nout]; for (short int i=0;i<nin+nout;i++) ms[i] = ATOOLS::sqr(flavour[i].Mass()); rannum = 3; rans = new double[rannum]; s = smax = pt2max = ATOOLS::sqr(ATOOLS::rpa->gen.Ecms()); pt2min = 0.; E = 0.5*sqrt(s); name = "Channel Interface"; mass = width = 0.; type = 0; if (res!=ATOOLS::Flavour(kf_none)) { mass = res.Mass(); width = res.Width(); type = 1; } }
double MI_Handler::Mass(const ATOOLS::Flavour &fl) const { return fl.Mass(); }
double Hard_Decay_Handler::Mass(const ATOOLS::Flavour &fl) const { if (m_usemass==0) return fl.Mass(); if (m_decmass.find(fl)!=m_decmass.end()) return fl.Mass(true); return fl.Mass(); }