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