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.
EvtRareLbToLllFFGutsche.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/EvtIdSet.hh"
24 #include "EvtGenBase/EvtPDL.hh"
26 
27 //-----------------------------------------------------------------------------
28 // Implementation file for class : EvtRareLbToLllFFGutsche
29 //
30 // 2014-10-21 : Michal Kreps
31 //-----------------------------------------------------------------------------
32 
33 //=============================================================================
34 // Standard constructor, initializes variables
35 //=============================================================================
36 
37 EvtIdSet EvtRareLbToLllFFGutsche::fParents( "Lambda_b0", "anti-Lambda_b0" );
38 EvtIdSet EvtRareLbToLllFFGutsche::fDaughters( "Lambda0", "anti-Lambda0" );
39 
41 {
42  fVconsts[0][0] = 0.107;
43  fVconsts[0][1] = 2.27;
44  fVconsts[0][2] = 1.367;
45  fVconsts[1][0] = 0.043;
46  fVconsts[1][1] = 2.411;
47  fVconsts[1][2] = 1.531;
48  fVconsts[2][0] = -0.003;
49  fVconsts[2][1] = 2.815;
50  fVconsts[2][2] = 2.041;
51 
52  fAconsts[0][0] = 0.104;
53  fAconsts[0][1] = 2.232;
54  fAconsts[0][2] = 1.328;
55  fAconsts[1][0] = -0.003;
56  fAconsts[1][1] = 2.955;
57  fAconsts[1][2] = 3.620;
58  fAconsts[2][0] = -0.052;
59  fAconsts[2][1] = 2.437;
60  fAconsts[2][2] = 1.559;
61 
62  fTVconsts[0][0] = -0.043;
63  fTVconsts[0][1] = 2.411;
64  fTVconsts[0][2] = 1.531;
65  fTVconsts[1][0] = -0.105;
66  fTVconsts[1][1] = 2.27118;
67  fTVconsts[1][2] = 1.36776;
68  fTVconsts[2][0] = 0; // Not used anywhere
69  fTVconsts[2][1] = 0;
70  fTVconsts[2][2] = 0;
71 
72  fTAconsts[0][0] = 0.003;
73  fTAconsts[0][1] = 2.955;
74  fTAconsts[0][2] = 3.620;
75  fTAconsts[1][0] = -0.105;
76  fTAconsts[1][1] = 2.233;
77  fTAconsts[1][2] = 1.328;
78  fTAconsts[2][0] = 0; // Not used anywhere
79  fTAconsts[2][1] = 0;
80  fTAconsts[2][2] = 0;
81 
82  EvtGenReport( EVTGEN_INFO, "EvtGen" )
83  << " EvtRareLbToLll is using form factors from arXiv:1301.3737 "
84  << std::endl;
85 }
86 
87 //=============================================================================
88 
91 {
92  // Find the FF information for this particle, start by setting all to zero
93  FF.areZero();
94 
95  /*
96  if ( ! ( fParents.contains(parent->getId()) &&
97  fDaughters.contains(lambda->getId()) ) )
98  {
99  EvtGenReport(EVTGEN_ERROR,"EvtGen") << " EvtRareLbToLllFFGutsche: Unknown mother and/or daughter. " << std::endl;
100  return;
101  }
102 */
103 
104  double m1 = parent->getP4().mass();
105  double m2 = lambda->getP4().mass();
106  EvtVector4R p4parent;
107  p4parent.set( parent->mass(), 0, 0, 0 );
108  double q2 = ( p4parent - lambda->getP4() ).mass2();
109  double m21 = m2 / m1;
110  double shat = q2 / m1 / m1;
111 
112  double fV[3];
113  double fA[3];
114  for ( int i = 0; i <= 2; ++i ) {
115  fV[i] = formFactorParametrization( shat, fVconsts[i][0], fVconsts[i][1],
116  fVconsts[i][2] );
117  fA[i] = formFactorParametrization( shat, fAconsts[i][0], fAconsts[i][1],
118  fAconsts[i][2] );
119  }
120  double fTV[2];
121  double fTA[2];
122  for ( int i = 0; i <= 1; ++i ) {
123  fTV[i] = formFactorParametrization( shat, fTVconsts[i][0],
124  fTVconsts[i][1], fTVconsts[i][2] );
125  fTA[i] = formFactorParametrization( shat, fTAconsts[i][0],
126  fTAconsts[i][1], fTAconsts[i][2] );
127  }
128 
129  // Both v^2==v'^2==1 by definition
130  FF.F_[0] = fV[0] + fV[1] * ( 1 + m21 );
131  FF.F_[1] = fV[2] - fV[1];
132  FF.F_[2] = -m21 * ( fV[1] + fV[2] );
133 
134  FF.G_[0] = fA[0] - fA[1] * ( 1 - m21 );
135  FF.G_[1] = fA[2] - fA[1];
136  FF.G_[2] = -m21 * ( +fA[1] + fA[2] );
137 
138  FF.FT_[0] = fTV[1] * ( m1 + m2 ) + fTV[0] * ( q2 / m1 );
139  FF.FT_[1] = +fTV[0] * ( m2 - m1 ) - fTV[1] * m1;
140  FF.FT_[2] = m2 * ( fTV[0] - fTV[1] ) - fTV[0] * m21 * m2;
141 
142  FF.GT_[0] = -fTA[1] * ( m1 - m2 ) + fTA[0] * ( q2 / m1 );
143  FF.GT_[1] = -fTA[1] * m1 + fTA[0] * ( m1 + m2 );
144  FF.GT_[2] = -fTA[0] * m2 * m21 - m2 * ( fTA[0] + fTA[1] );
145 
146  return;
147 }
148 
150  double a, double b )
151 {
152  return f0 / ( 1 - a * s + b * s * s );
153 }
double formFactorParametrization(double s, double f0, double a, double b)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
double mass() const
Definition: EvtVector4R.cpp:49
void set(int i, double d)
Definition: EvtVector4R.hh:167
void getFF(EvtParticle *parent, EvtParticle *lambda, EvtRareLbToLllFFBase::FormFactors &FF) override
const EvtVector4R & getP4() const
double lambda(double q, double m1, double m2)
Definition: EvtFlatQ2.cpp:31
double mass() const