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) 1998 Caltech, UCSB
11 // Module: EvtSemiLeptonicTensorAmp.cc
13 // Description: Routine to implement semileptonic decays to pseudo-scalar
16 // Modification history:
18 // DJL April 17,1998 Module created
20 //------------------------------------------------------------------------
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"
36 void EvtSemiLeptonicTensorAmp::CalcAmp( EvtParticle *parent,
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+");
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+");
53 //Add the lepton and neutrino 4 momenta to find q2
55 EvtVector4R q = parent->getDaug(1)->getP4()
56 + parent->getDaug(2)->getP4();
57 double q2 = (q.mass2());
61 FormFactors->gettensorff(parent->getId(),
62 parent->getDaug(0)->getId(),
64 parent->getDaug(0)->mass(),
71 double costhl_flag = 1.0;
73 if(parent->getId()==D0||parent->getId()==D0B||
74 parent->getId()==DP||parent->getId()==DM) {
77 if(parent->getId()==DSP||parent->getId()==DSM) {
80 hf = hf * costhl_flag;
83 p4b.set(parent->mass(),0.0,0.0,0.0);
85 EvtVector4R p4meson = parent->getDaug(0)->getP4();
89 EvtId l_num = parent->getDaug(1)->getId();
91 EvtVector4C ep_meson_b[5];
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();
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;
108 EvtComplex ep_meson_bb[5];
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);
117 EvtVector4C tds0,tds1,tds2,tds3,tds4;
120 if (l_num==EM||l_num==MUM||l_num==TAUM){
121 EvtTensor4C tdual=EvtComplex(0.0,hf)*dual(directProd(pp,pm));
122 tds0=tdual.cont2(ep_meson_b[0])
124 -bpf*ep_meson_bb[0]*pp-bmf*ep_meson_bb[0]*pm;
127 tds1=tdual.cont2(ep_meson_b[1])
129 -bpf*ep_meson_bb[1]*pp-bmf*ep_meson_bb[1]*pm;
132 tds2=tdual.cont2(ep_meson_b[2])
134 -bpf*ep_meson_bb[2]*pp-bmf*ep_meson_bb[2]*pm;
137 tds3=tdual.cont2(ep_meson_b[3])
139 -bpf*ep_meson_bb[3]*pp-bmf*ep_meson_bb[3]*pm;
142 tds4=tdual.cont2(ep_meson_b[4])
144 -bpf*ep_meson_bb[4]*pp-bmf*ep_meson_bb[4]*pm;
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());
154 if (l_num==EP||l_num==MUP||l_num==TAUP){
155 EvtTensor4C tdual=EvtComplex(0.0,-hf)*dual(directProd(pp,pm));
156 tds0=tdual.cont2(ep_meson_b[0])
158 -bpf*ep_meson_bb[0]*pp-bmf*ep_meson_bb[0]*pm;
161 tds1=tdual.cont2(ep_meson_b[1])
163 -bpf*ep_meson_bb[1]*pp-bmf*ep_meson_bb[1]*pm;
166 tds2=tdual.cont2(ep_meson_b[2])
168 -bpf*ep_meson_bb[2]*pp-bmf*ep_meson_bb[2]*pm;
171 tds3=tdual.cont2(ep_meson_b[3])
173 -bpf*ep_meson_bb[3]*pp-bmf*ep_meson_bb[3]*pm;
176 tds4=tdual.cont2(ep_meson_b[4])
178 -bpf*ep_meson_bb[4]*pp-bmf*ep_meson_bb[4]*pm;
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));
187 report(ERROR,"EvtGen") << "dfnb89agngri wrong lepton number\n";
191 amp.vertex(0,0,l1*tds0);
192 amp.vertex(0,1,l2*tds0);
194 amp.vertex(1,0,l1*tds1);
195 amp.vertex(1,1,l2*tds1);
197 amp.vertex(2,0,l1*tds2);
198 amp.vertex(2,1,l2*tds2);
200 amp.vertex(3,0,l1*tds3);
201 amp.vertex(3,1,l2*tds3);
203 amp.vertex(4,0,l1*tds4);
204 amp.vertex(4,1,l2*tds4);