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.
EvtLb2plnuLCSRFF.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/EvtId.hh"
25 #include "EvtGenBase/EvtIdSet.hh"
26 #include "EvtGenBase/EvtPDL.hh"
27 #include "EvtGenBase/EvtPatches.hh"
28 #include "EvtGenBase/EvtReport.hh"
29 
30 #include <math.h>
31 #include <stdlib.h>
32 #include <string>
33 using std::endl;
34 
35 void EvtLb2plnuLCSRFF::getdiracff( EvtId parent, EvtId daught, double q2,
36  double /* mass */, double* f1, double* f2,
37  double* f3, double* g1, double* g2, double* g3 )
38 {
39  // Define Event IDs for Lb and p
40  static EvtId LAMB = EvtPDL::getId( "Lambda_b0" );
41  static EvtId LAMBB = EvtPDL::getId( "anti-Lambda_b0" );
42  static EvtId PRO = EvtPDL::getId( "p+" );
43  static EvtId PROB = EvtPDL::getId( "anti-p-" );
44 
45  if ( ( parent == LAMB && daught == PRO ) ||
46  ( parent == LAMBB && daught == PROB ) ) {
47  // Calculate Lb->p form factors based on LCSR predictions
48  // Predictions taken from A. Khodjamirian, C. Klein, T. Mannel and Y.-M. Wang, arXiv.1108.2971 (2011)
49 
50  double MLamB = EvtPDL::getMass( parent );
51  double MPro = EvtPDL::getMass( daught );
52 
53  double tplus = ( MLamB + MPro ) * ( MLamB + MPro );
54  double tminus = ( MLamB - MPro ) * ( MLamB - MPro );
55  double t0 = tplus - sqrt( tplus - tminus ) * sqrt( tplus + 6 );
56  double z = ( sqrt( tplus - q2 ) - sqrt( tplus - t0 ) ) /
57  ( sqrt( tplus - q2 ) + sqrt( tplus - t0 ) );
58  double z0 = ( sqrt( tplus ) - sqrt( tplus - t0 ) ) /
59  ( sqrt( tplus ) + sqrt( tplus - t0 ) );
60 
61  // FF parameters
62  double f10 = 0.14;
63  double bf1 = -1.49;
64  double f20 = -0.054;
65  double bf2 = -14.0;
66  double g10 = 0.14;
67  double bg1 = -4.05;
68  double g20 = -0.028;
69  double bg2 = -20.2;
70 
71  //FF paramterisation
72  double F1 = ( f10 / ( 1.0 - q2 / ( 5.325 * 5.325 ) ) ) *
73  ( 1.0 + bf1 * ( z - z0 ) );
74  double F2 = ( f20 / ( 1.0 - q2 / ( 5.325 * 5.325 ) ) ) *
75  ( 1.0 + bf2 * ( z - z0 ) );
76  double G1 = ( g10 / ( 1.0 - q2 / ( 5.723 * 5.723 ) ) ) *
77  ( 1.0 + bg1 * ( z - z0 ) );
78  double G2 = ( g20 / ( 1.0 - q2 / ( 5.723 * 5.723 ) ) ) *
79  ( 1.0 + bg2 * ( z - z0 ) );
80 
81  *f1 = F1 - ( MLamB + MPro ) * F2 / MLamB;
82  *f2 = F2;
83  *f3 = MPro * ( F2 ) / MLamB;
84  *g1 = G1 - ( MLamB - MPro ) * G2 / MLamB;
85  *g2 = -G2;
86  *g3 = -MPro * G2 / MLamB;
87 
88  } else {
89  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
90  << "Only Lb -> p transitions allowed in EvtLb2plnuLCSRFF.\n";
91  ::abort();
92  }
93 
94  return;
95 }
96 
97 void EvtLb2plnuLCSRFF::getraritaff( EvtId, EvtId, double, double, double*,
98  double*, double*, double*, double*, double*,
99  double*, double* )
100 {
101  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
102  << "Not implemented :getraritaff in EvtLb2plnuLCSRFF.\n";
103  ::abort();
104 }
105 
106 void EvtLb2plnuLCSRFF::getscalarff( EvtId, EvtId, double, double, double*,
107  double* )
108 {
109  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
110  << "Not implemented :getscalarff in EvtLb2plnuLCSRFF.\n";
111  ::abort();
112 }
113 
114 void EvtLb2plnuLCSRFF::getvectorff( EvtId, EvtId, double, double, double*,
115  double*, double*, double* )
116 {
117  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
118  << "Not implemented :getvectorff in EvtLb2plnuLCSRFF.\n";
119  ::abort();
120 }
121 
122 void EvtLb2plnuLCSRFF::gettensorff( EvtId, EvtId, double, double, double*,
123  double*, double*, double* )
124 {
125  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
126  << "Not implemented :gettensorff in EvtLb2plnuLCSRFF.\n";
127  ::abort();
128 }
129 
130 void EvtLb2plnuLCSRFF::getbaryonff( EvtId, EvtId, double, double, double*,
131  double*, double*, double* )
132 {
133  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
134  << "Not implemented :getbaryonff in EvtLb2plnuLCSRFF.\n";
135  ::abort();
136 }
void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *fpf, double *f0f) override
void getraritaff(EvtId parent, EvtId daught, double q2, double mass, double *f1, double *f2, double *f3, double *f4, double *g1, double *g2, double *g3, double *g4) override
void getdiracff(EvtId parent, EvtId daught, double q2, double mass, double *f1, double *f2, double *f3, double *g1, double *g2, double *g3) override
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
void gettensorff(EvtId parent, EvtId daught, double t, double mass, double *hf, double *kf, double *bpf, double *bmf) override
Definition: EvtId.hh:27
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f) override
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
static EvtId getId(const std::string &name)
Definition: EvtPDL.cpp:287
static double getMass(EvtId i)
Definition: EvtPDL.cpp:319