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
EvtRareLbToLllFFlQCD.cpp
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2022 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
25#include "EvtGenBase/EvtPDL.hh"
27
29
30#include <cmath>
31#include <stdlib.h>
32
33//-----------------------------------------------------------------------------
34// Implementation file for class : EvtRareLbToLllFFlQCD
35//
36// 2016-04-19 : Michal Kreps
37// 2014-10-22 : Michal Kreps
38//-----------------------------------------------------------------------------
39
41{
42 const EvtId LbID = EvtPDL::getId( std::string( "Lambda_b0" ) );
43 const EvtId LID = EvtPDL::getId( std::string( "Lambda0" ) );
44 const EvtId BID = EvtPDL::getId( std::string( "B+" ) );
45 const EvtId KID = EvtPDL::getId( std::string( "K-" ) );
46 const double m1 = EvtPDL::getMass( LbID );
47 const double m2 = EvtPDL::getMass( LID );
48 const double mB = EvtPDL::getMass( BID );
49 const double mK = EvtPDL::getMass( KID );
50 m_t0 = ( m1 - m2 ) * ( m1 - m2 );
51 m_tplus = ( mB + mK ) * ( mB + mK );
52
53 m_fconsts[0][0] = 0.4221;
54 m_fconsts[0][1] = -1.1386;
55 m_fconsts[0][2] = 5.416;
56 m_fconsts[1][0] = 0.5182;
57 m_fconsts[1][1] = -1.3495;
58 m_fconsts[1][2] = 5.416;
59 m_fconsts[2][0] = 0.3725;
60 m_fconsts[2][1] = -0.9389;
61 m_fconsts[2][2] = 5.711;
62
63 m_gconsts[0][0] = 0.3563;
64 m_gconsts[0][1] = -1.0612;
65 m_gconsts[0][2] = 5.750;
66 m_gconsts[1][0] = 0.3563;
67 m_gconsts[1][1] = -1.1357;
68 m_gconsts[1][2] = 5.750;
69 m_gconsts[2][0] = 0.4028;
70 m_gconsts[2][1] = -1.0290;
71 m_gconsts[2][2] = 5.367;
72
73 m_hconsts[0][0] = 0.4960;
74 m_hconsts[0][1] = -1.1275;
75 m_hconsts[0][2] = 5.416;
76 m_hconsts[1][0] = 0.3876;
77 m_hconsts[1][1] = -0.9623;
78 m_hconsts[1][2] = 5.416;
79 m_hconsts[2][0] = 0;
80 m_hconsts[2][1] = 0;
81 m_hconsts[2][2] = 0;
82
83 m_htildaconsts[0][0] = 0.3403;
84 m_htildaconsts[0][1] = -0.7697;
85 m_htildaconsts[0][2] = 5.750;
86 m_htildaconsts[1][0] = 0.3403;
87 m_htildaconsts[1][1] = -0.8008;
88 m_htildaconsts[1][2] = 5.750;
89 m_htildaconsts[2][0] = 0;
90 m_htildaconsts[2][1] = 0;
91 m_htildaconsts[2][2] = 0;
92
93 EvtGenReport( EVTGEN_INFO, "EvtGen" )
94 << " EvtRareLbToLll is using form factors from arXiv:1602.01399 "
95 << std::endl;
96}
97
98//=============================================================================
99
101 const EvtParticle& lambda,
103{
104 // Find the FF information for this particle, start by setting all to zero
105 FF.areZero();
106
107 const double m1 = parent.getP4().mass();
108 const double m2 = lambda.getP4().mass();
109 // double m21=m2/m1;
110 EvtVector4R p4parent;
111 p4parent.set( parent.mass(), 0, 0, 0 );
112 const double q2 = ( p4parent - lambda.getP4() ).mass2();
113
114 const double massSum = m1 + m2;
115 const double massDiff = m1 - m2;
116 const double massSumSq = massSum * massSum;
117 const double massDiffSq = massDiff * massDiff;
118 const double q2Sum = q2 - massSumSq;
119 const double q2Diff = q2 - massDiffSq;
120
121 double f[3];
122 double g[3];
123 double h[2];
124 double htilda[2];
125
126 for ( int i = 0; i <= 2; ++i ) {
127 f[i] = formFactorParametrization( q2, m_fconsts[i][0], m_fconsts[i][1],
128 m_fconsts[i][2] );
129 g[i] = formFactorParametrization( q2, m_gconsts[i][0], m_gconsts[i][1],
130 m_gconsts[i][2] );
131 }
132 for ( int i = 0; i <= 1; ++i ) {
133 h[i] = formFactorParametrization( q2, m_hconsts[i][0], m_hconsts[i][1],
134 m_hconsts[i][2] );
135 htilda[i] = formFactorParametrization( q2, m_htildaconsts[i][0],
136 m_htildaconsts[i][1],
137 m_htildaconsts[i][2] );
138 }
139
140 // Both v^2==v'^2==1 by definition
141 FF.m_F[0] = f[1];
142 FF.m_F[1] = m1 *
143 ( ( f[1] - f[0] ) * massSum +
144 massDiff *
145 ( q2 * ( f[2] - f[1] ) - ( f[2] - f[0] ) * massSumSq ) /
146 q2 ) /
147 q2Sum;
148 FF.m_F[2] = -m2 *
149 ( massSum * ( f[0] - f[1] ) +
150 massDiff *
151 ( q2 * ( f[2] - f[1] ) - massSumSq * ( f[2] - f[0] ) ) /
152 q2 ) /
153 q2Sum;
154
155 FF.m_G[0] = g[1];
156 FF.m_G[1] = m1 / q2Diff *
157 ( massDiff * ( g[0] - g[1] ) +
158 massSum *
159 ( q2 * ( g[1] - g[2] ) + massDiffSq * ( g[2] - g[0] ) ) /
160 q2 );
161 FF.m_G[2] = -m2 / q2Diff *
162 ( massDiff * ( g[1] - g[0] ) +
163 massSum *
164 ( q2 * ( g[1] - g[2] ) + massDiffSq * ( g[2] - g[0] ) ) /
165 q2 );
166
167 FF.m_FT[0] = -massSum * h[1];
168
169 FF.m_FT[1] = -m1 / q2Sum *
170 ( 2 * h[1] * m2 * massSum - h[0] * ( q2 - massSum * massDiff ) );
171 FF.m_FT[2] = -m2 / q2Sum *
172 ( 2 * h[1] * m1 * massSum - h[0] * ( q2 + massSum * massDiff ) );
173
174 FF.m_GT[0] = massDiff * htilda[1];
175
176 FF.m_GT[1] = m1 / q2Diff *
177 ( 2 * htilda[1] * massDiff * m2 +
178 htilda[0] * ( q2 - massSum * massDiff ) );
179 FF.m_GT[2] = m2 / q2Diff *
180 ( -2 * htilda[1] * massDiff * m1 +
181 htilda[0] * ( q2 + massSum * massDiff ) );
182
183 return;
184}
185
187 const double a0,
188 const double a1,
189 const double pole ) const
190{
191 const double z = zvar( q2 );
192 return 1. / ( 1. - q2 / ( pole * pole ) ) * ( a0 + a1 * z );
193}
194
195double EvtRareLbToLllFFlQCD::zvar( const double q2 ) const
196{
197 const double a = std::sqrt( m_tplus - q2 );
198 const double b = std::sqrt( m_tplus - m_t0 );
199
200 return ( a - b ) / ( a + b );
201}
double lambda(double q, double m1, double m2)
Definition EvtFlatQ2.cpp:30
const double a1
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_INFO
Definition EvtReport.hh:52
Definition EvtId.hh:27
static double getMass(EvtId i)
Definition EvtPDL.cpp:311
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283
const EvtVector4R & getP4() const
double mass() const
void getFF(const EvtParticle &parent, const EvtParticle &lambda, EvtRareLbToLllFFBase::FormFactors &FF) const override
double formFactorParametrization(const double q2, const double a0, const double a1, const double pole) const
double zvar(const double q2) const
double mass() const
void set(int i, double d)