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
EvtSLBKPoleFF.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/EvtSLBKPoleFF.hh" //modified
22
23#include "EvtGenBase/EvtPDL.hh"
25
26#include <math.h>
27#include <stdlib.h>
28#include <string>
29
30EvtSLBKPoleFF::EvtSLBKPoleFF( int numarg, double* arglist )
31{ //modified
32 m_numSLBKPoleargs = numarg; //modified
33 for ( int i = 0; i < numarg; i++ ) {
34 m_SLBKPoleargs[i] = arglist[i];
35 } //modified
36
37 return;
38}
39
40void EvtSLBKPoleFF::getscalarff( EvtId parent, EvtId daught, double t,
41 double /*mass*/, double* fpf, double* f0f )
42{
43 // Form factors have a general form, with parameters passed in
44 // from the arguments.
45
46 if ( m_numSLBKPoleargs != 4 ) { //modified
47 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
48 << "Problem in EvtSLBKPoleFF::getscalarff\n";
49 EvtGenReport( EVTGEN_ERROR, "EvtGen" ) << "wrong number of arguments!\n";
50 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
51 << "number args:" << m_numSLBKPoleargs << " (expected 4)\n";
52 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
53 << "Parent:" << EvtPDL::name( parent ) << "\n";
54 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
55 << "Daughter:" << EvtPDL::name( daught ) << "\n";
56 }
57
58 double f0 = m_SLBKPoleargs[0]; //f0
59 double af = m_SLBKPoleargs[1]; //alpha
60
61 double mass_star2 = m_SLBKPoleargs[3] * m_SLBKPoleargs[3];
62 double powf = 1.0;
63 *fpf = f0 / ( pow( 1.0 - ( 1.0 + af ) * ( t / mass_star2 ) +
64 ( af * ( ( t / mass_star2 ) * ( t / mass_star2 ) ) ),
65 powf ) ); //modified
66
67 f0 = m_SLBKPoleargs[0]; //f0
68 af = m_SLBKPoleargs[2]; //beta
69
70 powf = 1.0;
71
72 *f0f = f0 / ( pow( 1.0 - ( t / mass_star2 / af ), powf ) ); //modified
73
74 return;
75}
76
77void EvtSLBKPoleFF::getvectorff( EvtId parent, EvtId /*daught*/, double t,
78 double /*mass*/, double* a1f, double* a2f,
79 double* vf, double* a0f )
80{
81 if ( m_numSLBKPoleargs != 8 ) { //modified
82 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
83 << "Problem in EvtSLBKPoleFF::getvectorff\n"; //modified
84 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
85 << "wrong number of arguements!!!\n";
86 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
87 << m_numSLBKPoleargs << "\n"; //modified
88 }
89
90 EvtGenReport( EVTGEN_INFO, "EvtGen" )
91 << "Check the implementation of EvtSLBKPoleFF::getvectorff()!\n";
92
93 double mb = EvtPDL::getMeanMass( parent );
94 double mb2 = mb * mb;
95
96 //modified-begin
97 static const EvtId B0 = EvtPDL::getId( "B0" );
98 static const EvtId B0B = EvtPDL::getId( "anti-B0" );
99 static const EvtId BP = EvtPDL::getId( "B+" );
100 static const EvtId BM = EvtPDL::getId( "B-" );
101 static const EvtId BS0 = EvtPDL::getId( "B_s0" );
102
103 static const EvtId B0S = EvtPDL::getId( "B*0" );
104 static const EvtId BPMS = EvtPDL::getId( "B*+" );
105 static const EvtId BS0S = EvtPDL::getId( "B_s*0" );
106
107 static const EvtId D0 = EvtPDL::getId( "D0" );
108 static const EvtId D0B = EvtPDL::getId( "anti-D0" );
109 static const EvtId DP = EvtPDL::getId( "D+" );
110 static const EvtId DM = EvtPDL::getId( "D-" );
111 static const EvtId DSP = EvtPDL::getId( "D_s+" );
112 static const EvtId DSM = EvtPDL::getId( "D_s-" );
113
114 static const EvtId D0S = EvtPDL::getId( "D*0" );
115 static const EvtId DPMS = EvtPDL::getId( "D*+" );
116 static const EvtId DSPMS = EvtPDL::getId( "D_s*+" );
117
118 double mass_star = 0.0;
119 double mass_star2 = 0.0;
120 if ( parent == B0 || parent == B0B ) {
121 mass_star = EvtPDL::getMeanMass( B0S );
122 mass_star2 = mass_star * mass_star;
123 }
124 if ( parent == BP || parent == BM ) {
125 mass_star = EvtPDL::getMeanMass( BPMS );
126 mass_star2 = mass_star * mass_star;
127 }
128 if ( parent == BS0 ) {
129 mass_star = EvtPDL::getMeanMass( BS0S );
130 mass_star2 = mass_star * mass_star;
131 }
132
133 if ( parent == D0 || parent == D0B ) {
134 mass_star = EvtPDL::getMeanMass( D0S );
135 mass_star2 = mass_star * mass_star;
136 }
137 if ( parent == DP || parent == DM ) {
138 mass_star = EvtPDL::getMeanMass( DPMS );
139 mass_star2 = mass_star * mass_star;
140 }
141 if ( parent == DSP || parent == DSM ) {
142 mass_star = EvtPDL::getMeanMass( DSPMS );
143 mass_star2 = mass_star * mass_star;
144 }
145 //modified-end
146
147 double f0 = m_SLBKPoleargs[2]; //A1
148 double af = m_SLBKPoleargs[6]; //b'
149 double bf = 0; //0
150 double powf = 1.0; //1.0
151 *a1f = f0 / ( pow( 1.0 - af * t / mass_star2, powf ) ); //modified
152
153 f0 = m_SLBKPoleargs[3]; //A2
154 af = m_SLBKPoleargs[6]; //b'
155 bf = m_SLBKPoleargs[7]; //b''==0
156 powf = 1.0; //1.0
157
158 *a2f = f0 /
159 ( pow( 1.0 - ( af + bf ) * ( t / mass_star2 ) +
160 ( af * bf ) * ( ( t / mass_star2 ) * ( t / mass_star2 ) ),
161 powf ) ); //modified
162
163 f0 = m_SLBKPoleargs[0]; //V0
164 af = m_SLBKPoleargs[4]; //a
165 bf = 0; //0
166 powf = 1.0; //1.0
167
168 *vf = f0 / ( pow( 1.0 - ( 1.0 + af ) * ( t / mass_star2 ) +
169 af * ( t / mass_star2 ) * ( t / mass_star2 ),
170 powf ) ); //modified
171
172 f0 = m_SLBKPoleargs[1]; //A0
173 af = m_SLBKPoleargs[5]; //a'
174 bf = 0; //0
175 powf = 1.0; //1.0
176
177 *a0f = f0 / ( pow( 1.0 - ( 1.0 + af ) * ( t / mb2 ) +
178 af * ( ( t / mb2 ) * ( t / mb2 ) ),
179 powf ) ); //modified
180 return;
181}
182
183void EvtSLBKPoleFF::gettensorff( EvtId parent, EvtId /*daught*/, double t,
184 double /*mass*/, double* hf, double* kf,
185 double* bpf, double* bmf )
186{
187 if ( m_numSLBKPoleargs != 16 ) {
188 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
189 << "Problem in EvtSLBKPoleFF::gettensorff\n";
190 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
191 << "wrong number of arguements!!!\n";
192 }
193
194 EvtGenReport( EVTGEN_INFO, "EvtGen" )
195 << "Check the implementation of EvtSLBKPoleFF::gettensorff()!\n";
196
197 double mb = EvtPDL::getMeanMass( parent );
198 double mb2 = mb * mb;
199
200 double f0 = m_SLBKPoleargs[0];
201 double af = m_SLBKPoleargs[1];
202 double bf = m_SLBKPoleargs[2];
203 double powf = m_SLBKPoleargs[3];
204 *hf = f0 /
205 ( pow( 1.0 + ( af * t / mb2 ) + ( bf * ( ( t / mb2 ) * ( t / mb2 ) ) ),
206 powf ) );
207
208 f0 = m_SLBKPoleargs[4];
209 af = m_SLBKPoleargs[5];
210 bf = m_SLBKPoleargs[6];
211 powf = m_SLBKPoleargs[7];
212
213 *kf = f0 /
214 ( pow( 1.0 + ( af * t / mb2 ) + ( bf * ( ( t / mb2 ) * ( t / mb2 ) ) ),
215 powf ) );
216
217 f0 = m_SLBKPoleargs[8];
218 af = m_SLBKPoleargs[9];
219 bf = m_SLBKPoleargs[10];
220 powf = m_SLBKPoleargs[11];
221
222 *bpf = f0 /
223 ( pow( 1.0 + ( af * t / mb2 ) + ( bf * ( ( t / mb2 ) * ( t / mb2 ) ) ),
224 powf ) );
225
226 f0 = m_SLBKPoleargs[12];
227 af = m_SLBKPoleargs[13];
228 bf = m_SLBKPoleargs[14];
229 powf = m_SLBKPoleargs[15];
230
231 *bmf = f0 /
232 ( pow( 1.0 + ( af * t / mb2 ) + ( bf * ( ( t / mb2 ) * ( t / mb2 ) ) ),
233 powf ) );
234 return;
235}
236
237void EvtSLBKPoleFF::getbaryonff( EvtId, EvtId, double, double, double*, double*,
238 double*, double* )
239{
240 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
241 << "Not implemented :getbaryonff in EvtSLBKPoleFF.\n";
242 ::abort();
243}
244
245void EvtSLBKPoleFF::getdiracff( EvtId, EvtId, double, double, double*, double*,
246 double*, double*, double*, double* )
247{
248 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
249 << "Not implemented :getdiracff in EvtSLBKPoleFF.\n";
250 ::abort();
251}
252
253void EvtSLBKPoleFF::getraritaff( EvtId, EvtId, double, double, double*, double*,
254 double*, double*, double*, double*, double*,
255 double* )
256{
257 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
258 << "Not implemented :getraritaff in EvtSLBKPoleFF.\n";
259 ::abort();
260}
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_INFO
Definition EvtReport.hh:52
@ EVTGEN_ERROR
Definition EvtReport.hh:49
Definition EvtId.hh:27
static std::string name(EvtId i)
Definition EvtPDL.cpp:376
static double getMeanMass(EvtId i)
Definition EvtPDL.cpp:306
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283
void getraritaff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *, double *, double *) override
void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *fpf, double *f0f) override
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f) override
EvtSLBKPoleFF(int numarg, double *arglist)
double m_SLBKPoleargs[16]
void gettensorff(EvtId parent, EvtId daught, double t, double mass, double *hf, double *kf, double *bp, double *bm) override
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
void getdiracff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *) override