Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-01-10 10:28:28

0001 #ifndef AMISIC_Perturbative_MI_Processes_H
0002 #define AMISIC_Perturbative_MI_Processes_H
0003 
0004 #include "AMISIC++/Perturbative/MI_Process_Group.H"
0005 #include "AMISIC++/Perturbative/Sudakov_Argument.H"
0006 #include "AMISIC++/Tools/Hadronic_XSec_Calculator.H"
0007 #include "PHASIC++/Process/ME_Generator_Base.H"
0008 #include <array>
0009 
0010 namespace PDF    { class Remnant_Base; }
0011 namespace BEAM   { class Beam_Spectra_Handler; }
0012 
0013 namespace AMISIC {
0014   class MI_Processes : public PHASIC::ME_Generator_Base {
0015   private:
0016     PDF::ISR_Handler             * p_isr;
0017     YFS::YFS_Handler             * p_yfs;
0018     std::array<PDF::PDF_Base *, 2> p_pdf;
0019     MODEL::One_Running_AlphaS    * p_alphaS;
0020     MODEL::Running_AlphaQED      * p_alpha;
0021     Hadronic_XSec_Calculator     * p_xsecs;
0022     Sudakov_Argument             * p_sudakov;
0023 
0024     double      m_muFfac, m_pt0, m_pt02, m_ptmin, m_ptmin2, m_ptmax2;
0025     std::array<double, 2> m_xmin;
0026     double      m_ecms, m_S, m_S_lab, m_lastxs;
0027     std::string m_scale_scheme, m_kfactor_scheme;
0028     size_t      m_pt2bins, m_sbins, m_MCpoints;
0029     std::list<MI_Process_Group * >   m_groups;
0030 
0031     bool m_variable_s;
0032 
0033     bool InitializeAllProcesses();
0034     void SetPDFs();
0035     void SetAlphaS();
0036     void CalcPDFs(const double & x1,const double & x2,const double & scale);
0037     bool PrepareSudakovFactor();
0038     void Test();
0039   public:
0040     explicit MI_Processes(const bool & variable_s);
0041     ~MI_Processes();
0042 
0043     bool Initialize(MODEL::Model_Base *const model,
0044             BEAM::Beam_Spectra_Handler *const beam,
0045             PDF::ISR_Handler *const isr,
0046             YFS::YFS_Handler *const yfs);
0047     double operator()(const double & shat,const double & that,
0048                 const double & uhat,const double & x1,const double & x2);
0049     double dSigma(const double & pt2);
0050     MI_Process * SelectProcess();
0051     void         UpdateS(const double & s);
0052 
0053     inline const double  & Ecms()      const { return m_ecms; }
0054     inline const double  & S()         const { return m_S; }
0055     inline const double  & PT02()      const { return m_pt02; }
0056     inline const double  & PTMin()     const { return m_ptmin; }
0057     inline const double  & PT2Min()    const { return m_ptmin2; }
0058     inline const size_t    Size()      const { return m_groups.size(); }
0059     inline const bool    & VariableS() const { return m_variable_s; }
0060     inline const double  & PDFXmin(const size_t beam) const { return m_xmin[beam]; }
0061     inline double XSratio(const double & s)              { return p_sudakov->XSratio(s); }
0062     inline PDF::PDF_Base * PDF(const size_t beam) const  { return p_pdf[beam]; }
0063     inline Sudakov_Argument         * GetSudakov() const { return p_sudakov; }
0064     inline MODEL::One_Running_AlphaS    * AlphaS() const     { return p_alphaS; }
0065     inline Hadronic_XSec_Calculator * GetXSecs() const   { return p_xsecs; }
0066     inline void SetMassMode(const int & mode) {
0067       if (mode==0) abort();
0068       m_massmode = 1;
0069     }
0070     inline void SetXSecCalculator(AMISIC::Hadronic_XSec_Calculator *const xsecs) {
0071       p_xsecs = xsecs;
0072     }
0073     inline int  PerformTests() { return 0; }
0074     inline bool NewLibraries() { return false; }
0075 
0076     PHASIC::Process_Base *InitializeProcess(const PHASIC::Process_Info &,
0077                         bool add) final {
0078       THROW(fatal_error,"MI_Processes::InitializeProcess should not be called.");
0079     }
0080   };
0081 }
0082 
0083 #endif