]>
Commit | Line | Data |
---|---|---|
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> | |
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 | |
19490ab9 | 119 | double EvtLambdaP_BarGamma::f0(double fqm, int n){ |
da0e9ce3 | 120 | return fqm * pow(1 - pow(_mLambdab - _mLambda0, 2) / (_mV * _mV), n); |
121 | } | |
122 | ||
19490ab9 | 123 | double EvtLambdaP_BarGamma::g0(double gqm, int n){ |
da0e9ce3 | 124 | return gqm * pow(1 - pow(_mLambdab - _mLambda0, 2) / (_mA * _mA), n); |
125 | } | |
126 | ||
127 | ||
19490ab9 | 128 | double 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 | 133 | double 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 | } |