#ifndef PHASIC_Scales_KFactor_Setter_Base_H #define PHASIC_Scales_KFactor_Setter_Base_H #include "ATOOLS/Org/Exception.H" #include "PHASIC++/Scales/Scale_Setter_Base.H" namespace PHASIC { struct KFactor_Setter_Arguments { Process_Base *p_proc; std::string m_kfac; KFactor_Setter_Arguments(const std::string& kfac, Process_Base* proc=nullptr): m_kfac{kfac}, p_proc{proc} {} };// end of class KFactor_Setter_Arguments class KFactor_Setter_Base { public: typedef ATOOLS::Getter_Function KFactor_Getter_Function; protected: Process_Base *p_proc; double m_weight; bool m_on; public: KFactor_Setter_Base(const KFactor_Setter_Arguments &args); virtual ~KFactor_Setter_Base(); // compute KFactor according to kinematics and flavours of p_proc virtual double KFactor(const int mode=0) = 0; // compute KFactor according to kinematics and flavours of NLO subevent virtual double KFactor(const ATOOLS::NLO_subevt& evt); virtual bool UpdateKFactor(const ATOOLS::QCD_Variation_Params &var); inline Process_Base *Process() const { return p_proc; } inline void SetOn(const bool on) { m_on=on; } inline bool On() const { return m_on; } inline double LastKFactor() const { return m_weight; } static void ShowSyntax(const size_t i); };// end of class KFactor_Setter_Base }// end of namespace PHASIC #endif