Back to home page

EIC code displayed by LXR

 
 

    


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