File indexing completed on 2025-04-19 09:10:05
0001 #ifndef MCATNLO_Showers_Splitting_Function_Base_H
0002 #define MCATNLO_Showers_Splitting_Function_Base_H
0003
0004 #include "MCATNLO/Showers/SF_Key.H"
0005 #include "MCATNLO/Showers/SF_Coupling.H"
0006 #include "MCATNLO/Showers/SF_Lorentz.H"
0007
0008 namespace ATOOLS {
0009 class Cluster_Amplitude;
0010 }
0011
0012 namespace PDF { class PDF_Base; }
0013
0014 namespace MCATNLO {
0015
0016 class Parton;
0017 class Shower;
0018
0019 class Splitting_Function_Base {
0020 protected:
0021 SF_Lorentz *p_lf;
0022 SF_Coupling *p_cf;
0023 cstp::code m_type;
0024 double m_lastint, m_lastacceptwgt, m_lastscale;
0025 double m_symf, m_polfac, m_lpdf, m_mth;
0026 double m_facscalefactor;
0027 int m_on, m_qcd, m_scs;
0028 std::vector<Parton*> m_specs;
0029 std::vector<double> m_lastints;
0030 Parton *p_spec;
0031 PDF::PDF_Base **p_pdf;
0032 public:
0033
0034 Splitting_Function_Base();
0035 Splitting_Function_Base(const SF_Key &key);
0036
0037 virtual ~Splitting_Function_Base();
0038
0039 virtual double operator()
0040 (const double z,const double y,const double eta,
0041 const double scale,const double Q2,
0042 const Color_Info &ci=Color_Info(),
0043 ATOOLS::Cluster_Amplitude *const sub=NULL);
0044 virtual double OverIntegrated(const double,const double,
0045 const double,const double);
0046 virtual double Overestimated(const double,const double);
0047 virtual double RejectionWeight(const double,const double,
0048 const double,const double,const double);
0049 virtual double Z();
0050 virtual double Phi(double z) const;
0051
0052 virtual const ATOOLS::Flavour & GetFlavourA() const;
0053 virtual const ATOOLS::Flavour & GetFlavourB() const;
0054 virtual const ATOOLS::Flavour & GetFlavourC() const;
0055 virtual const ATOOLS::Flavour & GetFlavourSpec() const;
0056
0057 virtual int GetCol() const;
0058
0059 virtual void ResetLastInt();
0060 virtual void ClearSpecs();
0061
0062 double AsymmetryFactor(const double z,const double y,
0063 const double Q2);
0064
0065 double MEPSWeight(const double &z,const double &y,const double &eta,
0066 const double &scale,const double &Q2,
0067 const ATOOLS::Cluster_Amplitude *const sub) const;
0068
0069 double GetXPDF(const double &scale,const double &x,
0070 const ATOOLS::Flavour &a,const int beam,
0071 const int mode=0);
0072
0073 Parton *SelectSpec();
0074 bool PureQCD() const;
0075
0076 Parton *SetSpec(Parton *const spec);
0077
0078 void ColorPoint(Parton *const p) const;
0079
0080 double ColorWeight(Parton *const p) const;
0081
0082 inline double Last() const { return m_lastint; }
0083 virtual double LastAcceptanceWeight() const { return m_lastacceptwgt; }
0084 virtual double LastScale() const { return m_lastscale; }
0085 inline cstp::code GetType() const { return m_type; }
0086
0087 inline void SetFlavourSpec(ATOOLS::Flavour flav) { p_lf->SetFlSpec(flav); }
0088 inline void AddSpec(Parton *const s) { m_specs.push_back(s); }
0089
0090 inline Parton *Spec() const { return p_spec; }
0091
0092 inline int On() const { return m_on; }
0093 template <class _Type> inline _Type *Get() { return dynamic_cast<_Type*>(this); }
0094
0095 inline SF_Lorentz *Lorentz() const { return p_lf; }
0096 inline SF_Coupling *Coupling() const { return p_cf; }
0097
0098 PDF::PDF_Base** PDF() { return p_pdf; }
0099 inline void SetPDF(PDF::PDF_Base **const pdf) { p_pdf=pdf; }
0100
0101 inline double SymFac() const { return m_symf; }
0102
0103 inline void SetMassThreshold(const double &mth) { m_mth=mth; }
0104
0105 inline void SetScaleScheme(const int &scs) { m_scs=scs; }
0106
0107 inline int ScaleScheme() const { return m_scs; }
0108
0109 inline void SetFacScaleFactor(const double fac) { m_facscalefactor=fac; }
0110
0111 friend std::ostream& operator<<(std::ostream &,const Splitting_Function_Base &);
0112 };
0113 }
0114
0115 #endif