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
EvtHQET2FF.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 <math.h>
28#include <stdlib.h>
29#include <string>
30
31EvtHQET2FF::EvtHQET2FF( double hqetrho2, double hqetha1_1, double hqetr1_1,
32 double hqetr2_1 )
33{
34 m_rho2 = hqetrho2;
35 m_r1_1 = hqetr1_1;
36 m_r2_1 = hqetr2_1;
37 m_ha1_1 = hqetha1_1;
38 m_extended = false;
39}
40
41EvtHQET2FF::EvtHQET2FF( double hqetrho2, double hqetha1_1, double hqetr1_1,
42 double hqetr2_1, double hqetr0_1 )
43{
44 m_rho2 = hqetrho2;
45 m_r0_1 = hqetr0_1;
46 m_r1_1 = hqetr1_1;
47 m_r2_1 = hqetr2_1;
48 m_ha1_1 = hqetha1_1;
49 m_extended = true;
50}
51
52EvtHQET2FF::EvtHQET2FF( double hqetrho2, double hqetv1_1 )
53{
54 m_rho2 = hqetrho2;
55 m_v1_1 = hqetv1_1;
56 m_extended = false;
57}
58
59EvtHQET2FF::EvtHQET2FF( double hqetrho2, double hqetv1_1, double indelta )
60{
61 m_rho2 = hqetrho2;
62 m_v1_1 = hqetv1_1;
63 m_delta = indelta;
64 m_extended = true;
65}
66
67void EvtHQET2FF::getscalarff( EvtId parent, EvtId, double t, double mass,
68 double* f0p, double* f0m )
69{
70 double mb = EvtPDL::getMeanMass( parent );
71 double w = ( ( mb * mb ) + ( mass * mass ) - t ) / ( 2.0 * mb * mass );
72
73 // Form factors have a general form, with parameters passed in
74 // from the arguements.
75
76 // Use dispersion relation parametrization from
77 // I.Caprini, L.Lelluch, M.Neubert, Nucl. Phys. B 530,153(1998)
78 const double z = ( sqrt( w + 1 ) - sqrt( 2. ) ) /
79 ( sqrt( w + 1 ) + sqrt( 2. ) );
80 double v1 = m_v1_1 * ( 1. - 8. * m_rho2 * z + ( 51. * m_rho2 - 10. ) * z * z -
81 ( 252. * m_rho2 - 84. ) * z * z * z );
82
83 *f0p = v1;
84 *f0m = 0.0;
85
86 if ( m_extended ) {
87 //if in extended mode, use helicity-suppressed FF using the result from
88 //Tanaka and Watanabe, Phys. Rev. D 82 034027 (2010)
89
90 double r = mass / mb;
91 double r1 = r + 1.0;
92 double s1 = v1 * ( 1 + m_delta * ( -0.019 + 0.041 * ( w - 1 ) -
93 0.015 * ( w - 1 ) *
94 ( w - 1 ) ) ); //as in ref
95 *f0m = s1 * ( w + 1.0 ) * 2.0 * r /
96 ( r1 * r1 ); //convert to convention used by EvtGen with proper relative normalization
97 }
98}
99
100void EvtHQET2FF::getvectorff( EvtId parent, EvtId, double t, double mass,
101 double* a1f, double* a2f, double* vf, double* a0f )
102{
103 double mb = EvtPDL::getMeanMass( parent );
104 double w = ( ( mb * mb ) + ( mass * mass ) - t ) / ( 2.0 * mb * mass );
105
106 // Form factors have a general form, with parameters passed in
107 // from the arguements.
108
109 double rstar = ( 2.0 * sqrt( mb * mass ) ) / ( mb + mass );
110
111 // Use dispersion relation parametrization from
112 // I.Caprini, L.Lelluch, M.Neubert, Nucl. Phys. B 530,153(1998)
113 const double z = ( sqrt( w + 1 ) - sqrt( 2. ) ) /
114 ( sqrt( w + 1 ) + sqrt( 2. ) );
115 double ha1 = m_ha1_1 *
116 ( 1. - 8. * m_rho2 * z + ( 53. * m_rho2 - 15. ) * z * z -
117 ( 231. * m_rho2 - 91. ) * z * z * z );
118 double r1 = m_r1_1 - 0.12 * ( w - 1 ) + 0.05 * ( w - 1 ) * ( w - 1 );
119 double r2 = m_r2_1 + 0.11 * ( w - 1 ) - 0.06 * ( w - 1 ) * ( w - 1 );
120
121 *a1f = ( 1.0 - ( t / ( ( mb + mass ) * ( mb + mass ) ) ) ) * ha1;
122 *a1f = ( *a1f ) / rstar;
123 *a2f = ( r2 / rstar ) * ha1;
124 *vf = ( r1 / rstar ) * ha1;
125 *a0f = 0.0;
126
127 if ( m_extended ) {
128 // Here we use the expectation for R_0(w) from
129 // Fajfer et al, Phys. Rev. D 85 094025 (2012)
130
131 double r0 = m_r0_1 - 0.11 * ( w - 1 ) + 0.01 * ( w - 1 ) * ( w - 1 );
132 *a0f = ( r0 / rstar ) * ha1;
133 }
134}
135
136void EvtHQET2FF::gettensorff( EvtId, EvtId, double, double, double*, double*,
137 double*, double* )
138{
139 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
140 << "Not implemented :gettensorff in EvtHQET2FF.\n";
141 ::abort();
142}
143
144void EvtHQET2FF::getbaryonff( EvtId, EvtId, double, double, double*, double*,
145 double*, double* )
146{
147 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
148 << "Not implemented :getbaryonff in EvtHQET2FF.\n";
149 ::abort();
150}
151
152void EvtHQET2FF::getdiracff( EvtId, EvtId, double, double, double*, double*,
153 double*, double*, double*, double* )
154{
155 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
156 << "Not implemented :getdiracff in EvtHQET2FF.\n";
157 ::abort();
158}
159
160void EvtHQET2FF::getraritaff( EvtId, EvtId, double, double, double*, double*,
161 double*, double*, double*, double*, double*,
162 double* )
163{
164 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
165 << "Not implemented :getraritaff in EvtHQET2FF.\n";
166 ::abort();
167}
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_ERROR
Definition EvtReport.hh:49
bool m_extended
Definition EvtHQET2FF.hh:63
double m_r0_1
Definition EvtHQET2FF.hh:61
void gettensorff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
double m_rho2
Definition EvtHQET2FF.hh:57
void getdiracff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *) override
EvtHQET2FF(double hqetrho2, double hqetha1_1, double hqetr1_1, double hqetr2_1)
double m_r2_1
Definition EvtHQET2FF.hh:58
double m_ha1_1
Definition EvtHQET2FF.hh:59
void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *f0p, double *f0m) override
double m_r1_1
Definition EvtHQET2FF.hh:56
double m_delta
Definition EvtHQET2FF.hh:62
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 getraritaff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *, double *, double *) override
double m_v1_1
Definition EvtHQET2FF.hh:60
Definition EvtId.hh:27
static double getMeanMass(EvtId i)
Definition EvtPDL.cpp:306