1 //--------------------------------------------------------------------------
4 // This software is part of the EvtGen package developed jointly
5 // for the BaBar and CLEO collaborations. If you use all or part
6 // of it, please give an appropriate acknowledgement.
8 // Copyright Information: See EvtGen/COPYRIGHT
9 // Copyright (C) 2000 Caltech, UCSB
11 // Module: EvtbTosllScalarAmp.cc
13 // Description: Routine to implement bTosll decays to pseudo-scalar
16 // Modification history:
18 // Ryd January 5,2000 Module created
20 //------------------------------------------------------------------------
22 #include "EvtGenBase/EvtPatches.hh"
23 #include "EvtGenBase/EvtConst.hh"
24 #include "EvtGenBase/EvtPatches.hh"
25 #include "EvtGenBase/EvtParticle.hh"
26 #include "EvtGenBase/EvtGenKine.hh"
27 #include "EvtGenBase/EvtPDL.hh"
28 #include "EvtGenBase/EvtReport.hh"
29 #include "EvtGenBase/EvtVector4C.hh"
30 #include "EvtGenBase/EvtTensor4C.hh"
31 #include "EvtGenBase/EvtDiracSpinor.hh"
32 #include "EvtGenModels/EvtbTosllScalarAmp.hh"
33 #include "EvtGenBase/EvtId.hh"
34 #include "EvtGenBase/EvtIdSet.hh"
35 #include "EvtGenBase/EvtAmp.hh"
36 #include "EvtGenModels/EvtbTosllAmp.hh"
37 #include "EvtGenModels/EvtbTosllFF.hh"
39 void EvtbTosllScalarAmp::CalcAmp( EvtParticle *parent,
41 EvtbTosllFF *formFactors ) {
43 //Add the lepton and neutrino 4 momenta to find q2
45 EvtVector4R q = parent->getDaug(1)->getP4()
46 + parent->getDaug(2)->getP4();
47 double q2 = (q.mass2());
49 double fp(0.),f0(0.),ft(0.);
50 double mesonmass = parent->getDaug(0)->mass();
51 double parentmass = parent->mass();
53 formFactors->getScalarFF(parent->getId(),
54 parent->getDaug(0)->getId(),
59 EvtId daught = parent->getDaug(0)->getId();
62 if (daught == EvtPDL::getId(std::string("pi+")) ||
63 daught == EvtPDL::getId(std::string("pi-")) ||
64 daught == EvtPDL::getId(std::string("pi0")) ||
65 daught == EvtPDL::getId(std::string("eta")) ||
66 daught == EvtPDL::getId(std::string("eta'"))
71 p4b.set(parent->mass(),0.0,0.0,0.0);
79 EvtId l_num = parent->getDaug(1)->getId();
83 EvtVector4R phat=p4b/parentmass;
84 EvtVector4R qhat=q/parentmass;
86 EvtComplex c7eff = EvtbTosllAmp::GetC7Eff(q2,nnlo);
87 EvtComplex c9eff = EvtbTosllAmp::GetC9Eff(q2,nnlo,btod);
88 EvtComplex c10eff = EvtbTosllAmp::GetC10Eff(q2,nnlo);
91 double mbhat=4.4/(parentmass);
92 //double mkhat = 0.15;
93 double mkhat=mesonmass/(parentmass);
94 double shat=q2/(parentmass*parentmass);
96 double fm=(f0-fp)*(1-mkhat*mkhat)/shat;
99 aprime = c9eff*fp+2.0*mbhat*c7eff*ft/(1+mkhat);
101 bprime = c9eff*fm-2*mbhat*c7eff*ft*(1-mkhat)/shat;
108 static EvtIdSet leptons("e-","mu-","tau-");
109 static EvtIdSet antileptons("e+","mu+","tau+");
111 if (leptons.contains(l_num)){
113 T1=aprime*phat+bprime*qhat;
114 T2=cprime*phat+dprime*qhat;
116 l11=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
117 parent->getDaug(2)->spParent(0));
118 l21=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
119 parent->getDaug(2)->spParent(0));
120 l12=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
121 parent->getDaug(2)->spParent(1));
122 l22=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
123 parent->getDaug(2)->spParent(1));
124 a11=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
125 parent->getDaug(2)->spParent(0));
126 a21=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
127 parent->getDaug(2)->spParent(0));
128 a12=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
129 parent->getDaug(2)->spParent(1));
130 a22=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
131 parent->getDaug(2)->spParent(1));
134 if (antileptons.contains(l_num)){
136 T1=aprime*phat+bprime*qhat;
137 T2=cprime*phat+dprime*qhat;
139 l11=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
140 parent->getDaug(2)->spParent(1));
141 l21=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
142 parent->getDaug(2)->spParent(1));
143 l12=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
144 parent->getDaug(2)->spParent(0));
145 l22=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
146 parent->getDaug(2)->spParent(0));
148 a11=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
149 parent->getDaug(2)->spParent(1));
150 a21=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
151 parent->getDaug(2)->spParent(1));
152 a12=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
153 parent->getDaug(2)->spParent(0));
154 a22=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
155 parent->getDaug(2)->spParent(0));
159 report(ERROR,"EvtGen") << "Wrong lepton number\n";
163 amp.vertex(0,0,l11*T1+a11*T2);
164 amp.vertex(0,1,l12*T1+a12*T2);
165 amp.vertex(1,0,l21*T1+a21*T2);
166 amp.vertex(1,1,l22*T1+a22*T2);