]>
Commit | Line | Data |
---|---|---|
6279d59e | 1 | // |
2 | // Header file for implementation of data analysis aft 900 GeV | |
3 | // | |
4 | // Author: A. Pulvirenti | |
5 | // | |
6 | ||
7 | #ifndef ALIRSNANALYSISPHI7TEV_H | |
8 | #define ALIRSNANALYSISPHI7TEV_H | |
9 | ||
10 | #include "AliAnalysisTaskSE.h" | |
4c06ce33 | 11 | #include "AliESDtrackCuts.h" |
5faf5a07 | 12 | #include "AliPID.h" |
6279d59e | 13 | |
14 | class TH1I; | |
4c06ce33 | 15 | class TH1F; |
5faf5a07 | 16 | class TH3F; |
6279d59e | 17 | |
18 | class AliStack; | |
19 | class AliESDEvent; | |
20 | class AliESDVertex; | |
21 | class AliESDpid; | |
7356f978 | 22 | class AliESDtrack; |
23 | class AliCFContainer; | |
6279d59e | 24 | |
7356f978 | 25 | class AliRsnAnalysisPhi7TeV : public AliAnalysisTaskSE { |
26 | public: | |
27 | ||
28 | enum EVertexType { | |
4c06ce33 | 29 | kGoodTracksPrimaryVertex = 0, |
30 | kGoodSPDPrimaryVertex = 1, | |
31 | kFarTracksPrimaryVertex = 2, | |
32 | kFarSPDPrimaryVertex = 3, | |
33 | kNoGoodPrimaryVertex = 4, | |
7356f978 | 34 | kEmptyEvent = 5, |
35 | kVertexTypes | |
36 | }; | |
37 | ||
38 | enum ETrackType { | |
39 | kITSStandAlone, | |
40 | kTPConly, | |
41 | kTPCwithTOF, | |
42 | kTrackTypes | |
43 | }; | |
44 | ||
45 | AliRsnAnalysisPhi7TeV(const char *name = "Phi7TeV", Bool_t isMC = kFALSE); | |
46 | AliRsnAnalysisPhi7TeV(const AliRsnAnalysisPhi7TeV& copy); | |
47 | AliRsnAnalysisPhi7TeV& operator=(const AliRsnAnalysisPhi7TeV& copy); | |
48 | virtual ~AliRsnAnalysisPhi7TeV(); | |
49 | ||
50 | void SetMC (Bool_t yn = kTRUE) {fIsMC = yn;} | |
51 | void SetAddITSTPC(Bool_t yn = kTRUE) {fAddTPC = yn;} | |
52 | void SetAddITSSA (Bool_t yn = kTRUE) {fAddITS = yn;} | |
53 | void SetCheckITS (Bool_t yn = kTRUE) {fCheckITS = yn;} | |
54 | void SetCheckTPC (Bool_t yn = kTRUE) {fCheckTPC = yn;} | |
55 | void SetCheckTOF (Bool_t yn = kTRUE) {fCheckTOF = yn;} | |
56 | void SetStep (Int_t step) {fStep = step;} | |
57 | ||
58 | void SetPhiMass (Double_t value) {fPhiMass = value;} | |
59 | void SetKaonMass(Double_t value) {fKaonMass = value;} | |
60 | ||
61 | void SetMaxVz(Double_t v) {fMaxVz = v;} | |
62 | ||
63 | void SetITSNSigma (Double_t v) {fITSNSigma = v;} | |
64 | void SetTPCNSigmaLow (Double_t v) {fTPCNSigma[0] = v;} | |
65 | void SetTPCNSigmaHigh (Double_t v) {fTPCNSigma[1] = v;} | |
66 | void SetTPCMomentumThreshold(Double_t v) {fTPCMomentumThreshold = v;} | |
67 | void SetTOFNSigma (Double_t v) {fTOFNSigma = v;} | |
68 | ||
69 | void SetCutsTPC(AliESDtrackCuts *cuts) {fESDtrackCutsTPC = cuts;} | |
70 | void SetCutsITS(AliESDtrackCuts *cuts) {fESDtrackCutsITS = cuts;} | |
71 | void SetESDpid (AliESDpid *pid ) {fESDpid = pid ;} | |
72 | AliESDtrackCuts* GetCutsTPC() {return fESDtrackCutsTPC;} | |
73 | AliESDtrackCuts* GetCutsITS() {return fESDtrackCutsITS;} | |
74 | AliESDpid* GetESDpid() {return fESDpid; } | |
75 | ||
76 | virtual void UserCreateOutputObjects(); | |
77 | virtual void UserExec(Option_t *option = ""); | |
78 | virtual void Terminate(Option_t *option = ""); | |
79 | ||
80 | EVertexType EventEval(AliESDEvent *esd); | |
81 | ||
82 | Bool_t IsTPC (AliESDtrack *track); | |
83 | Bool_t IsITS (AliESDtrack *track); | |
84 | Bool_t MatchTOF (AliESDtrack *track); | |
85 | ETrackType TrackType(AliESDtrack *track); | |
86 | ||
87 | Bool_t OkQualityITS(AliESDtrack *track) {return fESDtrackCutsITS->IsSelected(track);} | |
88 | Bool_t OkQualityTPC(AliESDtrack *track) {return fESDtrackCutsTPC->IsSelected(track);} | |
89 | Bool_t OkQuality (AliESDtrack *track); | |
90 | Bool_t OkPIDITS (AliESDtrack *track, AliPID::EParticleType pid = AliPID::kKaon); | |
91 | Bool_t OkPIDTPC (AliESDtrack *track, AliPID::EParticleType pid = AliPID::kKaon); | |
92 | Bool_t OkPIDTOF (AliESDtrack *track, AliPID::EParticleType pid = AliPID::kKaon); | |
93 | Bool_t OkPID (AliESDtrack *track, AliPID::EParticleType pid = AliPID::kKaon); | |
94 | ||
95 | private: | |
96 | ||
97 | void ProcessESD (AliESDEvent *esd, AliMCEvent *mc); | |
98 | void ProcessMC (AliESDEvent *esd, AliMCEvent *mc); | |
99 | Int_t MatchedTrack (AliESDEvent *esd, Int_t label, Int_t &npassed, Int_t start = 0); | |
100 | Int_t BestMatchedTrack(AliESDEvent *esd, Int_t label); | |
101 | ||
102 | Bool_t fIsMC; // use MC or data? | |
103 | Bool_t fAddTPC; // include TPC+ITS tracks? | |
104 | Bool_t fAddITS; // add ITS standalone tracks? | |
105 | Bool_t fCheckITS; // check ITS PID (only for ITS-SA)? | |
106 | Bool_t fCheckTPC; // check TPC PID (only for TPC+ITS)? | |
107 | Bool_t fCheckTOF; // check TOF PID (only for TPC+ITS)? | |
108 | Int_t fStep; // step for progress message | |
109 | ||
110 | Double_t fPhiMass; // mass hypothesis for phi | |
111 | Double_t fKaonMass; // mass hypothesis for kaon | |
112 | ||
113 | Double_t fMaxVz; // range in Z of primary vertex w.r. to origin | |
114 | ||
115 | Double_t fITSNSigma; // range for ITS dE/dx band (in sigmas) | |
116 | Double_t fTPCNSigma[2]; // ranges for TPC dE/dx band (in sigmas) | |
117 | Double_t fTPCMomentumThreshold; // below this, [0] band is used, above, [1] bandd is used | |
118 | Double_t fTOFNSigma; // range for TOF time band (in sigmas) | |
119 | ||
120 | AliESDtrackCuts *fESDtrackCutsTPC; // ESD standard defined track cuts for TPC tracks | |
121 | AliESDtrackCuts *fESDtrackCutsITS; // ESD standard defined track cuts for ITS-SA tracks | |
122 | AliESDpid *fESDpid; // PID manager | |
123 | ||
124 | TList *fOutList; // list containing all task outputs | |
125 | ||
126 | AliCFContainer *fCFunlike; // CF container for unlike-sign pairs | |
127 | AliCFContainer *fCFlikePP; // CF container for like-sign pairs ++ | |
128 | AliCFContainer *fCFlikeMM; // CF container for like-sign pairs -- | |
129 | AliCFContainer *fCFtrues; // CF container for true phis | |
130 | AliCFContainer *fCFkaons; // CF container for kaons (monitoring) | |
131 | ||
132 | TH1I *fHEvents; // histogram of event types | |
133 | TH1F *fVertexX[2]; // histogram of X coordinate of primary vertex ([0] = tracks, [1] = SPD) | |
134 | TH1F *fVertexY[2]; // histogram of Y coordinate of primary vertex ([0] = tracks, [1] = SPD) | |
135 | TH1F *fVertexZ[2]; // histogram of Z coordinate of primary vertex ([0] = tracks, [1] = SPD) | |
136 | ||
137 | // ROOT dictionary | |
138 | ClassDef(AliRsnAnalysisPhi7TeV, 1) | |
6279d59e | 139 | }; |
140 | ||
7356f978 | 141 | inline Bool_t AliRsnAnalysisPhi7TeV::IsTPC(AliESDtrack *vtrack) |
5faf5a07 | 142 | { |
143 | // | |
7356f978 | 144 | // Checks if the track has the status flags required for a TPC+ITS track |
5faf5a07 | 145 | // |
146 | ||
7356f978 | 147 | if (!vtrack) { |
148 | AliWarning("NULL argument: impossible to check status"); | |
149 | return kFALSE; | |
150 | } | |
151 | ||
152 | return vtrack->IsOn(AliESDtrack::kTPCin); | |
5faf5a07 | 153 | } |
154 | ||
7356f978 | 155 | inline Bool_t AliRsnAnalysisPhi7TeV::IsITS(AliESDtrack *vtrack) |
5faf5a07 | 156 | { |
157 | // | |
158 | // Checks if the track has the status flags required for an ITS standalone track | |
159 | // | |
160 | ||
7356f978 | 161 | if (!vtrack) { |
162 | AliWarning("NULL argument: impossible to check status"); | |
163 | return kFALSE; | |
164 | } | |
165 | ||
166 | Bool_t isTPCin = vtrack->IsOn(AliESDtrack::kTPCin); | |
167 | Bool_t isITSrefit = vtrack->IsOn(AliESDtrack::kITSrefit); | |
168 | Bool_t isITSpureSA = vtrack->IsOn(AliESDtrack::kITSpureSA); | |
169 | Bool_t isITSpid = vtrack->IsOn(AliESDtrack::kITSpid); | |
170 | ||
171 | return ((!isTPCin) && isITSrefit && (!isITSpureSA) && isITSpid); | |
5faf5a07 | 172 | } |
173 | ||
174 | ||
175 | inline Bool_t AliRsnAnalysisPhi7TeV::MatchTOF(AliESDtrack *vtrack) | |
176 | { | |
177 | // | |
178 | // Checks if the track has matched the TOF detector | |
179 | // | |
180 | ||
7356f978 | 181 | if (!vtrack) { |
182 | AliWarning("NULL argument: impossible to check status"); | |
183 | return kFALSE; | |
184 | } | |
185 | ||
186 | // require a minimum length to have meaningful match | |
187 | if (vtrack->GetIntegratedLength() < 350.) return kFALSE; | |
188 | ||
189 | Bool_t isTOFout = vtrack->IsOn(AliESDtrack::kTOFout); | |
190 | Bool_t isTIME = vtrack->IsOn(AliESDtrack::kTIME); | |
191 | ||
192 | return (isTOFout && isTIME); | |
193 | } | |
194 | ||
195 | inline AliRsnAnalysisPhi7TeV::ETrackType AliRsnAnalysisPhi7TeV::TrackType(AliESDtrack *track) | |
196 | { | |
197 | // | |
198 | // Assigns the track type according to enum | |
199 | // | |
200 | ||
201 | if (IsITS(track)) | |
202 | return kITSStandAlone; | |
203 | else if (IsTPC(track)) { | |
204 | if (MatchTOF(track)) | |
205 | return kTPCwithTOF; | |
206 | else | |
207 | return kTPConly; | |
208 | } | |
209 | else | |
210 | return kTrackTypes; | |
211 | } | |
212 | ||
213 | inline Bool_t AliRsnAnalysisPhi7TeV::OkQuality(AliESDtrack *track) | |
214 | { | |
215 | // | |
216 | // Check track quality cut, which depends on track type | |
217 | // | |
218 | ||
219 | ETrackType type = TrackType(track); | |
220 | ||
221 | switch (type) { | |
222 | case kITSStandAlone: | |
223 | return OkQualityITS(track); | |
224 | case kTPConly: | |
225 | case kTPCwithTOF: | |
226 | return OkQualityTPC(track); | |
227 | default: | |
228 | return kFALSE; | |
229 | } | |
230 | } | |
231 | ||
232 | inline Bool_t AliRsnAnalysisPhi7TeV::OkPID(AliESDtrack *track, AliPID::EParticleType pid) | |
233 | { | |
234 | // | |
235 | // Check PID cut, which depends on track type | |
236 | // | |
237 | ||
238 | ETrackType type = TrackType(track); | |
239 | ||
240 | switch (type) { | |
241 | case kITSStandAlone: | |
242 | if (fCheckITS) return OkPIDITS(track); | |
243 | else return kTRUE; | |
244 | case kTPConly: | |
245 | if (fCheckTPC) return OkPIDTPC(track); | |
246 | else return kTRUE; | |
247 | case kTPCwithTOF: | |
248 | if (fCheckTPC && fCheckTOF) return (OkPIDTPC(track, pid) && OkPIDTOF(track, pid)); | |
249 | else if (fCheckTOF) return OkPIDTOF(track, pid); | |
250 | else if (fCheckTPC) return OkPIDTPC(track, pid); | |
251 | else return kTRUE; | |
252 | default: | |
253 | return kFALSE; | |
254 | } | |
5faf5a07 | 255 | } |
256 | ||
6279d59e | 257 | #endif |