]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - T0/AliT0QAChecker.cxx
fix macros
[u/mrichter/AliRoot.git] / T0 / AliT0QAChecker.cxx
index bd9c44866bb670b0c399d874b38e7567d91e8944..65890641e365edc5e29d7ea19983c15559d9ee95 100644 (file)
 #include <Riostream.h>
 #include <TClass.h>
 #include <TH1F.h> 
+#include <TF1.h> 
+#include <TFitResultPtr.h>
 #include <TH2.h> 
 #include <TIterator.h> 
 #include <TKey.h> 
 #include <TFile.h> 
 #include <TMath.h>
 #include <TString.h>
+#include <TPaveText.h>
 
 // --- Standard library ---
 
 #include "AliLog.h"
 #include "AliQAv1.h"
 #include "AliQAChecker.h"
+#include "AliCDBEntry.h"
+#include "AliQAManager.h"
 #include "AliT0QAChecker.h"
 
 ClassImp(AliT0QAChecker)
+//____________________________________________________________________________
+AliT0QAChecker::AliT0QAChecker() :
+AliQACheckerBase("T0","T0 Quality Assurance Checker")
 
+{
+  // Standard constructor
+
+}
 
 //____________________________________________________________________________
-Double_t * AliT0QAChecker::Check(AliQAv1::ALITASK_t /*index*/)
+AliT0QAChecker::AliT0QAChecker(const AliT0QAChecker& qac):
+  AliQACheckerBase(qac.GetName(), qac.GetTitle()) 
 {
-  Double_t * rv = new Double_t[AliRecoParam::kNSpecies] ; 
-  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
-    rv[specie] = 0.0 ; 
-  return rv ;  
+  // copy constructor
+  AliError("Copy should not be used with this class\n");
+}
+//____________________________________________________________________________
+AliT0QAChecker& AliT0QAChecker::operator=(const AliT0QAChecker& qac){
+  // assignment operator
+  this->~AliT0QAChecker();
+  new(this)AliT0QAChecker(qac);
+  return *this;
+}
+
+
+//____________________________________________________________________________
+AliT0QAChecker::~AliT0QAChecker(){
+  // destructor
+
 }
 
 //__________________________________________________________________
-Double_t * AliT0QAChecker::Check(AliQAv1::ALITASK_t index,TObjArray ** list)
+void AliT0QAChecker::Check(Double_t *  test, AliQAv1::ALITASK_t index, TObjArray ** list, const AliDetectorRecoParam * /*recoParam*/)
 {
 
   // Super-basic check on the QA histograms on the input list:
   // look whether they are empty!
+    
+ char * detOCDBDir = Form("T0/%s/%s", AliQAv1::GetRefOCDBDirName(), AliQAv1::GetRefDataDirName()) ; 
 
-  Double_t * test = new Double_t[AliRecoParam::kNSpecies] ; 
+  AliCDBEntry *QARefRec = AliQAManager::QAManager()->Get(detOCDBDir);
+  //  QARefRec->Dump();
+  if( !QARefRec){
+    AliInfo("QA reference data NOT retrieved for Reconstruction check. No T0 reference distribution");
+  }
+  
   for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
     test[specie]    = 10.0 ; 
 
-  Double_t nent[250];
-  TString hname[250];
-  const char *cname;
-  memset(nent,0,250*sizeof(Double_t));
-  Double_t w[250];
-  memset(w,1,250*sizeof(Double_t));
-  TH2 *fhRecDiff[3];  
-  TH2 *fhRawEff[250];
-  TH1 *fhESD[2];
-  
   for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
     //  TString dataType = AliQAv1::GetAliTaskName(index);
     if (list[specie]->GetEntries() == 0){
       test[specie] = 1. ; // nothing to check
     }
     else {
-    TIter next(list[specie]) ;
-    TH1 * hdata ;
-    TH2 * h ;
-    //  AliInfo(Form(" data type %i %s nentries %i\n",
-    //    index,dataType.Data(),list->GetEntries()));
-    for (Int_t ir=0; ir<list[specie]->GetEntries(); ir++) {
-      //raw
-      if(index==0 ){
-        /*
-         if(ir < 205) {
-         hdata = (TH1*) list[specie]->UncheckedAt(ir);
-         if(hdata) {
-         cname = hdata->GetName();
-         hname[ir] = cname;
-         AliDebug(10,Form("count %i %s \n",ir, hname[ir].Data())) ;
-         fhRaw[ir] = hdata;
-         }
-         }*/
-        if(ir > 204) {
-          //     else{
-          h = (TH2*) list[specie]->UncheckedAt(ir);
-          AliInfo(Form(" index %i ir %i \n", index,ir));
-          if(h) {
-            cname = h->GetName();
-            hname[ir] = cname;
-            AliDebug(1,Form("count %i %s \n",ir, hname[ir].Data())) ;
-            fhRawEff[ir] = h;
-          }
-        }
-      }
-     
-      //rec
-      if(index==2){
-        h = (TH2*) list[specie]->UncheckedAt(ir);
-        if(h) {
-          cname = h->GetName();
-          hname[ir] = cname;
-          AliDebug(1,Form("count %i %s \n",ir, hname[ir].Data())) ;
-          fhRecDiff[ir] = h;
-        }
-      }
-      //esd
-      if(index==3){
-        cout<<" ir "<<ir<<endl;
-        hdata = (TH1*) list[specie]->UncheckedAt(ir);
-        if(hdata){
-          fhESD[ir] = hdata;
-          AliDebug(1,Form("count %i %s ",ir, hname[ir].Data()) );
-        }
-      }
+      if (index == AliQAv1::kRAW && AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCalib)
+       //      if (index == AliQAv1::kRAW )
+       {
+         test[specie] = CheckRaw(list[specie]);
+       }
+      
+       if (index == AliQAv1::kESD && AliRecoParam::Convert(specie) != AliRecoParam::kCalib)
+         test[specie] = CheckESD(list[specie]);
     }
-      if (index == 0) {
-        //raw data
-       
-        for (Int_t icase=205; icase<207; icase++) {
-          for (Int_t idet=0; idet<24; idet++) {
-            Double_t mean = fhRawEff[icase]->ProjectionY(Form("%s_py_%i_%i",
-                                                              fhRawEff[icase]->GetName(), idet,icase),
-                                                              idet,idet+1)->GetMean();
-            Double_t rms= fhRawEff[icase]->ProjectionY(Form("%s_py%i_%i", 
-                                                            fhRawEff[icase]->GetName(), idet,icase),
-                                                            idet,idet+1)->GetRMS();
-            AliInfo(Form("name %s icase %i idet %i mean %f, rms %f\n",
-                    fhRawEff[icase]->GetName(), icase, idet, mean,rms));
-            if (mean<1.2 && mean> 0.8 ) {
-              test[specie] = 1;
-              AliDebug(1,Form("All channels works meane efficieny %f with rms %f test %f",  mean, rms, test[specie])) ; 
-            }
-            if (mean<=0.8 && mean>= 0.5 ){
-              test[specie] = 0.5;
-              AliDebug(1,Form("%s problem in channel %i  efficieny %f test %f",
-                              fhRawEff[icase]->GetName(), idet,  mean, test[specie])) ; 
-            }
-            if (mean<0.5 ) { 
-              test[specie] = 0.25;
-              AliDebug(1,Form("%s big problem in channel %i  efficieny %f test %f",
-                              fhRawEff[icase]->GetName(), idet,  mean, test[specie])) ; 
-            }
-          }
-        }
-      }
-      if(index == 2){
-        //rec points
-        for (Int_t icase=0; icase<2; icase++) {
-          for (Int_t idet=0; idet<24; idet++) {
-            Double_t mean = fhRecDiff[icase]->
-            ProjectionY(Form("%s_py", fhRecDiff[icase]->GetName()),
-                        idet,idet+1)->GetMean();
-            Double_t rms= fhRecDiff[icase]->
-            ProjectionY(Form("%s_py", fhRecDiff[icase]->GetName()),
-                        idet,idet+1)->GetRMS();
-            AliInfo(Form("name %s icase %i idet %i mean %f, rms %f\n",
-                         fhRecDiff[icase]->GetName(), icase, idet, mean,rms)); 
-                 
-            if(TMath::Abs(mean) >1.5 || rms >1){
-              AliDebug(1,Form(" calibration is nor perfect; test=%f", test)) ;
-              test[specie]=0.25;
-            }
-            if(mean>3 || rms >5) {
-              test[specie] = 0.1;
-              AliDebug(1,Form(" wrong calibration test=%f", test[specie])) ;
-            } 
-          }
-        }       
-      }
-      if (index == 3) {
-        //ESD
-        for (Int_t icase=0; icase<2; icase++) {
-          Double_t rmsVertex = fhESD[icase]->GetRMS();
-          Double_t meanVertex = fhESD[icase]->GetMean();
-          test[specie]=1;
-          AliInfo(Form("numentries %d meanVertex %f rmsVertex %f", fhESD[icase]->GetEntries(), meanVertex, rmsVertex));
-          if (TMath::Abs(rmsVertex)>3) {
-            test[specie]=0.25;
-            AliDebug(1,Form("Vertex position resolution not good  , rms= %f test=%f",
-                            rmsVertex, test[specie])) ; 
-          }
-          if (TMath::Abs(meanVertex)>3) {
-            test[specie]=0.25;
-            AliDebug(1,Form("Vertex position bad calibrated  , Mean= %f test=%f",
-                            meanVertex, test[specie])) ; 
-          }
-        }
+  
+  }
+}
+
+//--------------------------------------------------------------------------
+Double_t AliT0QAChecker::CheckRaw(TObjArray *listrec) const
+{
+   Float_t checkr = 0;
+   
+  TString hname[10];
+   TH1*hdata; 
+   const char *cname;
+   TH1 *fhRawEff[10];
+   Int_t nh=0;
+
+   Int_t nnn[4] = { 420, 458, 459, 460};
+   for (Int_t ir=0; ir<4; ir++)
+     {
+        hdata = (TH1*) listrec->UncheckedAt(nnn[ir]);
+        if(hdata) {
+          cname = hdata->GetName();
+          hname[ir] = cname;
+          fhRawEff[nh] = hdata;
+          nh++;
+        }
+    }
+     
+   TLine *linelowyellow = new TLine(0, 0.7, 24, 0.7);    
+   linelowyellow->SetLineColor(5);
+   linelowyellow->SetLineStyle(3);
+   linelowyellow->SetLineWidth(4);
+   TLine *linelowred = new TLine(0, 0.2, 24, 0.2);    
+   linelowred->SetLineColor(2);
+   linelowred->SetLineStyle(3);
+   linelowred->SetLineWidth(4);
+
+   Float_t thryell = 0.7;
+   //   TPaveText* text = new TPaveText(0.30,0.50,0.99,0.99,"NDC");    
+   Float_t thrred = 0.2;
+   Float_t chcont =0;
+    for (Int_t ih= 0; ih<4; ih++)
+     { 
+       fhRawEff[ih]->SetLineWidth(2);
+       fhRawEff[ih]->SetMaximum(2.);
+       fhRawEff[ih]->SetMinimum(0.);
+       fhRawEff[ih]->GetListOfFunctions()->Add(linelowyellow);
+       fhRawEff[ih]->GetListOfFunctions()->Add(linelowred);
+
+       Int_t nbins= fhRawEff[ih]->GetNbinsX();
+       Bool_t yell = kFALSE;
+       Bool_t red = kFALSE;
+       for (Int_t in=1; in<nbins-1; in++)
+        {
+          if(ih==0 && in==5) continue;
+          chcont=fhRawEff[ih]->GetBinContent(in);
+          if (chcont < thryell  ) yell = kTRUE;
+          if (chcont < thrred  ) red = kTRUE;
+        }
+       
+       if (! yell && !red) {
+        AliDebug(AliQAv1::GetQADebugLevel(), Form(" efficiency in all channes %s  is good", fhRawEff[ih]->GetName() ));
+        checkr=1.;
+        //      text->AddText(Form("T0 RUN %d ",AliCDBManager::Instance()->GetRun()));
+        //      text->AddText(Form(" No problems "));
+        //      text->SetFillColor(3);
+       }
+       
+       if(red ) {
+        checkr = 0.;
+        AliDebug(AliQAv1::GetQADebugLevel(), Form(" efficiency in all channes %s  is not so good", fhRawEff[ih]->GetName() ));
+        //      text->AddText(Form("T0 RUN %d ",AliCDBManager::Instance()->GetRun()));
+        //      text->AddText(Form("Very serious problem, call expert "));
+        //      text->SetFillColor(2);
+       }
+       
+       if ( yell && !red) {
+        AliDebug(AliQAv1::GetQADebugLevel(), Form(" efficiency in all channes %s  is not so good", fhRawEff[ih]->GetName() ));
+        checkr=0.75;
+        //      text->AddText(Form("T0 RUN %d ",AliCDBManager::Instance()->GetRun()));
+        //      text->AddText(Form("Some problems "));
+        //      text->SetFillColor(5);
       }
-    } //  if (list->GetEntries() != 0
-    AliInfo(Form("Test Result = %f", test[specie])) ;
-  } 
-  return test ;
+       // fhRawEff[ih]->GetListOfFunctions()->Add(text);       
+
+     }
+  return checkr;
+  
 }
 
+
+//--------------------------------------------------------------------------
+Double_t AliT0QAChecker::CheckESD(TObjArray *listrec ) const
+{
+  Float_t checkr = 0;
+  TH1 *fhESD;
+  fhESD  = (TH1*) listrec->UncheckedAt(2);
+  if(fhESD){
+    AliDebug(AliQAv1::GetQADebugLevel(), Form("count %s ", fhESD->GetName()) );
+     TF1 *f1 = new TF1("f1","gaus",-1,1);
+    fhESD->Fit("f1","R","Q", -1,1);
+    Double_t par[3];
+    f1->GetParameters(&par[0]);
+    
+    TPaveText* text = new TPaveText(0.30,0.50,0.99,0.99,"NDC");
+    
+    text->AddText(Form("T0 RUN %d ",AliCDBManager::Instance()->GetRun()));
+    
+    AliDebug(AliQAv1::GetQADebugLevel(), Form("numentries %f mean %f  #sigma %f", fhESD->GetEntries(),par[1], par[2]));
+    
+    
+    if (par[2] > 0.07 && par[2] < 1.) {
+      checkr=0.5;
+       text->AddText(Form("not good resolution :\n %f ns\n", par[2] ));
+       text->SetFillColor(5);
+       printf("T0 detector resolution is not good enouph: %f ns\n",par[2] );
+    }
+    if(TMath::Abs(par[1])>0.05) {
+      checkr = 0.5;
+      text->AddText(Form(" Check clock shift on %f ns", par[1]));
+      text->SetFillColor(5);
+    }
+    if (par[2] >  1. || TMath::Abs(par[1])>0.1) {
+      checkr = 0.25;
+      text->AddText(Form(" Bad resolution:\n mean %f ns sigma %f ns", par[1], par[2]));
+      text->SetFillColor(2);
+      
+      fhESD->GetListOfFunctions()->Add(text);  
+       AliDebug(AliQAv1::GetQADebugLevel(),
+               Form("Please, check calibration: shift= %f resolution %f test=%f\n",
+                    par[1], par[2], checkr) ) ; 
+    }
+  }
+  else
+    {
+      AliDebug(AliQAv1::GetQADebugLevel(),
+              Form("No ESD QA histogram found, nothing to check"));
+       checkr=0;
+    }
+  
+  
+  return checkr;
+}