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.
EvtBCSFF.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 
21 #include "EvtGenModels/EvtBCSFF.hh"
22 
23 #include "EvtGenBase/EvtId.hh"
24 #include "EvtGenBase/EvtPDL.hh"
25 #include "EvtGenBase/EvtPatches.hh"
26 #include "EvtGenBase/EvtReport.hh"
27 
28 #include <iostream>
29 #include <math.h>
30 #include <stdlib.h>
31 #include <string>
32 
33 using namespace std;
34 
35 EvtBCSFF::EvtBCSFF( int idS, int fit )
36 {
37  idScalar = idS;
38  whichfit = fit;
39  MBc = EvtPDL::getMeanMass( EvtPDL::getId( "B_c+" ) );
40  MD0 = EvtPDL::getMeanMass( EvtPDL::getId( "D0" ) );
41  return;
42 }
43 
44 void EvtBCSFF::getscalarff( EvtId /*p*/, EvtId /*d*/, double t, double /*mass*/,
45  double* fpf, double* f0f )
46 {
47  double q2 = t;
48 
49  if ( whichfit == 0 ) {
50  *fpf = 1;
51  *f0f = 0;
52  return;
53  }
54 
55  if ( idScalar == EvtPDL::getId( "chi_c0" ).getId() ) { // Bc -> chi_c0
56  if ( whichfit == 3 ) { // FF from Wang et al 10.1103/PhysRevD.79.114018
57  double ratio = q2 / ( MBc * MBc );
58 
59  double fpf_0 = 0.47;
60  double fpf_c1 = 2.03;
61  double fpf_c2 = 0.43;
62 
63  double f0f_0 = 0.47;
64  double f0f_c1 = -0.45;
65  double f0f_c2 = -1.31;
66 
67  *fpf = fpf_0 * exp( fpf_c1 * ratio + fpf_c2 * ratio * ratio );
68  *f0f = f0f_0 * exp( f0f_c1 * ratio + f0f_c2 * ratio * ratio );
69  return;
70 
71  } else {
72  EvtGenReport( EVTGEN_ERROR, "EvtBCSFF" )
73  << "Must choose 0 (fpf = 1) or 3 (Wang).\n";
74  ::abort();
75  }
76  } else if ( idScalar == EvtPDL::getId( "D0" ).getId() ||
77  idScalar == EvtPDL::getId( "anti-D0" ).getId() ) { // Bc -> D0
78  if ( whichfit == 1 ) { // FF from Kiselev:2002vz, tables III, IV
79  double q2invmass = q2 / ( MBc * MBc - MD0 * MD0 );
80  double den = 1 - q2 / ( 5.0 * 5.0 );
81  if ( fabs( den ) < 1e-10 ) {
82  *fpf = 0;
83  *f0f = 0;
84  } else {
85  double fPlus = 0.32 / den;
86  double fMinus = -0.34 / den;
87  *fpf = fPlus;
88  *f0f = q2invmass * fMinus + fPlus;
89  }
90  } else if ( whichfit == 2 ) { // FF from Ebert:2003cn, Fig 9
91  double ratio = q2 / MBc / MBc;
92  double const fPlus_0 = 0.143, fPlus_a = 0.7, fPlus_b = 2.13;
93  double const f0_0 = 0.136, f0_a = 1.63, f0_b = -0.139;
94  *fpf = fPlus_0 / ( 1 - fPlus_a * ratio - fPlus_b * ratio * ratio );
95  *f0f = f0_0 / ( 1 - f0_a * ratio - f0_b * ratio * ratio );
96  return;
97  } else {
98  EvtGenReport( EVTGEN_ERROR, "EvtBCSFF" )
99  << "Should choose 1 (Kiselev:2002vz) or 2 (Ebert:2003cn).\n";
100  }
101  } else {
102  EvtGenReport( EVTGEN_ERROR, "EvtBCSFF" )
103  << "Only chi_c0 and D0/anti-D0 implemented.\n";
104  ::abort();
105  }
106 }
107 
108 void EvtBCSFF::getvectorff( EvtId, EvtId, double, double, double*, double*,
109  double*, double* )
110 {
111  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
112  << "Not implemented :getvectorff in EvtBCSFF.\n";
113  ::abort();
114 }
115 
116 void EvtBCSFF::gettensorff( EvtId /*p*/, EvtId /*d*/, double /*t*/,
117  double /*mass*/, double*, double*, double*, double* )
118 {
119  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
120  << "Not implemented :gettensorff in EvtBCSFF.\n";
121  ::abort();
122 }
123 
124 void EvtBCSFF::getbaryonff( EvtId, EvtId, double, double, double*, double*,
125  double*, double* )
126 {
127  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
128  << "Not implemented :getbaryonff in EvtBCSFF.\n";
129  ::abort();
130 }
131 
132 void EvtBCSFF::getdiracff( EvtId, EvtId, double, double, double*, double*,
133  double*, double*, double*, double* )
134 {
135  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
136  << "Not implemented :getdiracff in EvtBCSFF.\n";
137  ::abort();
138 }
139 
140 void EvtBCSFF::getraritaff( EvtId, EvtId, double, double, double*, double*,
141  double*, double*, double*, double*, double*, double* )
142 {
143  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
144  << "Not implemented :getraritaff in EvtBCSFF.\n";
145  ::abort();
146 }
void gettensorff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
Definition: EvtBCSFF.cpp:116
void getdiracff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *) override
Definition: EvtBCSFF.cpp:132
EvtBCSFF(int idV, int fit)
Definition: EvtBCSFF.cpp:35
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
void getscalarff(EvtId, EvtId, double, double, double *, double *) override
Definition: EvtBCSFF.cpp:44
static double getMeanMass(EvtId i)
Definition: EvtPDL.cpp:314
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f) override
Definition: EvtBCSFF.cpp:108
Definition: EvtId.hh:27
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
Definition: EvtBCSFF.cpp:124
static EvtId getId(const std::string &name)
Definition: EvtPDL.cpp:287
void getraritaff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *, double *, double *) override
Definition: EvtBCSFF.cpp:140
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:240