File indexing completed on 2025-04-19 09:10:12
0001 #ifndef PHOTONS_Photon_Splitter_Splitting_Functions_H
0002 #define PHOTONS_Photon_Splitter_Splitting_Functions_H
0003
0004 #include "ATOOLS/Math/Vector.H"
0005 #include "ATOOLS/Org/Exception.H"
0006 #include "ATOOLS/Phys/Flavour.H"
0007 #include "ATOOLS/Phys/Particle.H"
0008 #include <cstddef>
0009 #include <vector>
0010
0011 using namespace ATOOLS;
0012
0013 namespace PHOTONS {
0014
0015 class Splitting_Function;
0016 class Spectator;
0017
0018 class Spectator {
0019 private:
0020 size_t m_id;
0021 ATOOLS::Flavour m_flav;
0022 ATOOLS::Vec4D m_p;
0023 double m_charge;
0024
0025 public:
0026 Spectator(const ATOOLS::Vec4D &p, const int &id, const ATOOLS::Flavour &flav);
0027
0028 inline ATOOLS::Flavour GetFlavour() { return m_flav; }
0029 inline size_t Id() { return m_id; }
0030 inline ATOOLS::Vec4D Momentum() { return m_p; }
0031 inline void SetMomentum(ATOOLS::Vec4D newmom) { m_p = newmom; }
0032 };
0033
0034 class Splitting_Function {
0035 private:
0036 size_t m_id;
0037 bool m_on;
0038 ATOOLS::Particle *p_splitter;
0039 double m_intspin;
0040 ATOOLS::Flavour m_flspec;
0041 ATOOLS::Flavour m_flavs[3];
0042 std::vector<Spectator*> m_specs;
0043 Spectator * p_spec;
0044 double m_zmin, m_zmax;
0045 double m_mij2, m_mi2, m_mj2, m_mk2;
0046 double m_alpha, m_enhancefac;
0047 double m_startscale;
0048
0049 public:
0050 Splitting_Function(ATOOLS::Particle *splitter, int fla,
0051 int flb, int flc, int intspin, const size_t &id, const double &enh);
0052
0053 void SetSpec(Spectator *spec);
0054 void AddSpec(Spectator *spec);
0055 inline void SetLimits(const double zmin, const double zmax) { m_zmin = zmin; m_zmax = zmax; }
0056 inline double Cutoff() { return sqr(sqrt(m_mi2)+sqrt(m_mj2)); }
0057 inline double StartScale() { return m_startscale; }
0058 inline void SetStartScale(double tstart) { m_startscale = tstart; }
0059 inline bool On() { return m_on; }
0060 inline void SetOn(bool on) { m_on = on; }
0061 inline size_t Id() { return m_id; }
0062 inline ATOOLS::Flavour FlA() { return m_flavs[0]; }
0063 inline ATOOLS::Flavour FlB() { return m_flavs[1]; }
0064 inline ATOOLS::Flavour FlC() { return m_flavs[2]; }
0065 inline double Mass2A() { return m_mij2; }
0066 inline double Mass2B() { return m_mi2; }
0067 inline double Mass2C() { return m_mj2; }
0068 inline double Mass2Spec() { return m_mk2; }
0069 inline Spectator* GetSpectator() { return p_spec; }
0070 inline std::vector<Spectator*> GetSpecs() { return m_specs; }
0071 inline ATOOLS::Particle* GetSplitter() { return p_splitter; }
0072
0073 double Lambda(const double &a, const double &b, const double &c) const;
0074
0075 double JFF(const double Q2, const double y) const;
0076
0077 double operator() (const double t, const double z, const double y, const double Q2);
0078
0079 double OverIntegrated(const double zmin,const double zmax);
0080 double OverEstimated();
0081 double Z();
0082 };
0083
0084 typedef std::vector<Splitting_Function *> SF_Vector;
0085 typedef std::vector<Spectator *> Spec_Vector;
0086 }
0087
0088 #endif