]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/AliZDCQAChecker.cxx
Obsolete file deleted
[u/mrichter/AliRoot.git] / ZDC / AliZDCQAChecker.cxx
index 993905472b00e72eac3b4d4597aa9e583b99fab5..811f5e53b87401a36f2c87b4c8eb342d6c3654a5 100644 (file)
 
 
 // --- ROOT system ---
-#include <TClass.h>
 #include <TH1F.h> 
-#include <TH1I.h> 
 #include <TIterator.h> 
-#include <TKey.h> 
-#include <TFile.h> 
+#include <TString.h> 
 
 // --- Standard library ---
 
 // --- AliRoot header files ---
 #include "AliLog.h"
-#include "AliQA.h"
-#include "AliQAChecker.h"
 #include "AliZDCQAChecker.h"
 
 ClassImp(AliZDCQAChecker)
@@ -43,45 +38,432 @@ AliZDCQAChecker& AliZDCQAChecker::operator = (const AliZDCQAChecker& qac )
 
 
 //____________________________________________________________________________
-const Double_t AliZDCQAChecker::Check(AliQA::ALITASK_t /*index*/, TObjArray * list) 
+const Double_t AliZDCQAChecker::Check(AliQA::ALITASK_t index, TObjArray * list) 
 {
-
-  // 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 ; 
+  // Checks the QA histograms on the input list: 
+  //
+  Double_t test=0.;
+  Int_t count=0, ntests=0; 
+  //
+  const char* taskName = AliQA::GetAliTaskName(index);
   
-  if(list->GetEntries() == 0){  
-    test = 1. ; // nothing to check
-  }
-  else {
-    TIter next(list) ; 
-    TH1 * hdata ;
-    count = 0 ; 
+  // -------------------------------------------------------------------
+  if(!(strncmp(taskName,"SIM",3))){
+  
+    if(list->GetEntries()==0){  
+      AliWarning("\tAliZDCQAChecker->The list to be checked is empty!");
+      test = 1.; // nothing to check
+      return test;
+    }
+    printf("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName);
+    
+    TIter next(list); 
+    TH1 * hdata;         
+    Double_t meanX=0., meanY=0.;
+    Double_t meanZNA=0., rmsZNA=0., meanZNC=0.;
+    Double_t meanZPA=0., rmsZPA=0., meanZPC=0.;
+    Double_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.;
+    Double_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.;
+    Float_t  res=0.;
+    Int_t    digInd=0, testgood=0;
+    //
+    count = ntests = 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 ; 
+        //printf("\tAliZDCQAChecker-> checking histo %s",hdata->GetName());
+       // Check HITS histos
+        if(!(strncmp(hdata->GetName(),"hZNCh",5))){ 
+          // hits histos
+          meanX = hdata->GetMean(1);
+          meanY = hdata->GetMean(2);
+          // check if the spot is centered
+          if((TMath::Abs(meanX)<0.2) && (TMath::Abs(meanY)<0.2)) res=1.;
+          else res=0.5;
+          test += res;
+          ntests++;
+          // 
+          //printf("\t %d performed tests, results %1.2f\n",ntests,test/ntests);
+        }
+        // Check DIGITS histos
+        else{
+          // [1] check response of ZNC vs. ZNA
+          if(digInd==0 || digInd==1){
+             if(digInd==0){
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZNA = hdata->GetMean();
+                rmsZNA = hdata->GetRMS();
+               }
+             }
+             else{
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZNC = hdata->GetMean();
+               }
+               else testgood=0;
+               // check if the response m.v. of ZNA and ZNC are equal (@ 1sigma level)
+               if(testgood==1){
+                if(TMath::Abs(meanZNA-meanZNC)<rmsZNA) res=1.;
+                else res=.5;
+                testgood=0;
+                test += res;
+                ntests++;
+                // 
+                //printf("\t %d performed tests, results %1.2f\n",ntests,test/ntests);
+               }
+               else res=0.;
+             }
+          }
+          // [2] check response of ZPC vs. ZPA
+          else if(digInd==2 || digInd==3){
+             if(digInd==2){
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZPA = hdata->GetMean();
+                rmsZPA = hdata->GetRMS();
+               }
+             }
+             else{
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZPC = hdata->GetMean();
+               }
+               // check if the response m.v. of ZPA and ZPC are equal (@ 3sigma level)
+               if(testgood==1){
+                if(TMath::Abs(meanZPA-meanZPC)<(3.*rmsZPA)) res=1.;
+                else res=.5;
+                test += res;
+                ntests++;
+                testgood=0;
+                // 
+                //printf("\t %d performed tests, results %1.2f\n",ntests,test/ntests);
+               }
+               else res=0.;
+             }
+          }
+          // [2] check PMC responses vs. summed PMQ responses
+          else if(digInd>3 && digInd<12){
+            if(digInd==4) pmQZNC = hdata->GetMean();
+            else if(digInd==5) pmQZNA = hdata->GetMean();
+            else if(digInd==6) pmQZPC = hdata->GetMean();
+            else if(digInd==7) pmQZPA = hdata->GetMean();
+            else if(digInd==8){
+              pmCZNC = hdata->GetMean();
+              if(TMath::Abs(pmQZNC-pmCZNC)<(0.1*(pmQZNC+pmCZNC)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+              // 
+              //printf("\t %d performed tests, results %1.2f\n",ntests,test/ntests);
+            }
+            else if(digInd==9){
+              pmCZNA = hdata->GetMean();
+              if(TMath::Abs(pmQZNA-pmCZNA)<(0.1*(pmQZNA+pmCZNA)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+              // 
+              //printf("\t %d performed tests, results %1.2f\n",ntests,test/ntests);
+            }
+            else if(digInd==10){
+              pmCZPC = hdata->GetMean();
+              if(TMath::Abs(pmQZPC-pmCZPC)<(0.1*(pmQZPC+pmCZPC)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+              // 
+              //printf("\t %d performed tests, results %1.2f\n",ntests,test/ntests);
+            }
+            else if(digInd==11){
+              pmCZPA = hdata->GetMean();
+              if(TMath::Abs(pmQZPA-pmCZPA)<(0.1*(pmQZPA+pmCZPA)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+              // 
+              //printf("\t %d performed tests, results %1.2f\n",ntests,test/ntests);
+            }
+          }
+          //
+          digInd++;
+        }
+        //
+        count++;
       }
       else{
-       AliError("Data type cannot be processed") ;
+        AliError("AliZDCQAChecker-> No histos!!!\n");
       }
     }
-    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
+    if(ntests!=0) test = test/ntests;
+    printf("\n\tAliZDCQAChecker-> QA check result = %1.2f\n",test);
+  }
+  
+  // -------------------------------------------------------------------
+  else if(!(strncmp(taskName,"RAW",3))){
+  
+    if(list->GetEntries()==0){  
+      AliWarning("\tAliZDCQAChecker->The list to be checked is empty!");
+      test = 1.; // nothing to check
+      return test;
+    }
+    printf("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName);
+    
+    TIter next(list); 
+    TH1 * hdata;
+    Double_t meanZNA=0., rmsZNA=0., meanZNC=0.;
+    Double_t meanZPA=0., rmsZPA=0., meanZPC=0.;
+    Double_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.;
+    Double_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.;
+    Float_t  res=0.;
+    Int_t    rawInd=0, testgood=0;
+    count = ntests = 0; 
+    //
+    while((hdata = dynamic_cast<TH1 *>(next()))){
+      if(hdata){
+          // [1] check response of ZNC vs. ZNA
+          if(rawInd==0 || rawInd==1){
+             if(rawInd==0){
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZNA = hdata->GetMean();
+                rmsZNA = hdata->GetRMS();
+               }
+             }
+             else{
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZNC = hdata->GetMean();
+               }
+               else testgood=0;
+               // check if the response m.v. of ZNA and ZNC are equal (@ 1sigma level)
+               if(testgood==1){
+                if(TMath::Abs(meanZNA-meanZNC)<rmsZNA) res=1.;
+                else res=.5;
+                test += res;
+                ntests++;
+                testgood=0;
+               }
+               else res=0.;
+             }
+          }
+          // [2] check response of ZPC vs. ZPA
+          else if(rawInd==2 || rawInd==3){
+             if(rawInd==2){
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZPA = hdata->GetMean();
+                rmsZPA = hdata->GetRMS();
+               }
+             }
+             else{
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZPC = hdata->GetMean();
+               }
+               // check if the response m.v. of ZPA and ZPC are equal (@ 3sigma level)
+               if(testgood==1){
+                if(TMath::Abs(meanZPA-meanZPC)<(3.*rmsZPA)) res=1.;
+                else res=.5;
+                test += res;
+                ntests++;
+                testgood=0;
+               }
+               else res=0.;
+             }
+          }
+          // [2] check PMC responses vs. summed PMQ responses
+          else if(rawInd>3 && rawInd<12){
+            if(rawInd==4) pmQZNC = hdata->GetMean();
+            else if(rawInd==5) pmQZNA = hdata->GetMean();
+            else if(rawInd==6) pmQZPC = hdata->GetMean();
+            else if(rawInd==7) pmQZPA = hdata->GetMean();
+            else if(rawInd==8){
+              pmCZNC = hdata->GetMean();
+              if(TMath::Abs(pmQZNC-pmCZNC)<(0.1*(pmQZNC+pmCZNC)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+            }
+            else if(rawInd==9){
+              pmCZNA = hdata->GetMean();
+              if(TMath::Abs(pmQZNA-pmCZNA)<(0.1*(pmQZNA+pmCZNA)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+            }
+            else if(rawInd==10){
+              pmCZPC = hdata->GetMean();
+              if(TMath::Abs(pmQZPC-pmCZPC)<(0.1*(pmQZPC+pmCZPC)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+            }
+            else if(rawInd==11){
+              pmCZPA = hdata->GetMean();
+              if(TMath::Abs(pmQZPA-pmCZPA)<(0.1*(pmQZPA+pmCZPA)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+            }
+          }
+          //
+          rawInd++;
+          count++;
       }
-      else {
-       test /= count ;
+      // 
+      //printf("\t %d performed tests, results %1.2f\n",ntests,test/ntests);
+      else{
+        AliError("\t AliZDCQAChecker->No histos!!!\n");
       }
     }
+    if(ntests!=0) test = test/ntests;
+    printf("\n\tAliZDCQAChecker-> QA check result = %1.2f\n",test);
   }
 
-  AliInfo(Form("Test Result = %f", test)) ; 
-  return test ; 
+  // -------------------------------------------------------------------
+  else if(!(strncmp(taskName,"ESD",3))){
+  
+    if(list->GetEntries()==0){  
+      AliWarning("\tAliZDCQAChecker->The list to be checked is empty!");
+      test = 1.; // nothing to check
+      return test;
+    }
+    printf("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName);
+    
+    TIter next(list); 
+    TH1 * hdata;
+    Double_t meanX=0., meanY=0.;
+    Double_t meanZNA=0., rmsZNA=0., meanZNC=0.;
+    Double_t meanZPA=0., rmsZPA=0., meanZPC=0.;
+    Double_t eneCZNA=0., eneCZNC=0., eneCZPA=0., eneCZPC=0.;
+    Double_t eneQZNA=0., eneQZNC=0., eneQZPA=0., eneQZPC=0.;
+    Float_t  res=0.;
+    Int_t    esdInd=0, testgood=0;
+    //
+    count = ntests = 0; 
+    //
+    while((hdata = dynamic_cast<TH1 *>(next()))){
+      if(hdata){ 
+        //printf("\tAliZDCQAChecker-> checking histo %s",hdata->GetName());
+        if(esdInd<2){
+          // hits histos
+          meanX = hdata->GetMean(1);
+          meanY = hdata->GetMean(2);
+          // check if the spot is centered
+          if((TMath::Abs(meanX)<0.2) && (TMath::Abs(meanY)<0.2)) res=1.;
+          else res=0.5;
+          test += res;
+          ntests++;
+        }
+        //
+        else{
+          // [1] check response of ZNC vs. ZNA
+          if(esdInd==0 || esdInd==1){
+             if(esdInd==0){
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZNA = hdata->GetMean();
+                rmsZNA = hdata->GetRMS();
+               }
+             }
+             else{
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZNC = hdata->GetMean();
+               }
+               else testgood=0;
+               // check if the response m.v. of ZNA and ZNC are equal (@ 1sigma level)
+               if(testgood==1){
+                if(TMath::Abs(meanZNA-meanZNC)<rmsZNA) res=1.;
+                else res=.5;
+                testgood=0;
+                test += res;
+                ntests++;
+               }
+               else res=0.;
+             }
+          }
+          // [2] check response of ZPC vs. ZPA
+          else if(esdInd==2 || esdInd==3){
+             if(esdInd==2){
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZPA = hdata->GetMean();
+                rmsZPA = hdata->GetRMS();
+               }
+             }
+             else{
+               if(hdata->GetEntries() != 0.){
+                testgood=1;
+                meanZPC = hdata->GetMean();
+               }
+               // check if the response m.v. of ZPA and ZPC are equal (@ 3sigma level)
+               if(testgood==1){
+                if(TMath::Abs(meanZPA-meanZPC)<(3.*rmsZPA)) res=1.;
+                else res=.5;
+                test += res;
+                ntests++;
+                testgood=0;
+               }
+               else res=0.;
+             }
+          }
+          // [2] check eneC responses vs. summed eneQ responses
+          else if(esdInd>3 && esdInd<12){
+            if(esdInd==4) eneQZNC = hdata->GetMean();
+            else if(esdInd==5) eneQZNA = hdata->GetMean();
+            else if(esdInd==6) eneQZPC = hdata->GetMean();
+            else if(esdInd==7) eneQZPA = hdata->GetMean();
+            else if(esdInd==8){
+              eneCZNC = hdata->GetMean();
+              if(TMath::Abs(eneQZNC-eneCZNC)<(0.1*(eneQZNC+eneCZNC)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+            }
+            else if(esdInd==9){
+              eneCZNA = hdata->GetMean();
+              if(TMath::Abs(eneQZNA-eneCZNA)<(0.1*(eneQZNA+eneCZNA)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+            }
+            else if(esdInd==10){
+              eneCZPC = hdata->GetMean();
+              if(TMath::Abs(eneQZPC-eneCZPC)<(0.1*(eneQZPC+eneCZPC)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+            }
+            else if(esdInd==11){
+              eneCZPA = hdata->GetMean();
+              if(TMath::Abs(eneQZPA-eneCZPA)<(0.1*(eneQZPA+eneCZPA)/2)) res=1.;
+              else res=0.5;
+              test += res;
+              ntests++;
+            }
+          }
+          //
+          esdInd++;
+        }
+        // 
+        //printf("\t %d performed tests, results %1.2f\n",ntests,test/ntests);
+        //
+        count++;
+      }
+      else{
+        AliError("AliZDCQAChecker-> No histos!!!\n");
+      }
+    }
+    if(ntests!=0) test = test/ntests;
+    printf("\n\tAliZDCQAChecker-> QA check result = %1.2f\n\n",test);
+  }
+  else{
+    AliWarning(Form("\n\t No ZDC QA for %s task\n",taskName)); 
+    return 1.;
+  }
+  
+  AliInfo(Form("Test Result = %f", test)); 
+  return test; 
 }