Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:10:01

0001 #ifndef CSSHOWER_Showers_SF_Lorentz_H
0002 #define CSSHOWER_Showers_SF_Lorentz_H
0003 
0004 #include "CSSHOWER++/Showers/SF_Key.H"
0005 #include "ATOOLS/Org/Getter_Function.H"
0006 #include "ATOOLS/Phys/Flavour.H"
0007 
0008 namespace CSSHOWER {
0009 
0010   class SF_Coupling;
0011   class Splitting_Function_Base;
0012 
0013   class SF_Lorentz {
0014   protected:
0015 
0016     ATOOLS::Flavour m_flavs[3], m_flspec;
0017     const ATOOLS::Mass_Selector *p_ms;
0018 
0019     SF_Coupling *p_cf;
0020 
0021     Splitting_Function_Base *p_sf;
0022 
0023     double m_zmin, m_zmax;
0024     int m_beam, m_col;
0025 
0026     double m_lastJ;
0027 
0028     std::pair<double, double> m_pdfmin;
0029 
0030     static double s_kappa;
0031 
0032     double Lambda(const double &a,const double &b,const double &c) const;
0033     bool PDFValueAllowedAsDenominator(const double& val,
0034                                       const double& eta);
0035 
0036   public:
0037 
0038     SF_Lorentz(const SF_Key &key);
0039 
0040     virtual ~SF_Lorentz();
0041 
0042     virtual double Scale(const double z,const double y,
0043              const double scale,const double Q2) const;
0044 
0045     virtual double operator()
0046       (const double z,const double y,const double eta,
0047        const double scale,const double Q2) = 0;
0048     /**
0049       * Overestimate integrated over [zmin, zmax]
0050       */
0051     virtual double OverIntegrated(const double zmin,const double zmax,
0052                   const double scale,const double xbj) = 0;
0053     /**
0054       * Overestimate of operator
0055       */
0056     virtual double OverEstimated(const double z,const double y) = 0;
0057     /**
0058       * Generate z according to OverEstimated (solve OverIntegrated for new z)
0059       */
0060     virtual double Z() = 0;
0061 
0062     double LastJ() const { return m_lastJ; }
0063     void SetLastJ(double J) { m_lastJ = J; }
0064     double JFF(const double &y,const double &mui2,const double &muj2,
0065            const double &muk2,const double &muij2);
0066     double JFI(const double &y,const double &eta,const double &scale);
0067     double JIF(const double &z,const double &y,
0068            const double &eta,const double &scale);
0069     double JII(const double &z,const double &y,
0070            const double &eta,const double &scale);
0071 
0072     inline const ATOOLS::Flavour &FlA() const { return m_flavs[0]; }
0073     inline const ATOOLS::Flavour &FlB() const { return m_flavs[1]; }
0074     inline const ATOOLS::Flavour &FlC() const { return m_flavs[2]; }
0075 
0076     inline const ATOOLS::Flavour &FlSpec() const { return m_flspec; }
0077 
0078     inline void SetFlSpec(const ATOOLS::Flavour &s) { m_flspec=s; }
0079 
0080     inline int GetBeam() const { return m_beam; }
0081     inline void SetBeam(const int beam) { m_beam=beam; }
0082 
0083     inline void SetSF(Splitting_Function_Base *const sf) { p_sf=sf; }
0084 
0085     inline void SetMS(const ATOOLS::Mass_Selector *const ms) { p_ms=ms; }
0086 
0087     inline const ATOOLS::Mass_Selector *MS() const { return p_ms; }
0088 
0089     inline int Col() const { return m_col; }
0090 
0091     inline static void SetKappa(const double &kap) { s_kappa=kap; }
0092 
0093   };
0094 
0095   typedef ATOOLS::Getter_Function<SF_Lorentz,SF_Key,
0096                   std::less<std::string> > SFL_Getter;
0097 
0098 }
0099 
0100 #endif