Back to home page

EIC code displayed by LXR

 
 

    


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     // constructor
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     // destructor
0046     ~Dipole_Kinematics();
0047 
0048     // member functions
0049     void Evaluate();
0050 
0051     void CheckKT2Min();
0052 
0053     void SetNLOMC(PDF::NLOMC_Base *const mc);
0054 
0055     // inline functions
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   };// end of class Dipole_Kinematics
0114   
0115   std::ostream &operator<<
0116     (std::ostream &str,const Dipole_Kinematics &k);
0117 
0118 }// end of namespace METOOLS
0119 
0120 #endif