1 #ifndef ALIANALYSISTASKITSSATRACKS
2 #define ALIANALYSISTASKITSSATRACKS
4 /* Copyright(c) 1998-2012, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
7 //*************************************************************************
8 // Class AliAnalysisTaskITSsaTracks
9 // AliAnalysisTaskSE to extract QA and performance histos for ITS standalone tracks
12 // Authors: L. Milano, milano@to.infn.it
13 // F. Prino, prino@to.infn.it
15 //*************************************************************************
26 #include "AliAnalysisTaskSE.h"
28 class AliAnalysisTaskITSsaTracks : public AliAnalysisTaskSE {
32 AliAnalysisTaskITSsaTracks();
33 virtual ~AliAnalysisTaskITSsaTracks();
35 virtual void UserExec(Option_t *option);
36 virtual void UserCreateOutputObjects();
37 virtual void Terminate(Option_t *option);
39 void SetMinITSPoints(Int_t minp=4){
42 void SetMinTPCPoints(Int_t minp=50){
45 void SetMinSPDPoints(Int_t minp=1){
48 void SetMinPointsForITSPid(Int_t minp=3){
51 void SetITChi2Cut(Float_t maxchi2=2.5){
52 fMaxITSChi2Clu=maxchi2;
55 void SetPtBins(Int_t n, Double_t* lim);
57 void RequirePointInLayer(Int_t iLay){
58 if(iLay<6) fRequirePoint[iLay]=kTRUE;
60 void RequireInnerSPD(){
61 fRequirePoint[0]=kTRUE;
63 void RequireBothSPD(){
64 fRequirePoint[0]=kTRUE;
65 fRequirePoint[1]=kTRUE;
68 void SetFillNtuple(Bool_t fill=kTRUE){
71 void SetReadMC(Bool_t optMC=kTRUE){
74 void SetUseMCtruthForPID(Bool_t opt=kTRUE){
80 enum {kPion=0,kKaon,kProton,kNspecies};
81 enum {kTypeTPCITS=0, kTypeITSsa, kTypeITSpureSA, kNtrackTypes};
84 AliAnalysisTaskITSsaTracks(const AliAnalysisTaskITSsaTracks &source);
85 AliAnalysisTaskITSsaTracks& operator=(const AliAnalysisTaskITSsaTracks &source);
87 TList* fOutput; //! list of output histos
88 TH1F* fHistNEvents; //! histo with N of events
91 TH1F* fHistPt[kNtrackTypes]; //! pt distr., no PID
92 TH1F* fHistPtGood[kNtrackTypes]; //! pt distr. good tracks, no PID
93 TH1F* fHistPtFake[kNtrackTypes]; //! pt distr. fake tracks, no PID
95 TH2F* fHistEtaPhi[kNtrackTypes]; //! etaphi distr., no PID
96 TH2F* fHistEtaPhiGood[kNtrackTypes]; //! etaphi distr. good tracks, no PID
97 TH2F* fHistEtaPhiFake[kNtrackTypes]; //! etaphi distr. fake tracks, no PID
99 TH2F* fHistEtaPhiAny[kNtrackTypes]; //! etaphi distr., no PID, no ITS requirements
100 TH2F* fHistEtaPhi1SPD[kNtrackTypes]; //! etaphi distr., no PID, at least 1 SPD
101 TH2F* fHistEtaPhi4Clu[kNtrackTypes]; //! etaphi distr., no PID, 1SPD+ 3 dEdx
102 TH2F* fHistEtaPhi6Clu[kNtrackTypes]; //! etaphi distr., no PID, 6 Clu
104 TH1F* fHistChi2[kNtrackTypes]; //! chi2 distr., no PID
105 TH1F* fHistChi2Good[kNtrackTypes]; //! chi2 distr., good tracks, no PID
106 TH1F* fHistChi2Fake[kNtrackTypes]; //! chi2 distr., fake tracks, no PID
108 TH1F* fHistNclu[kNtrackTypes]; //! ITS clu distr., no PID
109 TH1F* fHistNcluGood[kNtrackTypes]; //! ITS clu distr., good tracks, no PID
110 TH1F* fHistNcluFake[kNtrackTypes]; //! ITS clu distr., fake tracks, no PID
112 TH2F* fHistdedxvsP2cls[kNtrackTypes]; //! dedx vs. p for tracks with 2 clus in SDD+SSD
113 TH2F* fHistdedxvsP3cls[kNtrackTypes]; //! dedx vs. p for tracks with 3 clus in SDD+SSD
114 TH2F* fHistdedxvsP4cls[kNtrackTypes]; //! dedx vs. p for tracks with 4 clus in SDD+SSD
117 TH1F* fHistPtTPCITS[kNspecies]; //! pt distribution of TPC+ITS tracks
118 TH1F* fHistPtITSsa[kNspecies]; //! pt distribution of ITSsa tracks
119 TH1F* fHistPtITSpureSA[kNspecies]; //! pt distribution of ITS pure SA tracks
121 TH2F* fHistEtaPhiTPCITS[kNspecies]; //! etaphi distr. of TPC+ITS tracks
122 TH2F* fHistEtaPhiITSsa[kNspecies]; //! etaphi distr. of ITSsa tracks
123 TH2F* fHistEtaPhiITSpureSA[kNspecies]; //! etaphi distr. of ITSpureSA tracks
125 TH2F* fHistNcluTPCITS[kNspecies]; //! n. of clusters for TPC+ITS tracks vs. pt
126 TH2F* fHistNcluITSsa[kNspecies]; //! n. of clusters for ITSsa tracks vs. pt
127 TH2F* fHistNcluITSpureSA[kNspecies]; //! n. of clusters for ITSpureSA tracks vs. pt
128 TH2F* fHistd0rphiITSpureSA[kNspecies]; //! d0z for ITSpureSA tracks vs. pt
129 TH2F* fHistd0zITSpureSA[kNspecies]; //! d0z for ITSpureSA tracks vs. pt
130 TH2F* fHistCluInLayTPCITS[kNspecies]; //! TPC+ITS tracks with cluster in layer
131 TH2F* fHistCluInLayITSsa[kNspecies]; //! ITSsa tracks with cluster in layer
132 TH2F* fHistCluInLayITSpureSA[kNspecies]; //! for ITSpureSA tracks with cluster in layer
134 TH2F* fHistOuterLayITSpureSA[kNspecies]; //! outer layer with cluster vs. pt
136 TH2F* fHistPtResid[kNspecies]; //! pt residuals (TPC) in pt bins
137 TH2F* fHistPtRelResid[kNspecies]; //! pt relative residuals (TPC) in pt bins
138 TH2F* fHistInvPtResid[kNspecies]; //! 1/pt residuals (TPC) in pt bins
139 TH2F* fHistInvPtRelResid[kNspecies]; //! 1/pt relative resid. (TPC) in pt bins
140 TH2F* fHistMCPtResid[kNspecies]; //! pt residuals (MC) vs. pt
141 TH2F* fHistMCPtRelResid[kNspecies]; //! pt relative residuals (MC) vs. pt
142 TH2F* fHistMCInvPtResid[kNspecies]; //! 1/pt residuals (MC) vs. pt
143 TH2F* fHistMCInvPtRelResid[kNspecies]; //! 1/pt relative residulas (MC) vs. pt
145 TH2F* fHistMCPhiResid; //! phi residuals in pt bins
146 TH2F* fHistPhiResid; //! phi residuals in pt bins
147 TNtuple* fNtupleTracks; //! output ntuple
149 Int_t fNPtBins; // number of Pt bins
150 Float_t fPtLimits[kMaxPtBins+1]; // Pt bin limits
151 Int_t fMinITSpts; // Minimum number of ITS points per track
152 Int_t fMinSPDpts; // Minimum number of SPD points per track
153 Int_t fMinPtsforPid; // Minimum number of SDD+SSD points per track
154 Int_t fMinTPCpts; // Minimum number of TPC points per track
155 Float_t fMaxITSChi2Clu; // Maximum value of ITS chi2 per cluster
156 Bool_t fRequirePoint[6]; // require point in given layer
157 Bool_t fFillNtuple; // flag to control fill of ntuple
158 Bool_t fReadMC; // flag read/not-read MC truth info
159 Bool_t fUseMCId; // flag use/not-use MC identity for PID
161 ClassDef(AliAnalysisTaskITSsaTracks,3);