File indexing completed on 2025-04-19 09:10:01
0001 #ifndef DIM__Main__Gamma_H
0002 #define DIM__Main__Gamma_H
0003
0004 #include "DIM/Shower/Shower.H"
0005 #include "PHASIC++/Process/Subprocess_Info.H"
0006 #include "ATOOLS/Phys/Cluster_Amplitude.H"
0007
0008 namespace PHASIC {
0009 class Process_Base;
0010 class Single_Process;
0011 }
0012
0013 namespace DIM {
0014
0015 struct Weight_Key {
0016 size_t m_ij, m_k;
0017 inline Weight_Key(const size_t &ij,const size_t &k):
0018 m_ij(ij), m_k(k) {}
0019 inline bool operator<(const Weight_Key &wk) const
0020 { return m_ij<wk.m_ij?true:(m_ij>wk.m_ij?false:m_k<wk.m_k); }
0021 };
0022
0023 std::ostream &operator<<(std::ostream &str,const Weight_Key &k);
0024
0025 struct Weight_Value {
0026 PHASIC::Process_Base *p_proc;
0027 const Kernel *p_sf;
0028 double m_me, m_b, m_muf2, m_mur2, m_muq2;
0029 inline Weight_Value(PHASIC::Process_Base *const proc=NULL):
0030 p_proc(proc), p_sf(NULL), m_me(0.0), m_b(0.0),
0031 m_muf2(0.0), m_mur2(0.0), m_muq2(0.0) {}
0032 };
0033
0034 std::ostream &operator<<(std::ostream &str,const Weight_Value &w);
0035
0036 typedef std::map<Weight_Key,Weight_Value> Weight_Map;
0037
0038 class MCatNLO;
0039
0040 class Gamma {
0041 private:
0042
0043 MCatNLO *p_dire;
0044 Shower *p_shower;
0045
0046 ATOOLS::Mass_Selector *p_ms;
0047
0048 double m_weight;
0049
0050 Weight_Value Differential(ATOOLS::Cluster_Amplitude *const ampl,
0051 const ATOOLS::nlo_type::code type=ATOOLS::nlo_type::lo,
0052 const std::string add="") const;
0053
0054 Weight_Map CalculateWeight(ATOOLS::Cluster_Amplitude *const ampl);
0055
0056 MC_Weight TrialWeight(ATOOLS::Cluster_Amplitude *const ampl);
0057
0058 public:
0059
0060 Gamma(MCatNLO *const dire,Shower *const shower);
0061
0062 bool Reject();
0063
0064 inline double Weight() const { return m_weight; }
0065
0066 };
0067
0068 }
0069
0070 #endif