File indexing completed on 2025-04-19 09:09:45
0001 #ifndef AMEGIC_DipoleSubtraction_DipoleSplitting_Base_H
0002 #define AMEGIC_DipoleSubtraction_DipoleSplitting_Base_H
0003
0004 #include "ATOOLS/Math/Vector.H"
0005 #include "ATOOLS/Phys/NLO_Subevt.H"
0006 #include "PDF/Main/NLOMC_Base.H"
0007 #include "ATOOLS/Phys/NLO_Types.H"
0008 #include "AMEGIC++/Main/Pol_Info.H"
0009 #include "MODEL/Main/Coupling_Data.H"
0010 #include <vector>
0011 #include <limits>
0012
0013 namespace MODEL {
0014 class Model_Base;
0015 }
0016
0017 namespace AMEGIC {
0018
0019 #define nan numeric_limits<double>::quiet_NaN()
0020
0021 class DipoleSplitting_Base {
0022 protected:
0023 std::string m_name;
0024 double m_alpha,m_kt2max,m_amin,m_kappa;
0025 double m_Q2,m_kt2,m_a;
0026 double m_sff,m_av,m_fac;
0027 int m_mcmode, m_mcsign;
0028 ATOOLS::Vec4D m_pt1,m_pt2;
0029
0030 ATOOLS::sbt::subtype m_stype;
0031 ATOOLS::dpt::dipoletype m_dtype;
0032 ATOOLS::spt::splittingtype m_ftype;
0033 ATOOLS::Vec4D m_pi,m_pj,m_pk,m_ptij,m_ptk;
0034 int m_i,m_j,m_k,m_tij,m_tk,m_m,m_es;
0035 double m_k0sqf,m_k0sqi;
0036 std::vector<ATOOLS::Vec4D> m_dpollist;
0037 std::vector<ATOOLS::Vec4D> m_mom;
0038 std::vector<double> m_pfactors;
0039 ATOOLS::subscheme::code m_subtype;
0040 double m_spfdef;
0041 bool m_collVFF;
0042 int m_Vsubmode;
0043 MODEL::Coupling_Data *p_cpl;
0044 ATOOLS::NLO_subevt *p_subevt;
0045 PDF::NLOMC_Base *p_nlomc;
0046 void CalcVectors(ATOOLS::Vec4D&,ATOOLS::Vec4D&,double);
0047 public:
0048 DipoleSplitting_Base(ATOOLS::sbt::subtype st, ATOOLS::spt::splittingtype ft,
0049 ATOOLS::dpt::dipoletype dt,int m,int i,int j,int k);
0050 virtual ~DipoleSplitting_Base() {}
0051
0052 inline std::string Name() const { return m_name; }
0053
0054 void SetCoupling(const MODEL::Coupling_Map *cpls);
0055 inline void SetChargeFactor(double f) { m_spfdef*=f; }
0056 inline double SPFac() { return m_spfdef*p_cpl->Factor(); }
0057
0058 virtual void SetMomenta(const ATOOLS::Vec4D*) = 0;
0059 inline std::vector<ATOOLS::Vec4D>* GetMomenta() { return &m_mom; }
0060 inline ATOOLS::Vec4D Getptij() { return m_ptij; }
0061 inline ATOOLS::Vec4D Getptk() { return m_ptk; }
0062
0063 inline void SetMCMode(const int mcmode) { m_mcmode=mcmode; }
0064 inline void SetAlpha(double alp) { m_alpha=alp; }
0065 inline void SetKt2Max(double kt2m) { m_kt2max=kt2m; }
0066 inline double Alpha() const { return m_alpha; }
0067 inline double KT2() const { return m_kt2; }
0068
0069 bool Reject(const double &alpha);
0070 bool KinCheck() const;
0071 double GetF();
0072 virtual double GetDPSF() = 0;
0073 virtual double GetValue() = 0;
0074
0075 virtual void CalcDiPolarizations() = 0;
0076 double GetR(const ATOOLS::Vec4D*,const ATOOLS::Vec4D*);
0077 inline void SetSubevt(ATOOLS::NLO_subevt *const sub) { p_subevt=sub; }
0078 inline std::vector<ATOOLS::Vec4D>* GetDiPolarizations()
0079 { return &m_dpollist; }
0080 inline std::vector<double>* GetFactors() { return &m_pfactors; }
0081
0082 inline int MCSign() const { return m_mcsign; }
0083 inline const double& LastAlpha() const { return m_a; }
0084
0085 inline const ATOOLS::sbt::subtype GetSubtractionType() const { return m_stype; }
0086 inline const ATOOLS::dpt::dipoletype GetDipoleType() const { return m_dtype; }
0087 inline const ATOOLS::spt::splittingtype GetSplittingType() const { return m_ftype; }
0088 inline void SetNLOMC(PDF::NLOMC_Base *const mc)
0089 { p_nlomc=mc; m_subtype=p_nlomc->SubtractionType();
0090 if (m_subtype==ATOOLS::subscheme::Dire) m_kappa=1.0; }
0091 };
0092
0093 inline std::ostream & operator<<(std::ostream & s,
0094 const DipoleSplitting_Base & dsb)
0095 {
0096 return s<<dsb.Name();
0097 }
0098 }
0099 #endif