1 #ifndef ALIQADATAMAKER_H
2 #define ALIQADATAMAKER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
11 // Produces the data needed to calculate the quality assurance.
12 // All data must be mergeable objects.
13 // Y. Schutz CERN July 2007
17 // --- ROOT system ---
19 #include <TObjArray.h>
30 class AliDetectorRecoParam;
32 // --- Standard library ---
34 // --- AliRoot header files ---
36 #include "AliRecoParam.h"
38 class AliQADataMaker: public TNamed {
42 AliQADataMaker(const Char_t * name="", const Char_t * title="") ; // ctor
43 AliQADataMaker(const AliQADataMaker& qadm) ;
44 virtual ~AliQADataMaker() ; // dtor
46 void ForbidCloning(TH1* h, Bool_t v=kTRUE) {h->SetBit(AliQAv1::GetForbidCloningBit(),v);}
47 Bool_t IsCloningForbidden(TH1* h) const {return h->TestBit(AliQAv1::GetForbidCloningBit());}
48 Char_t* GetHistoTrigger(const TH1* h) const;
50 virtual Int_t Add2DigitsList(TH1 * hist, const Int_t index, const Bool_t expert = kFALSE, const Bool_t image = kFALSE) = 0 ;
51 virtual Int_t Add2ESDsList(TH1 * hist, const Int_t index, const Bool_t expert = kFALSE, const Bool_t image = kFALSE) = 0 ;
52 virtual Int_t Add2HitsList(TH1 * hist, const Int_t index, const Bool_t expert = kFALSE, const Bool_t image = kFALSE) = 0 ;
53 virtual Int_t Add2RecPointsList(TH1 * hist, const Int_t index, const Bool_t expert = kFALSE, const Bool_t image = kFALSE) = 0 ;
54 virtual Int_t Add2RawsList(TH1 * hist, const Int_t index, const Bool_t expert = kFALSE, const Bool_t image = kFALSE, const Bool_t saveForCorr = kFALSE) = 0 ;
55 virtual Int_t Add2SDigitsList(TH1 * hist, const Int_t index, const Bool_t expert = kFALSE, const Bool_t image = kFALSE) = 0 ;
56 virtual void Exec(AliQAv1::TASKINDEX_t, TObject * data) = 0 ;
57 virtual void EndOfCycle() = 0 ;
58 virtual void EndOfCycle(AliQAv1::TASKINDEX_t ) = 0 ;
59 virtual void EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list ) = 0 ;
61 AliRecoParam::EventSpecie_t GetEventSpecie() const { return fEventSpecie ; }
63 virtual TObject* GetDigitsData(const Int_t index) = 0 ;
64 virtual TObject* GetESDsData(const Int_t index) = 0 ;
65 virtual TObject* GetHitsData(const Int_t index) = 0 ;
66 virtual TObject* GetRecPointsData(const Int_t index) = 0 ;
67 virtual TObject* GetRawsData(const Int_t index) = 0 ;
68 virtual TObject* GetSDigitsData(const Int_t index) = 0 ;
70 virtual TH1* GetDigitsData(const Int_t index, int cloneID) = 0 ;
71 virtual TH1* GetESDsData(const Int_t index, int cloneID) = 0 ;
72 virtual TH1* GetHitsData(const Int_t index, int cloneID) = 0 ;
73 virtual TH1* GetRecPointsData(const Int_t index, int cloneID) = 0 ;
74 virtual TH1* GetRawsData(const Int_t index, int cloneID) = 0 ;
75 virtual TH1* GetSDigitsData(const Int_t index, int cloneID) = 0 ;
77 virtual TObjArray* GetDigitsDataOfTrigClass(int cloneID, TObjArray *dest=0) = 0;
78 virtual TObjArray* GetSDigitsDataOfTrigClass(int cloneID, TObjArray *dest=0) = 0;
79 virtual TObjArray* GetESDsDataOfTrigClass(int cloneID, TObjArray *dest=0) = 0;
80 virtual TObjArray* GetHitsDataOfTrigClass(int cloneID, TObjArray *dest=0) = 0;
81 virtual TObjArray* GetRecPointsDataOfTrigClass(int cloneID, TObjArray *dest=0) = 0;
82 virtual TObjArray* GetRawsDataOfTrigClass(int cloneID, TObjArray *dest=0) = 0;
85 const Char_t * GetDetectorDirName() const { return fDetectorDirName.Data() ; }
86 TList * GetParameterList() const { return fParameterList[AliRecoParam::AConvert(fEventSpecie)] ; }
87 virtual const AliDetectorRecoParam * GetRecoParam() { return NULL ; }
88 Int_t GetRun() const { return fRun ; }
89 Int_t Increment() { return ++fCycleCounter ; }
90 virtual TObjArray** Init(AliQAv1::TASKINDEX_t, Int_t cycles = -1) = 0 ;
91 TObjArray* Init(AliQAv1::TASKINDEX_t, AliRecoParam::EventSpecie_t es, Int_t cycles = -1) ;
92 virtual void Init(AliQAv1::TASKINDEX_t, TObjArray ** list, Int_t run, Int_t cycles = -1) = 0 ;
93 virtual void InitDigits() = 0 ;
94 virtual void InitESDs() = 0 ;
95 virtual void InitRaws() = 0 ;
96 virtual void InitRecPoints() = 0 ;
97 Bool_t IsCycleDone() const { return fCycleCounter > fCycle ? kTRUE : kFALSE ; }
98 Bool_t IsValidEventSpecie(Int_t eventSpecieIndex, TObjArray ** list) ;
99 void Reset() { fCycleCounter = 0 ; }
100 virtual void ResetDetector(AliQAv1::TASKINDEX_t task) = 0 ;
101 void SetCycle(Int_t nevts) { fCycle = nevts ; }
102 void SetWriteExpert() { fWriteExpert = kTRUE ; }
103 virtual void StartOfCycle(Int_t run = -1) = 0 ;
104 virtual void StartOfCycle(AliQAv1::TASKINDEX_t, Int_t run, const Bool_t sameCycle = kFALSE) = 0 ;
105 void UnSetWriteExpert() { fWriteExpert = kFALSE ; }
106 Bool_t WriteExpert() { return fWriteExpert ; }
107 void SetEventSpecie(AliRecoParam::EventSpecie_t es) {fEventSpecie = es;}
108 void SetEventSpecie(Int_t es) { SetEventSpecie(AliRecoParam::Convert(es)); }
109 virtual void SetRecoParam(const AliDetectorRecoParam *) {;}
111 virtual void InitRecPointsForTracker() {;} // needed by AliGlobalQADataMaker
113 Int_t IsClonedPerTrigClass(Int_t index, TObjArray ** list);
114 Bool_t IsOrigHistoKept(Int_t index, TObjArray ** list);
115 Bool_t MatchesToTriggers(UInt_t hpos) const;
117 virtual TObjArray* GetMatchingDigitsData(const Int_t index, TObjArray* optDest=0) = 0 ;
118 virtual TObjArray* GetMatchingESDsData(const Int_t index, TObjArray* optDest=0) = 0 ;
119 virtual TObjArray* GetMatchingHitsData(const Int_t index, TObjArray* optDest=0) = 0 ;
120 virtual TObjArray* GetMatchingRecPointsData(const Int_t index, TObjArray* optDest=0) = 0 ;
121 virtual TObjArray* GetMatchingRawsData(const Int_t index, TObjArray* optDest=0) = 0 ;
122 virtual TObjArray* GetMatchingSDigitsData(const Int_t index, TObjArray* optDest=0) = 0 ;
124 virtual TH1* GetMatchingRawsHisto(Int_t index, Int_t trigId) = 0;
125 virtual TH1* GetMatchingDigitsHisto(Int_t index, Int_t trigId) = 0;
126 virtual TH1* GetMatchingSDigitsHisto(Int_t index, Int_t trigId) = 0;
127 virtual TH1* GetMatchingHitsHisto(Int_t index, Int_t trigId) = 0;
128 virtual TH1* GetMatchingRecPointsHisto(Int_t index, Int_t trigId) = 0;
129 virtual TH1* GetMatchingESDsHisto(Int_t index, Int_t trigId) = 0;
131 virtual TObjArray* GetMatchingRawsHistosSet(const Int_t* indexList, Int_t nHist,Int_t trigId) = 0;
132 virtual TObjArray* GetMatchingDigitsHistosSet(const Int_t* indexList, Int_t nHist,Int_t trigId) = 0;
133 virtual TObjArray* GetMatchingSDigitsHistosSet(const Int_t* indexList, Int_t nHist,Int_t trigId) = 0;
134 virtual TObjArray* GetMatchingHitsHistosSet(const Int_t* indexList, Int_t nHist,Int_t trigId) = 0;
135 virtual TObjArray* GetMatchingRecPointsHistosSet(const Int_t* indexList, Int_t nHist,Int_t trigId) = 0;
136 virtual TObjArray* GetMatchingESDsHistosSet(const Int_t* indexList, Int_t nHist,Int_t trigId) = 0;
138 virtual Int_t FillHitsData(Int_t index, double x) = 0;
139 virtual Int_t FillDigitsData(Int_t index, double x) = 0;
140 virtual Int_t FillSDigitsData(Int_t index, double x) = 0;
141 virtual Int_t FillRawsData(Int_t index, double x) = 0;
142 virtual Int_t FillRecPointsData(Int_t index, double x) = 0;
143 virtual Int_t FillESDsData(Int_t index, double x) = 0;
145 virtual Int_t FillHitsData(Int_t index, double x, double y) = 0;
146 virtual Int_t FillDigitsData(Int_t index, double x, double y) = 0;
147 virtual Int_t FillSDigitsData(Int_t index, double x, double y) = 0;
148 virtual Int_t FillRawsData(Int_t index, double x, double y) = 0;
149 virtual Int_t FillRecPointsData(Int_t index, double x, double y) = 0;
150 virtual Int_t FillESDsData(Int_t index, double x, double y) = 0;
152 virtual Int_t FillHitsData(Int_t index, double x, double y, double z) = 0;
153 virtual Int_t FillDigitsData(Int_t index, double x, double y, double z) = 0;
154 virtual Int_t FillSDigitsData(Int_t index, double x, double y, double z) = 0;
155 virtual Int_t FillRawsData(Int_t index, double x, double y, double z) = 0;
156 virtual Int_t FillRecPointsData(Int_t index, double x, double y, double z) = 0;
157 virtual Int_t FillESDsData(Int_t index, double x, double y, double z) = 0;
159 virtual Int_t SetHitsDataBinContent(Int_t index, int bin, double w) = 0;
160 virtual Int_t SetDigitsDataBinContent(Int_t index, int bin, double w) = 0;
161 virtual Int_t SetSDigitsDataBinContent(Int_t index, int bin, double w) = 0;
162 virtual Int_t SetRawsDataBinContent(Int_t index, int bin, double w) = 0;
163 virtual Int_t SetRecPointsDataBinContent(Int_t index, int bin, double w) = 0;
164 virtual Int_t SetESDsDataBinContent(Int_t index, int bin, double w) = 0;
166 virtual Int_t SetHitsDataBinContent(Int_t index, int binX, int binY, double w) = 0;
167 virtual Int_t SetDigitsDataBinContent(Int_t index, int binX, int binY, double w) = 0;
168 virtual Int_t SetSDigitsDataBinContent(Int_t index, int binX, int binY, double w) = 0;
169 virtual Int_t SetRawsDataBinContent(Int_t index, int binX, int binY, double w) = 0;
170 virtual Int_t SetRecPointsDataBinContent(Int_t index, int binX, int binY, double w) = 0;
171 virtual Int_t SetESDsDataBinContent(Int_t index, int binX, int binY, double w) = 0;
173 virtual Int_t SetHitsDataBinError(Int_t index, int bin, double err) = 0;
174 virtual Int_t SetDigitsDataBinError(Int_t index, int bin, double err) = 0;
175 virtual Int_t SetSDigitsDataBinError(Int_t index, int bin, double err) = 0;
176 virtual Int_t SetRawsDataBinError(Int_t index, int bin, double err) = 0;
177 virtual Int_t SetRecPointsDataBinError(Int_t index, int bin, double err) = 0;
178 virtual Int_t SetESDsDataBinError(Int_t index, int bin, double err) = 0;
180 virtual Int_t SetHitsDataBinError(Int_t index, int binX, int binY, double err) = 0;
181 virtual Int_t SetDigitsDataBinError(Int_t index, int binX, int binY, double err) = 0;
182 virtual Int_t SetSDigitsDataBinError(Int_t index, int binX, int binY, double err) = 0;
183 virtual Int_t SetRawsDataBinError(Int_t index, int binX, int binY, double err) = 0;
184 virtual Int_t SetRecPointsDataBinError(Int_t index, int binX, int binY, double err) = 0;
185 virtual Int_t SetESDsDataBinError(Int_t index, int binX, int binY, double err) = 0;
187 virtual Int_t ResetHitsData(Int_t index, Option_t *opt="") = 0;
188 virtual Int_t ResetDigitsData(Int_t index, Option_t *opt="") = 0;
189 virtual Int_t ResetSDigitsData(Int_t index, Option_t *opt="") = 0;
190 virtual Int_t ResetRawsData(Int_t index, Option_t *opt="") = 0;
191 virtual Int_t ResetRecPointsData(Int_t index, Option_t *opt="") = 0;
192 virtual Int_t ResetESDsData(Int_t index, Option_t *opt="") = 0;
194 virtual Int_t ResetStatsHitsData(Int_t index) = 0;
195 virtual Int_t ResetStatsDigitsData(Int_t index) = 0;
196 virtual Int_t ResetStatsSDigitsData(Int_t index) = 0;
197 virtual Int_t ResetStatsRawsData(Int_t index) = 0;
198 virtual Int_t ResetStatsRecPointsData(Int_t index) = 0;
199 virtual Int_t ResetStatsESDsData(Int_t index) = 0;
201 void ResetEvCountCycle(AliRecoParam::EventSpecie_t isp, AliQAv1::TASKINDEX_t task);
202 void ResetEvCountTotal(AliRecoParam::EventSpecie_t isp, AliQAv1::TASKINDEX_t task);
203 void ResetEvCountCycle(AliRecoParam::EventSpecie_t isp) {fEvCountCycle[AliRecoParam::AConvert(isp)].Reset();}
204 void ResetEvCountTotal(AliRecoParam::EventSpecie_t isp) {fEvCountTotal[AliRecoParam::AConvert(isp)].Reset();}
205 void ResetEvCountCycle() {for (int isp=AliRecoParam::kNSpecies;isp--;) ResetEvCountCycle(AliRecoParam::ConvertIndex(isp));}
206 void ResetEvCountTotal() {for (int isp=AliRecoParam::kNSpecies;isp--;) ResetEvCountTotal(AliRecoParam::ConvertIndex(isp));}
208 Int_t GetEvCountCycle(AliRecoParam::EventSpecie_t sp, AliQAv1::TASKINDEX_t task, Int_t trCl=-1) const;
209 Int_t GetEvCountTotal(AliRecoParam::EventSpecie_t sp, AliQAv1::TASKINDEX_t task, Int_t trCl=-1) const;
210 Int_t GetEvCountCycle(AliQAv1::TASKINDEX_t task,Int_t trCl=-1) const {return GetEvCountCycle(fEventSpecie,task,trCl);}
211 Int_t GetEvCountTotal(AliQAv1::TASKINDEX_t task,Int_t trCl=-1) const {return GetEvCountCycle(fEventSpecie,task,trCl);}
213 Int_t GetEvCountCycleRaws(Int_t trCl=-1) const {return GetEvCountCycle(AliQAv1::kRAWS,trCl);}
214 Int_t GetEvCountCycleHits(Int_t trCl=-1) const {return GetEvCountCycle(AliQAv1::kHITS,trCl);}
215 Int_t GetEvCountCycleSDigits(Int_t trCl=-1) const {return GetEvCountCycle(AliQAv1::kSDIGITS,trCl);}
216 Int_t GetEvCountCycleDigits(Int_t trCl=-1) const {return GetEvCountCycle(AliQAv1::kDIGITS,trCl);}
217 Int_t GetEvCountCycleRecPoints(Int_t trCl=-1) const {return GetEvCountCycle(AliQAv1::kRECPOINTS,trCl);}
218 Int_t GetEvCountCycleESDS(Int_t trCl=-1) const {return GetEvCountCycle(AliQAv1::kESDS,trCl);}
220 Int_t GetEvCountTotalRaws(Int_t trCl=-1) const {return GetEvCountTotal(AliQAv1::kRAWS,trCl);}
221 Int_t GetEvCountTotalHits(Int_t trCl=-1) const {return GetEvCountTotal(AliQAv1::kHITS,trCl);}
222 Int_t GetEvCountTotalSDigits(Int_t trCl=-1) const {return GetEvCountTotal(AliQAv1::kSDIGITS,trCl);}
223 Int_t GetEvCountTotalDigits(Int_t trCl=-1) const {return GetEvCountTotal(AliQAv1::kDIGITS,trCl);}
224 Int_t GetEvCountTotalRecPoints(Int_t trCl=-1) const {return GetEvCountTotal(AliQAv1::kRECPOINTS,trCl);}
225 Int_t GetEvCountTotalESDS(Int_t trCl=-1) const {return GetEvCountTotal(AliQAv1::kESDS,trCl);}
227 void IncEvCountCycle(AliQAv1::TASKINDEX_t task, Int_t diff=1);
228 void IncEvCountTotal(AliQAv1::TASKINDEX_t task, Int_t diff=1);
230 void IncEvCountCycleRaws(Int_t diff=1) {IncEvCountCycle(AliQAv1::kRAWS, diff);}
231 void IncEvCountCycleHits(Int_t diff=1) {IncEvCountCycle(AliQAv1::kHITS, diff);}
232 void IncEvCountCycleSDigits(Int_t diff=1) {IncEvCountCycle(AliQAv1::kSDIGITS, diff);}
233 void IncEvCountCycleDigits(Int_t diff=1) {IncEvCountCycle(AliQAv1::kDIGITS, diff);}
234 void IncEvCountCycleRecPoints(Int_t diff=1) {IncEvCountCycle(AliQAv1::kRECPOINTS, diff);}
235 void IncEvCountCycleTrackSegments(Int_t diff=1) {IncEvCountCycle(AliQAv1::kTRACKSEGMENTS, diff);}
236 void IncEvCountCycleRecParticles(Int_t diff=1) {IncEvCountCycle(AliQAv1::kRECPARTICLES, diff);}
237 void IncEvCountCycleESDs(Int_t diff=1) {IncEvCountCycle(AliQAv1::kESDS, diff);}
239 void IncEvCountTotalRaws(Int_t diff=1) {IncEvCountTotal(AliQAv1::kRAWS, diff);}
240 void IncEvCountTotalHits(Int_t diff=1) {IncEvCountTotal(AliQAv1::kHITS, diff);}
241 void IncEvCountTotalSDigits(Int_t diff=1) {IncEvCountTotal(AliQAv1::kSDIGITS, diff);}
242 void IncEvCountTotalDigits(Int_t diff=1) {IncEvCountTotal(AliQAv1::kDIGITS, diff);}
243 void IncEvCountTotalRecPoints(Int_t diff=1) {IncEvCountTotal(AliQAv1::kRECPOINTS, diff);}
244 void IncEvCountTotalTrackSegments(Int_t diff=1) {IncEvCountTotal(AliQAv1::kTRACKSEGMENTS, diff);}
245 void IncEvCountTotalRecParticles(Int_t diff=1) {IncEvCountTotal(AliQAv1::kRECPARTICLES, diff);}
246 void IncEvCountTotalESDs(Int_t diff=1) {IncEvCountTotal(AliQAv1::kESDS, diff);}
248 virtual void ClonePerTrigClass(AliQAv1::TASKINDEX_t task) = 0;
250 static Int_t SetEventTrigClasses(const char* triggers);
251 static const TObjArray& GetEventTrigClasses() {return fgEventTrigClasses;}
252 static TNamed* GetTrigClass(Int_t i) {return fgTrigClasses ? (TNamed*)fgTrigClasses->At(i) : 0;}
253 static const char* GetTrigClassName(Int_t i) {return fgTrigClasses ? (i<0||i>=GetNTrigClasses() ? "TriggerBlind":GetTrigClass(i)->GetName()) : 0;}
254 static TNamed* GetEventTrigClass(Int_t i) {return (TNamed*)fgEventTrigClasses.At(i);}
255 static Int_t GetNEventTrigClasses() {return fgEventTrigClasses.GetEntriesFast();}
256 static void ResetEventTrigClasses() {fgEventTrigClasses.Clear(); fgEventTrigClasses.SetUniqueID(0);}
257 static Int_t GetNTrigClasses() {return fgTrigClasses ? fgTrigClasses->GetEntriesFast() : 0;}
258 static Bool_t IsEventTriggerSet() {return fgEventTrigClasses.GetUniqueID()>0;}
259 static void SetCloningRequest(TObjArray* aliases, TObjArray* histos);
261 static TObjArray* GetDataOfTrigClass(TObjArray * arr, Int_t cloneID, TObjArray *dest=0);
262 static TObjArray* GetDataOfTrigClass(TObjArray ** list, Int_t specieIndex, int cloneID, TObjArray *dest);
264 static const char* GetTriggerPrefix() {return fgkTriggerPrefix;}
267 virtual void ClonePerTrigClassL(TObjArray ** list, AliQAv1::TASKINDEX_t task);
268 virtual Int_t ClonePerTrigClassA(TObjArray * list, const char* hnm, const char* triggers, Bool_t keepOriginal=kFALSE);
269 virtual Int_t ClonePerTrigClassH(Int_t index, TObjArray* list, TObjArray* trigArr, Bool_t keepOriginal=kFALSE);
271 Int_t Add2List(TH1 * hist, const Int_t index, TObjArray ** list, const Bool_t expert = kFALSE, const Bool_t image = kFALSE, const Bool_t saveForCorr = kFALSE) ;
272 TH1 * CloneMe(TH1 * hist, Int_t specie) const ;
273 virtual void DefaultEndOfDetectorCycle(AliQAv1::TASKINDEX_t task ) ;
274 TObject * GetData(TObjArray ** list, const Int_t index);
275 TH1* GetData(TObjArray ** list, const Int_t index, Int_t cloneID);
276 TObjArray* GetDataOfTrigClass(TObjArray ** list, Int_t cloneID, TObjArray *dest=0);
277 virtual void InitHits() = 0 ;
278 //virtual void InitRecParticles() = 0 ;
279 virtual void InitSDigits() = 0 ;
280 //virtual void InitTrackSegments() = 0 ;
281 virtual void MakeESDs(AliESDEvent * ) = 0 ;
282 virtual void MakeHits() = 0 ;
283 virtual void MakeHits(TTree * ) = 0 ;
284 virtual void MakeDigits() = 0 ;
285 virtual void MakeDigits(TTree * ) = 0 ;
286 //virtual void MakeRecParticles( ) = 0 ;
287 virtual void MakeRaws(AliRawReader *) = 0 ;
288 virtual void MakeRecPoints(TTree * ) = 0 ;
289 virtual void MakeSDigits() = 0 ;
290 virtual void MakeSDigits(TTree * ) = 0 ;
291 //virtual void MakeTrackSegments(TTree * ) = 0 ;
292 void ResetCycle() { fCurrentCycle++ ; fCycleCounter = 0 ; }
293 virtual void StartOfDetectorCycle() = 0 ;
295 TH1* GetMatchingHisto(TObjArray ** list, Int_t index, Int_t trigId);
296 TObjArray* GetMatchingHistosSet(TObjArray ** list, const Int_t* indexList, Int_t nHist, Int_t trigId);
297 TObjArray* GetMatchingHistos(TObjArray ** list, Int_t index, TObjArray* optDest=0);
298 Bool_t CheckCloningConsistency(TObjArray ** list, const Int_t* indexList, Int_t nHist, Bool_t checkTriggers=kFALSE);
299 Int_t FillData(TObjArray ** list, Int_t index, double x);
300 Int_t FillData(TObjArray ** list, Int_t index, double x, double y);
301 Int_t FillData(TObjArray ** list, Int_t index, double x, double y, double z);
302 Int_t SetDataBinContent(TObjArray ** list, Int_t index, int bin, double w);
303 Int_t SetDataBinContent(TObjArray ** list, Int_t index, int binX, int binY, double w);
304 Int_t SetDataBinError(TObjArray ** list, Int_t index, int bin, double err);
305 Int_t SetDataBinError(TObjArray ** list, Int_t index, int binX, int binY, double err);
306 Int_t ResetData(TObjArray ** list, Int_t index, Option_t* option = "");
307 Int_t ResetStatsData(TObjArray ** list, Int_t index);
309 TFile * fOutput ; //! output root file
310 TDirectory * fDetectorDir ; //! directory for the given detector in the file
311 TString fDetectorDirName ; //! detector directory name in the quality assurance data file
312 Int_t fCurrentCycle ; //! current cycle number
313 Int_t fCycle ; //! length (# events) of the QA data acquisition cycle
314 Int_t fCycleCounter ; //! cycle counter
315 Bool_t fWriteExpert ; //! flag to write or not the expert QA data
316 TList ** fParameterList ; //! list of QA data parameters
317 Int_t fRun ; //! run number
318 AliRecoParam::EventSpecie_t fEventSpecie ; //! event specie, see AliRecoParam
319 TClonesArray * fDigitsArray ; //! array to hold the sdigits
320 TArrayI fEvCountCycle[AliRecoParam::kNSpecies]; // cycle event counters per specie and per task and eventually per trigger class
321 TArrayI fEvCountTotal[AliRecoParam::kNSpecies]; // total event counters per specie and per task and eventually per trigger class
323 static TObjArray fgEventTrigClasses; // array of indices of fired trigger classes for current event (indices of fgTriggeClasses)
324 static TObjArray* fgCloningRequest; // set of histogram names and trigger aliases
325 static TObjArray* fgTrigClasses; // set of trigger_aliases and corresponding trigger names
326 static const Char_t* fgkTriggerPrefix; // special prefix to separate the trigger name from histo name
328 AliQADataMaker& operator = (const AliQADataMaker& /*qadm*/); // Not implemented
330 ClassDef(AliQADataMaker,5) // description
334 //____________________________________________________________________________
335 inline Bool_t AliQADataMaker::IsOrigHistoKept(Int_t index, TObjArray ** list) {
336 // check if the histogram was cloned and the original is kept
337 TObject* h = GetData(list,index); if (!h) return kFALSE;
338 return (!h->TestBit(AliQAv1::GetClonedBit())) || h->TestBit(AliQAv1::GetOrigHistoKeptBit());
341 //____________________________________________________________________________
342 inline Int_t AliQADataMaker::IsClonedPerTrigClass(Int_t index, TObjArray ** list)
344 // if the historgam was cloned per trigger, return number of clones, otherwise, return 0
345 TObject* obj = GetData(list, index);
346 if (!obj || !obj->TestBit(AliQAv1::GetClonedBit())) return 0;
347 return ((TObjArray*)obj)->GetEntriesFast();
350 //____________________________________________________________________________
351 inline Bool_t AliQADataMaker::MatchesToTriggers(UInt_t hpos) const
353 // check if the position hpos of clones TObjArray matches to one of event triggers classes
354 // if the event trigger was not set, every position is matching
355 if (!IsEventTriggerSet()) return kTRUE; // if triggers are not set, then this is a call from EndOfCycle
356 for (int itc=GetNEventTrigClasses();itc--;) if (fgEventTrigClasses.UncheckedAt(itc)->GetUniqueID()==hpos) return kTRUE;
360 #endif // AliQADataMaker_H