Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef PHOTONS_Photon_Splitter_Sudakov_H
0002 #define PHOTONS_Photon_Splitter_Sudakov_H
0003 
0004 #include "ATOOLS/Math/Vector.H"
0005 #include "ATOOLS/Phys/Blob.H"
0006 #include "PHOTONS++/PhotonSplitter/Splitting_Functions.H"
0007 #include "PHOTONS++/PhotonSplitter/Kinematics_Base.H"
0008 #include <cstddef>
0009 #include "ATOOLS/Math/Histogram.H"
0010 #include "ATOOLS/Math/Histogram_2D.H"
0011 
0012 namespace PHOTONS {
0013 
0014   class Sudakov {
0015   private:
0016     Kinematics_FF * p_kinematics;
0017     Kinematics_FI * p_FIkinematics;
0018     SF_Vector       m_splitters;
0019     Spec_Vector     m_spectators;
0020 
0021     std::vector<size_t> m_splitterIds;
0022     int                 m_NInP;
0023 
0024     int m_mode;
0025     int m_virtualityOrdering;
0026     int m_spectatorScheme;
0027     bool m_debug_initProbabilistic;
0028     double m_masscutoff;
0029 
0030     double m_t0;
0031     double m_t;
0032 
0033     // flavour-dependent enhancements
0034     std::map<kf_code,double> m_enhancefac;
0035 
0036     // for storing splittings
0037     Part_List m_remainingphotons;
0038     Particle_Vector m_addedparticles;
0039 
0040     bool m_addedanything;
0041 
0042     static std::string          s_histo_base_name;
0043     static ATOOLS::Histogram    s_histo_dipole;
0044     static ATOOLS::Histogram_2D s_histo_tdR;
0045 
0046     void RegisterDefaults();
0047 
0048   public:
0049     Sudakov();
0050     Sudakov(int mode);
0051     ~Sudakov();
0052 
0053     inline void SetNInParticles(int n) { m_NInP = n; }
0054     void AddSplitter(ATOOLS::Particle *softphoton, const size_t&);
0055     void AddChargedParticle(ATOOLS::Particle* p, const size_t& id);
0056     inline Spec_Vector GetSpectators() { return m_spectators; }
0057     bool ClearAll();
0058 
0059     void SetCutoff();
0060     Spectator* DefineInitialConditions(double &t,ATOOLS::Vec4D pphoton);
0061 
0062     bool Run(ATOOLS::Blob *blob);
0063     bool Generate(ATOOLS::Blob *blob);
0064 
0065     std::string Info() const { return std::string(""); }
0066     
0067     inline Part_List GetRemainingSoftPhotons() { return m_remainingphotons; }
0068     inline Particle_Vector GetAddedParticles() { return m_addedparticles; }
0069     inline bool AddedAnything() { return m_addedanything; }
0070   };
0071 
0072   /*!
0073     \file Sudakov.H
0074     \brief Contains the class PHOTONS::Sudakov
0075   */
0076 
0077   /*! 
0078     \class Sudakov
0079     \brief Implements the veto algorithm for a 1-step parton shower to split soft photons.
0080   */
0081   /////////////////////////////////////////////////////////////////////////////////////////
0082   // Description of member variables for Photon_Splitter
0083   /////////////////////////////////////////////////////////////////////////////////////////
0084   /*!
0085     \var Sudakov::m_mode
0086     \brief encodes which splittings to include. Settings are additive. 
0087     1 = electrons, 2 = muons, 4 = taus, 8 = hadrons up to mass cutoff.
0088   */
0089   /*!
0090     \var Sudakov::m_virtualityOrdering
0091     \brief stores the ordering scheme to be used. 0 is transverse momentum ordering, 
0092     1 is virtuality ordering and 2 is mixed (default).
0093   */
0094   /*!
0095     \var Sudakov::m_spectatorScheme
0096     \brief stores the spectator scheme to be used: 
0097     0 = all final-state charged particles that exist prior to this module being called (default), 
0098     1 = only the final-state charged particle that the soft photon is calculated to be emitted off.
0099   */
0100   /*!
0101     \var Sudakov::m_debug_initProbabilistic
0102     \brief if off, chooses starting scale by winner-takes all. Default is on.
0103   */
0104   /*!
0105     \var Sudakov::m_masscutoff
0106     \brief the mass of the heaviest hadron which can be produced by photon splittings. Note only 
0107     fermion and scalar splitting functions are currently implemented.
0108   */
0109   /*!
0110     \var Sudakov::m_t0
0111     \brief the IR cutoff of the algorithm. Defaults to 4m^2 where m is the mass of the lightest 
0112     particle which can be produced in photon splittings. 
0113   */
0114   /*!
0115     \var Sudakov::m_remainingphotons
0116     \brief stores the photons which have not (yet) split.
0117   */
0118   /*!
0119     \var Sudakov::m_addedparticles
0120     \brief stores the particles which are to be added to the blob. 
0121   */
0122   /*!
0123     \var Sudakov::m_addedanything 
0124     \brief flags whether anything has changed so the blob can be updated. 
0125   */
0126   /*!
0127     \var Sudakov::m_splitterIds
0128     \brief keeps track of the splitter photon associated with each splitting function.
0129   */
0130   /*!
0131     \var Sudakov::m_NInP
0132     \brief the number of incoming particles in the blob. Used to classify particles as 
0133     incoming or outgoing by their ID without referring to the blob. 
0134   */
0135 
0136   /////////////////////////////////////////////////////////////////////////////////////////
0137   // Description of member methods for Photon_Splitter
0138   /////////////////////////////////////////////////////////////////////////////////////////
0139   /*!
0140     \fn void Sudakov::AddSplitter(ATOOLS::Particle* photon, const size_t& id)
0141     \brief Creates the splitting functions for this photon.
0142   */
0143   /*!
0144     \fn void Sudakov::AddChargedParticle(ATOOLS::Particle* p, const size_t& id)
0145     \brief Assesses whether the charged particle can be a spectator and adds it if so.
0146   */
0147   /*!
0148     \fn bool Sudakov::ClearAll()
0149     \brief resets the Sudakov for the next event.
0150   */
0151   /*!
0152     \fn void Sudakov::SetCutoff()
0153     \brief sets the IR cutoff for the algorithm as described above. 
0154   */
0155   /*!
0156     \fn Spectator* Sudakov::DefineInitialConditions(double &t, Vec4D pphoton)
0157     \brief Reconstructs the emission history of the given photon and returns 
0158     the recontructed spectator and starting scale. 
0159   */
0160   /*!
0161     \fn bool Sudakov::Run(ATOOLS::Blob *)
0162     \brief Runs the algorithm until the scale is below the cutoff. 
0163   */
0164   /*!
0165     \fn bool Sudakov::Generate (ATOOLS::Blob *)
0166     \brief Generates trial emissions, lets the splitting functions compete and corrects 
0167     the splitting probability with a veto. 
0168   */
0169 }
0170 
0171 #endif