File indexing completed on 2025-04-19 09:09:48
0001 #ifndef AMISIC_Tools_Hadronic_XSec_Calculator_H
0002 #define AMISIC_Tools_Hadronic_XSec_Calculator_H
0003
0004 #include "AMISIC++/Tools/MI_Parameters.H"
0005 #include "ATOOLS/Phys/Flavour.H"
0006 #include <array>
0007
0008 namespace MODEL{ class Model_Base; }
0009
0010 namespace AMISIC {
0011 struct xsec_type {
0012 enum code {
0013 nucleon_nucleon = 0,
0014 photon_nucleon = 1,
0015 nucleon_photon = 2,
0016 photon_photon = 3,
0017 hadron_hadron = 1,
0018 none = 99
0019 };
0020 };
0021
0022 class Hadronic_XSec_Calculator {
0023 public:
0024 static double s_slopes[4], s_X[4][4], s_Y[4][4], s_c[4][4][8], s_d[4][4][9];
0025 private:
0026
0027 std::map<ATOOLS::Flavour, size_t> m_indexmap;
0028 std::map<ATOOLS::Flavour, double> m_fVs;
0029 double m_beta0[4];
0030 void FixTables();
0031
0032 std::array<ATOOLS::Flavour,2> m_flavs;
0033 xsec_type::code m_type;
0034 double m_mass_proton, m_mass_proton2, m_mass_pi;
0035 std::array<double, 2> m_masses, m_masses2;
0036 double m_mres, m_cres, m_s1, m_Ypp, m_c0, m_c1, m_prefElastic, m_prefSD, m_prefDD;
0037 double m_eps_pomeron, m_alphaP_pomeron, m_triple_pomeron, m_eta_reggeon;
0038 double m_alphaQED;
0039 double m_s, m_xstot, m_xsel, m_xssdA, m_xssdB, m_xsdd, m_xsnd, m_xsnd_norm;
0040 size_t m_testmode;
0041
0042 void FixType();
0043 void TestXSecs();
0044 void CalculateHHXSecs();
0045 void CalculateHGammaXSecs(const size_t photon);
0046 void CalculatePhotonPhotonXSecs();
0047 double TotalXSec(const size_t hadtags[2]) const;
0048 double IntElXSec(const size_t hadtags[2], const double & xstot) const;
0049 double IntSDXSec(const size_t hadtags[2], const size_t & diff,const double masses[2]) const;
0050 double IntDDXSec(const size_t hadtags[2], const double masses[2]) const;
0051 double CalculateDoubleDXSec() const;
0052 public:
0053 explicit Hadronic_XSec_Calculator(MODEL::Model_Base *model,
0054 const ATOOLS::Flavour & fl1,
0055 const ATOOLS::Flavour & fl2);
0056 ~Hadronic_XSec_Calculator() = default;
0057
0058 void operator()(double s);
0059 void Output() const;
0060 inline double XSnd(const double & s=-1.) {
0061 if (s>0.) (*this)(s);
0062 return m_xsnd;
0063 }
0064 inline const double & XSndNorm() const { return m_xsnd_norm; }
0065 };
0066 }
0067
0068 #endif