Back to home page

EIC code displayed by LXR

 
 

    


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   };// end of struct MCS_Params
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 &ampl,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   };// end of class MINLO_Scale_Setter
0092 
0093 }// end of namespace PHASIC
0094 
0095 #endif