]>
Commit | Line | Data |
---|---|---|
1ee39b3a | 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 */ | |
5 | ||
6 | /* $Id: AliTRDcheckESD.h 27496 2008-07-22 08:35:45Z cblume $ */ | |
7 | ||
8 | ///////////////////////////////////////////////////// | |
9 | // | |
10 | // Check basic detector results at ESD level | |
11 | // | |
12 | // Author | |
13 | // Alex Bercuci <A.Bercuci@gsi.de> | |
14 | // | |
15 | ////////////////////////////////////////////////////// | |
16 | ||
17 | #ifndef ALIANALYSISTASK_H | |
f8f46e4d | 18 | #include "AliAnalysisTaskSE.h" |
1ee39b3a | 19 | #endif |
20 | ||
21 | class AliESDEvent; | |
22 | class AliMCEvent; | |
fb65de21 | 23 | class AliESDpid; |
7698e7a4 | 24 | class AliCFContainer; |
25 | class AliAnalysisCuts; | |
1ee39b3a | 26 | class TH1; |
f2e89a4c | 27 | class TH2; |
64d57299 | 28 | class TH1F; |
7698e7a4 | 29 | class TH1D; |
64d57299 | 30 | class TH2F; |
31 | class TH3F; | |
bd97a050 | 32 | class TH3; |
1ee39b3a | 33 | class TObjArray; |
34 | class TGraph; | |
35 | class TGraphErrors; | |
33d501fa | 36 | class TAxis; |
7698e7a4 | 37 | |
f8f46e4d | 38 | class AliTRDcheckESD : public AliAnalysisTaskSE { |
1ee39b3a | 39 | public: |
40 | enum ETRDcheckESDstatus { | |
36d21092 | 41 | kMC = BIT(0) // use MC info |
97d0ccba | 42 | ,kCollision = BIT(1) // |
1ee39b3a | 43 | }; |
44 | enum ETRDcheckESDhistos { | |
2bf6d80c | 45 | kNCl = 1 // number of clusters per track |
f76b8071 | 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 | |
55 | ,kDCAz // z - 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 | |
2bf6d80c | 70 | ,kSPDMult // SPD multiplicity |
f76b8071 | 71 | ,kNTrackletsTRD // (TRD tracklets per track, P) distribution, after cuts from kPt4pos or kPt4neg |
2bf6d80c | 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.) | |
f76b8071 | 80 | ,kPropagRZvsP // (R,Z,momentum) distribution after AliESDtrack::PropagateTo(r=300.) |
bd97a050 | 81 | ,kTPCRefTracksPos // (eta,detector phi,Pt) distribution of reference TPC positive tracks (fulfill cuts from kPt3pos) |
2bf6d80c | 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 | |
1ee39b3a | 97 | }; |
7698e7a4 | 98 | enum ETrdCfVariables { |
99 | kEventVtxZ=0, | |
100 | kEventMult, | |
101 | kEventBC, | |
102 | kTrackTOFdeltaBC, | |
33d501fa | 103 | kTrackTOFBC, |
104 | kTrackDCAxy, | |
105 | kTrackDCAz, | |
7698e7a4 | 106 | kTrackCharge, |
107 | kTrackPhi, | |
108 | kTrackEta, | |
109 | kTrackPt, | |
110 | kTrackP, | |
111 | kTrackTrdTracklets, | |
112 | kTrackTrdClusters, | |
113 | kTrackQtot, | |
114 | kNTrdCfVariables=kTrackQtot+6 | |
115 | }; | |
1ee39b3a | 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 | |
1ee39b3a | 122 | }; |
123 | AliTRDcheckESD(); | |
f8f46e4d | 124 | AliTRDcheckESD(char* name); |
1ee39b3a | 125 | virtual ~AliTRDcheckESD(); |
126 | ||
f8f46e4d | 127 | void UserCreateOutputObjects(); |
e2e3cec2 | 128 | Bool_t GetRefFigure(Int_t ifig); |
36d21092 | 129 | Int_t GetNRefFigures() const { return fNRefFigures; } |
f8f46e4d | 130 | void UserExec(Option_t *); |
1ee39b3a | 131 | |
7698e7a4 | 132 | void SetRefTrackFilter(AliAnalysisCuts* const filter) {fReferenceTrackFilter = filter;} |
133 | ||
1ee39b3a | 134 | Bool_t HasMC() const { return TESTBIT(fStatus, kMC);} |
36d21092 | 135 | Bool_t IsCollision() const {return TESTBIT(fStatus, kCollision);} |
136 | void SetCollision(Bool_t set=kTRUE) {set ? SETBIT(fStatus, kCollision) : CLRBIT(fStatus, kCollision);} | |
1ee39b3a | 137 | TObjArray* Histos(); |
7698e7a4 | 138 | AliCFContainer* GetCFContainer() {return fCfContainer;} |
97d0ccba | 139 | Bool_t Load(const Char_t *fn="AnalysisResults.root", const Char_t *dir="TRD_Performance", const Char_t *name=NULL); |
1ee39b3a | 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 *); | |
33d501fa | 143 | void MakeSummary(Double_t* trendValues=0x0); |
144 | void MakeSummaryFromCF(Double_t* trendValues=0x0, Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE); | |
1ee39b3a | 145 | |
146 | private: | |
147 | static const Float_t fgkxTPC; // end radial position of TPC | |
148 | static const Float_t fgkxTOF; // start radial position of TOF | |
629ae9b8 | 149 | static const UChar_t fgkNgraph[kNrefs]; // number of graphs/ref plot |
1ee39b3a | 150 | |
33d501fa | 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 | |
2bf6d80c | 154 | |
33d501fa | 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 | |
7698e7a4 | 161 | |
1ee39b3a | 162 | AliTRDcheckESD(const AliTRDcheckESD&); |
163 | AliTRDcheckESD& operator=(const AliTRDcheckESD&); | |
f3ef94fc | 164 | Int_t Pdg2Idx(Int_t pdg) const; |
1ee39b3a | 165 | void Process(TH1 **h, TGraphErrors *g); |
629ae9b8 | 166 | void Process2D(TH2 * const h, TGraphErrors **g); |
1ee39b3a | 167 | void PrintStatus(ULong_t s); |
7698e7a4 | 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); | |
171 | void DrawTRDGrid(); | |
33d501fa | 172 | void SetStyle(TH1* hist, Int_t lineStyle, Int_t lineColor, Int_t lineWidth, |
4114abc1 | 173 | Int_t markerStyle, Int_t markerColor, Int_t markerSize); |
33d501fa | 174 | void SetStyle(TAxis* axis, const Char_t* title, Float_t titleSize, Float_t titleOffset, Bool_t centerTitle, |
175 | Float_t labelSize); | |
7698e7a4 | 176 | void CheckActiveSM(TH1D* phiProj, Bool_t activeSM[18]); |
33d501fa | 177 | void FindIsolatedBCs(TH1D* bcHist, Bool_t isIsolated[3500]); |
bd97a050 | 178 | |
1ee39b3a | 179 | Int_t fStatus; // bit mask for controlling the task |
629ae9b8 | 180 | Int_t fNRefFigures; // number of current ref plots |
a96ac33a | 181 | AliESDEvent *fESD; //! ESD event |
182 | AliMCEvent *fMC; //! MC event | |
fb65de21 | 183 | AliESDpid *fESDpid; // ESD pid object |
a96ac33a | 184 | TObjArray *fHistos; //! QA histos |
1ee39b3a | 185 | TObjArray *fResults; // QA graphs |
629ae9b8 | 186 | static FILE *fgFile; //! trend file streamer |
7698e7a4 | 187 | |
188 | AliCFContainer* fCfContainer; // CF container for computing efficiencies | |
189 | AliAnalysisCuts* fReferenceTrackFilter; // reference track filter | |
190 | ||
36d21092 | 191 | // Vertex selection |
192 | static const Float_t fgkEvVertexZ;// cm | |
193 | static const Int_t fgkEvVertexN;// cm | |
194 | // Track selection | |
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 | |
f76b8071 | 200 | |
201 | static const Float_t fgkQs; // scale for the total charge | |
97d0ccba | 202 | |
7698e7a4 | 203 | ClassDef(AliTRDcheckESD, 7) // user oriented TRD analysis based on ESD-MC data |
1ee39b3a | 204 | }; |
02281b83 | 205 | #endif |