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