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
0058
0059 virtual double OverIntegrated(const double zmin,const double zmax,
0060 const double scale,const double xbj) = 0;
0061
0062
0063
0064 virtual double OverEstimated(const double z,const double y) = 0;
0065
0066
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