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 **************************************************************************/
17 ///////////////////////////////////////////////////////////////////////////////
19 // class for running the QA makers //
21 // AliQADataMakerSteer qas; //
22 // qas.Run(AliQA::kRAWS, rawROOTFileName); //
23 // qas.Run(AliQA::kHITS); //
24 // qas.Run(AliQA::kSDIGITS); //
25 // qas.Run(AliQA::kDIGITS); //
26 // qas.Run(AliQA::kRECPOINTS); //
27 // qas.Run(AliQA::kESDS); //
29 ///////////////////////////////////////////////////////////////////////////////
33 #include <TFileMerger.h>
34 #include <TPluginManager.h>
39 #include "AliCDBManager.h"
40 #include "AliCDBEntry.h"
42 #include "AliCDBMetaData.h"
43 #include "AliCodeTimer.h"
44 #include "AliCorrQADataMakerRec.h"
45 #include "AliDetectorRecoParam.h"
46 #include "AliESDEvent.h"
47 #include "AliGeomManager.h"
48 #include "AliGlobalQADataMaker.h"
49 #include "AliHeader.h"
51 #include "AliModule.h"
53 #include "AliQADataMakerRec.h"
54 #include "AliQADataMakerSim.h"
55 #include "AliQADataMakerSteer.h"
56 #include "AliRawReaderDate.h"
57 #include "AliRawReaderFile.h"
58 #include "AliRawReaderRoot.h"
60 #include "AliRunLoader.h"
62 ClassImp(AliQADataMakerSteer)
64 //_____________________________________________________________________________
65 AliQADataMakerSteer::AliQADataMakerSteer(char * mode, const char* gAliceFilename, const char * name, const char * title) :
73 fGAliceFileName(gAliceFilename),
77 fNumberOfEvents(999999),
81 fRawReaderDelete(kTRUE),
86 fMaxEvents = fNumberOfEvents ;
87 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
88 if (IsSelected(AliQA::GetDetName(iDet))) {
89 fLoader[iDet] = NULL ;
90 fQADataMaker[iDet] = NULL ;
91 fQACycles[iDet] = 999999 ;
92 fQAWriteExpert[iDet] = kFALSE ;
97 //_____________________________________________________________________________
98 AliQADataMakerSteer::AliQADataMakerSteer(const AliQADataMakerSteer & qas) :
100 fCurrentEvent(qas.fCurrentEvent),
102 fDetectors(qas.fDetectors),
103 fDetectorsW(qas.fDetectorsW),
106 fGAliceFileName(qas.fGAliceFileName),
107 fFirstEvent(qas.fFirstEvent),
108 fMaxEvents(qas.fMaxEvents),
110 fNumberOfEvents(qas.fNumberOfEvents),
112 fRunNumber(qas.fRunNumber),
114 fRawReaderDelete(kTRUE),
119 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
120 fLoader[iDet] = qas.fLoader[iDet] ;
121 fQADataMaker[iDet] = qas.fQADataMaker[iDet] ;
122 fQACycles[iDet] = qas.fQACycles[iDet] ;
123 fQAWriteExpert[iDet] = qas.fQAWriteExpert[iDet] ;
127 //_____________________________________________________________________________
128 AliQADataMakerSteer & AliQADataMakerSteer::operator = (const AliQADataMakerSteer & qas)
130 // assignment operator
131 this->~AliQADataMakerSteer() ;
132 new(this) AliQADataMakerSteer(qas) ;
136 //_____________________________________________________________________________
137 AliQADataMakerSteer::~AliQADataMakerSteer()
140 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
141 if (IsSelected(AliQA::GetDetName(iDet))) {
142 fLoader[iDet] = NULL;
143 if (fQADataMaker[iDet]) {
144 (fQADataMaker[iDet])->Finish() ;
145 delete fQADataMaker[iDet] ;
149 if (fRawReaderDelete) {
156 //_____________________________________________________________________________
157 Bool_t AliQADataMakerSteer::DoIt(const AliQA::TASKINDEX_t taskIndex)
159 // Runs all the QA data Maker for every detector
162 // Fill QA data in event loop
163 for (UInt_t iEvent = fFirstEvent ; iEvent < (UInt_t)fMaxEvents ; iEvent++) {
166 if ( iEvent%10 == 0 )
167 AliInfo(Form("processing event %d", iEvent));
168 if ( taskIndex == AliQA::kRAWS ) {
169 if ( !fRawReader->NextEvent() )
171 } else if ( taskIndex == AliQA::kESDS ) {
172 if ( fESDTree->GetEntry(iEvent) == 0 )
175 if ( fRunLoader->GetEvent(iEvent) != 0 )
178 // loop over active loaders
179 for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
180 if (IsSelected(AliQA::GetDetName(iDet))) {
181 AliQADataMaker * qadm = GetQADataMaker(iDet) ;
182 if (!qadm) continue; // This detector doesn't have any QA (for example, HLT)
183 if ( qadm->IsCycleDone() ) {
184 qadm->EndOfCycle(taskIndex) ;
186 TTree * data = NULL ;
187 AliLoader* loader = GetLoader(qadm->GetUniqueID());
189 case AliQA::kNULLTASKINDEX :
192 qadm->Exec(taskIndex, fRawReader) ;
197 data = loader->TreeH() ;
199 AliWarning(Form(" Hit Tree not found for %s", AliQA::GetDetName(iDet))) ;
203 qadm->Exec(taskIndex, data) ;
205 case AliQA::kSDIGITS :
207 loader->LoadSDigits() ;
208 data = loader->TreeS() ;
210 AliWarning(Form(" SDigit Tree not found for %s", AliQA::GetDetName(iDet))) ;
214 qadm->Exec(taskIndex, data) ;
216 case AliQA::kDIGITS :
218 loader->LoadDigits() ;
219 data = loader->TreeD() ;
221 AliWarning(Form(" Digit Tree not found for %s", AliQA::GetDetName(iDet))) ;
225 qadm->Exec(taskIndex, data) ;
227 case AliQA::kRECPOINTS :
229 loader->LoadRecPoints() ;
230 data = loader->TreeR() ;
232 AliWarning(Form("RecPoints not found for %s", AliQA::GetDetName(iDet))) ;
236 qadm->Exec(taskIndex, data) ;
238 case AliQA::kTRACKSEGMENTS :
240 case AliQA::kRECPARTICLES :
243 qadm->Exec(taskIndex, fESD) ;
245 case AliQA::kNTASKINDEX :
252 // Save QA data for all detectors
253 rv = Finish(taskIndex) ;
255 if ( taskIndex == AliQA::kRAWS )
256 fRawReader->RewindEvents() ;
261 //_____________________________________________________________________________
262 Bool_t AliQADataMakerSteer::Finish(const AliQA::TASKINDEX_t taskIndex)
264 // write output to file for all detectors
265 for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
266 if (IsSelected(AliQA::GetDetName(iDet))) {
267 AliQADataMaker * qadm = GetQADataMaker(iDet) ;
268 if (qadm) qadm->EndOfCycle(taskIndex) ;
274 //_____________________________________________________________________________
275 TObjArray * AliQADataMakerSteer::GetFromOCDB(AliQA::DETECTORINDEX_t det, AliQA::TASKINDEX_t task, const char * year) const
277 // Retrieve the list of QA data for a given detector and a given task
278 TObjArray * rv = NULL ;
279 if ( !strlen(AliQA::GetQARefStorage()) ) {
280 AliError("No storage defined, use AliQA::SetQARefStorage") ;
283 AliCDBManager* man = AliCDBManager::Instance() ;
284 if ( ! man->IsDefaultStorageSet() ) {
285 TString tmp(AliQA::GetQARefDefaultStorage()) ;
288 man->SetDefaultStorage(tmp.Data()) ;
289 man->SetSpecificStorage(Form("%s/*", AliQA::GetQAName()), AliQA::GetQARefStorage()) ;
291 TString detOCDBDir(Form("%s/%s/%s", AliQA::GetQAName(), AliQA::GetDetName((Int_t)det), AliQA::GetRefOCDBDirName())) ;
292 AliInfo(Form("Retrieving reference data from %s/%s for %s", AliQA::GetQARefStorage(), detOCDBDir.Data(), AliQA::GetTaskName(task).Data())) ;
293 AliCDBEntry* entry = man->Get(detOCDBDir.Data(), 0) ; //FIXME 0 --> Run Number
294 TList * listDetQAD = dynamic_cast<TList *>(entry->GetObject()) ;
296 rv = dynamic_cast<TObjArray *>(listDetQAD->FindObject(AliQA::GetTaskName(task))) ;
300 //_____________________________________________________________________________
301 AliLoader * AliQADataMakerSteer::GetLoader(Int_t iDet)
303 // get the loader for a detector
305 if ( !fRunLoader || iDet == AliQA::kCORR)
308 TString detName = AliQA::GetDetName(iDet) ;
309 fLoader[iDet] = fRunLoader->GetLoader(detName + "Loader");
311 return fLoader[iDet] ;
313 // load the QA data maker object
314 TPluginManager* pluginManager = gROOT->GetPluginManager() ;
315 TString loaderName = "Ali" + detName + "Loader" ;
317 AliLoader * loader = NULL ;
318 // first check if a plugin is defined for the quality assurance data maker
319 TPluginHandler* pluginHandler = pluginManager->FindHandler("AliLoader", detName) ;
320 // if not, add a plugin for it
321 if (!pluginHandler) {
322 AliDebug(1, Form("defining plugin for %s", loaderName.Data())) ;
323 TString libs = gSystem->GetLibraries() ;
324 if (libs.Contains("lib" + detName + "base.so") || (gSystem->Load("lib" + detName + "base.so") >= 0)) {
325 pluginManager->AddHandler("AliQADataMaker", detName, loaderName, detName + "loader", loaderName + "()") ;
327 pluginManager->AddHandler("AliLoader", detName, loaderName, detName, loaderName + "()") ;
329 pluginHandler = pluginManager->FindHandler("AliLoader", detName) ;
331 if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) {
332 loader = (AliLoader *) pluginHandler->ExecPlugin(0) ;
335 fLoader[iDet] = loader ;
339 //_____________________________________________________________________________
340 AliQADataMaker * AliQADataMakerSteer::GetQADataMaker(const Int_t iDet)
342 // get the quality assurance data maker for a detector
344 if (fQADataMaker[iDet])
345 return fQADataMaker[iDet] ;
347 AliQADataMaker * qadm = NULL ;
349 if (iDet == AliQA::kGLOBAL) { //Global QA
350 qadm = new AliGlobalQADataMaker();
351 qadm->SetName(AliQA::GetDetName(iDet));
352 qadm->SetUniqueID(iDet);
353 fQADataMaker[iDet] = qadm;
357 if (iDet == AliQA::kCORR) { //the data maker for correlations among detectors
358 qadm = new AliCorrQADataMakerRec(fQADataMaker) ;
359 qadm->SetName(AliQA::GetDetName(iDet));
360 qadm->SetUniqueID(iDet);
361 fQADataMaker[iDet] = qadm;
365 // load the QA data maker object
366 TPluginManager* pluginManager = gROOT->GetPluginManager() ;
367 TString detName = AliQA::GetDetName(iDet) ;
369 if (tmp.Contains("sim"))
370 tmp.ReplaceAll("s", "S") ;
371 else if (tmp.Contains("rec"))
372 tmp.ReplaceAll("r", "R") ;
374 TString qadmName = "Ali" + detName + "QADataMaker" + tmp ;
376 // first check if a plugin is defined for the quality assurance data maker
377 TPluginHandler* pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName) ;
378 // if not, add a plugin for it
379 if (!pluginHandler) {
380 AliDebug(1, Form("defining plugin for %s", qadmName.Data())) ;
381 TString libs = gSystem->GetLibraries() ;
382 if (libs.Contains("lib" + detName + fMode + ".so") || (gSystem->Load("lib" + detName + fMode + ".so") >= 0)) {
383 pluginManager->AddHandler("AliQADataMaker", detName, qadmName, detName + "qadm", qadmName + "()") ;
385 pluginManager->AddHandler("AliQADataMaker", detName, qadmName, detName, qadmName + "()") ;
387 pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName) ;
389 if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) {
390 qadm = (AliQADataMaker *) pluginHandler->ExecPlugin(0) ;
393 qadm->SetName(AliQA::GetDetName(iDet));
394 qadm->SetUniqueID(iDet);
395 fQADataMaker[iDet] = qadm ;
401 //_____________________________________________________________________________
402 void AliQADataMakerSteer::EndOfCycle(TObjArray * detArray)
404 // End of cycle QADataMakers
406 for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
407 if (IsSelected(AliQA::GetDetName(iDet))) {
408 AliQADataMaker * qadm = GetQADataMaker(iDet) ;
411 // skip non active detectors
413 AliModule* det = static_cast<AliModule*>(detArray->FindObject(AliQA::GetDetName(iDet))) ;
414 if (!det || !det->IsActive())
417 for (UInt_t taskIndex = 0; taskIndex < AliQA::kNTASKINDEX; taskIndex++) {
418 if ( fTasks.Contains(Form("%d", taskIndex)) )
419 qadm->EndOfCycle(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex))) ;
426 //_____________________________________________________________________________
427 void AliQADataMakerSteer::EndOfCycle(TString detectors)
429 // End of cycle QADataMakers
431 for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
432 if (IsSelected(AliQA::GetDetName(iDet))) {
433 AliQADataMaker * qadm = GetQADataMaker(iDet) ;
436 // skip non active detectors
437 if (!detectors.Contains(AliQA::GetDetName(iDet)))
439 for (UInt_t taskIndex = 0; taskIndex < AliQA::kNTASKINDEX; taskIndex++) {
440 if ( fTasks.Contains(Form("%d", taskIndex)) )
441 qadm->EndOfCycle(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex))) ;
448 //_____________________________________________________________________________
449 void AliQADataMakerSteer::Increment()
451 // Increments the cycle counter for all QA Data Makers
452 for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
453 if (IsSelected(AliQA::GetDetName(iDet))) {
454 AliQADataMaker * qadm = GetQADataMaker(iDet) ;
461 //_____________________________________________________________________________
462 Bool_t AliQADataMakerSteer::Init(const AliQA::TASKINDEX_t taskIndex, const char * input )
464 // Initialize the event source and QA data makers
466 //fTasks = AliQA::GetTaskName(taskIndex) ;
468 if (taskIndex == AliQA::kRAWS) {
470 fRawReader = AliRawReader::Create(input);
474 fRawReaderDelete = kTRUE ;
475 fRawReader->NextEvent() ;
476 fRunNumber = fRawReader->GetRunNumber() ;
477 AliCDBManager::Instance()->SetRun(fRunNumber) ;
478 fRawReader->RewindEvents();
479 fNumberOfEvents = 999999 ;
480 if ( fMaxEvents < 0 )
481 fMaxEvents = fNumberOfEvents ;
482 } else if (taskIndex == AliQA::kESDS) {
483 fTasks = AliQA::GetTaskName(AliQA::kESDS) ;
484 if (!gSystem->AccessPathName("AliESDs.root")) { // AliESDs.root exists
485 TFile * esdFile = TFile::Open("AliESDs.root") ;
486 fESDTree = dynamic_cast<TTree *> (esdFile->Get("esdTree")) ;
488 AliError("esdTree not found") ;
491 fESD = new AliESDEvent() ;
492 fESD->ReadFromTree(fESDTree) ;
493 fESDTree->GetEntry(0) ;
494 fRunNumber = fESD->GetRunNumber() ;
495 fNumberOfEvents = fESDTree->GetEntries() ;
496 if ( fMaxEvents < 0 )
497 fMaxEvents = fNumberOfEvents ;
500 AliError("AliESDs.root not found") ;
504 if ( !InitRunLoader() ) {
505 AliWarning("No Run Loader not found") ;
507 fNumberOfEvents = fRunLoader->GetNumberOfEvents() ;
508 if ( fMaxEvents < 0 )
509 fMaxEvents = fNumberOfEvents ;
514 TObjArray* detArray = NULL ;
515 if (fRunLoader) // check if RunLoader exists
516 if ( fRunLoader->GetAliRun() ) { // check if AliRun exists in gAlice.root
517 detArray = fRunLoader->GetAliRun()->Detectors() ;
518 fRunNumber = fRunLoader->GetHeader()->GetRun() ;
521 // Initialize all QA data makers for all detectors
522 fRunNumber = AliCDBManager::Instance()->GetRun() ;
523 if ( ! AliGeomManager::GetGeometry() )
524 AliGeomManager::LoadGeometry() ;
526 InitQADataMaker(fRunNumber, fRecoParam, detArray) ; //, fCycleSame, kTRUE, detArray) ;
530 //_____________________________________________________________________________
531 void AliQADataMakerSteer::InitQADataMaker(UInt_t run, const AliRecoParam & par, TObjArray * detArray)
533 // Initializes The QADataMaker for all active detectors and for all active tasks
535 for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
536 if (IsSelected(AliQA::GetDetName(iDet))) {
537 AliQADataMaker * qadm = GetQADataMaker(iDet) ;
538 if (fQAWriteExpert[iDet])
539 qadm->SetWriteExpert() ;
541 AliError(Form("AliQADataMaker not found for %s", AliQA::GetDetName(iDet))) ;
542 fDetectorsW.ReplaceAll(AliQA::GetDetName(iDet), "") ;
544 AliDebug(1, Form("Data Maker found for %s", qadm->GetName())) ;
545 // skip non active detectors
547 AliModule* det = static_cast<AliModule*>(detArray->FindObject(AliQA::GetDetName(iDet))) ;
548 if (!det || !det->IsActive())
551 // Set default reco params
552 qadm->SetRecoParam(par.GetDetRecoParam(iDet));
553 Bool_t sameCycle = kFALSE ;
554 for (UInt_t taskIndex = 0; taskIndex < AliQA::kNTASKINDEX; taskIndex++) {
555 if ( fTasks.Contains(Form("%d", taskIndex)) ) {
556 qadm->StartOfCycle(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex)), run, sameCycle) ;
557 qadm->Init(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex)), GetQACycles(qadm->GetUniqueID())) ;
567 //_____________________________________________________________________________
568 Bool_t AliQADataMakerSteer::InitRunLoader()
570 // get or create the run loader
574 if (!gSystem->AccessPathName(fGAliceFileName.Data())) { // galice.root exists
575 // load all base libraries to get the loader classes
576 TString libs = gSystem->GetLibraries() ;
577 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
578 if (!IsSelected(AliQA::GetDetName(iDet)))
580 TString detName = AliQA::GetDetName(iDet) ;
581 if (detName == "HLT")
583 if (libs.Contains("lib" + detName + "base.so"))
585 gSystem->Load("lib" + detName + "base.so");
587 fRunLoader = AliRunLoader::Open(fGAliceFileName.Data());
589 AliError(Form("no run loader found in file %s", fGAliceFileName.Data()));
592 fRunLoader->CdGAFile();
593 if (fRunLoader->LoadgAlice() == 0) {
594 gAlice = fRunLoader->GetAliRun();
598 AliError(Form("no gAlice object found in file %s", fGAliceFileName.Data()));
602 } else { // galice.root does not exist
603 AliError(Form("the file %s does not exist", fGAliceFileName.Data()));
609 fRunLoader->LoadHeader();
610 fRunNumber = fRunLoader->GetHeader()->GetRun() ;
615 //_____________________________________________________________________________
616 Bool_t AliQADataMakerSteer::IsSelected(const char * det)
618 // check whether detName is contained in detectors
619 // if yes, it is removed from detectors
622 const TString detName(det) ;
623 // always activates Correlation
624 if ( detName.Contains(AliQA::GetDetName(AliQA::kCORR))) {
627 // check if all detectors are selected
628 if (fDetectors.Contains("ALL")) {
631 } else if ((fDetectors.CompareTo(detName) == 0) ||
632 fDetectors.BeginsWith(detName+" ") ||
633 fDetectors.EndsWith(" "+detName) ||
634 fDetectors.Contains(" "+detName+" ")) {
641 //_____________________________________________________________________________
642 Bool_t AliQADataMakerSteer::Merge(const Int_t runNumber) const
644 // Merge data from all the cycles from all detectors in one single file per run
645 // Merge the QA results from all the data chunks in one run
646 Bool_t rv = MergeData(runNumber) ;
647 rv *= MergeResults(runNumber) ;
652 //_____________________________________________________________________________
653 Bool_t AliQADataMakerSteer::MergeData(const Int_t runNumber) const
655 // Merge all the cycles from all detectors in one single file per run
658 cmd = Form(".! ls *%s*.%d.root > tempo.txt", AliQA::GetQADataFileName(), runNumber) ;
660 cmd = Form(".! ls *%s*.*.root > tempo.txt", AliQA::GetQADataFileName()) ;
661 gROOT->ProcessLine(cmd.Data()) ;
662 ifstream in("tempo.txt") ;
663 const Int_t runMax = 10 ;
664 TString file[AliQA::kNDET*runMax] ;
671 AliInfo(Form("index = %d file = %s", index, (file[index]).Data())) ;
676 AliError(Form("run number %d not found", runNumber)) ;
681 TString outFileName(Form("Merged.%s.Data.%d.root",AliQA::GetQADataFileName(),runNumber));
682 merger.OutputFile(outFileName.Data()) ;
683 for (Int_t ifile = 0 ; ifile < index-1 ; ifile++) {
684 TString pattern(Form("%s.%d.", AliQA::GetQADataFileName(), runNumber));
685 TString tmp(file[ifile]) ;
686 if (tmp.Contains(pattern)) {
687 merger.AddFile(tmp) ;
694 //_____________________________________________________________________________
695 Bool_t AliQADataMakerSteer::MergeResults(const Int_t runNumber) const
697 // Merge the QA result from all the data chunks in a run
699 cmd = Form(".! ls %s*.root > tempo.txt", AliQA::GetQADataFileName()) ;
700 gROOT->ProcessLine(cmd.Data()) ;
701 ifstream in("tempo.txt") ;
702 const Int_t chunkMax = 100 ;
703 TString fileList[chunkMax] ;
708 in >> fileList[index] ;
711 AliInfo(Form("index = %d file = %s", index, (fileList[index].Data()))) ;
716 AliError("No QA Result File found") ;
721 TString outFileName(Form("Merged.%s.Result.%d.root", AliQA::GetQADataFileName(), runNumber));
722 merger.OutputFile(outFileName.Data()) ;
723 for (Int_t ifile = 0 ; ifile < index ; ifile++) {
724 TString file = fileList[ifile] ;
725 merger.AddFile(file) ;
732 //_____________________________________________________________________________
733 void AliQADataMakerSteer::Reset(const Bool_t sameCycle)
735 // Reset the default data members
737 for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
738 if (IsSelected(AliQA::GetDetName(iDet))) {
739 AliQADataMaker * qadm = GetQADataMaker(iDet);
743 if (fRawReaderDelete) {
748 fCycleSame = sameCycle ;
752 fNumberOfEvents = 999999 ;
755 //_____________________________________________________________________________
756 TString AliQADataMakerSteer::Run(const char * detectors, AliRawReader * rawReader, const Bool_t sameCycle)
758 //Runs all the QA data Maker for Raws only
760 fCycleSame = sameCycle ;
761 fRawReader = rawReader ;
762 fDetectors = detectors ;
763 fDetectorsW = detectors ;
765 AliCDBManager* man = AliCDBManager::Instance() ;
767 if ( man->GetRun() == -1 ) {// check if run number not set previously and set it from raw data
768 rawReader->NextEvent() ;
769 man->SetRun(fRawReader->GetRunNumber()) ;
770 rawReader->RewindEvents() ;
774 if ( !Init(AliQA::kRAWS) )
776 fRawReaderDelete = kFALSE ;
782 //_____________________________________________________________________________
783 TString AliQADataMakerSteer::Run(const char * detectors, const char * fileName, const Bool_t sameCycle)
785 //Runs all the QA data Maker for Raws only
787 fCycleSame = sameCycle ;
788 fDetectors = detectors ;
789 fDetectorsW = detectors ;
791 AliCDBManager* man = AliCDBManager::Instance() ;
792 if ( man->GetRun() == -1 ) { // check if run number not set previously and set it from AliRun
793 AliRunLoader * rl = AliRunLoader::Open("galice.root") ;
795 AliFatal("galice.root file not found in current directory") ;
799 if ( ! rl->GetAliRun() ) {
800 AliFatal("AliRun not found in galice.root") ;
803 man->SetRun(rl->GetHeader()->GetRun());
809 if ( !Init(AliQA::kRAWS, fileName) )
816 //_____________________________________________________________________________
817 TString AliQADataMakerSteer::Run(const char * detectors, const AliQA::TASKINDEX_t taskIndex, Bool_t const sameCycle, const char * fileName )
819 // Runs all the QA data Maker for every detector
821 fCycleSame = sameCycle ;
822 fDetectors = detectors ;
823 fDetectorsW = detectors ;
825 AliCDBManager* man = AliCDBManager::Instance() ;
826 if ( man->GetRun() == -1 ) { // check if run number not set previously and set it from AliRun
827 AliRunLoader * rl = AliRunLoader::Open("galice.root") ;
829 AliFatal("galice.root file not found in current directory") ;
833 if ( ! rl->GetAliRun() ) {
834 AliInfo("AliRun not found in galice.root") ;
837 man->SetRun(rl->GetHeader()->GetRun()) ;
843 if ( taskIndex == AliQA::kNULLTASKINDEX) {
844 for (UInt_t task = 0; task < AliQA::kNTASKINDEX; task++) {
845 if ( fTasks.Contains(Form("%d", task)) ) {
847 if ( !Init(AliQA::GetTaskIndex(AliQA::GetTaskName(task)), fileName) )
849 DoIt(AliQA::GetTaskIndex(AliQA::GetTaskName(task))) ;
854 if ( !Init(taskIndex, fileName) )
863 //_____________________________________________________________________________
864 void AliQADataMakerSteer::RunOneEvent(AliRawReader * rawReader)
866 //Runs all the QA data Maker for Raws only and on one event only (event loop done by calling method)
869 AliCodeTimerAuto("") ;
870 if (fTasks.Contains(Form("%d", AliQA::kRAWS))){
871 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
872 if (!IsSelected(AliQA::GetDetName(iDet)))
874 AliQADataMaker *qadm = GetQADataMaker(iDet);
877 if ( qadm->IsCycleDone() ) {
880 AliCodeTimerStart(Form("running RAW quality assurance data maker for %s", AliQA::GetDetName(iDet)));
881 qadm->Exec(AliQA::kRAWS, rawReader) ;
882 AliCodeTimerStop(Form("running RAW quality assurance data maker for %s", AliQA::GetDetName(iDet)));
887 //_____________________________________________________________________________
888 void AliQADataMakerSteer::RunOneEvent(AliESDEvent *& esd)
890 //Runs all the QA data Maker for ESDs only and on one event only (event loop done by calling method)
892 AliCodeTimerAuto("") ;
893 if (fTasks.Contains(Form("%d", AliQA::kESDS))) {
894 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
895 if (!IsSelected(AliQA::GetDetName(iDet)))
897 AliQADataMaker *qadm = GetQADataMaker(iDet);
900 if ( qadm->IsCycleDone() ) {
903 AliCodeTimerStart(Form("running ESD quality assurance data maker for %s", AliQA::GetDetName(iDet)));
904 qadm->Exec(AliQA::kESDS, esd) ;
905 AliCodeTimerStop(Form("running ESD quality assurance data maker for %s", AliQA::GetDetName(iDet)));
910 //_____________________________________________________________________________
911 void AliQADataMakerSteer::RunOneEventInOneDetector(Int_t det, TTree * tree)
913 // Runs all the QA data Maker for ESDs only and on one event only (event loop done by calling method)
914 AliCodeTimerAuto("") ;
915 if (fTasks.Contains(Form("%d", AliQA::kRECPOINTS))) {
916 if (IsSelected(AliQA::GetDetName(det))) {
917 AliQADataMaker *qadm = GetQADataMaker(det);
919 if ( qadm->IsCycleDone() ) {
922 AliCodeTimerStart(Form("running RecPoints quality assurance data maker for %s", AliQA::GetDetName(det)));
923 qadm->Exec(AliQA::kRECPOINTS, tree) ;
924 AliCodeTimerStop(Form("running RecPoints quality assurance data maker for %s", AliQA::GetDetName(det)));
930 //_____________________________________________________________________________
931 Bool_t AliQADataMakerSteer::Save2OCDB(const Int_t runNumber, const char * year, const char * detectors) const
933 // take the locasl QA data merge into a single file and save in OCDB
935 TString tmp(AliQA::GetQARefStorage()) ;
936 if ( tmp.IsNull() ) {
937 AliError("No storage defined, use AliQA::SetQARefStorage") ;
940 if ( !(tmp.Contains(AliQA::GetLabLocalOCDB()) || tmp.Contains(AliQA::GetLabAliEnOCDB())) ) {
941 AliError(Form("%s is a wrong storage, use %s or %s", AliQA::GetQARefStorage(), AliQA::GetLabLocalOCDB().Data(), AliQA::GetLabAliEnOCDB().Data())) ;
944 TString sdet(detectors) ;
947 if ( sdet.Contains("ALL") ) {
948 rv = Merge(runNumber) ;
951 TString inputFileName(Form("Merged.%s.Data.%d.root", AliQA::GetQADataFileName(), runNumber)) ;
952 inputFile = TFile::Open(inputFileName.Data()) ;
953 rv = SaveIt2OCDB(runNumber, inputFile, year) ;
955 for (Int_t index = 0; index < AliQA::kNDET; index++) {
956 if (sdet.Contains(AliQA::GetDetName(index))) {
957 TString inputFileName(Form("%s.%s.%d.root", AliQA::GetDetName(index), AliQA::GetQADataFileName(), runNumber)) ;
958 inputFile = TFile::Open(inputFileName.Data()) ;
959 rv *= SaveIt2OCDB(runNumber, inputFile, year) ;
966 //_____________________________________________________________________________
967 Bool_t AliQADataMakerSteer::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile, const char * year) const
969 // reads the TH1 from file and adds it to appropriate list before saving to OCDB
971 AliInfo(Form("Saving TH1s in %s to %s", inputFile->GetName(), AliQA::GetQARefStorage())) ;
972 AliCDBManager* man = AliCDBManager::Instance() ;
973 if ( ! man->IsDefaultStorageSet() ) {
974 TString tmp( AliQA::GetQARefStorage() ) ;
975 if ( tmp.Contains(AliQA::GetLabLocalOCDB()) )
976 man->SetDefaultStorage(AliQA::GetQARefStorage()) ;
978 TString tmp1(AliQA::GetQARefDefaultStorage()) ;
980 tmp1.Append("?user=alidaq") ;
981 man->SetDefaultStorage(tmp1.Data()) ;
984 man->SetSpecificStorage("*", AliQA::GetQARefStorage()) ;
985 if(man->GetRun() < 0)
986 man->SetRun(runNumber);
989 mdr.SetResponsible("yves schutz");
991 for ( Int_t detIndex = 0 ; detIndex < AliQA::kNDET ; detIndex++) {
992 TDirectory * detDir = inputFile->GetDirectory(AliQA::GetDetName(detIndex)) ;
994 AliInfo(Form("Entering %s", detDir->GetName())) ;
995 TString detOCDBDir(Form("%s/%s/%s", AliQA::GetDetName(detIndex), AliQA::GetRefOCDBDirName(), AliQA::GetRefDataDirName())) ;
996 printf("SSSSSSSSSSSSSSSSSSSSS %s\n", detOCDBDir.Data()) ;
997 AliCDBId idr(detOCDBDir.Data(), runNumber, AliCDBRunRange::Infinity()) ;
998 TList * listDetQAD = new TList() ;
999 TString listName(Form("%s QA data Reference", AliQA::GetDetName(detIndex))) ;
1000 mdr.SetComment("HMPID QA stuff");
1001 listDetQAD->SetName(listName) ;
1002 TList * taskList = detDir->GetListOfKeys() ;
1003 TIter nextTask(taskList) ;
1005 while ( (taskKey = dynamic_cast<TKey*>(nextTask())) ) {
1006 TDirectory * taskDir = detDir->GetDirectory(taskKey->GetName()) ;
1007 AliInfo(Form("Saving %s", taskDir->GetName())) ;
1008 TObjArray * listTaskQAD = new TObjArray(100) ;
1009 listTaskQAD->SetName(taskKey->GetName()) ;
1010 listDetQAD->Add(listTaskQAD) ;
1011 TList * histList = taskDir->GetListOfKeys() ;
1012 TIter nextHist(histList) ;
1014 while ( (histKey = dynamic_cast<TKey*>(nextHist())) ) {
1015 TObject * odata = taskDir->Get(histKey->GetName()) ;
1017 AliError(Form("%s in %s/%s returns a NULL pointer !!", histKey->GetName(), detDir->GetName(), taskDir->GetName())) ;
1019 AliInfo(Form("Adding %s", histKey->GetName())) ;
1020 if ( odata->IsA()->InheritsFrom("TH1") ) {
1021 AliInfo(Form("Adding %s", histKey->GetName())) ;
1022 TH1 * hdata = static_cast<TH1*>(odata) ;
1023 listTaskQAD->Add(hdata) ;
1028 man->Put(listDetQAD, idr, &mdr) ;
1034 //_____________________________________________________________________________
1035 void AliQADataMakerSteer::SetRecoParam(const char* detector, AliDetectorRecoParam *par)
1037 // Set custom reconstruction parameters for a given detector
1038 // Single set of parameters for all the events
1039 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
1040 if(!strcmp(detector, AliQA::GetDetName(iDet))) {
1041 par->SetAsDefault();
1042 fRecoParam.AddDetRecoParam(iDet,par);