]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PYTHIA8/pythia8130/include/Analysis.h
Missing ; added.
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8130 / include / Analysis.h
CommitLineData
5ad4eb21 1// Analysis.h is a part of the PYTHIA event generator.
2// Copyright (C) 2008 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 the Sphericity, Thrust, ClusterJet and CellJet classes.
7// Sphericity: sphericity analysis of the event.
8// Thrust: thrust analysis of the event.
9// ClusterJet: clustering jet finder.
10// CellJet: calorimetric cone jet finder.
11
12#ifndef Pythia8_Analysis_H
13#define Pythia8_Analysis_H
14
15#include "Basics.h"
16#include "Event.h"
17#include "PythiaStdlib.h"
18
19namespace Pythia8 {
20
21//**************************************************************************
22
23// Sphericity class.
24// This class performs (optionally modified) sphericity analysis on an event.
25
26class Sphericity {
27
28public:
29
30 // Constructor.
31 Sphericity(double powerIn = 2., int selectIn = 2) : power(powerIn),
32 select(selectIn), nFew(0), nBack(0) {powerInt = 0;
33 if (abs(power - 1.) < 0.01) powerInt = 1;
34 if (abs(power - 2.) < 0.01) powerInt = 2;
35 powerMod = 0.5 * power - 1.;}
36
37 // Analyze event.
38 bool analyze(const Event& event, ostream& os = cout);
39
40 // Return info on results of analysis.
41 double sphericity() const {return 1.5 * (eVal2 + eVal3);}
42 double aplanarity() const {return 1.5 * eVal3;}
43 double eigenValue(int i) const {return (i < 2) ? eVal1 :
44 ( (i < 3) ? eVal2 : eVal3 ) ;}
45 Vec4 eventAxis(int i) const {return (i < 2) ? eVec1 :
46 ( (i < 3) ? eVec2 : eVec3 ) ;}
47
48 // Provide a listing of the info.
49 void list(ostream& os = cout);
50
51 // Tell how many events could not be analyzed.
52 int nError() const {return nFew + nBack;}
53
54private:
55
56 // Constants: could only be changed in the code itself.
57 static const int NSTUDYMIN, TIMESTOPRINT;
58 static const double P2MIN, EIGENVALUEMIN;
59
60 // Properties of analysis.
61 double power;
62 int select, powerInt;
63 double powerMod;
64
65 // Outcome of analysis.
66 double eVal1, eVal2, eVal3;
67 Vec4 eVec1, eVec2, eVec3;
68
69 // Error statistics;
70 int nFew, nBack;
71
72};
73
74//**************************************************************************
75
76// Thrust class.
77// This class performs thrust analysis on an event.
78
79class Thrust {
80
81public:
82
83 // Constructor.
84 Thrust(int selectIn = 2) : select(selectIn), nFew(0) {}
85
86 // Analyze event.
87 bool analyze(const Event& event, ostream& os = cout);
88
89 // Return info on results of analysis.
90 double thrust() const {return eVal1;}
91 double tMajor() const {return eVal2;}
92 double tMinor() const {return eVal3;}
93 double oblateness() const {return eVal2 - eVal3;}
94 Vec4 eventAxis(int i) const {return (i < 2) ? eVec1 :
95 ( (i < 3) ? eVec2 : eVec3 ) ;}
96
97 // Provide a listing of the info.
98 void list(ostream& os = cout);
99
100 // Tell how many events could not be analyzed.
101 int nError() const {return nFew;}
102
103private:
104
105 // Constants: could only be changed in the code itself.
106 static const int NSTUDYMIN, TIMESTOPRINT;
107 static const double MAJORMIN;
108
109 // Properties of analysis.
110 int select;
111
112 // Outcome of analysis.
113 double eVal1, eVal2, eVal3;
114 Vec4 eVec1, eVec2, eVec3;
115
116 // Error statistics;
117 int nFew;
118
119};
120
121//**************************************************************************
122
123// SingleClusterJet class.
124// Simple helper class to ClusterJet for a jet and its contents.
125
126class SingleClusterJet {
127
128public:
129
130 // Constructors.
131 SingleClusterJet(Vec4 pJetIn = 0., int motherIn = 0) :
132 pJet(pJetIn), mother(motherIn), daughter(0), multiplicity(1),
133 isAssigned(false) {pAbs = max( PABSMIN, pJet.pAbs());}
134 SingleClusterJet& operator=(const SingleClusterJet& j) { if (this != &j)
135 { pJet = j.pJet; mother = j.mother; daughter = j.daughter;
136 multiplicity = j.multiplicity; pAbs = j.pAbs;
137 isAssigned = j.isAssigned;} return *this; }
138
139 // Properties of jet.
140 // Note: mother, daughter and isAssigned only used for original
141 // particles, multiplicity and pTemp only for reconstructed jets.
142 Vec4 pJet;
143 int mother, daughter, multiplicity;
144 bool isAssigned;
145 double pAbs;
146 Vec4 pTemp;
147
148 // Distance measures (Lund, JADE, Durham) with friend.
149 friend double dist2Fun(int measure, const SingleClusterJet& j1,
150 const SingleClusterJet& j2);
151
152private:
153
154 // Constants: could only be changed in the code itself.
155 static const double PABSMIN;
156
157} ;
158
159//**************************************************************************
160
161// ClusterJet class.
162// This class performs a jet clustering according to different
163// distance measures: Lund, JADE or Durham.
164
165class ClusterJet {
166
167public:
168
169 // Constructor.
170 ClusterJet(string measureIn = "Lund", int selectIn = 2, int massSetIn = 2,
171 bool preclusterIn = false, bool reassignIn = false) : measure(1),
172 select(selectIn), massSet(massSetIn), doPrecluster(preclusterIn),
173 doReassign(reassignIn), nFew(0) {
174 char firstChar = toupper(measureIn[0]);
175 if (firstChar == 'J') measure = 2;
176 if (firstChar == 'D') measure = 3;
177 piMass = ParticleDataTable::m0(211);
178 }
179
180 // Analyze event.
181 bool analyze(const Event& event, double yScaleIn, double pTscaleIn,
182 int nJetMinIn = 1, int nJetMaxIn = 0, ostream& os = cout);
183
184 // Return info on jets produced.
185 int size() const {return jets.size();}
186 Vec4 p(int j) const {return jets[j].pJet;}
187
188 // Return belonging of particle to one of the jets (-1 if none).
189 int jetAssignment(int i) const {
190 for (int iP = 0; iP < int(particles.size()); ++iP)
191 if (particles[iP].mother == i) return particles[iP].daughter;
192 return -1;}
193
194 // Provide a listing of the info.
195 void list(ostream& os = cout);
196
197 // Tell how many events could not be analyzed.
198 int nError() const {return nFew;}
199
200private:
201
202 // Constants: could only be changed in the code itself.
203 static const int TIMESTOPRINT;
204 static const double PABSMIN, PRECLUSTERFRAC, PRECLUSTERSTEP;
205
206 // Properties of analysis.
207 int measure, select, massSet;
208 bool doPrecluster, doReassign;
209 double yScale, pTscale;
210 int nJetMin, nJetMax;
211
212 // Temporary results.
213 double piMass, dist2Join, dist2BigMin, distPre, dist2Pre;
214 vector<SingleClusterJet> particles;
215 int nParticles;
216
217 // Error statistics;
218 int nFew;
219
220 // Member functions for some operations (for clarity).
221 void precluster();
222 void reassign();
223
224 // Outcome of analysis: ET-ordered list of jets.
225 vector<SingleClusterJet> jets;
226
227};
228
229//**************************************************************************
230
231// SingleCell class.
232// Simple helper class to CellJet for a cell and its contents.
233
234class SingleCell {
235
236public:
237
238 // Constructor.
239 SingleCell(int iCellIn = 0, double etaCellIn = 0., double phiCellIn = 0.,
240 double eTcellIn = 0., int multiplicityIn = 0) : iCell(iCellIn),
241 etaCell(etaCellIn), phiCell(phiCellIn), eTcell(eTcellIn),
242 multiplicity(multiplicityIn), canBeSeed(true), isUsed(false),
243 isAssigned(false) {}
244
245 // Properties of cell.
246 int iCell;
247 double etaCell, phiCell, eTcell;
248 int multiplicity;
249 bool canBeSeed, isUsed, isAssigned;
250
251} ;
252
253//**************************************************************************
254
255// SingleCellJet class.
256// Simple helper class to CellJet for a jet and its contents.
257
258class SingleCellJet {
259
260public:
261
262 // Constructor.
263 SingleCellJet(double eTjetIn = 0., double etaCenterIn = 0.,
264 double phiCenterIn = 0., double etaWeightedIn = 0.,
265 double phiWeightedIn = 0., int multiplicityIn = 0,
266 Vec4 pMassiveIn = 0.) : eTjet(eTjetIn), etaCenter(etaCenterIn),
267 phiCenter(phiCenterIn), etaWeighted(etaWeightedIn),
268 phiWeighted(phiWeightedIn), multiplicity(multiplicityIn),
269 pMassive(pMassiveIn) {}
270
271 // Properties of jet.
272 double eTjet, etaCenter, phiCenter, etaWeighted, phiWeighted;
273 int multiplicity;
274 Vec4 pMassive;
275
276} ;
277
278//**************************************************************************
279
280// CellJet class.
281// This class performs a cone jet search in (eta, phi, E_T) space.
282
283class CellJet {
284
285public:
286
287 // Constructor.
288 CellJet(double etaMaxIn = 5., int nEtaIn = 50, int nPhiIn = 32,
289 int selectIn = 2, int smearIn = 0, double resolutionIn = 0.5,
290 double upperCutIn = 2., double thresholdIn = 0.) : etaMax(etaMaxIn),
291 nEta(nEtaIn), nPhi(nPhiIn), select(selectIn), smear(smearIn),
292 resolution(resolutionIn), upperCut(upperCutIn),
293 threshold(thresholdIn), nFew(0) { }
294
295 // Analyze event.
296 bool analyze(const Event& event, double eTjetMinIn = 20.,
297 double coneRadiusIn = 0.7, double eTseedIn = 1.5, ostream& os = cout);
298
299 // Return info on results of analysis.
300 int size() const {return jets.size();}
301 double eT(int i) const {return jets[i].eTjet;}
302 double etaCenter(int i) const {return jets[i].etaCenter;}
303 double phiCenter(int i) const {return jets[i].phiCenter;}
304 double etaWeighted(int i) const {return jets[i].etaWeighted;}
305 double phiWeighted(int i) const {return jets[i].phiWeighted;}
306 double multiplicity(int i) const {return jets[i].multiplicity;}
307 Vec4 pMassless(int i) const {return jets[i].eTjet * Vec4(
308 cos(jets[i].phiWeighted), sin(jets[i].phiWeighted),
309 sinh(jets[i].etaWeighted), cosh(jets[i].etaWeighted) );}
310 Vec4 pMassive(int i) const {return jets[i].pMassive;}
311 double m(int i) const {return jets[i].pMassive.mCalc();}
312
313 // Provide a listing of the info.
314 void list(ostream& os = cout);
315
316 // Tell how many events could not be analyzed: so far never.
317 int nError() const {return nFew;}
318
319private:
320
321 // Constants: could only be changed in the code itself.
322 static const int TIMESTOPRINT;
323
324 // Properties of analysis.
325 double etaMax;
326 int nEta, nPhi, select, smear;
327 double resolution, upperCut, threshold;
328 double eTjetMin, coneRadius, eTseed;
329
330 // Error statistics;
331 int nFew;
332
333 // Outcome of analysis: ET-ordered list of jets.
334 vector<SingleCellJet> jets;
335
336};
337
338//**************************************************************************
339
340} // end namespace Pythia8
341
342#endif // end Pythia8_Analysis_H
343