X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliQAv1.cxx;h=787831f818536e78f83f364da7edc49198b5234f;hb=fcffef80fcd6908f1302e25f9a64d3644c8349e1;hp=07a3e3cc8a5fe2441085257f6944ceedc54180ed;hpb=eca4fa66e575b53a72c027046dc9ea60487c3240;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliQAv1.cxx b/STEER/AliQAv1.cxx index 07a3e3cc8a5..787831f8185 100644 --- a/STEER/AliQAv1.cxx +++ b/STEER/AliQAv1.cxx @@ -36,6 +36,7 @@ // --- ROOT system --- #include #include +#include #include #include @@ -47,35 +48,37 @@ ClassImp(AliQAv1) -AliQAv1 * AliQAv1::fgQA = 0x0 ; -TFile * AliQAv1::fgQADataFile = 0x0 ; -TString AliQAv1::fgQADataFileName = "QA" ; // will transform into Det.QA.run.root -TFile * AliQAv1::fgQARefFile = 0x0 ; -TString AliQAv1::fgQARefDirName = "" ; -TString AliQAv1::fgQARefFileName = "QA.root" ; -TFile * AliQAv1::fgQAResultFile = 0x0 ; -TString AliQAv1::fgQAResultDirName = "" ; -TString AliQAv1::fgQAResultFileName = "QA.root" ; -TString AliQAv1::fgDetNames[] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", - "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT", "Global", "CORR"} ; -TString AliQAv1::fgGRPPath = "GRP/GRP/Data" ; -TString AliQAv1::fgTaskNames[] = {"Raws", "Hits", "SDigits", "Digits", "DigitsR", "RecPoints", "TrackSegments", "RecParticles", "ESDs"} ; -const TString AliQAv1::fgkLabLocalFile = "file://" ; -const TString AliQAv1::fgkLabLocalOCDB = "local://" ; -const TString AliQAv1::fgkLabAliEnOCDB = "alien://" ; -const TString AliQAv1::fgkRefFileName = "QA.root" ; -const TString AliQAv1::fgkQAName = "QA" ; -const TString AliQAv1::fgkQACorrNtName = "CorrQA" ; -const TString AliQAv1::fgkRefOCDBDirName = "QA" ; -TString AliQAv1::fgRefDataDirName = "" ; -const TString AliQAv1::fgkQARefOCDBDefault = "alien://folder=/alice/QA/20" ; -const TString AliQAv1::fgkExpert = "Expert" ; -const UInt_t AliQAv1::fgkExpertBit = 0x40000 ; -const UInt_t AliQAv1::fgkQABit = 0x80000 ; -const UInt_t AliQAv1::fgkImageBit = 0x100000 ; -const Int_t AliQAv1::fgkQADebugLevel = 99 ; -const TString AliQAv1::fImageFileName = "QAImage" ; -const TString AliQAv1::fImageFileFormat = "eps" ; +AliQAv1 * AliQAv1::fgQA = 0x0 ; +TFile * AliQAv1::fgQADataFile = 0x0 ; +TString AliQAv1::fgQADataFileName = "QA" ; // will transform into Det.QA.run.root +TFile * AliQAv1::fgQARefFile = 0x0 ; +TString AliQAv1::fgQARefDirName = "" ; +TString AliQAv1::fgQARefFileName = "QA.root" ; +TFile * AliQAv1::fgQAResultFile = 0x0 ; +TString AliQAv1::fgQAResultDirName = "" ; +TString AliQAv1::fgQAResultFileName = "QA.root" ; +TString AliQAv1::fgDetNames[] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", + "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT", "Global", "CORR"} ; +TString AliQAv1::fgGRPPath = "GRP/GRP/Data" ; +TString AliQAv1::fgTaskNames[] = {"Raws", "Hits", "SDigits", "Digits", "DigitsR", "RecPoints", "TrackSegments", "RecParticles", "ESDs"} ; +TString AliQAv1::fgModeNames[] = {"", "Sim", "Rec", "QA"} ; +const TString AliQAv1::fgkLabLocalFile = "file://" ; +const TString AliQAv1::fgkLabLocalOCDB = "local://" ; +const TString AliQAv1::fgkLabAliEnOCDB = "alien://" ; +const TString AliQAv1::fgkRefFileName = "QA.root" ; +const TString AliQAv1::fgkQAName = "QA" ; +const TString AliQAv1::fgkQACorrNtName = "CorrQA" ; +const TString AliQAv1::fgkRefOCDBDirName = "QA" ; +TString AliQAv1::fgRefDataDirName = "" ; +const TString AliQAv1::fgkQARefOCDBDefault = "alien://folder=/alice/QA/20" ; +const TString AliQAv1::fgkExpert = "Expert" ; +const UInt_t AliQAv1::fgkExpertBit = BIT(19); +const UInt_t AliQAv1::fgkQABit = BIT(20) ; +const UInt_t AliQAv1::fgkImageBit = BIT(21) ; +const Int_t AliQAv1::fgkQADebugLevel = 99 ; +const TString AliQAv1::fImageFileName = "QAImage" ; +const TString AliQAv1::fImageFileFormat = "ps" ; +const UShort_t AliQAv1::fgkMaxQAObjects = 10000 ; //____________________________________________________________________________ AliQAv1::AliQAv1() : @@ -285,30 +288,29 @@ Bool_t AliQAv1::CheckRange(AliRecoParam::EventSpecie_t es) const const char * AliQAv1::GetAliTaskName(ALITASK_t tsk) { // returns the char name corresponding to module index - TString tskName ; switch (tsk) { case kNULLTASK: break ; case kRAW: - tskName = "RAW" ; + return "RAW" ; break ; case kSIM: - tskName = "SIM" ; + return "SIM" ; break ; case kREC: - tskName = "REC" ; + return "REC" ; break ; case kESD: - tskName = "ESD" ; + return "ESD" ; break ; case kANA: - tskName = "ANA" ; + return "ANA" ; break ; default: - tsk = kNULLTASK ; + return "" ; break ; } - return tskName.Data() ; + return "" ; } //_______________________________________________________________ @@ -318,6 +320,7 @@ const char * AliQAv1::GetBitName(QABIT_t bit) const TString bitName ; switch (bit) { case kNULLBit: + bitName = "NONE" ; break ; case kINFO: bitName = "INFO" ; @@ -338,6 +341,25 @@ const char * AliQAv1::GetBitName(QABIT_t bit) const return bitName.Data() ; } +//_______________________________________________________________ +TH1 * AliQAv1::GetData(TObjArray** list, Int_t index, AliRecoParam::EventSpecie_t eventSpecie) +{ + // retrieve QA data from the list at a given index and for a given event specie + TH1 * rv = NULL ; + Int_t esindex = AliRecoParam::AConvert(eventSpecie) ; + TObjArray * arr = list[esindex] ; + if (arr) { + if ( index > AliQAv1::GetMaxQAObj() ) { + AliErrorClass(Form("Max number of authorized QA objects is %d", AliQAv1::GetMaxQAObj())) ; + } else { + if ( arr->At(index) ) { + rv = static_cast(arr->At(index)) ; + } + } + } + return rv ; +} + //_______________________________________________________________ AliQAv1::DETECTORINDEX_t AliQAv1::GetDetIndex(const char * name) { @@ -391,46 +413,102 @@ TFile * AliQAv1::GetQADataFile(const char * name, Int_t run) return fgQADataFile ; } +//_____________________________________________________________________________ +AliQAv1::MODE_t AliQAv1::Mode(TASKINDEX_t task) { + // return "rec" or "sim" depending on the task + + switch (task) { + case AliQAv1::kRAWS: + return kRECMODE ; + break; + case AliQAv1::kHITS: + return kSIMMODE ; + break; + case AliQAv1::kSDIGITS: + return kSIMMODE ; + break; + case AliQAv1::kDIGITS: + return kSIMMODE ; + break; + case AliQAv1::kDIGITSR: + return kRECMODE ; + break; + case AliQAv1::kRECPOINTS: + return kRECMODE ; + break ; + case AliQAv1::kTRACKSEGMENTS: + return kRECMODE ; + break; + case AliQAv1::kRECPARTICLES: + return kRECMODE ; + break; + case AliQAv1::kESDS: + return kRECMODE ; + break; + default: + break; + } + return AliQAv1::kNULLMODE; +} + //_____________________________________________________________________________ TFile * AliQAv1::GetQADataFile(const char * fileName) { // Open if necessary the Data file and return its pointer - if (!fgQADataFile) - if (!fileName) - fileName = AliQAv1::GetQADataFileName() ; - if (!gSystem->AccessPathName(fileName)) { - fgQADataFile = TFile::Open(fileName) ; - } else { - AliFatalClass(Form("File %s not found", fileName)) ; - } + if (!fgQADataFile) { + if (!fileName) + fileName = AliQAv1::GetQADataFileName() ; + if (!gSystem->AccessPathName(fileName)) { + fgQADataFile = TFile::Open(fileName) ; + } else { + AliFatalClass(Form("File %s not found", fileName)) ; + } + } return fgQADataFile ; } //_______________________________________________________________ TFile * AliQAv1::GetQAResultFile() { - // opens the file to store the Quality Assurance Data Checker results - if (fgQAResultFile) - fgQAResultFile->Close() ; - fgQAResultFile = 0x0 ; -// if (!fgQAResultFile) { - TString dirName(fgQAResultDirName) ; - if ( dirName.Contains(fgkLabLocalFile)) - dirName.ReplaceAll(fgkLabLocalFile, "") ; - TString fileName(dirName + fgQAResultFileName) ; - TString opt("") ; - if ( !gSystem->AccessPathName(fileName) ) - opt = "UPDATE" ; - else { - if ( gSystem->AccessPathName(dirName) ) - gSystem->mkdir(dirName) ; - opt = "NEW" ; - } - fgQAResultFile = TFile::Open(fileName, opt) ; -// } - - return fgQAResultFile ; + // opens the file to store the Quality Assurance Data Checker results + if (fgQAResultFile) { + if (fgQAResultFile->IsOpen()) + fgQAResultFile->Close(); + delete fgQAResultFile; + } + TString dirName(fgQAResultDirName) ; + if ( dirName.Contains(fgkLabLocalFile)) + dirName.ReplaceAll(fgkLabLocalFile, "") ; + TString fileName(dirName + fgQAResultFileName) ; + TString opt("") ; + if ( !gSystem->AccessPathName(fileName) ) + opt = "UPDATE" ; + else { + if ( gSystem->AccessPathName(dirName) ) + gSystem->mkdir(dirName) ; + opt = "NEW" ; + } + fgQAResultFile = TFile::Open(fileName, opt) ; + return fgQAResultFile ; +} + +//_______________________________________________________________ +AliQAv1::QABIT_t AliQAv1::GetQAStatusBit(AliRecoParam::EventSpecie_t es, DETECTORINDEX_t det, ALITASK_t tsk) const +{ + // returns the QA bit set + QABIT_t rv = kNULLBit ; + if ( es == AliRecoParam::kDefault) + es = fEventSpecie ; + if ( det == kNULLDET ) + det = fDet ; + if ( tsk == kNULLTASK ) + tsk = fTask ; + for (Int_t bit = kINFO ; bit < kNBIT ; bit++) { + if (IsSet(det, tsk, es, QABIT_t(bit))) + rv = QABIT_t(bit) ; + } + return rv ; } //_______________________________________________________________ @@ -525,8 +603,8 @@ AliQAv1 * AliQAv1::Instance() // Get an instance of the singleton. The only authorized way to call the ctor if ( ! fgQA) { - TFile * f = GetQAResultFile() ; - fgQA = static_cast(f->Get("QA")) ; + GetQAResultFile() ; + fgQA = static_cast(fgQAResultFile->Get("QA")) ; if ( ! fgQA ) fgQA = new AliQAv1() ; } @@ -549,8 +627,8 @@ AliQAv1 * AliQAv1::Instance(const DETECTORINDEX_t det) // Get an instance of the singleton. The only authorized way to call the ctor if ( ! fgQA) { - TFile * f = GetQAResultFile() ; - fgQA = static_cast(f->Get("QA")) ; + GetQAResultFile() ; + fgQA = static_cast(fgQAResultFile->Get(GetQAName())) ; if ( ! fgQA ) fgQA = new AliQAv1(det) ; } @@ -664,6 +742,23 @@ ULong_t AliQAv1::Offset(ALITASK_t tsk) const return offset ; } +//_______________________________________________________________ +void AliQAv1::Reset(DETECTORINDEX_t det, ALITASK_t tsk, AliRecoParam::EventSpecie_t es) +{ + // resets all the bits for a given tsk and event specie + CheckRange(det) ; + CheckRange(tsk) ; + CheckRange(es) ; + + ULong_t offset = Offset(tsk) ; + ULong_t status = GetStatus(det, es) ; + for ( Int_t bit = 0 ; bit < kNBIT ; bit++) { + offset+= bit ; + status = status & ~1 << offset ; + } + SetStatus(det, es, status) ; +} + //_______________________________________________________________ void AliQAv1::ResetStatus(DETECTORINDEX_t det) { @@ -730,7 +825,9 @@ void AliQAv1::SetStatusBit(DETECTORINDEX_t det, ALITASK_t tsk, AliRecoParam::Eve CheckRange(tsk) ; CheckRange(bit) ; CheckRange(es) ; - + + Reset(det, tsk, es) ; + ULong_t offset = Offset(tsk) ; ULong_t status = GetStatus(det, es) ; offset+= bit ; @@ -779,7 +876,7 @@ void AliQAv1::ShowStatus(DETECTORINDEX_t det, ALITASK_t tsk, AliRecoParam::Event tskStatus[kESD] = status & 0x0f000 ; tskStatus[kANA] = status & 0xf0000 ; - AliInfo(Form("====> QA Status for %8s %8s raw =0x%x, sim=0x%x, rec=0x%x, esd=0x%x, ana=0x%x", GetDetName(det).Data(), AliRecoParam::GetEventSpecieName(es), + AliInfo(Form("====> QA Status for %8s %8s raw =0x%lx, sim=0x%lx, rec=0x%lx, esd=0x%lx, ana=0x%lx", GetDetName(det).Data(), AliRecoParam::GetEventSpecieName(es), tskStatus[kRAW], tskStatus[kSIM], tskStatus[kREC], tskStatus[kESD], tskStatus[kANA] )) ; if (tsk == kNULLTASK) { for (Int_t itsk = kRAW ; itsk < kNTASK ; itsk++) { @@ -794,15 +891,11 @@ void AliQAv1::ShowStatus(DETECTORINDEX_t det, ALITASK_t tsk, AliRecoParam::Event void AliQAv1::ShowASCIIStatus(AliRecoParam::EventSpecie_t es, DETECTORINDEX_t det, ALITASK_t tsk, const ULong_t status) const { // print the QA status in human readable format - TString text; - for (Int_t bit = kINFO ; bit < kNBIT ; bit++) { - if (IsSet(det, tsk, es, QABIT_t(bit))) { - text = GetBitName(QABIT_t(bit)) ; - text += " " ; - } - } - if (! text.IsNull()) - AliInfoClass(Form(" %8s %8s %4s 0x%4lx, Problem signalled: %8s \n", AliRecoParam::GetEventSpecieName(es), GetDetName(det).Data(), GetAliTaskName(tsk), status, text.Data())) ; + const QABIT_t bit = GetQAStatusBit(es, det, tsk) ; + if ( bit != kNULLBit ) { + AliInfoClass(Form(" %8s %8s %4s \n", AliRecoParam::GetEventSpecieName(es), GetDetName(det).Data(), GetAliTaskName(tsk))) ; + AliInfoClass(Form(" %8s %8s %4s 0x%4lx, Problem signalled: %8s \n", AliRecoParam::GetEventSpecieName(es), GetDetName(det).Data(), GetAliTaskName(tsk), status, GetBitName(bit))) ; + } } //_______________________________________________________________