Belle II Software development
EvtbTosllNPR Class Reference

Description: Implementation of the B->K(*)l^+l^- decays with New Physics contributions and c\bar{c} resonances included at the amplitude level according to the note by Rahul Sinha and Rusa Mandal. More...

#include <EvtbTosllNPR.h>

Inheritance diagram for EvtbTosllNPR:

Public Member Functions

std::string getName () override
 The function which returns the name of the model.
 
EvtDecayBase * clone () override
 The function which makes a copy of the model.
 
void decay (EvtParticle *p) override
 The method to calculate a decay amplitude.
 
void init () override
 Initialization method.
 
void initProbMax () override
 The method to evaluate the maximum amplitude.
 
virtual ~EvtbTosllNPR ()
 The destructor to clean up objects created during the initialization.
 

Private Member Functions

double CalcMaxProb ()
 The method to evaluate the maximum decay amplitude.
 
void CalcAmp (EvtParticle *, EvtAmp &)
 The method to evaluate the decay amplitude.
 
void CalcSAmp (EvtParticle *, EvtAmp &)
 The method to evaluate the scalar kaon decay amplitude.
 
void CalcVAmp (EvtParticle *, EvtAmp &)
 The method to evaluate the vector kaon decay amplitude.
 

Private Attributes

EvtComplex m_dc7
 delta C_7eff – addition to NNLO SM value
 
EvtComplex m_dc9
 delta C_9eff – addition to NNLO SM value
 
EvtComplex m_dc10
 delta C_10eff – addition to NNLO SM value
 
EvtComplex m_c7p
 C'_7eff – right hand polarizations.
 
EvtComplex m_c9p
 C'_9eff – right hand polarizations.
 
EvtComplex m_c10p
 c'_10eff – right hand polarizations
 
EvtComplex m_cS
 (C_S - C'_S) – scalar right and left polarizations
 
EvtComplex m_cP
 (C_P - C'_P) – pseudo-scalar right and left polarizations
 
int m_flag {0}
 flag is set nonzero to include resonances
 
std::vector< BW_t * > m_rs
 vector with c\bar{c} resonance lineshapes
 
EvtLinSamplem_ls {0}
 piece-wise interpolation of maximum of the matrix element depend on q^2
 
hvec_t m_reso
 tabulated resonance contribution
 

Detailed Description

Description: Implementation of the B->K(*)l^+l^- decays with New Physics contributions and c\bar{c} resonances included at the amplitude level according to the note by Rahul Sinha and Rusa Mandal.

Definition at line 29 of file EvtbTosllNPR.h.

Constructor & Destructor Documentation

◆ ~EvtbTosllNPR()

~EvtbTosllNPR ( )
virtual

The destructor to clean up objects created during the initialization.

Definition at line 790 of file EvtbTosllNPR.cc.

791{
792 for (BW_t* t : m_rs) delete t;
793 if (m_ls) delete m_ls;
794}
std::vector< BW_t * > m_rs
vector with c\bar{c} resonance lineshapes
EvtLinSample * m_ls
piece-wise interpolation of maximum of the matrix element depend on q^2

Member Function Documentation

◆ CalcAmp()

void CalcAmp ( EvtParticle * parent,
EvtAmp & amp )
private

The method to evaluate the decay amplitude.

Definition at line 836 of file EvtbTosllNPR.cc.

837{
838 EvtId dId = parent->getDaug(0)->getId();
839 if (dId == IdKst0 || dId == IdaKst0 || dId == IdKstp || dId == IdKstm) {
840 CalcVAmp(parent, amp);
841 }
842 if (dId == IdK0 || dId == IdaK0 || dId == IdKp || dId == IdKm) {
843 CalcSAmp(parent, amp);
844 }
845}
void CalcSAmp(EvtParticle *, EvtAmp &)
The method to evaluate the scalar kaon decay amplitude.
void CalcVAmp(EvtParticle *, EvtAmp &)
The method to evaluate the vector kaon decay amplitude.

◆ CalcSAmp()

void CalcSAmp ( EvtParticle * parent,
EvtAmp & amp )
private

The method to evaluate the scalar kaon decay amplitude.

Definition at line 1159 of file EvtbTosllNPR.cc.

1160{
1161 // Add the lepton and neutrino 4 momenta to find q2
1162 EvtId pId = parent->getId();
1163
1164 EvtVector4R q = parent->getDaug(1)->getP4() + parent->getDaug(2)->getP4();
1165 double q2 = q.mass2();
1166 double dmass = parent->getDaug(0)->mass();
1167
1168 double fp, f0, ft; // form factors
1169 getScalarFF(q2, fp, f0, ft);
1170 const EvtVector4R& k = parent->getDaug(0)->getP4();
1171 double pmass = parent->mass();
1172 const EvtVector4R p(pmass, 0.0, 0.0, 0.0);
1173 EvtVector4R pk = p + k;
1174
1175 EvtComplex c7 = -0.304;
1176 EvtComplex c9 = C9(q2, interpol(m_reso, q2));
1177 EvtComplex c10 = -4.103;
1178 c7 += m_dc7;
1179 c9 += m_dc9;
1180 c10 += m_dc10;
1181
1182 double mb = 4.8 /*GeV/c^2*/, ms = 0.093 /*GeV/c^2*/;
1183
1184 int charge1 = EvtPDL::chg3(parent->getDaug(1)->getId());
1185
1186 EvtParticle* lepPos = (charge1 > 0) ? parent->getDaug(1)
1187 : parent->getDaug(2);
1188 EvtParticle* lepNeg = (charge1 < 0) ? parent->getDaug(1)
1189 : parent->getDaug(2);
1190
1191 EvtDiracSpinor lp0(lepPos->spParent(0)), lp1(lepPos->spParent(1));
1192 EvtDiracSpinor lm0(lepNeg->spParent(0)), lm1(lepNeg->spParent(1));
1193
1194 EvtVector4C l11, l12, l21, l22, a11, a12, a21, a22;
1195 EvtComplex s11, s12, s21, s22, p11, p12, p21, p22;
1196
1197 if (pId == IdBm || pId == IdaB0 || pId == IdaBs) {
1198 EvtLeptonVandACurrents(l11, a11, lp0, lm0);
1199 EvtLeptonVandACurrents(l21, a21, lp1, lm0);
1200 EvtLeptonVandACurrents(l12, a12, lp0, lm1);
1201 EvtLeptonVandACurrents(l22, a22, lp1, lm1);
1202
1203 s11 = EvtLeptonSCurrent(lp0, lm0);
1204 p11 = EvtLeptonPCurrent(lp0, lm0);
1205 s21 = EvtLeptonSCurrent(lp1, lm0);
1206 p21 = EvtLeptonPCurrent(lp1, lm0);
1207 s12 = EvtLeptonSCurrent(lp0, lm1);
1208 p12 = EvtLeptonPCurrent(lp0, lm1);
1209 s22 = EvtLeptonSCurrent(lp1, lm1);
1210 p22 = EvtLeptonPCurrent(lp1, lm1);
1211 } else if (pId == IdBp || pId == IdB0 || pId == IdBs) {
1212 EvtLeptonVandACurrents(l11, a11, lp1, lm1);
1213 EvtLeptonVandACurrents(l21, a21, lp0, lm1);
1214 EvtLeptonVandACurrents(l12, a12, lp1, lm0);
1215 EvtLeptonVandACurrents(l22, a22, lp0, lm0);
1216
1217 s11 = EvtLeptonSCurrent(lp1, lm1);
1218 p11 = EvtLeptonPCurrent(lp1, lm1);
1219 s21 = EvtLeptonSCurrent(lp0, lm1);
1220 p21 = EvtLeptonPCurrent(lp0, lm1);
1221 s12 = EvtLeptonSCurrent(lp1, lm0);
1222 p12 = EvtLeptonPCurrent(lp1, lm0);
1223 s22 = EvtLeptonSCurrent(lp0, lm0);
1224 p22 = EvtLeptonPCurrent(lp0, lm0);
1225 } else {
1226 EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Wrong lepton number\n";
1227 }
1228 double dm2 = pmass * pmass - dmass * dmass, t0 = dm2 / q2,
1229 t1 = 2 * mb * ft / (pmass + dmass);
1230 c7 += m_c7p;
1231 c9 += m_c9p;
1232 c10 += m_c10p;
1233 EvtVector4C E1 = (c9 * fp + c7 * t1) * pk +
1234 (t0 * (c9 * (f0 - fp) - c7 * t1)) * q;
1235 EvtVector4C E2 = (c10 * fp) * pk + (t0 * (f0 - fp)) * q;
1236 double s = dm2 / (mb - ms) * f0;
1237 amp.vertex(0, 0, l11 * E1 + a11 * E2 + (m_cS * s11 + m_cP * p11) * s);
1238 amp.vertex(0, 1, l12 * E1 + a12 * E2 + (m_cS * s12 + m_cP * p12) * s);
1239 amp.vertex(1, 0, l21 * E1 + a21 * E2 + (m_cS * s21 + m_cP * p21) * s);
1240 amp.vertex(1, 1, l22 * E1 + a22 * E2 + (m_cS * s22 + m_cP * p22) * s);
1241}
EvtComplex m_dc10
delta C_10eff – addition to NNLO SM value
hvec_t m_reso
tabulated resonance contribution
EvtComplex m_cS
(C_S - C'_S) – scalar right and left polarizations
EvtComplex m_cP
(C_P - C'_P) – pseudo-scalar right and left polarizations
EvtComplex m_c9p
C'_9eff – right hand polarizations.
EvtComplex m_dc7
delta C_7eff – addition to NNLO SM value
EvtComplex m_dc9
delta C_9eff – addition to NNLO SM value
EvtComplex m_c7p
C'_7eff – right hand polarizations.
EvtComplex m_c10p
c'_10eff – right hand polarizations

◆ CalcVAmp()

void CalcVAmp ( EvtParticle * parent,
EvtAmp & amp )
private

The method to evaluate the vector kaon decay amplitude.

Definition at line 972 of file EvtbTosllNPR.cc.

973{
974 // Add the lepton and neutrino 4 momenta to find q2
975 EvtId pId = parent->getId();
976
977 EvtVector4R q = parent->getDaug(1)->getP4() + parent->getDaug(2)->getP4();
978 double q2 = q.mass2();
979 double mesonmass = parent->getDaug(0)->mass();
980 double parentmass = parent->mass();
981
982 double a1, a2, a0, v, t1, t2, t3; // form factors
983 getVectorFF(q2, parentmass, mesonmass, a1, a2, a0, v, t1, t2, t3);
984
985 const EvtVector4R& p4meson = parent->getDaug(0)->getP4();
986 double pmass = parent->mass(), ipmass = 1 / pmass;
987 const EvtVector4R p4b(pmass, 0.0, 0.0, 0.0);
988 EvtVector4R pbhat = p4b * ipmass;
989 EvtVector4R qhat = q * ipmass;
990 EvtVector4R pkstarhat = p4meson * ipmass;
991 EvtVector4R phat = pbhat + pkstarhat;
992
993 EvtComplex c7 = -0.304;
994 EvtComplex c9 = C9(q2, interpol(m_reso, q2));
995 EvtComplex c10 = -4.103;
996 c7 += m_dc7;
997 c9 += m_dc9;
998 c10 += m_dc10;
999
1000 EvtComplex I(0.0, 1.0);
1001
1002 double mb = 4.8 /*GeV/c^2*/ * ipmass, ms = 0.093 /*GeV/c^2*/ * ipmass;
1003 double mH = mesonmass * ipmass, oamH = 1 + mH, osmH = 1 - mH,
1004 osmH2 = oamH * osmH, iosmH2 = 1 / osmH2; // mhatkstar
1005 double is = pmass * pmass / q2; // 1/shat
1006 a1 *= oamH;
1007 a2 *= osmH;
1008 a0 *= 2 * mH;
1009 double cs0 = (a1 - a2 - a0) * is;
1010 a2 *= iosmH2;
1011 v *= 2 / oamH;
1012
1013 EvtComplex a = (c9 + m_c9p) * v + (c7 + m_c7p) * (4 * mb * is * t1);
1014 EvtComplex b = (c9 - m_c9p) * a1 +
1015 (c7 - m_c7p) * (2 * mb * is * osmH2 * t2);
1016 EvtComplex c = (c9 - m_c9p) * a2 +
1017 (c7 - m_c7p) * (2 * mb * (t3 * iosmH2 + t2 * is));
1018 EvtComplex d = (c9 - m_c9p) * cs0 - (c7 - m_c7p) * (2 * mb * is * t3);
1019 EvtComplex e = (c10 + m_c10p) * v;
1020 EvtComplex f = (c10 - m_c10p) * a1;
1021 EvtComplex g = (c10 - m_c10p) * a2;
1022 EvtComplex h = (c10 - m_c10p) * cs0;
1023 double sscale = a0 / (mb + ms);
1024 EvtComplex hs = m_cS * sscale, hp = m_cP * sscale;
1025
1026 int charge1 = EvtPDL::chg3(parent->getDaug(1)->getId());
1027
1028 EvtParticle* lepPos = parent->getDaug(2 - (charge1 > 0));
1029 EvtParticle* lepNeg = parent->getDaug(1 + (charge1 > 0));
1030
1031 EvtDiracSpinor lp0(lepPos->spParent(0)), lp1(lepPos->spParent(1));
1032 EvtDiracSpinor lm0(lepNeg->spParent(0)), lm1(lepNeg->spParent(1));
1033
1034 EvtVector4C l11, l12, l21, l22, a11, a12, a21, a22;
1035 EvtComplex s11, s12, s21, s22, p11, p12, p21, p22;
1036 EvtTensor4C tt0 = asymProd(pbhat, pkstarhat);
1037
1038 EvtTensor4C T1(tt0), T2(tt0);
1039 const EvtTensor4C& gmn = EvtTensor4C::g();
1040 EvtTensor4C tt1(EvtGenFunctions::directProd(pbhat, phat));
1041 EvtTensor4C tt2(EvtGenFunctions::directProd(pbhat, qhat));
1042
1043 b *= I;
1044 c *= I;
1045 d *= I;
1046 f *= I;
1047 g *= I;
1048 h *= I;
1049 if (pId == IdBm || pId == IdaB0 || pId == IdaBs) {
1050 T1 *= a;
1051 addScaled(T1, -b, gmn);
1052 addScaled(T1, c, tt1);
1053 addScaled(T1, d, tt2);
1054 T2 *= e;
1055 addScaled(T2, -f, gmn);
1056 addScaled(T2, g, tt1);
1057 addScaled(T2, h, tt2);
1058
1059 EvtLeptonVandACurrents(l11, a11, lp0, lm0);
1060 EvtLeptonVandACurrents(l21, a21, lp1, lm0);
1061 EvtLeptonVandACurrents(l12, a12, lp0, lm1);
1062 EvtLeptonVandACurrents(l22, a22, lp1, lm1);
1063
1064 s11 = EvtLeptonSCurrent(lp0, lm0);
1065 p11 = EvtLeptonPCurrent(lp0, lm0);
1066 s21 = EvtLeptonSCurrent(lp1, lm0);
1067 p21 = EvtLeptonPCurrent(lp1, lm0);
1068 s12 = EvtLeptonSCurrent(lp0, lm1);
1069 p12 = EvtLeptonPCurrent(lp0, lm1);
1070 s22 = EvtLeptonSCurrent(lp1, lm1);
1071 p22 = EvtLeptonPCurrent(lp1, lm1);
1072 } else if (pId == IdBp || pId == IdB0 || pId == IdBs) {
1073 T1 *= -a;
1074 addScaled(T1, -b, gmn);
1075 addScaled(T1, c, tt1);
1076 addScaled(T1, d, tt2);
1077 T2 *= -e;
1078 addScaled(T2, -f, gmn);
1079 addScaled(T2, g, tt1);
1080 addScaled(T2, h, tt2);
1081
1082 EvtLeptonVandACurrents(l11, a11, lp1, lm1);
1083 EvtLeptonVandACurrents(l21, a21, lp0, lm1);
1084 EvtLeptonVandACurrents(l12, a12, lp1, lm0);
1085 EvtLeptonVandACurrents(l22, a22, lp0, lm0);
1086
1087 s11 = EvtLeptonSCurrent(lp1, lm1);
1088 p11 = EvtLeptonPCurrent(lp1, lm1);
1089 s21 = EvtLeptonSCurrent(lp0, lm1);
1090 p21 = EvtLeptonPCurrent(lp0, lm1);
1091 s12 = EvtLeptonSCurrent(lp1, lm0);
1092 p12 = EvtLeptonPCurrent(lp1, lm0);
1093 s22 = EvtLeptonSCurrent(lp0, lm0);
1094 p22 = EvtLeptonPCurrent(lp0, lm0);
1095 } else {
1096 EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Wrong lepton number\n";
1097 T1.zero();
1098 T2.zero(); // Set all tensor terms to zero.
1099 }
1100 for (int i = 0; i < 3; i++) {
1101 EvtVector4C eps = parent->getDaug(0)->epsParent(i).conj();
1102
1103 EvtVector4C E1 = T1.cont1(eps);
1104 EvtVector4C E2 = T2.cont1(eps);
1105
1106 EvtComplex epsq = I * (eps * q), epsqs = epsq * hs, epsqp = epsq * hp;
1107
1108 amp.vertex(i, 0, 0, l11 * E1 + a11 * E2 - s11 * epsqs - p11 * epsqp);
1109 amp.vertex(i, 0, 1, l12 * E1 + a12 * E2 - s12 * epsqs - p12 * epsqp);
1110 amp.vertex(i, 1, 0, l21 * E1 + a21 * E2 - s21 * epsqs - p21 * epsqp);
1111 amp.vertex(i, 1, 1, l22 * E1 + a22 * E2 - s22 * epsqs - p22 * epsqp);
1112 }
1113}

◆ clone()

EvtDecayBase * clone ( )
override

The function which makes a copy of the model.

Definition at line 46 of file EvtbTosllNPR.cc.

47{
48 return new EvtbTosllNPR;
49}

◆ decay()

void decay ( EvtParticle * p)
override

The method to calculate a decay amplitude.

Definition at line 166 of file EvtbTosllNPR.cc.

167{
168 static EvtVector4R p4[3];
169 static double mass[3];
170 double m_b = p->mass();
171 for (int i = 0; i < 3; i++)
172 mass[i] = p->getDaug(i)->mass();
173 EvtId* daughters = getDaugs();
174 double weight = PhaseSpacePole2(m_b, mass[2], mass[1], mass[0], p4, m_ls);
175 p->getDaug(0)->init(daughters[0], p4[2]);
176 p->getDaug(1)->init(daughters[1], p4[1]);
177 p->getDaug(2)->init(daughters[2], p4[0]);
178
179 setWeight(weight);
180 CalcAmp(p, _amp2);
181}
void CalcAmp(EvtParticle *, EvtAmp &)
The method to evaluate the decay amplitude.

◆ getName()

std::string getName ( )
override

The function which returns the name of the model.

Definition at line 41 of file EvtbTosllNPR.cc.

42{
43 return "BTOSLLNPR";
44}

◆ init()

void init ( )
override

Initialization method.

Definition at line 626 of file EvtbTosllNPR.cc.

627{
628 if (cafirst) {
629 cafirst = false;
630 IdB0 = EvtPDL::getId("B0");
631 IdaB0 = EvtPDL::getId("anti-B0");
632 IdBp = EvtPDL::getId("B+");
633 IdBm = EvtPDL::getId("B-");
634 IdBs = EvtPDL::getId("B_s0");
635 IdaBs = EvtPDL::getId("anti-B_s0");
636 IdRhop = EvtPDL::getId("rho+");
637 IdRhom = EvtPDL::getId("rho-");
638 IdRho0 = EvtPDL::getId("rho0");
639 IdOmega = EvtPDL::getId("omega");
640 IdKst0 = EvtPDL::getId("K*0");
641 IdaKst0 = EvtPDL::getId("anti-K*0");
642 IdKstp = EvtPDL::getId("K*+");
643 IdKstm = EvtPDL::getId("K*-");
644 IdK0 = EvtPDL::getId("K0");
645 IdaK0 = EvtPDL::getId("anti-K0");
646 IdKp = EvtPDL::getId("K+");
647 IdKm = EvtPDL::getId("K-");
648 }
649
650 // First choose format of NP coefficients from the .DEC file
651 // Cartesian(x,y)(0) or Polar(R,phase)(1)
652 int n = getNArg();
653 checkNDaug(3);
654
655 //We expect the parent to be a scalar
656 //and the daughters to be K(*) lepton+ lepton-
657
658 checkSpinParent(EvtSpinType::SCALAR);
659 checkSpinDaughter(1, EvtSpinType::DIRAC);
660 checkSpinDaughter(2, EvtSpinType::DIRAC);
661
662 EvtId mId = getDaug(0);
663 if (mId != IdKst0 && mId != IdaKst0 && mId != IdKstp && mId != IdKstm &&
664 mId != IdK0 && mId != IdaK0 && mId != IdKp && mId != IdKm) {
665 EvtGenReport(EVTGEN_ERROR, "EvtGen")
666 << "EvtbTosllNPR generator expected a K(*) 1st daughter, found: "
667 << EvtPDL::name(getDaug(0)) << endl;
668 EvtGenReport(EVTGEN_ERROR, "EvtGen")
669 << "Will terminate execution!" << endl;
670 ::abort();
671 }
672
673 auto getInteger = [this](int i) -> int {
674 double a = getArg(i);
675 if (a - static_cast<int>(a) != 0)
676 {
677 EvtGenReport(EVTGEN_ERROR, "EvtGen")
678 << "Parameters is not integer in the BTOSLLNPR decay model: " << i
679 << " " << a << endl;
680 EvtGenReport(EVTGEN_ERROR, "EvtGen")
681 << "Will terminate execution!" << endl;
682 ::abort();
683 }
684 return static_cast<int>(a);
685 };
686
687 double phi = 0.0, n1 = 0.0, d1 = 1.0, eta = 0.0, theta_Jpsi = 0.0, theta_psi2S = 0.0, Nr = 1.0;
688 if (n > 0) { // parse arguments
689 int i = 0, coordsyst = getInteger(i++);
690 auto getcomplex = [this, &i, coordsyst]() -> EvtComplex {
691 double a0 = getArg(i++);
692 double a1 = getArg(i++);
693 return (coordsyst) ? EvtComplex(a0 * cos(a1), a0 * sin(a1))
694 : EvtComplex(a0, a1);
695 };
696 auto getreal = [this, &i]() -> double { return getArg(i++); };
697 while (i < n) {
698 int id = getInteger(i++); // New Physics cooeficient Id
699 if (id == 0)
700 m_dc7 = getcomplex(); // delta C_7eff
701 if (id == 1)
702 m_dc9 = getcomplex(); // delta C_9eff
703 if (id == 2)
704 m_dc10 = getcomplex(); // delta C_10eff
705 if (id == 3)
706 m_c7p = getcomplex(); // C'_7eff -- right hand polarizations
707 if (id == 4)
708 m_c9p = getcomplex(); // C'_9eff -- right hand polarizations
709 if (id == 5)
710 m_c10p = getcomplex(); // c'_10eff -- right hand polarizations
711 if (id == 6)
712 m_cS = getcomplex(); // (C_S - C'_S) -- scalar right and left polarizations
713 if (id == 7)
714 m_cP = getcomplex(); // (C_P - C'_P) -- pseudo-scalar right and left polarizations
715 if (id == 10)
716 m_flag = getInteger(i++); // include resonances or not
717 if (id == 11)
718 phi = getreal(); // phase of the non-factorizable contribution
719 if (id == 12)
720 n1 = getreal(); // amplitude of the non-factorizable contribution
721 if (id == 13)
722 d1 = getreal(); // width of the non-factorizable contribution
723 if (id == 14)
724 eta = getreal(); // Eq. 47
725 if (id == 15)
726 theta_Jpsi = getreal(); // Eq. 47
727 if (id == 16)
728 theta_psi2S = getreal(); // Eq. 47
729 if (id == 17)
730 Nr = getreal(); // Eq. 47
731 }
732 }
733 m_ls = new EvtLinSample;
734
735 if (!m_flag) return;
736 // BW_t jpsi(3.0969, 0.0926 / 1000, 0.0926 / 1000 * 0.877, 0.05971);
737 // BW_t psi2s(3.6861, 0.294 / 1000, 0.294 / 1000 * 0.9785, 0.00793);
738 // BW_t psi3770(3773.7 / 1000, 27.2 / 1000, 27.2 / 1000, 1e-5);
739 // BW_t psi4040(4039 / 1000., 80 / 1000., 80 / 1000., 1.07e-5);
740 // BW_t psi4160(4191 / 1000., 70 / 1000., 70 / 1000., 6.9e-6);
741 // BW_t psi4230(4220 / 1000., 60 / 1000., 60 / 1000., 1e-5);
742
743 TParticlePDG* p_jpsi = Belle2::EvtGenDatabasePDG::Instance()->GetParticle("J/psi");
744 // B2WARNING("extracting leptonic width"<<std::flush);
745 // TDecayChannel *c_jpsi = p_jpsi->DecayChannel(1);
746 // B2WARNING("Br = "<<c_jpsi->BranchingRatio());
747 BW_t* jpsi = new BW_t(p_jpsi->Mass(), p_jpsi->Width(), p_jpsi->Width() * 0.877, 0.05971);
748 m_rs.push_back(jpsi);
749
750 TParticlePDG* p_psi2s = Belle2::EvtGenDatabasePDG::Instance()->GetParticle("psi(2S)");
751 BW_t* psi2s = new BW_t(p_psi2s->Mass(), p_psi2s->Width(), p_psi2s->Width() * 0.9785, 0.00793);
752 m_rs.push_back(psi2s);
753
754 TParticlePDG* p_psi3770 = Belle2::EvtGenDatabasePDG::Instance()->GetParticle("psi(3770)");
755 BW_t* psi3770 = new BW_t(p_psi3770->Mass(), p_psi3770->Width(), p_psi3770->Width(), 1e-5);
756 m_rs.push_back(psi3770);
757
758 TParticlePDG* p_psi4040 = Belle2::EvtGenDatabasePDG::Instance()->GetParticle("psi(4040)");
759 BW_t* psi4040 = new BW_t(p_psi4040->Mass(), p_psi4040->Width(), p_psi4040->Width(), 1.07e-5);
760 m_rs.push_back(psi4040);
761
762 TParticlePDG* p_psi4160 = Belle2::EvtGenDatabasePDG::Instance()->GetParticle("psi(4160)");
763 BW_t* psi4160 = new BW_t(p_psi4160->Mass(), p_psi4160->Width(), p_psi4160->Width(), 6.9e-6);
764 m_rs.push_back(psi4160);
765
766 BW_t* psi4230 = new BW_t(4220 / 1000., 60 / 1000., 60 / 1000., 1e-5);
767 m_rs.push_back(psi4230);
768
769 std::vector<double> v = getgrid(m_rs);
770 std::complex<double> eiphi = exp(1i * phi), pJpsi = Nr * exp(1i * theta_Jpsi), ppsi2S = Nr * exp(1i * theta_psi2S);
771
772 const double C1 = -0.257, C2 = 1.009, C3 = -0.005, C5 = 0;
773 double sc = 1.0 / (4.0 / 3.0 * C1 + C2 + 6.0 * C3 + 60.0 * C5);
774 const double m_b = 4.8, m_c = 1.3;
775 for (auto t : v) {
776 // Eq. 13, 14, and 15 in Emi's note. For the default theta_Jpsi=0 and theta_psi2S=0 it is identical to the Rahul's dispersion relation
777 double re = -8.0 / 9.0 * log(m_c / m_b) - 4.0 / 9.0 +
778 t / 3.0 * DRInt(t, real(pJpsi), real(ppsi2S), Nr, m_rs) - M_PI / 3 * uR(t, imag(pJpsi), imag(ppsi2S), 0, m_rs);
779 double im =
780 t / 3.0 * DRInt(t, imag(pJpsi), imag(ppsi2S), 0, m_rs) + M_PI / 3 * uR(t, real(pJpsi), real(ppsi2S), Nr, m_rs);
781 std::complex<double> r(re, im);
782 if (eta == 0.0) {
783 double z = t - jpsi->Mv2;
784 r += eiphi * (n1 * sc / (z * z + d1)); // bump under J/psi as a non-factorizable contribution
785 }
786 m_reso.push_back(std::make_pair(t, r));
787 }
788}
static EvtGenDatabasePDG * Instance()
Instance method that loads the EvtGen table.
int m_flag
flag is set nonzero to include resonances
double Mv2
resonance mass squared

◆ initProbMax()

void initProbMax ( )
override

The method to evaluate the maximum amplitude.

Definition at line 496 of file EvtbTosllNPR.cc.

497{
498 EvtId pId = getParentId(), mId = getDaug(0), l1Id = getDaug(1), l2Id = getDaug(2);
499
500 std::vector<double> v;
501 std::vector<EvtPointf> pp;
502
503 EvtScalarParticle* scalar_part;
504 EvtParticle* root_part;
505
506 scalar_part = new EvtScalarParticle;
507
508 //includge to avoid generating random numbers!
509 scalar_part->noLifeTime();
510
511 EvtVector4R p_init;
512
513 p_init.set(EvtPDL::getMass(pId), 0.0, 0.0, 0.0);
514 scalar_part->init(pId, p_init);
515 root_part = (EvtParticle*)scalar_part;
516 root_part->setDiagonalSpinDensity();
517
518 EvtParticle* daughter, *lep1, *lep2;
519
520 EvtAmp amp;
521
522 EvtId listdaug[3];
523 listdaug[0] = mId;
524 listdaug[1] = l1Id;
525 listdaug[2] = l2Id;
526
527 amp.init(pId, 3, listdaug);
528
529 root_part->makeDaughters(3, listdaug);
530 daughter = root_part->getDaug(0);
531 lep1 = root_part->getDaug(1);
532 lep2 = root_part->getDaug(2);
533
534 //cludge to avoid generating random numbers!
535 daughter->noLifeTime();
536 lep1->noLifeTime();
537 lep2->noLifeTime();
538
539 //Initial particle is unpolarized, well it is a scalar so it is trivial
540 EvtSpinDensity rho;
541 rho.setDiag(root_part->getSpinStates());
542
543 double mass[3];
544
545 double m = root_part->mass();
546
547 EvtVector4R p4meson, p4lepton1, p4lepton2, p4w;
548
549 double maxprobfound = 0.0;
550
551 mass[1] = EvtPDL::getMeanMass(l1Id);
552 mass[2] = EvtPDL::getMeanMass(l2Id);
553 std::vector<double> mH;
554 mH.push_back(EvtPDL::getMeanMass(mId));
555 //if the particle is narrow dont bother with changing the mass.
556 double g = EvtPDL::getWidth(mId);
557 if (g > 0) {
558 mH.push_back(EvtPDL::getMinMass(mId));
559 mH.push_back(
560 std::min(EvtPDL::getMaxMass(mId), m - mass[1] - mass[2]));
561 mH.push_back(mH.front() - g);
562 mH.push_back(mH.front() + g);
563 }
564
565 double q2min = (mass[1] + mass[2]) * (mass[1] + mass[2]);
566
567 double m0 = EvtPDL::getMinMass(mId);
568 double q2max = (m - m0) * (m - m0);
569 v = getgrid(m_rs);
570 m0 = mH[0];
571 //loop over q2
572 for (double q2 : v) {
573 // want to avoid picking up the tail of the photon propagator
574 if (!(q2min <= q2 && q2 < q2max))
575 continue;
576 double Erho = (m * m + m0 * m0 - q2) / (2.0 * m);
577 if (Erho < m0) {
578 m0 = EvtPDL::getMinMass(mId);
579 Erho = (m * m + m0 * m0 - q2) / (2.0 * m);
580 }
581 double Prho = sqrt((Erho - m0) * (Erho + m0));
582
583 p4meson.set(Erho, 0.0, 0.0, -Prho);
584 p4w.set(m - Erho, 0.0, 0.0, Prho);
585
586 //This is in the W rest frame
587 double Elep = sqrt(q2) * 0.5,
588 Plep = sqrt((Elep - mass[1]) * (Elep + mass[1]));
589
590 const int nj = 3 + 2 + 4 + 8 + 32;
591 double cmin = -1, cmax = 1, dc = (cmax - cmin) / (nj - 1);
592 double maxprob = 0;
593 for (int j = 0; j < nj; j++) {
594 double c = cmin + dc * j;
595
596 //These are in the W rest frame. Need to boost out into the B frame.
597 double Py = Plep * sqrt(1.0 - c * c), Pz = Plep * c;
598 p4lepton1.set(Elep, 0.0, Py, Pz);
599 p4lepton2.set(Elep, 0.0, -Py, -Pz);
600
601 p4lepton1 = boostTo(p4lepton1, p4w);
602 p4lepton2 = boostTo(p4lepton2, p4w);
603
604 //Now initialize the daughters...
605 daughter->init(mId, p4meson);
606 lep1->init(l1Id, p4lepton1);
607 lep2->init(l2Id, p4lepton2);
608 CalcAmp(root_part, amp);
609 double prob = rho.normalizedProb(amp.getSpinDensity());
610 maxprob = std::max(maxprob, prob);
611 }
612 pp.push_back({ (float)q2, (float)maxprob });
613 maxprobfound = std::max(maxprobfound, maxprob);
614 }
615 root_part->deleteTree();
616
617 m_ls->init(pp);
618 maxprobfound = 4;
619 setProbMax(maxprobfound);
620}
double sqrt(double a)
sqrt for double
Definition beamHelpers.h:28

Member Data Documentation

◆ m_c10p

EvtComplex m_c10p
private

c'_10eff – right hand polarizations

Definition at line 79 of file EvtbTosllNPR.h.

◆ m_c7p

EvtComplex m_c7p
private

C'_7eff – right hand polarizations.

Definition at line 73 of file EvtbTosllNPR.h.

◆ m_c9p

EvtComplex m_c9p
private

C'_9eff – right hand polarizations.

Definition at line 76 of file EvtbTosllNPR.h.

◆ m_cP

EvtComplex m_cP
private

(C_P - C'_P) – pseudo-scalar right and left polarizations

Definition at line 85 of file EvtbTosllNPR.h.

◆ m_cS

EvtComplex m_cS
private

(C_S - C'_S) – scalar right and left polarizations

Definition at line 82 of file EvtbTosllNPR.h.

◆ m_dc10

EvtComplex m_dc10
private

delta C_10eff – addition to NNLO SM value

Definition at line 70 of file EvtbTosllNPR.h.

◆ m_dc7

EvtComplex m_dc7
private

delta C_7eff – addition to NNLO SM value

Definition at line 64 of file EvtbTosllNPR.h.

◆ m_dc9

EvtComplex m_dc9
private

delta C_9eff – addition to NNLO SM value

Definition at line 67 of file EvtbTosllNPR.h.

◆ m_flag

int m_flag {0}
private

flag is set nonzero to include resonances

Definition at line 88 of file EvtbTosllNPR.h.

88{0};

◆ m_ls

EvtLinSample* m_ls {0}
private

piece-wise interpolation of maximum of the matrix element depend on q^2

Definition at line 94 of file EvtbTosllNPR.h.

94{0};

◆ m_reso

hvec_t m_reso
private

tabulated resonance contribution

Definition at line 97 of file EvtbTosllNPR.h.

◆ m_rs

std::vector<BW_t*> m_rs
private

vector with c\bar{c} resonance lineshapes

Definition at line 91 of file EvtbTosllNPR.h.


The documentation for this class was generated from the following files: