1 #ifndef ALITRDCHECKESD_H
2 #define ALITRDCHECKESD_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 /* $Id: AliTRDcheckESD.h 27496 2008-07-22 08:35:45Z cblume $ */
8 /////////////////////////////////////////////////////
10 // Check basic detector results at ESD level
13 // Alex Bercuci <A.Bercuci@gsi.de>
15 //////////////////////////////////////////////////////
17 #ifndef ALIANALYSISTASK_H
18 #include "AliAnalysisTaskSE.h"
25 class AliAnalysisCuts;
38 class AliTRDcheckESD : public AliAnalysisTaskSE {
40 enum ETRDcheckESDstatus {
41 kMC = BIT(0) // use MC info
42 ,kCollision = BIT(1) //
44 enum ETRDcheckESDhistos {
45 kNCl = 1 // number of clusters per track
46 ,kTRDstat // TRD tracks status
47 ,kTRDmom // TRD track momentum
48 ,kPtRes // Pt resolution @ vertex for TRD
49 ,kTPCVertex // event vertex from TPC
50 ,kEventVertex // event vertex
51 ,kNTracksAll // ntracks - all
52 ,kNTracksAcc // ntracks - inside acc. and DCA cut
53 ,kNTracksTPC // additional cut on number of TPC clusters
54 ,kDCAxy // transverse DCA
56 ,kPt1 // Pt distribution, eta and ptmin cuts
57 ,kPt2 // Pt distribution, cuts from kPt1 and DCA cuts
58 ,kPt3pos // Pt distribution, cuts from kPt2 and cut on TPC clusters for positives (>100)
59 ,kPt3neg // Pt distribution, cuts from kPt2 and cut on TPC clusters for negatives (>100)
60 ,kPt4pos // Pt distribution, cuts from kPt3pos and at least one TRD tracklet
61 ,kPt4neg // Pt distribution, cuts from kPt3neg and at least one TRD tracklet
62 ,kTheta // distribution of theta for tracks passing the cuts from kPt4pos and kPt4neg
63 ,kPhi // distribution of phi for tracks passing the cuts from kPt4pos and kPt4neg
64 ,kNTPCCl // number of TPC clusters, cuts from kPt2
65 ,kNTPCCl2 // number of TPC clusters, cuts from kPt2 + pt>1 GeV/c
66 ,kTPCDedx // TPC dE/dx, cuts from kPt3pos or kPt3neg
67 ,kEtaPhi // (eta,phi) distrib. for tracks after the cuts from kPt3pos or kPt3neg
68 ,kEtaNclsTPC // (TPC_Ncls,eta) distrib. for tracks after the cuts from kPt3pos or kPt3neg
69 ,kPhiNclsTPC // (TPC_Ncls,phi) distrib. for tracks after the cuts from kPt3pos or kPt3neg
70 ,kSPDMult // SPD multiplicity
71 ,kNTrackletsTRD // (TRD tracklets per track, P) distribution, after cuts from kPt4pos or kPt4neg
72 ,kNClsTrackTRD=kNTrackletsTRD+6 // (TRD clusters per track, P) distribution, after cuts from kPt4pos or kPt4neg
73 ,kPHSlice=kNClsTrackTRD+6 // (slicePH,sliceNo) distribution, after cuts from kPt4pos or kPt4neg
74 ,kPHSliceTPCpions=kPHSlice+6 // (slicePH,sliceNo) distribution for TPC pions, after cuts from kPt4pos or kPt4neg
75 ,kTPCdedxPions=kPHSliceTPCpions+6 // (TPC dedx,P) for selected TPC pions
76 ,kPHSliceTPCelectrons=kTPCdedxPions+6 // (slicePH,sliceNo) distribution for TPC electrons, after cuts from kPt4pos or kPt4neg
77 ,kTPCdedxElectrons=kPHSliceTPCelectrons+6 // (TPC dedx,P) for selected TPC electrons
78 ,kQtotP=kTPCdedxElectrons+6 // (total Q from slices, momentum) distribution, after cuts from kPt4pos or kPt4neg
79 ,kPropagXYvsP=kQtotP+6 // (X,Y,momentum) distribution after AliESDtrack::PropagateTo(r=300.)
80 ,kPropagRZvsP // (R,Z,momentum) distribution after AliESDtrack::PropagateTo(r=300.)
81 ,kTPCRefTracksPos // (eta,detector phi,Pt) distribution of reference TPC positive tracks (fulfill cuts from kPt3pos)
82 ,kTPCRefTracksNeg=kTPCRefTracksPos+6 // (eta,detector phi,Pt) distribution of reference TPC negative tracks (fulfill cuts from kPt3neg)
83 ,kTRDRefTracksPos=kTPCRefTracksNeg+6 // (eta,detector phi,Pt) distribution of reference TRD positive tracks (fulfill cuts from kPt4pos)
84 ,kTRDRefTracksNeg=kTRDRefTracksPos+6 // (eta,detector phi,Pt) distribution of reference TRD negative tracks (fulfill cuts from kPt4neg)
85 ,kTRDRefTracksPos4=kTRDRefTracksNeg+6 // (eta,detector phi,Pt) distribution of reference TRD positive tracks with 4 tracklets (fulfill cuts from kPt4pos)
86 ,kTRDRefTracksNeg4=kTRDRefTracksPos4+6 // (eta,detector phi,Pt) distribution of reference TRD negative tracks with 4 tracklets (fulfill cuts from kPt4neg)
87 ,kTRDRefTracksPos5=kTRDRefTracksNeg4+6
88 ,kTRDRefTracksNeg5=kTRDRefTracksPos5+6
89 ,kTRDRefTracksPos6=kTRDRefTracksNeg5+6
90 ,kTRDRefTracksNeg6=kTRDRefTracksPos6+6
91 ,kTRDEtaPhiAvNtrkl=kTRDRefTracksNeg6+6 // (eta, detector phi) profile of average number of tracklets
92 ,kTRDEtaDeltaPhiAvNtrkl=kTRDEtaPhiAvNtrkl+6 // (eta, delta-phi) profile of average number of tracklets
93 // delta-phi is the angle made by the track with the normal to the chamber entrance plane
94 ,kTRDEtaPhiAvQtot=kTRDEtaDeltaPhiAvNtrkl+6 // (eta, detector phi) profile of total tracklet charge from slices
95 ,kNhistos = kTRDEtaPhiAvQtot+36 // number of histograms
96 ,kNrefs = 4 // number of reference plots
98 enum ETrdCfVariables {
114 kNTrdCfVariables=kTrackQtot+6
116 enum ETRDcheckESDbits {
117 kTPCout = 1 // track left TPC
118 ,kTRDin // track reach TRD fiducial volume
119 ,kTRDout // track reconstructed in TRD
120 ,kTRDpid // PID calculated in TRD
121 ,kTRDref // track refitted in TRD
124 AliTRDcheckESD(char* name);
125 virtual ~AliTRDcheckESD();
127 void UserCreateOutputObjects();
128 Bool_t GetRefFigure(Int_t ifig);
129 Int_t GetNRefFigures() const { return fNRefFigures; }
130 void UserExec(Option_t *);
132 void SetRefTrackFilter(AliAnalysisCuts* const filter) {fReferenceTrackFilter = filter;}
134 Bool_t HasMC() const { return TESTBIT(fStatus, kMC);}
135 Bool_t IsCollision() const {return TESTBIT(fStatus, kCollision);}
136 void SetCollision(Bool_t set=kTRUE) {set ? SETBIT(fStatus, kCollision) : CLRBIT(fStatus, kCollision);}
138 AliCFContainer* GetCFContainer() {return fCfContainer;}
139 Bool_t Load(const Char_t *fn="AnalysisResults.root", const Char_t *dir="TRD_Performance", const Char_t *name=NULL);
140 void SetMC(Bool_t mc = kTRUE) { mc ? SETBIT(fStatus, kMC) : CLRBIT(fStatus, kMC);}
141 Bool_t PutTrendValue(const Char_t *name, Double_t val);
142 void Terminate(Option_t *);
143 void MakeSummary(Double_t* trendValues=0x0);
144 void MakeSummaryFromCF(Double_t* trendValues=0x0, Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);
147 static const Float_t fgkxTPC; // end radial position of TPC
148 static const Float_t fgkxTOF; // start radial position of TOF
149 static const UChar_t fgkNgraph[kNrefs]; // number of graphs/ref plot
151 Bool_t PlotTrackingSummary(Int_t centralityClass=1, Double_t* trendValues=0x0); // 1 <= centralityClass <= 5; 0-all centrality classes together
152 Bool_t PlotPidSummary(Int_t centralityClass=1, Double_t* trendValues=0x0); // 1 <= centralityClass <= 5; 0-all centrality classes together
153 Bool_t PlotCentSummary(Double_t* trendValues=0x0); // centrality dependent plots
155 void PlotTrackingSummaryFromCF(Int_t centralityClass=1, Double_t* trendValues=0x0,
156 Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE); // 1 <= centralityClass <= 5; 0-all centrality classes together
157 void PlotPidSummaryFromCF(Int_t centralityClass=1, Double_t* trendValues=0x0,
158 Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE); // 1 <= centralityClass <= 5; 0-all centrality classes together
159 void PlotCentSummaryFromCF(Double_t* trendValues=0x0,
160 Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE); // centrality dependent plots
162 AliTRDcheckESD(const AliTRDcheckESD&);
163 AliTRDcheckESD& operator=(const AliTRDcheckESD&);
164 Int_t Pdg2Idx(Int_t pdg) const;
165 void Process(TH1 **h, TGraphErrors *g);
166 void Process2D(TH2 * const h, TGraphErrors **g);
167 void PrintStatus(ULong_t s);
168 TH2F* Proj3D(TH3* hist, TH2* accMap, Int_t binLow, Int_t binHigh, Float_t &entries);
169 TH1D* Proj2D(TH2* hist);
170 TH1F* EfficiencyTRD(TH3* tpc3D, TH3* trd3D, Bool_t useAcceptance=kTRUE);
172 void SetStyle(TH1* hist, Int_t lineStyle, Int_t lineColor, Int_t lineWidth,
173 Int_t markerStyle, Int_t markerColor, Int_t markerSize);
174 void SetStyle(TAxis* axis, const Char_t* title, Float_t titleSize, Float_t titleOffset, Bool_t centerTitle,
176 void CheckActiveSM(TH1D* phiProj, Bool_t activeSM[18]);
177 void FindIsolatedBCs(TH1D* bcHist, Bool_t isIsolated[3500]);
179 Int_t fStatus; // bit mask for controlling the task
180 Int_t fNRefFigures; // number of current ref plots
181 AliESDEvent *fESD; //! ESD event
182 AliMCEvent *fMC; //! MC event
183 AliESDpid *fESDpid; // ESD pid object
184 TObjArray *fHistos; //! QA histos
185 TObjArray *fResults; // QA graphs
186 static FILE *fgFile; //! trend file streamer
188 AliCFContainer* fCfContainer; // CF container for computing efficiencies
189 AliAnalysisCuts* fReferenceTrackFilter; // reference track filter
192 static const Float_t fgkEvVertexZ;// cm
193 static const Int_t fgkEvVertexN;// cm
195 static const Float_t fgkTrkDCAxy; // cm
196 static const Float_t fgkTrkDCAz; // cm
197 static const Int_t fgkNclTPC; // N clusters TPC
198 static const Float_t fgkPt; // min. pt
199 static const Float_t fgkEta; // eta range
201 static const Float_t fgkQs; // scale for the total charge
203 ClassDef(AliTRDcheckESD, 7) // user oriented TRD analysis based on ESD-MC data