evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
EvtLambdaP_BarGamma.cpp
Go to the documentation of this file.
1 
2 /***********************************************************************
3 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4 * *
5 * This file is part of EvtGen. *
6 * *
7 * EvtGen is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * EvtGen is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19 ***********************************************************************/
20 
22 
26 #include "EvtGenBase/EvtPatches.hh"
29 
30 #include <stdlib.h>
31 using std::cout;
32 using std::endl;
33 
35  _mLambdab( 5.624 ), // Lambda_b mass
36  _mLambda0( 1.115684 ), // Lambda0 mass
37  _c7Eff( -0.31 ), // Wilson coefficient
38  _mb( 4.4 ), // running b mass
39  _mV( 5.42 ), // pole mass vector current
40  _mA( 5.86 ), // pole mass axial current
41  _GF( 1.166E-5 ), // Fermi constant
42  _gLambdab( 16 ), // coupling constant Lambda_b -> B- p
43  _e0( 1 ), // electromagnetic coupling (+1)
44  _g1( 0.64 ), // heavy-light form factors at q_mSqare
45  _g2( -0.10 ),
46  _f1( 0.64 ),
47  _f2( -0.31 ),
48  _VtbVtsStar( 0.038 ) // |V_tb V_ts^*|
49 {
50 }
51 
53 {
54  return "B_TO_LAMBDA_PBAR_GAMMA";
55 }
56 
58 {
59  return new EvtLambdaP_BarGamma;
60 }
61 
63 {
64  // no arguments, daughter lambda p_bar gamma
65  checkNArg( 0 );
66  checkNDaug( 3 );
67 
72 }
73 
74 // initialize phasespace and calculate the amplitude
76 {
77  EvtComplex I( 0, 1 );
78 
80 
81  EvtDiracParticle* theLambda = static_cast<EvtDiracParticle*>(
82  p->getDaug( 0 ) );
83  EvtVector4R lambdaMomentum = theLambda->getP4Lab();
84 
85  EvtDiracParticle* theAntiP = static_cast<EvtDiracParticle*>( p->getDaug( 1 ) );
86 
87  EvtPhotonParticle* thePhoton = static_cast<EvtPhotonParticle*>(
88  p->getDaug( 2 ) );
89  EvtVector4R photonMomentum =
90  thePhoton->getP4Lab(); // get momentum in the same frame
91 
92  // loop over all possible spin states
93  for ( int i = 0; i < 2; ++i ) {
94  EvtDiracSpinor lambdaPol = theLambda->spParent( i );
95  for ( int j = 0; j < 2; ++j ) {
96  EvtDiracSpinor antiP_Pol = theAntiP->spParent( j );
97  for ( int k = 0; k < 2; ++k ) {
98  EvtVector4C photonPol = thePhoton->epsParentPhoton(
99  k ); // one of two possible polarization states
100  EvtGammaMatrix photonGamma; // sigma[mu][nu] * epsilon[mu] * k[nu] (watch lower indices)
101  for ( int mu = 0; mu < 4; ++mu )
102  for ( int nu = 0; nu < 4; ++nu )
103  photonGamma += EvtGammaMatrix::sigmaLower( mu, nu ) *
104  photonPol.get( mu ) *
105  photonMomentum.get( nu );
106 
107  EvtComplex amp = -I * _gLambdab * lambdaPol.adjoint() *
108  ( ( constA() * EvtGammaMatrix::id() +
109  constB() * EvtGammaMatrix::g5() ) *
110  photonGamma *
111  ( EvtGenFunctions::slash( lambdaMomentum ) +
112  EvtGenFunctions::slash( photonMomentum ) +
114  ( ( lambdaMomentum + photonMomentum ) *
115  ( lambdaMomentum + photonMomentum ) -
116  _mLambdab * _mLambdab ) *
117  EvtGammaMatrix::g5() * antiP_Pol );
118  // use of parentheses so I do not have to define EvtDiracSpinor*EvtGammaMatrix, which shouldn't be defined to prevent errors in indexing
119 
120  vertex( i, j, k, amp );
121  }
122  }
123  }
124 }
125 
127 {
128  // setProbMax(1);
129  setProbMax( 9.0000E-13 ); // found by trial and error
130 }
131 
132 // form factors at 0
133 double EvtLambdaP_BarGamma::f0( double fqm, int n ) const
134 {
135  return fqm * pow( 1 - pow( _mLambdab - _mLambda0, 2 ) / ( _mV * _mV ), n );
136 }
137 
138 double EvtLambdaP_BarGamma::g0( double gqm, int n ) const
139 {
140  return gqm * pow( 1 - pow( _mLambdab - _mLambda0, 2 ) / ( _mA * _mA ), n );
141 }
142 
144 {
145  return _GF / sqrt( 2. ) * _e0 / ( 8 * EvtConst::pi * EvtConst::pi ) * 2 *
146  _c7Eff * _mb * _VtbVtsStar * ( f0( _f1 ) - f0( _f2 ) );
147 }
148 
150 {
151  return _GF / sqrt( 2. ) * _e0 / ( 8 * EvtConst::pi * EvtConst::pi ) * 2 *
152  _c7Eff * _mb * _VtbVtsStar *
153  ( g0( _g1 ) - ( _mLambdab - _mLambda0 ) / ( _mLambdab + _mLambda0 ) *
154  g0( _g2 ) );
155 }
EvtGammaMatrix slash(const EvtVector4C &p)
EvtDiracSpinor adjoint() const
EvtVector4R getP4Lab() const
EvtDiracSpinor spParent(int i) const override
static const EvtGammaMatrix & sigmaLower(unsigned int mu, unsigned int nu)
EvtId * getDaugs()
Definition: EvtDecayBase.hh:66
void setProbMax(double prbmx)
void decay(EvtParticle *p) override
static const double pi
Definition: EvtConst.hh:26
EvtDecayBase * clone() override
void vertex(const EvtComplex &amp)
Definition: EvtDecayAmp.hh:37
double initializePhaseSpace(unsigned int numdaughter, EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
void checkNDaug(int d1, int d2=-1)
void checkSpinParent(EvtSpinType::spintype sp)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
double f0(const double f_qm, int n=1) const
int getNDaug() const
Definition: EvtDecayBase.hh:65
const EvtComplex & get(int) const
Definition: EvtVector4C.hh:125
EvtParticle * getDaug(int i)
Definition: EvtParticle.cpp:91
static const EvtGammaMatrix & id()
const EvtComplex I
Definition: EvtBsMuMuKK.cpp:38
double g0(const double f_qm, int n=1) const
static const EvtGammaMatrix & g5()
std::string getName() override