]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/EvtGenModels/EvtLambdaP_BarGamma.cxx
added a histogram
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtLambdaP_BarGamma.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) 2003      Caltech
10 //
11 // Module: EvtGen/EvtRadiativeBaryonicPenguins.hh
12 //
13 // Description:Implementation of the decay B- -> lambda p_bar gamma according to
14 // Cheng, Yang; hep-ph/0201015
15 //
16 // Modification history:
17 //
18 //    JFS     December 16th, 2003         Module created
19 //
20 //------------------------------------------------------------------------
21 #include "EvtGenBase/EvtPatches.hh"
22
23 #include "EvtGenModels/EvtLambdaP_BarGamma.hh"
24 #include "EvtGenBase/EvtGammaMatrix.hh"
25 #include "EvtGenBase/EvtDiracSpinor.hh"
26 #include "EvtGenBase/EvtSpinType.hh"
27 #include "EvtGenBase/EvtDiracParticle.hh"
28 #include "EvtGenBase/EvtPhotonParticle.hh"
29 #include <stdlib.h>
30 using std::cout;
31 using std::endl;
32
33 EvtLambdaP_BarGamma::EvtLambdaP_BarGamma() :
34   _mLambdab   ( 5.624),            // Lambda_b mass
35   _mLambda0    ( 1.115684),         // Lambda0 mass
36   _c7Eff       ( -0.31),            // Wilson coefficient                                      
37   _mb          (  4.4),             // running b mass                                          
38   _mV          (  5.42),            // pole mass vector current                                
39   _mA          (  5.86),            // pole mass axial current                                 
40   _GF          (  1.166E-5),        // Fermi constant                                          
41   _gLambdab   (  16),               // coupling constant Lambda_b -> B- p
42   _e0          (  1),               // electromagnetic coupling (+1)                           
43   _g1          (  0.64),            // heavy-light form factors at q_mSqare                    
44   _g2          ( -0.10),     
45   _f1          (  0.64),
46   _f2          ( -0.31),
47   _VtbVtsStar ( 0.038)            // |V_tb V_ts^*|
48 {
49 }
50
51
52
53 std::string EvtLambdaP_BarGamma::getName(){
54     return "B_TO_LAMBDA_PBAR_GAMMA";
55 }
56
57 EvtDecayBase* EvtLambdaP_BarGamma::clone(){
58     return new EvtLambdaP_BarGamma;
59 }
60
61 void EvtLambdaP_BarGamma::init() {
62     // no arguments, daughter lambda p_bar gamma
63     checkNArg(0);
64     checkNDaug(3);
65     
66     checkSpinParent(EvtSpinType::SCALAR);
67     checkSpinDaughter(0, EvtSpinType::DIRAC);
68     checkSpinDaughter(1, EvtSpinType::DIRAC);
69     checkSpinDaughter(2, EvtSpinType::PHOTON);    
70 }
71
72
73 // initialize phasespace and calculate the amplitude
74 void EvtLambdaP_BarGamma::decay(EvtParticle* p) {
75     EvtComplex I(0, 1);
76     
77     p->initializePhaseSpace(getNDaug(), getDaugs());
78     
79     EvtDiracParticle* theLambda = static_cast<EvtDiracParticle*>(p->getDaug(0));
80     EvtVector4R lambdaMomentum = theLambda->getP4Lab();
81     
82     EvtDiracParticle* theAntiP = static_cast<EvtDiracParticle*>(p->getDaug(1));
83     
84     EvtPhotonParticle* thePhoton = static_cast<EvtPhotonParticle*>(p->getDaug(2));
85     EvtVector4R photonMomentum = thePhoton->getP4Lab();     // get momentum in the same frame
86         
87     // loop over all possible spin states
88     for (int i=0; i<2; ++i) {
89       EvtDiracSpinor lambdaPol = theLambda->spParent(i);
90       for (int j=0; j<2; ++j)  {
91         EvtDiracSpinor antiP_Pol = theAntiP->spParent(j);
92         for (int k=0; k<2; ++k) {
93           EvtVector4C photonPol = thePhoton->epsParentPhoton(k); // one of two possible polarization states
94           EvtGammaMatrix photonGamma; // sigma[mu][nu] * epsilon[mu] * k[nu] (watch lower indices)
95           for (int mu=0; mu<4; ++mu)
96             for (int nu=0; nu<4; ++nu)
97               photonGamma += EvtGammaMatrix::sigmaLower(mu, nu) * photonPol.get(mu) * photonMomentum.get(nu);
98           
99           EvtComplex amp = 
100             -I*_gLambdab * lambdaPol.adjoint() * ((constA()*EvtGammaMatrix::id() + constB()*EvtGammaMatrix::g5())
101                                                    * photonGamma * (slash(lambdaMomentum) + slash(photonMomentum) + _mLambdab*EvtGammaMatrix::id())
102                                                    / ((lambdaMomentum + photonMomentum)*(lambdaMomentum + photonMomentum) - _mLambdab*_mLambdab)
103                                                    * EvtGammaMatrix::g5() * antiP_Pol);
104           // use of parentheses so I do not have to define EvtDiracSpinor*EvtGammaMatrix, which shouldn't be defined to prevent errors in indexing
105
106           vertex(i, j, k, amp);
107         }
108       }
109     }
110 }
111
112 void EvtLambdaP_BarGamma::initProbMax()
113 {
114     // setProbMax(1);
115     setProbMax(9.0000E-13); // found by trial and error
116 }
117
118 // form factors at 0
119 double EvtLambdaP_BarGamma::f0(double fqm, int n){
120     return fqm * pow(1 - pow(_mLambdab - _mLambda0, 2) / (_mV * _mV), n);
121 }
122
123 double EvtLambdaP_BarGamma::g0(double gqm, int n){
124     return gqm * pow(1 - pow(_mLambdab - _mLambda0, 2) / (_mA * _mA), n);
125 }
126
127
128 double EvtLambdaP_BarGamma::constA(){
129     return _GF/sqrt(2.) * _e0 / (8 * EvtConst::pi*EvtConst::pi) * 2 * _c7Eff * _mb * _VtbVtsStar
130         * (f0(_f1) - f0(_f2));
131 }
132
133 double EvtLambdaP_BarGamma::constB(){
134     return _GF/sqrt(2.) * _e0 / (8 * EvtConst::pi*EvtConst::pi) * 2 * _c7Eff * _mb * _VtbVtsStar
135         * (g0(_g1) - (_mLambdab - _mLambda0) / (_mLambdab + _mLambda0) * g0(_g2));
136 }