X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliQAManager.cxx;h=323674e5df25151a23ccdad1cef8b7857a122d7e;hb=b16d72b108c1fa7332539de182faa83691989f9c;hp=ec9786b3cceffebfa7864a94201c255bfa799813;hpb=44ed7a669ab9cf51d3f37f1f6736443b71c54926;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliQAManager.cxx b/STEER/AliQAManager.cxx index ec9786b3cce..323674e5df2 100644 --- a/STEER/AliQAManager.cxx +++ b/STEER/AliQAManager.cxx @@ -18,16 +18,17 @@ // // // class for running the QA makers // // // -// 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); // +// 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 @@ -86,7 +87,8 @@ AliQAManager::AliQAManager() : fRawReaderDelete(kTRUE), fRunLoader(NULL), fTasks(""), - fEventSpecie(AliRecoParam::kDefault) + fEventSpecie(AliRecoParam::kDefault), + fPrintImage(kTRUE) { // default ctor fMaxEvents = fNumberOfEvents ; @@ -120,7 +122,8 @@ AliQAManager::AliQAManager(const Char_t * mode, const Char_t* gAliceFilename) : fRawReaderDelete(kTRUE), fRunLoader(NULL), fTasks(""), - fEventSpecie(AliRecoParam::kDefault) + fEventSpecie(AliRecoParam::kDefault), + fPrintImage(kTRUE) { // default ctor fMaxEvents = fNumberOfEvents ; @@ -132,6 +135,11 @@ AliQAManager::AliQAManager(const Char_t * mode, const Char_t* gAliceFilename) : } } SetWriteExpert() ; + fMode.ToLower() ; + if (fMode.Contains("sim")) + fMode.ReplaceAll("s", "S") ; + else if (fMode.Contains("rec")) + fMode.ReplaceAll("r", "R") ; } //_____________________________________________________________________________ @@ -154,7 +162,9 @@ AliQAManager::AliQAManager(const AliQAManager & qas) : fRawReaderDelete(kTRUE), fRunLoader(NULL), fTasks(qas.fTasks), - fEventSpecie(qas.fEventSpecie) + fEventSpecie(qas.fEventSpecie), + fPrintImage(qas.fPrintImage) + { // cpy ctor for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) { @@ -192,6 +202,9 @@ AliQAManager::~AliQAManager() delete fRawReader ; fRawReader = NULL ; } + TCanvas fakeCanvas ; + if (fPrintImage) + fakeCanvas.Print(Form("%s%s%d.%s]", AliQAv1::GetImageFileName(), GetMode(), fRunNumber, AliQAv1::GetImageFileFormat())); } //_____________________________________________________________________________ @@ -240,8 +253,8 @@ Bool_t AliQAManager::DoIt(const AliQAv1::TASKINDEX_t taskIndex) AliWarning(Form(" Hit Tree not found for %s", AliQAv1::GetDetName(iDet))) ; break ; } + qadm->Exec(taskIndex, data) ; } - qadm->Exec(taskIndex, data) ; break ; case AliQAv1::kSDIGITS : if( loader ) { @@ -251,19 +264,30 @@ Bool_t AliQAManager::DoIt(const AliQAv1::TASKINDEX_t taskIndex) AliWarning(Form(" SDigit Tree not found for %s", AliQAv1::GetDetName(iDet))) ; break ; } + qadm->Exec(taskIndex, data) ; } - qadm->Exec(taskIndex, data) ; break; 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) ; + 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 AliQAv1::kRECPOINTS : if( loader ) { @@ -273,8 +297,8 @@ Bool_t AliQAManager::DoIt(const AliQAv1::TASKINDEX_t taskIndex) AliWarning(Form("RecPoints not found for %s", AliQAv1::GetDetName(iDet))) ; break ; } + qadm->Exec(taskIndex, data) ; } - qadm->Exec(taskIndex, data) ; break; case AliQAv1::kTRACKSEGMENTS : break; @@ -314,7 +338,7 @@ Bool_t AliQAManager::Finish(const AliQAv1::TASKINDEX_t taskIndex) } //_____________________________________________________________________________ -TObjArray * AliQAManager::GetFromOCDB(AliQAv1::DETECTORINDEX_t det, AliQAv1::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 ; @@ -332,18 +356,29 @@ TObjArray * AliQAManager::GetFromOCDB(AliQAv1::DETECTORINDEX_t det, AliQAv1::TAS 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(AliQAv1::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) ; + AliQADataMaker * qadm = GetQADataMaker(detIndex) ; + rv = qadm->GetImage() ; + return rv ; +} + //_____________________________________________________________________________ AliLoader * AliQAManager::GetLoader(Int_t iDet) { // get the loader for a detector - if ( !fRunLoader || iDet == AliQAv1::kCORR) + if ( !fRunLoader || iDet == AliQAv1::kCORR || iDet == AliQAv1::kGLOBAL ) return NULL ; TString detName = AliQAv1::GetDetName(iDet) ; @@ -381,13 +416,13 @@ AliLoader * AliQAManager::GetLoader(Int_t iDet) 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() ; @@ -406,30 +441,18 @@ AliQADataMaker * AliQAManager::GetQADataMaker(const Int_t iDet) { // get the quality assurance data maker for a detector - if (fQADataMaker[iDet]) { - fQADataMaker[iDet]->SetEventSpecie(fEventSpecie) ; - if ( fQADataMaker[iDet]->GetRecoParam() ) - if ( AliRecoParam::Convert(fQADataMaker[iDet]->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) - fQADataMaker[iDet]->SetEventSpecie(fQADataMaker[iDet]->GetRecoParam()->GetEventSpecie()) ; - return fQADataMaker[iDet] ; - } - - AliQADataMaker * qadm = NULL ; - - if (iDet == AliQAv1::kGLOBAL) { //Global QA - qadm = new AliGlobalQADataMaker(); - qadm->SetName(AliQAv1::GetDetName(iDet)); - qadm->SetUniqueID(iDet); - fQADataMaker[iDet] = qadm; + AliQADataMaker * qadm = fQADataMaker[iDet] ; + + if (qadm) { + qadm->SetEventSpecie(fEventSpecie) ; if ( qadm->GetRecoParam() ) - if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) + if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) qadm->SetEventSpecie(qadm->GetRecoParam()->GetEventSpecie()) ; - return qadm; - } - if (iDet == AliQAv1::kCORR) { //the data maker for correlations among detectors - qadm = new AliCorrQADataMakerRec(fQADataMaker) ; + } else if (iDet == AliQAv1::kGLOBAL) { //Global QA + + qadm = new AliGlobalQADataMaker(); qadm->SetName(AliQAv1::GetDetName(iDet)); qadm->SetUniqueID(iDet); fQADataMaker[iDet] = qadm; @@ -437,46 +460,52 @@ AliQADataMaker * AliQAManager::GetQADataMaker(const Int_t iDet) if ( qadm->GetRecoParam() ) if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) qadm->SetEventSpecie(qadm->GetRecoParam()->GetEventSpecie()) ; - return qadm; - } - // load the QA data maker object - TPluginManager* pluginManager = gROOT->GetPluginManager() ; - TString detName = AliQAv1::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(AliQAv1::GetQADebugLevel(), 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) { + } else if (iDet == AliQAv1::kCORR && strcmp(GetMode(), "Rec") == 0 ) { //the data maker for correlations among detectors + qadm = new AliCorrQADataMakerRec(fQADataMaker) ; qadm->SetName(AliQAv1::GetDetName(iDet)); qadm->SetUniqueID(iDet); - fQADataMaker[iDet] = qadm ; + fQADataMaker[iDet] = qadm; qadm->SetEventSpecie(fEventSpecie) ; if ( qadm->GetRecoParam() ) if ( AliRecoParam::Convert(qadm->GetRecoParam()->GetEventSpecie()) != AliRecoParam::kDefault) qadm->SetEventSpecie(qadm->GetRecoParam()->GetEventSpecie()) ; - } + } else if ( iDet < AliQAv1::kHLT ) { + + // load the QA data maker object + TPluginManager* pluginManager = gROOT->GetPluginManager() ; + TString detName = AliQAv1::GetDetName(iDet) ; + TString qadmName = "Ali" + detName + "QADataMaker" + GetMode() ; + + // 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(GetMode()) ; + temp.ToLower() ; + if (libs.Contains("lib" + detName + GetMode() + ".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 ; } @@ -485,6 +514,10 @@ void AliQAManager::EndOfCycle(TObjArray * detArray) { // End of cycle QADataMakers + if (fPrintImage) { + TCanvas fakeCanvas ; + fakeCanvas.Print(Form("%s%s%d.%s[", AliQAv1::GetImageFileName(), GetMode(), fRunNumber, AliQAv1::GetImageFileFormat())) ; + } for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { if (IsSelected(AliQAv1::GetDetName(iDet))) { AliQADataMaker * qadm = GetQADataMaker(iDet) ; @@ -496,6 +529,8 @@ void AliQAManager::EndOfCycle(TObjArray * detArray) if (!det || !det->IsActive()) continue ; } + qadm->SetPrintImage(fPrintImage) ; + for (UInt_t taskIndex = 0; taskIndex < AliQAv1::kNTASKINDEX; taskIndex++) { if ( fTasks.Contains(Form("%d", taskIndex)) ) qadm->EndOfCycle(AliQAv1::GetTaskIndex(AliQAv1::GetTaskName(taskIndex))) ; @@ -510,7 +545,11 @@ void AliQAManager::EndOfCycle(TString detectors) { // End of cycle QADataMakers - for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { + if (fPrintImage) { + TCanvas fakeCanvas ; + fakeCanvas.Print(Form("%s%s%d.%s[", AliQAv1::GetImageFileName(), GetMode(), fRunNumber, AliQAv1::GetImageFileFormat())) ; + } + for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) { if (IsSelected(AliQAv1::GetDetName(iDet))) { AliQADataMaker * qadm = GetQADataMaker(iDet) ; if (!qadm) @@ -518,6 +557,7 @@ void AliQAManager::EndOfCycle(TString detectors) // skip non active detectors if (!detectors.Contains(AliQAv1::GetDetName(iDet))) continue ; + qadm->SetPrintImage(fPrintImage) ; for (UInt_t taskIndex = 0; taskIndex < AliQAv1::kNTASKINDEX; taskIndex++) { if ( fTasks.Contains(Form("%d", taskIndex)) ) qadm->EndOfCycle(AliQAv1::GetTaskIndex(AliQAv1::GetTaskName(taskIndex))) ; @@ -541,7 +581,7 @@ void AliQAManager::Increment() } //_____________________________________________________________________________ -Bool_t AliQAManager::InitQA(const AliQAv1::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 @@ -565,7 +605,7 @@ Bool_t AliQAManager::InitQA(const AliQAv1::TASKINDEX_t taskIndex, const char * 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 ; @@ -606,6 +646,10 @@ Bool_t AliQAManager::InitQA(const AliQAv1::TASKINDEX_t taskIndex, const char * AliGeomManager::LoadGeometry() ; InitQADataMaker(fRunNumber, detArray) ; //, fCycleSame, kTRUE, detArray) ; + if (fPrintImage) { + TCanvas fakeCanvas ; + fakeCanvas.Print(Form("%s%s%d.%s[", AliQAv1::GetImageFileName(), GetMode(), fRunNumber, AliQAv1::GetImageFileFormat())) ; + } return kTRUE ; } @@ -613,6 +657,7 @@ Bool_t AliQAManager::InitQA(const AliQAv1::TASKINDEX_t taskIndex, const char * 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(AliQAv1::GetDetName(iDet))) { AliQADataMaker * qadm = GetQADataMaker(iDet) ; @@ -693,7 +738,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 @@ -719,19 +764,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)) @@ -756,7 +802,7 @@ Bool_t AliQAManager::MergeXML(const char * collectionFile, const char * subFile, TGridResult* result = collection->GetGridResult("", 0, 0); Int_t index = 0 ; - const char * turl ; + const Char_t * turl ; TFileMerger merger(kFALSE) ; if (!outFile) { TString tempo(collectionFile) ; @@ -769,7 +815,7 @@ 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 @@ -812,7 +858,7 @@ void AliQAManager::MergeCustom() const loRun = cuRun ; if (cuRun > hiRun) hiRun = cuRun ; - while ( (srun = dynamic_cast (nextRun())) ) { + while ( (srun = static_cast (nextRun())) ) { if ( cuRun == (srun->String()).Atoi() ) { runExist = kTRUE ; break ; @@ -840,15 +886,15 @@ void AliQAManager::MergeCustom() const } } } - while ( (srun = dynamic_cast (nextRun())) ) { + 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 * fileList[AliQAv1::kNDET] ; + Char_t * fileList[AliQAv1::kNDET] ; index = 0 ; for (Int_t iDet = 0; iDet < AliQAv1::kNDET ; iDet++) { - char * file = gSystem->Which(gSystem->WorkingDirectory(), Form("%s.%s.%d.root", AliQAv1::GetDetName(iDet), AliQAv1::GetQADataFileName(), runNumber)); + Char_t * file = gSystem->Which(gSystem->WorkingDirectory(), Form("%s.%s.%d.root", AliQAv1::GetDetName(iDet), AliQAv1::GetQADataFileName(), runNumber)); if (file) fileList[index++] = file ; } @@ -891,11 +937,11 @@ void AliQAManager::MergeCustom() const TList * listOfData = directoryEventSpecie->GetListOfKeys() ; TIter nextData(listOfData) ; TKey * key ; - while ( (key = dynamic_cast(nextData())) ) { + while ( (key = static_cast(nextData())) ) { TString className(key->GetClassName()) ; if ( className.Contains("TH") || className.Contains("TProfile") ) { - TH1 * histIn = dynamic_cast (key->ReadObj()) ; - TH1 * histOu = dynamic_cast (mergedDirectory->FindObjectAny(histIn->GetName())) ; + 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 ) { @@ -912,11 +958,11 @@ void AliQAManager::MergeCustom() const TList * listOfExpertData = dirExpert->GetListOfKeys() ; TIter nextExpertData(listOfExpertData) ; TKey * keykey ; - while ( (keykey = dynamic_cast(nextExpertData())) ) { + while ( (keykey = static_cast(nextExpertData())) ) { TString classNameExpert(keykey->GetClassName()) ; if (classNameExpert.Contains("TH")) { - TH1 * histInExpert = dynamic_cast (keykey->ReadObj()) ; - TH1 * histOuExpert = dynamic_cast (mergedDirectory->FindObjectAny(histInExpert->GetName())) ; + TH1 * histInExpert = static_cast (keykey->ReadObj()) ; + TH1 * histOuExpert = static_cast (mergedDirectory->FindObjectAny(histInExpert->GetName())) ; mergedDirectoryExpert->cd() ; if ( ! histOuExpert ) { histInExpert->Write() ; @@ -948,15 +994,16 @@ void AliQAManager::MergeCustom() const } //_____________________________________________________________________________ -Bool_t AliQAManager::MergeData(const Int_t runNumber) const +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",AliQAv1::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", AliQAv1::GetDetName(iDet), AliQAv1::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) ; } @@ -1036,6 +1083,10 @@ AliQAManager * AliQAManager::QAManager(const Char_t * mode, TMap *entryCache, In // returns AliQAManager instance (singleton) if (!fgQAInstance) { + if ( (strcmp(mode, "sim") != 0) && (strcmp(mode, "rec") != 0) ) { + AliErrorClass("You must specify sim or rec") ; + return NULL ; + } fgQAInstance = new AliQAManager(mode) ; if (!entryCache) fgQAInstance->Init(); @@ -1046,7 +1097,7 @@ AliQAManager * AliQAManager::QAManager(const Char_t * mode, TMap *entryCache, In } //_____________________________________________________________________________ -TString AliQAManager::Run(const char * detectors, AliRawReader * rawReader, const Bool_t sameCycle) +TString AliQAManager::Run(const Char_t * detectors, AliRawReader * rawReader, const Bool_t sameCycle) { //Runs all the QA data Maker for Raws only @@ -1065,7 +1116,7 @@ TString AliQAManager::Run(const char * detectors, AliRawReader * rawReader, cons if (!fCycleSame) if ( !InitQA(AliQAv1::kRAWS) ) - return kFALSE ; + return "" ; fRawReaderDelete = kFALSE ; DoIt(AliQAv1::kRAWS) ; @@ -1073,7 +1124,7 @@ TString AliQAManager::Run(const char * detectors, AliRawReader * rawReader, cons } //_____________________________________________________________________________ -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 @@ -1100,14 +1151,14 @@ TString AliQAManager::Run(const char * detectors, const char * fileName, const B if (!fCycleSame) if ( !InitQA(AliQAv1::kRAWS, fileName) ) - return kFALSE ; + return "" ; DoIt(AliQAv1::kRAWS) ; return fDetectorsW ; } //_____________________________________________________________________________ -TString AliQAManager::Run(const char * detectors, const AliQAv1::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 @@ -1131,26 +1182,22 @@ TString AliQAManager::Run(const char * detectors, const AliQAv1::TASKINDEX_t tas } } } - - - if ( taskIndex == AliQAv1::kNULLTASKINDEX) { + if ( taskIndex == AliQAv1::kNULLTASKINDEX) { for (UInt_t task = 0; task < AliQAv1::kNTASKINDEX; task++) { if ( fTasks.Contains(Form("%d", task)) ) { if (!fCycleSame) if ( !InitQA(AliQAv1::GetTaskIndex(AliQAv1::GetTaskName(task)), fileName) ) - return kFALSE ; + return "" ; DoIt(AliQAv1::GetTaskIndex(AliQAv1::GetTaskName(task))) ; } } } else { if (! fCycleSame ) if ( !InitQA(taskIndex, fileName) ) - return kFALSE ; + return "" ; DoIt(taskIndex) ; } - return fDetectorsW ; - } //_____________________________________________________________________________ @@ -1229,7 +1276,6 @@ void AliQAManager::RunOneEventInOneDetector(Int_t det, TTree * tree) AliCodeTimerStart(Form("running RecPoints quality assurance data maker for %s", AliQAv1::GetDetName(det))); if (test.Contains("TreeD")) { qadm->Exec(AliQAv1::kDIGITSR, tree) ; - AliCodeTimerStop(Form("running Digits quality assurance data maker for %s", AliQAv1::GetDetName(det))); } else if (test.Contains("TreeR")) { qadm->Exec(AliQAv1::kRECPOINTS, tree) ; AliCodeTimerStop(Form("running RecPoints quality assurance data maker for %s", AliQAv1::GetDetName(det))); @@ -1240,7 +1286,7 @@ void AliQAManager::RunOneEventInOneDetector(Int_t det, TTree * 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 ; @@ -1276,7 +1322,7 @@ 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 ; @@ -1313,7 +1359,7 @@ Bool_t AliQAManager::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile, const 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)) ; AliDebug(AliQAv1::GetQADebugLevel(), Form("Saving %s", esDir->GetName())) ; @@ -1323,7 +1369,7 @@ Bool_t AliQAManager::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile, const 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())) ; @@ -1333,7 +1379,7 @@ Bool_t AliQAManager::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile, const 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())) ; @@ -1387,3 +1433,22 @@ void AliQAManager::SetWriteExpert() 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() ; +}