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.
EvtBCTFF.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/EvtBCTFF.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 EvtBCTFF::EvtBCTFF( int idT, int fit )
36 {
37  idTensor = idT;
38  whichfit = fit;
39  MBc = EvtPDL::getMeanMass( EvtPDL::getId( "B_c+" ) );
40  return;
41 }
42 
43 void EvtBCTFF::getscalarff( EvtId, EvtId, double, double, double*, double* )
44 {
45  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
46  << "Not implemented :getscalarff in EvtBCTFF.\n";
47  ::abort();
48 }
49 
50 void EvtBCTFF::getvectorff( EvtId, EvtId, double, double, double*, double*,
51  double*, double* )
52 {
53  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
54  << "Not implemented :getvectorff in EvtBCTFF.\n";
55  ::abort();
56 }
57 
58 void EvtBCTFF::gettensorff( EvtId /*p*/, EvtId /*d*/, double t, double /*mass*/,
59  double* hf, double* kf, double* bpf, double* bmf )
60 {
61  double q2 = t;
62 
63  if ( whichfit == 0 ) {
64  *hf = 0;
65  *kf = 0;
66  *bpf = 0;
67  *bmf = 0;
68  return;
69  }
70 
71  if ( idTensor == EvtPDL::getId( "chi_c2" ).getId() ) { // Bc -> chi_c1
72  if ( whichfit == 3 ) { // FF from Wang et al 10.1103/PhysRevD.79.114018
73  double ratio = q2 / ( MBc * MBc );
74 
75  double hf_0 = 0.022;
76  double hf_c1 = 2.58;
77  double hf_c2 = 0.61;
78 
79  double kf_0 = 1.27;
80  double kf_c1 = 1.61;
81  double kf_c2 = 0.24;
82 
83  double bpf_0 = -0.011;
84  double bpf_c1 = 2.27;
85  double bpf_c2 = 0.46;
86 
87  double bmf_0 = 0.020;
88  double bmf_c1 = 2.48;
89  double bmf_c2 = 0.56;
90 
91  *hf = hf_0 * exp( hf_c1 * ratio + hf_c2 * ratio * ratio );
92  *kf = kf_0 * exp( kf_c1 * ratio + kf_c2 * ratio * ratio );
93  *bpf = bpf_0 * exp( bpf_c1 * ratio + bpf_c2 * ratio * ratio );
94  *bmf = bmf_0 * exp( bmf_c1 * ratio + bmf_c2 * ratio * ratio );
95  return;
96  } else {
97  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
98  << "Must choose 0 (a1f = 1) or 3 (Wang).\n";
99  ::abort();
100  }
101  } else {
102  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
103  << "chi_c2 is the only (pseudo)vector decay implemented in EvtBCTFF.\n";
104  ::abort();
105  }
106 }
107 
108 void EvtBCTFF::getbaryonff( EvtId, EvtId, double, double, double*, double*,
109  double*, double* )
110 {
111  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
112  << "Not implemented :getbaryonff in EvtBCTFF.\n";
113  ::abort();
114 }
115 
116 void EvtBCTFF::getdiracff( EvtId, EvtId, double, double, double*, double*,
117  double*, double*, double*, double* )
118 {
119  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
120  << "Not implemented :getdiracff in EvtBCTFF.\n";
121  ::abort();
122 }
123 
124 void EvtBCTFF::getraritaff( EvtId, EvtId, double, double, double*, double*,
125  double*, double*, double*, double*, double*, double* )
126 {
127  EvtGenReport( EVTGEN_ERROR, "EvtGen" )
128  << "Not implemented :getraritaff in EvtBCTFF.\n";
129  ::abort();
130 }
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
Definition: EvtBCTFF.cpp:108
void gettensorff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
Definition: EvtBCTFF.cpp:58
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f) override
Definition: EvtBCTFF.cpp:50
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
static double getMeanMass(EvtId i)
Definition: EvtPDL.cpp:314
Definition: EvtId.hh:27
void getscalarff(EvtId, EvtId, double, double, double *, double *) override
Definition: EvtBCTFF.cpp:43
static EvtId getId(const std::string &name)
Definition: EvtPDL.cpp:287
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:240
void getraritaff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *, double *, double *) override
Definition: EvtBCTFF.cpp:124
void getdiracff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *) override
Definition: EvtBCTFF.cpp:116
EvtBCTFF(int idV, int fit)
Definition: EvtBCTFF.cpp:35