X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliQAv1.cxx;h=787831f818536e78f83f364da7edc49198b5234f;hb=cd507f9c8fa4e4cd6ce5d6efe7d567d1cb0c5da8;hp=f4856f39d7f9e1907b4b7ac3f05537c430381693;hpb=6188eeaf388ad9890525fcd105f69659cc4e5224;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliQAv1.cxx b/STEER/AliQAv1.cxx index f4856f39d7f..787831f8185 100644 --- a/STEER/AliQAv1.cxx +++ b/STEER/AliQAv1.cxx @@ -61,7 +61,7 @@ TString AliQAv1::fgDetNames[] = {"ITS", "TPC", "TRD", "TOF", "P "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"} ; +TString AliQAv1::fgModeNames[] = {"", "Sim", "Rec", "QA"} ; const TString AliQAv1::fgkLabLocalFile = "file://" ; const TString AliQAv1::fgkLabLocalOCDB = "local://" ; const TString AliQAv1::fgkLabAliEnOCDB = "alien://" ; @@ -72,9 +72,9 @@ 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 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" ; @@ -288,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 "" ; } //_______________________________________________________________ @@ -321,6 +320,7 @@ const char * AliQAv1::GetBitName(QABIT_t bit) const TString bitName ; switch (bit) { case kNULLBit: + bitName = "NONE" ; break ; case kINFO: bitName = "INFO" ; @@ -471,27 +471,44 @@ TFile * AliQAv1::GetQADataFile(const char * fileName) //_______________________________________________________________ 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 ; } //_______________________________________________________________ @@ -586,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() ; } @@ -610,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) ; } @@ -725,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) { @@ -791,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 ; @@ -840,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++) { @@ -855,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))) ; + } } //_______________________________________________________________