]>
Commit | Line | Data |
---|---|---|
7984e5f7 | 1 | // |
2 | // This class inspects the event | |
3 | // | |
4 | #ifndef ALIFMDEVENTINSPECTOR_H | |
5 | #define ALIFMDEVENTINSPECTOR_H | |
ffca499d | 6 | /** |
7 | * @file AliFMDEventInspector.h | |
8 | * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk> | |
9 | * @date Wed Mar 23 14:02:48 2011 | |
10 | * | |
11 | * @brief | |
12 | * | |
13 | * | |
bd6f5206 | 14 | * @ingroup pwglf_forward_aod |
ffca499d | 15 | */ |
8565b10b | 16 | #include <TNamed.h> |
5bb5d1f6 | 17 | #include <TAxis.h> |
241cca4d | 18 | #include <TList.h> |
65abd48b | 19 | #include "AliDisplacedVertexSelection.h" |
8565b10b | 20 | class AliESDEvent; |
241cca4d | 21 | class AliOADBPhysicsSelection; |
8565b10b | 22 | class TH2D; |
23 | class TH1D; | |
24 | class TH1I; | |
5e4d905e | 25 | class TH1F; |
e308a636 | 26 | class TH2F; |
66cf95f2 | 27 | class TH2I; |
8565b10b | 28 | class TAxis; |
5ca83fee | 29 | class TVector3; |
241cca4d | 30 | // class TList; |
8565b10b | 31 | |
32 | /** | |
33 | * This class inspects the event | |
34 | * | |
35 | * @par Input: | |
36 | * - AliESDFMD object possibly corrected for sharing | |
37 | * | |
38 | * @par Output: | |
39 | * - A histogram of v_z of events with triggers. | |
40 | * - A histogram of v_z of events with vertex and triggers | |
41 | * - A histogram of trigger counters | |
42 | * | |
43 | * Note, that these are added to the master output list | |
44 | * | |
45 | * @par Corrections used: | |
46 | * - None | |
47 | * | |
bd6f5206 | 48 | * @ingroup pwglf_forward_algo |
49 | * @ingroup pwglf_forward_aod | |
8565b10b | 50 | */ |
51 | class AliFMDEventInspector : public TNamed | |
52 | { | |
53 | public: | |
54 | /** | |
55 | * Return codes | |
56 | */ | |
57 | enum ECodes { | |
241cca4d | 58 | /** all ok - bin 1 */ |
8565b10b | 59 | kOk = 0, |
241cca4d | 60 | /** No ESD event - bin 2 */ |
8565b10b | 61 | kNoEvent = 0x1, |
241cca4d | 62 | /** No triggers found - bin 3 */ |
8565b10b | 63 | kNoTriggers = 0x2, |
241cca4d | 64 | /** No SPD data - bin 4 */ |
8565b10b | 65 | kNoSPD = 0x4, |
241cca4d | 66 | /** No FMD data - bin 5 */ |
8565b10b | 67 | kNoFMD = 0x8, |
241cca4d | 68 | /** No vertex found - bin 6 */ |
8565b10b | 69 | kNoVertex = 0x10, |
241cca4d | 70 | /** Vertex out of range - bin 7 */ |
0be6c8cd | 71 | kBadVertex = 0x20 |
8565b10b | 72 | }; |
73 | /** | |
74 | * Trigger bins | |
75 | */ | |
76 | enum ETrgBins { | |
77 | kInel, | |
78 | kInelGt0, | |
e6463868 | 79 | kNSD, |
80 | kV0AND, | |
8565b10b | 81 | kEmpty, |
82 | kA, | |
83 | kB, | |
84 | kC, | |
0be6c8cd | 85 | kE, |
86 | kPileUp, | |
87 | kMCNSD, | |
8449e3e0 | 88 | kSatellite, |
e5c41d3e | 89 | kSpdOutlier, |
0be6c8cd | 90 | kOffline |
8565b10b | 91 | }; |
e5c41d3e | 92 | /** |
93 | * Ways to determine the primary vertex | |
94 | */ | |
0ccdab7b | 95 | enum EVtxType { |
96 | kNormal, | |
97 | kpA2012, | |
98 | kpA2013, | |
99 | kPWGUD, | |
100 | kDisplaced | |
101 | }; | |
e5c41d3e | 102 | /** |
103 | * Which kinds of pile-up to use | |
104 | */ | |
105 | enum EPileupType { | |
106 | kSPD = 0x1, | |
107 | kTracks = 0x2, | |
108 | kOutOfBunch = 0x4 | |
109 | }; | |
5934a3e3 | 110 | /** |
111 | * Centrality methods | |
112 | */ | |
113 | enum ECentMethod { | |
114 | kV0Multiplicity, | |
115 | kV0Amplitude, | |
116 | kV0Charge, | |
117 | kFMDRough, | |
118 | kNTracks, | |
119 | kLTracks, | |
120 | kCL0, | |
121 | kCL1, | |
122 | kCND, | |
123 | kNParticles, | |
124 | kNeutrons, | |
125 | kV0vsFMD, | |
126 | kV0vsNTracks, | |
6f656cde | 127 | kZEMvsZDC, |
128 | kDefaultCent | |
5934a3e3 | 129 | }; |
130 | ||
0bd4b00f | 131 | /** |
132 | * Collision systems | |
133 | */ | |
134 | enum ECollisionSystem { | |
135 | kUnknown, | |
136 | kPP, | |
137 | kPbPb | |
138 | }; | |
8449e3e0 | 139 | enum EVtxStatus { |
140 | kVtxOK = 1, | |
141 | kNoVtx, | |
142 | kNoSPDVtx, | |
143 | kFewContrib, | |
144 | kUncertain, | |
145 | kNotVtxZ | |
146 | }; | |
147 | enum ETrgStatus { | |
148 | kNoTrgWords=1, | |
149 | kPP2760Fast, | |
150 | kMUON, | |
151 | kTriggered, | |
152 | kMinBias, | |
153 | kMinBiasNoSPD, | |
154 | kV0AndTrg, | |
155 | kHighMult, | |
156 | kCentral, | |
157 | kSemiCentral, | |
158 | kDiffractive, | |
159 | kUser, | |
160 | kOther | |
161 | }; | |
5ca83fee | 162 | /** |
163 | * Folder name | |
164 | */ | |
165 | static const char* fgkFolderName; | |
8565b10b | 166 | /** |
167 | * Constructor | |
168 | */ | |
169 | AliFMDEventInspector(); | |
170 | /** | |
171 | * Constructor | |
172 | * | |
173 | * @param name Name of object | |
174 | */ | |
175 | AliFMDEventInspector(const char* name); | |
8565b10b | 176 | /** |
177 | * Destructor | |
178 | */ | |
179 | virtual ~AliFMDEventInspector(); | |
8565b10b | 180 | |
181 | /** | |
182 | * Initialize the object | |
183 | * | |
184 | * @param vtxAxis Vertex axis in use | |
185 | */ | |
5934a3e3 | 186 | virtual void SetupForData(const TAxis& vtxAxis); |
8565b10b | 187 | /** |
188 | * Process the event | |
189 | * | |
190 | * @param event Input event | |
191 | * @param triggers On return, the triggers fired | |
192 | * @param lowFlux On return, true if the event is considered a low-flux | |
193 | * event (according to the setting of fLowFluxCut) | |
0bd4b00f | 194 | * @param ivz On return, the found vertex bin (1-based). A zero |
195 | * means outside of the defined vertex range | |
33438b4c | 196 | * @param ip On return, coordinates of interaction point |
5e4d905e | 197 | * @param cent On return, the centrality (in percent) or < 0 |
198 | * if not found | |
5bb5d1f6 | 199 | * @param nClusters On return, number of SPD clusters in @f$ |\eta|<1@f$ |
8565b10b | 200 | * |
201 | * @return 0 (or kOk) on success, otherwise a bit mask of error codes | |
202 | */ | |
203 | UInt_t Process(const AliESDEvent* event, | |
204 | UInt_t& triggers, | |
205 | Bool_t& lowFlux, | |
0bd4b00f | 206 | UShort_t& ivz, |
5ca83fee | 207 | TVector3& ip, |
5bb5d1f6 | 208 | Double_t& cent, |
209 | UShort_t& nClusters); | |
8565b10b | 210 | /** |
211 | * Define the output histograms. These are put in a sub list of the | |
212 | * passed list. The histograms are merged before the parent task calls | |
213 | * AliAnalysisTaskSE::Terminate | |
214 | * | |
215 | * @param dir Directory to add to | |
216 | */ | |
5934a3e3 | 217 | void CreateOutputObjects(TList* dir); |
8565b10b | 218 | /** |
219 | * Set the number of SPD tracklets for which we consider the event a | |
220 | * low-flux event or not . | |
221 | * | |
222 | * @param c Cut (default 1000) | |
223 | */ | |
224 | void SetLowFluxCut(Int_t c) { fLowFluxCut = c; } | |
225 | /** | |
226 | * Set the maximum error on @f$ v_z@f$ | |
227 | * | |
228 | * @param c Maximum error (in centimeters) | |
229 | */ | |
230 | void SetMaxVzErr(Double_t c=0.1) { fMaxVzErr = c; } | |
0ccdab7b | 231 | /** |
232 | * Set the vertex method to use | |
233 | * | |
234 | * @param t Method | |
235 | */ | |
236 | void SetVertexMethod(EVtxType t) { fVtxMethod = t; } | |
e83d0620 | 237 | /** |
238 | * Use the first physics vtx code. | |
239 | * | |
240 | * @param use Use it or not | |
0ccdab7b | 241 | * @deprecated Use SetVertexMethod |
e83d0620 | 242 | */ |
0ccdab7b | 243 | void SetUseFirstPhysicsVtx(Bool_t use) { |
244 | SetVertexMethod(use ? kPWGUD : kNormal); } | |
31554871 | 245 | /** |
246 | * Use the first physics vtx code. | |
247 | * | |
248 | * @param use Use it or not | |
0ccdab7b | 249 | * @deprecated Use SetVertexMethod |
31554871 | 250 | */ |
0ccdab7b | 251 | void SetpA2012Vtx(Bool_t use) { |
252 | SetVertexMethod(use ? kpA2012 : kNormal); } | |
ffd35d33 | 253 | /** |
254 | * Use the 2012 pA vtx code. | |
255 | * | |
256 | * @param use Use it or not | |
257 | */ | |
258 | ||
e6463868 | 259 | void SetUseV0AndForNSD(Bool_t use=true) {fUseV0AND = use; } |
260 | /** | |
261 | * Set the minimum number of contributors for a 2nd pile-up vertex | |
262 | * | |
263 | * @param nContrib Least number of contributors | |
264 | */ | |
265 | void SetMinPileupContributors(UShort_t nContrib=3) | |
266 | { | |
267 | fMinPileupContrib = nContrib; | |
268 | } | |
269 | /** | |
270 | * Set minimum distance from primary vertex to 2nd pile-up vertex | |
271 | * | |
272 | * @param cm Distance (in centimeters) | |
273 | */ | |
274 | void SetMinPileupDistance(Double_t cm=0.8) | |
275 | { | |
276 | fMinPileupDistance = cm; | |
277 | } | |
65abd48b | 278 | /** |
279 | * Enable selection of displaced vertices. | |
280 | * | |
281 | * @param use whether to use | |
0ccdab7b | 282 | * @deprecated Use SetVertexMethod |
65abd48b | 283 | */ |
0ccdab7b | 284 | void SetUseDisplacedVertices(Bool_t use=true) { |
285 | SetVertexMethod(use ? kDisplaced : kNormal); } | |
286 | Bool_t IsUseDisplacedVertices() const { return AllowDisplaced(); } | |
8449e3e0 | 287 | /** |
288 | * Set the lower centrality cut - if negative, do not use | |
289 | * | |
290 | * @deprecated We should accept all events in the AOD pass | |
291 | * | |
292 | * @param mincent Lower cut on centrality | |
293 | */ | |
294 | void SetMinCentrality(Double_t mincent=-1.0); | |
295 | /** | |
296 | * Set the upper centrality cut - if negative, do not use | |
297 | * | |
298 | * @deprecated We should accept all events in the AOD pass | |
299 | * | |
c8b1a7db | 300 | * @param maxcent Upper cut on centrality |
8449e3e0 | 301 | */ |
302 | void SetMaxCentrality(Double_t maxcent=-1.0); | |
5934a3e3 | 303 | /** |
304 | * Set the centrality method to use. Possible values are | |
305 | * | |
306 | * - VOM - VZERO multiplicity | |
307 | * - V0A - VZERO amplitude | |
308 | * - V0C - VZERO charge | |
309 | * - FMD - FMD scaled energy loss | |
310 | * - TRK - Number of tracks | |
311 | * - TKL - Number of tracks | |
312 | * - CL0 - | |
313 | * - CL1 - | |
314 | * - CND - | |
315 | * - NPA - Neutral particles | |
316 | * - ZNA - ZDC neutron amplitude | |
317 | * - V0MvsFMD - VZERO versus FMD | |
318 | * - TKLvsVOM - Tracks versus VZERO | |
319 | * - ZEMvsZDC - ZDC | |
320 | * | |
321 | * @param m | |
322 | */ | |
323 | void SetCentralityMethod(const TString& m) { fCentMethod = m; } | |
8449e3e0 | 324 | /** |
325 | * Set the centrality method | |
326 | * | |
327 | * @param m Method identifier | |
328 | */ | |
5934a3e3 | 329 | void SetCentralityMethod(ECentMethod m); |
e5c41d3e | 330 | /** |
331 | * Pile-up flags. A bit mask of EPileupType | |
332 | * - 0x1 Check for number of vertices from SPD | |
333 | * - 0x2 Check for number of vertices from tracks | |
334 | * - 0x4 Check out-of-bunch pile-up | |
335 | * | |
336 | * @param flags A bit mask of EPileupType | |
337 | */ | |
338 | void SetPileupFlags(UShort_t flags=0x5) { fPileupFlags = flags; } | |
8565b10b | 339 | /** |
340 | * Set the debug level. The higher the value the more output | |
341 | * | |
342 | * @param dbg Debug level | |
343 | */ | |
344 | void SetDebug(Int_t dbg=1) { fDebug = dbg; } | |
e65b8b56 | 345 | /** |
346 | * Set whether this is MC or not. Needed by energy loss fitter task | |
347 | * that never instantices AliFMDMCEventInspector. In particular, we | |
348 | * need this to make sure we ignore the FAST partition flag in MC | |
349 | * for 2.76TeV pp. | |
350 | * | |
351 | * @param isMC If true, assume MC input | |
352 | */ | |
353 | void SetMC(Bool_t isMC=true) { fMC = isMC; } | |
245166a7 | 354 | Bool_t IsMC() const { return fMC; } |
8565b10b | 355 | /** |
356 | * Fetch our histograms from the passed list | |
357 | * | |
358 | * @param d Input | |
359 | * @param hEventsTr On return, pointer to histogram, or null | |
360 | * @param hEventsTrVtx On return, pointer to histogram, or null | |
5ca83fee | 361 | * @param hEventsAcc On return, pointer to histogram, or null |
8565b10b | 362 | * @param hTriggers On return, pointer to histogram, or null |
363 | * | |
364 | * @return true on success, false otherwise | |
365 | */ | |
fb3430ac | 366 | Bool_t FetchHistograms(const TList* d, |
8565b10b | 367 | TH1I*& hEventsTr, |
368 | TH1I*& hEventsTrVtx, | |
5ca83fee | 369 | TH1I*& hEventsAcc, |
8565b10b | 370 | TH1I*& hTriggers) const; |
0bd4b00f | 371 | /** |
372 | * Read the collision system, collision energy, and L3 field setting | |
373 | * from the ESD | |
374 | * | |
375 | * @param esd ESD to get information from | |
376 | * | |
377 | * @return true on success, false | |
378 | */ | |
379 | Bool_t ReadRunDetails(const AliESDEvent* esd); | |
380 | /** | |
381 | * Get the collision system (one of the value in ECollisionSystem) | |
382 | * | |
383 | * @return Collision system | |
384 | */ | |
385 | UShort_t GetCollisionSystem() const { return fCollisionSystem; } | |
386 | /** | |
387 | * Get the center of mass energy (per nucleon pair) in GeV | |
388 | * | |
389 | * @return center of mass energy (per nucleon pair) in GeV | |
390 | */ | |
391 | UShort_t GetEnergy() const { return fEnergy; } | |
392 | /** | |
393 | * Get the magnetic field setting of the L3 magnet in kilo Gauss. | |
394 | * | |
395 | * @return The magnetic field setting | |
396 | */ | |
397 | Short_t GetField() const { return fField; } | |
8449e3e0 | 398 | /** |
399 | * Get the current run number | |
400 | * | |
401 | * @return The current run number | |
402 | */ | |
403 | ULong_t GetRunNumber() const { return fRunNumber; } | |
0b7de667 | 404 | /** |
405 | * Get the production year. | |
406 | * | |
407 | * - For real data, this is the year of the data taking | |
408 | * - For MC this is the year the production is anchored to. | |
409 | * | |
410 | * @return A two-digit year (post millennium), or -1 | |
411 | */ | |
412 | Short_t GetProductionYear() const { return fProdYear; } | |
413 | /** | |
414 | * Get the production period. | |
415 | * | |
416 | * - For real data, this is the period identifier of the data taking | |
417 | * - For MC data, this is the period identifier the production was | |
418 | * anchored to | |
419 | * | |
420 | * @return Period identifier or null | |
421 | */ | |
422 | Char_t GetProductionPeriod() const { return fProdLetter; } | |
423 | /** | |
424 | * Get the AliROOT revision used for this production | |
425 | * | |
426 | * @return SVN revision number or -1 | |
427 | */ | |
428 | Short_t GetProductionRevision() const { return fProdSVN; } | |
429 | /** | |
430 | * Check if the production was an MC production anchored in some | |
431 | * real data. | |
432 | * | |
433 | * @return true if this (MC) production was anchored | |
434 | */ | |
435 | Bool_t IsProductionMC() const { return fProdMC; } | |
436 | ||
0bd4b00f | 437 | /** |
438 | * Print information | |
439 | * | |
440 | * @param option Not used | |
441 | */ | |
8449e3e0 | 442 | void Print(Option_t* option="") const; |
4f9319f3 | 443 | // getter for fmincentrality |
8449e3e0 | 444 | // Double_t GetMinCentrality() const { return fMinCent;} |
4f9319f3 | 445 | // gettter for fmaxcentrality |
8449e3e0 | 446 | // Double_t GetMaxCentrality() const { return fMaxCent;} |
f7cfc454 | 447 | /** |
448 | * Store information about running conditions in output list | |
449 | * | |
450 | * 3 TNamed objects are defined. The names are fixed, but the | |
451 | * title is a string representation of the information, and the | |
452 | * unique ID contains the identifier | |
453 | * | |
454 | * - sys Contains the collision system string and identifier. | |
455 | * - sNN Contains the center-of-mass energy per nucleon (GeV) | |
456 | * - field Contains the L3 magnetic field (kG) | |
9b2f2e39 | 457 | * - run Contains the run number |
f7cfc454 | 458 | * |
459 | */ | |
8449e3e0 | 460 | virtual void StoreInformation(); |
c8b1a7db | 461 | /** |
462 | * Store - if possible - production information in a sub-list | |
463 | * | |
464 | */ | |
465 | virtual void StoreProduction(); | |
241cca4d | 466 | /** |
467 | * Return a string representing the return code | |
468 | * | |
469 | * @param mask Code | |
470 | * | |
471 | * @return String representation | |
472 | */ | |
473 | static const char* CodeString(UInt_t mask); | |
8565b10b | 474 | protected: |
0b7de667 | 475 | /** |
476 | * Copy constructor - not implemented | |
477 | * | |
478 | * @param o Object to copy from | |
479 | */ | |
ee83b849 | 480 | AliFMDEventInspector(const AliFMDEventInspector& o){;} |
0b7de667 | 481 | /** |
482 | * Assignement operator - not implemented | |
483 | * | |
484 | * @param o Object to assign from | |
485 | * | |
486 | * @return Reference to this object | |
487 | */ | |
ee83b849 | 488 | AliFMDEventInspector& operator=(const AliFMDEventInspector& o){return *this;} |
0ccdab7b | 489 | Bool_t AllowDisplaced() const { return fVtxMethod == kDisplaced; } |
241cca4d | 490 | /** |
491 | * Cache the configure trigger classes from the physis selection. | |
492 | * | |
493 | * @param cache where to cache the trigger class. | |
494 | * @param classes List of configured classes. | |
495 | * @param o Object from OADB with config | |
496 | */ | |
497 | void CacheConfiguredTriggerClasses(TList& cache, | |
498 | const TList* classes, | |
499 | AliOADBPhysicsSelection* o); | |
8565b10b | 500 | /** |
501 | * Read the trigger information from the ESD event | |
502 | * | |
503 | * @param esd ESD event | |
504 | * @param triggers On return, contains the trigger bits | |
5bb5d1f6 | 505 | * @param nClusters On return, number of SPD clusters in @f$ |\eta|<1@f$ |
8565b10b | 506 | * |
507 | * @return @c true on success, @c false otherwise | |
508 | */ | |
241cca4d | 509 | Bool_t ReadTriggers(const AliESDEvent& esd, UInt_t& triggers, |
5bb5d1f6 | 510 | UShort_t& nClusters); |
8449e3e0 | 511 | /** |
512 | * Possible extra check for p-Pb from 2012/13 - require V0AND. | |
513 | * | |
514 | * @param esd Event structure | |
515 | * | |
516 | * @return true on success | |
517 | */ | |
da70cd6a | 518 | Bool_t CheckpAExtraV0(const AliESDEvent& esd) const; |
241cca4d | 519 | /** |
520 | * Check, for the @f$\sqrt{s}=2.76GeV@f$ pp run wether this event | |
521 | * was in the fast partition, and if so, filter it out. | |
522 | * | |
523 | * @param fastonly Event was in fast-only partition | |
524 | * | |
525 | * @return true if event was in the fast-only partition, for the run | |
526 | * period. | |
527 | */ | |
528 | virtual Bool_t CheckFastPartition(bool fastonly) const; | |
529 | /** | |
530 | * Check if we have an NSD trigger for pp runs | |
531 | * | |
532 | * @param esd Data | |
533 | * @param triggers Trigger mask to be filled | |
534 | * | |
535 | * @return true if we have an NSD trigger | |
536 | */ | |
537 | virtual Bool_t CheckNSD(const AliESDEvent& esd, UInt_t& triggers) const; | |
538 | /** | |
539 | * Check if we have an INEL>0 trigger | |
540 | * | |
541 | * @param esd Data | |
542 | * @param nClusters On return, number of clusters | |
543 | * @param triggers Trigger mask to be filled | |
544 | * | |
545 | * @return true if we have an INEL>0 trigger | |
546 | */ | |
547 | virtual Bool_t CheckINELGT0(const AliESDEvent& esd, UShort_t& nClusters, | |
548 | UInt_t& triggers) const; | |
549 | /** | |
550 | * Check if this is a pile-up event | |
551 | * | |
552 | * @param esd Data | |
553 | * @param triggers Trigger mask to be filled | |
554 | * | |
555 | * @return true if this is a pile-up event | |
556 | */ | |
557 | virtual Bool_t CheckPileup(const AliESDEvent& esd, UInt_t& triggers) const; | |
dd556bcd | 558 | /** |
559 | * Check for multi-vertex pile-up | |
560 | * | |
561 | * @param esd ESD event | |
c8b1a7db | 562 | * @param checkOtherBC Also check other BC's |
dd556bcd | 563 | * |
564 | * @return true if multiple vertices found | |
565 | */ | |
c8b1a7db | 566 | virtual Bool_t CheckMultiVertex(const AliESDEvent& esd, |
567 | Bool_t checkOtherBC=false) const; | |
241cca4d | 568 | /** |
569 | * Check if we have a cosmic trigger. These should be filtered out. | |
570 | * | |
571 | * @param trigStri Trigger string | |
572 | * | |
573 | * @return true if we have a cosmic trigger | |
574 | */ | |
575 | virtual Bool_t CheckCosmics(const TString& trigStri) const; | |
576 | /** | |
577 | * Check if the trigger string corresponds to an empty event | |
578 | * | |
579 | * @param trigStr Trigger string | |
580 | * @param triggers Trigger mask to be filled | |
581 | * | |
582 | * @return true if the trigger string corresponds to an empty event | |
583 | */ | |
584 | virtual Bool_t CheckEmpty(const TString& trigStr, UInt_t& triggers) const; | |
585 | /** | |
586 | * Check the trigger words to see if we have a B, A, C, or E event. | |
587 | * | |
588 | * @param esd Data | |
589 | * @param triggers Trigger mask to be filled | |
590 | * | |
591 | * @return always true | |
592 | */ | |
593 | virtual Bool_t CheckWords(const AliESDEvent& esd, UInt_t& triggers) const; | |
8565b10b | 594 | /** |
595 | * Read the vertex information from the ESD event | |
596 | * | |
597 | * @param esd ESD event | |
5ca83fee | 598 | * @param ip On return, the coordinates of the IP |
8565b10b | 599 | * |
600 | * @return @c true on success, @c false otherwise | |
601 | */ | |
5ca83fee | 602 | Bool_t ReadVertex(const AliESDEvent& esd, TVector3& ip); |
241cca4d | 603 | /** |
604 | * Check the vertex using the method used in PWG-UD. That is | |
605 | * | |
606 | * - Check we have a vertex and status is OK | |
607 | * - Check if we have an SPD vertex and that it's status is OK | |
608 | * - Check if the vertex is from the Z-vertexer, and if it is, | |
609 | * - Check that the dispersion and resolution is OK | |
610 | * | |
611 | * @param esd Data | |
5ca83fee | 612 | * @param ip On return, the coordinates of the IP |
241cca4d | 613 | * |
8449e3e0 | 614 | * @return status |
241cca4d | 615 | */ |
8449e3e0 | 616 | virtual EVtxStatus CheckPWGUDVertex(const AliESDEvent& esd, |
617 | TVector3& ip) const; | |
241cca4d | 618 | /** |
619 | * Check the vertex. That is | |
620 | * | |
621 | * - Check if we have an SPD vertex and that it's status is OK | |
622 | * - Check that we have enough contributors | |
623 | * - Check that the reslution is OK | |
624 | * | |
625 | * @param esd Data | |
5ca83fee | 626 | * @param ip On return, the coordinates of the IP |
241cca4d | 627 | * |
8449e3e0 | 628 | * @return status |
241cca4d | 629 | */ |
8449e3e0 | 630 | virtual EVtxStatus CheckpA2012Vertex(const AliESDEvent& esd, |
0ccdab7b | 631 | TVector3& ip) const; |
632 | /** | |
633 | * Check the vertex. That is | |
634 | * | |
635 | * - Check if we have an normal vertex and that it's status is OK | |
636 | * - Check that we have enough contributors | |
637 | * - Check if we have an SPD vertex | |
638 | * - Check that we have enough contributors | |
639 | * - If from Z-vertexer, check the resolution | |
640 | * - Check that the two found vertices are within 0.5cm of each other | |
641 | * | |
642 | * @param esd Data | |
643 | * @param ip On return, the coordinates of the IP | |
644 | * | |
645 | * @return status | |
646 | */ | |
647 | virtual EVtxStatus CheckpA2013Vertex(const AliESDEvent& esd, | |
648 | TVector3& ip) const; | |
ffd35d33 | 649 | /** |
650 | * Check the vertex for pA 2012 settings. That is | |
651 | * | |
652 | * | |
653 | * @param esd Data | |
654 | * @param ip On return, the coordinates of the IP | |
655 | * | |
656 | * @return true if the vertex was found and met the requirements | |
657 | */ | |
8449e3e0 | 658 | virtual EVtxStatus CheckVertex(const AliESDEvent& esd, TVector3& ip) const; |
e1f47419 | 659 | /** |
660 | * Read centrality from event | |
661 | * | |
662 | * @param esd Event | |
663 | * @param cent On return, the centrality or negative if not found | |
ffca499d | 664 | * @param qual On return, centrality quality flag |
e1f47419 | 665 | * |
666 | * @return False on error, true otherwise | |
667 | */ | |
73b32206 | 668 | virtual Bool_t ReadCentrality(const AliESDEvent& esd, Double_t& cent, |
669 | UShort_t& qual) const; | |
8565b10b | 670 | |
0b7de667 | 671 | TH1I* fHEventsTr; //! Histogram of events w/trigger |
672 | TH1I* fHEventsTrVtx; //! Events w/trigger and vertex | |
673 | TH1I* fHEventsAccepted; //! Events w/trigger and vertex in range | |
674 | TH2D* fHEventsAcceptedXY; //! XY vtx with trigger and Z vertex in range | |
675 | TH1I* fHTriggers; //! Triggers | |
676 | TH2I* fHTriggerCorr; //! Correlation of triggers | |
677 | TH1I* fHType; //! Type (low/high flux) of event | |
678 | TH1I* fHWords; //! Trigger words | |
679 | TH1F* fHCent; //! Centrality | |
680 | TH2F* fHCentVsQual; //! Centrality vs quality | |
681 | TH1I* fHStatus; //! Event processing status | |
682 | TH1I* fHVtxStatus; //! Vertex processing status | |
683 | TH1I* fHTrgStatus; //! Trigger processing status | |
e5c41d3e | 684 | TH1I* fHPileup; //! Pile-up status |
0b7de667 | 685 | Int_t fLowFluxCut; // Low flux cut |
686 | Double_t fMaxVzErr; // Maximum error on v_z | |
687 | TList* fList; //! Histogram container | |
688 | UShort_t fEnergy; // CMS energy (per nucleon pair) [GeV] | |
689 | Short_t fField; // L3 magnetic field [kG] | |
690 | UShort_t fCollisionSystem; // Collision system | |
691 | Int_t fDebug; // Debug level | |
692 | TAxis* fCentAxis; // Centrality axis used in histograms | |
693 | TAxis fVtxAxis; // IP_z Axis | |
0ccdab7b | 694 | EVtxType fVtxMethod; // Vertex method to use |
695 | // Bool_t fUseFirstPhysicsVertex;//Use the vtx code from p+p first physics | |
0b7de667 | 696 | Bool_t fUseV0AND; // Use the vtx code from p+p first physics |
e5c41d3e | 697 | UShort_t fPileupFlags; // Which pileups to use |
0b7de667 | 698 | UShort_t fMinPileupContrib; // Min contributors to 2nd pile-up IP |
699 | Double_t fMinPileupDistance; // Min distance of 2nd pile-up IP | |
0ccdab7b | 700 | // Bool_t fUseDisplacedVertices; // Analyze displaced vertices? |
65abd48b | 701 | AliDisplacedVertexSelection fDisplacedVertex; //Displaced vertex selector |
0b7de667 | 702 | TList fCollWords; //! Configured collision words |
703 | TList fBgWords; //! Configured background words | |
704 | TString fCentMethod; // Centrality method | |
705 | Double_t fMinCent; // min centrality | |
706 | Double_t fMaxCent; // max centrailty | |
0ccdab7b | 707 | // Bool_t fUsepA2012Vertex; // flag to use pA2012 Veretx selection |
0b7de667 | 708 | ULong_t fRunNumber; // Current run number |
709 | Bool_t fMC; // Is this MC input | |
710 | Short_t fProdYear; // Production year | |
711 | Char_t fProdLetter; // Production letter | |
712 | Short_t fProdPass; // Pass number | |
713 | Int_t fProdSVN; // AliROOT revision used in production | |
714 | Bool_t fProdMC; // True if anchor production | |
715 | ||
e5c41d3e | 716 | ClassDef(AliFMDEventInspector,14); // Inspect the event |
8565b10b | 717 | }; |
718 | ||
719 | #endif | |
720 | // Local Variables: | |
721 | // mode: C++ | |
722 | // End: | |
723 | ||
724 | ||
725 |