cepgen
is hosted by
Hepforge
,
IPPP Durham
CepGen
1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
FioreBrasse.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 <complex>
20
21
#include "
CepGen/Core/SteeredObject.h
"
22
#include "
CepGen/Modules/StructureFunctionsFactory.h
"
23
#include "
CepGen/Physics/Constants.h
"
24
#include "
CepGen/Physics/Utils.h
"
25
#include "
CepGen/StructureFunctions/Parameterisation.h
"
26
#include "
CepGen/Utils/Message.h
"
27
28
namespace
cepgen
{
29
namespace
strfun {
31
class
FioreBrasse
:
public
Parameterisation
{
32
public
:
34
explicit
FioreBrasse
(
const
ParametersList
& params)
35
:
Parameterisation
(params), s0_(
steer
<double>(
"s0"
)), norm_(
steer
<double>(
"norm"
)) {
36
for
(
const
auto
& res : steer<std::vector<ParametersList> >(
"resonances"
))
37
resonances_.emplace_back(res);
38
}
39
40
static
ParametersDescription
description
() {
41
auto
desc =
Parameterisation::description
();
42
desc.setDescription(
"Fiore-Brasse (low-mass resonances)"
);
43
desc.add<
double
>(
"s0"
, 1.14);
44
desc.add<
double
>(
"norm"
, 0.021).setDescription(
"absolute normalisation factor"
);
45
// add the list of resonances
46
desc.addParametersDescriptionVector(
"resonances"
,
47
Resonance::description
(),
48
{
ParametersList
()
// N*(1520)
49
.
set
<
double
>(
"alpha0"
, -0.8377)
50
.set<double>(
"alpha1"
, 0.95)
51
.
set
<
double
>(
"alpha2"
, 0.1473)
52
.set<double>(
"a"
, 1.0)
53
.
set
<
double
>(
"q02"
, 2.4617)
54
.set<int>(
"spinTimesTwo"
, 3),
55
ParametersList
()
// N*(1680)
56
.
set
<
double
>(
"alpha0"
, -0.37)
57
.set<double>(
"alpha1"
, 0.95)
58
.
set
<
double
>(
"alpha2"
, 0.1471)
59
.set<double>(
"a"
, 0.5399)
60
.
set
<
double
>(
"q02"
, 2.4617)
61
.set<int>(
"spinTimesTwo"
, 5),
62
ParametersList
()
// Δ(1236)
63
.
set
<
double
>(
"alpha0"
, 0.0038)
64
.set<double>(
"alpha1"
, 0.85)
65
.
set
<
double
>(
"alpha2"
, 0.1969)
66
.set<double>(
"a"
, 4.2225)
67
.
set
<
double
>(
"q02"
, 1.5722)
68
.set<int>(
"spinTimesTwo"
, 3),
69
ParametersList
()
// exotic
70
.
set
<
double
>(
"alpha0"
, 0.5645)
71
.set<double>(
"alpha1"
, 0.1126)
72
.
set
<
double
>(
"alpha2"
, 1.3086)
73
.set<double>(
"a"
, 19.2694)
74
.
set
<
double
>(
"q02"
, 4.5259)
75
.set<int>(
"spinTimesTwo"
, 2)})
76
.setDescription(
"collection of resonances parameters"
);
77
return
desc;
78
}
79
80
void
eval
()
override
;
81
82
protected
:
84
struct
Resonance
:
SteeredObject
<Resonance> {
85
explicit
Resonance
(
const
ParametersList
& params)
86
:
SteeredObject
(params),
87
alpha0
(
steer
<double>(
"alpha0"
)),
88
alpha1
(
steer
<double>(
"alpha1"
)),
89
alpha2
(
steer
<double>(
"alpha2"
)),
90
a
(
steer
<double>(
"a"
)),
91
q02
(
steer
<double>(
"q02"
)),
92
spinTimesTwo
(
steer
<int>(
"spinTimesTwo"
)) {}
93
94
static
ParametersDescription
description
() {
95
auto
desc =
ParametersDescription
();
96
desc.add<
double
>(
"alpha0"
, 0.);
97
desc.add<
double
>(
"alpha1"
, 0.);
98
desc.add<
double
>(
"alpha2"
, 0.);
99
desc.add<
double
>(
"a"
, 0.).setDescription(
"resonance weight in total amplitude"
);
100
desc.add<
double
>(
"q02"
, 0.);
101
desc.add<
int
>(
"spinTimesTwo"
, 0).setDescription(
"spin of the resonance (x1/2)"
);
102
return
desc;
103
}
104
105
double
alpha0
,
alpha1
,
alpha2
,
a
,
q02
;
106
int
spinTimesTwo
;
107
};
108
109
private
:
111
std::vector<Resonance> resonances_;
112
double
s0_{0.}, norm_{0.};
113
};
114
115
void
FioreBrasse::eval
() {
116
const
double
prefactor =
117
args_
.
q2
* (1. -
args_
.
xbj
) / (4. * M_PI *
constants::ALPHA_EM
*
gamma2
(
args_
.
xbj
,
args_
.
q2
));
118
const
double
s =
utils::mX2
(
args_
.
xbj
,
args_
.
q2
,
mp2_
);
119
120
double
amplitude_res = 0.;
121
const
double
sqrts0 = sqrt(s0_);
122
for
(
unsigned
short
i = 0; i < 3; ++i) {
//FIXME 4??
123
const
auto
& res = resonances_.at(i);
124
125
std::complex<double> alpha;
126
if
(s > s0_)
127
alpha = std::complex<double>(res.alpha0 + res.alpha2 * sqrts0 + res.alpha1 * s, res.alpha2 * sqrt(s - s0_));
128
else
129
alpha = std::complex<double>(res.alpha0 + res.alpha1 * s + res.alpha2 * (sqrts0 - sqrt(s0_ - s)), 0.);
130
131
double
formfactor = 1. / pow(1. +
args_
.
q2
/ res.q02, 2);
132
double
denom = pow(res.spinTimesTwo * 0.5 - std::real(alpha), 2) + pow(std::imag(alpha), 2);
133
double
ampli_imag = res.a * formfactor * formfactor * std::imag(alpha) / denom;
134
amplitude_res += ampli_imag;
135
}
136
double
amplitude_bg = 0.;
137
{
138
const
auto
& res = resonances_.at(3);
139
double
sE = res.alpha2, sqrtsE = sqrt(sE);
140
std::complex<double> alpha;
141
if
(s > sE)
142
alpha = std::complex<double>(res.alpha0 + res.alpha1 * sqrtsE, res.alpha1 * sqrt(s - sE));
143
else
144
alpha = std::complex<double>(res.alpha0 + res.alpha1 * (sqrtsE - sqrt(sE - s)), 0.);
145
double
formfactor = 1. / pow(1. +
args_
.
q2
/ res.q02, 2);
146
double
denom = pow(res.spinTimesTwo * 0.75 - std::real(alpha), 2) + pow(std::imag(alpha), 2);
147
amplitude_bg = res.a * formfactor * formfactor * std::imag(alpha) / denom;
148
}
149
const
double
amplitude_tot = norm_ * (amplitude_res + amplitude_bg);
150
151
CG_DEBUG_LOOP
(
"FioreBrasse:amplitudes"
) <<
"Amplitudes:\n\t"
152
<<
" resonance part: "
<< amplitude_res <<
",\n\t"
153
<<
" background part: "
<< amplitude_bg <<
",\n\t"
154
<<
" total (with norm.): "
<< amplitude_tot <<
"."
;
155
156
setF2
(prefactor * amplitude_tot);
157
}
158
159
class
FioreBrasseAlt
final :
public
FioreBrasse
{
160
public
:
161
explicit
FioreBrasseAlt
(
const
ParametersList
& params) :
FioreBrasse
(params) {}
162
163
static
ParametersDescription
description
() {
164
auto
desc =
FioreBrasse::description
();
165
desc.add<
double
>(
"s0"
, 1.2871);
166
desc.add<
double
>(
"norm"
, 0.0207);
167
// add the list of resonances
168
desc.addParametersDescriptionVector(
"resonances"
,
169
Resonance::description(),
170
{
ParametersList
()
// N*(1520)
171
.
set
<
double
>(
"alpha0"
, -0.8070)
172
.set<double>(
"alpha1"
, 0.9632)
173
.
set
<
double
>(
"alpha2"
, 0.1387)
174
.set<double>(
"a"
, 1.0)
175
.
set
<
double
>(
"q02"
, 2.6066)
176
.set<int>(
"spinTimesTwo"
, 3),
177
ParametersList
()
// N*(1680)
178
.
set
<
double
>(
"alpha0"
, -0.3640)
179
.set<double>(
"alpha1"
, 0.9531)
180
.
set
<
double
>(
"alpha2"
, 0.1239)
181
.set<double>(
"a"
, 0.6086)
182
.
set
<
double
>(
"q02"
, 2.6066)
183
.set<int>(
"spinTimesTwo"
, 5),
184
ParametersList
()
// Δ(1236)
185
.
set
<
double
>(
"alpha0"
, -0.0065)
186
.set<double>(
"alpha1"
, 0.8355)
187
.
set
<
double
>(
"alpha2"
, 0.2320)
188
.set<double>(
"a"
, 4.7279)
189
.
set
<
double
>(
"q02"
, 1.4828)
190
.set<int>(
"spinTimesTwo"
, 3),
191
ParametersList
()
// exotic
192
.
set
<
double
>(
"alpha0"
, 0.5484)
193
.set<double>(
"alpha1"
, 0.1373)
194
.
set
<
double
>(
"alpha2"
, 1.3139)
195
.set<double>(
"a"
, 14.7267)
196
.
set
<
double
>(
"q02"
, 4.6041)
197
.set<int>(
"spinTimesTwo"
, 2)});
198
return
desc;
199
}
200
};
201
}
// namespace strfun
202
}
// namespace cepgen
203
using
cepgen::strfun::FioreBrasse
;
204
using
cepgen::strfun::FioreBrasseAlt
;
205
REGISTER_STRFUN
(
"FioreBrasse"
, 101,
FioreBrasse
);
206
REGISTER_STRFUN
(
"FioreBrasseAlt"
, 104,
FioreBrasseAlt
);
Constants.h
Message.h
CG_DEBUG_LOOP
#define CG_DEBUG_LOOP(mod)
Definition
Message.h:224
Utils.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::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::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::strfun::FioreBrasseAlt
Definition
FioreBrasse.cpp:159
cepgen::strfun::FioreBrasseAlt::FioreBrasseAlt
FioreBrasseAlt(const ParametersList ¶ms)
Definition
FioreBrasse.cpp:161
cepgen::strfun::FioreBrasseAlt::description
static ParametersDescription description()
Definition
FioreBrasse.cpp:163
cepgen::strfun::FioreBrasse
structure functions parameterisation by Fiore et al and Brasse et al
Definition
FioreBrasse.cpp:31
cepgen::strfun::FioreBrasse::FioreBrasse
FioreBrasse(const ParametersList ¶ms)
Fiore and Brasse proton structure functions.
Definition
FioreBrasse.cpp:34
cepgen::strfun::FioreBrasse::description
static ParametersDescription description()
Definition
FioreBrasse.cpp:40
cepgen::strfun::FioreBrasse::eval
void eval() override
Local structure functions evaluation method.
Definition
FioreBrasse.cpp:115
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::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::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::ALPHA_EM
constexpr double ALPHA_EM
Electromagnetic coupling constant .
Definition
Constants.h:28
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::FioreBrasse::Resonance
Description of a single resonance in the modelling.
Definition
FioreBrasse.cpp:84
cepgen::strfun::FioreBrasse::Resonance::spinTimesTwo
int spinTimesTwo
Definition
FioreBrasse.cpp:106
cepgen::strfun::FioreBrasse::Resonance::a
double a
Definition
FioreBrasse.cpp:105
cepgen::strfun::FioreBrasse::Resonance::q02
double q02
Definition
FioreBrasse.cpp:105
cepgen::strfun::FioreBrasse::Resonance::description
static ParametersDescription description()
Definition
FioreBrasse.cpp:94
cepgen::strfun::FioreBrasse::Resonance::alpha2
double alpha2
Definition
FioreBrasse.cpp:105
cepgen::strfun::FioreBrasse::Resonance::alpha1
double alpha1
Definition
FioreBrasse.cpp:105
cepgen::strfun::FioreBrasse::Resonance::Resonance
Resonance(const ParametersList ¶ms)
Definition
FioreBrasse.cpp:85
cepgen::strfun::FioreBrasse::Resonance::alpha0
double alpha0
Definition
FioreBrasse.cpp:105
cepgen::strfun::Parameterisation::Arguments::xbj
double xbj
Definition
Parameterisation.h:60
cepgen::strfun::Parameterisation::Arguments::q2
double q2
Definition
Parameterisation.h:60
CepGen
StructureFunctions
FioreBrasse.cpp
Generated on Mon Jul 29 2024 for CepGen by
1.9.7