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