cepgen is hosted by Hepforge, IPPP Durham
CepGen 1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
KleinElasticHeavyIonKTFlux.cpp
Go to the documentation of this file.
1/*
2 * CepGen: a central exclusive processes event generator
3 * Copyright (C) 2023-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
26#include "CepGen/Physics/PDG.h"
28
29namespace cepgen {
32 class KleinElasticHeavyIonKTFlux final : public KTFlux {
33 public:
35 : KTFlux(params),
36 hi_(HeavyIon::fromPdgId(steer<pdgid_t>("heavyIon"))),
37 ff_(FormFactorsFactory::get().build(params.get<ParametersList>("formFactors"))) {}
38
40 auto desc = KTFlux::description();
41 desc.setDescription("Elastic photon emission from heavy ion (from Starlight)");
42 desc.addAs<pdgid_t, HeavyIon>("heavyIon", HeavyIon::Pb());
43 desc.add<ParametersDescription>("formFactors", FormFactorsFactory::get().describeParameters("HeavyIonDipole"));
44 return desc;
45 }
46
47 bool fragmenting() const override { return false; }
48 double mass2() const override { return hi_.A * hi_.A * mp2_; }
49 pdgid_t partonPdgId() const override { return PDG::photon; }
50
51 double fluxQ2(double x, double kt2, double q2) const override {
52 if (!x_range_.contains(x))
53 return 0.;
54
55 const auto ff = (*ff_)(q2);
56 const double ela1 = pow(kt2 / q2 / (1. - x), 2);
57 const double ela2 = pow(ff.GE, 2);
58 //const double ela3 = kt2 / q2;
59 const auto z = (unsigned short)hi_.Z;
60 return prefactor_ * z * z * ela1 * ela2 / q2;
61 }
62
63 double fluxMX2(double x, double kt2, double) const override {
64 return fluxQ2(x, kt2, utils::kt::q2(x, kt2, mass2()));
65 }
66
67 private:
68 const HeavyIon hi_;
69 std::unique_ptr<formfac::Parameterisation> ff_;
70 };
71} // namespace cepgen
72
73REGISTER_KT_FLUX("KleinElasticHI", 101, KleinElasticHeavyIonKTFlux);
#define REGISTER_KT_FLUX(name, id, obj)
Add a generic KT-factorised flux evaluator builder definition.
static ParametersDescription description()
Definition KTFlux.cpp:26
Realistic nuclear form-factor as used in STARLIGHT See .
bool fragmenting() const override
Is initiator particle fragmenting after parton emission?
KleinElasticHeavyIonKTFlux(const ParametersList &params)
double fluxMX2(double x, double kt2, double) const override
Compute the kt-dependent flux for this x value and remnant mass.
double fluxQ2(double x, double kt2, double q2) const override
Compute the kt-dependent flux for this x value and virtuality.
pdgid_t partonPdgId() const override
Parton PDG identifier.
double mass2() const override
Initiator particle squared mass (in )
bool contains(double val, bool exclude_boundaries=false) const
Check if value is inside limits' boundaries.
Definition Limits.cpp:77
@ photon
Definition PDG.h:41
A description object for parameters collection.
const double prefactor_
Definition PartonFlux.h:38
const double mp2_
Definition PartonFlux.h:39
const Limits x_range_
Definition PartonFlux.h:40
T steer(const std::string &key) const
Retrieve a parameters as previously steered.
Definition Steerable.h:39
double q2(double x, double kt2, double mi2, double mx2)
Compute the virtuality from longitudinal loss/transverse virtuality/diffractive mass.
Definition Utils.cpp:60
Common namespace for this Monte Carlo generator.
unsigned long long pdgid_t
Alias for the integer-like particle PDG id.
Heavy ion container (Z+A)
Definition HeavyIon.h:44
static HeavyIon Pb()
Standard lead.
Definition HeavyIon.h:77
Element Z
Atomic number.
Definition HeavyIon.h:85
unsigned short A
Mass number.
Definition HeavyIon.h:87