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.
EvtRareLbToLllFFlQCD.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 
23 #include "EvtGenBase/EvtConst.hh"
24 #include "EvtGenBase/EvtIdSet.hh"
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  EvtId LbID = EvtPDL::getId( std::string( "Lambda_b0" ) );
43  EvtId LID = EvtPDL::getId( std::string( "Lambda0" ) );
44  EvtId BID = EvtPDL::getId( std::string( "B+" ) );
45  EvtId KID = EvtPDL::getId( std::string( "K-" ) );
46  double m1 = EvtPDL::getMass( LbID );
47  double m2 = EvtPDL::getMass( LID );
48  double mB = EvtPDL::getMass( BID );
49  double mK = EvtPDL::getMass( KID );
50  t0 = ( m1 - m2 ) * ( m1 - m2 );
51  tplus = ( mB + mK ) * ( mB + mK );
52 
53  fconsts[0][0] = 0.4221;
54  fconsts[0][1] = -1.1386;
55  fconsts[0][2] = 5.416;
56  fconsts[1][0] = 0.5182;
57  fconsts[1][1] = -1.3495;
58  fconsts[1][2] = 5.416;
59  fconsts[2][0] = 0.3725;
60  fconsts[2][1] = -0.9389;
61  fconsts[2][2] = 5.711;
62 
63  gconsts[0][0] = 0.3563;
64  gconsts[0][1] = -1.0612;
65  gconsts[0][2] = 5.750;
66  gconsts[1][0] = 0.3563;
67  gconsts[1][1] = -1.1357;
68  gconsts[1][2] = 5.750;
69  gconsts[2][0] = 0.4028;
70  gconsts[2][1] = -1.0290;
71  gconsts[2][2] = 5.367;
72 
73  hconsts[0][0] = 0.4960;
74  hconsts[0][1] = -1.1275;
75  hconsts[0][2] = 5.416;
76  hconsts[1][0] = 0.3876;
77  hconsts[1][1] = -0.9623;
78  hconsts[1][2] = 5.416;
79  hconsts[2][0] = 0;
80  hconsts[2][1] = 0;
81  hconsts[2][2] = 0;
82 
83  htildaconsts[0][0] = 0.3403;
84  htildaconsts[0][1] = -0.7697;
85  htildaconsts[0][2] = 5.750;
86  htildaconsts[1][0] = 0.3403;
87  htildaconsts[1][1] = -0.8008;
88  htildaconsts[1][2] = 5.750;
89  htildaconsts[2][0] = 0;
90  htildaconsts[2][1] = 0;
91  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 
102 {
103  // Find the FF information for this particle, start by setting all to zero
104  FF.areZero();
105 
106  double m1 = parent->getP4().mass();
107  double m2 = lambda->getP4().mass();
108  // double m21=m2/m1;
109  EvtVector4R p4parent;
110  p4parent.set( parent->mass(), 0, 0, 0 );
111  double q2 = ( p4parent - lambda->getP4() ).mass2();
112 
113  double massSum = m1 + m2;
114  double massDiff = m1 - m2;
115  double massSumSq = massSum * massSum;
116  double massDiffSq = massDiff * massDiff;
117  double q2Sum = q2 - massSumSq;
118  double q2Diff = q2 - massDiffSq;
119 
120  double f[3];
121  double g[3];
122  double h[2];
123  double htilda[2];
124 
125  for ( int i = 0; i <= 2; ++i ) {
126  f[i] = formFactorParametrization( q2, fconsts[i][0], fconsts[i][1],
127  fconsts[i][2] );
128  g[i] = formFactorParametrization( q2, gconsts[i][0], gconsts[i][1],
129  gconsts[i][2] );
130  }
131  for ( int i = 0; i <= 1; ++i ) {
132  h[i] = formFactorParametrization( q2, hconsts[i][0], hconsts[i][1],
133  hconsts[i][2] );
134  htilda[i] = formFactorParametrization( q2, htildaconsts[i][0],
135  htildaconsts[i][1],
136  htildaconsts[i][2] );
137  }
138 
139  // Both v^2==v'^2==1 by definition
140  FF.F_[0] = f[1];
141  FF.F_[1] = m1 *
142  ( ( f[1] - f[0] ) * massSum +
143  massDiff *
144  ( q2 * ( f[2] - f[1] ) - ( f[2] - f[0] ) * massSumSq ) /
145  q2 ) /
146  q2Sum;
147  FF.F_[2] = -m2 *
148  ( massSum * ( f[0] - f[1] ) +
149  massDiff *
150  ( q2 * ( f[2] - f[1] ) - massSumSq * ( f[2] - f[0] ) ) /
151  q2 ) /
152  q2Sum;
153 
154  FF.G_[0] = g[1];
155  FF.G_[1] = m1 / q2Diff *
156  ( massDiff * ( g[0] - g[1] ) +
157  massSum *
158  ( q2 * ( g[1] - g[2] ) + massDiffSq * ( g[2] - g[0] ) ) /
159  q2 );
160  FF.G_[2] = -m2 / q2Diff *
161  ( massDiff * ( g[1] - g[0] ) +
162  massSum *
163  ( q2 * ( g[1] - g[2] ) + massDiffSq * ( g[2] - g[0] ) ) /
164  q2 );
165 
166  FF.FT_[0] = -massSum * h[1];
167 
168  FF.FT_[1] = -m1 / q2Sum *
169  ( 2 * h[1] * m2 * massSum - h[0] * ( q2 - massSum * massDiff ) );
170  FF.FT_[2] = -m2 / q2Sum *
171  ( 2 * h[1] * m1 * massSum - h[0] * ( q2 + massSum * massDiff ) );
172 
173  FF.GT_[0] = massDiff * htilda[1];
174 
175  FF.GT_[1] = m1 / q2Diff *
176  ( 2 * htilda[1] * massDiff * m2 +
177  htilda[0] * ( q2 - massSum * massDiff ) );
178  FF.GT_[2] = m2 / q2Diff *
179  ( -2 * htilda[1] * massDiff * m1 +
180  htilda[0] * ( q2 + massSum * massDiff ) );
181 
182  return;
183 }
184 
186  double a1, double pole )
187 {
188  double z = zvar( q2 );
189  return 1. / ( 1. - q2 / ( pole * pole ) ) * ( a0 + a1 * z );
190 }
191 
192 double EvtRareLbToLllFFlQCD::zvar( double q2 )
193 {
194  double a = std::sqrt( tplus - q2 );
195  double b = std::sqrt( tplus - t0 );
196 
197  return ( a - b ) / ( a + b );
198 }
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
double mass() const
Definition: EvtVector4R.cpp:49
const double a1
void set(int i, double d)
Definition: EvtVector4R.hh:167
Definition: EvtId.hh:27
double formFactorParametrization(double q2, double a0, double a1, double pole)
static EvtId getId(const std::string &name)
Definition: EvtPDL.cpp:287
const EvtVector4R & getP4() const
double lambda(double q, double m1, double m2)
Definition: EvtFlatQ2.cpp:31
double mass() const
void getFF(EvtParticle *parent, EvtParticle *lambda, EvtRareLbToLllFFBase::FormFactors &FF) override
static double getMass(EvtId i)
Definition: EvtPDL.cpp:319