]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/TRD/AliTRDcheckESD.h
Added (partial) LHC11e period
[u/mrichter/AliRoot.git] / PWG1 / TRD / AliTRDcheckESD.h
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
18 #include "AliAnalysisTaskSE.h"
19 #endif
20
21 class AliESDEvent;
22 class AliMCEvent;
23 class AliESDpid;
24 class AliCFContainer;
25 class AliAnalysisCuts;
26 class TH1;
27 class TH2;
28 class TH1F;
29 class TH1D;
30 class TH2F;
31 class TH3F;
32 class TH3;
33 class TObjArray;
34 class TGraph;
35 class TGraphErrors;
36 class TAxis;
37
38 class AliTRDcheckESD : public AliAnalysisTaskSE {
39 public:
40   enum ETRDcheckESDstatus {
41      kMC        = BIT(0)  // use MC info
42     ,kCollision = BIT(1)  // 
43   };
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 
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
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
97   };
98   enum ETrdCfVariables {
99     kEventVtxZ=0,
100     kEventMult,
101     kEventBC,
102     kTrackTOFdeltaBC,
103     kTrackTOFBC,
104     kTrackDCAxy,
105     kTrackDCAz,
106     kTrackCharge,
107     kTrackPhi,
108     kTrackEta,
109     kTrackPt,
110     kTrackP,
111     kTrackTrdTracklets,
112     kTrackTrdClusters,
113     kTrackQtot,
114     kNTrdCfVariables=kTrackQtot+6
115   };
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
122   };
123   AliTRDcheckESD();
124   AliTRDcheckESD(char* name);
125   virtual ~AliTRDcheckESD();
126   
127   void          UserCreateOutputObjects();
128   Bool_t        GetRefFigure(Int_t ifig);
129   Int_t         GetNRefFigures() const  { return fNRefFigures; } 
130   void          UserExec(Option_t *);
131
132   void          SetRefTrackFilter(AliAnalysisCuts* const filter) {fReferenceTrackFilter = filter;}
133   
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);}
137   TObjArray*    Histos();
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);
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
149   static const UChar_t fgkNgraph[kNrefs]; // number of graphs/ref plot
150
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
154
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
161     
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);
171   void          DrawTRDGrid();
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, 
175                          Float_t labelSize);
176   void          CheckActiveSM(TH1D* phiProj, Bool_t activeSM[18]);
177   void          FindIsolatedBCs(TH1D* bcHist, Bool_t isIsolated[3500]);
178   
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
187   
188   AliCFContainer*  fCfContainer;       // CF container for computing efficiencies
189   AliAnalysisCuts* fReferenceTrackFilter;     // reference track filter
190   
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
200   
201   static const Float_t fgkQs;      // scale for the total charge
202
203   ClassDef(AliTRDcheckESD, 7)          // user oriented TRD analysis based on ESD-MC data
204 };
205 #endif