]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/TRD/AliTRDcheckESD.h
Fix from Alex for FPE in TRD: ALIROOT-5503 and tracklet calibration: PWGPP-2
[u/mrichter/AliRoot.git] / PWGPP / 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 //   Ionut Arsene <iarsene@cern.ch>
15 //
16 //////////////////////////////////////////////////////
17
18 #ifndef ALIANALYSISTASK_H
19 #include "AliAnalysisTaskSE.h"
20 #endif
21
22 class AliESDEvent;
23 class AliMCEvent;
24 class AliESDpid;
25 class AliCFContainer;
26 class AliAnalysisCuts;
27 class AliESDtrack;
28 class TH1;
29 class TH2;
30 class TH1F;
31 class TH1D;
32 class TH2F;
33 class TH3F;
34 class TH3;
35 class TObjArray;
36 class TGraph;
37 class TGraphErrors;
38 class TAxis;
39
40 class AliTRDcheckESD : public AliAnalysisTaskSE {
41 public:
42   enum ETRDcheckESDstatus {
43      kMC        = BIT(0)  // use MC info
44     ,kCollision = BIT(1)  // 
45   };
46     
47   enum ETrdCfVariables {
48     kEventVtxZ=0,                // event vtx. Z        ---
49     kEventMult,                  // event multiplicity  ---
50     kEventTrigger,               // trigger class
51     kEventBC,                    // event BC        --- 
52     kTrackTOFBC,                 // track TOF BC    ---
53     kTrackDCAxy,                 // dca xy          ---
54     kTrackDCAz,                  // dca z           ---
55     kTrackCharge,                // charge          ---
56     kTrackOuterParamRadius,      // outer param radius
57     kTrackPhi,                   // phi at the vertex  ---
58     kTrackPhiTRD,                // phi at the entrance of TRD  ---
59     kTrackEta,                   // eta at the vertex  ---
60     kTrackEtaTRD,                // eta at the entrance of TRD  ---
61     kTrackPt,                    // pt at the vertex     ---
62     kTrackPtTRD,                 // pt at the entrance of TRD ---
63     kTrackP,                     // p at the vertex      ---
64     kTrackPTRD,                  // p at the entrance of TRD  ---
65     kTrackTrdChi2,               // TRD track chi2 ---
66     kTrackTrdTracklets,          // number of TRD tracklets  ---
67     kTrackTrdClusters,           // number of TRD clusters   ---
68     kTrackTrdQuality,            // TRD quality for TOF
69     kTrackTRDBudget,             // TRD material budget
70     kTrackletQtot,               // tracklet qtot in each layer
71     kTrackletClustersVsRows,     // clusters / crossed rows
72     kTrackletClusters,           // number of clusters per tracklet
73     kTrackletP,                  // tracklet p in each layer
74     kTrackPlossTRDlayer,         // p loss at each layer
75     kTrackletLayer,              // layer of the current tracklet
76     kTrackletSlice,              // tracklet slice number
77     kTrackletPHslice,            // charge per tracklet slice
78     kNTrdCfVariables,
79     kNMaxAssignedTriggers = 200
80   };
81   
82   enum ETrdCfSteps {
83     kTPCreference=0,
84     kTRD,
85     kTOF,
86     kTOFin,
87     kTOFout,
88     kNSteps
89   };
90      
91   AliTRDcheckESD();
92   AliTRDcheckESD(char* name);
93   virtual ~AliTRDcheckESD();
94   
95   void          UserCreateOutputObjects();
96   void          UserExec(Option_t *);
97
98   void          SetRefTrackFilter(AliAnalysisCuts* const filter) {fReferenceTrackFilter = filter;}
99   
100   Bool_t        HasMC() const { return TESTBIT(fStatus, kMC);}
101   Bool_t        IsCollision() const {return TESTBIT(fStatus, kCollision);}
102   void          SetCollision(Bool_t set=kTRUE) {set ? SETBIT(fStatus, kCollision) : CLRBIT(fStatus, kCollision);}
103   TObjArray*    Histos();
104   Int_t         GetTriggerCounter(const Char_t* triggerName) const;
105   void          PrintTriggers() const;
106   Bool_t        Load(const Char_t *fn="AnalysisResults.root", const Char_t *dir="TRD_Performance", const Char_t *name=NULL);
107   void          SetMC(Bool_t mc = kTRUE) { mc ? SETBIT(fStatus, kMC) : CLRBIT(fStatus, kMC);}
108   Bool_t        PutTrendValue(const Char_t *name, Double_t val);
109   void          Terminate(Option_t *);
110   void          MakeSummaryFromCF(Double_t* trendValues=0x0, const Char_t* triggerName="", Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);
111   Int_t         GetNAssignedTriggers();
112   void          AddUserTrigger(const Char_t* name) {fUserEnabledTriggers += name; fUserEnabledTriggers += ";";}
113   
114   void          AddCFContainer(const Char_t* name, const Char_t* title, Int_t nSteps, Int_t* steps, 
115                                Int_t nVars, UInt_t* vars, TArrayD* binLimits);
116   
117 private:
118   static const Float_t fgkxTPC; // end radial position of TPC
119   static const Float_t fgkxTOF; // start radial position of TOF
120   static const Char_t* fgkVarNames[kNTrdCfVariables];
121   static const Char_t* fgkStepNames[kNSteps];
122   
123   void PlotTrackingSummaryFromCF(Double_t* trendValues=0x0,
124                                  const Char_t* triggerName="",
125                                  Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);   // 1 <= centralityClass <= 5; 0-all centrality classes together
126   void PlotPidSummaryFromCF(Double_t* trendValues=0x0,
127                             const Char_t* triggerName="",
128                             Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);        // 1 <= centralityClass <= 5; 0-all centrality classes together
129   void PlotCentSummaryFromCF(Double_t* trendValues=0x0, const Char_t* triggerName="",
130                              Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);       // centrality dependent plots
131   void PlotOtherSummaryFromCF(Double_t* trendValues);
132   
133   AliTRDcheckESD(const AliTRDcheckESD&);
134   AliTRDcheckESD& operator=(const AliTRDcheckESD&);
135   Int_t         Pdg2Idx(Int_t pdg) const;
136   void          Process(TH1 **h, TGraphErrors *g);
137   void          Process2D(TH2 * const h, TGraphErrors **g);
138   void          PrintStatus(ULong_t s);
139   TH2F*         Proj3D(TH3* hist, TH2* accMap, Int_t binLow, Int_t binHigh, Float_t &entries);
140   TH1D*         Proj2D(TH2* hist, TH1* mpvErr=0x0, TH1* widthErr=0x0, TH1* chi2=0x0);
141   TH1F*         EfficiencyTRD(TH3* tpc3D, TH3* trd3D, Bool_t useAcceptance=kTRUE);
142   TH1F*         EfficiencyFromPhiPt(AliCFContainer* cf, Int_t minNtrkl, Int_t maxNtrkl, Int_t stepNom, Int_t stepDenom, Int_t var=kTrackPt);
143   void          DrawTRDGrid();
144   void          SetStyle(TH1* hist, Int_t lineStyle, Int_t lineColor, Int_t lineWidth, 
145                          Int_t markerStyle, Int_t markerColor, Int_t markerSize);
146   void          SetStyle(TAxis* axis, const Char_t* title, Float_t titleSize, Float_t titleOffset, Bool_t centerTitle, 
147                          Float_t labelSize);
148   void          CheckActiveSM(TH1D* phiProj, Bool_t activeSM[18]);
149   void          FindIsolatedBCs(TH1D* bcHist, Bool_t isIsolated[3500]);
150   void          InitializeCFContainers();
151   Int_t         GetTriggerIndex(const Char_t* name, Bool_t createNew=kTRUE);
152   void          FillEventInfo(Double_t* values);
153   void          FillTrackInfo(Double_t* values, AliESDtrack* esdTrack);
154   void          FillTrackletInfo(Double_t* values, AliESDtrack* esdTrack, Int_t iPlane,
155                                  Double_t* localSagitaPhi, Double_t localMom[][3], Bool_t* localMomGood);
156   void          FillTrackletSliceInfo(Double_t* values, AliESDtrack* esdTrack, Int_t iSlice);
157   //void          FillCFContainer(AliCFContainer* cf, Double_t* values, Int_t step);
158   void          FillCFContainer(AliCFContainer* cf, Double_t* values, Bool_t* stepSelections);
159   Bool_t        IsTrackSelected(AliESDtrack* track, Double_t* values, Int_t step);
160   void          FillGlobalTrackContainers(Double_t* values, Bool_t* stepSelections, Int_t itrig);
161   void          FillTrdTrackletContainers(Double_t* values, Bool_t* stepSelections, Int_t itrig);
162   void          FillTrdSliceContainers(Double_t* values, Bool_t* stepSelections, Int_t itrig);
163   
164   Int_t            fStatus;            // bit mask for controlling the task
165   Int_t            fNRefFigures;       // number of current ref plots
166   AliESDEvent      *fESD;              //! ESD event
167   AliMCEvent       *fMC;               //! MC event
168   AliESDpid        *fESDpid;           //  ESD pid object 
169   static FILE      *fgFile;            //! trend file streamer
170   TObjArray*        fHistos;           //! QA histograms
171     
172   AliAnalysisCuts* fReferenceTrackFilter;     // reference track filter
173   Bool_t           fPhysSelTriggersEnabled;   // flag wheter physics selection triggers were enabled
174   TString          fUserEnabledTriggers;      // list of user enabled triggers
175   Int_t            fNAssignedTriggers;        // number of assigned triggers
176     
177   ClassDef(AliTRDcheckESD, 10)          // user oriented TRD analysis based on ESD-MC data
178 };
179 #endif