]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliQAv1.cxx
patch for GCC < 4.3
[u/mrichter/AliRoot.git] / STEER / AliQAv1.cxx
index 07a3e3cc8a5fe2441085257f6944ceedc54180ed..787831f818536e78f83f364da7edc49198b5234f 100644 (file)
@@ -36,6 +36,7 @@
 // --- ROOT system ---
 #include <TClass.h>
 #include <TFile.h>
+#include <TH1.h>
 #include <TSystem.h>
 #include <TROOT.h>
 
 
 
 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<TH1*>(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<AliQAv1 *>(f->Get("QA")) ; 
+    GetQAResultFile() ; 
+    fgQA = static_cast<AliQAv1 *>(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<AliQAv1 *>(f->Get("QA")) ; 
+    GetQAResultFile() ; 
+    fgQA = static_cast<AliQAv1 *>(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))) ; 
+  }
 }
 
 //_______________________________________________________________