]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenModels/EvtLambdaP_BarGamma.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtLambdaP_BarGamma.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) 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>
30using std::cout;
31using std::endl;
32
33EvtLambdaP_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
53std::string EvtLambdaP_BarGamma::getName(){
54 return "B_TO_LAMBDA_PBAR_GAMMA";
55}
56
57EvtDecayBase* EvtLambdaP_BarGamma::clone(){
58 return new EvtLambdaP_BarGamma;
59}
60
61void 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
74void 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
112void EvtLambdaP_BarGamma::initProbMax()
113{
114 // setProbMax(1);
115 setProbMax(9.0000E-13); // found by trial and error
116}
117
118// form factors at 0
19490ab9 119double EvtLambdaP_BarGamma::f0(double fqm, int n){
da0e9ce3 120 return fqm * pow(1 - pow(_mLambdab - _mLambda0, 2) / (_mV * _mV), n);
121}
122
19490ab9 123double EvtLambdaP_BarGamma::g0(double gqm, int n){
da0e9ce3 124 return gqm * pow(1 - pow(_mLambdab - _mLambda0, 2) / (_mA * _mA), n);
125}
126
127
19490ab9 128double EvtLambdaP_BarGamma::constA(){
da0e9ce3 129 return _GF/sqrt(2.) * _e0 / (8 * EvtConst::pi*EvtConst::pi) * 2 * _c7Eff * _mb * _VtbVtsStar
130 * (f0(_f1) - f0(_f2));
131}
132
19490ab9 133double EvtLambdaP_BarGamma::constB(){
da0e9ce3 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}