File indexing completed on 2025-04-19 09:10:06
0001 #ifndef METOOLS_Explicit_Dipole_Kinematics_H
0002 #define METOOLS_Explicit_Dipole_Kinematics_H
0003
0004 #include "METOOLS/Explicit/Current.H"
0005 #include "METOOLS/Explicit/Dipole_Info.H"
0006
0007 namespace ATOOLS { class NLO_subevt; }
0008
0009 namespace PDF { class NLOMC_Base; }
0010
0011 namespace METOOLS {
0012
0013 class Dipole_Kinematics {
0014 protected:
0015
0016 Current *p_i, *p_j, *p_k, *p_ijt, *p_kt;
0017
0018 ATOOLS::Vec4D m_pi, m_pj, m_pk, m_Q;
0019
0020 int m_type, m_swap, m_trig;
0021
0022 double m_z, m_y, m_kt2, m_Q2, m_phase[2], m_res[3];
0023 double m_mi2, m_mj2, m_mij2, m_mk2, m_ym, m_yp, m_f, m_a;
0024
0025 Dipole_Info *p_info;
0026 SizeT_Vector m_pm;
0027
0028 Current_Vector m_cur;
0029
0030 ATOOLS::Vec4D_Vector m_p;
0031
0032 ATOOLS::NLO_subevt *p_subevt;
0033 PDF::NLOMC_Base *p_nlomc;
0034
0035 double Lam(const double &s,
0036 const double &sb,const double &sc) const;
0037
0038 public:
0039
0040
0041 Dipole_Kinematics(Dipole_Info *const info,Current *const i,
0042 Current *const j,Current *const k,
0043 Current *const ijt,Current *const kt);
0044
0045
0046 ~Dipole_Kinematics();
0047
0048
0049 void Evaluate();
0050
0051 void CheckKT2Min();
0052
0053 void SetNLOMC(PDF::NLOMC_Base *const mc);
0054
0055
0056 inline Current *JI() const { return p_i; }
0057 inline Current *JJ() const { return p_j; }
0058 inline Current *JK() const { return p_k; }
0059
0060 inline Current *JIJT() const { return p_ijt; }
0061 inline Current *JKT() const { return p_kt; }
0062
0063 inline const ATOOLS::Vec4D &PI() const { return m_pi; }
0064 inline const ATOOLS::Vec4D &PJ() const { return m_pj; }
0065 inline const ATOOLS::Vec4D &PK() const { return m_pk; }
0066
0067 inline const ATOOLS::Vec4D &Q() const { return m_Q; }
0068
0069 inline int Type() const { return m_type; }
0070 inline int Swap() const { return m_swap; }
0071 inline int Trig() const { return m_trig; }
0072
0073 inline double Z() const { return m_z; }
0074 inline double Y() const { return m_y; }
0075
0076 inline double YMin() const { return m_ym; }
0077 inline double YMax() const { return m_yp; }
0078
0079 inline double KT2() const { return m_kt2; }
0080 inline double Q2() const { return m_Q2; }
0081
0082 inline double Phase(const int i) const { return m_phase[i]; }
0083 inline double Res(const int i) const { return m_res[i]; }
0084
0085 inline void SetPhase(const double &phase,const int i)
0086 { m_phase[i]=phase; }
0087 inline void SetRes(const double &res,const int i)
0088 { m_res[i]=res; }
0089 inline void AddRes(const double &res,const int i)
0090 { m_res[i]+=res; }
0091
0092 inline void SetCurrents(const Current_Vector &cur)
0093 { m_cur=cur; m_p.resize(m_cur.size()); }
0094
0095 inline const ATOOLS::Vec4D_Vector &Momenta() const { return m_p; }
0096
0097 inline void AddTrig(const int trig) { m_trig&=trig; }
0098 inline void SetTrig(const int trig) { m_trig=trig; }
0099
0100 inline SizeT_Vector &PM() { return m_pm; }
0101
0102 inline bool Massive() const
0103 { return m_mi2||m_mj2||m_mk2||m_mij2; }
0104
0105 inline double F() const { return m_f; }
0106 inline double A() const { return m_a; }
0107
0108 inline void SetF(const double &f) { m_f=f; }
0109 inline void SetA(const double &a) { m_a=a; }
0110
0111 inline void SetSubevt(ATOOLS::NLO_subevt *sub) { p_subevt=sub; }
0112
0113 };
0114
0115 std::ostream &operator<<
0116 (std::ostream &str,const Dipole_Kinematics &k);
0117
0118 }
0119
0120 #endif