void SM_U1_B::FillSpectrum(const PDF::ISR_Handler_Map& isr) { p_dataread->RereadInFile(); p_constants->insert(make_pair(string("M_Z'"), p_dataread->GetValue<double>("M_Z'",-1.))); p_constants->insert(make_pair(string("g'_1"), p_dataread->GetValue<double>("g'_1",0.))); double MZprime(ScalarConstant(string("M_Z'"))),GZprime(0.),inc; double g1prime(sqr(ScalarConstant(std::string("g'_1")))); FixMix(); msg_Out()<<"Calculate width for Z' with mass = "<<MZprime<<" GeV.\n"; for (short int i=1;i<=6;i++) { Flavour quark = Flavour((kf_code)(i)); double massq = quark.HadMass(); if (!quark.IsOn() || !quark.Strong()) continue; if (i%2) { if (2.*massq>MZprime) continue; GZprime += inc = 3.*MZprime*g1prime/(24.*M_PI)*pow(1.-sqr(2.*massq/MZprime),3./2.); msg_Out()<<" Add Z' --> "<<quark<<"+"<<quark.Bar()<<" ("<<i<<"), " <<" add "<<inc<<" GeV.\n"; } else { double M2 = MZprime*MZprime, mq2 = massq*massq; for (short int j=2;j<=7;j+=2) { Flavour anti = Flavour((kf_code)(j)).Bar(); if (!anti.IsOn() || !anti.Strong()) continue; double massa = anti.HadMass(), ma2 = massa*massa; if (massq+massa>MZprime) continue; Complex mix = ComplexMatrixElement(std::string("UpMix"),i/2-1,j/2-1); double absmix = ATOOLS::sqr(mix.real())+ATOOLS::sqr(mix.imag()); if (ATOOLS::IsZero(absmix)) continue; GZprime += inc = 3.*g1prime*absmix/(24.*M_PI*M2)* ((2.*M2-mq2-ma2)/2.-3.*massq*massa-ATOOLS::sqr(ma2-mq2)/(2.*M2)) * sqrt(ATOOLS::sqr(M2-mq2-ma2)-4.*ma2*mq2)/(2.*MZprime); msg_Out()<<" Add Z' --> "<<quark<<"+"<<anti<<" ("<<i<<"), " <<" add "<<inc<<" GeV.\n"; } } } Flavour flav; flav = Flavour(kf_Z0_2); flav.SetMass(ScalarConstant(string("M_Z'"))); flav.SetHadMass(MZprime); flav.SetMassOn(true); flav.SetWidth(GZprime); msg_Out()<<METHOD<<" initializes Z' boson with \n" <<" mass = "<<MZprime<<" GeV and width = "<<GZprime<<" GeV\n" <<" for g'_1 = "<<ScalarConstant(std::string("g'_1"))<<".\n"; }
void Lund_Interface::AdjustProperties(Flavour flav) { int kc = pycomp(SherpaToIdhep(flav)); if(kc>500) return; // adjust mass double pythiamass = pydat2.pmas[1-1][kc-1]; double sherpamass = flav.HadMass(); flav.SetMass(pythiamass); if( !(abs(sherpamass-pythiamass)/sherpamass < 1.e-2) ) { msg_Info()<<METHOD<<" Adjusted mass of "<<flav<<" ("<<flav.Kfcode() <<") from "<<sherpamass<<" to "<<pythiamass<<" to allow Pythia decays."<<endl; } }