X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliQAChecker.cxx;h=63ef31346b1907297c87439d5cd7c9834ad14dc0;hb=fcffef80fcd6908f1302e25f9a64d3644c8349e1;hp=8ff6cced51661d8748fef9748e9130ddc83588b4;hpb=9a2237221f305762af7ee9f4750c22eba246ad69;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliQAChecker.cxx b/STEER/AliQAChecker.cxx index 8ff6cced516..63ef31346b1 100644 --- a/STEER/AliQAChecker.cxx +++ b/STEER/AliQAChecker.cxx @@ -21,54 +21,63 @@ // // /////////////////////////////////////////////////////////////////////////////// +#include "AliCDBEntry.h" +#include "AliQAManager.h" +#include "AliCDBStorage.h" +#include "AliRunInfo.h" #include "AliLog.h" #include "AliModule.h" -#include "AliQA.h" +#include "AliQAv1.h" #include "AliQAChecker.h" #include "AliQACheckerBase.h" +#include "AliCorrQAChecker.h" +#include "AliGlobalQAChecker.h" +#include "AliGRPObject.h" #include #include +#include #include #include #include #include #include #include +#include ClassImp(AliQAChecker) AliQAChecker * AliQAChecker::fgQAChecker = 0x0 ; - TFile * AliQAChecker::fgQAResultFile = 0x0 ; - TString AliQAChecker::fgQAResultDirName = "local://RUN/"; - TString AliQAChecker::fgQAResultFileName = "QA.root" ; //_____________________________________________________________________________ AliQAChecker::AliQAChecker(const char* name, const char* title) : TNamed(name, title), fDataFile(0x0), - fRefDirName("./Ref/"), - fRefName("QA.root"), - fFoundDetectors(".") + fRunInfo(0x0), + fRunInfoOwner(kFALSE), + fRefFile(0x0), + fFoundDetectors("."), + fEventSpecie(AliRecoParam::kDefault), + fRun(0) { // ctor: initialise checkers and open the data file - for (Int_t det = 0 ; det < AliQA::kNDET ; det++) + for (Int_t det = 0 ; det < AliQAv1::kNDET ; det++) fCheckers[det] = NULL ; - - GetDataFile() ; - fRefDirName.Append(fRefName) ; } //_____________________________________________________________________________ AliQAChecker::AliQAChecker(const AliQAChecker& qac) : TNamed(qac), fDataFile(qac.fDataFile), - fRefDirName(qac.fRefDirName), - fRefName(qac.fRefName), - fFoundDetectors(qac.fFoundDetectors) + fRunInfo(qac.fRunInfo), + fRunInfoOwner(kFALSE), + fRefFile(qac.fRefFile), + fFoundDetectors(qac.fFoundDetectors), + fEventSpecie(qac.fEventSpecie), + fRun(qac.fRun) { // copy constructor - for (Int_t det = 0 ; det < AliQA::kNDET ; det++) + for (Int_t det = 0 ; det < AliQAv1::kNDET ; det++) fCheckers[det] = NULL ; } @@ -86,253 +95,312 @@ AliQAChecker& AliQAChecker::operator = (const AliQAChecker& qac) AliQAChecker::~AliQAChecker() { // clean up - delete [] fCheckers ; - fgQAResultFile->Close() ; + if (fRunInfo) + delete fRunInfo ; + for (Int_t det=0; detAccessPathName(AliQA::GetDataName())) - fDataFile = TFile::Open(AliQA::GetDataName()) ; - return fDataFile ; + AliQACheckerBase * qac = NULL ; + + TString detName(AliQAv1::GetDetName(det)) ; + + if (det == AliQAv1::kGLOBAL) { + qac = new AliGlobalQAChecker() ; + } else if (det == AliQAv1::kCORR) { + qac = new AliCorrQAChecker() ; + } else { + AliDebugClass(AliQAv1::GetQADebugLevel(), Form("Retrieving QA checker for %s", detName.Data())) ; + TPluginManager* pluginManager = gROOT->GetPluginManager() ; + TString qacName = "Ali" + detName + "QAChecker" ; + + // first check if a plugin is defined for the quality assurance checker + TPluginHandler* pluginHandler = pluginManager->FindHandler("AliQAChecker", detName.Data()); + // if not, add a plugin for it + if (!pluginHandler) { + //AliDebug(AliQAv1::GetQADebugLevel(), Form("defining plugin for %s", qacName.Data())); + TString libs = gSystem->GetLibraries(); + + if (libs.Contains("lib" + detName + "base.so") || (gSystem->Load("lib" + detName + "base.so") >= 0)) + pluginManager->AddHandler("AliQAChecker", detName, qacName, detName + "qac", qacName + "()"); + else + pluginManager->AddHandler("AliQAChecker", detName, qacName, detName, qacName + "()"); + + pluginHandler = pluginManager->FindHandler("AliQAChecker", detName); + + if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) + qac = (AliQACheckerBase *) pluginHandler->ExecPlugin(0); + + } + } + if (qac) + fCheckers[det] = qac ; + + return qac ; } //_____________________________________________________________________________ -TFile * AliQAChecker:: GetQAResultFile() +AliQAChecker * AliQAChecker::Instance() { - // Check if file to store QA exists, if not create it - - if (fgQAResultFile) { - if (fgQAResultFile->IsOpen()){ - fgQAResultFile->Close() ; - fgQAResultFile = 0x0 ; - } - } - if ( fgQAResultFileName.Contains("local://")) - fgQAResultFileName.ReplaceAll("local:/", "") ; - - TString opt("") ; - if ( !gSystem->AccessPathName(fgQAResultFileName) ) - opt = "UPDATE" ; - else - opt = "NEW" ; - fgQAResultFile = TFile::Open(fgQAResultFileName, opt) ; - - return fgQAResultFile ; + // returns unique instance of the checker + if ( ! fgQAChecker ) + fgQAChecker = new AliQAChecker() ; + return fgQAChecker ; } //_____________________________________________________________________________ - AliQACheckerBase * AliQAChecker::GetDetQAChecker(Int_t det) +void AliQAChecker::LoadRunInfoFromGRP() { - // Gets the Quality Assurance checker for the detector specified by its name - - if (fCheckers[det]) - return fCheckers[det]; + AliCDBManager* man = AliCDBManager::Instance() ; + AliCDBEntry* entry = man->Get(AliQAv1::GetGRPPath().Data()); + AliGRPObject* grpObject = 0x0; + if (entry) { + + TMap* m = static_cast(entry->GetObject()); // old GRP entry + + if (m) { + AliDebug(AliQAv1::GetQADebugLevel(), "It is a map"); + //m->Print(); + grpObject = new AliGRPObject(); + grpObject->ReadValuesFromMap(m); + } - TString detName(AliQA::GetDetName(det)) ; - - AliInfo(Form("Retrieving QA checker for %s", detName.Data())) ; - TPluginManager* pluginManager = gROOT->GetPluginManager() ; - TString qacName = "Ali" + detName + "QAChecker" ; - - AliQACheckerBase * qac = NULL ; - // first check if a plugin is defined for the quality assurance checker - TPluginHandler* pluginHandler = pluginManager->FindHandler("AliQAChecker", detName.Data()); - // if not, add a plugin for it - if (!pluginHandler) { - //AliInfo(Form("defining plugin for %s", qacName.Data())); - TString libs = gSystem->GetLibraries(); - - if (libs.Contains("lib" + detName + "base.so") || (gSystem->Load("lib" + detName + "base.so") >= 0)) - pluginManager->AddHandler("AliQAChecker", detName, qacName, detName + "qac", qacName + "()"); - else - pluginManager->AddHandler("AliQAChecker", detName, qacName, detName, qacName + "()"); - - pluginHandler = pluginManager->FindHandler("AliQAChecker", detName); - - if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) - qac = (AliQACheckerBase *) pluginHandler->ExecPlugin(0); - - if (qac) - fCheckers[det] = qac ; + else { + AliDebug(AliQAv1::GetQADebugLevel(), "It is a new GRP object"); + grpObject = static_cast(entry->GetObject()); // new GRP entry + } + + entry->SetOwner(0); + AliCDBManager::Instance()->UnloadFromCache("GRP/GRP/Data"); } - return qac ; -} + if (!grpObject) { + AliFatal("No GRP entry found in OCDB!"); + } + TString lhcState = grpObject->GetLHCState(); + if (lhcState==AliGRPObject::GetInvalidString()) { + AliError("GRP/GRP/Data entry: missing value for the LHC state ! Using UNKNOWN"); + lhcState = "UNKNOWN"; + } -//_____________________________________________________________________________ -TDirectory * AliQAChecker::GetRefSubDir(const char * det, const char * task) -{ - // Opens and returns the file with the reference data - TFile * f = TFile::Open(fRefDirName, "READ") ; - if (!f) - AliFatal(Form("Cannot find reference file %s", fRefDirName.Data())) ; - TDirectory * rv = NULL ; - rv = f->GetDirectory(det) ; - if (!rv) { - AliWarning(Form("Directory %s not found in %d", det, fRefDirName.Data())) ; - } else { - rv = rv->GetDirectory(task) ; - if (!rv) - AliWarning(Form("Directory %s/%s not found in %s", det, task, fRefDirName.Data())) ; - } - return rv ; -} + TString beamType = grpObject->GetBeamType(); + if (beamType==AliGRPObject::GetInvalidString()) { + AliError("GRP/GRP/Data entry: missing value for the beam type ! Using UNKNOWN"); + beamType = "UNKNOWN"; + } -//_____________________________________________________________________________ -AliQAChecker * AliQAChecker::Instance() -{ - // returns unique instance of the checker - if ( ! fgQAChecker ) - fgQAChecker = new AliQAChecker() ; - return fgQAChecker ; + Float_t beamEnergy = grpObject->GetBeamEnergy(); + if (beamEnergy==AliGRPObject::GetInvalidFloat()) { + AliError("GRP/GRP/Data entry: missing value for the beam energy ! Using 0"); + beamEnergy = 0; + } + + TString runType = grpObject->GetRunType(); + if (runType==AliGRPObject::GetInvalidString()) { + AliError("GRP/GRP/Data entry: missing value for the run type ! Using UNKNOWN"); + runType = "UNKNOWN"; + } + + Int_t activeDetectors = grpObject->GetDetectorMask(); + if (activeDetectors==AliGRPObject::GetInvalidInt()) { + AliError("GRP/GRP/Data entry: missing value for the detector mask ! Using 1074790399"); + activeDetectors = 1074790399; + } + + fRunInfo = new AliRunInfo(lhcState, beamType, beamEnergy, runType, activeDetectors); + + fRunInfoOwner = kTRUE ; + + // set the event specie + fEventSpecie = AliRecoParam::kDefault ; + if (strcmp(runType,"PHYSICS")) { + // Not a physics run, the event specie is set to kCalib + fEventSpecie = AliRecoParam::kCalib ; + return; + } + if (strcmp(lhcState,"STABLE_BEAMS") == 0) { + // Heavy ion run (any beam tha is not pp, the event specie is set to kHighMult + fEventSpecie = AliRecoParam::kHighMult ; + if ((strcmp(beamType,"p-p") == 0) || + (strcmp(beamType,"p-") == 0) || + (strcmp(beamType,"-p") == 0) || + (strcmp(beamType,"P-P") == 0) || + (strcmp(beamType,"P-") == 0) || + (strcmp(beamType,"-P") == 0)) { + // Proton run, the event specie is set to kLowMult + fEventSpecie = AliRecoParam::kLowMult ; + } + else if (strcmp(beamType,"-") == 0) { + // No beams, we assume cosmic data + fEventSpecie = AliRecoParam::kCosmic ; + } + else if (strcmp(beamType,"UNKNOWN") == 0) { + // No LHC beam information is available, we use the default event specie + fEventSpecie = AliRecoParam::kDefault ; + } + } } //_____________________________________________________________________________ -Bool_t AliQAChecker::Run() +Bool_t AliQAChecker::Run(const char * fileName, AliDetectorRecoParam * recoParam) { - // run the Quality Assurance Checker for all tasks Hits, SDigits, Digits, recpoints, tracksegments, recparticles and ESDs - // starting from data in file - - Bool_t rv = kFALSE ; - + // run the Quality Assurance Checker for all tasks Hits, SDigits, Digits, DigitsR, RecPoints, TrackSegments, RecParticles and ESDs + // starting from data in file TStopwatch stopwatch; stopwatch.Start(); - + //search for all detectors QA directories - TList * detKeyList = GetDataFile()->GetListOfKeys() ; + TList * detKeyList = AliQAv1::GetQADataFile(fileName)->GetListOfKeys() ; TIter nextd(detKeyList) ; TKey * detKey ; - while ( (detKey = dynamic_cast(nextd()) ) ) { - AliInfo(Form("Found %s", detKey->GetName())) ; + while ( (detKey = static_cast(nextd()) ) ) { + AliDebug(AliQAv1::GetQADebugLevel(), Form("Found %s", detKey->GetName())) ; //Check which detector TString detName ; TString detNameQA(detKey->GetName()) ; Int_t det ; - for ( det = 0; det < AliQA::kNDET ; det++) { - detName = AliQA::GetDetName(det) ; + for ( det = 0; det < AliQAv1::kNDET ; det++) { + detName = AliQAv1::GetDetName(det) ; if (detNameQA.Contains(detName)) { - fFoundDetectors+=detName ; - fFoundDetectors+="." ; - break ; + fFoundDetectors+=detName ; + fFoundDetectors+="." ; + break ; } } - TDirectory * detDir = GetDataFile()->GetDirectory(detKey->GetName()) ; + TDirectory * detDir = AliQAv1::GetQADataFile(fileName)->GetDirectory(detKey->GetName()) ; TList * taskKeyList = detDir->GetListOfKeys() ; TIter nextt(taskKeyList) ; TKey * taskKey ; // now search for the tasks dir while ( (taskKey = static_cast(nextt()) ) ) { TString taskName( taskKey->GetName() ) ; - AliInfo(Form("Found %s", taskName.Data())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("Found %s", taskName.Data())) ; TDirectory * taskDir = detDir->GetDirectory(taskName.Data()) ; taskDir->cd() ; AliQACheckerBase * qac = GetDetQAChecker(det) ; if (qac) - AliInfo(Form("QA checker found for %s", detName.Data())) ; + AliDebug(AliQAv1::GetQADebugLevel(), Form("QA checker found for %s", detName.Data())) ; if (!qac) - AliFatal(Form("QA checker not found for %s", detName.Data())) ; - AliQA::ALITASK index = AliQA::kNULLTASK ; - if ( taskName == AliQA::GetTaskName(AliQA::kHITS) ) - index = AliQA::kSIM ; - if ( taskName == AliQA::GetTaskName(AliQA::kSDIGITS) ) - index = AliQA::kSIM ; - if ( taskName == AliQA::GetTaskName(AliQA::kDIGITS) ) - index = AliQA::kSIM ; - if ( taskName == AliQA::GetTaskName(AliQA::kRECPOINTS) ) - index = AliQA::kREC ; - if ( taskName == AliQA::GetTaskName(AliQA::kTRACKSEGMENTS) ) - index = AliQA::kREC ; - if ( taskName == AliQA::GetTaskName(AliQA::kRECPARTICLES) ) - index = AliQA::kREC ; - if ( taskName == AliQA::GetTaskName(AliQA::kESDS) ) - index = AliQA::kESD ; - qac->Init(AliQA::DETECTORINDEX(det)) ; - qac->SetRefandData(GetRefSubDir(detNameQA.Data(), taskName.Data()), taskDir) ; - qac->Run(index) ; + AliFatal(Form("QA checker not found for %s", detName.Data())) ; + AliQAv1::ALITASK_t index = AliQAv1::kNULLTASK ; + if ( taskName == AliQAv1::GetTaskName(AliQAv1::kHITS) ) + index = AliQAv1::kSIM ; + if ( taskName == AliQAv1::GetTaskName(AliQAv1::kSDIGITS) ) + index = AliQAv1::kSIM ; + if ( taskName == AliQAv1::GetTaskName(AliQAv1::kDIGITS) ) + index = AliQAv1::kSIM ; + if ( taskName == AliQAv1::GetTaskName(AliQAv1::kRAWS) ) + index = AliQAv1::kRAW ; + if ( taskName == AliQAv1::GetTaskName(AliQAv1::kDIGITSR) ) + index = AliQAv1::kREC ; + if ( taskName == AliQAv1::GetTaskName(AliQAv1::kRECPOINTS) ) + index = AliQAv1::kREC ; + if ( taskName == AliQAv1::GetTaskName(AliQAv1::kTRACKSEGMENTS) ) + index = AliQAv1::kREC ; + if ( taskName == AliQAv1::GetTaskName(AliQAv1::kRECPARTICLES) ) + index = AliQAv1::kREC ; + if ( taskName == AliQAv1::GetTaskName(AliQAv1::kESDS) ) + index = AliQAv1::kESD ; + qac->Init(AliQAv1::DETECTORINDEX_t(det)) ; + qac->Run(index, recoParam) ; } - } - AliInfo("QA performed for following detectors:") ; - for ( Int_t det = 0; det < AliQA::kNDET; det++) { - if (fFoundDetectors.Contains(AliQA::GetDetName(det))) { - printf("%s, ",AliQA::GetDetName(det)) ; - fFoundDetectors.ReplaceAll(AliQA::GetDetName(det), "") ; + } + TString detList ; + for ( Int_t det = 0; det < AliQAv1::kNDET; det++) { + if (fFoundDetectors.Contains(AliQAv1::GetDetName(det))) { + detList += AliQAv1::GetDetName(det) ; + detList += " " ; + fFoundDetectors.ReplaceAll(AliQAv1::GetDetName(det), "") ; + AliQAv1::Instance()->Show(AliQAv1::GetDetIndex(AliQAv1::GetDetName(det))) ; } } - printf("\n") ; - rv = kTRUE ; - - return rv ; - + AliInfo(Form("QA performed for following detectors: %s", detList.Data())) ; + return kTRUE ; } //_____________________________________________________________________________ -Bool_t AliQAChecker::Run(AliQA::DETECTORINDEX det, AliQA::TASKINDEX task, TList * list) +Bool_t AliQAChecker::Run(AliQAv1::DETECTORINDEX_t det, AliQAv1::TASKINDEX_t task, TObjArray ** list, AliDetectorRecoParam * recoParam) { - // run the Quality Assurance Checker for detector det, for task task starting from data in list + // run the Quality Assurance Checker for detector det, for task task starting from data in list - AliQACheckerBase * qac = GetDetQAChecker(det) ; - if (qac) - AliInfo(Form("QA checker found for %s", AliQA::GetDetName(det).Data())) ; - if (!qac) - AliFatal(Form("QA checker not found for %s", AliQA::GetDetName(det).Data())) ; + AliQACheckerBase * qac = GetDetQAChecker(det) ; + if (qac) + AliDebug(AliQAv1::GetQADebugLevel(), Form("QA checker found for %s", AliQAv1::GetDetName(det).Data())) ; + if (!qac) + AliError(Form("QA checker not found for %s", AliQAv1::GetDetName(det).Data())) ; - AliQA::ALITASK index = AliQA::kNULLTASK ; - if ( task == AliQA::kRAWS ) - index = AliQA::kRAW ; - else if ( task == AliQA::kHITS ) - index = AliQA::kSIM ; - else if ( task == AliQA::kSDIGITS ) - index = AliQA::kSIM ; - else if ( task == AliQA::kDIGITS ) - index = AliQA::kSIM ; - else if ( task == AliQA::kRECPOINTS ) - index = AliQA::kREC ; - else if ( task == AliQA::kTRACKSEGMENTS ) - index = AliQA::kREC ; - else if ( task == AliQA::kRECPARTICLES ) - index = AliQA::kREC ; - else if ( task == AliQA::kESDS ) - index = AliQA::kESD ; + AliQAv1::ALITASK_t index = AliQAv1::kNULLTASK ; + if ( task == AliQAv1::kRAWS ) + index = AliQAv1::kRAW ; + else if ( task == AliQAv1::kHITS ) + index = AliQAv1::kSIM ; + else if ( task == AliQAv1::kSDIGITS ) + index = AliQAv1::kSIM ; + else if ( task == AliQAv1::kDIGITS ) + index = AliQAv1::kSIM ; + else if ( task == AliQAv1::kDIGITSR ) + index = AliQAv1::kREC ; + else if ( task == AliQAv1::kRECPOINTS ) + index = AliQAv1::kREC ; + else if ( task == AliQAv1::kTRACKSEGMENTS ) + index = AliQAv1::kREC ; + else if ( task == AliQAv1::kRECPARTICLES ) + index = AliQAv1::kREC ; + else if ( task == AliQAv1::kESDS ) + index = AliQAv1::kESD ; qac->Init(det) ; - qac->SetRefandData(GetRefSubDir(AliQA::GetDetName(det).Data(), AliQA::GetTaskName(task).Data())) ; - qac->Run(index, list) ; + qac->Run(index, list, recoParam) ; - return kTRUE ; + // make the image + qac->MakeImage(list, task, AliQAv1::Mode(task)) ; + return kTRUE ; } //_____________________________________________________________________________ -void AliQAChecker::SetQAResultDirName(const char * name) +Bool_t AliQAChecker::Run(AliQAv1::DETECTORINDEX_t det, AliQAv1::TASKINDEX_t task, TNtupleD ** list, AliDetectorRecoParam * recoParam) { - // Set the root directory where to store the QA status object - - fgQAResultDirName.Prepend(name) ; - AliInfo(Form("QA results are in %s", fgQAResultDirName.Data())) ; - if ( fgQAResultDirName.Contains("local://")) - fgQAResultDirName.ReplaceAll("local:/", "") ; - fgQAResultFileName.Prepend(fgQAResultDirName) ; -} - -//_____________________________________________________________________________ -void AliQAChecker::SetRefDirName(const char * name) -{ - // Set the root directory of reference data + // run the Quality Assurance Checker for detector det, for task task starting from data in list + + AliQACheckerBase * qac = GetDetQAChecker(det) ; + if (qac) + AliDebug(AliQAv1::GetQADebugLevel(), Form("QA checker found for %s", AliQAv1::GetDetName(det).Data())) ; + if (!qac) + AliError(Form("QA checker not found for %s", AliQAv1::GetDetName(det).Data())) ; + + AliQAv1::ALITASK_t index = AliQAv1::kNULLTASK ; + if ( task == AliQAv1::kRAWS ) + index = AliQAv1::kRAW ; + else if ( task == AliQAv1::kHITS ) + index = AliQAv1::kSIM ; + else if ( task == AliQAv1::kSDIGITS ) + index = AliQAv1::kSIM ; + else if ( task == AliQAv1::kDIGITS ) + index = AliQAv1::kSIM ; + else if ( task == AliQAv1::kDIGITSR ) + index = AliQAv1::kREC ; + else if ( task == AliQAv1::kRECPOINTS ) + index = AliQAv1::kREC ; + else if ( task == AliQAv1::kTRACKSEGMENTS ) + index = AliQAv1::kREC ; + else if ( task == AliQAv1::kRECPARTICLES ) + index = AliQAv1::kREC ; + else if ( task == AliQAv1::kESDS ) + index = AliQAv1::kESD ; + + qac->Init(det) ; + qac->Run(index, list, recoParam) ; - fRefDirName.Prepend(name) ; - fRefDirName.Append(fRefName) ; - AliInfo(Form("Reference data are taken from %s", fRefDirName.Data())) ; - if ( fRefDirName.Contains("local://")) - fRefDirName.ReplaceAll("local:/", "") ; + return kTRUE ; } - - - - -