]>
Commit | Line | Data |
---|---|---|
63ba5337 | 1 | // FragmentationSystems.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 auxiliary classes in the fragmentation process. | |
7 | // ColSinglet contains info on an individual singlet. | |
8 | // ColConfig describes the colour configuration of the whole event. | |
9 | // StringRegion keeps track on string momenta and directions. | |
10 | // StringSystem contains all the StringRegions of the colour singlet. | |
11 | ||
12 | #ifndef Pythia8_FragmentationSystems_H | |
13 | #define Pythia8_FragmentationSystems_H | |
14 | ||
15 | #include "Basics.h" | |
16 | #include "Event.h" | |
17 | #include "FragmentationFlavZpT.h" | |
18 | #include "Info.h" | |
19 | #include "ParticleData.h" | |
20 | #include "PythiaStdlib.h" | |
21 | #include "Settings.h" | |
22 | ||
23 | namespace Pythia8 { | |
24 | ||
25 | //========================================================================== | |
26 | ||
27 | // The ColSinglet class contains info on an individual singlet. | |
28 | // Only to be used inside ColConfig, so no private members. | |
29 | ||
30 | class ColSinglet { | |
31 | ||
32 | public: | |
33 | ||
34 | // Constructors. | |
35 | ColSinglet() : pSum(0., 0., 0., 0.), mass(0.), massExcess(0.), | |
36 | hasJunction(false), isClosed(false), isCollected(false) {} | |
37 | ColSinglet(vector<int>& iPartonIn, Vec4 pSumIn, double massIn, | |
38 | double massExcessIn, bool hasJunctionIn = false, | |
39 | bool isClosedIn = false, bool isCollectedIn = false) | |
40 | : iParton(iPartonIn), pSum(pSumIn), mass(massIn), | |
41 | massExcess(massExcessIn), hasJunction(hasJunctionIn), | |
42 | isClosed(isClosedIn), isCollected(isCollectedIn) {} | |
43 | ||
44 | // Size of iParton array. | |
45 | int size() const { return iParton.size();} | |
46 | ||
47 | // Stored quantities. | |
48 | vector<int> iParton; | |
49 | Vec4 pSum; | |
50 | double mass, massExcess; | |
51 | bool hasJunction, isClosed, isCollected; | |
52 | ||
53 | }; | |
54 | ||
55 | //========================================================================== | |
56 | ||
57 | // The ColConfig class describes the colour configuration of the whole event. | |
58 | ||
59 | class ColConfig { | |
60 | ||
61 | public: | |
62 | ||
63 | // Constructor. | |
64 | ColConfig() {singlets.resize(0);} | |
65 | ||
66 | // Initialize and save pointers. | |
67 | void init(Info* infoPtrIn, Settings& settings, StringFlav* flavSelPtrIn); | |
68 | ||
69 | // Number of colour singlets. | |
70 | int size() const {return singlets.size();} | |
71 | ||
72 | // Overload index operator to access separate colour singlets. | |
73 | ColSinglet& operator[](int iSub) {return singlets[iSub];} | |
74 | ||
75 | // Clear contents. | |
76 | void clear() {singlets.resize(0);} | |
77 | ||
78 | // Insert a new colour singlet system in ascending mass order. | |
79 | // Calculate its properties. Join nearby partons. | |
80 | bool insert( vector<int>& iPartonIn, Event& event); | |
81 | ||
82 | // Erase a colour singlet system. (Rare operation.) | |
83 | void erase(int iSub) {singlets.erase(singlets.begin() + iSub);} | |
84 | ||
85 | // Collect all partons of singlet to be consecutively ordered. | |
86 | void collect(int iSub, Event& event, bool skipTrivial = true); | |
87 | ||
88 | // Find to which singlet system a particle belongs. | |
89 | int findSinglet(int i); | |
90 | ||
91 | // List all currently identified singlets. | |
92 | void list(ostream& os = cout) const; | |
93 | ||
94 | private: | |
95 | ||
96 | // Constants: could only be changed in the code itself. | |
97 | static const double CONSTITUENTMASS; | |
98 | ||
99 | // Pointer to various information on the generation. | |
100 | Info* infoPtr; | |
101 | ||
102 | // Pointer to class for flavour generation. | |
103 | StringFlav* flavSelPtr; | |
104 | ||
105 | // Initialization data, to be read from Settings. | |
106 | double mJoin, mJoinJunction, mStringMin; | |
107 | ||
108 | // List of all separate colour singlets. | |
109 | vector<ColSinglet> singlets; | |
110 | ||
111 | // Join two legs of junction to a diquark for small invariant masses. | |
112 | bool joinJunction( vector<int>& iPartonIn, Event& event, | |
113 | double massExcessIn); | |
114 | ||
115 | }; | |
116 | ||
117 | //========================================================================== | |
118 | ||
119 | // The StringRegion class contains the information related to | |
120 | // one string section in the evolution of a multiparton system. | |
121 | // Only to be used inside StringFragmentation and MiniStringFragmentation, | |
122 | // so no private members. | |
123 | ||
124 | class StringRegion { | |
125 | ||
126 | public: | |
127 | ||
128 | // Constructor. | |
129 | StringRegion() : isSetUp(false), isEmpty(true) {} | |
130 | ||
131 | // Constants: could only be changed in the code itself. | |
132 | static const double MJOIN, TINY; | |
133 | ||
134 | // Data members. | |
135 | bool isSetUp, isEmpty; | |
136 | Vec4 pPos, pNeg, eX, eY; | |
137 | double w2, xPosProj, xNegProj, pxProj, pyProj; | |
138 | ||
139 | // Set up four-vectors for longitudinal and transverse directions. | |
140 | void setUp(Vec4 p1, Vec4 p2, bool isMassless = false); | |
141 | ||
142 | // Construct a four-momentum from (x+, x-, px, py). | |
143 | Vec4 pHad( double xPosIn, double xNegIn, double pxIn, double pyIn) | |
144 | { return xPosIn * pPos + xNegIn * pNeg + pxIn * eX + pyIn * eY; } | |
145 | ||
146 | // Project a four-momentum onto (x+, x-, px, py). Read out projection. | |
147 | void project(Vec4 pIn); | |
148 | void project( double pxIn, double pyIn, double pzIn, double eIn) | |
149 | { project( Vec4( pxIn, pyIn, pzIn, eIn) ); } | |
150 | double xPos() const {return xPosProj;} | |
151 | double xNeg() const {return xNegProj;} | |
152 | double px() const {return pxProj;} | |
153 | double py() const {return pyProj;} | |
154 | ||
155 | }; | |
156 | ||
157 | //========================================================================== | |
158 | ||
159 | // The StringSystem class contains the complete set of all string regions. | |
160 | // Only to be used inside StringFragmentation, so no private members. | |
161 | ||
162 | class StringSystem { | |
163 | ||
164 | public: | |
165 | ||
166 | // Constructor. | |
167 | StringSystem() {} | |
168 | ||
169 | // Set up system from parton list. | |
170 | void setUp(vector<int>& iSys, Event& event); | |
171 | ||
172 | // Calculate string region from (iPos, iNeg) pair. | |
173 | int iReg( int iPos, int iNeg) const | |
174 | {return (iPos * (indxReg - iPos)) / 2 + iNeg;} | |
175 | ||
176 | // Reference to string region specified by (iPos, iNeg) pair. | |
177 | StringRegion& region(int iPos, int iNeg) {return system[iReg(iPos, iNeg)];} | |
178 | ||
179 | // Reference to low string region specified either by iPos or iNeg. | |
180 | StringRegion& regionLowPos(int iPos) { | |
181 | return system[iReg(iPos, iMax - iPos)]; } | |
182 | StringRegion& regionLowNeg(int iNeg) { | |
183 | return system[iReg(iMax - iNeg, iNeg)]; } | |
184 | ||
185 | // Main content: a vector with all the string regions of the system. | |
186 | vector<StringRegion> system; | |
187 | ||
188 | // Other data members. | |
189 | int sizePartons, sizeStrings, sizeRegions, indxReg, iMax; | |
190 | double mJoin, m2Join; | |
191 | ||
192 | }; | |
193 | ||
194 | //========================================================================== | |
195 | ||
196 | } // end namespace Pythia8 | |
197 | ||
198 | #endif // Pythia8_FragmentationSystems_H |