cepgen
is hosted by
Hepforge
,
IPPP Durham
CepGen
1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
Schaefer.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
* 2017 Wolfgang Schaefer
5
*
6
* This program is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
20
#include "
CepGen/Core/Exception.h
"
21
#include "
CepGen/Modules/StructureFunctionsFactory.h
"
22
#include "
CepGen/Physics/Utils.h
"
23
#include "
CepGen/StructureFunctions/Parameterisation.h
"
24
25
namespace
cepgen
{
26
namespace
strfun {
28
class
Schaefer
final :
public
Parameterisation
{
29
public
:
31
explicit
Schaefer
(
const
ParametersList
& params)
32
:
Parameterisation
(params),
33
q2_cut_(
steer
<double>(
"Q2cut"
)),
34
w2_lim_(
steer
<std::vector<double> >(
"W2limits"
)),
35
higher_twist_(
steer
<double>(
"higherTwist"
)),
36
res_params_(
steer
<
ParametersList
>(
"resonancesSF"
)),
37
pert_params_(
steer
<
ParametersList
>(
"perturbativeSF"
)),
38
cont_params_(
steer
<
ParametersList
>(
"continuumSF"
)),
39
resonances_model_(StructureFunctionsFactory::get().build(res_params_)),
40
perturbative_model_(StructureFunctionsFactory::get().build(pert_params_)),
41
continuum_model_(StructureFunctionsFactory::get().build(cont_params_)) {
42
CG_DEBUG
(
"LUXlike"
) <<
"LUXlike structure functions evaluator built with:\n"
43
<<
" * Q² cut: "
<< q2_cut_ <<
" GeV²\n"
44
<<
" * W² ranges: "
<< w2_lim_.at(0) <<
" GeV² / "
<< w2_lim_.at(1) <<
" GeV²\n"
45
<<
" * resonances model: "
<< *resonances_model_ <<
"\n"
46
<<
" * perturbative model: "
<< *perturbative_model_ <<
"\n"
47
<<
" * continuum model: "
<< *continuum_model_ <<
"\n"
48
<<
" * higher-twist corr: "
<< higher_twist_ <<
"."
;
49
if
(w2_lim_.size() < 2)
50
throw
CG_FATAL
(
"LUXlike"
) <<
"Invalid number of transition regions for W^2. Should have two, got "
<< w2_lim_
51
<<
"."
;
52
inv_omega_range_ = 1. / (w2_lim_.at(1) - w2_lim_.at(0));
53
if
(inv_omega_range_ <= 0.)
54
throw
CG_FATAL
(
"LUXlike"
) <<
"Invalid W^2 transition regions definitions: "
<< w2_lim_.at(0) <<
" / "
55
<< w2_lim_.at(1) <<
" GeV^2!"
;
56
}
57
58
static
ParametersDescription
description
() {
59
auto
desc =
Parameterisation::description
();
60
desc.setDescription(
"LUXlike (hybrid)"
);
61
desc.add<
double
>(
"Q2cut"
, 9.);
62
desc.add<std::vector<double> >(
"W2limits"
, {3., 4.});
63
desc.add<
double
>(
"higherTwist"
, 5.5);
64
desc.add(
"resonancesSF"
, StructureFunctionsFactory::get().describeParameters(
"ChristyBosted"
));
65
desc.add(
"perturbativeSF"
, StructureFunctionsFactory::get().describeParameters(
"MSTWGrid"
));
66
desc.add(
"continuumSF"
, StructureFunctionsFactory::get().describeParameters(
"GD11p"
));
67
return
desc;
68
}
69
70
void
eval
()
override
{
71
const
double
w2 =
utils::mX2
(
args_
.
xbj
,
args_
.
q2
,
mp2_
);
72
73
if
(
args_
.
q2
< q2_cut_) {
74
if
(w2 < w2_lim_.at(0)) {
75
setF2
(resonances_model_->F2(
args_
.
xbj
,
args_
.
q2
));
76
setFL
(resonances_model_->FL(
args_
.
xbj
,
args_
.
q2
));
77
}
else
if
(w2 < w2_lim_.at(1)) {
78
const
double
r = rho(w2);
79
setF2
(r * continuum_model_->F2(
args_
.
xbj
,
args_
.
q2
) +
80
(1. - r) * resonances_model_->F2(
args_
.
xbj
,
args_
.
q2
));
81
setFL
(r * continuum_model_->FL(
args_
.
xbj
,
args_
.
q2
) +
82
(1. - r) * resonances_model_->FL(
args_
.
xbj
,
args_
.
q2
));
83
}
else
{
84
setF2
(continuum_model_->F2(
args_
.
xbj
,
args_
.
q2
));
85
setFL
(continuum_model_->FL(
args_
.
xbj
,
args_
.
q2
));
86
}
87
}
else
{
88
if
(w2 < w2_lim_.at(1)) {
89
setF2
(continuum_model_->F2(
args_
.
xbj
,
args_
.
q2
));
90
setFL
(continuum_model_->FL(
args_
.
xbj
,
args_
.
q2
));
91
}
else
{
92
setF2
(perturbative_model_->F2(
args_
.
xbj
,
args_
.
q2
));
93
setFL
(perturbative_model_->FL(
args_
.
xbj
,
args_
.
q2
) * (1. + higher_twist_ /
args_
.
q2
));
94
}
95
}
96
}
97
98
private
:
99
double
rho(
double
w2)
const
{
100
const
double
omega = (w2 - w2_lim_.at(0)) * inv_omega_range_;
101
const
double
omega2 = omega * omega;
102
return
2. * omega2 - omega2 * omega2;
103
}
104
106
const
double
q2_cut_;
111
const
std::vector<double> w2_lim_;
113
const
double
higher_twist_;
114
const
ParametersList
res_params_, pert_params_, cont_params_;
115
117
const
std::unique_ptr<Parameterisation> resonances_model_;
119
const
std::unique_ptr<Parameterisation> perturbative_model_;
121
const
std::unique_ptr<Parameterisation> continuum_model_;
122
double
inv_omega_range_{-1.};
123
};
124
}
// namespace strfun
125
}
// namespace cepgen
126
using
cepgen::strfun::Schaefer
;
127
REGISTER_STRFUN
(
"LUXLike"
, 301,
Schaefer
);
Exception.h
CG_FATAL
#define CG_FATAL(mod)
Definition
Exception.h:61
CG_DEBUG
#define CG_DEBUG(mod)
Definition
Message.h:220
Utils.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::Steerable::steer
T steer(const std::string &key) const
Retrieve a parameters as previously steered.
Definition
Steerable.h:39
cepgen::strfun::Parameterisation
Base object for the parameterisation of nucleon structure functions.
Definition
Parameterisation.h:30
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::strfun::Parameterisation::setFL
Parameterisation & setFL(double fl)
Definition
Parameterisation.cpp:88
cepgen::strfun::Schaefer
LUX-like hybrid modelling of structure functions.
Definition
Schaefer.cpp:28
cepgen::strfun::Schaefer::description
static ParametersDescription description()
Definition
Schaefer.cpp:58
cepgen::strfun::Schaefer::Schaefer
Schaefer(const ParametersList ¶ms)
User-steered Schäfer hybrid structure functions calculator.
Definition
Schaefer.cpp:31
cepgen::strfun::Schaefer::eval
void eval() override
Local structure functions evaluation method.
Definition
Schaefer.cpp:70
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
Schaefer.cpp
Generated on Mon Jul 29 2024 for CepGen by
1.9.7