forked from alisw/AliPhysics
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAliCFTrackKineCuts.h
More file actions
162 lines (146 loc) · 7.11 KB
/
Copy pathAliCFTrackKineCuts.h
File metadata and controls
162 lines (146 loc) · 7.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* *
* Author: The ALICE Off-line Project. *
* Contributors are mentioned in the code where appropriate. *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation strictly for non-commercial purposes is hereby granted *
* without fee, provided that the above copyright notice appears in all *
* copies and that both the copyright notice and this permission notice *
* appear in the supporting documentation. The authors make no claims *
* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
// The class AliCFTrackKineCuts is designed to select both generated
// and reconstructed tracks of a given range in momentum space,
// electric charge and azimuthal emission angle phi
// and to provide corresponding QA histograms.
// This class inherits from the Analysis' Framework abstract base class
// AliAnalysisCuts and is a part of the Correction Framework.
// This class acts on single, generated and reconstructed tracks, it is
// applicable on ESD and AOD data.
// It mainly consists of a IsSelected function that returns a boolean.
// This function checks whether the considered track passes a set of cuts:
// - total momentum
// - pt
// - px
// - py
// - pz
// - eta
// - rapidity
// - phi
// - charge
// - is charged
//
// The cut values for these cuts are set with the corresponding set functions.
// All cut classes provided by the correction framework are supposed to be
// added in the Analysis Framwork's class AliAnalysisFilter and applied by
// the filter via a loop.
//
// author: I. Kraus (Ingrid.Kraus@cern.ch)
// idea taken form
// AliESDtrackCuts writte by Jan Fiete Grosse-Oetringhaus and
// AliRsnDaughterCut class written by A. Pulvirenti.
#ifndef ALICFTRACKKINECUTS_H
#define ALICFTRACKKINECUTS_H
#include "AliCFCutBase.h"
class TH2 ;
class TBits;
class AliVParticle;
class AliCFTrackKineCuts : public AliCFCutBase
{
public :
AliCFTrackKineCuts() ;
AliCFTrackKineCuts(const Char_t* name, const Char_t* title) ;
AliCFTrackKineCuts(const AliCFTrackKineCuts& c) ;
AliCFTrackKineCuts& operator=(const AliCFTrackKineCuts& c) ;
~AliCFTrackKineCuts();
void Copy(TObject &c) const;
Bool_t IsSelected(TObject* obj);
Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
// cut value setter
void SetMomentumRange(Double_t momentumMin=0., Double_t momentumMax=1e99) {fMomentumMin=momentumMin; fMomentumMax=momentumMax;}
void SetPtRange(Double_t ptMin=0., Double_t ptMax=1e99) {fPtMin=ptMin; fPtMax=ptMax;}
void SetPxRange(Double_t pxMin=-1e99, Double_t pxMax=1e99) {fPxMin=pxMin; fPxMax=pxMax;}
void SetPyRange(Double_t pyMin=-1e99, Double_t pyMax=1e99) {fPyMin=pyMin; fPyMax=pyMax;}
void SetPzRange(Double_t pzMin=-1e99, Double_t pzMax=1e99) {fPzMin=pzMin; fPzMax=pzMax;}
void SetEtaRange(Double_t etaMin=-1e99, Double_t etaMax=1e99) {fEtaMin=etaMin; fEtaMax=etaMax;}
void SetRapidityRange(Double_t rapMin=-1e99, Double_t rapMax=1e99) {fRapidityMin=rapMin; fRapidityMax=rapMax;}
void SetPhiRange(Double_t phiMin=-10., Double_t phiMax=10.) {fPhiMin=phiMin; fPhiMax=phiMax;}
void SetChargeRec(Double_t charge=10.) {fCharge=charge;}
void SetChargeMC(Double_t charge=10.) {fCharge=charge*3.;}
void SetRequireIsCharged(Bool_t b=kFALSE) {fRequireIsCharged=b;}
// QA histograms
void DrawHistograms(Bool_t drawLogScale=kTRUE);
void SaveHistograms(const Char_t* dir = 0);
void AddQAHistograms(TList *qaList);
// QA histogram setter
// please use indices from the enumeration below
void SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins);
void SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax);
// indeces/counters for single selections
enum {
kCutP=0, // momentum
kCutPt, // pt
kCutPx, // px
kCutPy, // py
kCutPz, // pz
kCutRapidity,// raptidity
kCutEta, // eta
kCutPhi, // phi
kCutCharge, // charge
kNCuts=10, // number of single selections
kNStepQA=2, // number of QA steps (before/after the cuts)
kNHist=9 // number of QA histograms
};
private:
void SelectionBitMap(TObject* obj);
void DefineHistograms(); // books histograms and TList
void Initialise(); // sets everything to 0
void FillHistograms(TObject* obj, Bool_t b);
// Fills histograms before and after cuts
Double_t fMomentumMin ; // lower limit of accepted total momentum range
Double_t fMomentumMax ; // upper limit of accepted total momentum range
Double_t fPtMin ; // lower limit of accepted transverse momentum range
Double_t fPtMax ; // upper limit of accepted transverse momentum range
Double_t fPxMin ; // lower limit of accepted px range
Double_t fPxMax ; // upper limit of accepted px range
Double_t fPyMin ; // lower limit of accepted py range
Double_t fPyMax ; // upper limit of accepted py range
Double_t fPzMin ; // lower limit of accepted pz range
Double_t fPzMax ; // upper limit of accepted pz range
Double_t fEtaMin ; // lower limit of accepted pseudo-rapidity range
Double_t fEtaMax ; // upper limit of accepted pseudo-rapidity range
Double_t fRapidityMin ; // lower limit of accepted rapidity range
Double_t fRapidityMax ; // upper limit of accepted rapidity range
Double_t fPhiMin ; // lower limit of accepted phi range
Double_t fPhiMax ; // upper limit of accepted phi range
Double_t fCharge ; // electric charge
Bool_t fRequireIsCharged; // accept charged particles only
TH1F* fhCutStatistics; // Histogram: statistics of what cuts the tracks did not survive
TH2F* fhCutCorrelation; // Histogram: 2d statistics plot
TH1F* fhQA[kNHist][kNStepQA]; // QA Histograms
TBits *fBitmap ; // stores single selection decisions
// QA histogram setters
Int_t fhNBinsMomentum; // number of bins+1: momentum
Int_t fhNBinsPt; // number of bins+1: pt
Int_t fhNBinsPx; // number of bins+1: px
Int_t fhNBinsPy; // number of bins+1: py
Int_t fhNBinsPz; // number of bins+1: pz
Int_t fhNBinsEta; // number of bins+1: eta
Int_t fhNBinsRapidity; // number of bins+1: rapidity
Int_t fhNBinsPhi; // number of bins+1: phi
Int_t fhNBinsCharge; // number of bins+1: charge
Double_t *fhBinLimMomentum; //[fhNBinsMomentum] bin limits: momentum
Double_t *fhBinLimPt; //[fhNBinsPt] bin limits: pt
Double_t *fhBinLimPx; //[fhNBinsPx] bin limits: px
Double_t *fhBinLimPy; //[fhNBinsPy] bin limits: py
Double_t *fhBinLimPz; //[fhNBinsPz] bin limits: pz
Double_t *fhBinLimEta; //[fhNBinsEta] bin limits: eta
Double_t *fhBinLimRapidity; //[fhNBinsRapidity] bin limits: rapidity
Double_t *fhBinLimPhi; //[fhNBinsPhi] bin limits: phi
Double_t *fhBinLimCharge; //[fhNBinsCharge] bin limits: charge
ClassDef(AliCFTrackKineCuts,2);
};
#endif