Line data Source code
1 : // FragmentationSystems.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 : // 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 "Pythia8/Basics.h"
16 : #include "Pythia8/Event.h"
17 : #include "Pythia8/FragmentationFlavZpT.h"
18 : #include "Pythia8/Info.h"
19 : #include "Pythia8/ParticleData.h"
20 : #include "Pythia8/PythiaStdlib.h"
21 : #include "Pythia8/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 0 : class ColSinglet {
31 :
32 : public:
33 :
34 : // Constructors.
35 0 : ColSinglet() : pSum(0., 0., 0., 0.), mass(0.), massExcess(0.),
36 0 : 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 0 : : iParton(iPartonIn), pSum(pSumIn), mass(massIn),
41 0 : massExcess(massExcessIn), hasJunction(hasJunctionIn),
42 0 : isClosed(isClosedIn), isCollected(isCollectedIn) {}
43 :
44 : // Size of iParton array.
45 0 : 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 0 : class ColConfig {
60 :
61 : public:
62 :
63 : // Constructor.
64 0 : 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 0 : int size() const {return singlets.size();}
71 :
72 : // Overload index operator to access separate colour singlets.
73 0 : ColSinglet& operator[](int iSub) {return singlets[iSub];}
74 :
75 : // Clear contents.
76 0 : 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 0 : 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 0 : class StringRegion {
125 :
126 : public:
127 :
128 : // Constructor.
129 0 : 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 0 : { 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 0 : double xPos() const {return xPosProj;}
151 0 : double xNeg() const {return xNegProj;}
152 0 : double px() const {return pxProj;}
153 0 : 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 0 : class StringSystem {
163 :
164 : public:
165 :
166 : // Constructor.
167 0 : 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 0 : {return (iPos * (indxReg - iPos)) / 2 + iNeg;}
175 :
176 : // Reference to string region specified by (iPos, iNeg) pair.
177 0 : 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 0 : return system[iReg(iPos, iMax - iPos)]; }
182 : StringRegion& regionLowNeg(int iNeg) {
183 0 : 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
|