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: EvtSemiLeptonicVectorAmp.cc
13 // Description: Routine to implement semileptonic decays to vector
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/EvtSemiLeptonicVectorAmp.hh"
32 #include "EvtGenBase/EvtId.hh"
33 #include "EvtGenBase/EvtAmp.hh"
34 #include "EvtGenBase/EvtSemiLeptonicFF.hh"
37 void EvtSemiLeptonicVectorAmp::CalcAmp( EvtParticle *parent,
39 EvtSemiLeptonicFF *FormFactors ) {
41 static EvtId EM=EvtPDL::getId("e-");
42 static EvtId MUM=EvtPDL::getId("mu-");
43 static EvtId TAUM=EvtPDL::getId("tau-");
44 static EvtId EP=EvtPDL::getId("e+");
45 static EvtId MUP=EvtPDL::getId("mu+");
46 static EvtId TAUP=EvtPDL::getId("tau+");
48 static EvtId D0=EvtPDL::getId("D0");
49 static EvtId D0B=EvtPDL::getId("anti-D0");
50 static EvtId DP=EvtPDL::getId("D+");
51 static EvtId DM=EvtPDL::getId("D-");
52 static EvtId DSM=EvtPDL::getId("D_s-");
53 static EvtId DSP=EvtPDL::getId("D_s+");
55 //Add the lepton and neutrino 4 momenta to find q2
57 EvtVector4R q = parent->getDaug(1)->getP4()
58 + parent->getDaug(2)->getP4();
59 double q2 = (q.mass2());
61 double a1f,a2f,vf,a0f,a3f;
62 double m_meson = parent->getDaug(0)->mass();
64 FormFactors->getvectorff(parent->getId(),
65 parent->getDaug(0)->getId(),
73 double costhl_flag = 1.0;
75 if(parent->getId()==D0||parent->getId()==D0B||
76 parent->getId()==DP||parent->getId()==DM) {
79 if(parent->getId()==DSP||parent->getId()==DSM) {
82 vf = vf * costhl_flag;
85 p4b.set(parent->mass(),0.0,0.0,0.0);
87 EvtVector4R p4meson = parent->getDaug(0)->getP4();
91 EvtId l_num = parent->getDaug(1)->getId();
92 double m_b = parent->mass();
94 a3f = ((m_b+m_meson)/(2.0*m_meson))*a1f -
95 ((m_b-m_meson)/(2.0*m_meson))*a2f;
98 if (l_num==EM||l_num==MUM||l_num==TAUM){
100 tds = a1f*(m_b+m_meson)*EvtTensor4C::g();
101 tds.addDirProd((-a2f/(m_b+m_meson))*p4b,p4b+p4meson);
102 tds+=EvtComplex(0.0,vf/(m_b+m_meson))
103 *dual(directProd(p4meson+p4b,p4b-p4meson));
104 tds.addDirProd((a0f-a3f)*2.0*(m_meson/q2)*p4b,p4b-p4meson);
106 l1=EvtLeptonVACurrent(parent->getDaug(1)->spParent(0),
107 parent->getDaug(2)->spParentNeutrino());
108 l2=EvtLeptonVACurrent(parent->getDaug(1)->spParent(1),
109 parent->getDaug(2)->spParentNeutrino());
112 if (l_num==EP||l_num==MUP||l_num==TAUP){
113 tds = a1f*(m_b+m_meson)*EvtTensor4C::g();
114 tds.addDirProd((-a2f/(m_b+m_meson))*p4b,p4b+p4meson);
115 tds-=EvtComplex(0.0,vf/(m_b+m_meson))
116 *dual(directProd(p4meson+p4b,p4b-p4meson));
117 tds.addDirProd((a0f-a3f)*2.0*(m_meson/q2)*p4b,p4b-p4meson);
119 l1=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(),
120 parent->getDaug(1)->spParent(0));
121 l2=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(),
122 parent->getDaug(1)->spParent(1));
125 report(ERROR,"EvtGen") << "Wrong lepton number"<<endl;
129 EvtVector4C et0=tds.cont1( parent->getDaug(0)->epsParent(0).conj() );
130 EvtVector4C et1=tds.cont1( parent->getDaug(0)->epsParent(1).conj() );
131 EvtVector4C et2=tds.cont1( parent->getDaug(0)->epsParent(2).conj() );
134 amp.vertex(0,0,l1.cont(et0));
135 amp.vertex(0,1,l2.cont(et0));
137 amp.vertex(1,0,l1.cont(et1));
138 amp.vertex(1,1,l2.cont(et1));
140 amp.vertex(2,0,l1.cont(et2));
141 amp.vertex(2,1,l2.cont(et2));