#include "AliRawReaderRoot.h"
#include "AliRun.h"
#include "AliRunLoader.h"
+#include "AliRunTag.h"
ClassImp(AliQADataMakerSteer)
//_____________________________________________________________________________
-AliQADataMakerSteer::AliQADataMakerSteer(char * mode, const char* gAliceFilename, const char * name, const char * title) :
+AliQADataMakerSteer::AliQADataMakerSteer(const Char_t * mode, const Char_t* gAliceFilename, const Char_t * name, const Char_t * title) :
TNamed(name, title),
fCurrentEvent(0),
fCycleSame(kFALSE),
fRawReader(NULL),
fRawReaderDelete(kTRUE),
fRunLoader(NULL),
- fTasks("")
+ fTasks(""),
+ fEventSpecie(AliRecoParam::kDefault)
{
// default ctor
fMaxEvents = fNumberOfEvents ;
fLoader[iDet] = NULL ;
fQADataMaker[iDet] = NULL ;
fQACycles[iDet] = 999999 ;
- fQAWriteExpert[iDet] = kFALSE ;
+ fQAWriteExpert[iDet] = kTRUE ;
}
}
}
fRawReader(NULL),
fRawReaderDelete(kTRUE),
fRunLoader(NULL),
- fTasks(qas.fTasks)
+ fTasks(qas.fTasks),
+ fEventSpecie(qas.fEventSpecie)
{
// cpy ctor
for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
AliQADataMaker * qadm = GetQADataMaker(iDet) ;
if (!qadm) continue; // This detector doesn't have any QA (for example, HLT)
if ( qadm->IsCycleDone() ) {
- qadm->EndOfCycle(taskIndex) ;
+ qadm->EndOfCycle(taskIndex) ;
}
TTree * data = NULL ;
AliLoader* loader = GetLoader(qadm->GetUniqueID());
for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
if (IsSelected(AliQA::GetDetName(iDet))) {
AliQADataMaker * qadm = GetQADataMaker(iDet) ;
- if (qadm) qadm->EndOfCycle(taskIndex) ;
+ if (qadm)
+ qadm->EndOfCycle(taskIndex) ;
}
}
return kTRUE ;
}
//_____________________________________________________________________________
-AliQADataMaker * AliQADataMakerSteer::GetQADataMaker(const Int_t iDet)
+AliQA * AliQADataMakerSteer::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) ;
+ TFile * tagFile = TFile::Open(fileName) ;
+ if ( !tagFile ) {
+ AliError(Form("File %s not found", fileName)) ;
+ return NULL ;
+ }
+ TTree * tagTree = dynamic_cast<TTree *>(tagFile->Get("T")) ;
+ if ( !tagTree ) {
+ AliError(Form("Tree T not found in %s", fileName)) ;
+ tagFile->Close() ;
+ return NULL ;
+ }
+ AliRunTag * tag = new AliRunTag ;
+ tagTree->SetBranchAddress("AliTAG", &tag) ;
+ tagTree->GetEntry(evt) ;
+ AliQA * qa = AliQA::Instance(tag->GetQALength(), tag->GetQA(), tag->GetESLength(), tag->GetEventSpecies()) ;
+ tagFile->Close() ;
+ return qa ;
+}
+
+//_____________________________________________________________________________
+AliQADataMaker * AliQADataMakerSteer::GetQADataMaker(const Int_t iDet)
{
// get the quality assurance data maker for a detector
- if (fQADataMaker[iDet])
+ if (fQADataMaker[iDet]) {
+ fQADataMaker[iDet]->SetEventSpecie(fEventSpecie) ;
return fQADataMaker[iDet] ;
+ }
AliQADataMaker * qadm = NULL ;
qadm->SetName(AliQA::GetDetName(iDet));
qadm->SetUniqueID(iDet);
fQADataMaker[iDet] = qadm;
+ qadm->SetEventSpecie(fEventSpecie) ;
return qadm;
}
qadm->SetName(AliQA::GetDetName(iDet));
qadm->SetUniqueID(iDet);
fQADataMaker[iDet] = qadm;
+ qadm->SetEventSpecie(fEventSpecie) ;
return qadm;
}
qadm->SetName(AliQA::GetDetName(iDet));
qadm->SetUniqueID(iDet);
fQADataMaker[iDet] = qadm ;
+ qadm->SetEventSpecie(fEventSpecie) ;
}
-
- return qadm ;
+
+ return qadm ;
}
//_____________________________________________________________________________
}
}
+//_____________________________________________________________________________
+void AliQADataMakerSteer::EndOfCycle(TString detectors)
+{
+ // End of cycle QADataMakers
+
+ for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
+ if (IsSelected(AliQA::GetDetName(iDet))) {
+ AliQADataMaker * qadm = GetQADataMaker(iDet) ;
+ if (!qadm)
+ continue ;
+ // skip non active detectors
+ if (!detectors.Contains(AliQA::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))) ;
+ }
+ qadm->Finish();
+ }
+ }
+}
+
//_____________________________________________________________________________
void AliQADataMakerSteer::Increment()
{
{
// Initialize the event source and QA data makers
- //fTasks = AliQA::GetTaskName(taskIndex) ;
+ fTasks += Form("%d", taskIndex) ;
if (taskIndex == AliQA::kRAWS) {
if (!fRawReader) {
fMaxEvents = fNumberOfEvents ;
} else if (taskIndex == AliQA::kESDS) {
fTasks = AliQA::GetTaskName(AliQA::kESDS) ;
- if (!gSystem->AccessPathName("AliESDs.root")) { // AliESDs.root exists
- TFile * esdFile = TFile::Open("AliESDs.root") ;
- fESDTree = dynamic_cast<TTree *> (esdFile->Get("esdTree")) ;
- if ( !fESDTree ) {
- AliError("esdTree not found") ;
- return kFALSE ;
- } else {
- fESD = new AliESDEvent() ;
- fESD->ReadFromTree(fESDTree) ;
- fESDTree->GetEntry(0) ;
- fRunNumber = fESD->GetRunNumber() ;
- fNumberOfEvents = fESDTree->GetEntries() ;
- if ( fMaxEvents < 0 )
- fMaxEvents = fNumberOfEvents ;
- }
- } else {
- AliError("AliESDs.root not found") ;
- return kFALSE ;
- }
- } else {
- if ( !InitRunLoader() ) {
- AliWarning("No Run Loader not found") ;
- } else {
- fNumberOfEvents = fRunLoader->GetNumberOfEvents() ;
- if ( fMaxEvents < 0 )
- fMaxEvents = fNumberOfEvents ;
- }
- }
+ if (!gSystem->AccessPathName("AliESDs.root")) { // AliESDs.root exists
+ TFile * esdFile = TFile::Open("AliESDs.root") ;
+ fESDTree = dynamic_cast<TTree *> (esdFile->Get("esdTree")) ;
+ if ( !fESDTree ) {
+ AliError("esdTree not found") ;
+ return kFALSE ;
+ } else {
+ fESD = new AliESDEvent() ;
+ fESD->ReadFromTree(fESDTree) ;
+ fESDTree->GetEntry(0) ;
+ fRunNumber = fESD->GetRunNumber() ;
+ fNumberOfEvents = fESDTree->GetEntries() ;
+ if ( fMaxEvents < 0 )
+ fMaxEvents = fNumberOfEvents ;
+ }
+ } else {
+ AliError("AliESDs.root not found") ;
+ return kFALSE ;
+ }
+ } else {
+ if ( !InitRunLoader() ) {
+ AliWarning("No Run Loader not found") ;
+ } else {
+ fNumberOfEvents = fRunLoader->GetNumberOfEvents() ;
+ if ( fMaxEvents < 0 )
+ fMaxEvents = fNumberOfEvents ;
+ }
+ }
- // Get Detectors
- TObjArray* detArray = NULL ;
+ // Get Detectors
+ TObjArray* detArray = NULL ;
if (fRunLoader) // check if RunLoader exists
if ( fRunLoader->GetAliRun() ) { // check if AliRun exists in gAlice.root
detArray = fRunLoader->GetAliRun()->Detectors() ;
if ( ! AliGeomManager::GetGeometry() )
AliGeomManager::LoadGeometry() ;
- InitQADataMaker(fRunNumber, fRecoParam, detArray) ; //, fCycleSame, kTRUE, detArray) ;
+ InitQADataMaker(fRunNumber, detArray) ; //, fCycleSame, kTRUE, detArray) ;
return kTRUE ;
}
//_____________________________________________________________________________
-void AliQADataMakerSteer::InitQADataMaker(UInt_t run, const AliRecoParam & par, TObjArray * detArray)
+void AliQADataMakerSteer::InitQADataMaker(UInt_t run, TObjArray * detArray)
{
// Initializes The QADataMaker for all active detectors and for all active tasks
-
for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
if (IsSelected(AliQA::GetDetName(iDet))) {
AliQADataMaker * qadm = GetQADataMaker(iDet) ;
- if (fQAWriteExpert[iDet])
- qadm->SetWriteExpert() ;
if (!qadm) {
AliError(Form("AliQADataMaker not found for %s", AliQA::GetDetName(iDet))) ;
fDetectorsW.ReplaceAll(AliQA::GetDetName(iDet), "") ;
} else {
+ if (fQAWriteExpert[iDet])
+ qadm->SetWriteExpert() ;
AliDebug(1, Form("Data Maker found for %s", qadm->GetName())) ;
// skip non active detectors
if (detArray) {
if (!det || !det->IsActive())
continue ;
}
+ if (fQAWriteExpert[iDet]) qadm->SetWriteExpert() ;
// Set default reco params
- qadm->SetRecoParam(par.GetDetRecoParam(iDet));
Bool_t sameCycle = kFALSE ;
for (UInt_t taskIndex = 0; taskIndex < AliQA::kNTASKINDEX; taskIndex++) {
if ( fTasks.Contains(Form("%d", taskIndex)) ) {
- qadm->StartOfCycle(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex)), run, sameCycle) ;
qadm->Init(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex)), GetQACycles(qadm->GetUniqueID())) ;
+ qadm->StartOfCycle(AliQA::GetTaskIndex(AliQA::GetTaskName(taskIndex)), run, sameCycle) ;
sameCycle = kTRUE ;
}
}
// Merge all the cycles from all detectors in one single file per run
TString cmd ;
if (runNumber == -1)
- cmd = Form(".! ls *%s*.%d.*.root > tempo.txt", AliQA::GetQADataFileName(), runNumber) ;
+ cmd = Form(".! ls *%s*.%d.root > tempo.txt", AliQA::GetQADataFileName(), runNumber) ;
else
- cmd = Form(".! ls *%s*.*.*.root > tempo.txt", AliQA::GetQADataFileName()) ;
+ cmd = Form(".! ls *%s*.*.root > tempo.txt", AliQA::GetQADataFileName()) ;
gROOT->ProcessLine(cmd.Data()) ;
ifstream in("tempo.txt") ;
const Int_t runMax = 10 ;
TString file[AliQA::kNDET*runMax] ;
- Int_t run[AliQA::kNDET*runMax] = {-1} ;
Int_t index = 0 ;
while ( 1 ) {
AliError(Form("run number %d not found", runNumber)) ;
return kFALSE ;
}
-
- Int_t runIndex = 0 ;
- Int_t runIndexMax = 0 ;
- TString stmp(Form(".%s.", AliQA::GetQADataFileName())) ;
- for (Int_t ifile = 0 ; ifile < index ; ifile++) {
- TString tmp(file[ifile]) ;
- tmp.ReplaceAll(".root", "") ;
- TString det = tmp(0, tmp.Index(".")) ;
- tmp.Remove(0, tmp.Index(stmp)+4) ;
- TString ttmp = tmp(0, tmp.Index(".")) ;
- Int_t newRun = ttmp.Atoi() ;
- for (Int_t irun = 0; irun <= runIndexMax; irun++) {
- if (newRun == run[irun])
- break ;
- run[runIndex] = newRun ;
- runIndex++ ;
- }
- runIndexMax = runIndex ;
- ttmp = tmp(tmp.Index(".")+1, tmp.Length()) ;
- Int_t cycle = ttmp.Atoi() ;
- AliDebug(1, Form("%s : det = %s run = %d cycle = %d \n", file[ifile].Data(), det.Data(), newRun, cycle)) ;
- }
- for (Int_t irun = 0 ; irun < runIndexMax ; irun++) {
- TFileMerger merger ;
- TString outFileName(Form("Merged.%s.Data.%d.root",AliQA::GetQADataFileName(),run[irun]));
- merger.OutputFile(outFileName.Data()) ;
- for (Int_t ifile = 0 ; ifile < index-1 ; ifile++) {
- TString pattern(Form("%s.%d.", AliQA::GetQADataFileName(), run[irun])) ;
- TString tmp(file[ifile]) ;
- if (tmp.Contains(pattern)) {
- merger.AddFile(tmp) ;
- }
- }
- merger.Merge() ;
+
+ TFileMerger merger ;
+ TString outFileName(Form("Merged.%s.Data.%d.root",AliQA::GetQADataFileName(),runNumber));
+ merger.OutputFile(outFileName.Data()) ;
+ for (Int_t ifile = 0 ; ifile < index-1 ; ifile++) {
+ TString pattern(Form("%s.%d.", AliQA::GetQADataFileName(), runNumber));
+ TString tmp(file[ifile]) ;
+ if (tmp.Contains(pattern)) {
+ merger.AddFile(tmp) ;
+ }
}
-
+ merger.Merge() ;
return kTRUE ;
}
rawReader->RewindEvents() ;
}
- if ( !Init(AliQA::kRAWS) )
- return kFALSE ;
- fRawReaderDelete = kFALSE ;
+ if (!fCycleSame)
+ if ( !Init(AliQA::kRAWS) )
+ return kFALSE ;
+ fRawReaderDelete = kFALSE ;
DoIt(AliQA::kRAWS) ;
return fDetectorsW ;
}
}
- if ( !Init(AliQA::kRAWS, fileName) )
- return kFALSE ;
+ if (!fCycleSame)
+ if ( !Init(AliQA::kRAWS, fileName) )
+ return kFALSE ;
DoIt(AliQA::kRAWS) ;
return fDetectorsW ;
if ( taskIndex == AliQA::kNULLTASKINDEX) {
for (UInt_t task = 0; task < AliQA::kNTASKINDEX; task++) {
if ( fTasks.Contains(Form("%d", task)) ) {
- if ( !Init(AliQA::GetTaskIndex(AliQA::GetTaskName(task)), fileName) )
- return kFALSE ;
- DoIt(AliQA::GetTaskIndex(AliQA::GetTaskName(task))) ;
+ if (!fCycleSame)
+ if ( !Init(AliQA::GetTaskIndex(AliQA::GetTaskName(task)), fileName) )
+ return kFALSE ;
+ DoIt(AliQA::GetTaskIndex(AliQA::GetTaskName(task))) ;
}
}
} else {
- if ( !Init(taskIndex, fileName) )
- return kFALSE ;
- DoIt(taskIndex) ;
- }
+ if (! fCycleSame )
+ if ( !Init(taskIndex, fileName) )
+ return kFALSE ;
+ DoIt(taskIndex) ;
+ }
return fDetectorsW ;
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)));
}
}
//_____________________________________________________________________________
-Bool_t AliQADataMakerSteer::Save2OCDB(const Int_t runNumber, const char * year, const Int_t cycleNumber, const char * detectors) const
+Bool_t AliQADataMakerSteer::Save2OCDB(const Int_t runNumber, AliRecoParam::EventSpecie_t es, const char * year, const char * detectors) const
{
// take the locasl QA data merge into a single file and save in OCDB
Bool_t rv = kTRUE ;
rv = Merge(runNumber) ;
if ( ! rv )
return kFALSE ;
- TString inputFileName(Form("Merged.%s.%d.root", AliQA::GetQADataFileName(), runNumber)) ;
+ TString inputFileName(Form("Merged.%s.Data.%d.root", AliQA::GetQADataFileName(), runNumber)) ;
inputFile = TFile::Open(inputFileName.Data()) ;
- rv = SaveIt2OCDB(runNumber, inputFile, year) ;
+ 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.%d.root", AliQA::GetDetName(index), AliQA::GetQADataFileName(), runNumber, cycleNumber)) ;
+ TString inputFileName(Form("%s.%s.%d.root", AliQA::GetDetName(index), AliQA::GetQADataFileName(), runNumber)) ;
inputFile = TFile::Open(inputFileName.Data()) ;
- rv *= SaveIt2OCDB(runNumber, inputFile, year) ;
+ rv *= SaveIt2OCDB(runNumber, inputFile, year, es) ;
}
}
}
}
//_____________________________________________________________________________
-Bool_t AliQADataMakerSteer::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile, const char * year) const
+Bool_t AliQADataMakerSteer::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile, const char * 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 ;
TDirectory * detDir = inputFile->GetDirectory(AliQA::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())) ;
AliCDBId idr(detOCDBDir.Data(), runNumber, AliCDBRunRange::Infinity()) ;
TList * listDetQAD = new TList() ;
TString listName(Form("%s QA data Reference", AliQA::GetDetName(detIndex))) ;
- mdr.SetComment("HMPID QA stuff");
+ mdr.SetComment(Form("%s QA stuff", AliQA::GetDetName(detIndex)));
listDetQAD->SetName(listName) ;
TList * taskList = detDir->GetListOfKeys() ;
TIter nextTask(taskList) ;
TKey * taskKey ;
while ( (taskKey = dynamic_cast<TKey*>(nextTask())) ) {
TDirectory * taskDir = detDir->GetDirectory(taskKey->GetName()) ;
- AliInfo(Form("Saving %s", taskDir->GetName())) ;
+ TDirectory * esDir = taskDir->GetDirectory(AliRecoParam::GetEventSpecieName(es)) ;
+ AliInfo(Form("Saving %s", esDir->GetName())) ;
TObjArray * listTaskQAD = new TObjArray(100) ;
- listTaskQAD->SetName(taskKey->GetName()) ;
+ listTaskQAD->SetName(Form("%s/%s", taskKey->GetName(), AliRecoParam::GetEventSpecieName(es))) ;
listDetQAD->Add(listTaskQAD) ;
- TList * histList = taskDir->GetListOfKeys() ;
+ TList * histList = esDir->GetListOfKeys() ;
TIter nextHist(histList) ;
TKey * histKey ;
while ( (histKey = dynamic_cast<TKey*>(nextHist())) ) {
- TObject * odata = taskDir->Get(histKey->GetName()) ;
+ 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() ) {
+ TDirectory * expertDir = esDir->GetDirectory(histKey->GetName()) ;
+ TList * expertHistList = expertDir->GetListOfKeys() ;
+ TIter nextExpertHist(expertHistList) ;
+ TKey * expertHistKey ;
+ while ( (expertHistKey = dynamic_cast<TKey*>(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())) ;
+ if ( expertOdata->IsA()->InheritsFrom("TH1") ) {
+ AliInfo(Form("Adding %s", expertHistKey->GetName())) ;
+ TH1 * hExpertdata = static_cast<TH1*>(expertOdata) ;
+ listTaskQAD->Add(hExpertdata) ;
+ }
+ }
+ }
+ }
AliInfo(Form("Adding %s", histKey->GetName())) ;
if ( odata->IsA()->InheritsFrom("TH1") ) {
AliInfo(Form("Adding %s", histKey->GetName())) ;
}
//_____________________________________________________________________________
-void AliQADataMakerSteer::SetRecoParam(const char* detector, AliDetectorRecoParam *par)
+void AliQADataMakerSteer::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) ;
+}
+
+//_____________________________________________________________________________
+void AliQADataMakerSteer::SetRecoParam(const Int_t det, const AliDetectorRecoParam *par)
{
// Set custom reconstruction parameters for a given detector
// Single set of parameters for all the events
- for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
- if(!strcmp(detector, AliQA::GetDetName(iDet))) {
- par->SetAsDefault();
- fRecoParam.AddDetRecoParam(iDet,par);
- break;
- }
- }
+ GetQADataMaker(det)->SetRecoParam(par) ;
}