File indexing completed on 2025-04-19 09:10:01
0001 #ifndef CSSHOWER_Tools_Singlet_H
0002 #define CSSHOWER_Tools_Singlet_H
0003
0004 #include "CSSHOWER++/Tools/Parton.H"
0005 #include "ATOOLS/Phys/Blob.H"
0006 #include "ATOOLS/Phys/Cluster_Amplitude.H"
0007
0008 namespace ATOOLS { class Mass_Selector; }
0009
0010 namespace PHASIC { class Jet_Finder; }
0011
0012 namespace CSSHOWER {
0013
0014 class Singlet;
0015 class Sudakov;
0016 class Shower;
0017
0018 typedef std::vector<Singlet*> All_Singlets;
0019 typedef All_Singlets::iterator ASiter;
0020
0021 class Singlet : public Parton_List {
0022 Parton *p_split, *p_left, *p_right, *p_spec;
0023 PHASIC::Jet_Finder *p_jf;
0024 All_Singlets *p_all;
0025 ATOOLS::Mass_Selector *p_ms;
0026 Shower *p_shower;
0027 double m_kt2_next, m_lkf, m_mur2;
0028 int m_nlo, m_nskip, m_nme, m_nmax;
0029 ATOOLS::DecayInfo_Vector m_decs;
0030 public :
0031 Singlet() :
0032 p_split(NULL), p_left(NULL), p_right(NULL), p_spec(NULL),
0033 p_jf(NULL), p_all(NULL),
0034 m_kt2_next(0.0), m_lkf(0.0), m_mur2(0.0),
0035 m_nlo(0), m_nskip(0), m_nme(0), m_nmax(0) {}
0036 ~Singlet();
0037
0038 void AddParton(Parton *const p);
0039 void RemoveParton(Parton *const p,const int mode=0);
0040
0041 bool RearrangeColours(Parton *, Parton *, Parton *);
0042 bool ArrangeColours(Parton *, Parton *, Parton *);
0043 int SplitParton(Parton *, Parton *, Parton *);
0044
0045 void ExtractPartons(ATOOLS::Blob *,ATOOLS::Mass_Selector *const ms);
0046
0047 void BoostAllFS(Parton *l,Parton *r,Parton *s,bool onlyFS=false);
0048 void BoostBackAllFS(Parton *l,Parton *r,Parton *s,bool onlyFS=false);
0049
0050 Parton *IdParton(const size_t &id) const;
0051
0052 double JetVeto(Sudakov *const sud) const;
0053
0054 void Reduce();
0055
0056 friend std::ostream& operator<<(std::ostream &,Singlet &);
0057
0058 inline void SetSplit(Parton *const part) { p_split=part; }
0059 inline void SetLeft(Parton *const part) { p_left=part; }
0060 inline void SetRight(Parton *const part) { p_right=part; }
0061 inline void SetSpec(Parton *const part) { p_spec=part; }
0062
0063 inline Parton *GetSplit() const { return p_split; }
0064 inline Parton *GetLeft() const { return p_left; }
0065 inline Parton *GetRight() const { return p_right; }
0066 inline Parton *GetSpec() const { return p_spec; }
0067
0068 inline void SetJF(PHASIC::Jet_Finder *const jf) { p_jf=jf; }
0069 inline void SetAll(All_Singlets *const all) { p_all=all; }
0070
0071 inline PHASIC::Jet_Finder *JF() const { return p_jf; }
0072 inline All_Singlets *All() const { return p_all; }
0073
0074 inline void SetMS(ATOOLS::Mass_Selector *const ms) { p_ms=ms; }
0075 inline void SetShower(Shower *const shower) { p_shower=shower; }
0076
0077 inline void SetDecays(const ATOOLS::DecayInfo_Vector &d) { m_decs=d; }
0078
0079 inline void SetNLO(const int nlo) { m_nlo=nlo; }
0080 inline void SetNSkip(const int n) { m_nskip=n; }
0081 inline void SetNME(const int nme) { m_nme=nme; }
0082 inline void SetNMax(const int nmax) { m_nmax=nmax; }
0083 inline void SetLKF(const double &lkf) { m_lkf=lkf; }
0084
0085 inline int NLO() const { return m_nlo; }
0086 inline int NSkip() const { return m_nskip; }
0087 inline int NME() const { return m_nme; }
0088 inline int NMax() const { return m_nmax; }
0089 inline double LKF() const { return m_lkf; }
0090
0091 inline void SetKtNext(const double &kt2) { m_kt2_next=kt2; }
0092
0093 inline double KtNext() const { return m_kt2_next; }
0094
0095 inline void SetMuR2(const double &mur2) { m_mur2=mur2; }
0096
0097 inline double MuR2() const { return m_mur2; }
0098
0099 };
0100
0101 std::ostream& operator<<(std::ostream &,Singlet &);
0102 std::ostream& operator<<(std::ostream &,All_Singlets &);
0103 }
0104
0105 #endif