Let ROOT do the scaling of the monitor histograms. Recently, the logbook
authorcholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 14 Nov 2011 20:30:22 +0000 (20:30 +0000)
committercholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 14 Nov 2011 20:30:22 +0000 (20:30 +0000)
images have been scaled funny.  This has something to do with the attempt
to try to set the same scale on all histograms.  This commit makes it this
feature optional - and is by default turned off.

FMD/AliFMDQAChecker.cxx
FMD/AliFMDQAChecker.h
FMD/scripts/RunQATest.C

index 16f83f5..4453d11 100644 (file)
@@ -219,12 +219,15 @@ AliFMDQAChecker::MakeImage(TObjArray** list,
        FindMinMax(hist, hMin, hMax);
        max = TMath::Max(max, hMax);
        min = TMath::Min(min, hMin);
+       AliInfoF("Min/max of %40s: %f/%f, global -> %f/%f", 
+                hist->GetName(), hMin, hMax, min, max);
       }
     }
     break ; 
   }
-  min = TMath::Max(1e-6, min);
-  max = TMath::Max(1.0,  max);
+  AliInfoF("Global min/max=%f/%f", min, max);
+  min = TMath::Max(1e-1, min);
+  max = TMath::Max(1e5,  max);
 
   // IF no images, go on. 
   if (nImages == 0) {
@@ -248,7 +251,7 @@ AliFMDQAChecker::MakeImage(TObjArray** list,
     if(!list[specie] || list[specie]->GetEntries() <= 0 || 
        nImages <= 0) continue;
 
-    // Form the title 
+   // Form the title 
     const Char_t * title = Form("QA_%s_%s_%s", GetName(), 
                                AliQAv1::GetTaskName(task).Data(), 
                                AliRecoParam::GetEventSpecieName(specie)); 
@@ -296,7 +299,9 @@ AliFMDQAChecker::MakeImage(TObjArray** list,
     // Divide canvas 
     Int_t nx = int(nImages + .5) / 2;
     Int_t ny = 2;
+    // if (fDoScale) 
     fImage[specie]->Divide(nx, ny, 0, 0);
+    // else fImage[specie]->Divide(nx, ny);
     
     
     // Loop over histograms 
@@ -310,6 +315,10 @@ AliFMDQAChecker::MakeImage(TObjArray** list,
       // Go to sub-pad 
       TVirtualPad* pad = fImage[specie]->cd(++j);
       pad->SetRightMargin(0.01);
+      if (!fDoScale) { 
+       pad->SetLeftMargin(0.10);
+       pad->SetBottomMargin(0.10);
+      }
 
       // Check for log scale 
       Int_t logOpts = 0;
@@ -323,15 +332,20 @@ AliFMDQAChecker::MakeImage(TObjArray** list,
       if (name.Contains("readouterrors", TString::kIgnoreCase)) {
        pad->SetRightMargin(0.15);
        pad->SetBottomMargin(0.10);
-       pad->SetTopMargin(0.02);
+       // pad->SetTopMargin(0.02);
        opt="COLZ";
       }
       else {
        pad->SetGridx();
        pad->SetGridy();
-       hist->SetMinimum(min);
-       hist->SetMaximum(max);
-
+       if (fDoScale) { 
+         hist->SetMinimum(min);
+         hist->SetMaximum(max);
+       }
+       else { 
+         hist->SetMinimum();
+         hist->SetMaximum();
+       }
       }
       // Draw (As a copy)
       hist->DrawCopy(opt);
index a5c32bd..551cc8c 100644 (file)
@@ -17,7 +17,8 @@ class AliFMDQAChecker : public AliQACheckerBase
 public:
   /** Constructor */
   AliFMDQAChecker() 
-    : AliQACheckerBase("FMD","FMD Quality Assurance Checker") 
+    : AliQACheckerBase("FMD","FMD Quality Assurance Checker") ,
+      fDoScale(false)
   {}          
   /** Destructor */
   virtual ~AliFMDQAChecker() {}
@@ -44,6 +45,7 @@ public:
   void  MakeImage(TObjArray** list, 
                  AliQAv1::TASKINDEX_t task, 
                  AliQAv1::MODE_t mode);
+  void SetDoScale(Bool_t on=true) { fDoScale = on; }
 
 protected:
   /** 
@@ -66,6 +68,7 @@ protected:
   Double_t CheckRec(AliRecoParam::EventSpecie_t specie, 
                    TH1*                        hist) const;
 
+  Bool_t fDoScale;
   ClassDef(AliFMDQAChecker,0)  // Yves? what to do? 
 };
 
index ff6f3de..fbb4e85 100644 (file)
@@ -34,7 +34,9 @@ public:
   QATest()
     : AliFMDInput("galice.root"),
       fMaker(0), 
-      fArray(0)
+      fArray(0),
+      fSpecie(AliRecoParam::kLowMult), 
+      fCycleLength(-1)
   {
     for (Int_t i = 0; i < AliQAv1::kNTASKINDEX; i++)  
       fTasks[i] = AliQAv1::kNULLTASKINDEX;
@@ -161,7 +163,7 @@ public:
    */
   virtual Bool_t ProcessHits()
   {
-    fMaker->SetEventSpecie(AliRecoParam::kLowMult);
+    fMaker->SetEventSpecie(fSpecie);
     fMaker->MakeHits(fTreeH);
     return true;
   }
@@ -172,7 +174,7 @@ public:
    */
   virtual Bool_t ProcessDigits()
   {
-    fMaker->SetEventSpecie(AliRecoParam::kLowMult);
+    fMaker->SetEventSpecie(fSpecie);
     fMaker->MakeDigits(fTreeD);
     return true;
   }
@@ -183,7 +185,7 @@ public:
    */
   virtual Bool_t ProcessSDigits()
   {
-    fMaker->SetEventSpecie(AliRecoParam::kLowMult);
+    fMaker->SetEventSpecie(fSpecie);
     fMaker->MakeSDigits(fTreeS);
     return true;
   }
@@ -194,7 +196,7 @@ public:
    */
   virtual Bool_t ProcessRecPoints()
   {
-    fMaker->SetEventSpecie(AliRecoParam::kLowMult);
+    fMaker->SetEventSpecie(fSpecie);
     fMaker->MakeRecPoints(fTreeR);
     return true;
   }
@@ -205,7 +207,7 @@ public:
    */
   virtual Bool_t ProcesssESDs()
   {
-    fMaker->SetEventSpecie(AliRecoParam::kLowMult);
+    fMaker->SetEventSpecie(fSpecie);
     fMaker->MakeESDs(fESDEvent);
     return true;
   }
@@ -216,29 +218,31 @@ public:
    */
   virtual Bool_t ProcessRawDigits()
   {
-    fMaker->SetEventSpecie(AliRecoParam::kLowMult);
+    fMaker->SetEventSpecie(fSpecie);
     fMaker->MakeRaws(fReader);
     return true;
   }
-  /** 
-   * Called at the end of the job.  Runs the checkers
-   * 
-   * @return true on success 
-   */
-  virtual Bool_t Finish()
+  virtual Bool_t End()
   {
-    // --- End of cycle - this calls the checker ---------------------
-    Info("TestQA", "End of cycle");
+    Bool_t ret = AliFMDInput::End();
+    if (fCycleLength < 0) return ret;
+
+    if (!(fEventCount != 0 && (fEventCount % fCycleLength) == 0))
+      return ret;
+
+    // --- End of cycle - this calls the ecker ---------------------
+    Info("End", "End of cycle");
     for (Int_t i = 0; i < AliQAv1::kNTASKINDEX; i++) {
       if (fTasks[i] == AliQAv1::kNULLTASKINDEX) continue;
       fMaker->EndOfCycle(fTasks[i]);
     }
-  
+
     // --- Get the checker -------------------------------------------
-    Info("TestQA", "Running checker");
+    Info("End", "Running checker");
     AliQACheckerBase * checker = AliQAChecker::Instance()->
       GetDetQAChecker(AliQAv1::GetDetIndex("FMD"));
-
+    ((AliFMDQAChecker*)checker)->SetDoScale();
+    
     // --- Test: Remake plots ----------------------------------------
     for (unsigned int idx = 0; idx < AliQAv1::kNTASKINDEX; idx++) {
       // AliRecoParam::EventSpecie_t specie = AliRecoParam::ConvertIndex(es);
@@ -247,15 +251,28 @@ public:
       AliQAv1::TASKINDEX_t task = AliQAv1::TASKINDEX_t(idx); // AliQAv1::kRAWS;
       AliQAv1::MODE_t      mode = AliQAv1::kRECMODE;
       Int_t k = CalcSpeciesIndex(task);
-      Info("Init", "Array for task %d (%s) @ %d: %p", 
+      Info("End", "Array for task %d (%s) @ %d: %p", 
           task, AliQAv1::GetTaskName(task).Data(), k, fArray[k]);
       if (!fArray[k]) continue;
       fArray[k]->ls();
       checker->MakeImage(&(fArray[k]), task, mode);
     }
-    
-    
+    return ret;
+  }
+  /** 
+   * Called at the end of the job.  Runs the checkers
+   * 
+   * @return true on success 
+   */
+  virtual Bool_t Finish()
+  {
+    // --- Finish maker ----------------------------------------------
+    fMaker->Finish();
   
+    // --- Get the checker ------------------------------------------- 
+    AliQACheckerBase * checker = AliQAChecker::Instance()->
+      GetDetQAChecker(AliQAv1::GetDetIndex("FMD")); 
+
     // --- Get images from checker -----------------------------------
     AliQAv1* qa = AliQAv1::Instance();
     TObjArray* canvases = new TObjArray();
@@ -295,17 +312,19 @@ public:
 
     return true;
   }
+  void SetSpecie(AliRecoParam::EventSpecie_t s) { fSpecie = s; }
 protected:
-  AliQADataMaker*      fMaker; // Data maker 
-  AliQAv1::TASKINDEX_t fTasks[AliQAv1::kNTASKINDEX]; // Tasks to do
-  TObjArray**          fArray;
-
+  AliQADataMaker*             fMaker; // Data maker 
+  AliQAv1::TASKINDEX_t        fTasks[AliQAv1::kNTASKINDEX]; // Tasks to do
+  TObjArray**                 fArray;
+  AliRecoParam::EventSpecie_t fSpecie;
+  Int_t                       fCycleLength;
   ClassDef(QATest, 0); 
 };
 
 #else
 void
-RunQATest(const char* src, Int_t runno=0)
+RunQATest(const char* src, const char* specie="low", Int_t runno=0)
 {
   gROOT->LoadMacro("$ALICE_ROOT/FMD/scripts/Compile.C");
   gSystem->AddIncludePath("-DBUILD=1");
@@ -314,10 +333,11 @@ RunQATest(const char* src, Int_t runno=0)
   AliCDBManager* cdb = AliCDBManager::Instance();
   cdb->SetRun(runno);
   
-  QATest* qaTest = new QATest;
-  TString what(src);
-  Int_t   colon = what.Index(":");
-  TString type = "";
+  QATest*                     qaTest = new QATest;
+  TString                     what(src);
+  TString                     spec(specie);
+  Int_t                       colon = what.Index(":");
+  TString                     type = "";
   if (colon != TString::kNPOS) { 
     type = what(0, colon);
     what = what(colon+1, what.Length()-colon-1);
@@ -328,9 +348,16 @@ RunQATest(const char* src, Int_t runno=0)
     else if (what.Contains(".raw"))   type = "raw";
     else if (what.Contains(".root"))  type = "raw";
   }
-  Info("RunQATest", "type=%s, what=%s", type.Data(), what.Data());
-  type.ToLower();
+  Info("RunQATest", "type=%s, what=%s specie=%s", 
+       type.Data(), what.Data(), spec.Data());
+
+  spec.ToLower();
+  if      (spec.Contains("low"))    qaTest->SetSpecie(AliRecoParam::kLowMult);
+  else if (spec.Contains("high"))   qaTest->SetSpecie(AliRecoParam::kHighMult);
+  else if (spec.Contains("cosmic")) qaTest->SetSpecie(AliRecoParam::kCosmic);
+  else if (spec.Contains("calib"))  qaTest->SetSpecie(AliRecoParam::kCalib);
 
+  type.ToLower();
   if (type.CompareTo("esd") == 0) { 
     qaTest->AddLoad(AliFMDInput::kESD);
     qaTest->SetInputDir(what);
@@ -353,7 +380,7 @@ RunQATest(const char* src, Int_t runno=0)
     Error("RunQATest", "Unknown type='%s' in '%s'", type.Data(), src);
     return;
   }
-  qaTest->Run();
+  qaTest->Run(1000);
 }
 #endif