cepgen
is hosted by
Hepforge
,
IPPP Durham
CepGen
1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
SigmaRatio.cpp
Go to the documentation of this file.
1
/*
2
* CepGen: a central exclusive processes event generator
3
* Copyright (C) 2017-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 <cmath>
20
21
#include "
CepGen/Core/Exception.h
"
22
#include "
CepGen/Modules/StructureFunctionsFactory.h
"
23
#include "
CepGen/Physics/PDG.h
"
24
#include "
CepGen/Physics/Utils.h
"
25
#include "
CepGen/StructureFunctions/SigmaRatio.h
"
26
#include "
CepGen/Utils/Math.h
"
27
28
namespace
cepgen
{
29
namespace
sigrat {
30
Parameterisation::Parameterisation
(
const
ParametersList
& params)
31
:
NamedModule
(params), mp_(
PDG
::get().mass(
PDG
::proton)), mp2_(mp_ * mp_) {}
32
33
double
Parameterisation::theta
(
double
xbj,
double
q2) {
34
return
1. + 12. * (q2 / (q2 + 1.)) * (0.125 * 0.125 / (0.125 * 0.125 + xbj * xbj));
35
}
36
37
ParametersDescription
Parameterisation::description
() {
38
auto
desc =
ParametersDescription
();
39
desc.setDescription(
"Unnamed sigma ratio parameterisation"
);
40
return
desc;
41
}
42
43
//---------------------------------------------------------------------------------------------
44
46
class
E143
final :
public
Parameterisation
{
47
public
:
48
explicit
E143
(
const
ParametersList
& params)
49
:
Parameterisation
(params),
50
q2_b_(
steer
<double>(
"q2_b"
)),
51
lambda2_(
steer
<double>(
"lambda2"
)),
52
a_(
steer
<std::vector<double> >(
"a"
)),
53
b_(
steer
<std::vector<double> >(
"b"
)),
54
c_(
steer
<std::vector<double> >(
"c"
)) {
55
if
(a_.size() != 6)
56
throw
CG_FATAL
(
"E143"
) <<
"Parameter 'a' should have 6 components! Parsed "
<< a_ <<
"."
;
57
if
(b_.size() != 6)
58
throw
CG_FATAL
(
"E143"
) <<
"Parameter 'b' should have 6 components! Parsed "
<< b_ <<
"."
;
59
if
(c_.size() != 6)
60
throw
CG_FATAL
(
"E143"
) <<
"Parameter 'c' should have 6 components! Parsed "
<< c_ <<
"."
;
61
}
62
63
static
ParametersDescription
description
() {
64
auto
desc =
Parameterisation::description
();
65
desc.setDescription(
"E143 (experimental)"
);
66
desc.add<
double
>(
"q2_b"
, 0.34);
67
desc.add<
double
>(
"lambda2"
, 0.2 * 0.2);
68
desc.add<std::vector<double> >(
"a"
, {0.0485, 0.5470, 2.0621, -0.3804, 0.5090, -0.0285});
69
desc.add<std::vector<double> >(
"b"
, {0.0481, 0.6114, -0.3509, -0.4611, 0.7172, -0.0317});
70
desc.add<std::vector<double> >(
"c"
, {0.0577, 0.4644, 1.8288, 12.3708, -43.1043, 41.7415});
71
return
desc;
72
}
73
74
double
operator()
(
double
xbj,
double
q2,
double
& err)
const override
{
75
const
double
u = q2 / q2_b_;
76
const
double
inv_xl = 1. / std::log(q2 / lambda2_);
77
const
double
pa = (1. + a_.at(3) * xbj + a_.at(4) * xbj * xbj) * std::pow(xbj, a_.at(5));
78
const
double
pb = (1. + b_.at(3) * xbj + b_.at(4) * xbj * xbj) * std::pow(xbj, b_.at(5));
79
const
double
q2_thr = c_.at(3) * xbj + c_.at(4) * xbj * xbj + c_.at(5) * xbj * xbj * xbj;
80
const
double
th =
theta
(xbj, q2);
81
// here come the three fits
82
const
double
ra = a_.at(0) * inv_xl * th + a_.at(1) / std::pow(pow(q2, 4) + std::pow(a_.at(2), 4), 0.25) * pa,
83
rb = b_.at(0) * inv_xl * th + (b_.at(1) / q2 + b_.at(2) / (q2 * q2 + 0.3 * 0.3)) * pb,
84
rc = c_.at(0) * inv_xl * th + c_.at(1) /
utils::fastHypot
(q2 - q2_thr, c_.at(2));
85
86
const
double
r = (ra + rb + rc) / 3.;
// R is set to be the average of the three fits
87
// numerical safety for low-Q²
88
err = 0.0078 - 0.013 * xbj + (0.070 - 0.39 * xbj + 0.70 * xbj * xbj) / (1.7 + q2);
89
if
(q2 > q2_b_)
90
return
r;
91
return
r * 0.5 * (3. * u - u * u * u);
92
}
93
94
private
:
95
double
q2_b_, lambda2_;
96
std::vector<double> a_, b_, c_;
97
};
98
99
//---------------------------------------------------------------------------------------------
100
103
class
R1990
final :
public
Parameterisation
{
104
public
:
105
explicit
R1990
(
const
ParametersList
& params)
106
:
Parameterisation
(params), lambda2_(
steer
<double>(
"lambda2"
)), b_(
steer
<std::vector<double> >(
"b"
)) {
107
if
(b_.size() != 3)
108
throw
CG_FATAL
(
"R1990"
) <<
"Parameter 'b' should have 3 components! Parsed "
<< b_ <<
"."
;
109
}
110
111
static
ParametersDescription
description
() {
112
auto
desc =
Parameterisation::description
();
113
desc.setDescription(
"SLAC (experimental)"
);
114
desc.add<
double
>(
"lambda2"
, 0.04);
115
desc.add<std::vector<double> >(
"b"
, {0.0635, 0.5747, -0.3534});
116
return
desc;
117
}
118
119
double
operator()
(
double
xbj,
double
q2,
double
& err)
const override
{
120
err = 0.;
121
return
b_.at(0) +
theta
(xbj, q2) / std::log(q2 / lambda2_) + b_.at(1) / q2 + b_.at(2) / (q2 * q2 + 0.09);
122
}
123
124
private
:
125
double
lambda2_;
126
std::vector<double> b_;
127
};
128
129
//---------------------------------------------------------------------------------------------
130
132
class
CLAS
final :
public
Parameterisation
{
133
public
:
134
explicit
CLAS
(
const
ParametersList
& params)
135
:
Parameterisation
(params),
136
p_(
steer
<std::vector<double> >(
"p"
)),
137
wth_(
steer
<double>(
"wth"
)),
138
q20_(
steer
<double>(
"q20"
)) {
139
if
(p_.size() != 3)
140
throw
CG_FATAL
(
"CLAS"
) <<
"Parameter 'p' should have 3 components! Parsed "
<< p_ <<
"."
;
141
}
142
143
static
ParametersDescription
description
() {
144
auto
desc =
Parameterisation::description
();
145
desc.setDescription(
"CLAS (experimental)"
);
146
desc.add<std::vector<double> >(
"p"
, {0.041, 0.592, 0.331});
147
desc.add<
double
>(
"wth"
, 2.5);
148
desc.add<
double
>(
"q20"
, 0.3);
149
return
desc;
150
}
151
152
double
operator()
(
double
xbj,
double
q2,
double
& err)
const override
{
153
err = 0.;
154
//--- 2 kinematic regions: resonances ( w < wth ), and DIS ( w > wth )
155
const
double
w2 =
utils::mX2
(xbj, q2,
mp2_
), w = sqrt(w2);
156
const
double
xth = q2 / (q2 + wth_ * wth_ -
mp2_
);
// xth = x( W = wth )
157
const
double
zeta = std::log(25. * q2);
158
const
double
xitmp = (w < wth_) ?
theta
(xth, q2) :
theta
(xbj, q2);
159
const
double
tmp = p_.at(0) * xitmp / zeta + p_.at(1) / q2 - p_.at(2) / (q20_ * q20_ + q2 * q2);
160
if
(w >= wth_)
161
return
tmp;
162
return
tmp * std::pow((1. - xbj) / (1. - xth), 3);
163
}
164
165
private
:
166
std::vector<double> p_;
167
double
wth_, q20_;
168
};
169
170
//---------------------------------------------------------------------------------------------
171
173
class
SibirtsevBlunden
final :
public
Parameterisation
{
174
public
:
175
explicit
SibirtsevBlunden
(
const
ParametersList
& params)
176
:
Parameterisation
(params),
177
a_(
steer
<double>(
"a"
)),
178
b1_(
steer
<double>(
"b1"
)),
179
b2_(
steer
<double>(
"b2"
)),
180
c_(
steer
<double>(
"c"
)) {}
181
182
static
ParametersDescription
description
() {
183
auto
desc =
Parameterisation::description
();
184
desc.setDescription(
"Sibirtsev-Blunden (theoretical)"
);
185
desc.add<
double
>(
"a"
, 0.014);
186
desc.add<
double
>(
"b1"
, -0.07);
187
desc.add<
double
>(
"b2"
, -0.8);
188
desc.add<
double
>(
"c"
, 41.);
189
return
desc;
190
}
191
192
double
operator()
(
double
/* xbj */
,
double
q2,
double
& err)
const override
{
193
err = 0.;
194
//--- equation (10) of reference paper
195
return
a_ * q2 * (exp(b1_ * q2) + c_ * exp(b2_ * q2));
196
}
197
198
private
:
199
double
a_, b1_, b2_, c_;
200
};
201
}
// namespace sigrat
202
}
// namespace cepgen
203
using
cepgen::sigrat::CLAS
;
204
using
cepgen::sigrat::E143
;
205
using
cepgen::sigrat::R1990
;
206
using
cepgen::sigrat::SibirtsevBlunden
;
207
REGISTER_SIGRAT
(
"E143"
, 1,
E143
);
208
REGISTER_SIGRAT
(
"R1990"
, 2,
R1990
);
209
REGISTER_SIGRAT
(
"CLAS"
, 3,
CLAS
);
210
REGISTER_SIGRAT
(
"SibirtsevBlunden"
, 4,
SibirtsevBlunden
);
Exception.h
CG_FATAL
#define CG_FATAL(mod)
Definition
Exception.h:61
Math.h
PDG.h
Utils.h
SigmaRatio.h
StructureFunctionsFactory.h
REGISTER_SIGRAT
#define REGISTER_SIGRAT(name, id, obj)
Add a sigma ratio definition to the list of handled parameterisation.
Definition
StructureFunctionsFactory.h:37
cepgen::NamedModule
Base runtime module object.
Definition
NamedModule.h:28
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::Steerable::steer
T steer(const std::string &key) const
Retrieve a parameters as previously steered.
Definition
Steerable.h:39
cepgen::sigrat::CLAS
CLAS experimental R measurement.
Definition
SigmaRatio.cpp:132
cepgen::sigrat::CLAS::CLAS
CLAS(const ParametersList ¶ms)
Definition
SigmaRatio.cpp:134
cepgen::sigrat::CLAS::description
static ParametersDescription description()
Definition
SigmaRatio.cpp:143
cepgen::sigrat::CLAS::operator()
double operator()(double xbj, double q2, double &err) const override
Extract the longitudinal/transverse cross section ratio and associated error for a given couple.
Definition
SigmaRatio.cpp:152
cepgen::sigrat::E143
E143 experimental R measurement .
Definition
SigmaRatio.cpp:46
cepgen::sigrat::E143::E143
E143(const ParametersList ¶ms)
Definition
SigmaRatio.cpp:48
cepgen::sigrat::E143::description
static ParametersDescription description()
Definition
SigmaRatio.cpp:63
cepgen::sigrat::E143::operator()
double operator()(double xbj, double q2, double &err) const override
Extract the longitudinal/transverse cross section ratio and associated error for a given couple.
Definition
SigmaRatio.cpp:74
cepgen::sigrat::Parameterisation
A generic modelling of the ratio.
Definition
SigmaRatio.h:28
cepgen::sigrat::Parameterisation::theta
static double theta(double xbj, double q2)
dependence for QCD-matching of R at high-
Definition
SigmaRatio.cpp:33
cepgen::sigrat::Parameterisation::mp2_
const double mp2_
Squared proton mass, in GeV /c .
Definition
SigmaRatio.h:41
cepgen::sigrat::Parameterisation::Parameterisation
Parameterisation(const ParametersList ¶ms=ParametersList())
ratio computation algorithm constructor
Definition
SigmaRatio.cpp:30
cepgen::sigrat::Parameterisation::description
static ParametersDescription description()
Definition
SigmaRatio.cpp:37
cepgen::sigrat::R1990
SLAC experimental R measurement .
Definition
SigmaRatio.cpp:103
cepgen::sigrat::R1990::R1990
R1990(const ParametersList ¶ms)
Definition
SigmaRatio.cpp:105
cepgen::sigrat::R1990::description
static ParametersDescription description()
Definition
SigmaRatio.cpp:111
cepgen::sigrat::R1990::operator()
double operator()(double xbj, double q2, double &err) const override
Extract the longitudinal/transverse cross section ratio and associated error for a given couple.
Definition
SigmaRatio.cpp:119
cepgen::sigrat::SibirtsevBlunden
Sibirtsev & Blunden parameterisation of the R ratio .
Definition
SigmaRatio.cpp:173
cepgen::sigrat::SibirtsevBlunden::description
static ParametersDescription description()
Definition
SigmaRatio.cpp:182
cepgen::sigrat::SibirtsevBlunden::operator()
double operator()(double, double q2, double &err) const override
Extract the longitudinal/transverse cross section ratio and associated error for a given couple.
Definition
SigmaRatio.cpp:192
cepgen::sigrat::SibirtsevBlunden::SibirtsevBlunden
SibirtsevBlunden(const ParametersList ¶ms)
Definition
SigmaRatio.cpp:175
cepgen::utils::fastHypot
double fastHypot(double x, double y)
Definition
Math.cpp:33
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
StructureFunctions
SigmaRatio.cpp
Generated on Mon Jul 29 2024 for CepGen by
1.9.7