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