]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PYTHIA8/pythia8170/include/FragmentationSystems.h
Update to pythi8.170
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8170 / include / FragmentationSystems.h
CommitLineData
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
23namespace 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
30class ColSinglet {
31
32public:
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
59class ColConfig {
60
61public:
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
94private:
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
124class StringRegion {
125
126public:
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
162class StringSystem {
163
164public:
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