Fixes for bug #49914: Compilation breaks in trunk, and bug #48629: Trunk cannot read...
[u/mrichter/AliRoot.git] / ACORDE / AliACORDEQAChecker.cxx
index 892ebe7..b8486de 100755 (executable)
 
 // --- AliRoot header files ---
 #include "AliLog.h"
-#include "AliQA.h"
+#include "AliQAv1.h"
 #include "AliQAChecker.h"
 #include "AliACORDEQAChecker.h"
+#include "AliCDBEntry.h"
+#include "AliQAManager.h"
 
 ClassImp(AliACORDEQAChecker)
 
-//__________________________________________________________________
+//____________________________________________________________________________
+Double_t * AliACORDEQAChecker::Check(AliQAv1::ALITASK_t /*index*/)
+{
+  Double_t * rv = new Double_t[AliRecoParam::kNSpecies] ; 
+  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
+    rv[specie] = 0.0 ; 
+  return rv ;  
+}
 
-const Double_t AliACORDEQAChecker::Check(AliQA::ALITASK_t /*index*/, TObjArray * list)
+//__________________________________________________________________
+Double_t * AliACORDEQAChecker::Check(AliQAv1::ALITASK_t /*index*/, TObjArray ** list)
 {
 
+       // We added one check to the ACORDE's QA histograms:
+       // 1.- We check if they are empty
+       // we check for the reference histogram to start the QAChecker. If not QAref object
+       // is found, we check that the number of hits per channel is not so far from
+       // the maximum number of hits.
+  Double_t * test = new Double_t[AliRecoParam::kNSpecies] ; 
+  Int_t * count   = new Int_t[AliRecoParam::kNSpecies] ; 
+  Double_t * acoTest = new Double_t[AliRecoParam::kNSpecies];
+  Double_t acoHitsNorm = 0;
+ Double_t * acoRefTest = new Double_t[AliRecoParam::kNSpecies];
 
-// Super-basic check on the QA histograms on the input list: 
-  // look whether they are empty!
-  Double_t test = 0.0  ;
-  Int_t count = 0 ; 
-  
-  if (list->GetEntries() == 0){  
-    test = 1. ; // nothing to check
+       // Look at the QAref data for ACORDE
+
+       char * acoOCDBDir = Form("ACORDE/%s/%s",AliQAv1::GetRefOCDBDirName(),AliQAv1::GetRefDataDirName());
+       AliCDBEntry *acoQARefDir = AliQAManager::QAManager()->Get(acoOCDBDir);
+
+
+  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
+    test[specie]    = 0.0 ; 
+    count[specie] = 0 ; 
+       acoTest[specie] = 0.0;
   }
-  else {
-    TIter next(list) ; 
-    TH1 * hdata ;
-    count = 0 ; 
-    while ( (hdata = dynamic_cast<TH1 *>(next())) ) {
-      if (hdata) { 
-       Double_t rv = 0.;
-       if(hdata->GetEntries()>0)rv=1; 
-       AliInfo(Form("%s -> %f", hdata->GetName(), rv)) ; 
-       count++ ; 
-       test += rv ; 
-      }
-      else{
-       AliError("Data type cannot be processed") ;
-      }
-      
+  
+  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
+    if (list[specie]->GetEntries() == 0){  
+      test[specie] = 1. ; // nothing to check
+       acoTest[specie] = 1.;
     }
-    if (count != 0) { 
-      if (test==0) {
-       AliWarning("Histograms are there, but they are all empty: setting flag to kWARNING");
-       test = 0.5;  //upper limit value to set kWARNING flag for a task
+    else {
+      TIter next(list[specie]) ; 
+      TH1 * hdata ;
+      while ( (hdata = dynamic_cast<TH1 *>(next())) ) {
+        if (hdata) { 
+          Double_t rv = 0.0 ; 
+          if(hdata->GetEntries()>0)rv=1; 
+          AliInfo(Form("%s -> %f", hdata->GetName(), rv)) ; 
+          count[specie]++ ; 
+          test[specie] += rv ; 
+       
+
+       // here we implement the second version for ACORDEQAChecker
+       // by the moment we only compare that the hits in every ACORDE's channel
+       // are close and > 0 
+       for (Int_t i=0;i<60;i++)
+       {
+               acoHitsNorm =  hdata->GetBinContent(i)/hdata->GetMaximum();
+               if  (acoQARefDir)
+               {
+       //              AliWarning("Using the QA Reference data for ACORDE !!!");
+                       test[specie] = CheckAcordeRefHits(list[specie],(TObjArray *)acoQARefDir->GetObject());
+                       if ((test[specie] = 0.86) || (acoHitsNorm>0.50)) 
+                       {
+                               acoRefTest[specie]=0.78;//printf("testMario: %f\n",acoRefTest[specie]);printf("histo:%f\n",hdata->GetMaximum());
+                       }
+               }else{
+       //      AliWarning("Using the inner ACORDE QA Checker !!!");
+               if ( (acoHitsNorm>0.40) && (acoHitsNorm<=1) ) acoTest[specie] = 0.75;
+               if ( (acoHitsNorm>0.0020) && (acoHitsNorm<=0.40) ) acoTest[specie] = 0.251;
+               if ( (acoHitsNorm>0.0) && (acoHitsNorm<=0.0020) ) acoTest[specie] = 0.0010;
+               if ( (acoHitsNorm>-1.0) && (acoHitsNorm<=0.0) ) acoTest[specie] = -0.5;
+               }
+       }
+        }
+        else{
+          AliError("Data type cannot be processed") ;
+        }
       }
-      else {
-       test /= count ;
+      if (count[specie] != 0) { 
+        if (test[specie]==0) {
+         // AliWarning("Histograms are there, but they are all empty: setting flag to kWARNING");
+          test[specie] = 0.5;  //upper limit value to set kWARNING flag for a task
+        }
+        else {
+       if (acoQARefDir) test[specie] = acoRefTest[specie];
+       else{
+       test[specie] = acoTest[specie];//printf("testDyMa: %f\n",test[specie]);
+       }
+        }
       }
     }
+   // AliInfo(Form("Test Result = %f", test[specie])) ; 
   }
-
-  AliInfo(Form("Test Result = %f", test)) ; 
   return test ; 
-
-
-
 }
-
+Double_t AliACORDEQAChecker::CheckAcordeRefHits(TObjArray *AcordeList, TObjArray * /*AcordeRef */) const
+{
+       Double_t acoTest = 0;
+       TIter next(AcordeList);
+       TH1 *histo;
+       for (Int_t i=0;i<60;i++)
+       {
+               while ( (histo = dynamic_cast<TH1 *>(next())) )
+               {       
+                 if (histo->GetMaximum() && ((histo->GetBinContent(i)/histo->GetMaximum())<1.0) ) acoTest = 0.86;
+//             if( histo->KolmogorovTest((TH1F *)AcordeRef->At(0))<0.8)  acoTest = 0.86;
+                       //printf("href:%f\n",histo->GetMaximum());
+               }
+       }       
+       return acoTest;
+}