PYTHIA  8.313
PartonLevel.h
1 // PartonLevel.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2025 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 // This file contains the main class for parton-level event generation
7 // PartonLevel: administrates showers, multiparton interactions and remnants.
8 
9 #ifndef Pythia8_PartonLevel_H
10 #define Pythia8_PartonLevel_H
11 
12 #include "Pythia8/Basics.h"
13 #include "Pythia8/BeamParticle.h"
14 #include "Pythia8/BeamRemnants.h"
15 #include "Pythia8/Event.h"
16 #include "Pythia8/HardDiffraction.h"
17 #include "Pythia8/Info.h"
18 #include "Pythia8/JunctionSplitting.h"
19 #include "Pythia8/MergingHooks.h"
20 #include "Pythia8/MultipartonInteractions.h"
21 #include "Pythia8/ParticleData.h"
22 #include "Pythia8/PartonSystems.h"
23 #include "Pythia8/PartonVertex.h"
24 #include "Pythia8/PhysicsBase.h"
25 #include "Pythia8/PythiaStdlib.h"
26 #include "Pythia8/ResonanceDecays.h"
27 #include "Pythia8/RHadrons.h"
28 #include "Pythia8/Settings.h"
29 #include "Pythia8/Settings.h"
30 #include "Pythia8/SharedPointers.h"
31 #include "Pythia8/SigmaTotal.h"
32 #include "Pythia8/SpaceShower.h"
33 #include "Pythia8/StandardModel.h"
34 #include "Pythia8/StringLength.h"
35 #include "Pythia8/TimeShower.h"
36 #include "Pythia8/UserHooks.h"
37 
38 namespace Pythia8 {
39 
40 //==========================================================================
41 
42 // The PartonLevel class contains the top-level routines to generate
43 // the partonic activity of an event.
44 
45 class PartonLevel : public PhysicsBase {
46 
47 public:
48 
49  // Constructor.
50  PartonLevel() = default;
51 
52  // Initialization of all classes at the parton level.
53  bool init( TimeShowerPtr timesDecPtrIn, TimeShowerPtr timesPtrIn,
54  SpaceShowerPtr spacePtrIn, RHadronsPtr rHadronsPtrIn,
55  MergingHooksPtr mergingHooksPtr, PartonVertexPtr partonVertexPtrIn,
56  StringIntPtr stringInteractionPtrIn,
57  bool useAsTrial);
58 
59  // Special setup to allow switching between beam PDFs for MPI handling.
60  // Not needed when MPI for incoming pomeron, since same for all beams.
61  void initSwitchID( const vector<int>& idAList) {
62  multiMB.initSwitchID( idAList);
63  multiSDA.initSwitchID( idAList);}
64 
65  // Switch to new beam particle identities; for similar hadrons only.
66  void setBeamID(int iPDFA = 0) {multiMB.setBeamID(iPDFA);
67  multiSDA.setBeamID(iPDFA);}
68 
69  // Generate the next parton-level process.
70  bool next( Event& process, Event& event);
71 
72  // Perform showers in resonance decay chains. (For special cases.)
73  void setupShowerSys( Event& process, Event& event);
74  bool resonanceShowers( Event& process, Event& event, bool skipForR);
75 
76  // Perform decays and showers of W and Z emitted in shower.
77  bool wzDecayShowers( Event& event);
78 
79  // Tell whether failure was due to vetoing.
80  bool hasVetoed() const {return doVeto;}
81  bool hasVetoedDiff() const {return doDiffVeto;}
82  bool hasVetoedMerging() const {return doMergingVeto;}
83 
84  // Accumulate, print and reset statistics.
85  void accumulate() {if (isResolved && !isDiff) multiPtr->accumulate();}
86  void statistics(bool reset = false) {
87  if (doMPI) multiMB.statistics(reset);}
88  void resetStatistics() { if (doMPI) multiMB.resetStatistics(); }
89 
90  // Reset PartonLevel object for trial shower usage.
91  void resetTrial();
92  // Provide the pT scale of the last branching in the shower.
93  double pTLastInShower() { return pTLastBranch; }
94  // Provide the type of the last branching in the shower.
95  int typeLastInShower() { return typeLastBranch; }
96 
97  // Check of any trial emissions could have been enhanced.
98  bool canEnhanceTrial() { return doEnhanceTrial; }
99  // Get enhanced trial emission evolution variable.
101  if (canEnhanceTrial()) return infoPtr->weightContainerPtr->
102  weightsSimpleShower.getEnhancedTrialPT();
103  return 0.;
104  }
105  // Get enhanced trial emission weight.
107  if (canEnhanceTrial()) return infoPtr->weightContainerPtr->
108  weightsSimpleShower.getEnhancedTrialWeight();
109  return 1.;
110  }
111 
112  // Spare copies of normal beam pointers.
114  BeamParticle* beamHadBPtr{};
115 
116  // Pointers to timelike showers for resonance decays and the rest.
117  TimeShowerPtr timesDecPtr{};
118  TimeShowerPtr timesPtr{};
119 
120  // Pointer to spacelike showers.
121  SpaceShowerPtr spacePtr{};
122 
123 protected:
124 
125  virtual void onInitInfoPtr() override {
126  registerSubObject(multiMB);
127  registerSubObject(multiSDA);
128  registerSubObject(multiSDB);
129  registerSubObject(multiCD);
130  registerSubObject(multiGmGm);
131  registerSubObject(remnants);
132  registerSubObject(resonanceDecays);
133  registerSubObject(junctionSplitting);
134  registerSubObject(hardDiffraction);
135  }
136 
137 private:
138 
139  // Constants: could only be changed in the code itself.
140  static const int NTRY;
141 
142  // Initialization data, mainly read from Settings.
143  bool doNonDiff{}, doDiffraction{}, doMPI{}, doMPIMB{}, doMPISDA{},
144  doMPISDB{}, doMPICD{}, doMPIinit{}, doISR{}, doFSRduringProcess{},
145  doFSRafterProcess{}, doFSRinResonances{}, doInterleaveResDec{},
146  doRemnants{}, doSecondHard{}, hasOneLeptonBeam{}, hasTwoLeptonBeams{},
147  hasPointLeptons{}, canVetoPT{}, canVetoStep{}, canVetoMPIStep{},
148  canVetoEarly{}, canSetScale{}, allowRH{}, earlyResDec{},
149  vetoWeakJets{}, canReconResSys{}, doReconnect{}, doHardDiff{},
150  forceResonanceCR{}, doNDgamma{}, doMPIgmgm{}, showUnresGamma{};
151  int pTmaxMatchMPI;
152  double mMinDiff{}, mWidthDiff{}, pMaxDiff{}, vetoWeakDeltaR2{};
153 
154  // Event generation strategy. Number of steps. Maximum pT scales.
155  bool doVeto{};
156  int nMPI{}, nISR{}, nFSRinProc{}, nFSRinRes{}, nISRhard{}, nFSRhard{},
157  typeLatest{}, nVetoStep{}, typeVetoStep{}, nVetoMPIStep{}, iSysNow{},
158  reconnectMode{}, hardDiffSide{}, sampleTypeDiff{};
159  double pTsaveMPI{}, pTsaveISR{}, pTsaveFSR{}, pTvetoPT{};
160 
161  // Current event properties.
162  bool isNonDiff{}, isDiffA{}, isDiffB{}, isDiffC{}, isDiff{},
163  isSingleDiff{}, isDoubleDiff{}, isCentralDiff{},
164  isResolved{}, isResolvedA{}, isResolvedB{}, isResolvedC{},
165  isHardDiffA{}, isHardDiffB{}, isHardDiff{}, doDiffVeto{},
166  hardDiffSet{}, isElastic{}, twoHard{};
167  int sizeProcess{}, sizeEvent{}, nHardDone{}, nHardDoneRHad{}, iDS{};
168  double eCMsave;
169  vector<bool> inRHadDecay;
170  vector<int> iPosBefShow;
171 
172  // Variables for photon inside electron.
173  bool hasGammaA{}, hasGammaB{}, beamHasGamma{}, beamAisGamma{},
174  beamBisGamma{}, beamAhasGamma{}, beamBhasGamma{}, beamAhasResGamma{},
175  beamBhasResGamma{}, beamHasResGamma{}, isGammaHadronDir{},
176  sampleQ2gamma{};
177  int gammaMode{}, gammaModeEvent{}, gammaOffset{};
178  double eCMsaveGamma{};
179 
180  // Pointer to assign space-time vertices during parton evolution.
181  PartonVertexPtr partonVertexPtr{};
182 
183  // The generator classes for multiparton interactions.
184  MultipartonInteractions multiMB;
185  MultipartonInteractions multiSDA;
186  MultipartonInteractions multiSDB;
187  MultipartonInteractions multiCD;
188  MultipartonInteractions* multiPtr{};
189  MultipartonInteractions multiGmGm;
190 
191  // The generator class to construct beam-remnant kinematics.
192  BeamRemnants remnants;
193 
194  // The RHadrons class is used to fragment off and decay R-hadrons.
195  RHadronsPtr rHadronsPtr{};
196 
197  // ResonanceDecay object does sequential resonance decays.
198  ResonanceDecays resonanceDecays;
199 
200  // The Colour reconnection class used to do colour reconnection.
201  ColRecPtr colourReconnectionPtr{};
202 
203  // The Junction splitting class used to split junctions systems.
204  JunctionSplitting junctionSplitting;
205 
206  // The Diffraction class is for hard diffraction selection.
207  HardDiffraction hardDiffraction;
208 
209  // Resolved diffraction: find how many systems should have it.
210  int decideResolvedDiff( Event& process);
211 
212  // Set up an unresolved process, i.e. elastic or diffractive.
213  bool setupUnresolvedSys( Event& process, Event& event);
214 
215  // Set up the hard process, excluding subsequent resonance decays.
216  void setupHardSys( Event& process, Event& event);
217 
218  // Resolved diffraction: pick whether to have it and set up for it.
219  void setupResolvedDiff( Event& process);
220 
221  // Resolved diffraction: restore normal behaviour.
222  void leaveResolvedDiff( int iHardLoop, Event& process, Event& event);
223 
224  // Hard diffraction: set up the process record.
225  void setupHardDiff( Event& process);
226 
227  // Hard diffraction: leave the process record.
228  void leaveHardDiff( Event& process, Event& event, bool physical = true);
229 
230  // Photon beam inside lepton beam: set up the parton level generation.
231  bool setupResolvedLeptonGamma( Event& process);
232 
233  // Photon beam inside lepton beam: recover the whole event and
234  // add scattered leptons.
235  void leaveResolvedLeptonGamma( Event& process, Event& event,
236  bool physical = true);
237 
238  // Set the photon collision mode for the current event.
239  void saveGammaModeEvent( int gammaModeA, int gammaModeB);
240 
241  // Photon beam inside lepton beam: set up the parton level generation.
242  void cleanEventFromGamma( Event& event);
243 
244  // Pointer to MergingHooks object for user interaction with the merging.
245  MergingHooksPtr mergingHooksPtr{};
246  // Parameters to specify trial shower usage.
247  bool doTrial{};
248  bool doEnhanceTrial{};
249  int nTrialEmissions{};
250  // Parameters to store to veto trial showers.
251  double pTLastBranch{};
252  int typeLastBranch{};
253  // Parameters to specify merging usage.
254  bool canRemoveEvent{}, canRemoveEmission{}, doMergingVeto{};
255 
256 };
257 
258 //==========================================================================
259 
260 } // end namespace Pythia8
261 
262 #endif // Pythia8_PartonLevel_H
bool hasVetoed() const
Tell whether failure was due to vetoing.
Definition: PartonLevel.h:80
bool wzDecayShowers(Event &event)
Perform decays and showers of W and Z emitted in shower.
Definition: PartonLevel.cc:2959
bool resonanceShowers(Event &process, Event &event, bool skipForR)
Definition: PartonLevel.cc:2627
Definition: PhysicsBase.h:27
void registerSubObject(PhysicsBase &pb)
Register a sub object that should have its information in sync with this.
Definition: PhysicsBase.cc:56
void statistics(bool resetStat=false)
Print statistics on number of multiparton-interactions processes.
Definition: MultipartonInteractions.cc:2975
The Event class holds all info on the generated event.
Definition: Event.h:408
virtual void onInitInfoPtr() override
Definition: PartonLevel.h:125
Definition: BeamParticle.h:133
double getEnhancedTrialWeight()
Get enhanced trial emission weight.
Definition: PartonLevel.h:106
int typeLastInShower()
Provide the type of the last branching in the shower.
Definition: PartonLevel.h:95
bool next(Event &process, Event &event)
Generate the next parton-level process.
Definition: PartonLevel.cc:338
Definition: JunctionSplitting.h:30
double pTLastInShower()
Provide the pT scale of the last branching in the shower.
Definition: PartonLevel.h:93
SpaceShowerPtr spacePtr
Pointer to spacelike showers.
Definition: PartonLevel.h:121
void accumulate()
Definition: MultipartonInteractions.h:206
bool canEnhanceTrial()
Check of any trial emissions could have been enhanced.
Definition: PartonLevel.h:98
bool init(TimeShowerPtr timesDecPtrIn, TimeShowerPtr timesPtrIn, SpaceShowerPtr spacePtrIn, RHadronsPtr rHadronsPtrIn, MergingHooksPtr mergingHooksPtr, PartonVertexPtr partonVertexPtrIn, StringIntPtr stringInteractionPtrIn, bool useAsTrial)
Initialization of all classes at the parton level.
Definition: PartonLevel.cc:30
double getEnhancedTrialPT()
Get enhanced trial emission evolution variable.
Definition: PartonLevel.h:100
Definition: PartonLevel.h:45
void setBeamID(int iPDFA=0)
Switch to new beam particle identities; for similar hadrons only.
Definition: PartonLevel.h:66
void setupShowerSys(Event &process, Event &event)
Perform showers in resonance decay chains. (For special cases.)
Definition: PartonLevel.cc:1654
void initSwitchID(const vector< int > &idAListIn)
Special setup to allow switching between beam PDFs for MPI handling.
Definition: MultipartonInteractions.h:142
Definition: HardDiffraction.h:31
PartonLevel()=default
Constructor.
BeamParticle * beamHadAPtr
Spare copies of normal beam pointers.
Definition: PartonLevel.h:113
void resetTrial()
Reset PartonLevel object for trial shower usage.
Definition: PartonLevel.cc:313
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
void accumulate()
Accumulate, print and reset statistics.
Definition: PartonLevel.h:85
Info * infoPtr
Definition: PhysicsBase.h:78
Definition: MultipartonInteractions.h:100
Definition: BeamRemnants.h:35
void initSwitchID(const vector< int > &idAList)
Definition: PartonLevel.h:61
Definition: ResonanceDecays.h:28
TimeShowerPtr timesDecPtr
Pointers to timelike showers for resonance decays and the rest.
Definition: PartonLevel.h:117
void setBeamID(int iPDFAin)
Switch to new beam particle identities, and possibly PDFs.
Definition: MultipartonInteractions.h:147