cepgen
is hosted by
Hepforge
,
IPPP Durham
CepGen
1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
ChristyBosted.cpp
Go to the documentation of this file.
1
/*
2
* CepGen: a central exclusive processes event generator
3
* Copyright (C) 2013-2024 Laurent Forthomme
4
*
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, either version 3 of the License, or
8
* any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
*/
18
19
#include <numeric>
20
#include <utility>
21
22
#include "
CepGen/Core/Exception.h
"
23
#include "
CepGen/Core/SteeredObject.h
"
24
#include "
CepGen/Modules/StructureFunctionsFactory.h
"
25
#include "
CepGen/Physics/Constants.h
"
26
#include "
CepGen/Physics/PDG.h
"
27
#include "
CepGen/Physics/ResonanceObject.h
"
28
#include "
CepGen/Physics/Utils.h
"
29
#include "
CepGen/StructureFunctions/Parameterisation.h
"
30
31
namespace
cepgen
{
32
namespace
strfun {
34
class
ChristyBosted
final :
public
Parameterisation
{
35
public
:
36
explicit
ChristyBosted
(
const
ParametersList
&);
37
38
static
ParametersDescription
description
();
39
40
void
eval
()
override
;
41
42
//--- already computed internally during F2 computation
43
ChristyBosted
&
computeFL
(
double
,
double
)
override
{
return
*
this
; }
44
ChristyBosted
&
computeFL
(
double
,
double
,
double
)
override
{
return
*
this
; }
45
46
private
:
47
enum
Polarisation { L, T };
48
static
constexpr
double
prefactor_ = 0.25 * M_1_PI * M_1_PI /
constants::ALPHA_EM
;
49
50
double
resmod507(
const
Polarisation& pol,
double
w2,
double
q2)
const
;
51
52
class
Resonance :
public
ResonanceObject
,
public
SteeredObject
<Resonance> {
53
public
:
54
explicit
Resonance(
const
ParametersList
& params)
55
:
ResonanceObject
(params),
56
SteeredObject
<Resonance>(params),
57
a0t_(
SteeredObject
<Resonance>::
steer
<double>(
"A0T"
)),
58
a0l_(
SteeredObject
<Resonance>::
steer
<double>(
"A0L"
)),
59
fit_pars_(
SteeredObject
<Resonance>::
steer
<std::vector<double> >(
"fitParameters"
)) {
60
if
(fit_pars_.size() != 5)
61
throw
CG_FATAL
(
"ChristyBosted:Resonance"
)
62
<<
"Invalid fit parameters multiplicity! "
<< fit_pars_.size() <<
" != 5."
;
63
}
64
65
static
ParametersDescription description() {
66
auto
desc =
ResonanceObject::description
();
67
desc.add<
double
>(
"A0T"
, 0.);
68
desc.add<
double
>(
"A0L"
, 0.);
69
desc.add<std::vector<double> >(
"fitParameters"
, std::vector<double>(5, 0.));
70
return
desc;
71
}
72
73
double
sigma(
const
Polarisation& pol,
const
KinematicsBlock& kin)
const
{
74
const
auto
pwidth =
partialWidth
(kin), pwidth2 = pwidth * pwidth;
75
const
auto
mass2 =
mass_
*
mass_
;
76
return
height(pol, kin.q2) *
kr
() / kin.k *
kcmr
() / kin.kcm /
width_
*
77
(pwidth *
photonWidth
(kin) / (pow(kin.w2 - mass2, 2) + mass2 * pwidth2));
78
}
79
80
private
:
82
double
height(
const
Polarisation& pol,
double
q2)
const
{
83
switch
(pol) {
84
case
Polarisation::T:
85
return
std::pow(a0t_ * (1. + fit_pars_.at(0) * q2 / (1. + fit_pars_.at(1) * q2)) /
86
std::pow(1. + q2 / 0.91, fit_pars_.at(2)),
87
2);
88
case
Polarisation::L:
89
return
std::pow(a0l_ / (1. + fit_pars_.at(3) * q2) * q2 * exp(-q2 * fit_pars_.at(4)), 2);
90
default
:
91
throw
CG_FATAL
(
"ChristyBosted:Resonance"
) <<
"Invalid polarisation state: "
<< (int)pol <<
"!"
;
92
}
93
}
94
95
const
double
a0t_;
96
const
double
a0l_;
97
const
std::vector<double> fit_pars_;
98
};
100
struct
ContinuumDirection :
SteeredObject
<ContinuumDirection> {
101
explicit
ContinuumDirection(
const
ParametersList& params)
102
:
SteeredObject
(params),
103
sig0(
steer
<double>(
"sig0"
)),
104
fit_pars(
steer
<std::vector<double> >(
"fitParameters"
)) {
105
if
(fit_pars.size() != 4)
106
throw
CG_FATAL
(
"ChristyBosted:ContinuumDirection"
)
107
<<
"The templated fit for a continuum direction should have 4 parameters! Found "
<< fit_pars.size()
108
<<
"."
;
109
}
110
111
static
ParametersDescription description() {
112
auto
desc = ParametersDescription();
113
desc.setDescription(
"Set of parameters for one given direction"
);
114
desc.add<
double
>(
"sig0"
, 0.);
115
desc.add<std::vector<double> >(
"fitParameters"
, std::vector<double>(4, 0.));
116
return
desc;
117
}
118
double
sig0;
119
std::vector<double> fit_pars;
120
};
121
double
m0_;
123
std::vector<Resonance> resonances_;
125
std::vector<ContinuumDirection> continuum_;
126
const
double
q20_;
127
const
double
q21_;
128
const
double
mpi_, mpi2_;
129
const
double
meta_, meta2_;
130
};
131
132
ChristyBosted::ChristyBosted
(
const
ParametersList
& params)
133
:
Parameterisation
(params),
134
m0_(steer<double>(
"m0"
)),
135
q20_(steer<double>(
"q20"
)),
136
q21_(steer<double>(
"q21"
)),
137
mpi_(
PDG
::get().mass(
PDG
::piZero)),
138
mpi2_(mpi_ * mpi_),
139
meta_(
PDG
::get().mass(
PDG
::eta)),
140
meta2_(meta_ * meta_) {
141
for
(
const
auto
& res : steer<std::vector<ParametersList> >(
"resonances"
))
142
resonances_.emplace_back(res);
143
const
auto
& cont = steer<std::vector<ParametersList> >(
"continuum"
);
144
if
(cont.size() != 3)
145
throw
CG_FATAL
(
"ChristyBosted"
) <<
"Continuum should have its three directions parameterisation defined! Found "
146
<< cont.size() <<
"."
;
147
for
(
const
auto
& cnt : cont)
148
continuum_.emplace_back(cnt);
149
}
150
151
double
ChristyBosted::resmod507(
const
Polarisation& pol,
double
w2,
double
q2)
const
{
152
const
double
w = sqrt(w2);
153
const
double
q20 = pol == Polarisation::T ? 0.05 : 0.125;
154
155
//--- kinematics needed for threshold relativistic B-W
156
const
auto
kin = Resonance::KinematicsBlock(w2, q2,
mp2_
, mpi2_, meta2_);
157
158
//--- calculate Breit-Wigners for all resonances
159
const
auto
sig_res =
160
w * std::accumulate(resonances_.begin(), resonances_.end(), 0., [&pol, &kin](
auto
sig,
const
auto
& res) {
161
return sig + res.sigma(pol, kin);
162
});
163
164
//--- non-resonant background calculation
165
const
double
xpr = 1. / (1. + (w2 -
mx_min_
*
mx_min_
) / (q2 + q20));
166
if
(xpr > 1.)
167
return
0.;
168
169
double
sig_nr = 0.;
170
switch
(pol) {
171
case
Polarisation::T: {
// transverse
172
const
double
wdif = w -
mx_min_
;
173
if
(wdif >= 0.) {
174
for
(
unsigned
short
i = 0; i < 2; ++i) {
175
const
auto
& dir = continuum_.at(i);
// direction for this continuum
176
const
double
expo = dir.fit_pars.at(1) + dir.fit_pars.at(2) * q2 + dir.fit_pars.at(3) * q2 * q2;
177
sig_nr += dir.sig0 / pow(q2 + dir.fit_pars.at(0), expo) * pow(wdif, i + 1.5);
178
}
179
}
180
181
sig_nr *= xpr;
182
}
break
;
183
case
Polarisation::L: {
// longitudinal
184
const
auto
& dir = continuum_.at(2);
185
const
double
expo = dir.fit_pars.at(0);
186
const
double
xb =
utils::xBj
(q2,
mp2_
, w2);
187
const
double
norm_q2 = 1. / 0.330 / 0.330;
188
const
double
t = log(log((q2 + m0_) * norm_q2) / log(m0_ * norm_q2));
189
sig_nr += dir.sig0 * pow(1. - xpr, expo) / (1. - xb) * pow(q2 / (q2 + q20), dir.fit_pars.at(1)) / (q2 + q20) *
190
pow(xpr, dir.fit_pars.at(2) + dir.fit_pars.at(3) * t);
191
}
192
}
193
return
sig_res + sig_nr;
194
}
195
196
void
ChristyBosted::eval
() {
197
const
double
w2 =
utils::mX2
(
args_
.
xbj
,
args_
.
q2
,
mp2_
);
198
if
(sqrt(w2) <
mx_min_
)
199
return
;
200
201
//-----------------------------
202
// modification of Christy-Bosted at large q2 as described in the LUXqed paper
203
//-----------------------------
204
const
double
delq2 =
args_
.
q2
- q20_;
205
//------------------------------
206
207
double
q2_eff =
args_
.
q2
, w2_eff = w2;
208
if
(
args_
.
q2
> q20_) {
209
q2_eff = q20_ + delq2 / (1. + delq2 / (q21_ - q20_));
210
w2_eff =
utils::mX2
(
args_
.
xbj
, q2_eff,
mp2_
);
211
}
212
const
double
sigT = resmod507(Polarisation::T, w2_eff, q2_eff);
213
const
double
sigL = resmod507(Polarisation::L, w2_eff, q2_eff);
214
215
double
f2 = prefactor_ * (1. -
args_
.
xbj
) * q2_eff /
gamma2
(
args_
.
xbj
, q2_eff) * (sigT + sigL) /
216
constants::GEVM2_TO_PB
* 1.e6;
217
if
(
args_
.
q2
> q20_)
218
f2 *= q21_ / (q21_ + delq2);
219
setF2
(f2);
220
221
if
(sigT != 0.)
222
Parameterisation::computeFL
(q2_eff,
args_
.
xbj
, sigL / sigT);
223
}
224
225
ParametersDescription
ChristyBosted::description
() {
226
auto
desc =
Parameterisation::description
();
227
desc.setDescription(
"Christy-Bosted (low-mass resonances)"
);
228
desc.add<
double
>(
"m0"
, 4.2802);
229
desc.add<
double
>(
"q20"
, 8.).setDescription(
"Q^2 scale for the modification of the parameterisation"
);
230
desc.add<
double
>(
"q21"
, 30.);
231
desc.addParametersDescriptionVector(
232
"continuum"
,
233
ContinuumDirection::description(),
234
{
// transverse direction x
235
ParametersList
()
236
.
set
<
double
>(
"sig0"
, 246.06)
237
.set<std::vector<double> >(
"fitParameters"
, {0.067469, 1.3501, 0.12054, -0.0038495}),
238
// transverse direction y
239
ParametersList
()
240
.
set
<
double
>(
"sig0"
, -89.360)
241
.set<std::vector<double> >(
"fitParameters"
, {0.20977, 1.5715, 0.090736, 0.010362}),
242
// longitudinal direction z
243
ParametersList
()
244
.
set
<
double
>(
"sig0"
, 86.746)
245
.set<std::vector<double> >(
"fitParameters"
, {4.0294, 3.1285, 0.33403, 4.9623})});
246
desc.addParametersDescriptionVector(
247
"resonances"
,
248
Resonance::description(),
249
{
//--- P33(1232)
250
ParametersList
()
251
.
set
<
ParametersList
>(
252
"branchingRatios"
,
253
ParametersList
().
set
<
double
>(
"singlePi"
, 1.).set<double>(
"doublePi"
, 0.).
set
<
double
>(
"eta"
, 0.))
254
.
set
<
int
>(
"angularMomentum"
, 1)
255
.set<double>(
"x0"
, 0.14462
/* 0.15 */
)
256
.
set
<
double
>(
"mass"
, 1.2298)
257
.set<double>(
"width"
, 0.13573)
258
.
set
<std::vector<double> >(
"fitParameters"
, {4.2291, 1.2598, 2.1242, 19.910, 0.22587})
259
.set<double>(
"A0T"
, 7.7805)
260
.
set
<
double
>(
"A0L"
, 29.414),
261
//--- S11(1535)
262
ParametersList
()
263
.
set
<
ParametersList
>(
"branchingRatios"
,
264
ParametersList
()
265
.
set
<
double
>(
"singlePi"
, 0.45)
266
.set<double>(
"doublePi"
, 0.1)
267
.
set
<
double
>(
"eta"
, 0.45))
268
.
set
<
int
>(
"angularMomentum"
, 0)
269
.set<double>(
"x0"
, 0.215)
270
.
set
<
double
>(
"mass"
, 1.5304)
271
.set<double>(
"width"
, 0.220)
272
.
set
<std::vector<double> >(
"fitParameters"
, {6823.2, 33521., 2.5686, 0., 0.})
273
.set<double>(
"A0T"
, 6.3351)
274
.
set
<
double
>(
"A0L"
, 0.),
275
//--- D13(1520)
276
ParametersList
()
277
.
set
<
ParametersList
>(
"branchingRatios"
,
278
ParametersList
()
279
.
set
<
double
>(
"singlePi"
, 0.65)
280
.set<double>(
"doublePi"
, 0.35)
281
.
set
<
double
>(
"eta"
, 0.))
282
.
set
<
int
>(
"angularMomentum"
, 2)
283
.set<double>(
"x0"
, 0.215)
284
.
set
<
double
>(
"mass"
, 1.5057)
285
.set<double>(
"width"
, 0.082956)
286
.
set
<std::vector<double> >(
"fitParameters"
, {21.240, 0.055746, 2.4886, 97.046, 0.31042})
287
.set<double>(
"A0T"
, 0.60347)
288
.
set
<
double
>(
"A0L"
, 157.92),
289
//--- F15(1680)
290
ParametersList
()
291
.
set
<
ParametersList
>(
"branchingRatios"
,
292
ParametersList
()
293
.
set
<
double
>(
"singlePi"
, 0.65)
294
.set<double>(
"doublePi"
, 0.35)
295
.
set
<
double
>(
"eta"
, 0.))
296
.
set
<
int
>(
"angularMomentum"
, 3)
297
.set<double>(
"x0"
, 0.215)
298
.
set
<
double
>(
"mass"
, 1.6980)
299
.set<double>(
"width"
, 0.095782)
300
.
set
<std::vector<double> >(
"fitParameters"
, {-0.28789, 0.18607, 0.063534, 0.038200, 1.2182})
301
.set<double>(
"A0T"
, 2.3305)
302
.
set
<
double
>(
"A0L"
, 4.2160),
303
//--- S11(1650)
304
ParametersList
()
305
.
set
<
ParametersList
>(
306
"branchingRatios"
,
307
ParametersList
().
set
<
double
>(
"singlePi"
, 0.4).set<double>(
"doublePi"
, 0.5).
set
<
double
>(
"eta"
, 0.1))
308
.
set
<
int
>(
"angularMomentum"
, 0)
309
.set<double>(
"x0"
, 0.215)
310
.
set
<
double
>(
"mass"
, 1.6650)
311
.set<double>(
"width"
, 0.10936)
312
.
set
<std::vector<double> >(
"fitParameters"
, {-0.56175, 0.38964, 0.54883, 0.31393, 2.9997})
313
.set<double>(
"A0T"
, 1.9790)
314
.
set
<
double
>(
"A0L"
, 13.764),
315
//--- P11(1440) roper
316
ParametersList
()
317
.
set
<
ParametersList
>(
"branchingRatios"
,
318
ParametersList
()
319
.
set
<
double
>(
"singlePi"
, 0.65)
320
.set<double>(
"doublePi"
, 0.35)
321
.
set
<
double
>(
"eta"
, 0.))
322
.
set
<
int
>(
"angularMomentum"
, 1)
323
.set<double>(
"x0"
, 0.215)
324
.
set
<
double
>(
"mass"
, 1.4333)
325
.set<double>(
"width"
, 0.37944)
326
.
set
<std::vector<double> >(
"fitParameters"
, {46.213, 0.19221, 1.9141, 0.053743, 1.3091})
327
.set<double>(
"A0T"
, 0.022506)
328
.
set
<
double
>(
"A0L"
, 5.5124),
329
//--- F37(1950)
330
ParametersList
()
331
.
set
<
ParametersList
>(
332
"branchingRatios"
,
333
ParametersList
().
set
<
double
>(
"singlePi"
, 0.5).set<double>(
"doublePi"
, 0.5).
set
<
double
>(
"eta"
, 0.))
334
.
set
<
int
>(
"angularMomentum"
, 3)
335
.set<double>(
"x0"
, 0.215)
336
.
set
<
double
>(
"mass"
, 1.9341)
337
.set<double>(
"width"
, 0.380)
338
.
set
<std::vector<double> >(
"fitParameters"
, {0., 0., 1., 1.8951, 0.51376})
339
.set<double>(
"A0T"
, 3.4187)
340
.
set
<
double
>(
"A0L"
, 1.8951)})
341
.setDescription(
"collection of resonances modelled in this fit"
);
342
343
return
desc;
344
}
345
346
}
// namespace strfun
347
}
// namespace cepgen
348
using
cepgen::strfun::ChristyBosted
;
349
REGISTER_STRFUN
(
"ChristyBosted"
, 102,
ChristyBosted
);
Constants.h
Exception.h
CG_FATAL
#define CG_FATAL(mod)
Definition
Exception.h:61
PDG.h
Utils.h
ResonanceObject.h
SteeredObject.h
StructureFunctionsFactory.h
REGISTER_STRFUN
#define REGISTER_STRFUN(name, id, obj)
Add a structure functions definition to the list of handled parameterisation.
Definition
StructureFunctionsFactory.h:25
Parameterisation.h
cepgen::PDG
A singleton holding all physics constants associated to particles.
Definition
PDG.h:28
cepgen::ParametersDescription
A description object for parameters collection.
Definition
ParametersDescription.h:26
cepgen::ParametersList
Definition
ParametersList.h:52
cepgen::ParametersList::set
ParametersList & set(const std::string &, const T &)
Set a parameter value Set a recast parameter value.
Definition
ParametersList.cpp:401
cepgen::ResonanceObject
General definition for a resonance.
Definition
ResonanceObject.h:26
cepgen::ResonanceObject::partialWidth
double partialWidth(const KinematicsBlock &) const
partial widths for all decays
Definition
ResonanceObject.cpp:54
cepgen::ResonanceObject::width_
const double width_
full width, in GeV
Definition
ResonanceObject.h:69
cepgen::ResonanceObject::photonWidth
double photonWidth(const KinematicsBlock &) const
virtual photon width
Definition
ResonanceObject.cpp:79
cepgen::ResonanceObject::kr
double kr() const
Definition
ResonanceObject.h:46
cepgen::ResonanceObject::kcmr
double kcmr() const
Definition
ResonanceObject.h:49
cepgen::ResonanceObject::description
static ParametersDescription description()
Definition
ResonanceObject.cpp:41
cepgen::ResonanceObject::mass_
const double mass_
mass, in GeV/c2
Definition
ResonanceObject.h:68
cepgen::Steerable::steer
T steer(const std::string &key) const
Retrieve a parameters as previously steered.
Definition
Steerable.h:39
cepgen::SteeredObject
Base user-steerable object.
Definition
SteeredObject.h:41
cepgen::SteeredObject::SteeredObject
SteeredObject()
Build a module.
Definition
SteeredObject.h:44
cepgen::strfun::ChristyBosted
parameterisation by Christy and Bosted
Definition
ChristyBosted.cpp:34
cepgen::strfun::ChristyBosted::computeFL
ChristyBosted & computeFL(double, double, double) override
Compute the longitudinal structure function for a given point.
Definition
ChristyBosted.cpp:44
cepgen::strfun::ChristyBosted::ChristyBosted
ChristyBosted(const ParametersList &)
Definition
ChristyBosted.cpp:132
cepgen::strfun::ChristyBosted::description
static ParametersDescription description()
Definition
ChristyBosted.cpp:225
cepgen::strfun::ChristyBosted::eval
void eval() override
Local structure functions evaluation method.
Definition
ChristyBosted.cpp:196
cepgen::strfun::ChristyBosted::computeFL
ChristyBosted & computeFL(double, double) override
Compute the longitudinal structure function for a given point.
Definition
ChristyBosted.cpp:43
cepgen::strfun::Parameterisation
Base object for the parameterisation of nucleon structure functions.
Definition
Parameterisation.h:30
cepgen::strfun::Parameterisation::gamma2
double gamma2(double xbj, double q2) const
Dimensionless variable .
Definition
Parameterisation.cpp:116
cepgen::strfun::Parameterisation::computeFL
virtual Parameterisation & computeFL(double xbj, double q2)
Compute the longitudinal structure function for a given point.
Definition
Parameterisation.cpp:118
cepgen::strfun::Parameterisation::args_
Arguments args_
Last couple computed.
Definition
Parameterisation.h:109
cepgen::strfun::Parameterisation::setF2
Parameterisation & setF2(double f2)
Definition
Parameterisation.cpp:83
cepgen::strfun::Parameterisation::mx_min_
const double mx_min_
Minimum diffractive mass, in GeV/c^2.
Definition
Parameterisation.h:107
cepgen::strfun::Parameterisation::mp2_
const double mp2_
Squared proton mass, in GeV^2/c^4.
Definition
Parameterisation.h:106
cepgen::strfun::Parameterisation::description
static ParametersDescription description()
Generic description for the structure functions.
Definition
Parameterisation.cpp:148
cepgen::constants::GEVM2_TO_PB
constexpr double GEVM2_TO_PB
Conversion factor between GeV and barn i.e. in GeV .
Definition
Constants.h:37
cepgen::constants::ALPHA_EM
constexpr double ALPHA_EM
Electromagnetic coupling constant .
Definition
Constants.h:28
cepgen::utils::xBj
double xBj(double q2, double mp2, double mx2)
Compute Bjorken x from virtuality/diffractive mass.
Definition
Utils.cpp:41
cepgen::utils::mX2
double mX2(double xbj, double q2, double mp2)
Compute the diffractive mass from virtuality/Bjorken x.
Definition
Utils.cpp:29
cepgen
Common namespace for this Monte Carlo generator.
Definition
CommandLineHandler.cpp:36
cepgen::strfun::Parameterisation::Arguments::xbj
double xbj
Definition
Parameterisation.h:60
cepgen::strfun::Parameterisation::Arguments::q2
double q2
Definition
Parameterisation.h:60
CepGen
StructureFunctions
ChristyBosted.cpp
Generated on Mon Jul 29 2024 for CepGen by
1.9.7