00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "EvtGenBase/EvtPatches.hh"
00023 #include "EvtGenBase/EvtPatches.hh"
00024 #include "EvtGenBase/EvtParticle.hh"
00025 #include "EvtGenBase/EvtGenKine.hh"
00026 #include "EvtGenBase/EvtPDL.hh"
00027 #include "EvtGenBase/EvtReport.hh"
00028 #include "EvtGenBase/EvtTensor4C.hh"
00029 #include "EvtGenBase/EvtVector4C.hh"
00030 #include "EvtGenBase/EvtDiracSpinor.hh"
00031 #include "EvtGenBase/EvtSemiLeptonicTensorAmp.hh"
00032 #include "EvtGenBase/EvtId.hh"
00033 #include "EvtGenBase/EvtAmp.hh"
00034 #include "EvtGenBase/EvtSemiLeptonicFF.hh"
00035
00036 void EvtSemiLeptonicTensorAmp::CalcAmp( EvtParticle *parent,
00037 EvtAmp& amp,
00038 EvtSemiLeptonicFF *FormFactors ) {
00039 static EvtId EM=EvtPDL::getId("e-");
00040 static EvtId MUM=EvtPDL::getId("mu-");
00041 static EvtId TAUM=EvtPDL::getId("tau-");
00042 static EvtId EP=EvtPDL::getId("e+");
00043 static EvtId MUP=EvtPDL::getId("mu+");
00044 static EvtId TAUP=EvtPDL::getId("tau+");
00045
00046 static EvtId D0=EvtPDL::getId("D0");
00047 static EvtId D0B=EvtPDL::getId("anti-D0");
00048 static EvtId DP=EvtPDL::getId("D+");
00049 static EvtId DM=EvtPDL::getId("D-");
00050 static EvtId DSM=EvtPDL::getId("D_s-");
00051 static EvtId DSP=EvtPDL::getId("D_s+");
00052
00053
00054
00055 EvtVector4R q = parent->getDaug(1)->getP4()
00056 + parent->getDaug(2)->getP4();
00057 double q2 = (q.mass2());
00058
00059 double hf,kf,bpf,bmf;
00060
00061 FormFactors->gettensorff(parent->getId(),
00062 parent->getDaug(0)->getId(),
00063 q2,
00064 parent->getDaug(0)->mass(),
00065 &hf,
00066 &kf,
00067 &bpf,
00068 &bmf);
00069
00070
00071 double costhl_flag = 1.0;
00072
00073 if(parent->getId()==D0||parent->getId()==D0B||
00074 parent->getId()==DP||parent->getId()==DM) {
00075 costhl_flag = -1.0;
00076 }
00077 if(parent->getId()==DSP||parent->getId()==DSM) {
00078 costhl_flag = -1.0;
00079 }
00080 hf = hf * costhl_flag;
00081
00082 EvtVector4R p4b;
00083 p4b.set(parent->mass(),0.0,0.0,0.0);
00084
00085 EvtVector4R p4meson = parent->getDaug(0)->getP4();
00086
00087 EvtVector4C l1,l2;
00088
00089 EvtId l_num = parent->getDaug(1)->getId();
00090
00091 EvtVector4C ep_meson_b[5];
00092
00093 ep_meson_b[0] = ((parent->getDaug(0)->epsTensorParent(0)).cont2(p4b)).conj();
00094 ep_meson_b[1] = ((parent->getDaug(0)->epsTensorParent(1)).cont2(p4b)).conj();
00095 ep_meson_b[2] = ((parent->getDaug(0)->epsTensorParent(2)).cont2(p4b)).conj();
00096 ep_meson_b[3] = ((parent->getDaug(0)->epsTensorParent(3)).cont2(p4b)).conj();
00097 ep_meson_b[4] = ((parent->getDaug(0)->epsTensorParent(4)).cont2(p4b)).conj();
00098
00099 EvtVector4R pp,pm;
00100
00101 pp=p4b+p4meson;
00102 pm=p4b-p4meson;
00103
00104
00105 double q2max = p4b.mass2() + p4meson.mass2() - 2.0*p4b.mass()*p4meson.mass();
00106 double q2maxin=1.0/q2max;
00107
00108 EvtComplex ep_meson_bb[5];
00109
00110 ep_meson_bb[0]=ep_meson_b[0]*(p4b);
00111 ep_meson_bb[1]=ep_meson_b[1]*(p4b);
00112 ep_meson_bb[2]=ep_meson_b[2]*(p4b);
00113 ep_meson_bb[3]=ep_meson_b[3]*(p4b);
00114 ep_meson_bb[4]=ep_meson_b[4]*(p4b);
00115
00116
00117 EvtVector4C tds0,tds1,tds2,tds3,tds4;
00118
00119 EvtTensor4C tds;
00120 if (l_num==EM||l_num==MUM||l_num==TAUM){
00121 EvtTensor4C tdual=EvtComplex(0.0,hf)*dual(directProd(pp,pm));
00122 tds0=tdual.cont2(ep_meson_b[0])
00123 -kf*ep_meson_b[0]
00124 -bpf*ep_meson_bb[0]*pp-bmf*ep_meson_bb[0]*pm;
00125 tds0*=q2maxin;
00126
00127 tds1=tdual.cont2(ep_meson_b[1])
00128 -kf*ep_meson_b[1]
00129 -bpf*ep_meson_bb[1]*pp-bmf*ep_meson_bb[1]*pm;
00130 tds1*=q2maxin;
00131
00132 tds2=tdual.cont2(ep_meson_b[2])
00133 -kf*ep_meson_b[2]
00134 -bpf*ep_meson_bb[2]*pp-bmf*ep_meson_bb[2]*pm;
00135 tds2*=q2maxin;
00136
00137 tds3=tdual.cont2(ep_meson_b[3])
00138 -kf*ep_meson_b[3]
00139 -bpf*ep_meson_bb[3]*pp-bmf*ep_meson_bb[3]*pm;
00140 tds3*=q2maxin;
00141
00142 tds4=tdual.cont2(ep_meson_b[4])
00143 -kf*ep_meson_b[4]
00144 -bpf*ep_meson_bb[4]*pp-bmf*ep_meson_bb[4]*pm;
00145 tds4*=q2maxin;
00146
00147
00148 l1=EvtLeptonVACurrent(parent->getDaug(1)->spParent(0),
00149 parent->getDaug(2)->spParentNeutrino());
00150 l2=EvtLeptonVACurrent(parent->getDaug(1)->spParent(1),
00151 parent->getDaug(2)->spParentNeutrino());
00152 }
00153 else{
00154 if (l_num==EP||l_num==MUP||l_num==TAUP){
00155 EvtTensor4C tdual=EvtComplex(0.0,-hf)*dual(directProd(pp,pm));
00156 tds0=tdual.cont2(ep_meson_b[0])
00157 -kf*ep_meson_b[0]
00158 -bpf*ep_meson_bb[0]*pp-bmf*ep_meson_bb[0]*pm;
00159 tds0*=q2maxin;
00160
00161 tds1=tdual.cont2(ep_meson_b[1])
00162 -kf*ep_meson_b[1]
00163 -bpf*ep_meson_bb[1]*pp-bmf*ep_meson_bb[1]*pm;
00164 tds1*=q2maxin;
00165
00166 tds2=tdual.cont2(ep_meson_b[2])
00167 -kf*ep_meson_b[2]
00168 -bpf*ep_meson_bb[2]*pp-bmf*ep_meson_bb[2]*pm;
00169 tds2*=q2maxin;
00170
00171 tds3=tdual.cont2(ep_meson_b[3])
00172 -kf*ep_meson_b[3]
00173 -bpf*ep_meson_bb[3]*pp-bmf*ep_meson_bb[3]*pm;
00174 tds3*=q2maxin;
00175
00176 tds4=tdual.cont2(ep_meson_b[4])
00177 -kf*ep_meson_b[4]
00178 -bpf*ep_meson_bb[4]*pp-bmf*ep_meson_bb[4]*pm;
00179 tds4*=q2maxin;
00180
00181 l1=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(),
00182 parent->getDaug(1)->spParent(0));
00183 l2=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(),
00184 parent->getDaug(1)->spParent(1));
00185 }
00186 else{
00187 report(ERROR,"EvtGen") << "dfnb89agngri wrong lepton number\n";
00188 }
00189 }
00190
00191 amp.vertex(0,0,l1*tds0);
00192 amp.vertex(0,1,l2*tds0);
00193
00194 amp.vertex(1,0,l1*tds1);
00195 amp.vertex(1,1,l2*tds1);
00196
00197 amp.vertex(2,0,l1*tds2);
00198 amp.vertex(2,1,l2*tds2);
00199
00200 amp.vertex(3,0,l1*tds3);
00201 amp.vertex(3,1,l2*tds3);
00202
00203 amp.vertex(4,0,l1*tds4);
00204 amp.vertex(4,1,l2*tds4);
00205
00206 return;
00207
00208 }
00209