![]() |
|
|||
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
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |