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
EvtBaryonPCRFF.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
24#include "EvtGenBase/EvtId.hh"
26#include "EvtGenBase/EvtPDL.hh"
28
29#include <math.h>
30#include <stdlib.h>
31#include <string>
32using std::endl;
33
34void EvtBaryonPCRFF::getdiracff( EvtId parent, EvtId daught, double q2,
35 double /* mass */, double* f1, double* f2,
36 double* f3, double* g1, double* g2, double* g3 )
37{
38 // Baryons (partial list 5/28/04)
39 static const EvtId LAMCP = EvtPDL::getId( "Lambda_c+" );
40 static const EvtId LAMCM = EvtPDL::getId( "anti-Lambda_c-" );
41 static const EvtId LAMC1P = EvtPDL::getId( "Lambda_c(2593)+" );
42 static const EvtId LAMC1M = EvtPDL::getId( "anti-Lambda_c(2593)-" );
43 static const EvtId LAMB = EvtPDL::getId( "Lambda_b0" );
44 static const EvtId LAMBB = EvtPDL::getId( "anti-Lambda_b0" );
45
46 double F1, F2, F3, G1, G2, G3;
47
48 if ( parent == LAMB || parent == LAMBB ) {
49 // Implement constituent quark model form factors predicted
50 // by M. Pervin, W. Roberst, and S. Capstick, Phys. Rev. C72, 035201 (2005)
51
52 if ( daught == LAMCP || daught == LAMCM ) {
53 // Parameters needed in the calculation;
54 double mQ = 5.28;
55 double mq = 1.89;
56 double md = 0.40;
57 double MLamB = EvtPDL::getMass( parent );
58 double MLamC = EvtPDL::getMass( daught );
59
60 double aL = 0.59;
61 double aLp = 0.55;
62
63 double aL2 = aL * aL;
64 double aLp2 = aLp * aLp;
65 double aLLp2 = 0.5 * ( aL2 + aLp2 );
66
67 // relativistic correction factor
68 double k2 = 1.0;
69 double rho2 = 3. * md * md / ( 2. * k2 * aLLp2 );
70
71 // w = scalar product of the 4 velocities of the Lb and Lc.
72 double w = 0.5 * ( MLamB * MLamB + MLamC * MLamC - q2 ) / MLamB /
73 MLamC;
74
75 double I = pow( aL * aLp / aLLp2, 1.5 ) *
76 exp( -rho2 * ( w * w - 1. ) );
77
78 // Calculate the form factors
79 F1 = I * ( 1.0 + ( md / aLLp2 ) * ( ( aLp2 / mq ) + ( aL2 / mQ ) ) );
80 F2 = -I * ( ( md / mq ) * ( aLp2 / aLLp2 ) -
81 aL2 * aLp2 / ( 4. * aLLp2 * mq * mQ ) );
82 F3 = -I * md * aL2 / ( mQ * aLLp2 );
83
84 G1 = I * ( 1.0 - ( aL2 * aLp2 ) / ( 12. * aLLp2 * mq * mQ ) );
85 G2 = -I * ( md * aLp2 / ( mq * aLLp2 ) +
86 ( aL2 * aLp2 ) / ( 12. * aLLp2 * mq * mQ ) *
87 ( 1. + 12. * md * md / aLLp2 ) );
88 G3 = I * ( md * aL2 / ( mQ * aLLp2 ) +
89 md * md * aL2 * aLp2 / ( mq * mQ * aLLp2 * aLLp2 ) );
90
91 // Set form factors to be passed to the amplitude calc.
92 *f1 = F1;
93 *f2 = F2;
94 *f3 = F3;
95 *g1 = G1;
96 *g2 = G2;
97 *g3 = G3;
98
99 }
100
101 else if ( daught == LAMC1P || daught == LAMC1M ) {
102 double mQ = 5.28;
103 double mq = 1.89;
104 double md = 0.40;
105 double MLamB = EvtPDL::getMass( parent );
106 double MLamC = EvtPDL::getMass( daught );
107
108 double aL = 0.59;
109 double aLp = 0.47;
110
111 double aL2 = aL * aL;
112 double aLp2 = aLp * aLp;
113 double aLLp2 = 0.5 * ( aL2 + aLp2 );
114
115 // relativistic correction factor
116 double k2 = 1.0;
117 double rho2 = 3. * md * md / ( 2. * k2 * aLLp2 );
118
119 // w = scalar product of the 4 velocities of the Lb and Lc.
120 double w = 0.5 * ( MLamB * MLamB + MLamC * MLamC - q2 ) / MLamB /
121 MLamC;
122
123 double I = pow( aL * aLp / aLLp2, 2.5 ) *
124 exp( -rho2 * ( w * w - 1. ) );
125
126 // Calculate the form factors
127 F1 = I * aL / 6.0 * ( 3.0 / mq - 1.0 / mQ );
128 F2 = -I * ( 2.0 * md / aL - aL / ( 2.0 * mq ) +
129 2. * md * md * aL / ( mQ * aLLp2 ) -
130 ( md * aL / ( 6. * mq * mQ * aLLp2 ) ) *
131 ( 3. * aL2 - 2. * aLp2 ) );
132 F3 = I * 2. * md * md * aL / ( mQ * aLLp2 );
133
134 G1 = I * ( 2.0 * md / aL - aL / ( 6. * mQ ) +
135 ( md * aL / ( 6. * mq * mQ * aLLp2 ) ) *
136 ( 3. * aL2 - 2. * aLp2 ) );
137 G2 = I * ( -2. * md / aL + aL / ( 2. * mq ) + aL / ( 3. * mQ ) );
138 G3 = I * aL / ( 3. * mQ ) *
139 ( 1.0 - ( md / ( 2. * mq * aLLp2 ) ) * ( 3. * aL2 - 2. * aLp2 ) );
140
141 // Set form factors to be passed to the amplitude calc.
142 *f1 = F1;
143 *f2 = F2;
144 *f3 = F3;
145 *g1 = G1;
146 *g2 = G2;
147 *g3 = G3;
148 }
149 }
150
151 else {
152 *f1 = 1.0;
153 *f2 = 1.0;
154 *f3 = 0.0;
155 *g1 = 1.0;
156 *g2 = 1.0;
157 *g3 = 0.0;
158 }
159
160 return;
161}
162
163void EvtBaryonPCRFF::getraritaff( EvtId parent, EvtId daught, double q2,
164 double /* mass */, double* f1, double* f2,
165 double* f3, double* f4, double* g1,
166 double* g2, double* g3, double* g4 )
167{
168 // Baryons (partial list 5/28/04)
169 static const EvtId LAMB = EvtPDL::getId( "Lambda_b0" );
170 static const EvtId LAMBB = EvtPDL::getId( "anti-Lambda_b0" );
171 static const EvtId LAMC2P = EvtPDL::getId( "Lambda_c(2625)+" );
172 static const EvtId LAMC2M = EvtPDL::getId( "anti-Lambda_c(2625)-" );
173
174 double F1, F2, F3, F4, G1, G2, G3, G4;
175
176 if ( parent == LAMB || parent == LAMBB ) {
177 // Implement constituent quark model form factors predicted
178 // by M. Pervin, W. Roberst, and S. Capstick, Phys. Rev. C72, 035201 (2005)
179
180 if ( daught == LAMC2P || daught == LAMC2M ) {
181 double mQ = 5.28;
182 double mq = 1.89;
183 double md = 0.40;
184 double MLamB = EvtPDL::getMass( parent );
185 double MLamC = EvtPDL::getMass( daught );
186
187 double aL = 0.59;
188 double aLp = 0.47;
189
190 double aL2 = aL * aL;
191 double aLp2 = aLp * aLp;
192 double aLLp2 = 0.5 * ( aL2 + aLp2 );
193
194 // relativistic correction factor
195 double k2 = 1.0;
196 double rho2 = 3. * md * md / ( 2. * k2 * aLLp2 );
197
198 // w = scalar product of the 4 velocities of the Lb and Lc.
199 double w = 0.5 * ( MLamB * MLamB + MLamC * MLamC - q2 ) / MLamB /
200 MLamC;
201
202 double I = -( 1. / sqrt( 3. ) ) * pow( aL * aLp / aLLp2, 2.5 ) *
203 exp( -rho2 * ( w * w - 1. ) );
204
205 // Calculate the form factors
206 F1 = I * 3.0 * md / aL *
207 ( 1.0 + ( md / aLLp2 ) * ( ( aLp2 / mq ) + ( aL2 / mQ ) ) );
208 F2 = -I * ( ( 3. * md * md / mq ) * ( aLp2 / ( aLLp2 * aL2 ) ) -
209 5. * aL * aLp2 * md / ( 4. * aLLp2 * mq * mQ ) );
210 F3 = -I * ( 3. * md * md * aL / ( mQ * aLLp2 ) + aL / ( 2. * mQ ) );
211 F4 = I * aL / mQ;
212
213 G1 = I * ( 3.0 * md / aL -
214 ( aL / ( 2. * mQ ) ) *
215 ( 1. + 3. * md * aLp2 / ( 2. * aLLp2 * mq ) ) );
216 G2 = -I * ( ( 3. * md * md / mq ) * ( aLp2 / ( aLLp2 * aL ) ) +
217 aL * aLp2 * md / ( 4. * aLLp2 * aLLp2 * mq * mQ ) *
218 ( aLLp2 + 12. * md * md ) );
219 G3 = I * aL / ( mQ * aLLp2 ) *
220 ( aLLp2 / 2. + 3. * md * md +
221 aLp2 * md / ( mq * aLLp2 ) * ( aLLp2 + 6. * md * md ) );
222 G4 = -I * ( aL / mQ + md / ( mq * mQ ) * aLp2 * aL / aLLp2 );
223
224 // Set form factors to be passed to the amplitude calc.
225 *f1 = F1;
226 *f2 = F2;
227 *f3 = F3;
228 *f4 = F4;
229 *g1 = G1;
230 *g2 = G2;
231 *g3 = G3;
232 *g4 = G4;
233 }
234 }
235
236 else {
237 *f1 = 1.0;
238 *f2 = 1.0;
239 *f3 = 0.0;
240 *f4 = 0.0;
241 *g1 = 1.0;
242 *g2 = 1.0;
243 *g3 = 0.0;
244 *g4 = 0.0;
245 }
246
247 return;
248}
249
250void EvtBaryonPCRFF::getscalarff( EvtId, EvtId, double, double, double*, double* )
251{
252 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
253 << "Not implemented :getscalarff in EvtBaryonPCRFF.\n";
254 ::abort();
255}
256
257void EvtBaryonPCRFF::getvectorff( EvtId, EvtId, double, double, double*,
258 double*, double*, double* )
259{
260 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
261 << "Not implemented :getvectorff in EvtBaryonPCRFF.\n";
262 ::abort();
263}
264
265void EvtBaryonPCRFF::gettensorff( EvtId, EvtId, double, double, double*,
266 double*, double*, double* )
267{
268 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
269 << "Not implemented :gettensorff in EvtBaryonPCRFF.\n";
270 ::abort();
271}
272
273void EvtBaryonPCRFF::getbaryonff( EvtId, EvtId, double, double, double*,
274 double*, double*, double* )
275{
276 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
277 << "Not implemented :getbaryonff in EvtBaryonPCRFF.\n";
278 ::abort();
279}
const EvtComplex I
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 gettensorff(EvtId parent, EvtId daught, double t, double mass, double *hf, double *kf, double *bpf, double *bmf) override
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f) override
void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *fpf, double *f0f) override
void getdiracff(EvtId parent, EvtId daught, double q2, double mass, double *f1, double *f2, double *f3, double *g1, double *g2, double *g3) override
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
void getraritaff(EvtId parent, EvtId daught, double q2, double mass, double *f1, double *f2, double *f3, double *f4, double *g1, double *g2, double *g3, double *g4) override
Definition EvtId.hh:27
static double getMass(EvtId i)
Definition EvtPDL.cpp:311
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283