Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-16 09:03:40

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