Back to home page

EIC code displayed by LXR

 
 

    


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