void InitialiseGenerator(int argc, char *argv[]) { if(argc<2) { cout<<"Usage: ./SingleDecay <PDG_CODE>"<<endl; THROW(normal_exit,"you didn't specify the decaying particle by PDG code."); } small_sherpa_init(argc, argv); hadrons = new SHERPA::Hadron_Decay_Handler(".", "Fragmentation.dat"); Data_Reader * reader = new Data_Reader(" ",";","!","="); reader->AddWordSeparator("\t"); reader->SetInputPath("./"); reader->SetInputFile("YFS.dat"); photons = new PHOTONS::Photons(reader,true); mother_flav = Flavour( (kf_code) abs(ToType<int>(argv[1])) ); mother_flav.SetStable(false); if(ToType<int>(argv[1])<0) mother_flav=mother_flav.Bar(); rpa->gen.SetEcms(mother_flav.HadMass()); msg_Info()<<"Welcome. I am decaying a "<<mother_flav<<endl; Particle* mother_part = new Particle( 1,mother_flav, Vec4D(mother_flav.HadMass(),0.,0.,0.) ); mother_part->SetTime(); mother_part->SetFinalMass(mother_flav.HadMass()); ref_blob = new Blob(); ref_blob->SetType(btp::Hadron_Decay); ref_blob->SetStatus(blob_status::needs_hadrondecays); ref_blob->AddToInParticles(mother_part); try { hadrons->FillOnshellDecay(ref_blob, NULL); } catch (Return_Value::code ret) { msg_Error()<<METHOD<<" Something went wrong for blob: "<<ref_blob<<endl; return; } }
Blob_List* GenerateEvent() { Blob_List* blobs = new Blob_List(); Particle* mother_part = new Particle( 1,mother_flav,Vec4D(mother_flav.HadMass(),0.,0.,0.) ); mother_part->SetTime(); mother_part->SetFinalMass(mother_flav.HadMass()); Blob* blob = blobs->AddBlob(btp::Hadron_Decay); blob->SetStatus(blob_status::needs_hadrondecays); blob->AddToInParticles(mother_part); try { hadrons->FillOnshellDecay(blob, NULL); } catch (Return_Value::code ret) { msg_Error()<<METHOD<<" Something went wrong for event: "<<*blobs <<endl; return blobs; } hadrons->CleanUp(); msg_Events()<<*blobs<<std::endl; return blobs; }
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; }
CT10_Fortran_Interface(const ATOOLS::Flavour bunch, std::string set, int member) : m_anti(1) { m_xmin=1.e-8; m_xmax=1.; m_q2min=1.69; m_q2max=1.e10; m_set=set; m_type=m_set; m_bunch=bunch; m_member=member; if (m_bunch==Flavour(kf_p_plus).Bar()) m_anti=-1; int iset = 0; std::string path = rpa->gen.Variable("SHERPA_SHARE_PATH")+"/CT10Grid"; if (m_set==std::string("ct10")) { iset = 100+m_member; m_asinfo.m_order=1; m_asinfo.m_asmz=0.118; if (m_member==0) m_lhef_number=10800; else m_lhef_number=10801; } double asmz[10] = {0.116, 0.117, 0.119, 0.120, 0.113, 0.114, 0.115, 0.121, 0.122, 0.123}; for (size_t i=0; i<10; ++i) { if (m_set==std::string("ct10.as"+ToString(i)) && m_member==0) { iset = 10+i; m_asinfo.m_order=1; m_asinfo.m_asmz=asmz[i]; } } if (m_set==std::string("ct10.3f") && m_member==0) { iset = 30; m_asinfo.m_order=1; m_asinfo.m_asmz=0.118; } if (m_set==std::string("ct10.4f") && m_member==0) { iset = 31; m_asinfo.m_order=1; m_asinfo.m_asmz=0.118; } if (m_set==std::string("ct10w")) { iset = 200+m_member; m_asinfo.m_order=1; m_asinfo.m_asmz=0.118; } for (size_t i=0; i<10; ++i) { if (m_set==std::string("ct10was"+ToString(i)) && m_member==0) { iset = 20+i; m_asinfo.m_order=1; m_asinfo.m_asmz=asmz[i]; } } if (m_set==std::string("ct10w3f") && m_member==0) { iset = 32; m_asinfo.m_order=1; m_asinfo.m_asmz=0.118; } if (m_set==std::string("ct10w4f") && m_member==0) { iset = 33; m_asinfo.m_order=1; m_asinfo.m_asmz=0.118; } if (iset==0) { THROW(fatal_error, "PDF set "+m_set+" ("+ToString(m_member)+") not found."); } m_asinfo.m_mz2=sqr(91.1876); char buffer[1024]; char * err = getcwd(buffer,1024); if (err==NULL) { msg_Error()<<"Error in CT10_Fortran_Interface.C "<<std::endl; } int stat=chdir(path.c_str()); msg_Tracking()<<METHOD<<"(): Init Iset "<<iset<<"."<<std::endl; setct10_(iset); if (stat==0) { stat=chdir(buffer); } else { msg_Error()<<"Error in CT10_Fortran_Interface.C "<<std::endl <<" path "<<path<<" not found "<<std::endl; } for (int i=1;i<6;i++) { m_partons.insert(Flavour((kf_code)(i))); m_partons.insert(Flavour((kf_code)(i)).Bar()); } m_partons.insert(Flavour(kf_gluon)); m_partons.insert(Flavour(kf_jet)); m_partons.insert(Flavour(kf_jet)); m_partons.insert(Flavour(kf_quark)); m_partons.insert(Flavour(kf_quark).Bar()); }
PoleFit::PoleFit(GeneralModel model, double* masses, const Flavour_Vector& flavs, const std::vector<int>& i) : FormFactor_Base(model, masses, flavs, i) { m_V_F0=0.0; m_V_m0=0.0; m_V_a0=0.0; m_V_b0=0.0; m_V_c0=0.0; m_V_d0=0.0; m_V_F1=0.0; m_V_m1=0.0; m_V_a1=0.0; m_V_b1=0.0; m_V_c1=0.0; m_V_d1=0.0; m_A0_F0=0.0; m_A0_m0=0.0; m_A0_a0=0.0; m_A0_b0=0.0; m_A0_c0=0.0; m_A0_d0=0.0; m_A0_F1=0.0; m_A0_m1=0.0; m_A0_a1=0.0; m_A0_b1=0.0; m_A0_c1=0.0; m_A0_d1=0.0; m_A1_F0=0.0; m_A1_m0=0.0; m_A1_a0=0.0; m_A1_b0=0.0; m_A1_c0=0.0; m_A1_d0=0.0; m_A1_F1=0.0; m_A1_m1=0.0; m_A1_a1=0.0; m_A1_b1=0.0; m_A1_c1=0.0; m_A1_d1=0.0; m_A2_F0=0.0; m_A2_m0=0.0; m_A2_a0=0.0; m_A2_b0=0.0; m_A2_c0=0.0; m_A2_d0=0.0; m_A2_F1=0.0; m_A2_m1=0.0; m_A2_a1=0.0; m_A2_b1=0.0; m_A2_c1=0.0; m_A2_d1=0.0; kf_code kf0=m_flavs[p_i[0]].Kfcode(); kf_code kf1=m_flavs[p_i[1]].Kfcode(); if (kf0==kf_B || kf0==kf_B_plus) { if (kf1==kf_rho_770 || kf1==kf_rho_770_plus) { m_V_F0 = 1.045; m_V_m0 = 5.32; m_V_F1 = -0.721; m_V_m1 = 6.192; m_V_a0 = -1.0; m_V_a1 = -1.0; m_A0_F0 = 1.527; m_A0_m0 = 5.28; m_A0_F1 = -1.220; m_A0_m1 = 5.776; m_A0_a0 = -1.0; m_A0_a1 = -1.0; m_A1_F0 = 0.240; m_A1_m0 = 6.125; m_A1_a0 = -1.0; m_A2_F0 = 0.009; m_A2_m0 = 6.389; m_A2_F1 = 0.212; m_A2_m1 = 6.389; m_A2_a0 = -1.0; m_A2_a1 = -2.0; m_A2_b1 = 1.0; } else if(kf1==kf_omega_782) { m_V_F0 = 1.006; m_V_m0 = 5.32; m_V_F1 = -0.713; m_V_m1 = 6.12; m_V_a0 = -1.0; m_V_a1 = -1.0; m_A0_F0 = 1.321; m_A0_m0 = 5.28; m_A0_F1 = -1.040; m_A0_m1 = 5.871; m_A0_a0 = -1.0; m_A0_a1 = -1.0; m_A1_F0 = -0.217; m_A1_m0 = 6.084; m_A1_a0 = -1.0; m_A2_F0 = 0.006; m_A2_m0 = 6.422; m_A2_F1 = 0.192; m_A2_m1 = 6.422; m_A2_a0 = -1.0; m_A2_a1 = -2.0; m_A2_b1 = 1.0; } else if(kf1==kf_a_1_1260 || kf1==kf_a_1_1260_plus) { m_V_F0=-0.67; m_V_m0=m_m0; m_V_a0=-0.72; m_V_b0=-0.2; m_A0_F0=-0.23; m_A0_m0=m_m0; m_A0_a0=-0.86; m_A0_b0=-0.38; m_A1_F0=-0.42; m_A1_m0=m_m0; m_A1_a0=0.44; m_A1_b0=0.45; m_A2_F0=-0.53; m_A2_m0=m_m0; m_A2_a0=-0.45; m_A2_b0=0.13; } } else if (kf0==kf_D_plus || kf0==kf_D) { if (kf1==kf_K_star_892 || kf1==kf_K_star_892_plus) { m_V_F0 = 1.62; m_V_a0 = -1.0; m_V_m0 = 2.1; m_A1_F0 = 1.0; m_A1_a0 = -1.0; m_A1_m0 = 2.5; m_A2_F0 = 0.83; m_A2_a0 = -1.0; m_A2_m0 = 2.5; } } else if (kf0==kf_D_s_plus) { if (kf1==kf_phi_1020) { switch( int(model("FORM_FACTOR_TUNE", 1)+0.5)) { case 1: // hep-lat 1311.6669v1 lattice QCD m_V_F0 = 1.059; m_V_m0 = 2.112; m_V_a0 = -1.0; m_A0_F0 = 0.706; m_A0_m0 = 2.459; m_A0_a0 = -1.0; m_A1_F0 = 0.615; m_A1_m0 = 2.459; m_A1_a0 = -1.0; m_A2_F0 = 0.457; m_A2_m0 = 2.459; m_A2_a0 = -1.0; break; case 2: // hep-ph 0308259 QCD sum rules m_V_F0 = 1.21; m_V_m0 = 2.08; m_V_a0 = -1.0; m_A0_F0 = 0.42; m_A0_m0 = 1.9; m_A0_a0 = -1.0; m_A1_F0 = 0.55; m_A1_m0 = 1.9; m_A1_a0 = -1.0; m_A2_F0 = 0.59; m_A2_m0 = 1.9; m_A2_a0 = -1.0; break; case 4: // hep-ph/0401181 light-cone sum rules m_V_F0 = 0.9; m_V_m0 = 1.9685; m_V_a0 = -2.82; m_V_b0 = 1.51; m_A0_F0 = 0.56; m_A0_m0 = 1.9685; m_A0_a0 = -0.13; m_A0_b0 = -0.46; m_A1_F0 = 0.65; m_A1_m0 = 1.9685; m_A1_a0 = -1.36; m_A1_b0 = -0.31; m_A2_F0 = 0.85; m_A2_m0 = 1.9685; m_A2_a0 = -4.5; m_A2_b0 = 5.55; break; case 5: // PhysRevD.78.054002 light-front quark model m_V_F0 = 0.91; m_V_m0 = 1.9685; m_V_a0 = -1.15; m_V_b0 = 0.39; m_A0_F0 = 0.62; m_A0_m0 = 1.9685; m_A0_a0 = -1.02; m_A0_b0 = 0.45; m_A1_F0 = 0.61; m_A1_m0 = 1.9685; m_A1_a0 = -0.69; m_A1_b0 = 0.02; m_A2_F0 = 0.58; m_A2_m0 = 1.9685; m_A2_a0 = -0.98; m_A2_b0 = 0.27; break; default: msg_Error()<<METHOD<<": You chose a form factor tune which does not " <<"exist. Aborting."<<std::endl; abort(); } } else if (kf1==kf_K_star_892) { // doi:10.1103/PhysRevD.78.054002 light-front quark model m_V_F0 = 0.79; m_V_m0 = 1.9685; m_V_a0 = -1.24; m_V_b0 = 0.50; m_A0_F0 = 0.54; m_A0_m0 = 1.9685; m_A0_a0 = -1.03; m_A0_b0 = 0.62; m_A1_F0 = 0.53; m_A1_m0 = 1.9685; m_A1_a0 = -0.53; m_A1_b0 = 0.03; m_A2_F0 = 0.49; m_A2_m0 = 1.9685; m_A2_a0 = -1.03; m_A2_b0 = 0.34; } } m_V_F0 = model("V_F0",m_V_F0); m_V_F1 = model("V_F1",m_V_F1); m_V_m0 = model("V_m0",m_V_m0); m_V_m1 = model("V_m1",m_V_m1); m_V_a0 = model("V_a0",m_V_a0); m_V_a1 = model("V_a1",m_V_a1); m_V_b0 = model("V_b0",m_V_b0); m_V_b1 = model("V_b1",m_V_b1); m_V_c0 = model("V_c0",m_V_c0); m_V_c1 = model("V_c1",m_V_c1); m_V_d0 = model("V_d0",m_V_d0); m_V_d1 = model("V_d1",m_V_d1); m_A0_F0 = model("A0_F0",m_A0_F0); m_A0_F1 = model("A0_F1",m_A0_F1); m_A0_m0 = model("A0_m0",m_A0_m0); m_A0_m1 = model("A0_m1",m_A0_m1); m_A0_a0 = model("A0_a0",m_A0_a0); m_A0_a1 = model("A0_a1",m_A0_a1); m_A0_b0 = model("A0_b0",m_A0_b0); m_A0_b1 = model("A0_b1",m_A0_b1); m_A0_c0 = model("A0_c0",m_A0_c0); m_A0_c1 = model("A0_c1",m_A0_c1); m_A0_d0 = model("A0_d0",m_A0_d0); m_A0_d1 = model("A0_d1",m_A0_d1); m_A1_F0 = model("A1_F0",m_A1_F0); m_A1_F1 = model("A1_F1",m_A1_F1); m_A1_m0 = model("A1_m0",m_A1_m0); m_A1_m1 = model("A1_m1",m_A1_m1); m_A1_a0 = model("A1_a0",m_A1_a0); m_A1_a1 = model("A1_a1",m_A1_a1); m_A1_b0 = model("A1_b0",m_A1_b0); m_A1_b1 = model("A1_b1",m_A1_b1); m_A1_c0 = model("A1_c0",m_A1_c0); m_A1_c1 = model("A1_c1",m_A1_c1); m_A1_d0 = model("A1_d0",m_A1_d0); m_A1_d1 = model("A1_d1",m_A1_d1); m_A2_F0 = model("A2_F0",m_A2_F0); m_A2_F1 = model("A2_F1",m_A2_F1); m_A2_m0 = model("A2_m0",m_A2_m0); m_A2_m1 = model("A2_m1",m_A2_m1); m_A2_a0 = model("A2_a0",m_A2_a0); m_A2_a1 = model("A2_a1",m_A2_a1); m_A2_b0 = model("A2_b0",m_A2_b0); m_A2_b1 = model("A2_b1",m_A2_b1); m_A2_c0 = model("A2_c0",m_A2_c0); m_A2_c1 = model("A2_c1",m_A2_c1); m_A2_d0 = model("A2_d0",m_A2_d0); m_A2_d1 = model("A2_d1",m_A2_d1); }