File indexing completed on 2025-04-19 09:09:48
0001 #ifndef AMISIC_Perturbative_MI_Process_Group_H
0002 #define AMISIC_Perturbative_MI_Process_Group_H
0003
0004 #include "AMISIC++/Perturbative/MI_Process.H"
0005 #include "AMISIC++/Tools/MI_Parameters.H"
0006 #include "MODEL/Main/Model_Base.H"
0007 #include "MODEL/Main/Running_AlphaQED.H"
0008 #include "MODEL/Main/Running_AlphaS.H"
0009 #include "PDF/Main/ISR_Handler.H"
0010 #include "YFS/Main/YFS_Handler.H"
0011 #include <list>
0012 #include <array>
0013
0014 namespace AMISIC {
0015 class MI_Process_Group {
0016 protected:
0017 std::string m_name;
0018 scale_scheme::code m_muR_scheme;
0019 double m_muR_fac, m_muF_fac;
0020 double m_lastxs, m_pt02, m_scale, m_pref;
0021
0022 MODEL::One_Running_AlphaS * p_alphaS;
0023 MODEL::Running_AlphaQED * p_alpha;
0024 std::array<PDF::PDF_Base *, 2> p_pdf;
0025
0026 std::list<XS_Base * > m_me2s;
0027 std::list<MI_Process * > m_processes;
0028
0029 virtual double Scale(const double & pt2) const;
0030 virtual double Coupling(const double & scale) const=0;
0031 virtual double SoftCorrection(const double & pt2) const;
0032 virtual void PreCalculate(const double & shat,const double & that,
0033 const double & uhat);
0034 public:
0035 MI_Process_Group(const std::string & name);
0036 virtual ~MI_Process_Group();
0037
0038 virtual double operator()(const double & shat,const double & that,
0039 const double & uhat);
0040 virtual MI_Process * SelectProcess();
0041
0042 inline const std::string & Name() const{ return m_name; }
0043 inline const double & LastXS() const { return m_lastxs; }
0044 virtual void Output() const;
0045
0046 inline void SetPDFs(PDF::PDF_Base * pdf0,PDF::PDF_Base * pdf1) {
0047 p_pdf[0] = pdf0; p_pdf[1] = pdf1;
0048 }
0049 inline void SetAlphaS(MODEL::One_Running_AlphaS * alpS) { p_alphaS = alpS; }
0050 inline void SetAlpha(MODEL::Running_AlphaQED * alp) { p_alpha = alp; }
0051 inline void SetScale(const double & scale) { m_scale = scale; }
0052 inline void SetPT02(const double & pt02) { m_pt02 = pt02; }
0053 };
0054
0055 class MI_GG_Processes: public MI_Process_Group {
0056 private:
0057 size_t m_Nqq;
0058 double Coupling(const double & scale) const;
0059 public:
0060 MI_GG_Processes();
0061 MI_Process * SelectProcess();
0062 };
0063
0064 class MI_QQB_Processes: public MI_Process_Group {
0065 double Coupling(const double & scale) const;
0066 public:
0067 MI_QQB_Processes();
0068 };
0069
0070 class MI_QQ_Processes: public MI_Process_Group {
0071 double Coupling(const double & scale) const;
0072 public:
0073 MI_QQ_Processes();
0074 MI_Process * SelectProcess();
0075 };
0076
0077
0078 class MI_QG_Processes: public MI_Process_Group {
0079 double Coupling(const double & scale) const;
0080 public:
0081 MI_QG_Processes();
0082 MI_Process * SelectProcess();
0083 };
0084
0085
0086 class MI_Q1Q2_Processes: public MI_Process_Group {
0087 double Coupling(const double & scale) const;
0088 public:
0089 MI_Q1Q2_Processes();
0090 MI_Process * SelectProcess();
0091 };
0092
0093 class MI_QG_QGamma_Processes: public MI_Process_Group {
0094 double Coupling(const double & scale) const;
0095 public:
0096 MI_QG_QGamma_Processes();
0097 MI_Process * SelectProcess();
0098 };
0099
0100 class MI_QQ_GGamma_Processes: public MI_Process_Group {
0101 double Coupling(const double & scale) const;
0102 public:
0103 MI_QQ_GGamma_Processes();
0104 MI_Process * SelectProcess();
0105 };
0106 }
0107
0108 #endif