Back to home page

EIC code displayed by LXR

 
 

    


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

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