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 };
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 };
0104
0105 }
0106
0107 #endif