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>
14 // Ionut Arsene <iarsene@cern.ch>
16 //////////////////////////////////////////////////////
18 #ifndef ALIANALYSISTASK_H
19 #include "AliAnalysisTaskSE.h"
26 class AliAnalysisCuts;
40 class AliTRDcheckESD : public AliAnalysisTaskSE {
42 enum ETRDcheckESDstatus {
43 kMC = BIT(0) // use MC info
44 ,kCollision = BIT(1) //
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
79 kNMaxAssignedTriggers = 200
92 AliTRDcheckESD(char* name);
93 virtual ~AliTRDcheckESD();
95 void UserCreateOutputObjects();
96 void UserExec(Option_t *);
98 void SetRefTrackFilter(AliAnalysisCuts* const filter) {fReferenceTrackFilter = filter;}
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);}
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 += ";";}
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);
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];
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);
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);
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,
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);
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
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
177 ClassDef(AliTRDcheckESD, 10) // user oriented TRD analysis based on ESD-MC data