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