Writing all the QA results in a single root file
authorschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Oct 2007 15:51:22 +0000 (15:51 +0000)
committerschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Oct 2007 15:51:22 +0000 (15:51 +0000)
STEER/AliQA.cxx
STEER/AliQA.h
STEER/AliQAChecker.cxx

index e515f56bd418ce28d9481ade3f73deace49299d6..a4c5de4f92a1db00618b5b766a20ecdc46140a9a 100644 (file)
@@ -39,6 +39,7 @@
 // --- AliRoot header files ---
 #include "AliLog.h"
 #include "AliQA.h"
+#include "AliQAChecker.h"
 
 
 ClassImp(AliQA)
@@ -52,17 +53,21 @@ ClassImp(AliQA)
 //____________________________________________________________________________
 AliQA::AliQA() : 
   TNamed("", ""), 
-  fQA(0x0), 
+  fNdet(kNDET), 
+  fQA(new ULong_t[fNdet]), 
   fDet(kNULLDET),
   fTask(kNULLTASK)
 {
   // default constructor
   // beware singleton: not to be used
+  for (Int_t index = 0 ; index < fNdet ; index++) 
+       fQA[index] = 0 ; 
 }
 
 //____________________________________________________________________________
 AliQA::AliQA(const AliQA& qa) :
   TNamed(qa),
+  fNdet(qa.fNdet), 
   fQA(qa.fQA), 
   fDet(qa.fDet),
   fTask(qa.fTask)
@@ -82,8 +87,9 @@ AliQA& AliQA::operator = (const AliQA& qa)
 
 //_______________________________________________________________
 AliQA::AliQA(const DETECTORINDEX det) :
-  TNamed("QA", "Quality Assurance status"), 
-  fQA(new ULong_t[kNDET]), 
+  TNamed("QA", "Quality Assurance status"),
+  fNdet(kNDET),  
+  fQA(new ULong_t[fNdet]), 
   fDet(det),
   fTask(kNULLTASK)
 {
@@ -93,14 +99,15 @@ AliQA::AliQA(const DETECTORINDEX det) :
     return ;
   } 
   Int_t index ; 
-  for (index = 0; index < kNDET; index++) 
+  for (index = 0; index < fNdet; index++) 
     fQA[index] = 0 ; 
 }
   
 //_______________________________________________________________
 AliQA::AliQA(const ALITASK tsk) :
   TNamed("QA", "Quality Assurance status"), 
-  fQA(new ULong_t[kNDET]), 
+  fNdet(kNDET),
+  fQA(new ULong_t[fNdet]), 
   fDet(kNULLDET),
   fTask(tsk)
 {
@@ -110,7 +117,7 @@ AliQA::AliQA(const ALITASK tsk) :
     return ;
   } 
   Int_t index ; 
-  for (index = 0; index < kNDET; index++) 
+  for (index = 0; index < fNdet; index++) 
     fQA[index] = 0 ; 
 }
 
@@ -261,8 +268,12 @@ AliQA * AliQA::Instance(const DETECTORINDEX det)
 {
   // Get an instance of the singleton. The only authorized way to call the ctor
   
-  if ( ! fgQA)
-    fgQA = new AliQA(det) ;
+  if ( ! fgQA) {
+    TFile * f = AliQAChecker::GetQAResultFile() ; 
+       fgQA = dynamic_cast<AliQA *>(f->Get("QA")) ; 
+    if ( ! fgQA ) 
+               fgQA = new AliQA(det) ;
+  }            
   fgQA->Set(det) ;
   return fgQA ;
 }
index 9c11de794658d961d5651aa773ab62716bc9e2de..aad43646cdf7d8c2d79667f79767413db158da69 100644 (file)
@@ -50,10 +50,10 @@ public:
   static const TString   GetTaskName(TASKINDEX tsk) { return fgTaskNames[tsk] ; }
   static const char *    GetDetName(Int_t det) ;
   static TFile *         GetQADMOutFile(const char * name, const Int_t run, const Int_t cycle) ; 
+  const Bool_t           IsSet(DETECTORINDEX det, ALITASK tsk, QABIT bit) const ;
   void                   Set(QABIT bit) ;
   void                   Show() const { ShowStatus(fDet) ; }
   void                   ShowAll() const ;
-  void                   print() { printf("%d %x\n", kNDET, fQA) ; } 
 
 private:      
 
@@ -63,7 +63,6 @@ private:
   const char *         GetBitName(QABIT bit) const ;
   const ULong_t        GetStatus(DETECTORINDEX det) const  { return fQA[det] ;}
   void                 Finish() const ;  
-  const Bool_t         IsSet(DETECTORINDEX det, ALITASK tsk, QABIT bit) const ;
   const ULong_t        Offset(ALITASK tsk) const ;
   virtual void         ShowStatus(DETECTORINDEX det) const ;
   void                 ResetStatus(DETECTORINDEX det) { fQA[det] = 0 ; }
@@ -73,7 +72,8 @@ private:
   void                 SetStatusBit(DETECTORINDEX det, ALITASK tsk, QABIT bit) ;
 
   static AliQA *fgQA              ; // pointer to the instance of the singleton
-  ULong_t    *       fQA          ; //[kNDET] the status word 4 bits for SIM, REC, ESD, ANA each
+  Int_t              fNdet        ; // number of detectors
+  ULong_t    *       fQA          ; //[fNdet] the status word 4 bits for SIM, REC, ESD, ANA each
   DETECTORINDEX      fDet         ; //!  the current detector (ITS, TPC, ....)
   ALITASK            fTask        ; //!  the current environment (SIM, REC, ESD, ANA)
   static TFile *     fgDataFile   ; //! the output file where the quality assurance maker store their results
index 8967d5ff3c4b3e37aa2525409f40ee2a1492934e..8ff6cced51661d8748fef9748e9130ddc83588b4 100644 (file)
@@ -87,6 +87,7 @@ AliQAChecker::~AliQAChecker()
 {
 // clean up
   delete [] fCheckers ; 
+  fgQAResultFile->Close() ; 
 }
 
 //_____________________________________________________________________________