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