Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:06:20

0001 // DireSplittingLibrary.h is a part of the PYTHIA event generator.
0002 // Copyright (C) 2024 Stefan Prestel, Torbjorn Sjostrand.
0003 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
0004 // Please respect the MCnet Guidelines, see GUIDELINES for details.
0005 
0006 // Header file for the Dire splitting library.
0007 
0008 #ifndef Pythia8_DireSplittingLibrary_H
0009 #define Pythia8_DireSplittingLibrary_H
0010 
0011 #define DIRE_SPLITTINGLIBRARY_VERSION "2.002"
0012 
0013 #include "Pythia8/Basics.h"
0014 #include "Pythia8/BeamParticle.h"
0015 #include "Pythia8/ParticleData.h"
0016 #include "Pythia8/PythiaStdlib.h"
0017 #include "Pythia8/Settings.h"
0018 #include "Pythia8/StandardModel.h"
0019 
0020 #include "Pythia8/DireSplittings.h"
0021 #include "Pythia8/DireSplittingsQCD.h"
0022 #include "Pythia8/DireSplittingsQED.h"
0023 #include "Pythia8/DireSplittingsEW.h"
0024 #include "Pythia8/DireSplittingsU1new.h"
0025 #include "Pythia8/DireBasics.h"
0026 #include "Pythia8/DireHooks.h"
0027 
0028 namespace Pythia8 {
0029 
0030 class DireSpace;
0031 class DireTimes;
0032 
0033 //==========================================================================
0034 
0035 class DireSplittingLibrary {
0036 
0037 public:
0038 
0039   // Constructor and destructor.
0040   DireSplittingLibrary() :  infoPtr(0), settingsPtr(0), particleDataPtr(0),
0041     rndmPtr(0), beamAPtr(0), beamBPtr(0), coupSMPtr(0), hooksPtr(0),
0042     hasExternalHook(false) {}
0043  ~DireSplittingLibrary() { clear();}
0044 
0045   // Initialisation.
0046   void init(Info* infoPtr, BeamParticle* beamA, BeamParticle* beamB,
0047     DireInfo* direInfo, DireHooks* hooks = NULL);
0048   void initFSR();
0049   void initISR();
0050   void clear();
0051 
0052   void setTimesPtr (shared_ptr<DireTimes> fsrIn) {
0053     for (unordered_map<string,DireSplitting*>::iterator
0054            it = splittings.begin(); it != splittings.end(); ++it )
0055       it->second->setTimesPtr(fsrIn);
0056   }
0057   void setTimesDecPtr (shared_ptr<DireTimes> fsrIn) {
0058     for (unordered_map<string,DireSplitting*>::iterator
0059            it = splittings.begin(); it != splittings.end(); ++it )
0060       it->second->setTimesDecPtr(fsrIn);
0061   }
0062   void setSpacePtr (shared_ptr<DireSpace> isrIn) {
0063     for (unordered_map<string,DireSplitting*>::iterator
0064            it = splittings.begin(); it != splittings.end(); ++it )
0065       it->second->setSpacePtr(isrIn);
0066   }
0067 
0068   unordered_map< string, DireSplitting* > getSplittings() { return splittings;}
0069 
0070   // Overload index operator to access element of splitting vector.
0071   DireSplitting* operator[](string id);
0072   const DireSplitting* operator[](string id) const;
0073 
0074   // Generate name for a splitting
0075   vector<int> getSplittingRadBefID(const Event& event, int rad, int emt);
0076   vector<int> getSplittingRadBefID_new(const Event& event, int rad, int emt);
0077 
0078   // Generate name for a splitting
0079   vector<string> getSplittingName(const Event& event, int rad, int emt);
0080   vector<string> getSplittingName_new(const Event& event, int rad, int emt);
0081 
0082   // Check number of particles produced in splitting.
0083   int nEmissions(string name);
0084 
0085   void setKernelHooks(DireHooks* hooks) {hooksPtr = hooks;}
0086 
0087   // Some string name hashes, to avoid string conparisons.
0088   ulong fsrQCD_1_to_1_and_21,
0089         fsrQCD_1_to_21_and_1,
0090         fsrQCD_21_to_21_and_21a,
0091         fsrQCD_21_to_21_and_21b,
0092         fsrQCD_21_to_1_and_1a,
0093         fsrQCD_21_to_1_and_1b,
0094         fsrQCD_1_to_2_and_1_and_2,
0095         fsrQCD_1_to_1_and_1_and_1,
0096         fsrQCD_1_to_1_and_21_notPartial,
0097         fsrQCD_21_to_21_and_21_notPartial,
0098         fsrQCD_21_to_1_and_1_notPartial,
0099         fsrQCD_1_to_1_and_21_and_21,
0100         fsrQCD_1_to_1_and_1_and_1a,
0101         fsrQCD_1_to_1_and_1_and_1b,
0102         fsrQCD_1_to_1_and_2_and_2a,
0103         fsrQCD_1_to_1_and_2_and_2b,
0104         fsrQCD_1_to_1_and_3_and_3a,
0105         fsrQCD_1_to_1_and_3_and_3b,
0106         fsrQCD_1_to_1_and_4_and_4a,
0107         fsrQCD_1_to_1_and_4_and_4b,
0108         fsrQCD_1_to_1_and_5_and_5a,
0109         fsrQCD_1_to_1_and_5_and_5b,
0110         fsrQCD_21_to_21_and_21_and_21,
0111         fsrQCD_21_to_21_and_1_and_1a,
0112         fsrQCD_21_to_21_and_1_and_1b,
0113         fsrQCD_21_to_21_and_2_and_2a,
0114         fsrQCD_21_to_21_and_2_and_2b,
0115         fsrQCD_21_to_21_and_3_and_3a,
0116         fsrQCD_21_to_21_and_3_and_3b,
0117         fsrQCD_21_to_21_and_4_and_4a,
0118         fsrQCD_21_to_21_and_4_and_4b,
0119         fsrQCD_21_to_21_and_5_and_5a,
0120         fsrQCD_21_to_21_and_5_and_5b,
0121         isrQCD_1_to_1_and_21,
0122         isrQCD_21_to_1_and_1,
0123         isrQCD_21_to_21_and_21a,
0124         isrQCD_21_to_21_and_21b,
0125         isrQCD_1_to_21_and_1,
0126         isrQCD_1_to_2_and_1_and_2,
0127         isrQCD_1_to_1_and_1_and_1;
0128 
0129   // Some string name hashes, to avoid string conparisons.
0130   ulong fsrQED_1_to_1_and_22,
0131         fsrQED_1_to_22_and_1,
0132         fsrQED_11_to_11_and_22,
0133         fsrQED_11_to_22_and_11,
0134         fsrQED_22_to_1_and_1a,
0135         fsrQED_22_to_1_and_1b,
0136         fsrQED_22_to_2_and_2a,
0137         fsrQED_22_to_2_and_2b,
0138         fsrQED_22_to_3_and_3a,
0139         fsrQED_22_to_3_and_3b,
0140         fsrQED_22_to_4_and_4a,
0141         fsrQED_22_to_4_and_4b,
0142         fsrQED_22_to_5_and_5a,
0143         fsrQED_22_to_5_and_5b,
0144         fsrQED_22_to_11_and_11a,
0145         fsrQED_22_to_11_and_11b,
0146         fsrQED_22_to_13_and_13a,
0147         fsrQED_22_to_13_and_13b,
0148         fsrQED_22_to_15_and_15a,
0149         fsrQED_22_to_15_and_15b,
0150         fsrQED_1_to_1_and_22_notPartial,
0151         fsrQED_11_to_11_and_22_notPartial,
0152         isrQED_1_to_1_and_22,
0153         isrQED_11_to_11_and_22,
0154         isrQED_1_to_22_and_1,
0155         isrQED_11_to_22_and_11,
0156         isrQED_22_to_1_and_1,
0157         isrQED_22_to_11_and_11;
0158 
0159   ulong fsrEWK_1_to_1_and_23,
0160         fsrEWK_1_to_23_and_1,
0161         fsrEWK_23_to_1_and_1a,
0162         fsrEWK_23_to_1_and_1b,
0163         fsrEWK_24_to_1_and_1a,
0164         fsrEWK_24_to_1_and_1b,
0165         fsrEWK_25_to_24_and_24,
0166         fsrEWK_25_to_22_and_22,
0167         fsrEWK_25_to_21_and_21,
0168         fsrEWK_24_to_24_and_22,
0169         isrEWK_1_to_1_and_23;
0170 
0171   ulong fsrU1N_1_to_1_and_22,
0172         fsrU1N_1_to_22_and_1,
0173         fsrU1N_11_to_11_and_22,
0174         fsrU1N_11_to_22_and_11,
0175         fsrU1N_22_to_1_and_1a,
0176         fsrU1N_22_to_1_and_1b,
0177         fsrU1N_22_to_2_and_2a,
0178         fsrU1N_22_to_2_and_2b,
0179         fsrU1N_22_to_3_and_3a,
0180         fsrU1N_22_to_3_and_3b,
0181         fsrU1N_22_to_4_and_4a,
0182         fsrU1N_22_to_4_and_4b,
0183         fsrU1N_22_to_5_and_5a,
0184         fsrU1N_22_to_5_and_5b,
0185         fsrU1N_22_to_11_and_11a,
0186         fsrU1N_22_to_11_and_11b,
0187         fsrU1N_22_to_13_and_13a,
0188         fsrU1N_22_to_13_and_13b,
0189         fsrU1N_22_to_15_and_15a,
0190         fsrU1N_22_to_15_and_15b,
0191         fsrU1N_22_to_211_and_211a,
0192         fsrU1N_22_to_211_and_211b,
0193         isrU1N_1_to_1_and_22,
0194         isrU1N_1_to_22_and_1,
0195         isrU1N_22_to_1_and_1,
0196         isrU1N_11_to_11_and_22,
0197         isrU1N_11_to_22_and_11,
0198         isrU1N_22_to_11_and_11;
0199 
0200 private:
0201 
0202   unordered_map< string, DireSplitting* > splittings;
0203   Info* infoPtr;
0204   Settings* settingsPtr;
0205   ParticleData* particleDataPtr;
0206   Rndm* rndmPtr;
0207   BeamParticle* beamAPtr;
0208   BeamParticle* beamBPtr;
0209   CoupSM* coupSMPtr;
0210   DireInfo* direInfoPtr;
0211 
0212   // User may load additional kernels.
0213   DireHooks* hooksPtr;
0214   bool hasExternalHook;
0215 
0216 };
0217 
0218 //==========================================================================
0219 
0220 } // end namespace Pythia8
0221 
0222 #endif // Pythia8_DireSplittingLibrary_H