File indexing completed on 2025-04-19 09:10:12
0001 #ifndef PHASIC__Scales__MINLO_Scale_Setter_H
0002 #define PHASIC__Scales__MINLO_Scale_Setter_H
0003
0004 #include "PHASIC++/Scales/Scale_Setter_Base.H"
0005
0006 #include "PHASIC++/Scales/Tag_Setter.H"
0007 #include "PHASIC++/Scales/Core_Scale_Setter.H"
0008 #include "PHASIC++/Channels/CSS_Kinematics.H"
0009 #include "PDF/Main/ISR_Handler.H"
0010
0011 namespace PHASIC {
0012
0013 struct MCS_Params {
0014 size_t m_i, m_j, m_k;
0015 ATOOLS::Flavour m_fl;
0016 double m_kt2, m_op2;
0017 ATOOLS::Vec4D m_pijt, m_pkt;
0018 ATOOLS::Poincare_Sequence m_lam;
0019 MCS_Params(const size_t &i,const size_t &j,const size_t &k,
0020 const ATOOLS::Flavour &fl=ATOOLS::Flavour(kf_gluon)):
0021 m_i(i),m_j(j), m_k(k), m_fl(fl), m_kt2(-1.0), m_op2(-1.0) {}
0022 bool operator<(const MCS_Params &ck) const
0023 {
0024 if (m_i<ck.m_i) return true; if (m_i>ck.m_i) return false;
0025 if (m_j<ck.m_j) return true; if (m_j>ck.m_j) return false;
0026 if (m_k<ck.m_k) return true; if (m_k>ck.m_k) return false;
0027 return m_fl<ck.m_fl;
0028 }
0029 void SetParams(const double &kt2,const double &dr,
0030 const ATOOLS::Vec4D &pijt,const ATOOLS::Vec4D &pkt,
0031 const ATOOLS::Poincare_Sequence &lam=
0032 ATOOLS::Poincare_Sequence())
0033 { m_kt2=dr*dr*kt2; m_op2=1.0/kt2; m_pijt=pijt; m_pkt=pkt; m_lam=lam; }
0034 };
0035
0036 class MINLO_Scale_Setter: public Scale_Setter_Base {
0037 private:
0038
0039 Core_Scale_Setter *p_core;
0040 PDF::ISR_Handler *p_isr;
0041
0042 std::vector<ATOOLS::Algebra_Interpreter*> m_calcs;
0043
0044 Tag_Setter m_tagset;
0045
0046 ATOOLS::Flavour_Vector m_f;
0047
0048 ATOOLS::Cluster_Amplitude *p_ampl, *p_vampl;
0049
0050 double m_rsf, m_fsf, m_dr, m_q02[2], m_muf2min, m_muravg[2];
0051 int m_noutmin, m_rproc, m_vproc, m_nproc, m_nfgsplit;
0052 int m_vmode, m_cmode, m_hqmode, m_order, m_orderrs, m_bumode;
0053 int m_usecomb, m_usepdfinfo, m_nlocpl, m_mufmode, m_murmode;
0054
0055 std::vector<ATOOLS::Flavour_Vector> m_cores;
0056
0057 void RegisterDefaults() const;
0058
0059 PDF::Cluster_Param CoreScale(ATOOLS::Cluster_Amplitude *const ampl) const;
0060
0061 void KT2(const ATOOLS::Cluster_Amplitude *ampl,
0062 const ATOOLS::Cluster_Leg *li,
0063 const ATOOLS::Cluster_Leg *lj,
0064 const ATOOLS::Cluster_Leg *lk,MCS_Params &cs) const;
0065
0066 bool Combine(ATOOLS::Cluster_Amplitude &l,const MCS_Params &cs) const;
0067
0068 double SetScales(ATOOLS::Cluster_Amplitude *ampl,const size_t &mode);
0069
0070 public:
0071
0072 MINLO_Scale_Setter(const Scale_Setter_Arguments &args);
0073
0074 ~MINLO_Scale_Setter();
0075
0076 double Calculate(const ATOOLS::Vec4D_Vector &p,const size_t &mode);
0077
0078 bool UpdateScale(const ATOOLS::QCD_Variation_Params &var);
0079
0080 void SetScale(const std::string &mu2tag,
0081 ATOOLS::Algebra_Interpreter &mu2calc);
0082
0083 inline ATOOLS::Cluster_Amplitude *Ampl() const { return p_ampl; }
0084
0085 inline double Q02(const int i) const { return m_q02[i]; }
0086
0087 inline double MuRAvg(const int i) const { return m_muravg[i]; }
0088
0089 inline double RSF() const { return m_rsf; }
0090
0091 };
0092
0093 }
0094
0095 #endif