]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/EvtGenBase/EvtSemiLeptonicBaryonAmp.cxx
AliDecayer realisation for the EvtGen code and EvtGen itself.
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenBase / EvtSemiLeptonicBaryonAmp.cxx
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: EvtSemiLeptonicBaryonAmp.cc
12 //
13 // Description: Routine to implement semileptonic decays to vector
14 //              mesons. 
15 //
16 // Modification history:
17 //
18 //    Lange    Oct 20, 2004   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/EvtSemiLeptonicBaryonAmp.hh"
32 #include "EvtGenBase/EvtId.hh"
33 #include "EvtGenBase/EvtAmp.hh"
34 #include "EvtGenBase/EvtSemiLeptonicFF.hh"
35 #include "EvtGenBase/EvtGammaMatrix.hh"
36 using std::endl;
37
38 void EvtSemiLeptonicBaryonAmp::CalcAmp( EvtParticle *parent,
39                                         EvtAmp& amp,
40                                         EvtSemiLeptonicFF *FormFactors ) {
41
42   static EvtId EM=EvtPDL::getId("e-");
43   static EvtId MUM=EvtPDL::getId("mu-");
44   static EvtId TAUM=EvtPDL::getId("tau-");
45   static EvtId EP=EvtPDL::getId("e+");
46   static EvtId MUP=EvtPDL::getId("mu+");
47   static EvtId TAUP=EvtPDL::getId("tau+");
48
49  
50   //Add the lepton and neutrino 4 momenta to find q2
51
52   EvtVector4R q = parent->getDaug(1)->getP4() 
53                     + parent->getDaug(2)->getP4(); 
54   double q2 = (q.mass2());
55
56   double f1v,f1a,f2v,f2a;
57   double m_meson = parent->getDaug(0)->mass();
58
59   FormFactors->getbaryonff(parent->getId(),
60                            parent->getDaug(0)->getId(),
61                            q2,
62                            m_meson,
63                            &f1v, 
64                            &f1a, 
65                            &f2v, 
66                            &f2a);
67
68   EvtVector4R p4b;
69   p4b.set(parent->mass(),0.0,0.0,0.0);
70   
71   EvtVector4C temp_00_term1;
72   EvtVector4C temp_00_term2;
73   
74   EvtVector4C temp_01_term1;
75   EvtVector4C temp_01_term2;
76   
77   EvtVector4C temp_10_term1;
78   EvtVector4C temp_10_term2;
79   
80   EvtVector4C temp_11_term1;
81   EvtVector4C temp_11_term2;
82   
83   EvtDiracSpinor p0=parent->sp(0);
84   EvtDiracSpinor p1=parent->sp(1);
85   
86   EvtDiracSpinor d0=parent->getDaug(0)->spParent(0);
87   EvtDiracSpinor d1=parent->getDaug(0)->spParent(1);
88   
89   temp_00_term1.set(0,f1v*(d0*(EvtGammaMatrix::g0()*p0)));
90   temp_00_term2.set(0,f1a*(d0*((EvtGammaMatrix::g0()*EvtGammaMatrix::g5())*p0)));
91   temp_01_term1.set(0,f1v*(d0*(EvtGammaMatrix::g0()*p1)));
92   temp_01_term2.set(0,f1a*(d0*((EvtGammaMatrix::g0()*EvtGammaMatrix::g5())*p1)));
93   temp_10_term1.set(0,f1v*(d1*(EvtGammaMatrix::g0()*p0)));
94   temp_10_term2.set(0,f1a*(d1*((EvtGammaMatrix::g0()*EvtGammaMatrix::g5())*p0)));
95   temp_11_term1.set(0,f1v*(d1*(EvtGammaMatrix::g0()*p1)));
96   temp_11_term2.set(0,f1a*(d1*((EvtGammaMatrix::g0()*EvtGammaMatrix::g5())*p1)));
97   
98   temp_00_term1.set(1,f1v*(d0*(EvtGammaMatrix::g1()*p0)));
99   temp_00_term2.set(1,f1a*(d0*((EvtGammaMatrix::g1()*EvtGammaMatrix::g5())*p0)));
100   temp_01_term1.set(1,f1v*(d0*(EvtGammaMatrix::g1()*p1)));
101   temp_01_term2.set(1,f1a*(d0*((EvtGammaMatrix::g1()*EvtGammaMatrix::g5())*p1)));
102   temp_10_term1.set(1,f1v*(d1*(EvtGammaMatrix::g1()*p0)));
103   temp_10_term2.set(1,f1a*(d1*((EvtGammaMatrix::g1()*EvtGammaMatrix::g5())*p0)));
104   temp_11_term1.set(1,f1v*(d1*(EvtGammaMatrix::g1()*p1)));
105   temp_11_term2.set(1,f1a*(d1*((EvtGammaMatrix::g1()*EvtGammaMatrix::g5())*p1)));
106   
107   temp_00_term1.set(2,f1v*(d0*(EvtGammaMatrix::g2()*p0)));
108   temp_00_term2.set(2,f1a*(d0*((EvtGammaMatrix::g2()*EvtGammaMatrix::g5())*p0)));
109   temp_01_term1.set(2,f1v*(d0*(EvtGammaMatrix::g2()*p1)));
110   temp_01_term2.set(2,f1a*(d0*((EvtGammaMatrix::g2()*EvtGammaMatrix::g5())*p1)));
111   temp_10_term1.set(2,f1v*(d1*(EvtGammaMatrix::g2()*p0)));
112   temp_10_term2.set(2,f1a*(d1*((EvtGammaMatrix::g2()*EvtGammaMatrix::g5())*p0)));
113   temp_11_term1.set(2,f1v*(d1*(EvtGammaMatrix::g2()*p1)));
114   temp_11_term2.set(2,f1a*(d1*((EvtGammaMatrix::g2()*EvtGammaMatrix::g5())*p1)));
115   
116   temp_00_term1.set(3,f1v*(d0*(EvtGammaMatrix::g3()*p0)));
117   temp_00_term2.set(3,f1a*(d0*((EvtGammaMatrix::g3()*EvtGammaMatrix::g5())*p0)));
118   temp_01_term1.set(3,f1v*(d0*(EvtGammaMatrix::g3()*p1)));
119   temp_01_term2.set(3,f1a*(d0*((EvtGammaMatrix::g3()*EvtGammaMatrix::g5())*p1)));
120   temp_10_term1.set(3,f1v*(d1*(EvtGammaMatrix::g3()*p0)));
121   temp_10_term2.set(3,f1a*(d1*((EvtGammaMatrix::g3()*EvtGammaMatrix::g5())*p0)));
122   temp_11_term1.set(3,f1v*(d1*(EvtGammaMatrix::g3()*p1)));
123   temp_11_term2.set(3,f1a*(d1*((EvtGammaMatrix::g3()*EvtGammaMatrix::g5())*p1)));
124   
125
126
127   EvtVector4C l1,l2;
128
129   EvtId l_num = parent->getDaug(1)->getId();
130   if (l_num==EM||l_num==MUM||l_num==TAUM){
131
132     l1=EvtLeptonVACurrent(parent->getDaug(1)->spParent(0),
133                           parent->getDaug(2)->spParentNeutrino());
134     l2=EvtLeptonVACurrent(parent->getDaug(1)->spParent(1),
135                           parent->getDaug(2)->spParentNeutrino());
136   }
137   else{
138     if (l_num==EP||l_num==MUP||l_num==TAUP){
139     l1=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(),
140                             parent->getDaug(1)->spParent(0));
141     l2=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(),
142                             parent->getDaug(1)->spParent(1));
143     }
144     else{
145       report(ERROR,"EvtGen") << "Wrong lepton number"<<endl;
146     }
147   }
148
149   amp.vertex(0,0,0,l1.cont(temp_00_term1+temp_00_term2));
150   amp.vertex(0,0,1,l2.cont(temp_00_term1+temp_00_term2));
151
152   amp.vertex(0,1,0,l1.cont(temp_01_term1+temp_01_term2));
153   amp.vertex(0,1,1,l2.cont(temp_01_term1+temp_01_term2));
154
155   amp.vertex(1,0,0,l1.cont(temp_10_term1+temp_10_term2));
156   amp.vertex(1,0,1,l2.cont(temp_10_term1+temp_10_term2));
157
158   amp.vertex(1,1,0,l1.cont(temp_11_term1+temp_11_term2));
159   amp.vertex(1,1,1,l2.cont(temp_11_term1+temp_11_term2));
160
161   return;
162 }
163