ClassImp(AliQA)
-AliQA * AliQA::fgQA = 0x0 ;
-TFile * AliQA::fgQADataFile = 0x0 ;
-TString AliQA::fgQADataFileName = "QA" ; // will transform into Det.QA.run.cycle.root
-TFile * AliQA::fgQARefFile = 0x0 ;
-TString AliQA::fgQARefDirName = "" ;
-TString AliQA::fgQARefFileName = "QA.root" ;
-TFile * AliQA::fgQAResultFile = 0x0 ;
-TString AliQA::fgQAResultDirName = "" ;
-TString AliQA::fgQAResultFileName = "QA.root" ;
-TString AliQA::fgDetNames[] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD",
- "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"} ;
-TString AliQA::fgTaskNames[] = {"Raws", "Hits", "SDigits", "Digits", "RecPoints", "TrackSegments", "RecParticles", "ESDs"} ;
-const TString AliQA::fkgLabLocalFile = "file://" ;
-const TString AliQA::fkgLabLocalOCDB = "local://" ;
-const TString AliQA::fkgLabAliEnOCDB = "alien://" ;
-const TString AliQA::fkgRefFileName = "QA.root" ;
-const TString AliQA::fkgRefOCDBDirName = "QA/Ref" ;
+AliQA * AliQA::fgQA = 0x0 ;
+TFile * AliQA::fgQADataFile = 0x0 ;
+TString AliQA::fgQADataFileName = "QA" ; // will transform into Det.QA.run.cycle.root
+TFile * AliQA::fgQARefFile = 0x0 ;
+TString AliQA::fgQARefDirName = "" ;
+TString AliQA::fgQARefFileName = "QA.root" ;
+TFile * AliQA::fgQAResultFile = 0x0 ;
+TString AliQA::fgQAResultDirName = "" ;
+TString AliQA::fgQAResultFileName = "QA.root" ;
+TString AliQA::fgDetNames[] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD",
+ "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"} ;
+TString AliQA::fgTaskNames[] = {"Raws", "Hits", "SDigits", "Digits", "RecPoints", "TrackSegments", "RecParticles", "ESDs"} ;
+const TString AliQA::fkgLabLocalFile = "file://" ;
+const TString AliQA::fkgLabLocalOCDB = "local://" ;
+const TString AliQA::fkgLabAliEnOCDB = "alien://" ;
+const TString AliQA::fkgRefFileName = "QA.root" ;
+const TString AliQA::fkgQAOCDBDirName = "QA" ;
+const TString AliQA::fkgRefOCDBDirName = "Ref" ;
+const TString AliQA::fkgQARefOCDBDefault = "local://$ALICE_ROOT" ;
//____________________________________________________________________________
AliQA::AliQA() :
TNamed("", ""),
if ( fgQARefDirName.Contains(fkgLabLocalFile) )
fgQARefFileName = fkgRefFileName ;
else if ( fgQARefDirName.Contains(fkgLabLocalOCDB) )
- fgQARefFileName = fkgRefOCDBDirName ;
+ fgQARefFileName = fkgQAOCDBDirName ;
else {
printf("ERROR: %s is an invalid storage definition\n", name) ;
fgQARefDirName = "" ;
static TFile * GetQADataFile(const char * fileName) ;
static TFile * GetQAResultFile() ;
static const char * GetQAResultFileName() { return (fgQAResultDirName + fgQAResultFileName).Data() ; }
+ static const char * GetQARefDefaultStorage() { return fkgQARefOCDBDefault.Data() ; }
static const char * GetQARefFileName() { return fgQARefFileName ; }
static const char * GetQARefStorage() { return fgQARefDirName.Data() ; }
- static const char * GetQARefOCDBDirName() { return fkgRefOCDBDirName .Data() ; }
+ static const char * GetQAOCDBDirName() { return fkgQAOCDBDirName.Data() ; }
+ static const char * GetRefOCDBDirName() { return fkgRefOCDBDirName.Data() ; }
const Bool_t IsSet(DETECTORINDEX det, ALITASK tsk, QABIT bit) const ;
void Set(QABIT bit) ;
static void SetQAResultDirName(const char * name) ;
static const TString fkgLabLocalOCDB ; //! label to identify a file as local OCDB
static const TString fkgLabAliEnOCDB ; //! label to identify a file as AliEn OCDB
static const TString fkgRefFileName ; //! name of Reference File Name
+ static const TString fkgQAOCDBDirName ; //! name of Reference directory name in OCDB
static const TString fkgRefOCDBDirName ; //! name of Reference directory name in OCDB
+ static const TString fkgQARefOCDBDefault; //! default storage for QA in OCDB
ClassDef(AliQA,1) //ALICE Quality Assurance Object
};
//_____________________________________________________________________________
-void AliQAChecker::GetRefSubDir(const char * det, const char * task, TDirectory *& dirFile, TList *& dirOCDB)
+void AliQAChecker::GetRefSubDir(const char * det, const char * task, TDirectory *& dirFile, TObjArray *& dirOCDB)
{
// Opens and returns the file with the reference data
}
} else if (refStorage.Contains(AliQA::GetLabLocalOCDB()) || refStorage.Contains(AliQA::GetLabAliEnOCDB())) {
AliCDBManager* man = AliCDBManager::Instance() ;
+ if ( ! man->IsDefaultStorageSet() ) {
+ man->SetDefaultStorage(AliQA::GetQARefDefaultStorage()) ;
+ man->SetSpecificStorage(Form("%s/*", AliQA::GetQAOCDBDirName()), AliQA::GetQARefStorage()) ;
+ }
char detOCDBDir[20] ;
- sprintf(detOCDBDir, "%s/%s", AliQA::GetQARefFileName(), det) ;
- AliCDBEntry * entry = man->Get(detOCDBDir) ;
- TList * listDetQAD = dynamic_cast<TList *>(entry->GetObject()) ;
- if ( listDetQAD )
- dirOCDB = dynamic_cast<TList *>(listDetQAD->FindObject(task)) ;
+ sprintf(detOCDBDir, "%s/%s/%s", AliQA::GetQAOCDBDirName(), det, AliQA::GetRefOCDBDirName()) ;
+ AliCDBEntry * entry = man->Get(detOCDBDir, 0) ; //FIXME 0 --> RUN NUMBER
+ if (entry) {
+ TList * listDetQAD = dynamic_cast<TList *>(entry->GetObject()) ;
+ if ( listDetQAD )
+ dirOCDB = dynamic_cast<TObjArray *>(listDetQAD->FindObject(task)) ;
+ }
}
}
index = AliQA::kESD ;
qac->Init(AliQA::DETECTORINDEX(det)) ;
- TDirectory * refDir = NULL ;
- TList * refOCDBDir = NULL ;
+ TDirectory * refDir = NULL ;
+ TObjArray * refOCDBDir = NULL ;
GetRefSubDir(detNameQA.Data(), taskName.Data(), refDir, refOCDBDir) ;
if ( refDir || refOCDBDir) {
qac->SetRefandData(refDir, refOCDBDir, taskDir) ;
else if ( task == AliQA::kESDS )
index = AliQA::kESD ;
- TDirectory * refDir = NULL ;
- TList *refOCDBDir = NULL ;
+ TDirectory * refDir = NULL ;
+ TObjArray * refOCDBDir = NULL ;
GetRefSubDir(AliQA::GetDetName(det), AliQA::GetTaskName(task), refDir, refOCDBDir) ;
if ( refDir || refOCDBDir) {
qac->Init(det) ;
static AliQAChecker * Instance() ;
AliQACheckerBase * GetDetQAChecker(Int_t det) ;
- void GetRefSubDir(const char * det, const char * task, TDirectory *& dirFile, TList *& dirOCDB) ;
+ void GetRefSubDir(const char * det, const char * task, TDirectory *& dirFile, TObjArray *& dirOCDB) ;
// static TFile * GetQAResultFile() ;
// static const char * GetQAResultFileName() { return fgQAResultFileName.Data() ; }
// void SetQAResultDirName(const char * name) ;
void Init(const AliQA::DETECTORINDEX det) ;
void Run(AliQA::ALITASK tsk, TObjArray * list=0x0);
- void SetRefandData(TDirectory * ref, TList * refOCDB, TDirectory * data=NULL) { fRefSubDir = ref ; fRefOCDBSubDir = refOCDB, fDataSubDir = data ; }
+ void SetRefandData(TDirectory * ref, TObjArray * refOCDB, TDirectory * data=NULL) { fRefSubDir = ref ; fRefOCDBSubDir = refOCDB, fDataSubDir = data ; }
protected:
virtual const Double_t Check() ;
TDirectory * fDataSubDir ; //! directory for the current task directory in the current detector directory in the data file
TDirectory * fRefSubDir ; //! directory for the current task directory in the current detector directory in the reference file
- TList * fRefOCDBSubDir ; //! Entry in OCDB for the current detector
+ TObjArray * fRefOCDBSubDir ; //! Entry in OCDB for the current detector
ClassDef(AliQACheckerBase,1) // description
{
// Set histograms memory resident and add to the list
hist->SetDirectory(0) ;
- list->AddAt(hist, index) ;
+ list->AddAtAndExpand(hist, index) ;
return list->GetLast() ;
}
AliError("Wrong type of esd container") ;
break ;
}
- case AliQA::kNTASKINDEX:
- break ;
+ case AliQA::kNTASKINDEX:
+ break ;
}
}
}
//_____________________________________________________________________________
-TList * AliQADataMakerSteer::GetFromOCDB(AliQA::DETECTORINDEX det, AliQA::TASKINDEX task) const
+TObjArray * AliQADataMakerSteer::GetFromOCDB(AliQA::DETECTORINDEX det, AliQA::TASKINDEX task) const
{
// Retrieve the list of QA data for a given detector and a given task
- TList * rv = NULL ;
+ TObjArray * rv = NULL ;
+ TString tmp(AliQA::GetQARefStorage()) ;
+ if ( tmp.IsNull() ) {
+ AliError("No storage defined, use AliQA::SetQARefStorage") ;
+ return NULL ;
+ }
AliCDBManager* man = AliCDBManager::Instance() ;
- man->SetDefaultStorage("local://TestCDB") ;
- char detOCDBDir[20] ;
- sprintf(detOCDBDir, "QA/Ref/%s", AliQA::GetDetName((Int_t)det)) ;
- AliInfo(Form("Retrieving reference data from local://TestCDB/%s %s", detOCDBDir, AliQA::GetTaskName(task).Data())) ;
- AliCDBEntry* entry = man->Get(detOCDBDir,0) ;
+ if ( ! man->IsDefaultStorageSet() ) {
+ man->SetDefaultStorage(AliQA::GetQARefDefaultStorage()) ;
+ man->SetSpecificStorage(Form("%s/*", AliQA::GetQAOCDBDirName()), AliQA::GetQARefStorage()) ;
+ }
+ char detOCDBDir[10] ;
+ sprintf(detOCDBDir, "%s/%s/%s", AliQA::GetQAOCDBDirName(), AliQA::GetDetName((Int_t)det), AliQA::GetRefOCDBDirName()) ;
+ AliInfo(Form("Retrieving reference data from %s/%s for %s", AliQA::GetQARefStorage(), detOCDBDir, AliQA::GetTaskName(task).Data())) ;
+ AliCDBEntry* entry = man->Get(detOCDBDir, 0) ; //FIXME 0 --> Run Number
TList * listDetQAD = dynamic_cast<TList *>(entry->GetObject()) ;
if ( listDetQAD )
- rv = dynamic_cast<TList *>(listDetQAD->FindObject(AliQA::GetTaskName(task))) ;
-
+ rv = dynamic_cast<TObjArray *>(listDetQAD->FindObject(AliQA::GetTaskName(task))) ;
return rv ;
}
char inputFileName[20] ;
sprintf(inputFileName, "Merged.%s.%d.root", AliQA::GetQADataFileName(), runNumber) ;
inputFile = TFile::Open(inputFileName) ;
- rv = SaveIt2OCDB(inputFile) ;
+ rv = SaveIt2OCDB(runNumber, inputFile) ;
} else {
for (Int_t index = 0; index < AliQA::kNDET; index++) {
if (sdet.Contains(AliQA::GetDetName(index))) {
char inputFileName[20] ;
sprintf(inputFileName, "%s.%s.%d.%d.root", AliQA::GetDetName(index), AliQA::GetQADataFileName(), runNumber, cycleNumber) ;
inputFile = TFile::Open(inputFileName) ;
- rv *= SaveIt2OCDB(inputFile) ;
+ rv *= SaveIt2OCDB(runNumber, inputFile) ;
}
}
}
}
//_____________________________________________________________________________
-Bool_t AliQADataMakerSteer::SaveIt2OCDB(TFile * inputFile) const
+Bool_t AliQADataMakerSteer::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile) 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())) ;
AliCDBManager* man = AliCDBManager::Instance() ;
- man->SetDefaultStorage(AliQA::GetQARefStorage()) ;
-
+ if ( ! man->IsDefaultStorageSet() ) {
+ man->SetDefaultStorage(AliQA::GetQARefDefaultStorage()) ;
+ man->SetSpecificStorage(Form("%s/*", AliQA::GetQAOCDBDirName()), AliQA::GetQARefStorage()) ;
+ }
for ( Int_t detIndex = 0 ; detIndex < AliQA::kNDET ; detIndex++) {
TDirectory * detDir = inputFile->GetDirectory(AliQA::GetDetName(detIndex)) ;
if ( detDir ) {
AliInfo(Form("Entering %s", detDir->GetName())) ;
- char detOCDBDir[20] ;
- sprintf(detOCDBDir, "QA/Ref/%s", AliQA::GetDetName(detIndex)) ;
- AliCDBId idr(detOCDBDir,0,999999999) ;
+ char detOCDBDir[20] ;
+ sprintf(detOCDBDir, "%s/%s/%s", AliQA::GetQAOCDBDirName(), AliQA::GetDetName(detIndex), AliQA::GetRefOCDBDirName()) ;
+ AliCDBId idr(detOCDBDir, runNumber, 999999999) ;
TList * listDetQAD = new TList() ;
char listName[20] ;
sprintf(listName, "%s QA data Reference", AliQA::GetDetName(detIndex)) ;
while ( (taskKey = dynamic_cast<TKey*>(nextTask())) ) {
TDirectory * taskDir = detDir->GetDirectory(taskKey->GetName()) ;
AliInfo(Form("Saving %s", taskDir->GetName())) ;
- TList * listTaskQAD = new TList() ;
+ TObjArray * listTaskQAD = new TObjArray(100) ;
listTaskQAD->SetName(taskKey->GetName()) ;
listDetQAD->Add(listTaskQAD) ;
TList * histList = taskDir->GetListOfKeys() ;
AliQADataMakerSteer(const AliQADataMakerSteer & qas) ;
AliQADataMakerSteer & operator = (const AliQADataMakerSteer & qas) ;
virtual ~AliQADataMakerSteer() ;
- TList * GetFromOCDB(AliQA::DETECTORINDEX det, AliQA::TASKINDEX task) const ;
+ TObjArray * GetFromOCDB(AliQA::DETECTORINDEX det, AliQA::TASKINDEX task) const ;
Bool_t Merge(const Int_t runNumber = -1) const ;
void Reset() ;
Bool_t Run(const char * detectors, const AliQA::TASKINDEX taskIndex, const char * fileName = NULL) ;
Bool_t InitRunLoader() ;
Bool_t IsSelected(const char * detName) ;
Bool_t Finish(const AliQA::TASKINDEX taskIndex) ;
- Bool_t SaveIt2OCDB(TFile * inputFile) const ;
+ Bool_t SaveIt2OCDB(const Int_t runNumber, TFile * inputFile) const ;
Bool_t fCycleSame ; //! true if 2 consecutive data making for a same detector