EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
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
28
29#include <stdlib.h>
30using std::cout;
31using std::endl;
32
34 m_mLambdab( 5.624 ), // Lambda_b mass
35 m_mLambda0( 1.115684 ), // Lambda0 mass
36 m_c7Eff( -0.31 ), // Wilson coefficient
37 m_mb( 4.4 ), // running b mass
38 m_mV( 5.42 ), // pole mass vector current
39 m_mA( 5.86 ), // pole mass axial current
40 m_GF( 1.166E-5 ), // Fermi constant
41 m_gLambdab( 16 ), // coupling constant Lambda_b -> B- p
42 m_e0( 1 ), // electromagnetic coupling (+1)
43 m_g1( 0.64 ), // heavy-light form factors at q_mSqare
44 m_g2( -0.10 ),
45 m_f1( 0.64 ),
46 m_f2( -0.31 ),
47 m_VtbVtsStar( 0.038 ) // |V_tb V_ts^*|
48{
49}
50
52{
53 return "B_TO_LAMBDA_PBAR_GAMMA";
54}
55
60
62{
63 // no arguments, daughter lambda p_bar gamma
64 checkNArg( 0 );
65 checkNDaug( 3 );
66
71}
72
73// initialize phasespace and calculate the amplitude
75{
76 EvtComplex I( 0, 1 );
77
79
80 EvtDiracParticle* theLambda = static_cast<EvtDiracParticle*>(
81 p->getDaug( 0 ) );
82 EvtVector4R lambdaMomentum = theLambda->getP4Lab();
83
84 EvtDiracParticle* theAntiP = static_cast<EvtDiracParticle*>( p->getDaug( 1 ) );
85
86 EvtPhotonParticle* thePhoton = static_cast<EvtPhotonParticle*>(
87 p->getDaug( 2 ) );
88 EvtVector4R photonMomentum =
89 thePhoton->getP4Lab(); // get momentum in the same frame
90
91 // loop over all possible spin states
92 for ( int i = 0; i < 2; ++i ) {
93 EvtDiracSpinor lambdaPol = theLambda->spParent( i );
94 for ( int j = 0; j < 2; ++j ) {
95 EvtDiracSpinor antiP_Pol = theAntiP->spParent( j );
96 for ( int k = 0; k < 2; ++k ) {
97 EvtVector4C photonPol = thePhoton->epsParentPhoton(
98 k ); // one of two possible polarization states
99 EvtGammaMatrix photonGamma; // sigma[mu][nu] * epsilon[mu] * k[nu] (watch lower indices)
100 for ( int mu = 0; mu < 4; ++mu )
101 for ( int nu = 0; nu < 4; ++nu )
102 photonGamma += EvtGammaMatrix::sigmaLower( mu, nu ) *
103 photonPol.get( mu ) *
104 photonMomentum.get( nu );
105
106 EvtComplex amp = -I * m_gLambdab * lambdaPol.adjoint() *
107 ( ( constA() * EvtGammaMatrix::id() +
108 constB() * EvtGammaMatrix::g5() ) *
109 photonGamma *
110 ( EvtGenFunctions::slash( lambdaMomentum ) +
111 EvtGenFunctions::slash( photonMomentum ) +
113 ( ( lambdaMomentum + photonMomentum ) *
114 ( lambdaMomentum + photonMomentum ) -
116 EvtGammaMatrix::g5() * antiP_Pol );
117 // use of parentheses so I do not have to define EvtDiracSpinor*EvtGammaMatrix, which shouldn't be defined to prevent errors in indexing
118
119 vertex( i, j, k, amp );
120 }
121 }
122 }
123}
124
126{
127 // setProbMax(1);
128 setProbMax( 9.0000E-13 ); // found by trial and error
129}
130
131// form factors at 0
132double EvtLambdaP_BarGamma::f0( double fqm, int n ) const
133{
134 return fqm *
135 pow( 1 - pow( m_mLambdab - m_mLambda0, 2 ) / ( m_mV * m_mV ), n );
136}
137
138double EvtLambdaP_BarGamma::g0( double gqm, int n ) const
139{
140 return gqm *
141 pow( 1 - pow( m_mLambdab - m_mLambda0, 2 ) / ( m_mA * m_mA ), n );
142}
143
145{
146 return m_GF / sqrt( 2. ) * m_e0 / ( 8 * EvtConst::pi * EvtConst::pi ) * 2 *
147 m_c7Eff * m_mb * m_VtbVtsStar * ( f0( m_f1 ) - f0( m_f2 ) );
148}
149
151{
152 return m_GF / sqrt( 2. ) * m_e0 / ( 8 * EvtConst::pi * EvtConst::pi ) * 2 *
154 ( g0( m_g1 ) - ( m_mLambdab - m_mLambda0 ) /
155 ( m_mLambdab + m_mLambda0 ) * g0( m_g2 ) );
156}
const EvtComplex I
static const double pi
Definition EvtConst.hh:26
void vertex(const EvtComplex &amp)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
EvtDecayBase()=default
int getNDaug() const
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
const EvtId * getDaugs() const
EvtDiracSpinor spParent(int i) const override
EvtDiracSpinor adjoint() const
static const EvtGammaMatrix & sigmaLower(unsigned int mu, unsigned int nu)
static const EvtGammaMatrix & id()
static const EvtGammaMatrix & g5()
std::string getName() const override
void decay(EvtParticle *p) override
double g0(const double f_qm, int n=1) const
double f0(const double f_qm, int n=1) const
EvtDecayBase * clone() const override
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
EvtParticle * getDaug(const int i)
EvtVector4R getP4Lab() const
EvtVector4C epsParentPhoton(int i) const override
const EvtComplex & get(int) const
double get(int i) const
EvtGammaMatrix slash(const EvtVector4C &p)