Back to home page

EIC code displayed by LXR

 
 

    


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