File indexing completed on 2025-04-19 09:10:05
0001 #ifndef MCATNLO_Showers_Shower_H
0002 #define MCATNLO_Showers_Shower_H
0003
0004 #include "PDF/Main/ISR_Handler.H"
0005 #include "ATOOLS/Org/STL_Tools.H"
0006 #include "ATOOLS/Phys/Weights.H"
0007 #include "MCATNLO/Showers/Sudakov.H"
0008 #include "MCATNLO/Tools/Singlet.H"
0009 #include "MCATNLO/Showers/Kinematics_Base.H"
0010
0011 namespace ATOOLS {
0012
0013 class Cluster_Leg;
0014
0015 }
0016
0017 namespace MCATNLO {
0018
0019 class CS_Gamma;
0020
0021 class Shower {
0022 private:
0023 Kinematics_FF m_kinFF;
0024 Kinematics_FI m_kinFI;
0025 Kinematics_IF m_kinIF;
0026 Kinematics_II m_kinII;
0027 ATOOLS::Flavour m_flavA, m_flavB, m_flavC, m_flav;
0028 Singlet * p_actual;
0029 Sudakov m_sudakov;
0030 PDF::ISR_Handler * p_isr;
0031 Parton * m_last[4];
0032 int m_kscheme;
0033
0034 ATOOLS::Cluster_Leg *p_old[2];
0035
0036 CS_Gamma *p_gamma;
0037 ATOOLS::Weights_Map m_weightsmap;
0038 bool m_reweight;
0039 double m_maxreweightfactor;
0040
0041 void ResetScales(Parton *const split);
0042 void SetSplitInfo(const ATOOLS::Vec4D &psplit,
0043 const ATOOLS::Vec4D &pspect,
0044 Parton *const split,Parton *const newb,
0045 Parton *const newc,const int mode);
0046 int SetXBj(Parton *const p) const;
0047 Parton *SelectSplitting(double &);
0048 bool PerformSplitting();
0049 bool TrialEmission(double &,Parton *);
0050 int RemnantTest(Parton *const p);
0051 int UpdateDaughters(Parton *const split,Parton *const newpB,
0052 Parton *const newpC,double &jcv);
0053 int MakeKinematics(Parton *const split,const ATOOLS::Flavour &fla,
0054 const ATOOLS::Flavour &flb,const ATOOLS::Flavour &flc,
0055 double &jcv);
0056
0057 public:
0058 Shower(PDF::ISR_Handler *,const int qed);
0059 ~Shower();
0060 bool EvolveShower(Singlet *,const size_t &,size_t &);
0061 double Reweight(ATOOLS::QCD_Variation_Params*, Parton& splitter);
0062 void SetMS(const ATOOLS::Mass_Selector *const ms);
0063 inline Sudakov *GetSudakov() { return &m_sudakov; }
0064 inline const Sudakov *GetSudakov() const { return &m_sudakov; }
0065 inline Parton *const *GetLast() const { return m_last; }
0066 inline ATOOLS::Cluster_Leg *GetOld(const int i) const { return p_old[i]; }
0067
0068 inline const Kinematics_FF *KinFF() const { return &m_kinFF; }
0069 inline const Kinematics_FI *KinFI() const { return &m_kinFI; }
0070 inline const Kinematics_IF *KinIF() const { return &m_kinIF; }
0071 inline const Kinematics_II *KinII() const { return &m_kinII; }
0072
0073 inline Kinematics_FF *KinFF() { return &m_kinFF; }
0074 inline Kinematics_FI *KinFI() { return &m_kinFI; }
0075 inline Kinematics_IF *KinIF() { return &m_kinIF; }
0076 inline Kinematics_II *KinII() { return &m_kinII; }
0077
0078 inline int KinScheme() const { return m_kscheme; }
0079
0080 inline void SetGamma(CS_Gamma *const gamma) { p_gamma=gamma; }
0081
0082 inline CS_Gamma *Gamma() const { return p_gamma; }
0083
0084 inline const ATOOLS::Weights_Map& WeightsMap() const { return m_weightsmap; }
0085
0086 inline const ATOOLS::Flavour &ActiveFlav() const { return m_flav; }
0087
0088 inline PDF::ISR_Handler *ISR() { return p_isr; }
0089 };
0090 }
0091
0092 #endif