File indexing completed on 2025-04-19 09:10:01
0001 #ifndef CSSHOWER_Showers_Kinematics_Base_H
0002 #define CSSHOWER_Showers_Kinematics_Base_H
0003
0004 #include "CSSHOWER++/Tools/Parton.H"
0005 #include "PHASIC++/Channels/CSS_Kinematics.H"
0006
0007 namespace PHASIC { class Jet_Finder; }
0008
0009 namespace CSSHOWER {
0010 class Sudakov;
0011 class Kinematics_Base {
0012 public:
0013 const ATOOLS::Mass_Selector *p_ms;
0014 int m_evolscheme;
0015 int MakeForcedSplittingKinematics(Parton *const split,Parton *& pnew,
0016 PHASIC::Kin_Args & args,const int mode=0) const;
0017 public:
0018 Kinematics_Base(): m_evolscheme(0), p_ms(NULL) {}
0019 virtual ~Kinematics_Base() {}
0020 virtual int MakeKinematics(Parton *const,const double &,
0021 const double &,const ATOOLS::Flavour &,
0022 Parton *&,const int mode=0) = 0;
0023 inline void SetMS(const ATOOLS::Mass_Selector *const ms) { p_ms=ms; }
0024 inline const ATOOLS::Mass_Selector *MS() const { return p_ms; }
0025 inline void SetEvolScheme(int evol) { m_evolscheme=evol; }
0026 inline bool ValidateDipoleKinematics(const double & mi2, const double & mj2,
0027 const double & mk2, const PHASIC::Kin_Args& args)
0028 {
0029 if (ATOOLS::sqr(args.m_pi[0]) < mi2
0030 || ATOOLS::sqr(args.m_pj[0]) < mj2
0031 || ATOOLS::sqr(args.m_pk[0]) < mk2) {
0032 msg_IODebugging() << METHOD << "(): Less energy than mass found\n";
0033 return false;
0034 }
0035 return true;
0036 }
0037 };
0038
0039 class Kinematics_FF : public Kinematics_Base {
0040 public:
0041 Kinematics_FF() {}
0042 virtual ~Kinematics_FF() {}
0043 int MakeKinematics(Parton *const,const double &,
0044 const double &,const ATOOLS::Flavour &,
0045 Parton *&,const int mode=0);
0046 double GetY(const double &Q2,const double &kt2,const double &z,
0047 const double &s1,const double &s2,const double &s3,
0048 const ATOOLS::Flavour &fla,const ATOOLS::Flavour &flc,
0049 const bool force=false) const;
0050 double GetKT2(const double &Q2,const double &y,const double &z,
0051 const double &mi2,const double &mj2,const double &mk2,
0052 const ATOOLS::Flavour &fla,const ATOOLS::Flavour &flc) const;
0053 };
0054
0055 class Kinematics_FI : public Kinematics_Base {
0056 public:
0057 Kinematics_FI() {}
0058 virtual ~Kinematics_FI() {}
0059 int MakeKinematics(Parton *const,const double &,
0060 const double &,const ATOOLS::Flavour &,
0061 Parton *&,const int mode=0);
0062 double GetY(const double &Q2,const double &kt2,const double &z,
0063 const double &s1,const double &s2,const double &s3,
0064 const ATOOLS::Flavour &fla,const ATOOLS::Flavour &flc,
0065 const bool force=false) const;
0066 double GetKT2(const double &Q2,const double &y,const double &z,
0067 const double &mi2,const double &mj2,const double &ma2,
0068 const ATOOLS::Flavour &fla,const ATOOLS::Flavour &flc) const;
0069 };
0070
0071 class Kinematics_IF : public Kinematics_Base {
0072 public:
0073 Kinematics_IF() {}
0074 virtual ~Kinematics_IF() {}
0075 int MakeKinematics(Parton *const,const double &,
0076 const double &,const ATOOLS::Flavour &,
0077 Parton *&,const int mode=0);
0078 double GetY(const double &Q2,const double &kt2,const double &z,
0079 const double &s1,const double &s2,const double &s3,
0080 const ATOOLS::Flavour &flb,const ATOOLS::Flavour &flc,
0081 const bool force=false) const;
0082 double GetKT2(const double &Q2,const double &y,const double &z,
0083 const double &ma2,const double &mi2,const double &mk2,
0084 const ATOOLS::Flavour &flb,const ATOOLS::Flavour &flc) const;
0085 };
0086
0087 class Kinematics_II : public Kinematics_Base {
0088 public:
0089 Kinematics_II() {}
0090 virtual ~Kinematics_II() {}
0091 int MakeKinematics(Parton *const,const double &,
0092 const double &,const ATOOLS::Flavour &,
0093 Parton *&,const int mode=0);
0094 double GetY(const double &Q2,const double &kt2,const double &z,
0095 const double &s1,const double &s2,const double &s3,
0096 const ATOOLS::Flavour &flb,const ATOOLS::Flavour &flc,
0097 const bool force=false) const;
0098 double GetKT2(const double &Q2,const double &y,const double &z,
0099 const double &ma2,const double &mi2,const double &mb2,
0100 const ATOOLS::Flavour &flb,const ATOOLS::Flavour &flc) const;
0101 };
0102 }
0103
0104 #endif