1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
21 Produces the data needed to calculate the quality assurance.
22 All data must be mergeable objects.
23 Y. Schutz CERN July 2007
26 // --- ROOT system ---
31 #include <TClonesArray.h>
33 // --- Standard library ---
35 // --- AliRoot header files ---
37 #include "AliQualAssDataMaker.h"
38 #include "AliESDEvent.h"
39 #include "AliRawReader.h"
41 ClassImp(AliQualAssDataMaker)
43 TString AliQualAssDataMaker::fDetectorDirName("") ;
46 //____________________________________________________________________________
47 AliQualAssDataMaker::AliQualAssDataMaker(const char * name, const char * title) :
55 fRecPointsQAList(0x0),
63 fDetectorDirName = GetName() ;
66 //____________________________________________________________________________
67 AliQualAssDataMaker::AliQualAssDataMaker(const AliQualAssDataMaker& qadm) :
68 TNamed(qadm.GetName(), qadm.GetTitle()),
69 fOutput(qadm.fOutput),
70 fDetectorDir(qadm.fDetectorDir),
71 fDigitsQAList(qadm.fDigitsQAList),
72 fESDsQAList(qadm.fESDsQAList),
73 fHitsQAList(qadm.fHitsQAList),
74 fRawsQAList(qadm.fRecPointsQAList),
75 fRecPointsQAList(qadm.fRecPointsQAList),
76 fSDigitsQAList(qadm.fSDigitsQAList),
77 fCurrentCycle(qadm.fCurrentCycle),
79 fCycleCounter(qadm.fCycleCounter),
83 fDetectorDirName = GetName() ;
86 //__________________________________________________________________
87 AliQualAssDataMaker& AliQualAssDataMaker::operator = (const AliQualAssDataMaker& qadm )
90 this->~AliQualAssDataMaker();
91 new(this) AliQualAssDataMaker(qadm);
95 //____________________________________________________________________________
96 void AliQualAssDataMaker::EndOfCycle(AliQualAss::TASKINDEX task)
98 // Finishes a cycle of QA data acquistion
100 EndOfDetectorCycle() ;
101 TDirectory * subDir = fDetectorDir->GetDirectory(AliQualAss::GetTaskName(task)) ;
105 case AliQualAss::kRAWS:
107 fRawsQAList->Write() ;
110 case AliQualAss::kHITS:
112 fHitsQAList->Write() ;
115 case AliQualAss::kSDIGITS:
117 fSDigitsQAList->Write() ;
120 case AliQualAss::kDIGITS:
122 fDigitsQAList->Write() ;
125 case AliQualAss::kRECPOINTS:
127 fRecPointsQAList->Write() ;
130 case AliQualAss::kTRACKSEGMENTS:
133 case AliQualAss::kRECPARTICLES:
136 case AliQualAss::kESDS:
138 fESDsQAList->Write() ;
143 //____________________________________________________________________________
144 void AliQualAssDataMaker::Exec(AliQualAss::TASKINDEX task, TObject * data)
146 // creates the quality assurance data for the various tasks (Hits, SDigits, Digits, ESDs)
150 case AliQualAss::kRAWS:
152 AliInfo("Processing Raws QA") ;
153 AliRawReader * rawReader = dynamic_cast<AliRawReader *>(data) ;
155 MakeRaws(rawReader) ;
157 AliError("Wrong data type") ;
160 case AliQualAss::kHITS:
162 AliInfo("Processing Hits QA") ;
163 TClonesArray * hits = dynamic_cast<TClonesArray *>(data) ;
167 AliError("Wrong type of hits container") ;
170 case AliQualAss::kSDIGITS:
172 AliInfo("Processing SDigits QA") ;
173 TClonesArray * sdigits = dynamic_cast<TClonesArray *>(data) ;
175 MakeSDigits(sdigits) ;
177 AliError("Wrong type of sdigits container") ;
180 case AliQualAss::kDIGITS:
182 TClonesArray * digits = dynamic_cast<TClonesArray *>(data) ;
186 AliError("Wrong type of digits container") ;
189 case AliQualAss::kRECPOINTS:
191 AliInfo("Processing RecPoints QA") ;
192 TTree * recpoints = dynamic_cast<TTree *>(data) ;
194 MakeRecPoints(recpoints) ;
196 AliError("Wrong type of recpoints container") ;
199 case AliQualAss::kTRACKSEGMENTS:
200 AliInfo("Processing Track Segments QA: not existing anymore") ;
201 // TTree * ts = dynamic_cast<TTree *>(data) ;
203 // MakeTrackSegments(ts) ;
205 // AliError("Wrong type of track segments container") ;
208 case AliQualAss::kRECPARTICLES:
209 AliInfo("Processing RecParticles QA: not existing anymore") ;
210 // TTree * recpar = dynamic_cast<TTree *>(data) ;
212 // MakeRecParticles(recpar) ;
214 // AliError("Wrong type of recparticles container") ;
217 case AliQualAss::kESDS:
219 AliInfo("Processing ESDs QA") ;
220 AliESDEvent * esd = dynamic_cast<AliESDEvent *>(data) ;
224 AliError("Wrong type of esd container") ;
230 //____________________________________________________________________________
231 void AliQualAssDataMaker::Finish(AliQualAss::TASKINDEX) const
233 // write to the output File
237 //____________________________________________________________________________
238 TList * AliQualAssDataMaker::Init(AliQualAss::TASKINDEX task, Int_t run, Int_t cycles)
240 // general intialisation
247 case AliQualAss::kRAWS:
249 fRawsQAList = new TList() ;
254 case AliQualAss::kHITS:
256 fHitsQAList = new TList() ;
261 case AliQualAss::kSDIGITS:
263 fSDigitsQAList = new TList() ;
265 return fSDigitsQAList ;
268 case AliQualAss::kDIGITS:
270 fDigitsQAList = new TList();
272 return fDigitsQAList ;
275 case AliQualAss::kRECPOINTS:
277 fRecPointsQAList = new TList ;
279 return fRecPointsQAList ;
282 case AliQualAss::kTRACKSEGMENTS:
283 // InitTrackSegments() ;
286 case AliQualAss::kRECPARTICLES:
287 // InitRecParticles() ;
290 case AliQualAss::kESDS:
292 fESDsQAList = new TList() ;
294 return fRecPointsQAList ;
301 //____________________________________________________________________________
302 void AliQualAssDataMaker::StartOfCycle(AliQualAss::TASKINDEX task, Option_t * sameCycle)
304 // Finishes a cycle of QA data acquistion
306 if ( (strcmp(sameCycle, "new") == 0) ) {
310 fOutput = AliQualAss::GetQADMOutFile(GetName(), fRun, fCurrentCycle) ;
313 AliInfo(Form(" Run %d Cycle %d task %s file %s",
314 fRun, fCurrentCycle, AliQualAss::GetTaskName(task).Data(), fOutput->GetName() )) ;
316 fDetectorDir = fOutput->GetDirectory(GetDetectorDirName()) ;
318 fDetectorDir = fOutput->mkdir(GetDetectorDirName()) ;
320 TDirectory * subDir = fDetectorDir->GetDirectory(AliQualAss::GetTaskName(task)) ;
322 subDir = fDetectorDir->mkdir(AliQualAss::GetTaskName(task)) ;
328 case AliQualAss::kRAWS:
332 case AliQualAss::kHITS:
336 case AliQualAss::kSDIGITS:
337 list = fSDigitsQAList ;
340 case AliQualAss::kDIGITS:
341 list = fDigitsQAList ;
344 case AliQualAss::kRECPOINTS:
345 list = fRecPointsQAList ;
348 case AliQualAss::kTRACKSEGMENTS:
351 case AliQualAss::kRECPARTICLES:
354 case AliQualAss::kESDS:
361 while ( (h = dynamic_cast<TH1 *>(next())) )
364 StartOfDetectorCycle() ;