Line data Source code
1 : //--------------------------------------------------------------------------
2 : //
3 : // Environment:
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.
7 : //
8 : // Copyright Information: See EvtGen/COPYRIGHT
9 : // Copyright (C) 2000 Caltech, UCSB
10 : //
11 : // Module: EvtbTosllScalarAmp.cc
12 : //
13 : // Description: Routine to implement bTosll decays to pseudo-scalar
14 : // mesons.
15 : //
16 : // Modification history:
17 : //
18 : // Ryd January 5,2000 Module created
19 : //
20 : //------------------------------------------------------------------------
21 : //
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"
38 :
39 : void EvtbTosllScalarAmp::CalcAmp( EvtParticle *parent,
40 : EvtAmp& amp,
41 : EvtbTosllFF *formFactors ) {
42 :
43 : //Add the lepton and neutrino 4 momenta to find q2
44 :
45 0 : EvtVector4R q = parent->getDaug(1)->getP4()
46 0 : + parent->getDaug(2)->getP4();
47 0 : double q2 = (q.mass2());
48 :
49 0 : double fp(0.),f0(0.),ft(0.);
50 0 : double mesonmass = parent->getDaug(0)->mass();
51 0 : double parentmass = parent->mass();
52 :
53 0 : formFactors->getScalarFF(parent->getId(),
54 0 : parent->getDaug(0)->getId(),
55 : q2,
56 : mesonmass,
57 : fp,f0,ft);
58 :
59 0 : EvtId daught = parent->getDaug(0)->getId();
60 : bool btod = false;
61 : bool nnlo = true;
62 0 : if (daught == EvtPDL::getId(std::string("pi+")) ||
63 0 : daught == EvtPDL::getId(std::string("pi-")) ||
64 0 : daught == EvtPDL::getId(std::string("pi0")) ||
65 0 : daught == EvtPDL::getId(std::string("eta")) ||
66 0 : daught == EvtPDL::getId(std::string("eta'"))
67 0 : ) btod = true;
68 :
69 :
70 0 : EvtVector4R p4b;
71 0 : p4b.set(parent->mass(),0.0,0.0,0.0);
72 :
73 0 : EvtVector4C l11,l12;
74 0 : EvtVector4C l21,l22;
75 :
76 0 : EvtVector4C a11,a12;
77 0 : EvtVector4C a21,a22;
78 :
79 0 : EvtId l_num = parent->getDaug(1)->getId();
80 :
81 0 : EvtVector4C T1,T2;
82 :
83 0 : EvtVector4R phat=p4b/parentmass;
84 0 : EvtVector4R qhat=q/parentmass;
85 :
86 0 : EvtComplex c7eff = EvtbTosllAmp::GetC7Eff(q2,nnlo);
87 0 : EvtComplex c9eff = EvtbTosllAmp::GetC9Eff(q2,nnlo,btod);
88 0 : EvtComplex c10eff = EvtbTosllAmp::GetC10Eff(q2,nnlo);
89 :
90 : //double mbhat=1;
91 0 : double mbhat=4.4/(parentmass);
92 : //double mkhat = 0.15;
93 0 : double mkhat=mesonmass/(parentmass);
94 0 : double shat=q2/(parentmass*parentmass);
95 :
96 0 : double fm=(f0-fp)*(1-mkhat*mkhat)/shat;
97 :
98 0 : EvtComplex aprime;
99 0 : aprime = c9eff*fp+2.0*mbhat*c7eff*ft/(1+mkhat);
100 0 : EvtComplex bprime;
101 0 : bprime = c9eff*fm-2*mbhat*c7eff*ft*(1-mkhat)/shat;
102 :
103 0 : EvtComplex cprime;
104 0 : cprime = c10eff*fp;
105 0 : EvtComplex dprime;
106 0 : dprime = c10eff*fm;
107 :
108 0 : static EvtIdSet leptons("e-","mu-","tau-");
109 0 : static EvtIdSet antileptons("e+","mu+","tau+");
110 :
111 0 : if (leptons.contains(l_num)){
112 :
113 0 : T1=aprime*phat+bprime*qhat;
114 0 : T2=cprime*phat+dprime*qhat;
115 :
116 0 : l11=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
117 0 : parent->getDaug(2)->spParent(0));
118 0 : l21=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
119 0 : parent->getDaug(2)->spParent(0));
120 0 : l12=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
121 0 : parent->getDaug(2)->spParent(1));
122 0 : l22=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
123 0 : parent->getDaug(2)->spParent(1));
124 0 : a11=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
125 0 : parent->getDaug(2)->spParent(0));
126 0 : a21=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
127 0 : parent->getDaug(2)->spParent(0));
128 0 : a12=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
129 0 : parent->getDaug(2)->spParent(1));
130 0 : a22=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
131 0 : parent->getDaug(2)->spParent(1));
132 0 : }
133 : else{
134 0 : if (antileptons.contains(l_num)){
135 :
136 0 : T1=aprime*phat+bprime*qhat;
137 0 : T2=cprime*phat+dprime*qhat;
138 :
139 0 : l11=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
140 0 : parent->getDaug(2)->spParent(1));
141 0 : l21=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
142 0 : parent->getDaug(2)->spParent(1));
143 0 : l12=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
144 0 : parent->getDaug(2)->spParent(0));
145 0 : l22=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
146 0 : parent->getDaug(2)->spParent(0));
147 :
148 0 : a11=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
149 0 : parent->getDaug(2)->spParent(1));
150 0 : a21=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
151 0 : parent->getDaug(2)->spParent(1));
152 0 : a12=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
153 0 : parent->getDaug(2)->spParent(0));
154 0 : a22=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
155 0 : parent->getDaug(2)->spParent(0));
156 :
157 0 : }
158 : else{
159 0 : report(Severity::Error,"EvtGen") << "Wrong lepton number\n";
160 : }
161 : }
162 :
163 0 : amp.vertex(0,0,l11*T1+a11*T2);
164 0 : amp.vertex(0,1,l12*T1+a12*T2);
165 0 : amp.vertex(1,0,l21*T1+a21*T2);
166 0 : amp.vertex(1,1,l22*T1+a22*T2);
167 :
168 0 : }
169 :
170 :
171 :
172 :
173 :
174 :
175 :
176 :
177 :
178 :
179 :
180 :
181 :
182 :
183 :
|