2 // Header file for implementation of data analysis aft 900 GeV
4 // Author: A. Pulvirenti
7 #ifndef ALIRSNANALYSISPHI7TEV_H
8 #define ALIRSNANALYSISPHI7TEV_H
10 #include "AliAnalysisTaskSE.h"
11 #include "AliESDtrackCuts.h"
25 class AliRsnAnalysisPhi7TeV : public AliAnalysisTaskSE {
29 kGoodTracksPrimaryVertex = 0,
30 kGoodSPDPrimaryVertex = 1,
31 kFarTracksPrimaryVertex = 2,
32 kFarSPDPrimaryVertex = 3,
33 kNoGoodPrimaryVertex = 4,
45 AliRsnAnalysisPhi7TeV(const char *name = "Phi7TeV", Bool_t isMC = kFALSE);
46 AliRsnAnalysisPhi7TeV(const AliRsnAnalysisPhi7TeV& copy);
47 AliRsnAnalysisPhi7TeV& operator=(const AliRsnAnalysisPhi7TeV& copy);
48 virtual ~AliRsnAnalysisPhi7TeV();
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;}
58 void SetPhiMass (Double_t value) {fPhiMass = value;}
59 void SetKaonMass(Double_t value) {fKaonMass = value;}
61 void SetMaxVz(Double_t v) {fMaxVz = v;}
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;}
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; }
76 virtual void UserCreateOutputObjects();
77 virtual void UserExec(Option_t *option = "");
78 virtual void Terminate(Option_t *option = "");
80 EVertexType EventEval(AliESDEvent *esd);
82 Bool_t IsTPC (AliESDtrack *track);
83 Bool_t IsITS (AliESDtrack *track);
84 Bool_t MatchTOF (AliESDtrack *track);
85 ETrackType TrackType(AliESDtrack *track);
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);
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);
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
110 Double_t fPhiMass; // mass hypothesis for phi
111 Double_t fKaonMass; // mass hypothesis for kaon
113 Double_t fMaxVz; // range in Z of primary vertex w.r. to origin
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)
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
124 TList *fOutList; // list containing all task outputs
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)
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)
138 ClassDef(AliRsnAnalysisPhi7TeV, 1)
141 inline Bool_t AliRsnAnalysisPhi7TeV::IsTPC(AliESDtrack *vtrack)
144 // Checks if the track has the status flags required for a TPC+ITS track
148 AliWarning("NULL argument: impossible to check status");
152 return vtrack->IsOn(AliESDtrack::kTPCin);
155 inline Bool_t AliRsnAnalysisPhi7TeV::IsITS(AliESDtrack *vtrack)
158 // Checks if the track has the status flags required for an ITS standalone track
162 AliWarning("NULL argument: impossible to check status");
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);
171 return ((!isTPCin) && isITSrefit && (!isITSpureSA) && isITSpid);
175 inline Bool_t AliRsnAnalysisPhi7TeV::MatchTOF(AliESDtrack *vtrack)
178 // Checks if the track has matched the TOF detector
182 AliWarning("NULL argument: impossible to check status");
186 // require a minimum length to have meaningful match
187 if (vtrack->GetIntegratedLength() < 350.) return kFALSE;
189 Bool_t isTOFout = vtrack->IsOn(AliESDtrack::kTOFout);
190 Bool_t isTIME = vtrack->IsOn(AliESDtrack::kTIME);
192 return (isTOFout && isTIME);
195 inline AliRsnAnalysisPhi7TeV::ETrackType AliRsnAnalysisPhi7TeV::TrackType(AliESDtrack *track)
198 // Assigns the track type according to enum
202 return kITSStandAlone;
203 else if (IsTPC(track)) {
213 inline Bool_t AliRsnAnalysisPhi7TeV::OkQuality(AliESDtrack *track)
216 // Check track quality cut, which depends on track type
219 ETrackType type = TrackType(track);
223 return OkQualityITS(track);
226 return OkQualityTPC(track);
232 inline Bool_t AliRsnAnalysisPhi7TeV::OkPID(AliESDtrack *track, AliPID::EParticleType pid)
235 // Check PID cut, which depends on track type
238 ETrackType type = TrackType(track);
242 if (fCheckITS) return OkPIDITS(track);
245 if (fCheckTPC) return OkPIDTPC(track);
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);