]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliQualAss.cxx
Small fixes. Clean-up.
[u/mrichter/AliRoot.git] / STEER / AliQualAss.cxx
index 16aa20bdb76ba1de75e55392491b39ef00359297..04bdc4f31a4b0552fc85ddc064b3bffe5ff5ba3c 100644 (file)
 
 ClassImp(AliQualAss)
 
-  AliQualAss * AliQualAss::fgQA          = 0x0 ;
-  TFile      * AliQualAss::fgOutput      = 0x0 ;   
-  TString      AliQualAss::fgOutputName  = "QA.root" ;   
+  AliQualAss * AliQualAss::fgQA        = 0x0 ;
+  TFile      * AliQualAss::fgDataFile  = 0x0 ;   
+  TString      AliQualAss::fgDataName  = "QAData" ;   
+  TString      AliQualAss::fgDetNames[]  = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD",
+                                       "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"} ;   
+  TString      AliQualAss::fgTaskNames[]  = {"Raws", "Hits", "SDigits", "Digits", "RecPoints", "TrackSegments", "RecParticles", "ESDs"} ;   
 
 //____________________________________________________________________________
 AliQualAss::AliQualAss() : 
@@ -81,7 +84,26 @@ AliQualAss& AliQualAss::operator = (const AliQualAss& qa)
 }
 
 //_______________________________________________________________
-AliQualAss::AliQualAss(ALITASK tsk) :
+AliQualAss::AliQualAss(const DETECTORINDEX det) :
+  TNamed("QA", "Quality Assurance status"), 
+  fNdet(12), 
+  fQA(0x0), 
+  fDet(det),
+  fTask(kNULLTASK)
+{
+  // constructor to be used
+  if (! CheckRange(det) ) {
+    fDet = kNULLDET ; 
+    return ;
+  } else 
+    fQA = new ULong_t[kNDET] ;
+  Int_t index ; 
+  for (index = 0; index < kNDET; index++) 
+    fQA[index] = 0 ; 
+}
+  
+//_______________________________________________________________
+AliQualAss::AliQualAss(const ALITASK tsk) :
   TNamed("QA", "Quality Assurance status"), 
   fNdet(12), 
   fQA(0x0), 
@@ -92,12 +114,11 @@ AliQualAss::AliQualAss(ALITASK tsk) :
   if (! CheckRange(tsk) ) {
     fTask = kNULLTASK ; 
     return ;
-  } else {
-    fQA = new ULong_t[fNdet] ;
-    Int_t index ;
-    for ( index = 0 ; index <= fNdet ; index++)
-      ResetStatus(DETECTORINDEX(index)) ;
-  }
+  } else 
+    fQA = new ULong_t[kNDET] ;
+  Int_t index ; 
+  for (index = 0; index < kNDET; index++) 
+    fQA[index] = 0 ; 
 }
 
 //____________________________________________________________________________
@@ -112,7 +133,7 @@ const Bool_t AliQualAss::CheckRange(DETECTORINDEX det) const
 { 
   // check if detector is in given detector range: 0-fNdet
 
-  Bool_t rv = ( det < 0 || det > fNdet )  ? kFALSE : kTRUE ;
+  Bool_t rv = ( det < 0 || det > kNDET )  ? kFALSE : kTRUE ;
   if (!rv)
     AliFatal(Form("Detector index %d is out of range: 0 <= index <= %d", det, kNDET)) ;
   return rv ;
@@ -122,7 +143,7 @@ const Bool_t AliQualAss::CheckRange(DETECTORINDEX det) const
 const Bool_t AliQualAss::CheckRange(ALITASK task) const
 { 
   // check if task is given taskk range: 0:kNTASK
-  Bool_t rv = ( task < kSIM || task > kNTASK )  ? kFALSE : kTRUE ;
+  Bool_t rv = ( task < kRAW || task > kNTASK )  ? kFALSE : kTRUE ;
   if (!rv)
     AliFatal(Form("Module index %d is out of range: 0 <= index <= %d", task, kNTASK)) ;
   return rv ;
@@ -139,92 +160,54 @@ const Bool_t AliQualAss::CheckRange(QABIT bit) const
   return rv ;
 }
 
+
 //_______________________________________________________________
-const char * AliQualAss::GetDetectorName(DETECTORINDEX det) const
+TFile * AliQualAss::GetQADMOutFile(Int_t run, Int_t cycle) 
 {
-  // returns the char name corresponding to detector index
-
-  char * detName = "";
-  switch (det) {
-  case kNULLDET:
-    break ; 
-  case kITS:
-    detName = "ITS" ;
-    break ;
-  case kTPC:
-    detName = "TPC" ;
-    break ;
-  case kTRD:
-    detName = "TRD" ;
-    break ;
-  case kTOF:
-    detName = "TOF" ;
-    break ;
-  case kPHOS:
-    detName = "PHOS" ;
-    break ;
-  case kHMPID:
-    detName = "HMPID" ;
-    break ;
-  case kEMCAL:
-    detName = "EMCAL" ;
-    break ;
-  case kMUON:
-    detName = "MUON" ;
-    break ;
-  case kFMD:
-    detName = "FMD" ;
-    break ;
-  case kZDC:
-    detName = "ZDC" ;
-    break ;
-  case kPMD:
-    detName = "PMD" ;
-    break ;
-  case kT0:
-    detName = "TO" ;
-    break ;
-  case kVZERO:
-    detName = "VZERO" ;
-    break ;
-  case kACORDE:
-    detName = "ACORDE" ;
-    break ;
-  case kHLT:
-    detName = "HLT" ;
-    break ;
-  default:
-    AliError(Form("%d is not a valid detector index %d <= index <= %d\n", det, 0, kNDET-1)) ;
-    break ;
+  // opens the file to store the detectors Quality Assurance Data Maker results
+  char temp[100] ; 
+  sprintf(temp, "%s_%d_%d.root", fgDataName.Data(), run, cycle) ; 
+  TString opt ; 
+  if (! fgDataFile ) {     
+    if  (gSystem->AccessPathName(temp))
+      opt = "NEW" ;
+    else 
+      opt = "UPDATE" ; 
+    fgDataFile = TFile::Open(temp, opt.Data()) ;
+  } else {
+   if ( (strcmp(temp, fgDataFile->GetName()) != 0) ) {
+     if  (gSystem->AccessPathName(temp))
+      opt = "NEW" ;
+    else 
+      opt = "UPDATE" ; 
+    fgDataFile = TFile::Open(temp, opt.Data()) ;
+   }
   }
-  return detName ;
-}
+  return fgDataFile ; 
+} 
 
 //_______________________________________________________________
-TFile * AliQualAss::GetQADMOutFile(
+const char * AliQualAss::GetDetName(Int_t det
 {
-  // opens the file to store the detectors Quality Assurance Data Maker results
+       // returns the detector name corresponding to a given index (needed in a loop)
 
-  if (! fgOutput ) {     
-        char opt[6] ; 
-     if  (gSystem->AccessPathName(fgOutputName.Data()))
-         sprintf(opt, "%s", "NEW") ;
-     else 
-      sprintf(opt, "%s", "UPDATE") ; 
-    
-     fgOutput = TFile::Open(fgOutputName.Data(), opt) ;
-  }
-  return fgOutput ; 
-} 
+       if ( det >= 0 &&  det < kNDET) 
+               return (fgDetNames[det]).Data() ; 
+       else 
+               return NULL ; 
+}
 
 //_______________________________________________________________
-const char * AliQualAss::GetTaskName(ALITASK tsk) const
+const char * AliQualAss::GetAliTaskName(ALITASK tsk)
 {
   // returns the char name corresponding to module index
-  char * tskName = "" ;
+  TString tskName ;
   switch (tsk) {
   case kNULLTASK:
     break ; 
+  case kRAW:
+    tskName = "RAW" ;
+    break ;  
   case kSIM:
     tskName = "SIM" ;
     break ;
@@ -238,10 +221,10 @@ const char * AliQualAss::GetTaskName(ALITASK tsk) const
     tskName = "ANA" ;
     break ;
   default:
-    AliError(Form("%d is not a valid module index %d <= index <= %d\n", tsk, 0, kNTASK-1)) ;
+    tsk = kNULLTASK ; 
     break ;
   }
-  return tskName ;
+  return tskName.Data() ;
 }
 
 //_______________________________________________________________
@@ -281,16 +264,18 @@ AliQualAss * AliQualAss::Instance()
 }
 
 //_______________________________________________________________
-AliQualAss * AliQualAss::Instance(DETECTORINDEX det)
+AliQualAss * AliQualAss::Instance(const DETECTORINDEX det)
 {
   // Get an instance of the singleton. The only authorized way to call the ctor
   
+  if ( ! fgQA)
+    fgQA = new AliQualAss(det) ;
   fgQA->Set(det) ;
   return fgQA ;
 }
 
 //_______________________________________________________________
-AliQualAss * AliQualAss::Instance(ALITASK tsk)
+AliQualAss * AliQualAss::Instance(const ALITASK tsk)
 {
   // get an instance of the singleton.
 
@@ -298,7 +283,10 @@ AliQualAss * AliQualAss::Instance(ALITASK tsk)
     switch (tsk) {
     case kNULLTASK:
       break ;
-    case kSIM:
+       case kRAW:
+      fgQA = new AliQualAss(tsk) ;
+      break ;
+       case kSIM:
       fgQA = new AliQualAss(tsk) ;
       break ;
     case kREC:
@@ -329,18 +317,21 @@ const ULong_t AliQualAss::Offset(ALITASK tsk) const
   switch (tsk) {
   case kNULLTASK:
     break ;
-  case kSIM:
+  case kRAW:
     offset+= 0 ;
     break ;
-  case kREC:
+  case kSIM:
     offset+= 4 ;
     break ;
-  case kESD:
+  case kREC:
     offset+= 8 ;
     break ;
-  case kANA:
+  case kESD:
     offset+= 12 ;
     break ;
+  case kANA:
+    offset+= 16 ;
+    break ;
   case kNTASK:
     break ;
   }
@@ -392,6 +383,6 @@ void AliQualAss::ShowStatus(DETECTORINDEX det) const
   ULong_t esdStatus = status & 0x0f00 ;
   ULong_t anaStatus = status & 0xf000 ;
 
-  AliInfo(Form("QA Status for %s sim=0x%x, rec=0x%x, esd=0x%x, ana=0x%x\n", GetDetectorName(det), simStatus, recStatus, esdStatus, anaStatus )) ;
+  AliInfo(Form("QA Status for %s sim=0x%x, rec=0x%x, esd=0x%x, ana=0x%x\n", GetDetName(det).Data(), simStatus, recStatus, esdStatus, anaStatus )) ;
 }