Back to home page

EIC code displayed by LXR

 
 

    


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     // all cross sections in mb.
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