]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenBase/EvtSemiLeptonicVectorAmp.cxx
AliDecayer realisation for the EvtGen code and EvtGen itself.
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenBase / EvtSemiLeptonicVectorAmp.cxx
CommitLineData
da0e9ce3 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: EvtSemiLeptonicVectorAmp.cc
12//
13// Description: Routine to implement semileptonic decays to vector
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/EvtSemiLeptonicVectorAmp.hh"
32#include "EvtGenBase/EvtId.hh"
33#include "EvtGenBase/EvtAmp.hh"
34#include "EvtGenBase/EvtSemiLeptonicFF.hh"
35using std::endl;
36
37void EvtSemiLeptonicVectorAmp::CalcAmp( EvtParticle *parent,
38 EvtAmp& amp,
39 EvtSemiLeptonicFF *FormFactors ) {
40
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+");
47
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+");
54
55 //Add the lepton and neutrino 4 momenta to find q2
56
57 EvtVector4R q = parent->getDaug(1)->getP4()
58 + parent->getDaug(2)->getP4();
59 double q2 = (q.mass2());
60
61 double a1f,a2f,vf,a0f,a3f;
62 double m_meson = parent->getDaug(0)->mass();
63
64 FormFactors->getvectorff(parent->getId(),
65 parent->getDaug(0)->getId(),
66 q2,
67 m_meson,
68 &a1f,
69 &a2f,
70 &vf,
71 &a0f);
72
73 double costhl_flag = 1.0;
74
75 if(parent->getId()==D0||parent->getId()==D0B||
76 parent->getId()==DP||parent->getId()==DM) {
77 costhl_flag = -1.0;
78 }
79 if(parent->getId()==DSP||parent->getId()==DSM) {
80 costhl_flag = -1.0;
81 }
82 vf = vf * costhl_flag;
83
84 EvtVector4R p4b;
85 p4b.set(parent->mass(),0.0,0.0,0.0);
86
87 EvtVector4R p4meson = parent->getDaug(0)->getP4();
88
89 EvtVector4C l1,l2;
90
91 EvtId l_num = parent->getDaug(1)->getId();
92 double m_b = parent->mass();
93
94 a3f = ((m_b+m_meson)/(2.0*m_meson))*a1f -
95 ((m_b-m_meson)/(2.0*m_meson))*a2f;
96
97 EvtTensor4C tds;
98 if (l_num==EM||l_num==MUM||l_num==TAUM){
99
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);
105
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());
110 }
111 else{
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);
118
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));
123 }
124 else{
125 report(ERROR,"EvtGen") << "Wrong lepton number"<<endl;
126 }
127 }
128
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() );
132
133
134 amp.vertex(0,0,l1.cont(et0));
135 amp.vertex(0,1,l2.cont(et0));
136
137 amp.vertex(1,0,l1.cont(et1));
138 amp.vertex(1,1,l2.cont(et1));
139
140 amp.vertex(2,0,l1.cont(et2));
141 amp.vertex(2,1,l2.cont(et2));
142
143 return;
144}
145