Update to pythi8.170
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8170 / include / PartonLevel.h
1 // PartonLevel.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2012 Torbjorn Sjostrand.
3 // PYTHIA is licenced under the GNU GPL version 2, 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 "Basics.h"
13 #include "BeamParticle.h"
14 #include "BeamRemnants.h"
15 #include "Event.h"
16 #include "Info.h"
17 #include "MergingHooks.h"
18 #include "MultipartonInteractions.h"
19 #include "ParticleData.h"
20 #include "PartonSystems.h"
21 #include "PythiaStdlib.h"
22 #include "RHadrons.h"
23 #include "Settings.h"
24 #include "SigmaTotal.h"
25 #include "SpaceShower.h"
26 #include "StandardModel.h"
27 #include "TimeShower.h"
28 #include "UserHooks.h"
29
30 namespace Pythia8 {
31  
32 //==========================================================================
33
34 // The PartonLevel class contains the top-level routines to generate
35 // the partonic activity of an event.
36
37 class PartonLevel {
38
39 public:
40
41   // Constructor. 
42   PartonLevel() : userHooksPtr(0) {} 
43  
44   // Initialization of all classes at the parton level.
45   bool init( Info* infoPtrIn, Settings& settings,
46     ParticleData* particleDataPtrIn, Rndm* rndmPtrIn, 
47     BeamParticle* beamAPtrIn, BeamParticle* beamBPtrIn, 
48     BeamParticle* beamPomAPtrIn, BeamParticle* beamPomBPtrIn, 
49     Couplings* couplingsPtrIn, PartonSystems* partonSystemsPtrIn, 
50     SigmaTotal* sigmaTotPtr, TimeShower* timesDecPtrIn, 
51     TimeShower* timesPtrIn, SpaceShower* spacePtrIn, 
52     RHadrons* rHadronsPtrIn, UserHooks* userHooksPtrIn,
53     MergingHooks* mergingHooksPtr, bool useAsTrial);
54  
55   // Generate the next parton-level process.
56   bool next( Event& process, Event& event); 
57
58   // Perform showers in resonance decay chains. (For special cases.)
59   void setupShowerSys( Event& process, Event& event);
60   bool resonanceShowers( Event& process, Event& event, bool skipForR); 
61
62   // Tell whether failure was due to vetoing.
63   bool hasVetoed() const {return doVeto;}
64
65   // Accumulate, print and reset statistics.
66   void accumulate() {if (isResolved && !isDiff) multiPtr->accumulate();}
67   void statistics(bool reset = false) {
68     if (doMPI) multiMB.statistics(reset);}
69     // For now no separate statistics for diffraction??
70     //if (doMPISDA && doDiffraction) multiSDA.statistics(reset); 
71     //if (doMPISDB && doDiffraction) multiSDB.statistics(reset);}
72   void resetStatistics() { if (doMPI) multiMB.resetStatistics(); }
73
74   // Reset PartonLevel object for trial shower usage.
75   void resetTrial();
76   // Provide the pT scale of the last branching in the shower.
77   double pTLastInShower(){ return pTLastBranch; }
78   // Provide the type of the last branching in the shower.
79   int typeLastInShower(){ return typeLastBranch; }
80
81 private: 
82
83   // Constants: could only be changed in the code itself.
84   static const int NTRY;
85
86   // Initialization data, mainly read from Settings.
87   bool   doMinBias, doDiffraction, doMPI, doMPIMB, doMPISDA, doMPISDB, 
88          doMPICD, doMPIinit, doISR, doFSRduringProcess, doFSRafterProcess,  
89          doFSRinResonances, doRemnants, doSecondHard, hasLeptonBeams, 
90          hasPointLeptons, canVetoPT, canVetoStep, canVetoMPIStep, 
91          canVetoEarly, canSetScale, allowRH;
92   double mMinDiff, mWidthDiff, pMaxDiff;
93
94   // Event generation strategy. Number of steps. Maximum pT scales.
95   bool   doVeto;
96   int    nMPI, nISR, nFSRinProc, nFSRinRes, nISRhard, nFSRhard, 
97          typeLatest, nVetoStep, typeVetoStep, nVetoMPIStep, iSysNow;
98   double pTsaveMPI, pTsaveISR, pTsaveFSR, pTvetoPT;
99
100   // Current event properties.
101   bool   isMinBias, isDiffA, isDiffB, isDiffC, isDiff, isSingleDiff, 
102          isDoubleDiff, isCentralDiff, isResolved, isResolvedA, 
103          isResolvedB, isResolvedC;
104   int    sizeProcess, sizeEvent, nHardDone, nHardDoneRHad, iDS;
105   double eCMsave; 
106   vector<bool> inRHadDecay;
107   vector<int>  iPosBefShow;
108
109   // Pointer to various information on the generation.
110   Info*          infoPtr;
111
112   // Pointer to the particle data table.
113   ParticleData*  particleDataPtr;
114
115   // Pointer to the random number generator.
116   Rndm*          rndmPtr;
117
118   // Pointers to the two incoming beams.
119   BeamParticle*  beamAPtr;
120   BeamParticle*  beamBPtr;
121
122   // Spare copies of normal pointers. Pointers to Pomeron beam-inside-beam.
123   BeamParticle*  beamHadAPtr;  
124   BeamParticle*  beamHadBPtr;  
125   BeamParticle*  beamPomAPtr;
126   BeamParticle*  beamPomBPtr;
127
128   // Pointers to Standard Model couplings.
129   Couplings*     couplingsPtr;
130   
131   // Pointer to information on subcollision parton locations.
132   PartonSystems* partonSystemsPtr;
133
134   // Pointer to userHooks object for user interaction with program.
135   UserHooks*     userHooksPtr;
136
137   // Pointers to timelike showers for resonance decays and the rest.
138   TimeShower*    timesDecPtr;
139   TimeShower*    timesPtr;
140
141   // Pointer to spacelike showers.
142   SpaceShower*   spacePtr;
143
144   // The generator classes for multiparton interactions.
145   MultipartonInteractions  multiMB;
146   MultipartonInteractions  multiSDA;
147   MultipartonInteractions  multiSDB;
148   MultipartonInteractions  multiCD;
149   MultipartonInteractions* multiPtr;
150
151   // The generator class to construct beam-remnant kinematics. 
152   BeamRemnants remnants;
153   // Separate instance for central diffraction.
154   BeamRemnants remnantsCD;
155   
156   // The RHadrons class is used to fragment off and decay R-hadrons.
157   RHadrons*    rHadronsPtr;
158
159   // Resolved diffraction: find how many systems should have it.
160   int decideResolvedDiff( Event& process);
161
162   // Set up an unresolved process, i.e. elastic or diffractive.
163   bool setupUnresolvedSys( Event& process, Event& event);
164
165   // Set up the hard process, excluding subsequent resonance decays.
166   void setupHardSys( Event& process, Event& event);
167
168   // Resolved diffraction: pick whether to have it and set up for it.
169   void setupResolvedDiff( Event& process);
170
171   // Resolved diffraction: restore normal behaviour.
172   void leaveResolvedDiff( int iHardLoop, Event& process, Event& event);
173
174   // Pointer to MergingHooks object for user interaction with the merging.
175   MergingHooks* mergingHooksPtr;
176   // Parameters to specify trial shower usage
177   bool doTrial;
178   int nTrialEmissions;
179   // Parameters to store to veto trial showers
180   double pTLastBranch;
181   int typeLastBranch;
182   // Parameters to specify merging usage
183   bool doMerging;
184   bool doMergeFirstEmm;
185
186 };
187
188 //==========================================================================
189
190 } // end namespace Pythia8
191
192 #endif // Pythia8_PartonLevel_H