Back to home page

EIC code displayed by LXR

 
 

    


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