Back to home page

EIC code displayed by LXR

 
 

    


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