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/EvtVector4C.hh"
00029 #include "EvtGenBase/EvtTensor4C.hh"
00030 #include "EvtGenBase/EvtDiracSpinor.hh"
00031 #include "EvtGenBase/EvtSemiLeptonicScalarAmp.hh"
00032 #include "EvtGenBase/EvtId.hh"
00033 #include "EvtGenBase/EvtAmp.hh"
00034 #include "EvtGenBase/EvtSemiLeptonicFF.hh"
00035
00036 void EvtSemiLeptonicScalarAmp::CalcAmp( EvtParticle *parent,
00037 EvtAmp& amp,
00038 EvtSemiLeptonicFF *FormFactors ) {
00039
00040 static EvtId EM=EvtPDL::getId("e-");
00041 static EvtId MUM=EvtPDL::getId("mu-");
00042 static EvtId TAUM=EvtPDL::getId("tau-");
00043 static EvtId EP=EvtPDL::getId("e+");
00044 static EvtId MUP=EvtPDL::getId("mu+");
00045 static EvtId TAUP=EvtPDL::getId("tau+");
00046
00047
00048
00049 EvtVector4R q = parent->getDaug(1)->getP4()
00050 + parent->getDaug(2)->getP4();
00051 double q2 = (q.mass2());
00052
00053 double fpf,f0f;
00054 double mesonmass = parent->getDaug(0)->mass();
00055 double parentmass = parent->mass();
00056
00057 FormFactors->getscalarff(parent->getId(),
00058 parent->getDaug(0)->getId(),
00059 q2,
00060 mesonmass,
00061 &fpf,
00062 &f0f);
00063
00064
00065 EvtVector4R p4b;
00066 p4b.set(parent->mass(),0.0,0.0,0.0);
00067 EvtVector4R p4meson = parent->getDaug(0)->getP4();
00068 double mdiffoverq2;
00069 mdiffoverq2 = parentmass*parentmass - mesonmass*mesonmass;
00070 mdiffoverq2 = mdiffoverq2 / q2;
00071
00072 EvtVector4C l1,l2;
00073
00074 EvtId l_num = parent->getDaug(1)->getId();
00075 EvtVector4C tds;
00076
00077 if (l_num==EM||l_num==MUM||l_num==TAUM){
00078
00079 tds = EvtVector4C(fpf*(p4b+p4meson - (mdiffoverq2*(p4b-p4meson)))+
00080 + f0f*mdiffoverq2*(p4b-p4meson));
00081
00082 l1=EvtLeptonVACurrent(parent->getDaug(1)->spParent(0),
00083 parent->getDaug(2)->spParentNeutrino());
00084 l2=EvtLeptonVACurrent(parent->getDaug(1)->spParent(1),
00085 parent->getDaug(2)->spParentNeutrino());
00086 }
00087 else{
00088 if (l_num==EP||l_num==MUP||l_num==TAUP){
00089
00090 tds = EvtVector4C(fpf*(p4b+p4meson - (mdiffoverq2*(p4b-p4meson)))+
00091 + f0f*mdiffoverq2*(p4b-p4meson));
00092
00093 l1=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(),
00094 parent->getDaug(1)->spParent(0));
00095 l2=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(),
00096 parent->getDaug(1)->spParent(1));
00097 }
00098 else{
00099 report(ERROR,"EvtGen") << "dfnb89agngri wrong lepton number\n";
00100 }
00101 }
00102
00103 amp.vertex(0,l1*tds);
00104 amp.vertex(1,l2*tds);
00105
00106 }
00107