]>
Commit | Line | Data |
---|---|---|
da0e9ce3 | 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) 1998 Caltech, UCSB | |
10 | // | |
11 | // Module: EvtSemiLeptonicTensorAmp.cc | |
12 | // | |
13 | // Description: Routine to implement semileptonic decays to pseudo-scalar | |
14 | // mesons. | |
15 | // | |
16 | // Modification history: | |
17 | // | |
18 | // DJL April 17,1998 Module created | |
19 | // | |
20 | //------------------------------------------------------------------------ | |
21 | // | |
22 | #include "EvtGenBase/EvtPatches.hh" | |
23 | #include "EvtGenBase/EvtPatches.hh" | |
24 | #include "EvtGenBase/EvtParticle.hh" | |
25 | #include "EvtGenBase/EvtGenKine.hh" | |
26 | #include "EvtGenBase/EvtPDL.hh" | |
27 | #include "EvtGenBase/EvtReport.hh" | |
28 | #include "EvtGenBase/EvtTensor4C.hh" | |
29 | #include "EvtGenBase/EvtVector4C.hh" | |
30 | #include "EvtGenBase/EvtDiracSpinor.hh" | |
31 | #include "EvtGenBase/EvtSemiLeptonicTensorAmp.hh" | |
32 | #include "EvtGenBase/EvtId.hh" | |
33 | #include "EvtGenBase/EvtAmp.hh" | |
34 | #include "EvtGenBase/EvtSemiLeptonicFF.hh" | |
35 | ||
36 | void EvtSemiLeptonicTensorAmp::CalcAmp( EvtParticle *parent, | |
37 | EvtAmp& amp, | |
38 | EvtSemiLeptonicFF *FormFactors ) { | |
39 | static EvtId EM=EvtPDL::getId("e-"); | |
40 | static EvtId MUM=EvtPDL::getId("mu-"); | |
41 | static EvtId TAUM=EvtPDL::getId("tau-"); | |
42 | static EvtId EP=EvtPDL::getId("e+"); | |
43 | static EvtId MUP=EvtPDL::getId("mu+"); | |
44 | static EvtId TAUP=EvtPDL::getId("tau+"); | |
45 | ||
46 | static EvtId D0=EvtPDL::getId("D0"); | |
47 | static EvtId D0B=EvtPDL::getId("anti-D0"); | |
48 | static EvtId DP=EvtPDL::getId("D+"); | |
49 | static EvtId DM=EvtPDL::getId("D-"); | |
50 | static EvtId DSM=EvtPDL::getId("D_s-"); | |
51 | static EvtId DSP=EvtPDL::getId("D_s+"); | |
52 | ||
53 | //Add the lepton and neutrino 4 momenta to find q2 | |
54 | ||
55 | EvtVector4R q = parent->getDaug(1)->getP4() | |
56 | + parent->getDaug(2)->getP4(); | |
57 | double q2 = (q.mass2()); | |
58 | ||
59 | double hf,kf,bpf,bmf; | |
60 | ||
61 | FormFactors->gettensorff(parent->getId(), | |
62 | parent->getDaug(0)->getId(), | |
63 | q2, | |
64 | parent->getDaug(0)->mass(), | |
65 | &hf, | |
66 | &kf, | |
67 | &bpf, | |
68 | &bmf); | |
69 | ||
70 | ||
71 | double costhl_flag = 1.0; | |
72 | ||
73 | if(parent->getId()==D0||parent->getId()==D0B|| | |
74 | parent->getId()==DP||parent->getId()==DM) { | |
75 | costhl_flag = -1.0; | |
76 | } | |
77 | if(parent->getId()==DSP||parent->getId()==DSM) { | |
78 | costhl_flag = -1.0; | |
79 | } | |
80 | hf = hf * costhl_flag; | |
81 | ||
82 | EvtVector4R p4b; | |
83 | p4b.set(parent->mass(),0.0,0.0,0.0); | |
84 | ||
85 | EvtVector4R p4meson = parent->getDaug(0)->getP4(); | |
86 | ||
87 | EvtVector4C l1,l2; | |
88 | ||
89 | EvtId l_num = parent->getDaug(1)->getId(); | |
90 | ||
91 | EvtVector4C ep_meson_b[5]; | |
92 | ||
93 | ep_meson_b[0] = ((parent->getDaug(0)->epsTensorParent(0)).cont2(p4b)).conj(); | |
94 | ep_meson_b[1] = ((parent->getDaug(0)->epsTensorParent(1)).cont2(p4b)).conj(); | |
95 | ep_meson_b[2] = ((parent->getDaug(0)->epsTensorParent(2)).cont2(p4b)).conj(); | |
96 | ep_meson_b[3] = ((parent->getDaug(0)->epsTensorParent(3)).cont2(p4b)).conj(); | |
97 | ep_meson_b[4] = ((parent->getDaug(0)->epsTensorParent(4)).cont2(p4b)).conj(); | |
98 | ||
99 | EvtVector4R pp,pm; | |
100 | ||
101 | pp=p4b+p4meson; | |
102 | pm=p4b-p4meson; | |
103 | ||
104 | //lange - October 31,2002 - try to lessen the mass dependence of probmax | |
105 | double q2max = p4b.mass2() + p4meson.mass2() - 2.0*p4b.mass()*p4meson.mass(); | |
106 | double q2maxin=1.0/q2max; | |
107 | ||
108 | EvtComplex ep_meson_bb[5]; | |
109 | ||
110 | ep_meson_bb[0]=ep_meson_b[0]*(p4b); | |
111 | ep_meson_bb[1]=ep_meson_b[1]*(p4b); | |
112 | ep_meson_bb[2]=ep_meson_b[2]*(p4b); | |
113 | ep_meson_bb[3]=ep_meson_b[3]*(p4b); | |
114 | ep_meson_bb[4]=ep_meson_b[4]*(p4b); | |
115 | ||
116 | ||
117 | EvtVector4C tds0,tds1,tds2,tds3,tds4; | |
118 | ||
119 | EvtTensor4C tds; | |
120 | if (l_num==EM||l_num==MUM||l_num==TAUM){ | |
0ca57c2f | 121 | EvtTensor4C tdual=EvtComplex(0.0,hf)*dual(EvtGenFunctions::directProd(pp,pm)); |
da0e9ce3 | 122 | tds0=tdual.cont2(ep_meson_b[0]) |
123 | -kf*ep_meson_b[0] | |
124 | -bpf*ep_meson_bb[0]*pp-bmf*ep_meson_bb[0]*pm; | |
125 | tds0*=q2maxin; | |
126 | ||
127 | tds1=tdual.cont2(ep_meson_b[1]) | |
128 | -kf*ep_meson_b[1] | |
129 | -bpf*ep_meson_bb[1]*pp-bmf*ep_meson_bb[1]*pm; | |
130 | tds1*=q2maxin; | |
131 | ||
132 | tds2=tdual.cont2(ep_meson_b[2]) | |
133 | -kf*ep_meson_b[2] | |
134 | -bpf*ep_meson_bb[2]*pp-bmf*ep_meson_bb[2]*pm; | |
135 | tds2*=q2maxin; | |
136 | ||
137 | tds3=tdual.cont2(ep_meson_b[3]) | |
138 | -kf*ep_meson_b[3] | |
139 | -bpf*ep_meson_bb[3]*pp-bmf*ep_meson_bb[3]*pm; | |
140 | tds3*=q2maxin; | |
141 | ||
142 | tds4=tdual.cont2(ep_meson_b[4]) | |
143 | -kf*ep_meson_b[4] | |
144 | -bpf*ep_meson_bb[4]*pp-bmf*ep_meson_bb[4]*pm; | |
145 | tds4*=q2maxin; | |
146 | ||
147 | ||
148 | l1=EvtLeptonVACurrent(parent->getDaug(1)->spParent(0), | |
149 | parent->getDaug(2)->spParentNeutrino()); | |
150 | l2=EvtLeptonVACurrent(parent->getDaug(1)->spParent(1), | |
151 | parent->getDaug(2)->spParentNeutrino()); | |
152 | } | |
153 | else{ | |
154 | if (l_num==EP||l_num==MUP||l_num==TAUP){ | |
0ca57c2f | 155 | EvtTensor4C tdual=EvtComplex(0.0,-hf)*dual(EvtGenFunctions::directProd(pp,pm)); |
da0e9ce3 | 156 | tds0=tdual.cont2(ep_meson_b[0]) |
157 | -kf*ep_meson_b[0] | |
158 | -bpf*ep_meson_bb[0]*pp-bmf*ep_meson_bb[0]*pm; | |
159 | tds0*=q2maxin; | |
160 | ||
161 | tds1=tdual.cont2(ep_meson_b[1]) | |
162 | -kf*ep_meson_b[1] | |
163 | -bpf*ep_meson_bb[1]*pp-bmf*ep_meson_bb[1]*pm; | |
164 | tds1*=q2maxin; | |
165 | ||
166 | tds2=tdual.cont2(ep_meson_b[2]) | |
167 | -kf*ep_meson_b[2] | |
168 | -bpf*ep_meson_bb[2]*pp-bmf*ep_meson_bb[2]*pm; | |
169 | tds2*=q2maxin; | |
170 | ||
171 | tds3=tdual.cont2(ep_meson_b[3]) | |
172 | -kf*ep_meson_b[3] | |
173 | -bpf*ep_meson_bb[3]*pp-bmf*ep_meson_bb[3]*pm; | |
174 | tds3*=q2maxin; | |
175 | ||
176 | tds4=tdual.cont2(ep_meson_b[4]) | |
177 | -kf*ep_meson_b[4] | |
178 | -bpf*ep_meson_bb[4]*pp-bmf*ep_meson_bb[4]*pm; | |
179 | tds4*=q2maxin; | |
180 | ||
181 | l1=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(), | |
182 | parent->getDaug(1)->spParent(0)); | |
183 | l2=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(), | |
184 | parent->getDaug(1)->spParent(1)); | |
185 | } | |
186 | else{ | |
187 | report(ERROR,"EvtGen") << "dfnb89agngri wrong lepton number\n"; | |
188 | } | |
189 | } | |
190 | ||
191 | amp.vertex(0,0,l1*tds0); | |
192 | amp.vertex(0,1,l2*tds0); | |
193 | ||
194 | amp.vertex(1,0,l1*tds1); | |
195 | amp.vertex(1,1,l2*tds1); | |
196 | ||
197 | amp.vertex(2,0,l1*tds2); | |
198 | amp.vertex(2,1,l2*tds2); | |
199 | ||
200 | amp.vertex(3,0,l1*tds3); | |
201 | amp.vertex(3,1,l2*tds3); | |
202 | ||
203 | amp.vertex(4,0,l1*tds4); | |
204 | amp.vertex(4,1,l2*tds4); | |
205 | ||
206 | return; | |
207 | ||
208 | } | |
209 |