Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:10:12

0001 #ifndef PHASIC_Scales_Scale_Setter_Base_H
0002 #define PHASIC_Scales_Scale_Setter_Base_H
0003 
0004 #include "ATOOLS/Org/Getter_Function.H"
0005 #include "MODEL/Main/Coupling_Data.H"
0006 #include "ATOOLS/Phys/Cluster_Amplitude.H"
0007 #include "PDF/Main/Cluster_Definitions_Base.H"
0008 #include "ATOOLS/Phys/NLO_Subevt.H"
0009 #include "ATOOLS/Phys/Variations.H"
0010 #include "ATOOLS/Math/Vector.H"
0011 
0012 namespace MODEL { class Model_Base; }
0013 
0014 namespace PHASIC {
0015 
0016   class Process_Base;
0017 
0018   struct Scale_Setter_Arguments {
0019     Process_Base *p_proc;
0020     MODEL::Model_Base *p_model;
0021     MODEL::Coupling_Map *p_cpls;
0022     std::string m_scale, m_coupling;
0023     size_t m_nin, m_nout;
0024     Scale_Setter_Arguments(MODEL::Model_Base *const model,
0025                const std::string &scale="",
0026                const std::string &coupling=""):
0027       p_proc(NULL), p_model(model), p_cpls(NULL),
0028       m_scale(scale), m_coupling(coupling) {}
0029   };// end of class Scale_Setter_Arguments
0030 
0031   class Scale_Setter_Base {
0032   public:
0033 
0034     typedef ATOOLS::Getter_Function
0035     <Scale_Setter_Base,Scale_Setter_Arguments> Scale_Getter_Function;
0036 
0037   protected:
0038 
0039     Process_Base *p_proc;
0040 
0041     MODEL::Model_Base   *p_model;
0042     MODEL::Coupling_Map *p_cpls;
0043 
0044     ATOOLS::Vec4D_Vector    m_p;
0045     ATOOLS::NLO_subevtlist *p_subs;
0046 
0047     std::vector<double> m_scale, m_escale, m_fac;
0048 
0049     std::string m_coupling;
0050 
0051     size_t m_nin, m_nout;
0052     size_t m_l1, m_l2;
0053 
0054     ATOOLS::ClusterAmplitude_Vector m_ampls;
0055 
0056     virtual double Calculate(const ATOOLS::Vec4D_Vector &p,
0057                  const size_t &mode) = 0;
0058 
0059   public:
0060 
0061     Scale_Setter_Base(const Scale_Setter_Arguments &args);
0062 
0063     virtual ~Scale_Setter_Base();
0064 
0065     virtual bool Initialize();
0066 
0067     void SetCouplings();
0068 
0069     double HTM() const;
0070     double PTM() const;
0071     double HT() const;
0072     double HTMprime() const;
0073     double HTprime() const;
0074 
0075     ATOOLS::Vec4D PSum() const;
0076 
0077     double CalculateScale(const ATOOLS::Vec4D_Vector &p,const size_t mode=0);
0078 
0079     virtual bool UpdateScale(const ATOOLS::QCD_Variation_Params &var);
0080 
0081     inline void SetFixedScale(const std::vector<double> &s) { m_escale=s; }
0082 
0083     inline double Scale(const ATOOLS::stp::id type,const int mode=0) const
0084     { return mode==0?m_scale[type]:m_fac[type]*m_scale[type]; }
0085 
0086     inline const std::vector<double> &Scales() const { return m_scale; }
0087 
0088     inline const std::vector<double> &FixedScales() const { return m_escale; }
0089 
0090     inline Process_Base *Process() const { return p_proc; }
0091 
0092     inline ATOOLS::ClusterAmplitude_Vector &Amplitudes() { return m_ampls; }
0093 
0094     inline MODEL::Coupling_Map *Couplings() const { return p_cpls; }
0095 
0096     static void ShowSyntax(const size_t i);
0097 
0098     inline const ATOOLS::Vec4D_Vector &Momenta() const { return m_p; }
0099 
0100     inline size_t NIn() const  { return m_nin;  }
0101     inline size_t NOut() const { return m_nout; }
0102 
0103   };// end of class Scale_Setter_Base
0104 
0105 }// end of namespace PHASIC
0106 
0107 #endif