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