]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/RESONANCES/extra/AliRsnAnalysisPhi7TeV.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / extra / AliRsnAnalysisPhi7TeV.h
CommitLineData
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
14class TH1I;
4c06ce33 15class TH1F;
5faf5a07 16class TH3F;
6279d59e 17
18class AliStack;
19class AliESDEvent;
20class AliESDVertex;
21class AliESDpid;
7356f978 22class AliESDtrack;
23class AliCFContainer;
6279d59e 24
7356f978 25class AliRsnAnalysisPhi7TeV : public AliAnalysisTaskSE {
26public:
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
95private:
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 141inline 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 155inline 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
175inline 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
195inline 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
213inline 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
232inline 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