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.
EvtLb2plnuLQCDFF.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 EvtLb2plnuLQCDFF::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 LQCD predictions
48  // Predictions taken from W. Detmold, C-J. Lin, S. Meinel and M.Wingate, arXiv:1306.0446 (2013)
49 
50  double MLamB = EvtPDL::getMass( parent );
51  double MPro = EvtPDL::getMass( daught );
52  double Y1 = 2.97;
53  double X1 = 1.36;
54  double Y2 = -0.28;
55  double X2 = 0.81;
56  double EnMn = ( MLamB * MLamB + MPro * MPro - q2 ) / ( 2.0 * MLamB ) -
57  MPro;
58  double F1 = Y1 / ( ( X1 + EnMn ) * ( X1 + EnMn ) );
59  double F2 = Y2 / ( ( X2 + EnMn ) * ( X2 + EnMn ) );
60  double pi = atan( 1.0 ) * 4.0;
61  double alphas = 0.214;
62  double cv = 2.0 / 3.0 * alphas / pi;
63  double cgam = 1.0 - ( alphas / pi ) * ( 4.0 / 3.0 );
64 
65  *f1 = cgam * ( F1 - F2 );
66  *f2 = cv * F1 + ( 2.0 * cgam + cv ) * F2;
67  *f3 = 0.0;
68  *g1 = cgam * ( F1 + F2 );
69  *g2 = -cv * F1 + ( 2.0 * cgam + cv ) * F2;
70  *g3 = 0.0;
71 
72  } else {
73  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
74  << "Only Lb -> p transitions allowed in EvtLb2plnuLQCDFF.\n";
75  ::abort();
76  }
77 
78  return;
79 }
80 
81 void EvtLb2plnuLQCDFF::getraritaff( EvtId, EvtId, double, double, double*,
82  double*, double*, double*, double*, double*,
83  double*, double* )
84 {
85  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
86  << "Not implemented :getraritaff in EvtLb2plnuLQCDFF.\n";
87  ::abort();
88 }
89 
90 void EvtLb2plnuLQCDFF::getscalarff( EvtId, EvtId, double, double, double*,
91  double* )
92 {
93  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
94  << "Not implemented :getscalarff in EvtLb2plnuLQCDFF.\n";
95  ::abort();
96 }
97 
98 void EvtLb2plnuLQCDFF::getvectorff( EvtId, EvtId, double, double, double*,
99  double*, double*, double* )
100 {
101  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
102  << "Not implemented :getvectorff in EvtLb2plnuLQCDFF.\n";
103  ::abort();
104 }
105 
106 void EvtLb2plnuLQCDFF::gettensorff( EvtId, EvtId, double, double, double*,
107  double*, double*, double* )
108 {
109  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
110  << "Not implemented :gettensorff in EvtLb2plnuLQCDFF.\n";
111  ::abort();
112 }
113 
114 void EvtLb2plnuLQCDFF::getbaryonff( EvtId, EvtId, double, double, double*,
115  double*, double*, double* )
116 {
117  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
118  << "Not implemented :getbaryonff in EvtLb2plnuLQCDFF.\n";
119  ::abort();
120 }
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *) 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 getscalarff(EvtId parent, EvtId daught, double t, double mass, double *fpf, double *f0f) override
Definition: EvtId.hh:27
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f) override
const float pi
Definition: EvtBBScalar.cpp:33
static EvtId getId(const std::string &name)
Definition: EvtPDL.cpp:287
void gettensorff(EvtId parent, EvtId daught, double t, double mass, double *hf, double *kf, double *bpf, double *bmf) override
static double getMass(EvtId i)
Definition: EvtPDL.cpp:319
void getdiracff(EvtId parent, EvtId daught, double q2, double mass, double *f1, double *f2, double *f3, double *g1, double *g2, double *g3) override