X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliQAManager.cxx;h=0bf8d0a466c06b773aa3ba8b83c3bff36c1a6588;hb=bf1afebd33926062453ac4fea1352210fad626f2;hp=2ee43d93baa9131f02c204521d354b3f68b41e8f;hpb=bededc305b040a9df1fabd49905d07e84b98e3ad;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliQAManager.cxx b/STEER/AliQAManager.cxx index 2ee43d93baa..0bf8d0a466c 100644 --- a/STEER/AliQAManager.cxx +++ b/STEER/AliQAManager.cxx @@ -18,16 +18,17 @@ // // // class for running the QA makers // // // -// AliQAManager qas; // -// qas.Run(AliQA::kRAWS, rawROOTFileName); // -// qas.Run(AliQA::kHITS); // -// qas.Run(AliQA::kSDIGITS); // -// qas.Run(AliQA::kDIGITS); // -// qas.Run(AliQA::kRECPOINTS); // -// qas.Run(AliQA::kESDS); // +// AliQAManager qas; // +// qas.Run(AliQAv1::kRAWS, rawROOTFileName); // +// qas.Run(AliQAv1::kHITS); // +// qas.Run(AliQAv1::kSDIGITS); // +// qas.Run(AliQAv1::kDIGITS); // +// qas.Run(AliQAv1::kRECPOINTS); // +// qas.Run(AliQAv1::kESDS); // // // /////////////////////////////////////////////////////////////////////////////// +#include #include #include #include @@ -38,6 +39,7 @@ #include #include #include +#include #include "AliCDBManager.h" #include "AliCDBEntry.h" @@ -52,7 +54,9 @@ #include "AliHeader.h" #include "AliLog.h" #include "AliModule.h" -#include "AliQA.h" +#include "AliQAv1.h" +#include "AliQAChecker.h" +#include "AliQACheckerBase.h" #include "AliQADataMakerRec.h" #include "AliQADataMakerSim.h" #include "AliQAManager.h" @@ -85,23 +89,25 @@ AliQAManager::AliQAManager() : fRawReader(NULL), fRawReaderDelete(kTRUE), fRunLoader(NULL), - fTasks(""), - fEventSpecie(AliRecoParam::kDefault) + fTasks(""), + fEventSpecie(AliRecoParam::kDefault), + fPrintImage(kTRUE), + fSaveData(kTRUE) { // default ctor fMaxEvents = fNumberOfEvents ; for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) { - if (IsSelected(AliQA::GetDetName(iDet))) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { fLoader[iDet] = NULL ; fQADataMaker[iDet] = NULL ; fQACycles[iDet] = 999999 ; - fQAWriteExpert[iDet] = kTRUE ; } } + SetWriteExpert() ; } //_____________________________________________________________________________ -AliQAManager::AliQAManager(const Char_t * mode, const Char_t* gAliceFilename) : +AliQAManager::AliQAManager(AliQAv1::MODE_t mode, const Char_t* gAliceFilename) : AliCDBManager(), fCurrentEvent(0), fCycleSame(kFALSE), @@ -112,7 +118,7 @@ AliQAManager::AliQAManager(const Char_t * mode, const Char_t* gAliceFilename) : fGAliceFileName(gAliceFilename), fFirstEvent(0), fMaxEvents(0), - fMode(mode), + fMode(AliQAv1::GetModeName(mode)), fNumberOfEvents(999999), fRecoParam(), fRunNumber(0), @@ -120,18 +126,20 @@ AliQAManager::AliQAManager(const Char_t * mode, const Char_t* gAliceFilename) : fRawReaderDelete(kTRUE), fRunLoader(NULL), fTasks(""), - fEventSpecie(AliRecoParam::kDefault) + fEventSpecie(AliRecoParam::kDefault), + fPrintImage(kTRUE), + fSaveData(kTRUE) { // default ctor fMaxEvents = fNumberOfEvents ; for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) { - if (IsSelected(AliQA::GetDetName(iDet))) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { fLoader[iDet] = NULL ; fQADataMaker[iDet] = NULL ; fQACycles[iDet] = 999999 ; - fQAWriteExpert[iDet] = kTRUE ; } } + SetWriteExpert() ; } //_____________________________________________________________________________ @@ -153,8 +161,11 @@ AliQAManager::AliQAManager(const AliQAManager & qas) : fRawReader(NULL), fRawReaderDelete(kTRUE), fRunLoader(NULL), - fTasks(qas.fTasks), - fEventSpecie(qas.fEventSpecie) + fTasks(qas.fTasks), + fEventSpecie(qas.fEventSpecie), + fPrintImage(qas.fPrintImage), + fSaveData(qas.fSaveData) + { // cpy ctor for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) { @@ -179,7 +190,7 @@ AliQAManager::~AliQAManager() { // dtor for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) { - if (IsSelected(AliQA::GetDetName(iDet))) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { fLoader[iDet] = NULL; if (fQADataMaker[iDet]) { (fQADataMaker[iDet])->Finish() ; @@ -193,9 +204,8 @@ AliQAManager::~AliQAManager() fRawReader = NULL ; } } - //_____________________________________________________________________________ -Bool_t AliQAManager::DoIt(const AliQA::TASKINDEX_t taskIndex) +Bool_t AliQAManager::DoIt(const AliQAv1::TASKINDEX_t taskIndex) { // Runs all the QA data Maker for every detector @@ -205,11 +215,11 @@ Bool_t AliQAManager::DoIt(const AliQA::TASKINDEX_t taskIndex) fCurrentEvent++ ; // Get the event if ( iEvent%10 == 0 ) - AliInfo(Form("processing event %d", iEvent)); - if ( taskIndex == AliQA::kRAWS ) { + AliDebug(AliQAv1::GetQADebugLevel(), Form("processing event %d", iEvent)); + if ( taskIndex == AliQAv1::kRAWS ) { if ( !fRawReader->NextEvent() ) break ; - } else if ( taskIndex == AliQA::kESDS ) { + } else if ( taskIndex == AliQAv1::kESDS ) { if ( fESDTree->GetEntry(iEvent) == 0 ) break ; } else { @@ -218,7 +228,7 @@ Bool_t AliQAManager::DoIt(const AliQA::TASKINDEX_t taskIndex) } // loop over active loaders for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { - if (IsSelected(AliQA::GetDetName(iDet))) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { AliQADataMaker * qadm = GetQADataMaker(iDet) ; if (!qadm) continue; // This detector doesn't have any QA (for example, HLT) if ( qadm->IsCycleDone() ) { @@ -227,84 +237,105 @@ Bool_t AliQAManager::DoIt(const AliQA::TASKINDEX_t taskIndex) TTree * data = NULL ; AliLoader* loader = GetLoader(qadm->GetUniqueID()); switch (taskIndex) { - case AliQA::kNULLTASKINDEX : + case AliQAv1::kNULLTASKINDEX : break ; - case AliQA::kRAWS : + case AliQAv1::kRAWS : qadm->Exec(taskIndex, fRawReader) ; break ; - case AliQA::kHITS : + case AliQAv1::kHITS : if( loader ) { loader->LoadHits() ; data = loader->TreeH() ; if ( ! data ) { - AliWarning(Form(" Hit Tree not found for %s", AliQA::GetDetName(iDet))) ; + AliWarning(Form(" Hit Tree not found for %s", AliQAv1::GetDetName(iDet))) ; break ; } + qadm->Exec(taskIndex, data) ; } - qadm->Exec(taskIndex, data) ; break ; - case AliQA::kSDIGITS : - if( loader ) { - loader->LoadSDigits() ; - data = loader->TreeS() ; - if ( ! data ) { - AliWarning(Form(" SDigit Tree not found for %s", AliQA::GetDetName(iDet))) ; - break ; - } + case AliQAv1::kSDIGITS : + { + + TString fileName(Form("%s.SDigits.root", AliQAv1::GetDetName(iDet))) ; + if (gSystem->FindFile("./", fileName)) { + if( loader ) { + loader->LoadSDigits() ; + data = loader->TreeS() ; + if ( ! data ) { + AliWarning(Form(" SDigit Tree not found for %s", AliQAv1::GetDetName(iDet))) ; + break ; + } + qadm->Exec(taskIndex, data) ; + } } - qadm->Exec(taskIndex, data) ; + } break; - case AliQA::kDIGITS : - if( loader ) { - loader->LoadDigits() ; - data = loader->TreeD() ; - if ( ! data ) { - AliWarning(Form(" Digit Tree not found for %s", AliQA::GetDetName(iDet))) ; - break ; - } - } - qadm->Exec(taskIndex, data) ; + case AliQAv1::kDIGITS : + if( loader ) { + loader->LoadDigits() ; + data = loader->TreeD() ; + if ( ! data ) { + AliWarning(Form(" Digit Tree not found for %s", AliQAv1::GetDetName(iDet))) ; + break ; + } + qadm->Exec(taskIndex, data) ; + } + break; + case AliQAv1::kDIGITSR : + if( loader ) { + loader->LoadDigits() ; + data = loader->TreeD() ; + if ( ! data ) { + AliWarning(Form(" Digit Tree not found for %s", AliQAv1::GetDetName(iDet))) ; + break ; + } + qadm->Exec(taskIndex, data) ; + } break; - case AliQA::kRECPOINTS : + case AliQAv1::kRECPOINTS : if( loader ) { loader->LoadRecPoints() ; data = loader->TreeR() ; if (!data) { - AliWarning(Form("RecPoints not found for %s", AliQA::GetDetName(iDet))) ; + AliWarning(Form("RecPoints not found for %s", AliQAv1::GetDetName(iDet))) ; break ; } + qadm->Exec(taskIndex, data) ; } - qadm->Exec(taskIndex, data) ; break; - case AliQA::kTRACKSEGMENTS : + case AliQAv1::kTRACKSEGMENTS : break; - case AliQA::kRECPARTICLES : + case AliQAv1::kRECPARTICLES : break; - case AliQA::kESDS : + case AliQAv1::kESDS : qadm->Exec(taskIndex, fESD) ; break; - case AliQA::kNTASKINDEX : + case AliQAv1::kNTASKINDEX : break; } //task switch } } // detector loop - Increment() ; + Increment(taskIndex) ; } // event loop // Save QA data for all detectors - rv = Finish(taskIndex) ; + + EndOfCycle() ; - if ( taskIndex == AliQA::kRAWS ) + if ( taskIndex == AliQAv1::kRAWS ) fRawReader->RewindEvents() ; return rv ; } //_____________________________________________________________________________ -Bool_t AliQAManager::Finish(const AliQA::TASKINDEX_t taskIndex) +Bool_t AliQAManager::Finish(const AliQAv1::TASKINDEX_t taskIndex) { // write output to file for all detectors + + AliQAChecker::Instance()->SetRunNumber(fRunNumber) ; + for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { - if (IsSelected(AliQA::GetDetName(iDet))) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { AliQADataMaker * qadm = GetQADataMaker(iDet) ; if (qadm) qadm->EndOfCycle(taskIndex) ; @@ -314,39 +345,50 @@ Bool_t AliQAManager::Finish(const AliQA::TASKINDEX_t taskIndex) } //_____________________________________________________________________________ -TObjArray * AliQAManager::GetFromOCDB(AliQA::DETECTORINDEX_t det, AliQA::TASKINDEX_t task, const char * year) const +TObjArray * AliQAManager::GetFromOCDB(AliQAv1::DETECTORINDEX_t det, AliQAv1::TASKINDEX_t task, const Char_t * year) const { // Retrieve the list of QA data for a given detector and a given task TObjArray * rv = NULL ; - if ( !strlen(AliQA::GetQARefStorage()) ) { - AliError("No storage defined, use AliQA::SetQARefStorage") ; + if ( !strlen(AliQAv1::GetQARefStorage()) ) { + AliError("No storage defined, use AliQAv1::SetQARefStorage") ; return NULL ; } if ( ! IsDefaultStorageSet() ) { - TString tmp(AliQA::GetQARefDefaultStorage()) ; + TString tmp(AliQAv1::GetQARefDefaultStorage()) ; tmp.Append(year) ; tmp.Append("/") ; Instance()->SetDefaultStorage(tmp.Data()) ; - Instance()->SetSpecificStorage(Form("%s/*", AliQA::GetQAName()), AliQA::GetQARefStorage()) ; + Instance()->SetSpecificStorage(Form("%s/*", AliQAv1::GetQAName()), AliQAv1::GetQARefStorage()) ; } - TString detOCDBDir(Form("%s/%s/%s", AliQA::GetQAName(), AliQA::GetDetName((Int_t)det), AliQA::GetRefOCDBDirName())) ; - AliInfo(Form("Retrieving reference data from %s/%s for %s", AliQA::GetQARefStorage(), detOCDBDir.Data(), AliQA::GetTaskName(task).Data())) ; + TString detOCDBDir(Form("%s/%s/%s", AliQAv1::GetQAName(), AliQAv1::GetDetName((Int_t)det), AliQAv1::GetRefOCDBDirName())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Retrieving reference data from %s/%s for %s", AliQAv1::GetQARefStorage(), detOCDBDir.Data(), AliQAv1::GetTaskName(task).Data())) ; AliCDBEntry* entry = QAManager()->Get(detOCDBDir.Data(), 0) ; //FIXME 0 --> Run Number - TList * listDetQAD = dynamic_cast(entry->GetObject()) ; + TList * listDetQAD = static_cast(entry->GetObject()) ; if ( listDetQAD ) - rv = dynamic_cast(listDetQAD->FindObject(AliQA::GetTaskName(task))) ; + rv = static_cast(listDetQAD->FindObject(AliQAv1::GetTaskName(task))) ; return rv ; } +//_____________________________________________________________________________ +TCanvas ** AliQAManager::GetImage(Char_t * detName) +{ + // retrieves QA Image for the given detector + TCanvas ** rv = NULL ; + Int_t detIndex = AliQAv1::GetDetIndex(detName) ; + AliQACheckerBase * qac = AliQAChecker::Instance()->GetDetQAChecker(detIndex) ; + rv = qac->GetImage() ; + return rv ; +} + //_____________________________________________________________________________ AliLoader * AliQAManager::GetLoader(Int_t iDet) { // get the loader for a detector - if ( !fRunLoader || iDet == AliQA::kCORR) + if ( !fRunLoader || iDet == AliQAv1::kCORR || iDet == AliQAv1::kGLOBAL ) return NULL ; - TString detName = AliQA::GetDetName(iDet) ; + TString detName = AliQAv1::GetDetName(iDet) ; fLoader[iDet] = fRunLoader->GetLoader(detName + "Loader"); if (fLoader[iDet]) return fLoader[iDet] ; @@ -360,7 +402,7 @@ AliLoader * AliQAManager::GetLoader(Int_t iDet) TPluginHandler* pluginHandler = pluginManager->FindHandler("AliLoader", detName) ; // if not, add a plugin for it if (!pluginHandler) { - AliDebug(1, Form("defining plugin for %s", loaderName.Data())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("defining plugin for %s", loaderName.Data())) ; TString libs = gSystem->GetLibraries() ; if (libs.Contains("lib" + detName + "base.so") || (gSystem->Load("lib" + detName + "base.so") >= 0)) { pluginManager->AddHandler("AliQADataMaker", detName, loaderName, detName + "loader", loaderName + "()") ; @@ -378,16 +420,16 @@ AliLoader * AliQAManager::GetLoader(Int_t iDet) } //_____________________________________________________________________________ -AliQA * AliQAManager::GetQA(UInt_t run, UInt_t evt) +AliQAv1 * AliQAManager::GetQA(UInt_t run, UInt_t evt) { // retrieves the QA object stored in a file named "Run{run}.Event{evt}_1.ESD.tag.root" - char * fileName = Form("Run%d.Event%d_1.ESD.tag.root", run, evt) ; + Char_t * fileName = Form("Run%d.Event%d_1.ESD.tag.root", run, evt) ; TFile * tagFile = TFile::Open(fileName) ; if ( !tagFile ) { AliError(Form("File %s not found", fileName)) ; return NULL ; } - TTree * tagTree = dynamic_cast(tagFile->Get("T")) ; + TTree * tagTree = static_cast(tagFile->Get("T")) ; if ( !tagTree ) { AliError(Form("Tree T not found in %s", fileName)) ; tagFile->Close() ; @@ -396,7 +438,7 @@ AliQA * AliQAManager::GetQA(UInt_t run, UInt_t evt) AliRunTag * tag = new AliRunTag ; tagTree->SetBranchAddress("AliTAG", &tag) ; tagTree->GetEntry(evt) ; - AliQA * qa = AliQA::Instance(tag->GetQALength(), tag->GetQA(), tag->GetESLength(), tag->GetEventSpecies()) ; + AliQAv1 * qa = AliQAv1::Instance(tag->GetQALength(), tag->GetQAArray(), tag->GetESLength(), tag->GetEventSpecies()) ; tagFile->Close() ; return qa ; } @@ -406,65 +448,73 @@ AliQADataMaker * AliQAManager::GetQADataMaker(const Int_t iDet) { // get the quality assurance data maker for a detector - if (fQADataMaker[iDet]) { - fQADataMaker[iDet]->SetEventSpecie(fEventSpecie) ; - return fQADataMaker[iDet] ; - } - - AliQADataMaker * qadm = NULL ; - - if (iDet == AliQA::kGLOBAL) { //Global QA + AliQADataMaker * qadm = fQADataMaker[iDet] ; + + if (qadm) { + + qadm->SetEventSpecie(fEventSpecie) ; + if ( qadm->GetRecoParam() ) + if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) + qadm->SetEventSpecie(qadm->GetRecoParam()->GetEventSpecie()) ; + + } else if (iDet == AliQAv1::kGLOBAL && strcmp(GetMode(), AliQAv1::GetModeName(AliQAv1::kRECMODE)) == 0) { //Global QA + qadm = new AliGlobalQADataMaker(); - qadm->SetName(AliQA::GetDetName(iDet)); + qadm->SetName(AliQAv1::GetDetName(iDet)); qadm->SetUniqueID(iDet); fQADataMaker[iDet] = qadm; - qadm->SetEventSpecie(fEventSpecie) ; - return qadm; - } + qadm->SetEventSpecie(fEventSpecie) ; + if ( qadm->GetRecoParam() ) + if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) + qadm->SetEventSpecie(qadm->GetRecoParam()->GetEventSpecie()) ; - if (iDet == AliQA::kCORR) { //the data maker for correlations among detectors + } else if (iDet == AliQAv1::kCORR && strcmp(GetMode(), AliQAv1::GetModeName(AliQAv1::kRECMODE)) == 0 ) { //the data maker for correlations among detectors qadm = new AliCorrQADataMakerRec(fQADataMaker) ; - qadm->SetName(AliQA::GetDetName(iDet)); + qadm->SetName(AliQAv1::GetDetName(iDet)); qadm->SetUniqueID(iDet); fQADataMaker[iDet] = qadm; - qadm->SetEventSpecie(fEventSpecie) ; - return qadm; - } - - // load the QA data maker object - TPluginManager* pluginManager = gROOT->GetPluginManager() ; - TString detName = AliQA::GetDetName(iDet) ; - TString tmp(fMode) ; - if (tmp.Contains("sim")) - tmp.ReplaceAll("s", "S") ; - else if (tmp.Contains("rec")) - tmp.ReplaceAll("r", "R") ; - - TString qadmName = "Ali" + detName + "QADataMaker" + tmp ; - - // first check if a plugin is defined for the quality assurance data maker - TPluginHandler* pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName) ; - // if not, add a plugin for it - if (!pluginHandler) { - AliDebug(1, Form("defining plugin for %s", qadmName.Data())) ; - TString libs = gSystem->GetLibraries() ; - if (libs.Contains("lib" + detName + fMode + ".so") || (gSystem->Load("lib" + detName + fMode + ".so") >= 0)) { - pluginManager->AddHandler("AliQADataMaker", detName, qadmName, detName + "qadm", qadmName + "()") ; - } else { - pluginManager->AddHandler("AliQADataMaker", detName, qadmName, detName, qadmName + "()") ; - } - pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName) ; - } - if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) { - qadm = (AliQADataMaker *) pluginHandler->ExecPlugin(0) ; - } - if (qadm) { - qadm->SetName(AliQA::GetDetName(iDet)); - qadm->SetUniqueID(iDet); - fQADataMaker[iDet] = qadm ; - qadm->SetEventSpecie(fEventSpecie) ; - } + qadm->SetEventSpecie(fEventSpecie) ; + if ( qadm->GetRecoParam() ) + if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) + qadm->SetEventSpecie(qadm->GetRecoParam()->GetEventSpecie()) ; + } else if ( iDet < AliQAv1::kGLOBAL ) { + TString smode(GetMode()) ; + if (smode.Contains(AliQAv1::GetModeName(AliQAv1::kQAMODE))) + smode = AliQAv1::GetModeName(AliQAv1::kRECMODE) ; + // load the QA data maker object + TPluginManager* pluginManager = gROOT->GetPluginManager() ; + TString detName = AliQAv1::GetDetName(iDet) ; + TString qadmName = "Ali" + detName + "QADataMaker" + smode ; + + // first check if a plugin is defined for the quality assurance data maker + TPluginHandler* pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName) ; + // if not, add a plugin for it + if (!pluginHandler) { + AliDebug(AliQAv1::GetQADebugLevel(), Form("defining plugin for %s", qadmName.Data())) ; + TString libs = gSystem->GetLibraries() ; + TString temp(smode) ; + temp.ToLower() ; + if (libs.Contains("lib" + detName + smode + ".so") || (gSystem->Load("lib" + detName + temp.Data() + ".so") >= 0)) { + pluginManager->AddHandler("AliQADataMaker", detName, qadmName, detName + "qadm", qadmName + "()") ; + } else { + pluginManager->AddHandler("AliQADataMaker", detName, qadmName, detName, qadmName + "()") ; + } + pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName) ; + } + if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) { + qadm = (AliQADataMaker *) pluginHandler->ExecPlugin(0) ; + } + if (qadm) { + qadm->SetName(AliQAv1::GetDetName(iDet)); + qadm->SetUniqueID(iDet); + fQADataMaker[iDet] = qadm ; + qadm->SetEventSpecie(fEventSpecie) ; + if ( qadm->GetRecoParam() ) + if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) + qadm->SetEventSpecie(qadm->GetRecoParam()->GetEventSpecie()) ; + } + } return qadm ; } @@ -473,24 +523,33 @@ void AliQAManager::EndOfCycle(TObjArray * detArray) { // End of cycle QADataMakers + AliQAChecker::Instance()->SetRunNumber(fRunNumber) ; + TCanvas fakeCanvas ; + + fakeCanvas.Print(Form("%s%s%d.%s[", AliQAv1::GetImageFileName(), GetMode(), fRunNumber, AliQAv1::GetImageFileFormat()), "ps") ; for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { - if (IsSelected(AliQA::GetDetName(iDet))) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { AliQADataMaker * qadm = GetQADataMaker(iDet) ; if (!qadm) continue ; // skip non active detectors if (detArray) { - AliModule* det = static_cast(detArray->FindObject(AliQA::GetDetName(iDet))) ; + AliModule* det = static_cast(detArray->FindObject(AliQAv1::GetDetName(iDet))) ; if (!det || !det->IsActive()) continue ; } - for (UInt_t taskIndex = 0; taskIndex < AliQA::kNTASKINDEX; taskIndex++) { - if ( fTasks.Contains(Form("%d", taskIndex)) ) - qadm->EndOfCycle(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex))) ; - } + AliQACheckerBase * qac = AliQAChecker::Instance()->GetDetQAChecker(iDet) ; + if (qac) + qac->SetPrintImage(fPrintImage) ; + for (UInt_t taskIndex = 0; taskIndex < AliQAv1::kNTASKINDEX; taskIndex++) { + if ( fTasks.Contains(Form("%d", taskIndex)) ) + qadm->EndOfCycle(AliQAv1::GetTaskIndex(AliQAv1::GetTaskName(taskIndex))) ; + } qadm->Finish(); } } + if (fPrintImage) + fakeCanvas.Print(Form("%s%s%d.%s]", AliQAv1::GetImageFileName(), GetMode(), fRunNumber, AliQAv1::GetImageFileFormat()), "ps"); } //_____________________________________________________________________________ @@ -498,29 +557,43 @@ void AliQAManager::EndOfCycle(TString detectors) { // End of cycle QADataMakers - for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { - if (IsSelected(AliQA::GetDetName(iDet))) { + AliQAChecker::Instance()->SetRunNumber(fRunNumber) ; + TCanvas fakeCanvas ; + if (fPrintImage) + fakeCanvas.Print(Form("%s%s%d.%s[", AliQAv1::GetImageFileName(), GetMode(), fRunNumber, AliQAv1::GetImageFileFormat()), "ps") ; + for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { AliQADataMaker * qadm = GetQADataMaker(iDet) ; if (!qadm) continue ; // skip non active detectors - if (!detectors.Contains(AliQA::GetDetName(iDet))) + if (!detectors.Contains(AliQAv1::GetDetName(iDet))) continue ; - for (UInt_t taskIndex = 0; taskIndex < AliQA::kNTASKINDEX; taskIndex++) { - if ( fTasks.Contains(Form("%d", taskIndex)) ) - qadm->EndOfCycle(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex))) ; - } + AliQACheckerBase * qac = AliQAChecker::Instance()->GetDetQAChecker(iDet) ; + if (qac) + qac->SetPrintImage(fPrintImage) ; + for (UInt_t taskIndex = 0; taskIndex < AliQAv1::kNTASKINDEX; taskIndex++) { + if ( fTasks.Contains(Form("%d", taskIndex)) ) + qadm->EndOfCycle(AliQAv1::GetTaskIndex(AliQAv1::GetTaskName(taskIndex))) ; + } qadm->Finish(); } } + if (fPrintImage) + fakeCanvas.Print(Form("%s%s%d.%s]", AliQAv1::GetImageFileName(), GetMode(), fRunNumber, AliQAv1::GetImageFileFormat()), "ps"); } //_____________________________________________________________________________ -void AliQAManager::Increment() +void AliQAManager::Increment(const AliQAv1::TASKINDEX_t taskIndex) { // Increments the cycle counter for all QA Data Makers + static AliQAv1::TASKINDEX_t currentTask = AliQAv1::kNTASKINDEX ; + if (currentTask == taskIndex) + return ; + else + currentTask = taskIndex ; for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { - if (IsSelected(AliQA::GetDetName(iDet))) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { AliQADataMaker * qadm = GetQADataMaker(iDet) ; if (qadm) qadm->Increment() ; @@ -529,13 +602,13 @@ void AliQAManager::Increment() } //_____________________________________________________________________________ -Bool_t AliQAManager::InitQA(const AliQA::TASKINDEX_t taskIndex, const char * input ) +Bool_t AliQAManager::InitQA(const AliQAv1::TASKINDEX_t taskIndex, const Char_t * input ) { // Initialize the event source and QA data makers fTasks += Form("%d", taskIndex) ; - if (taskIndex == AliQA::kRAWS) { + if (taskIndex == AliQAv1::kRAWS) { if (!fRawReader) { fRawReader = AliRawReader::Create(input); } @@ -549,11 +622,11 @@ Bool_t AliQAManager::InitQA(const AliQA::TASKINDEX_t taskIndex, const char * in fNumberOfEvents = 999999 ; if ( fMaxEvents < 0 ) fMaxEvents = fNumberOfEvents ; - } else if (taskIndex == AliQA::kESDS) { - fTasks = AliQA::GetTaskName(AliQA::kESDS) ; + } else if (taskIndex == AliQAv1::kESDS) { + fTasks = AliQAv1::GetTaskName(AliQAv1::kESDS) ; if (!gSystem->AccessPathName("AliESDs.root")) { // AliESDs.root exists TFile * esdFile = TFile::Open("AliESDs.root") ; - fESDTree = dynamic_cast (esdFile->Get("esdTree")) ; + fESDTree = static_cast (esdFile->Get("esdTree")) ; if ( !fESDTree ) { AliError("esdTree not found") ; return kFALSE ; @@ -594,6 +667,16 @@ Bool_t AliQAManager::InitQA(const AliQA::TASKINDEX_t taskIndex, const char * in AliGeomManager::LoadGeometry() ; InitQADataMaker(fRunNumber, detArray) ; //, fCycleSame, kTRUE, detArray) ; + if (fPrintImage) { + TCanvas fakeCanvas ; + TStopwatch timer ; + timer.Start() ; + while (timer.CpuTime()<5) { + timer.Continue(); + gSystem->ProcessEvents(); + } + fakeCanvas.Print(Form("%s%s%d.%s[", AliQAv1::GetImageFileName(), GetMode(), fRunNumber, AliQAv1::GetImageFileFormat()), "ps") ; + } return kTRUE ; } @@ -601,29 +684,29 @@ Bool_t AliQAManager::InitQA(const AliQA::TASKINDEX_t taskIndex, const char * in void AliQAManager::InitQADataMaker(UInt_t run, TObjArray * detArray) { // Initializes The QADataMaker for all active detectors and for all active tasks + fRunNumber = run ; for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { - if (IsSelected(AliQA::GetDetName(iDet))) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { AliQADataMaker * qadm = GetQADataMaker(iDet) ; if (!qadm) { - AliError(Form("AliQADataMaker not found for %s", AliQA::GetDetName(iDet))) ; - fDetectorsW.ReplaceAll(AliQA::GetDetName(iDet), "") ; + AliError(Form("AliQADataMaker not found for %s", AliQAv1::GetDetName(iDet))) ; + fDetectorsW.ReplaceAll(AliQAv1::GetDetName(iDet), "") ; } else { if (fQAWriteExpert[iDet]) qadm->SetWriteExpert() ; - AliDebug(1, Form("Data Maker found for %s", qadm->GetName())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Data Maker found for %s %d", qadm->GetName(), qadm->WriteExpert())) ; // skip non active detectors if (detArray) { - AliModule* det = static_cast(detArray->FindObject(AliQA::GetDetName(iDet))) ; + AliModule* det = static_cast(detArray->FindObject(AliQAv1::GetDetName(iDet))) ; if (!det || !det->IsActive()) continue ; } - if (fQAWriteExpert[iDet]) qadm->SetWriteExpert() ; // Set default reco params Bool_t sameCycle = kFALSE ; - for (UInt_t taskIndex = 0; taskIndex < AliQA::kNTASKINDEX; taskIndex++) { + for (UInt_t taskIndex = 0; taskIndex < AliQAv1::kNTASKINDEX; taskIndex++) { if ( fTasks.Contains(Form("%d", taskIndex)) ) { - qadm->Init(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex)), GetQACycles(qadm->GetUniqueID())) ; - qadm->StartOfCycle(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex)), run, sameCycle) ; + qadm->Init(AliQAv1::GetTaskIndex(AliQAv1::GetTaskName(taskIndex)), GetQACycles(qadm->GetUniqueID())) ; + qadm->StartOfCycle(AliQAv1::GetTaskIndex(AliQAv1::GetTaskName(taskIndex)), run, sameCycle) ; sameCycle = kTRUE ; } } @@ -644,9 +727,9 @@ Bool_t AliQAManager::InitRunLoader() // load all base libraries to get the loader classes TString libs = gSystem->GetLibraries() ; for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) { - if (!IsSelected(AliQA::GetDetName(iDet))) + if (!IsSelected(AliQAv1::GetDetName(iDet))) continue ; - TString detName = AliQA::GetDetName(iDet) ; + TString detName = AliQAv1::GetDetName(iDet) ; if (detName == "HLT") continue; if (libs.Contains("lib" + detName + "base.so")) @@ -682,7 +765,7 @@ Bool_t AliQAManager::InitRunLoader() } //_____________________________________________________________________________ -Bool_t AliQAManager::IsSelected(const char * det) +Bool_t AliQAManager::IsSelected(const Char_t * det) { // check whether detName is contained in detectors // if yes, it is removed from detectors @@ -690,7 +773,7 @@ Bool_t AliQAManager::IsSelected(const char * det) Bool_t rv = kFALSE; const TString detName(det) ; // always activates Correlation - if ( detName.Contains(AliQA::GetDetName(AliQA::kCORR))) { + if ( detName.Contains(AliQAv1::GetDetName(AliQAv1::kCORR)) || detName.Contains(AliQAv1::GetDetName(AliQAv1::kGLOBAL))) { rv = kTRUE ; } else { // check if all detectors are selected @@ -708,19 +791,20 @@ Bool_t AliQAManager::IsSelected(const char * det) } //_____________________________________________________________________________ -Bool_t AliQAManager::Merge(Int_t runNumber) const +Bool_t AliQAManager::Merge(Int_t runNumber, const char *fileName) const { // Merge data from all detectors from a given run in one single file - // Merge the QA results from all the data chunks in one run + // Merge the QA results from all the data chunks in one run + // The 'fileName' is name of the output file with merged QA data if ( runNumber == -1) runNumber = fRunNumber ; - Bool_t rv = MergeData(runNumber) ; + Bool_t rv = MergeData(runNumber,fileName) ; //rv *= MergeResults(runNumber) ; // not needed for the time being return rv ; } //______________________________________________________________________ -Bool_t AliQAManager::MergeXML(const char * collectionFile, const char * subFile, const char * outFile) +Bool_t AliQAManager::MergeXML(const Char_t * collectionFile, const Char_t * subFile, const Char_t * outFile) { // merges files listed in a xml collection // usage Merge(collection, outputFile)) @@ -739,16 +823,14 @@ Bool_t AliQAManager::MergeXML(const char * collectionFile, const char * subFile, return kFALSE ; // Open the file collection - printf("*** Create Collection ***\n"); - printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory()); - printf("*** Coll = |%s| \n",collectionFile); + AliInfoClass(Form("*** Create Collection ***\n*** Wk-Dir = |%s| \n*** Coll = |%s| \n",gSystem->WorkingDirectory(), collectionFile)); TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\")",collectionFile)); TGridResult* result = collection->GetGridResult("", 0, 0); Int_t index = 0 ; - const char * turl ; - TFileMerger merger ; + const Char_t * turl ; + TFileMerger merger(kFALSE) ; if (!outFile) { TString tempo(collectionFile) ; if ( subFile) @@ -760,13 +842,13 @@ Bool_t AliQAManager::MergeXML(const char * collectionFile, const char * subFile, merger.OutputFile(outFile) ; while ( (turl = result->GetKey(index, "turl")) ) { - char * file ; + Char_t * file ; if ( subFile ) file = Form("%s#%s", turl, subFile) ; else file = Form("%s", turl) ; - AliInfo(Form("%s\n", file)) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("%s\n", file)) ; merger.AddFile(file) ; index++ ; } @@ -774,24 +856,184 @@ Bool_t AliQAManager::MergeXML(const char * collectionFile, const char * subFile, if (index) merger.Merge() ; - AliInfo(Form("Files merged into %s\n", outFile)) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Files merged into %s\n", outFile)) ; rv = kFALSE; return rv ; } //_____________________________________________________________________________ -Bool_t AliQAManager::MergeData(const Int_t runNumber) const +void AliQAManager::MergeCustom() const +{ + // Custom Merge of QA data from all detectors for all runs in one single file + // search all the run numbers + // search all the run numbers + gROOT->ProcessLine(".! ls *QA*.root > QAtempo.txt") ; + TString QAfile ; + FILE * QAfiles = fopen("QAtempo.txt", "r") ; + Int_t index = 0 ; + TList srunList ; + TIter nextRun(&srunList) ; + TObjString * srun = NULL ; + Int_t loRun = 999999999 ; + Int_t hiRun = 0 ; + while ( QAfile.Gets(QAfiles) ) { + Bool_t runExist = kFALSE ; + TString srunNew(QAfile(QAfile.Index("QA.")+3, QAfile.Index(".root")-(QAfile.Index("QA.")+3))) ; + Int_t cuRun = srunNew.Atoi() ; + if (cuRun < loRun) + loRun = cuRun ; + if (cuRun > hiRun) + hiRun = cuRun ; + while ( (srun = static_cast (nextRun())) ) { + if ( cuRun == (srun->String()).Atoi() ) { + runExist = kTRUE ; + break ; + } + } + nextRun.Reset() ; + if ( ! runExist ) + srunList.Add(new TObjString(srunNew.Data())); + } + nextRun.Reset() ; + Int_t runNumber = 0 ; + TFile mergedFile(Form("Merged.%s.Data.root", AliQAv1::GetQADataFileName()), "RECREATE") ; + TH1I * hisRun = new TH1I("hLMR", "List of merged runs", hiRun-loRun+10, loRun, hiRun+10) ; + // create the structure into the merged file + for (Int_t iDet = 0; iDet < AliQAv1::kNDET ; iDet++) { + TDirectory * detDir = mergedFile.mkdir(AliQAv1::GetDetName(iDet)) ; + for (Int_t taskIndex = 0; taskIndex < AliQAv1::kNTASKINDEX; taskIndex++) { + detDir->cd() ; + TDirectory * taskDir = gDirectory->mkdir(AliQAv1::GetTaskName(taskIndex)) ; + for (Int_t es = 0 ; es < AliRecoParam::kNSpecies ; es++) { + taskDir->cd() ; + TDirectory * esDir = gDirectory->mkdir(AliRecoParam::GetEventSpecieName(es)) ; + esDir->cd() ; + gDirectory->mkdir(AliQAv1::GetExpert()) ; + } + } + } + while ( (srun = static_cast (nextRun())) ) { + runNumber = (srun->String()).Atoi() ; + hisRun->Fill(runNumber) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Merging run number %d", runNumber)) ; + // search all QA files for runNumber in the current directory + Char_t * fileList[AliQAv1::kNDET] ; + index = 0 ; + for (Int_t iDet = 0; iDet < AliQAv1::kNDET ; iDet++) { + Char_t * file = gSystem->Which(gSystem->WorkingDirectory(), Form("%s.%s.%d.root", AliQAv1::GetDetName(iDet), AliQAv1::GetQADataFileName(), runNumber)); + if (file) + fileList[index++] = file ; + } + if ( index == 0 ) { + AliError("No QA data file found\n") ; + return ; + } + for ( Int_t i = 0 ; i < index ; i++) { + TFile * inFile = TFile::Open(fileList[i]) ; + TList * listOfKeys =inFile->GetListOfKeys() ; + TIter nextkey(listOfKeys) ; + TObject * obj1 ; + TString dirName("") ; + while ( (obj1 = nextkey()) ) { + TDirectory * directoryDet = inFile->GetDirectory(obj1->GetName()) ; + if ( directoryDet ) { + AliDebug(AliQAv1::GetQADebugLevel(), Form("%s dir = %s", inFile->GetName(), directoryDet->GetName())) ; + dirName += Form("%s/", directoryDet->GetName() ) ; + directoryDet->cd() ; + TList * listOfTasks = directoryDet->GetListOfKeys() ; + TIter nextTask(listOfTasks) ; + TObject * obj2 ; + while ( (obj2 = nextTask()) ) { + TDirectory * directoryTask = directoryDet->GetDirectory(obj2->GetName()) ; + if ( directoryTask ) { + dirName += Form("%s", obj2->GetName()) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("%s", dirName.Data())) ; + directoryTask->cd() ; + TList * listOfEventSpecie = directoryTask->GetListOfKeys() ; + TIter nextEventSpecie(listOfEventSpecie) ; + TObject * obj3 ; + while ( (obj3 = nextEventSpecie()) ) { + TDirectory * directoryEventSpecie = directoryTask->GetDirectory(obj3->GetName()) ; + if ( directoryEventSpecie ) { + dirName += Form("/%s/", obj3->GetName()) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("%s\n", dirName.Data())) ; + directoryEventSpecie->cd() ; + // histograms are here + TDirectory * mergedDirectory = mergedFile.GetDirectory(dirName.Data()) ; + TList * listOfData = directoryEventSpecie->GetListOfKeys() ; + TIter nextData(listOfData) ; + TKey * key ; + while ( (key = static_cast(nextData())) ) { + TString className(key->GetClassName()) ; + if ( className.Contains("TH") || className.Contains("TProfile") ) { + TH1 * histIn = static_cast (key->ReadObj()) ; + TH1 * histOu = static_cast (mergedDirectory->FindObjectAny(histIn->GetName())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("%s %x %x\n", key->GetName(), histIn, histOu)) ; + mergedDirectory->cd() ; + if ( ! histOu ) { + histIn->Write() ; + } else { + histOu->Add(histIn) ; + histOu->Write(histOu->GetName(), kOverwrite) ; + } + } + else if ( className.Contains("TDirectoryFile") ) { + TDirectory * dirExpert = directoryEventSpecie->GetDirectory(key->GetName()) ; + dirExpert->cd() ; + TDirectory * mergedDirectoryExpert = mergedDirectory->GetDirectory(dirExpert->GetName()) ; + TList * listOfExpertData = dirExpert->GetListOfKeys() ; + TIter nextExpertData(listOfExpertData) ; + TKey * keykey ; + while ( (keykey = static_cast(nextExpertData())) ) { + TString classNameExpert(keykey->GetClassName()) ; + if (classNameExpert.Contains("TH")) { + TH1 * histInExpert = static_cast (keykey->ReadObj()) ; + TH1 * histOuExpert = static_cast (mergedDirectory->FindObjectAny(histInExpert->GetName())) ; + mergedDirectoryExpert->cd() ; + if ( ! histOuExpert ) { + histInExpert->Write() ; + } else { + histOuExpert->Add(histInExpert) ; + histOuExpert->Write(histOuExpert->GetName(), kOverwrite) ; + } + } + } + } else { + AliError(Form("No merge done for this object %s in %s", key->GetName(), dirName.Data())) ; + } + } + dirName.ReplaceAll(Form("/%s/",obj3->GetName()), "") ; + } + } + dirName.ReplaceAll(obj2->GetName(), "") ; + } + } + } + } + inFile->Close() ; + } + } + mergedFile.cd() ; + hisRun->Write() ; + mergedFile.Close() ; + srunList.Delete() ; +} + +//_____________________________________________________________________________ +Bool_t AliQAManager::MergeData(const Int_t runNumber, const char *fileName) const { // Merge QA data from all detectors for a given run in one single file - TFileMerger merger ; - TString outFileName = Form("Merged.%s.Data.root",AliQA::GetQADataFileName()) ; + TFileMerger merger(kFALSE) ; + TString outFileName = fileName; + if (outFileName.IsNull()) outFileName.Form("Merged.%s.Data.root",AliQAv1::GetQADataFileName()); merger.OutputFile(outFileName.Data()) ; for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { - char * file = gSystem->Which(gSystem->WorkingDirectory(), Form("%s.%s.%d.root", AliQA::GetDetName(iDet), AliQA::GetQADataFileName(), runNumber)); + Char_t * file = gSystem->Which(gSystem->WorkingDirectory(), Form("%s.%s.%d.root", AliQAv1::GetDetName(iDet), AliQAv1::GetQADataFileName(), runNumber)); if (file) - merger.AddFile(file) ; + merger.AddFile(file); + delete[] file; } merger.Merge() ; return kTRUE ; @@ -803,7 +1045,7 @@ Bool_t AliQAManager::MergeResults(const Int_t runNumber) const // Merge the QA result from all the data chunks in a run // to be revised whwn it will be used (see MergeData) TString cmd ; - cmd = Form(".! ls %s*.root > tempo.txt", AliQA::GetQADataFileName()) ; + cmd = Form(".! ls %s*.root > tempo.txt", AliQAv1::GetQADataFileName()) ; gROOT->ProcessLine(cmd.Data()) ; ifstream in("tempo.txt") ; const Int_t chunkMax = 100 ; @@ -815,7 +1057,7 @@ Bool_t AliQAManager::MergeResults(const Int_t runNumber) const in >> fileList[index] ; if ( !in.good() ) break ; - AliInfo(Form("index = %d file = %s", index, (fileList[index].Data()))) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("index = %d file = %s", index, (fileList[index].Data()))) ; index++ ; } @@ -827,9 +1069,9 @@ Bool_t AliQAManager::MergeResults(const Int_t runNumber) const TFileMerger merger ; TString outFileName ; if (runNumber != -1) - outFileName = Form("Merged.%s.Result.%d.root",AliQA::GetQADataFileName(),runNumber); + outFileName = Form("Merged.%s.Result.%d.root",AliQAv1::GetQADataFileName(),runNumber); else - outFileName = Form("Merged.%s.Result.root",AliQA::GetQADataFileName()); + outFileName = Form("Merged.%s.Result.root",AliQAv1::GetQADataFileName()); merger.OutputFile(outFileName.Data()) ; for (Int_t ifile = 0 ; ifile < index ; ifile++) { TString file = fileList[ifile] ; @@ -846,9 +1088,10 @@ void AliQAManager::Reset(const Bool_t sameCycle) // Reset the default data members for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { - if (IsSelected(AliQA::GetDetName(iDet))) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { AliQADataMaker * qadm = GetQADataMaker(iDet); - qadm->Reset(); + if (qadm) + qadm->Reset(); } } if (fRawReaderDelete) { @@ -864,11 +1107,34 @@ void AliQAManager::Reset(const Bool_t sameCycle) } //_____________________________________________________________________________ -AliQAManager * AliQAManager::QAManager(const Char_t * mode, TMap *entryCache, Int_t run) +void AliQAManager::ResetDetectors(AliQAv1::TASKINDEX_t task, AliQAv1::DETECTORINDEX_t det) +{ + //calls ResetDetector of specified or all detectors + UInt_t iDet = 0 ; + UInt_t iDetMax = fgkNDetectors ; + if ( det != AliQAv1::kNULLDET ) { + iDet = det ; + iDetMax = det+1 ; + } + + for (iDet = 0; iDet < iDetMax ; iDet++) { + if (IsSelected(AliQAv1::GetDetName(iDet))) { + AliQADataMaker * qadm = GetQADataMaker(iDet); + qadm->ResetDetector(task); + } + } +} + +//_____________________________________________________________________________ +AliQAManager * AliQAManager::QAManager(AliQAv1::MODE_t mode, TMap *entryCache, Int_t run) { // returns AliQAManager instance (singleton) if (!fgQAInstance) { + if ( (mode != AliQAv1::kSIMMODE) && (mode != AliQAv1::kRECMODE) && (mode != AliQAv1::kQAMODE) ) { + AliWarningClass("You must specify kSIMMODE or kRECMODE or kQAMODE") ; + return NULL ; + } fgQAInstance = new AliQAManager(mode) ; if (!entryCache) fgQAInstance->Init(); @@ -879,7 +1145,14 @@ AliQAManager * AliQAManager::QAManager(const Char_t * mode, TMap *entryCache, In } //_____________________________________________________________________________ -TString AliQAManager::Run(const char * detectors, AliRawReader * rawReader, const Bool_t sameCycle) +AliQAManager * AliQAManager::QAManager(AliQAv1::TASKINDEX_t task) +{ + // returns AliQAManager instance (singleton) + return QAManager(AliQAv1::Mode(task)) ; +} + +//_____________________________________________________________________________ +TString AliQAManager::Run(const Char_t * detectors, AliRawReader * rawReader, const Bool_t sameCycle) { //Runs all the QA data Maker for Raws only @@ -897,16 +1170,16 @@ TString AliQAManager::Run(const char * detectors, AliRawReader * rawReader, cons } if (!fCycleSame) - if ( !InitQA(AliQA::kRAWS) ) - return kFALSE ; + if ( !InitQA(AliQAv1::kRAWS) ) + return "" ; fRawReaderDelete = kFALSE ; - DoIt(AliQA::kRAWS) ; + DoIt(AliQAv1::kRAWS) ; return fDetectorsW ; } //_____________________________________________________________________________ -TString AliQAManager::Run(const char * detectors, const char * fileName, const Bool_t sameCycle) +TString AliQAManager::Run(const Char_t * detectors, const Char_t * fileName, const Bool_t sameCycle) { //Runs all the QA data Maker for Raws only @@ -932,15 +1205,15 @@ TString AliQAManager::Run(const char * detectors, const char * fileName, const B } if (!fCycleSame) - if ( !InitQA(AliQA::kRAWS, fileName) ) - return kFALSE ; + if ( !InitQA(AliQAv1::kRAWS, fileName) ) + return "" ; - DoIt(AliQA::kRAWS) ; + DoIt(AliQAv1::kRAWS) ; return fDetectorsW ; } //_____________________________________________________________________________ -TString AliQAManager::Run(const char * detectors, const AliQA::TASKINDEX_t taskIndex, Bool_t const sameCycle, const char * fileName ) +TString AliQAManager::Run(const Char_t * detectors, const AliQAv1::TASKINDEX_t taskIndex, Bool_t const sameCycle, const Char_t * fileName ) { // Runs all the QA data Maker for every detector @@ -957,33 +1230,29 @@ TString AliQAManager::Run(const char * detectors, const AliQA::TASKINDEX_t taskI rl->CdGAFile() ; rl->LoadgAlice() ; if ( ! rl->GetAliRun() ) { - AliInfo("AliRun not found in galice.root") ; + AliDebug(AliQAv1::GetQADebugLevel(), "AliRun not found in galice.root") ; } else { rl->LoadHeader() ; man->SetRun(rl->GetHeader()->GetRun()) ; } } } - - - if ( taskIndex == AliQA::kNULLTASKINDEX) { - for (UInt_t task = 0; task < AliQA::kNTASKINDEX; task++) { + if ( taskIndex == AliQAv1::kNULLTASKINDEX) { + for (UInt_t task = 0; task < AliQAv1::kNTASKINDEX; task++) { if ( fTasks.Contains(Form("%d", task)) ) { if (!fCycleSame) - if ( !InitQA(AliQA::GetTaskIndex(AliQA::GetTaskName(task)), fileName) ) - return kFALSE ; - DoIt(AliQA::GetTaskIndex(AliQA::GetTaskName(task))) ; + if ( !InitQA(AliQAv1::GetTaskIndex(AliQAv1::GetTaskName(task)), fileName) ) + return "" ; + DoIt(AliQAv1::GetTaskIndex(AliQAv1::GetTaskName(task))) ; } } } else { if (! fCycleSame ) if ( !InitQA(taskIndex, fileName) ) - return kFALSE ; + return "" ; DoIt(taskIndex) ; } - return fDetectorsW ; - } //_____________________________________________________________________________ @@ -992,10 +1261,9 @@ void AliQAManager::RunOneEvent(AliRawReader * rawReader) //Runs all the QA data Maker for Raws only and on one event only (event loop done by calling method) if ( ! rawReader ) return ; - AliCodeTimerAuto("") ; - if (fTasks.Contains(Form("%d", AliQA::kRAWS))){ + if (fTasks.Contains(Form("%d", AliQAv1::kRAWS))){ for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) { - if (!IsSelected(AliQA::GetDetName(iDet))) + if (!IsSelected(AliQAv1::GetDetName(iDet))) continue; AliQADataMaker *qadm = GetQADataMaker(iDet); if (!qadm) @@ -1003,33 +1271,42 @@ void AliQAManager::RunOneEvent(AliRawReader * rawReader) if ( qadm->IsCycleDone() ) { qadm->EndOfCycle() ; } - AliCodeTimerStart(Form("running RAW quality assurance data maker for %s", AliQA::GetDetName(iDet))); - qadm->SetEventSpecie(fEventSpecie) ; - qadm->Exec(AliQA::kRAWS, rawReader) ; - AliCodeTimerStop(Form("running RAW quality assurance data maker for %s", AliQA::GetDetName(iDet))); + qadm->SetEventSpecie(fEventSpecie) ; + if ( qadm->GetRecoParam() ) + if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) + qadm->SetEventSpecie(qadm->GetRecoParam()->GetEventSpecie()) ; + qadm->Exec(AliQAv1::kRAWS, rawReader) ; } } } //_____________________________________________________________________________ -void AliQAManager::RunOneEvent(AliESDEvent *& esd) +void AliQAManager::RunOneEvent(AliESDEvent *& esd, AliESDEvent *& hltesd) { //Runs all the QA data Maker for ESDs only and on one event only (event loop done by calling method) - AliCodeTimerAuto("") ; - if (fTasks.Contains(Form("%d", AliQA::kESDS))) { + if (fTasks.Contains(Form("%d", AliQAv1::kESDS))) { for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) { - if (!IsSelected(AliQA::GetDetName(iDet))) + if (!IsSelected(AliQAv1::GetDetName(iDet))) continue; AliQADataMaker *qadm = GetQADataMaker(iDet); if (!qadm) continue; + qadm->SetEventSpecie(fEventSpecie) ; + if ( qadm->GetRecoParam() ) + if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) + qadm->SetEventSpecie(qadm->GetRecoParam()->GetEventSpecie()) ; if ( qadm->IsCycleDone() ) { qadm->EndOfCycle() ; } - AliCodeTimerStart(Form("running ESD quality assurance data maker for %s", AliQA::GetDetName(iDet))); - qadm->Exec(AliQA::kESDS, esd) ; - AliCodeTimerStop(Form("running ESD quality assurance data maker for %s", AliQA::GetDetName(iDet))); + if (iDet == AliQAv1::kHLT) { + TObjArray esdarray; + esdarray.Add(esd); + esdarray.Add(hltesd); + qadm->Exec(AliQAv1::kESDS, &esdarray); + } else { + qadm->Exec(AliQAv1::kESDS, esd) ; + } } } } @@ -1038,34 +1315,44 @@ void AliQAManager::RunOneEvent(AliESDEvent *& esd) void AliQAManager::RunOneEventInOneDetector(Int_t det, TTree * tree) { // Runs all the QA data Maker for ESDs only and on one event only (event loop done by calling method) - AliCodeTimerAuto("") ; - if (fTasks.Contains(Form("%d", AliQA::kRECPOINTS))) { - if (IsSelected(AliQA::GetDetName(det))) { + + TString test(tree->GetName()) ; + if (fTasks.Contains(Form("%d", AliQAv1::kRECPOINTS))) { + if (IsSelected(AliQAv1::GetDetName(det))) { AliQADataMaker *qadm = GetQADataMaker(det); if (qadm) { + qadm->SetEventSpecie(fEventSpecie) ; + if ( qadm->GetRecoParam() ) { + if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) + qadm->SetEventSpecie(qadm->GetRecoParam()->GetEventSpecie()) ; + else + AliError(Form("%d defined by %s is not an event specie", qadm->GetRecoParam()->GetEventSpecie(), qadm->GetName())) ; + } if ( qadm->IsCycleDone() ) { qadm->EndOfCycle() ; } - AliCodeTimerStart(Form("running RecPoints quality assurance data maker for %s", AliQA::GetDetName(det))); - qadm->Exec(AliQA::kRECPOINTS, tree) ; - AliCodeTimerStop(Form("running RecPoints quality assurance data maker for %s", AliQA::GetDetName(det))); + if (test.Contains("TreeD")) { + qadm->Exec(AliQAv1::kDIGITSR, tree) ; + } else if (test.Contains("TreeR")) { + qadm->Exec(AliQAv1::kRECPOINTS, tree) ; + } } } } } //_____________________________________________________________________________ -Bool_t AliQAManager::Save2OCDB(const Int_t runNumber, AliRecoParam::EventSpecie_t es, const char * year, const char * detectors) const +Bool_t AliQAManager::Save2OCDB(const Int_t runNumber, AliRecoParam::EventSpecie_t es, const Char_t * year, const Char_t * detectors) const { // take the locasl QA data merge into a single file and save in OCDB Bool_t rv = kTRUE ; - TString tmp(AliQA::GetQARefStorage()) ; + TString tmp(AliQAv1::GetQARefStorage()) ; if ( tmp.IsNull() ) { - AliError("No storage defined, use AliQA::SetQARefStorage") ; + AliError("No storage defined, use AliQAv1::SetQARefStorage") ; return kFALSE ; } - if ( !(tmp.Contains(AliQA::GetLabLocalOCDB()) || tmp.Contains(AliQA::GetLabAliEnOCDB())) ) { - AliError(Form("%s is a wrong storage, use %s or %s", AliQA::GetQARefStorage(), AliQA::GetLabLocalOCDB().Data(), AliQA::GetLabAliEnOCDB().Data())) ; + if ( !(tmp.Contains(AliQAv1::GetLabLocalOCDB()) || tmp.Contains(AliQAv1::GetLabAliEnOCDB())) ) { + AliError(Form("%s is a wrong storage, use %s or %s", AliQAv1::GetQARefStorage(), AliQAv1::GetLabLocalOCDB().Data(), AliQAv1::GetLabAliEnOCDB().Data())) ; return kFALSE ; } TString sdet(detectors) ; @@ -1075,13 +1362,13 @@ Bool_t AliQAManager::Save2OCDB(const Int_t runNumber, AliRecoParam::EventSpecie_ rv = Merge(runNumber) ; if ( ! rv ) return kFALSE ; - TString inputFileName(Form("Merged.%s.Data.%d.root", AliQA::GetQADataFileName(), runNumber)) ; + TString inputFileName(Form("Merged.%s.Data.%d.root", AliQAv1::GetQADataFileName(), runNumber)) ; inputFile = TFile::Open(inputFileName.Data()) ; rv = SaveIt2OCDB(runNumber, inputFile, year, es) ; } else { - for (Int_t index = 0; index < AliQA::kNDET; index++) { - if (sdet.Contains(AliQA::GetDetName(index))) { - TString inputFileName(Form("%s.%s.%d.root", AliQA::GetDetName(index), AliQA::GetQADataFileName(), runNumber)) ; + for (Int_t index = 0; index < AliQAv1::kNDET; index++) { + if (sdet.Contains(AliQAv1::GetDetName(index))) { + TString inputFileName(Form("%s.%s.%d.root", AliQAv1::GetDetName(index), AliQAv1::GetQADataFileName(), runNumber)) ; inputFile = TFile::Open(inputFileName.Data()) ; rv *= SaveIt2OCDB(runNumber, inputFile, year, es) ; } @@ -1091,80 +1378,80 @@ Bool_t AliQAManager::Save2OCDB(const Int_t runNumber, AliRecoParam::EventSpecie_ } //_____________________________________________________________________________ -Bool_t AliQAManager::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile, const char * year, AliRecoParam::EventSpecie_t es) const +Bool_t AliQAManager::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile, const Char_t * year, AliRecoParam::EventSpecie_t es) const { // reads the TH1 from file and adds it to appropriate list before saving to OCDB Bool_t rv = kTRUE ; - AliInfo(Form("Saving TH1s in %s to %s", inputFile->GetName(), AliQA::GetQARefStorage())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Saving TH1s in %s to %s", inputFile->GetName(), AliQAv1::GetQARefStorage())) ; if ( ! IsDefaultStorageSet() ) { - TString tmp( AliQA::GetQARefStorage() ) ; - if ( tmp.Contains(AliQA::GetLabLocalOCDB()) ) - Instance()->SetDefaultStorage(AliQA::GetQARefStorage()) ; + TString tmp( AliQAv1::GetQARefStorage() ) ; + if ( tmp.Contains(AliQAv1::GetLabLocalOCDB()) ) + Instance()->SetDefaultStorage(AliQAv1::GetQARefStorage()) ; else { - TString tmp1(AliQA::GetQARefDefaultStorage()) ; + TString tmp1(AliQAv1::GetQARefDefaultStorage()) ; tmp1.Append(year) ; tmp1.Append("?user=alidaq") ; Instance()->SetDefaultStorage(tmp1.Data()) ; } } - Instance()->SetSpecificStorage("*", AliQA::GetQARefStorage()) ; + Instance()->SetSpecificStorage("*", AliQAv1::GetQARefStorage()) ; if(GetRun() < 0) Instance()->SetRun(runNumber); AliCDBMetaData mdr ; mdr.SetResponsible("yves schutz"); - for ( Int_t detIndex = 0 ; detIndex < AliQA::kNDET ; detIndex++) { - TDirectory * detDir = inputFile->GetDirectory(AliQA::GetDetName(detIndex)) ; + for ( Int_t detIndex = 0 ; detIndex < AliQAv1::kNDET ; detIndex++) { + TDirectory * detDir = inputFile->GetDirectory(AliQAv1::GetDetName(detIndex)) ; if ( detDir ) { - AliInfo(Form("Entering %s", detDir->GetName())) ; - AliQA::SetQARefDataDirName(es) ; - TString detOCDBDir(Form("%s/%s/%s", AliQA::GetDetName(detIndex), AliQA::GetRefOCDBDirName(), AliQA::GetRefDataDirName())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Entering %s", detDir->GetName())) ; + AliQAv1::SetQARefDataDirName(es) ; + TString detOCDBDir(Form("%s/%s/%s", AliQAv1::GetDetName(detIndex), AliQAv1::GetRefOCDBDirName(), AliQAv1::GetRefDataDirName())) ; AliCDBId idr(detOCDBDir.Data(), runNumber, AliCDBRunRange::Infinity()) ; TList * listDetQAD = new TList() ; - TString listName(Form("%s QA data Reference", AliQA::GetDetName(detIndex))) ; - mdr.SetComment(Form("%s QA stuff", AliQA::GetDetName(detIndex))); + TString listName(Form("%s QA data Reference", AliQAv1::GetDetName(detIndex))) ; + mdr.SetComment(Form("%s QA stuff", AliQAv1::GetDetName(detIndex))); listDetQAD->SetName(listName) ; TList * taskList = detDir->GetListOfKeys() ; TIter nextTask(taskList) ; TKey * taskKey ; - while ( (taskKey = dynamic_cast(nextTask())) ) { + while ( (taskKey = static_cast(nextTask())) ) { TDirectory * taskDir = detDir->GetDirectory(taskKey->GetName()) ; TDirectory * esDir = taskDir->GetDirectory(AliRecoParam::GetEventSpecieName(es)) ; - AliInfo(Form("Saving %s", esDir->GetName())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Saving %s", esDir->GetName())) ; TObjArray * listTaskQAD = new TObjArray(100) ; listTaskQAD->SetName(Form("%s/%s", taskKey->GetName(), AliRecoParam::GetEventSpecieName(es))) ; listDetQAD->Add(listTaskQAD) ; TList * histList = esDir->GetListOfKeys() ; TIter nextHist(histList) ; TKey * histKey ; - while ( (histKey = dynamic_cast(nextHist())) ) { + while ( (histKey = static_cast(nextHist())) ) { TObject * odata = esDir->Get(histKey->GetName()) ; if ( !odata ) { AliError(Form("%s in %s/%s returns a NULL pointer !!", histKey->GetName(), detDir->GetName(), taskDir->GetName())) ; } else { - if ( AliQA::GetExpert() == histKey->GetName() ) { + if ( AliQAv1::GetExpert() == histKey->GetName() ) { TDirectory * expertDir = esDir->GetDirectory(histKey->GetName()) ; TList * expertHistList = expertDir->GetListOfKeys() ; TIter nextExpertHist(expertHistList) ; TKey * expertHistKey ; - while ( (expertHistKey = dynamic_cast(nextExpertHist())) ) { + while ( (expertHistKey = static_cast(nextExpertHist())) ) { TObject * expertOdata = expertDir->Get(expertHistKey->GetName()) ; if ( !expertOdata ) { AliError(Form("%s in %s/%s/Expert returns a NULL pointer !!", expertHistKey->GetName(), detDir->GetName(), taskDir->GetName())) ; } else { - AliInfo(Form("Adding %s", expertHistKey->GetName())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Adding %s", expertHistKey->GetName())) ; if ( expertOdata->IsA()->InheritsFrom("TH1") ) { - AliInfo(Form("Adding %s", expertHistKey->GetName())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Adding %s", expertHistKey->GetName())) ; TH1 * hExpertdata = static_cast(expertOdata) ; listTaskQAD->Add(hExpertdata) ; } } } } - AliInfo(Form("Adding %s", histKey->GetName())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Adding %s", histKey->GetName())) ; if ( odata->IsA()->InheritsFrom("TH1") ) { - AliInfo(Form("Adding %s", histKey->GetName())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Adding %s", histKey->GetName())) ; TH1 * hdata = static_cast(odata) ; listTaskQAD->Add(hdata) ; } @@ -1177,12 +1464,22 @@ Bool_t AliQAManager::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile, const return rv ; } +//_____________________________________________________________________________ + +void AliQAManager::SetCheckerExternParam(AliQAv1::DETECTORINDEX_t detIndex, TList * parameterList) +{ + // set the external parameters list for the detector checkers + AliQACheckerBase * qac = AliQAChecker::Instance()->GetDetQAChecker(detIndex) ; + qac->SetExternParamlist(parameterList) ; + qac->PrintExternParam() ; +} + //_____________________________________________________________________________ void AliQAManager::SetEventSpecie(AliRecoParam::EventSpecie_t es) { - // set the current event specie and inform AliQA that this event specie has been encountered - fEventSpecie = es ; - AliQA::Instance()->SetEventSpecie(es) ; + // set the current event specie and inform AliQAv1 that this event specie has been encountered + fEventSpecie = es ; + AliQAv1::Instance()->SetEventSpecie(es) ; } //_____________________________________________________________________________ @@ -1193,4 +1490,31 @@ void AliQAManager::SetRecoParam(const Int_t det, const AliDetectorRecoParam *par GetQADataMaker(det)->SetRecoParam(par) ; } +//_____________________________________________________________________________ +void AliQAManager::SetWriteExpert() +{ + // enable the writing of QA expert data + for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) { + if (IsSelected(AliQAv1::GetDetName(iDet))) + fQAWriteExpert[iDet] = kTRUE ; + } +} +//_____________________________________________________________________________ +void AliQAManager::Destroy() { + // delete AliQAManager instance and + // all associated objects + + if (fgQAInstance) { + delete fgQAInstance ; + fgQAInstance = NULL ; + } +} + +//_____________________________________________________________________________ +void AliQAManager::ShowQA() { + // Show the result of the QA checking + // for all detectors + for ( Int_t detIndex = 0 ; detIndex < AliQAv1::kNDET ; detIndex++) + AliQAv1::Instance(AliQAv1::GetDetIndex(AliQAv1::GetDetName(detIndex)))->Show() ; +}