Line data Source code
1 : // BeamRemnants.h is a part of the PYTHIA event generator.
2 : // Copyright (C) 2015 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 : // Header file for beam-remnants handling.
7 : // BeamRemnants: matches the remnants between the two beams.
8 :
9 : #ifndef Pythia8_BeamRemnants_H
10 : #define Pythia8_BeamRemnants_H
11 :
12 : #include "Pythia8/Basics.h"
13 : #include "Pythia8/BeamParticle.h"
14 : #include "Pythia8/ColourReconnection.h"
15 : #include "Pythia8/Event.h"
16 : #include "Pythia8/FragmentationFlavZpT.h"
17 : #include "Pythia8/Info.h"
18 : #include "Pythia8/JunctionSplitting.h"
19 : #include "Pythia8/ParticleData.h"
20 : #include "Pythia8/PartonDistributions.h"
21 : #include "Pythia8/PartonSystems.h"
22 : #include "Pythia8/PythiaStdlib.h"
23 : #include "Pythia8/Settings.h"
24 : #include "Pythia8/StringLength.h"
25 :
26 : namespace Pythia8 {
27 :
28 : //==========================================================================
29 :
30 : // This class matches the kinematics of the hard-scattering subsystems
31 : // (with primordial kT added) to that of the two beam remnants.
32 :
33 0 : class BeamRemnants {
34 :
35 : public:
36 :
37 : // Constructor.
38 0 : BeamRemnants() : iDS(0) { }
39 :
40 : // Initialization.
41 : bool init( Info* infoPtrIn, Settings& settings, Rndm* rndmPtrIn,
42 : BeamParticle* beamAPtrIn, BeamParticle* beamBPtrIn,
43 : PartonSystems* partonSystemsPtrIn, ParticleData* particleDataPtrIn,
44 : ColourReconnection * colourReconnectionPtrIn);
45 :
46 : // New beams possible for handling of hard diffraction.
47 : void reassignBeamPtrs( BeamParticle* beamAPtrIn, BeamParticle* beamBPtrIn,
48 0 : int iDSin) {beamAPtr = beamAPtrIn; beamBPtr = beamBPtrIn; iDS = iDSin;}
49 :
50 : // Select the flavours/kinematics/colours of the two beam remnants.
51 : bool add( Event& event, int iFirst = 0, bool doDiffCR = false);
52 :
53 : private:
54 :
55 : // Constants: could only be changed in the code itself.
56 : static const bool ALLOWCOLOURTWICE, CORRECTMISMATCH;
57 : static const int NTRYCOLMATCH, NTRYKINMATCH;
58 :
59 : // Initialization data, read from Settings.
60 : bool doPrimordialKT, allowRescatter, doRescatterRestoreY, doReconnect;
61 : double primordialKTsoft, primordialKThard, primordialKTremnant,
62 : halfScaleForKT, halfMassForKT, reducedKTatHighY;
63 : int remnantMode, reconnectMode;
64 :
65 : // Information set for events.
66 : bool isDIS;
67 : int nSys, oldSize, iDS;
68 : double eCM, sCM;
69 :
70 : // Colour collapses (when one colour is mapped onto another).
71 : vector<int> colFrom, colTo;
72 :
73 : // Pointer to various information on the generation.
74 : Info* infoPtr;
75 :
76 : // Pointer to the random number generator.
77 : Rndm* rndmPtr;
78 :
79 : // Pointers to the two incoming beams.
80 : BeamParticle* beamAPtr;
81 : BeamParticle* beamBPtr;
82 :
83 : // Pointer to the colour reconnection class.
84 : ColourReconnection* colourReconnectionPtr;
85 :
86 : // StringLength class.
87 : StringLength stringLength;
88 :
89 : // Junction splitting class.
90 : JunctionSplitting junctionSplitting;
91 :
92 : // Select the flavours/kinematics/colours of the two beam remnants.
93 : bool addOld( Event& event);
94 :
95 : // Select the flavours/kinematics/colours of the two beam remnants.
96 : bool addNew( Event& event);
97 :
98 : // Pointer to information on subcollision parton locations.
99 : PartonSystems* partonSystemsPtr;
100 :
101 : // Do the kinematics of the collision subsystems and two beam remnants.
102 : bool setKinematics( Event& event);
103 :
104 : // Special beam remnant kinematics for Deeply Inelastic Scattering.
105 : bool setDISKinematics( Event& event);
106 :
107 : // Update colours of outgoing particles in the event.
108 : void updateColEvent( Event& event, vector<pair <int,int> > colChanges);
109 :
110 : // Check that colours are consistent.
111 : bool checkColours( Event& event);
112 :
113 : // Find junction chains.
114 : vector <vector<int> > findJunChains(vector<vector <int> > iPartonJun,
115 : vector<vector<int> > iPartonAjun);
116 :
117 : // Split junction configuration into smaller parts.
118 : bool splitJunChains(Event& event, vector<vector<int > >& iPartonJun,
119 : vector<vector< int > >& ipartonAntiJun);
120 :
121 : // Get junction chains.
122 : vector<vector<int > > getJunChains(Event& event);
123 :
124 : };
125 :
126 : //==========================================================================
127 :
128 : } // end namespace Pythia8
129 :
130 : #endif // Pythia8_BeamRemnants_H
|