PYTHIA  8.314
DireSplittingLibrary.h
1 // DireSplittingLibrary.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2025 Stefan Prestel, Torbjorn Sjostrand.
3 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
4 // Please respect the MCnet Guidelines, see GUIDELINES for details.
5 
6 // Header file for the Dire splitting library.
7 
8 #ifndef Pythia8_DireSplittingLibrary_H
9 #define Pythia8_DireSplittingLibrary_H
10 
11 #define DIRE_SPLITTINGLIBRARY_VERSION "2.002"
12 
13 #include "Pythia8/Basics.h"
14 #include "Pythia8/BeamParticle.h"
15 #include "Pythia8/ParticleData.h"
16 #include "Pythia8/PythiaStdlib.h"
17 #include "Pythia8/Settings.h"
18 #include "Pythia8/StandardModel.h"
19 
20 #include "Pythia8/DireSplittings.h"
21 #include "Pythia8/DireSplittingsQCD.h"
22 #include "Pythia8/DireSplittingsQED.h"
23 #include "Pythia8/DireSplittingsEW.h"
24 #include "Pythia8/DireSplittingsU1new.h"
25 #include "Pythia8/DireBasics.h"
26 #include "Pythia8/DireHooks.h"
27 
28 namespace Pythia8 {
29 
30 class DireSpace;
31 class DireTimes;
32 
33 //==========================================================================
34 
36 
37 public:
38 
39  // Constructor and destructor.
41  infoPtr(0), settingsPtr(0), particleDataPtr(0),
42  rndmPtr(0), beamAPtr(0), beamBPtr(0), coupSMPtr(0), hooksPtr(0),
43  hasExternalHook(false) {}
45 
46  // Initialisation.
47  void init(Info* infoPtr, BeamParticlePtr beamA, BeamParticlePtr beamB,
48  DireInfo* direInfo, DireHooks* hooks = nullptr);
49  void initFSR();
50  void initISR();
51  void clear();
52 
53  void setTimesPtr (shared_ptr<DireTimes> fsrIn) {
54  for (unordered_map<string,DireSplitting*>::iterator
55  it = splittings.begin(); it != splittings.end(); ++it )
56  it->second->setTimesPtr(fsrIn);
57  }
58  void setTimesDecPtr (shared_ptr<DireTimes> fsrIn) {
59  for (unordered_map<string,DireSplitting*>::iterator
60  it = splittings.begin(); it != splittings.end(); ++it )
61  it->second->setTimesDecPtr(fsrIn);
62  }
63  void setSpacePtr (shared_ptr<DireSpace> isrIn) {
64  for (unordered_map<string,DireSplitting*>::iterator
65  it = splittings.begin(); it != splittings.end(); ++it )
66  it->second->setSpacePtr(isrIn);
67  }
68 
69  unordered_map< string, DireSplitting* > getSplittings() { return splittings;}
70 
71  // Overload index operator to access element of splitting vector.
72  DireSplitting* operator[](string id);
73  const DireSplitting* operator[](string id) const;
74 
75  // Generate name for a splitting
76  vector<int> getSplittingRadBefID(const Event& event, int rad, int emt);
77  vector<int> getSplittingRadBefID_new(const Event& event, int rad, int emt);
78 
79  // Generate name for a splitting
80  vector<string> getSplittingName(const Event& event, int rad, int emt);
81  vector<string> getSplittingName_new(const Event& event, int rad, int emt);
82 
83  // Check number of particles produced in splitting.
84  int nEmissions(string name);
85 
86  void setKernelHooks(DireHooks* hooks) {hooksPtr = hooks;}
87 
88  // Some string name hashes, to avoid string conparisons.
90  fsrQCD_1_to_21_and_1,
91  fsrQCD_21_to_21_and_21a,
92  fsrQCD_21_to_21_and_21b,
93  fsrQCD_21_to_1_and_1a,
94  fsrQCD_21_to_1_and_1b,
95  fsrQCD_1_to_2_and_1_and_2,
96  fsrQCD_1_to_1_and_1_and_1,
97  fsrQCD_1_to_1_and_21_notPartial,
98  fsrQCD_21_to_21_and_21_notPartial,
99  fsrQCD_21_to_1_and_1_notPartial,
100  fsrQCD_1_to_1_and_21_and_21,
101  fsrQCD_1_to_1_and_1_and_1a,
102  fsrQCD_1_to_1_and_1_and_1b,
103  fsrQCD_1_to_1_and_2_and_2a,
104  fsrQCD_1_to_1_and_2_and_2b,
105  fsrQCD_1_to_1_and_3_and_3a,
106  fsrQCD_1_to_1_and_3_and_3b,
107  fsrQCD_1_to_1_and_4_and_4a,
108  fsrQCD_1_to_1_and_4_and_4b,
109  fsrQCD_1_to_1_and_5_and_5a,
110  fsrQCD_1_to_1_and_5_and_5b,
111  fsrQCD_21_to_21_and_21_and_21,
112  fsrQCD_21_to_21_and_1_and_1a,
113  fsrQCD_21_to_21_and_1_and_1b,
114  fsrQCD_21_to_21_and_2_and_2a,
115  fsrQCD_21_to_21_and_2_and_2b,
116  fsrQCD_21_to_21_and_3_and_3a,
117  fsrQCD_21_to_21_and_3_and_3b,
118  fsrQCD_21_to_21_and_4_and_4a,
119  fsrQCD_21_to_21_and_4_and_4b,
120  fsrQCD_21_to_21_and_5_and_5a,
121  fsrQCD_21_to_21_and_5_and_5b,
122  isrQCD_1_to_1_and_21,
123  isrQCD_21_to_1_and_1,
124  isrQCD_21_to_21_and_21a,
125  isrQCD_21_to_21_and_21b,
126  isrQCD_1_to_21_and_1,
127  isrQCD_1_to_2_and_1_and_2,
128  isrQCD_1_to_1_and_1_and_1;
129 
130  // Some string name hashes, to avoid string conparisons.
132  fsrQED_1_to_22_and_1,
133  fsrQED_11_to_11_and_22,
134  fsrQED_11_to_22_and_11,
135  fsrQED_22_to_1_and_1a,
136  fsrQED_22_to_1_and_1b,
137  fsrQED_22_to_2_and_2a,
138  fsrQED_22_to_2_and_2b,
139  fsrQED_22_to_3_and_3a,
140  fsrQED_22_to_3_and_3b,
141  fsrQED_22_to_4_and_4a,
142  fsrQED_22_to_4_and_4b,
143  fsrQED_22_to_5_and_5a,
144  fsrQED_22_to_5_and_5b,
145  fsrQED_22_to_11_and_11a,
146  fsrQED_22_to_11_and_11b,
147  fsrQED_22_to_13_and_13a,
148  fsrQED_22_to_13_and_13b,
149  fsrQED_22_to_15_and_15a,
150  fsrQED_22_to_15_and_15b,
151  fsrQED_1_to_1_and_22_notPartial,
152  fsrQED_11_to_11_and_22_notPartial,
153  isrQED_1_to_1_and_22,
154  isrQED_11_to_11_and_22,
155  isrQED_1_to_22_and_1,
156  isrQED_11_to_22_and_11,
157  isrQED_22_to_1_and_1,
158  isrQED_22_to_11_and_11;
159 
160  ulong fsrEWK_1_to_1_and_23,
161  fsrEWK_1_to_23_and_1,
162  fsrEWK_23_to_1_and_1a,
163  fsrEWK_23_to_1_and_1b,
164  fsrEWK_24_to_1_and_1a,
165  fsrEWK_24_to_1_and_1b,
166  fsrEWK_25_to_24_and_24,
167  fsrEWK_25_to_22_and_22,
168  fsrEWK_25_to_21_and_21,
169  fsrEWK_24_to_24_and_22,
170  isrEWK_1_to_1_and_23;
171 
172  ulong fsrU1N_1_to_1_and_22,
173  fsrU1N_1_to_22_and_1,
174  fsrU1N_11_to_11_and_22,
175  fsrU1N_11_to_22_and_11,
176  fsrU1N_22_to_1_and_1a,
177  fsrU1N_22_to_1_and_1b,
178  fsrU1N_22_to_2_and_2a,
179  fsrU1N_22_to_2_and_2b,
180  fsrU1N_22_to_3_and_3a,
181  fsrU1N_22_to_3_and_3b,
182  fsrU1N_22_to_4_and_4a,
183  fsrU1N_22_to_4_and_4b,
184  fsrU1N_22_to_5_and_5a,
185  fsrU1N_22_to_5_and_5b,
186  fsrU1N_22_to_11_and_11a,
187  fsrU1N_22_to_11_and_11b,
188  fsrU1N_22_to_13_and_13a,
189  fsrU1N_22_to_13_and_13b,
190  fsrU1N_22_to_15_and_15a,
191  fsrU1N_22_to_15_and_15b,
192  fsrU1N_22_to_211_and_211a,
193  fsrU1N_22_to_211_and_211b,
194  isrU1N_1_to_1_and_22,
195  isrU1N_1_to_22_and_1,
196  isrU1N_22_to_1_and_1,
197  isrU1N_11_to_11_and_22,
198  isrU1N_11_to_22_and_11,
199  isrU1N_22_to_11_and_11;
200 
201 private:
202 
203  unordered_map< string, DireSplitting* > splittings;
204  Info* infoPtr;
205  Settings* settingsPtr;
206  ParticleData* particleDataPtr;
207  Rndm* rndmPtr;
208  BeamParticlePtr beamAPtr;
209  BeamParticlePtr beamBPtr;
210  CoupSM* coupSMPtr;
211  DireInfo* direInfoPtr;
212 
213  // User may load additional kernels.
214  DireHooks* hooksPtr;
215  bool hasExternalHook;
216 
217 };
218 
219 //==========================================================================
220 
221 } // end namespace Pythia8
222 
223 #endif // Pythia8_DireSplittingLibrary_H
void init(Info *infoPtr, BeamParticlePtr beamA, BeamParticlePtr beamB, DireInfo *direInfo, DireHooks *hooks=nullptr)
Initialisation.
Definition: DireSplittingLibrary.cc:30
Definition: Info.h:45
void clear()
class SplittingLibrary
Definition: DireSplittingLibrary.cc:20
The Event class holds all info on the generated event.
Definition: Event.h:408
ulong fsrQED_1_to_1_and_22
Some string name hashes, to avoid string conparisons.
Definition: DireSplittingLibrary.h:131
ulong fsrQCD_1_to_1_and_21
Some string name hashes, to avoid string conparisons.
Definition: DireSplittingLibrary.h:89
vector< int > getSplittingRadBefID(const Event &event, int rad, int emt)
Generate name for a splitting.
Definition: DireSplittingLibrary.cc:614
Definition: DireBasics.h:374
DireSplitting * operator[](string id)
Overload index operator to access element of splitting vector.
Definition: DireSplittingLibrary.cc:600
Definition: Basics.h:388
Definition: DireSplittings.h:53
int nEmissions(string name)
Check number of particles produced in splitting.
Definition: DireSplittingLibrary.cc:688
Definition: StandardModel.h:135
DireSplittingLibrary()
Constructor and destructor.
Definition: DireSplittingLibrary.h:40
void initISR()
Definition: DireSplittingLibrary.cc:516
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
Hooks is base class for user access to program execution.
Definition: DireHooks.h:20
vector< string > getSplittingName_new(const Event &event, int rad, int emt)
Generate name for a splitting.
Definition: DireSplittingLibrary.cc:638
void initFSR()
Definition: DireSplittingLibrary.cc:173
Definition: DireSplittingLibrary.h:35
vector< string > getSplittingName(const Event &event, int rad, int emt)
Generate name for a splitting.
Definition: DireSplittingLibrary.cc:681
This class holds a map of all ParticleDataEntries.
Definition: ParticleData.h:422
Definition: Settings.h:196