Made QA images persistent objects
authorschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 May 2009 13:10:34 +0000 (13:10 +0000)
committerschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 May 2009 13:10:34 +0000 (13:10 +0000)
STEER/AliQADataMaker.cxx
STEER/AliQADataMaker.h
STEER/AliQADataMakerRec.cxx
STEER/AliQADataMakerRec.h
STEER/AliQADataMakerSim.cxx

index a54acbc..7a96edf 100644 (file)
@@ -24,6 +24,7 @@
 //
 
 // --- ROOT system ---
+#include <TCanvas.h> 
 #include <TSystem.h> 
 #include <TFile.h>
 #include <TList.h> 
@@ -66,12 +67,16 @@ AliQADataMaker::AliQADataMaker(const char * name, const char * title) :
   fWriteExpert(kFALSE),
   fParameterList(new TList*[AliRecoParam::kNSpecies]), 
   fRun(0), 
-  fEventSpecie(AliRecoParam::kDefault)
+  fEventSpecie(AliRecoParam::kDefault), 
+  fImage(new TCanvas*[AliRecoParam::kNSpecies]), 
+  fPrintImage(kFALSE) 
 {
   // ctor
   fDetectorDirName = GetName() ; 
-  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
-    fParameterList[specie] = NULL ; 
+    for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
+      fParameterList[specie] = NULL ; 
+      fImage[specie] = NULL ; 
+    }
 }
 
 //____________________________________________________________________________ 
@@ -86,12 +91,28 @@ AliQADataMaker::AliQADataMaker(const AliQADataMaker& qadm) :
   fWriteExpert(qadm.fWriteExpert),
   fParameterList(qadm.fParameterList),  
   fRun(qadm.fRun), 
-  fEventSpecie(qadm.fEventSpecie)
+  fEventSpecie(qadm.fEventSpecie), 
+  fImage(qadm.fImage),  
+  fPrintImage(kFALSE)
+
 {
   //copy ctor
   fDetectorDirName = GetName() ; 
 }
 
+//____________________________________________________________________________ 
+AliQADataMaker::~AliQADataMaker()
+{
+  for (Int_t esIndex = 0 ; esIndex < AliRecoParam::kNSpecies ; esIndex++) {
+    if ( fImage[esIndex] ) 
+      delete fImage[esIndex] ;
+    if (fParameterList[esIndex] )
+      delete fParameterList[esIndex] ; 
+  }
+  delete[] fImage ; 
+  delete[] fParameterList ; 
+}
+
 //____________________________________________________________________________
 Int_t AliQADataMaker::Add2List(TH1 * hist, const Int_t index, TObjArray ** list, const Bool_t expert, const Bool_t image, const Bool_t saveForCorr) 
 { 
index 38c5517..18b0e94 100644 (file)
@@ -18,6 +18,7 @@
 #include <TH1.h>
 #include <TObjArray.h>
 #include <TNamed.h>  
+class TCanvas ; 
 class TClonesArray;
 class TDirectory;
 class TFile;  
@@ -39,7 +40,7 @@ public:
        
        AliQADataMaker(const char * name="", const char * title="") ;          // ctor
        AliQADataMaker(const AliQADataMaker& qadm) ;   
-       virtual ~AliQADataMaker() {} // dtor
+       virtual ~AliQADataMaker() ; // dtor
   
        virtual Int_t Add2DigitsList(TH1 * hist, const Int_t index, const Bool_t expert = kFALSE, const Bool_t image = kFALSE)          = 0 ; 
        virtual Int_t Add2ESDsList(TH1 * hist, const Int_t index, const Bool_t expert = kFALSE, const Bool_t image = kFALSE)            = 0 ; 
@@ -54,6 +55,8 @@ public:
        virtual TH1 *       GetDigitsData(const Int_t index)                       = 0 ; 
        virtual TH1 *       GetESDsData(const Int_t index)                         = 0 ; 
        virtual TH1 *       GetHitsData(const Int_t index)                         = 0 ; 
+  TCanvas **          GetImage() { return fImage ; }
+  TCanvas *           GetImage(AliRecoParam::EventSpecie_t es) { return fImage[AliRecoParam::AConvert(es)] ; }
        virtual TH1 *       GetRecPointsData(const Int_t index)                    = 0 ; 
        virtual TH1 *       GetRawsData(const Int_t index)                         = 0 ; 
        virtual TH1 *       GetSDigitsData(const Int_t index)                      = 0 ; 
@@ -74,6 +77,7 @@ public:
   Bool_t              WriteExpert() { return fWriteExpert ; }
   void                SetEventSpecie(AliRecoParam::EventSpecie_t es) { fEventSpecie = es ; }
   void                SetEventSpecie(Int_t es) { fEventSpecie = AliRecoParam::Convert(es) ; }
+  void                SetPrintImage(Bool_t opt = kTRUE) { fPrintImage = opt ; }
   virtual void        SetRecoParam(const AliDetectorRecoParam *) {;}
 
          
@@ -116,11 +120,13 @@ protected:
   TList **       fParameterList ;   //! list of QA data parameters
        Int_t          fRun ;             //! run number
   AliRecoParam::EventSpecie_t fEventSpecie ; //! event specie, see AliRecoParam
+  TCanvas **     fImage ;           //[AliRecoParam::kNSpecies] 
+  Bool_t         fPrintImage ;      //! flag to print the images or not
 private:
        AliQADataMaker& operator = (const AliQADataMaker& /*qadm*/); // Not implemented
 
   
- ClassDef(AliQADataMaker,1)  // description 
+ ClassDef(AliQADataMaker,2)  // description 
 
 };
 
index 54e08cb..73d0782 100644 (file)
@@ -48,9 +48,9 @@ ClassImp(AliQADataMakerRec)
 //____________________________________________________________________________ 
 AliQADataMakerRec::AliQADataMakerRec(const char * name, const char * title) : 
   AliQADataMaker(name, title), 
+  fDigitsQAList(NULL),
   fESDsQAList(NULL), 
   fRawsQAList(NULL), 
-  fDigitsQAList(NULL),
   fRecPointsQAList(NULL),
   fCorrNt(NULL), 
   fRecoParam(NULL) 
@@ -62,9 +62,9 @@ AliQADataMakerRec::AliQADataMakerRec(const char * name, const char * title) :
 //____________________________________________________________________________ 
 AliQADataMakerRec::AliQADataMakerRec(const AliQADataMakerRec& qadm) :
   AliQADataMaker(qadm.GetName(), qadm.GetTitle()), 
+  fDigitsQAList(qadm.fDigitsQAList),
   fESDsQAList(qadm.fESDsQAList),
   fRawsQAList(qadm.fRawsQAList),
-  fDigitsQAList(qadm.fDigitsQAList),
   fRecPointsQAList(qadm.fRecPointsQAList),
   fCorrNt(qadm.fCorrNt),  
   fRecoParam(qadm.fRecoParam) 
@@ -197,7 +197,6 @@ void AliQADataMakerRec::EndOfCycle(AliQAv1::TASKINDEX_t task)
     }
     fOutput->Save() ; 
        }
-  if ( AliDebugLevel()  == AliQAv1::GetQADebugLevel() ) 
     MakeImage(task) ; 
 }
 
@@ -252,32 +251,36 @@ void AliQADataMakerRec::MakeImage(AliQAv1::TASKINDEX_t task)
     Double_t w  = 1000 ;
     Double_t h  = 1000 ;
     for (Int_t esIndex = 0 ; esIndex < AliRecoParam::kNSpecies ; esIndex++) {
-      TCanvas * canvasQA = new TCanvas(Form("QA_%s_%s_%s", 
-                                            GetName(), 
-                                            AliQAv1::GetTaskName(task).Data(), 
-                                            AliRecoParam::GetEventSpecieName(esIndex)), 
-                                       Form("QA control plots for det=%s task=%s eventspecie=%s", 
-                                            GetName(), 
-                                            AliQAv1::GetTaskName(task).Data(), 
-                                            AliRecoParam::GetEventSpecieName(esIndex)), 
-                                       w, h) ;
-      canvasQA->SetWindowSize(w + (w - canvasQA->GetWw()), h + (h - canvasQA->GetWh())) ;
+      if ( !fImage[esIndex] ) {
+        fImage[esIndex] = new TCanvas(Form("QA_%s_%s_%s", 
+                                           GetName(), 
+                                           AliQAv1::GetTaskName(task).Data(), 
+                                           AliRecoParam::GetEventSpecieName(esIndex)), 
+                                      Form("QA control plots for det=%s task=%s eventspecie=%s", 
+                                           GetName(), 
+                                           AliQAv1::GetTaskName(task).Data(), 
+                                           AliRecoParam::GetEventSpecieName(esIndex)), 
+                                      w, h) ;
+      }
+      fImage[esIndex]->Clear() ; 
+      fImage[esIndex]->SetWindowSize(w + (w - fImage[esIndex]->GetWw()), h + (h - fImage[esIndex]->GetWh())) ;
       Int_t nx = TMath::Sqrt(nImages) ; 
       Int_t ny = nx  ; 
       if ( nx < TMath::Sqrt(nImages)) 
         ny++ ; 
-      canvasQA->Divide(nx, ny) ; 
+      fImage[esIndex]->Divide(nx, ny) ; 
       TIter nexthist(list[esIndex]) ; 
       TH1* hist = NULL ;
       Int_t npad = 1 ; 
-      canvasQA->cd(npad) ; 
+      fImage[esIndex]->cd(npad) ; 
       while ( (hist=dynamic_cast<TH1*>(nexthist())) ) {
         if(hist->TestBit(AliQAv1::GetImageBit())) {
           hist->Draw() ; 
-          canvasQA->cd(++npad) ; 
+          fImage[esIndex]->cd(++npad) ; 
         }
       }
-      canvasQA->Print() ; 
+      if (fPrintImage) 
+        fImage[esIndex]->Print() ; 
     }
   }
 }
index a464e54..eeed97c 100644 (file)
@@ -5,7 +5,6 @@
 
 
 /* $Id$ */
-
 //
 //  Base Class:
 //  Produces the data needed to calculate the quality assurance. 
index b0dcbbe..8499afa 100644 (file)
@@ -252,33 +252,36 @@ void AliQADataMakerSim::MakeImage(AliQAv1::TASKINDEX_t task)
     Double_t w  = 1000 ;
     Double_t h  = 1000 ;
     for (Int_t esIndex = 0 ; esIndex < AliRecoParam::kNSpecies ; esIndex++) {
-      TCanvas * canvasQA = new TCanvas(Form("QA_%s_%s_%s", 
-                                            GetName(), 
-                                            AliQAv1::GetTaskName(task).Data(), 
-                                            AliRecoParam::GetEventSpecieName(esIndex)), 
-                                       Form("QA control plots for det=%s task=%s eventspecie=%s", 
-                                            GetName(), 
-                                            AliQAv1::GetTaskName(task).Data(), 
-                                            AliRecoParam::GetEventSpecieName(esIndex)), 
-                                       w, h) ;
-      canvasQA->SetWindowSize(w + (w - canvasQA->GetWw()), h + (h - canvasQA->GetWh())) ;
-      Int_t nx = TMath::Sqrt(nImages) ; 
-      Int_t ny = nx  ; 
-      if ( nx < TMath::Sqrt(nImages)) 
-        ny++ ; 
-      canvasQA->Divide(nx, ny) ; 
+      if ( !fImage[esIndex] ) {
+        fImage[esIndex] = new TCanvas(Form("QA_%s_%s_%s", 
+                                           GetName(), 
+                                           AliQAv1::GetTaskName(task).Data(), 
+                                           AliRecoParam::GetEventSpecieName(esIndex)), 
+                                      Form("QA control plots for det=%s task=%s eventspecie=%s", 
+                                           GetName(), 
+                                           AliQAv1::GetTaskName(task).Data(), 
+                                           AliRecoParam::GetEventSpecieName(esIndex)), 
+                                      w, h) ;
+        fImage[esIndex]->SetWindowSize(w + (w - fImage[esIndex]->GetWw()), h + (h - fImage[esIndex]->GetWh())) ;
+        Int_t nx = TMath::Sqrt(nImages) ; 
+        Int_t ny = nx  ; 
+        if ( nx < TMath::Sqrt(nImages)) 
+          ny++ ; 
+        fImage[esIndex]->Divide(nx, ny) ; 
+      }
+      fImage[esIndex]->Clear() ; 
       TIter nexthist(list[esIndex]) ; 
       TH1* hist = NULL ;
       Int_t npad = 1 ; 
-      canvasQA->cd(npad) ; 
+      fImage[esIndex]->cd(npad) ; 
       while ( (hist=dynamic_cast<TH1*>(nexthist())) ) {
         if(hist->TestBit(AliQAv1::GetImageBit())) {
           hist->Draw() ; 
-          canvasQA->cd(++npad) ; 
+          fImage[esIndex]->cd(++npad) ; 
         }
       }
-      if ( AliDebugLevel()  == AliQAv1::GetQADebugLevel() )
-        canvasQA->Print() ; 
+      if (fPrintImage) 
+        fImage[esIndex]->Print() ; 
     }
   }
 }