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.
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"
25 #include "EvtGenBase/EvtPatches.hh"
26 #include "EvtGenBase/EvtReport.hh"
27 
28 #include <math.h>
29 #include <stdlib.h>
30 #include <string>
31 
32 EvtHQET2FF::EvtHQET2FF( double hqetrho2, double hqetha1_1, double hqetr1_1,
33  double hqetr2_1 )
34 {
35  rho2 = hqetrho2;
36  r1_1 = hqetr1_1;
37  r2_1 = hqetr2_1;
38  ha1_1 = hqetha1_1;
39  extended = false;
40 }
41 
42 EvtHQET2FF::EvtHQET2FF( double hqetrho2, double hqetha1_1, double hqetr1_1,
43  double hqetr2_1, double hqetr0_1 )
44 {
45  rho2 = hqetrho2;
46  r0_1 = hqetr0_1;
47  r1_1 = hqetr1_1;
48  r2_1 = hqetr2_1;
49  ha1_1 = hqetha1_1;
50  extended = true;
51 }
52 
53 EvtHQET2FF::EvtHQET2FF( double hqetrho2, double hqetv1_1 )
54 {
55  rho2 = hqetrho2;
56  v1_1 = hqetv1_1;
57  extended = false;
58 }
59 
60 EvtHQET2FF::EvtHQET2FF( double hqetrho2, double hqetv1_1, double indelta )
61 {
62  rho2 = hqetrho2;
63  v1_1 = hqetv1_1;
64  delta = indelta;
65  extended = true;
66 }
67 
68 void EvtHQET2FF::getscalarff( EvtId parent, EvtId, double t, double mass,
69  double* f0p, double* f0m )
70 {
71  double mb = EvtPDL::getMeanMass( parent );
72  double w = ( ( mb * mb ) + ( mass * mass ) - t ) / ( 2.0 * mb * mass );
73 
74  // Form factors have a general form, with parameters passed in
75  // from the arguements.
76 
77  // Use dispersion relation parametrization from
78  // I.Caprini, L.Lelluch, M.Neubert, Nucl. Phys. B 530,153(1998)
79  const double z = ( sqrt( w + 1 ) - sqrt( 2. ) ) /
80  ( sqrt( w + 1 ) + sqrt( 2. ) );
81  double v1 = v1_1 * ( 1. - 8. * rho2 * z + ( 51. * rho2 - 10. ) * z * z -
82  ( 252. * rho2 - 84. ) * z * z * z );
83 
84  *f0p = v1;
85  *f0m = 0.0;
86 
87  if ( extended ) {
88  //if in extended mode, use helicity-suppressed FF using the result from
89  //Tanaka and Watanabe, Phys. Rev. D 82 034027 (2010)
90 
91  double r = mass / mb;
92  double r1 = r + 1.0;
93  double s1 = v1 * ( 1 + delta * ( -0.019 + 0.041 * ( w - 1 ) -
94  0.015 * ( w - 1 ) *
95  ( w - 1 ) ) ); //as in ref
96  *f0m = s1 * ( w + 1.0 ) * 2.0 * r /
97  ( r1 * r1 ); //convert to convention used by EvtGen with proper relative normalization
98  }
99 }
100 
101 void EvtHQET2FF::getvectorff( EvtId parent, EvtId, double t, double mass,
102  double* a1f, double* a2f, double* vf, double* a0f )
103 {
104  double mb = EvtPDL::getMeanMass( parent );
105  double w = ( ( mb * mb ) + ( mass * mass ) - t ) / ( 2.0 * mb * mass );
106 
107  // Form factors have a general form, with parameters passed in
108  // from the arguements.
109 
110  double rstar = ( 2.0 * sqrt( mb * mass ) ) / ( mb + mass );
111 
112  // Use dispersion relation parametrization from
113  // I.Caprini, L.Lelluch, M.Neubert, Nucl. Phys. B 530,153(1998)
114  const double z = ( sqrt( w + 1 ) - sqrt( 2. ) ) /
115  ( sqrt( w + 1 ) + sqrt( 2. ) );
116  double ha1 = ha1_1 * ( 1. - 8. * rho2 * z + ( 53. * rho2 - 15. ) * z * z -
117  ( 231. * rho2 - 91. ) * z * z * z );
118  double r1 = r1_1 - 0.12 * ( w - 1 ) + 0.05 * ( w - 1 ) * ( w - 1 );
119  double r2 = 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 ( 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 = r0_1 - 0.11 * ( w - 1 ) + 0.01 * ( w - 1 ) * ( w - 1 );
132  *a0f = ( r0 / rstar ) * ha1;
133  }
134 }
135 
136 void 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 
144 void 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 
152 void 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 
160 void 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 }
double r2_1
Definition: EvtHQET2FF.hh:58
double ha1_1
Definition: EvtHQET2FF.hh:59
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
static double getMeanMass(EvtId i)
Definition: EvtPDL.cpp:314
double v1_1
Definition: EvtHQET2FF.hh:60
void gettensorff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
Definition: EvtHQET2FF.cpp:136
void getraritaff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *, double *, double *) override
Definition: EvtHQET2FF.cpp:160
Definition: EvtId.hh:27
double r1_1
Definition: EvtHQET2FF.hh:56
void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *f0p, double *f0m) override
Definition: EvtHQET2FF.cpp:68
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
Definition: EvtHQET2FF.cpp:144
void getdiracff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *) override
Definition: EvtHQET2FF.cpp:152
double rho2
Definition: EvtHQET2FF.hh:57
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f) override
Definition: EvtHQET2FF.cpp:101
bool extended
Definition: EvtHQET2FF.hh:63
double delta
Definition: EvtHQET2FF.hh:62
EvtHQET2FF(double hqetrho2, double hqetha1_1, double hqetr1_1, double hqetr2_1)
Definition: EvtHQET2FF.cpp:32
double r0_1
Definition: EvtHQET2FF.hh:61