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