ROOT logo
/**************************************************************************
 * Coyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
//...
//  Checks the quality assurance. 
//  By comparing with reference data
//  Skeleton for T0
//---------------------------------------------
//checkig without reference data:
//for RAW QA all histograms should have approximatly the same 
//number of entries as RefPoint
//for Rec Points checks 
//  - amplitude measured by 2 methos
//  - online and offline T0 measurements
// for ESD quality of reconstruction ( and measurements):
// RMS of vertex and T0 less than 75ps
//
// Alla.Maevskaya@cern.ch   
//...

// --- ROOT system ---
#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>
#include <TLegend.h>

// --- Standard library ---

// --- AliRoot header files ---
#include "AliLog.h"
#include "AliQAv1.h"
#include "AliQAChecker.h"
#include "AliCDBEntry.h"
#include "AliQAManager.h"
#include "AliT0QAChecker.h"
#include "AliQAThresholds.h"
#include "AliDAQ.h"

ClassImp(AliT0QAChecker)
//____________________________________________________________________________
AliT0QAChecker::AliT0QAChecker() :
  AliQACheckerBase("T0","T0 Quality Assurance Checker"),
  fCFDErrorThreshold(0),
  fLEDErrorThreshold(0),
  fQTCErrorThreshold(0),
  fRatioCFDEffLEDEffErrorThreshold(1),
  fQTCEfficiencyErrorThreshold(0),
  fBCIDPeriodParam(3564),
  fBCIDOffsetParam(37),
  fBCIDBandWidthParam(10),
  fTZeroAPlusCErrorThreshold(2000.0),
  fTZeroAMinusCErrorThreshold(2000.0)
{
  // Standard constructor
  for(Int_t i=0; i<24; i++){ 
    fMeanCFDFromGoodRunParam[i]=0; 
    fMeanLEDFromGoodRunParam[i]=0; 
    fMeanQTCFromGoodRunParam[i]=0; 
  }

}

//____________________________________________________________________________
AliT0QAChecker::AliT0QAChecker(const AliT0QAChecker& qac):
  AliQACheckerBase(qac.GetName(), qac.GetTitle()),
  fCFDErrorThreshold(qac.fCFDErrorThreshold),
  fLEDErrorThreshold(qac.fLEDErrorThreshold),
  fQTCErrorThreshold(qac.fQTCErrorThreshold),
  fRatioCFDEffLEDEffErrorThreshold(qac.fRatioCFDEffLEDEffErrorThreshold),
  fQTCEfficiencyErrorThreshold(qac.fQTCEfficiencyErrorThreshold),
  fBCIDPeriodParam(qac.fBCIDPeriodParam),
  fBCIDOffsetParam(qac.fBCIDOffsetParam),
  fBCIDBandWidthParam(qac.fBCIDBandWidthParam),
  fTZeroAPlusCErrorThreshold(qac.fTZeroAPlusCErrorThreshold),
  fTZeroAMinusCErrorThreshold(qac.fTZeroAMinusCErrorThreshold)
{
  // copy constructor
  AliError("Copy should not be used with this class\n");
  for(Int_t i=0; i<24; i++){ 
    fMeanCFDFromGoodRunParam[i]=qac.fMeanCFDFromGoodRunParam[i]; 
    fMeanLEDFromGoodRunParam[i]=qac.fMeanLEDFromGoodRunParam[i]; 
    fMeanQTCFromGoodRunParam[i]=qac.fMeanQTCFromGoodRunParam[i]; 
  }

}
//____________________________________________________________________________
AliT0QAChecker& AliT0QAChecker::operator=(const AliT0QAChecker& qac){
  // assignment operator
  this->~AliT0QAChecker();
  new(this)AliT0QAChecker(qac);
  return *this;
}


//____________________________________________________________________________
AliT0QAChecker::~AliT0QAChecker(){
  // destructor

}

//__________________________________________________________________
void AliT0QAChecker::Check(Double_t *  test, AliQAv1::ALITASK_t index, TObjArray ** list, const AliDetectorRecoParam * /*recoParam*/)
{

  AliCDBManager* man = AliCDBManager::Instance();
  //man->SetDefaultStorage(gSystem->Getenv("AMORE_CDB_URI"));
  if(!man) return; 
  AliCDBEntry* entry = man->Get("GRP/Calib/QAThresholds");
  if(!entry) return; 
  TObjArray* t0branch = (TObjArray*) entry->GetObject();
  if(!list) return;
  AliQAThresholds*  thresholds = (AliQAThresholds*) t0branch->FindObject("T00");
  // here you should test that you got a non-null pointer

  if(!thresholds) return;
  if(AliDAQ::DetectorID("T0")!= thresholds->GetDetectorId()){
    AliInfo(Form("DETECTOR ID %d DOES NOT MATCH TO TZERO",thresholds->GetDetectorId()));
    return;
  }

  int iparam; 
  for(int ipmt=0; ipmt<24;ipmt++){ 
    iparam = ipmt + 1; //current consecutive number of parameter
    if((TParameter<float>*) thresholds->GetThreshold(iparam)){ // mean CFD from a good run 
      fMeanCFDFromGoodRunParam[ipmt] = ((TParameter<float>*) thresholds->GetThreshold(iparam))->GetVal();
    }

    iparam = ipmt + 25;
    if((TParameter<float>*) thresholds->GetThreshold(iparam)){ // mean LED from a good run 
      fMeanLEDFromGoodRunParam[ipmt] = ((TParameter<float>*) thresholds->GetThreshold(iparam))->GetVal();
    } 
    iparam = ipmt + 49;
    if((TParameter<float>*) thresholds->GetThreshold(iparam)){ // mean QTC from a good run 
      fMeanQTCFromGoodRunParam[ipmt] = ((TParameter<float>*) thresholds->GetThreshold(iparam))->GetVal();
    } 
  }
  iparam = 73; //CFD threshold
  if((TParameter<float>*) thresholds->GetThreshold(iparam)){ 
    fCFDErrorThreshold = ((TParameter<float>*) thresholds->GetThreshold(iparam))->GetVal();
  }
  iparam = 74; //LED threshold
  if((TParameter<float>*) thresholds->GetThreshold(iparam)){ 
    fLEDErrorThreshold = ((TParameter<float>*) thresholds->GetThreshold(iparam))->GetVal();
  }
  iparam = 75; //QTC threshold
  if((TParameter<float>*) thresholds->GetThreshold(iparam)){ 
    fQTCErrorThreshold = ((TParameter<float>*) thresholds->GetThreshold(iparam))->GetVal();
  }
 
  iparam = 82; //Error level threshold on CFD efficiency/LED efficiency ratio
  if((TParameter<float>*) thresholds->GetThreshold(iparam)){ 
    fRatioCFDEffLEDEffErrorThreshold = ((TParameter<float>*) thresholds->GetThreshold(iparam))->GetVal();
  }
  // Super-basic check on the QA histograms on the input list:
  // look whether they are empty!

  iparam = 83; //Error level threshold on QTC efficiency 
  if((TParameter<float>*) thresholds->GetThreshold(iparam)){ 
    fQTCEfficiencyErrorThreshold = ((TParameter<float>*) thresholds->GetThreshold(iparam))->GetVal();
  }

  iparam = 84; 
  if((TParameter<int>*) thresholds->GetThreshold(iparam)){ 
    fBCIDPeriodParam = ((TParameter<int>*) thresholds->GetThreshold(iparam))->GetVal();
  }

  iparam = 85; 
  if((TParameter<int>*) thresholds->GetThreshold(iparam)){ 
    fBCIDOffsetParam = ((TParameter<int>*) thresholds->GetThreshold(iparam))->GetVal();
  }

  iparam = 86; 
  if((TParameter<int>*) thresholds->GetThreshold(iparam)){ 
    fBCIDBandWidthParam = ((TParameter<int>*) thresholds->GetThreshold(iparam))->GetVal();
  }

  iparam = 87; 
  if((TParameter<float>*) thresholds->GetThreshold(iparam)){ 
    fTZeroAPlusCErrorThreshold = ((TParameter<float>*) thresholds->GetThreshold(iparam))->GetVal();
  }

  iparam = 88; 
  if((TParameter<float>*) thresholds->GetThreshold(iparam)){ 
    fTZeroAMinusCErrorThreshold = ((TParameter<float>*) thresholds->GetThreshold(iparam))->GetVal();
  }


  char * detOCDBDir = Form("T0/%s/%s", AliQAv1::GetRefOCDBDirName(), AliQAv1::GetRefDataDirName()) ; 

  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]    = 1.0; //FK//  initiate qa flag for the whole set of histograms as good 
  }


  for(Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
    if(!(AliQAv1::Instance()->IsEventSpecieSet(specie) && list[specie]) || list[specie]->GetEntries() == 0) {
      continue;
    }

    if(index == AliQAv1::kRAW){

      //if(AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCalib){//      if (index == AliQAv1::kRAW )
        //check laser data efficiencies   
      //  Double_t qaFlag = CheckLaser(list[specie]);
      //  if(qaFlag < test[specie]) test[specie] = qaFlag;
      //}

      //if(//AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCalib   ||
       //  AliRecoParam::ConvertIndex(specie) == AliRecoParam::kHighMult ||
      //   AliRecoParam::ConvertIndex(specie) == AliRecoParam::kLowMult){ 
         //AliRecoParam::ConvertIndex(specie) == AliRecoParam::kDefault ||
         
        //check BCID   
      //  Double_t qaFlag = CheckBCID(list[specie]);
      //  if(qaFlag < test[specie]) test[specie] = qaFlag;
      //}

      if(AliRecoParam::ConvertIndex(specie) == AliRecoParam::kHighMult ||
        AliRecoParam::ConvertIndex(specie) == AliRecoParam::kLowMult){ 
        //AliRecoParam::ConvertIndex(specie) == AliRecoParam::kDefault ||
        //check physics 
        Double_t qaFlag = CheckRaw(list[specie]);
        if(qaFlag < test[specie]) test[specie] = qaFlag;
      }
    }

    if(index == AliQAv1::kESD && AliRecoParam::Convert(specie) != AliRecoParam::kCalib){
      test[specie] = CheckESD(list[specie]);
    } 
  }
}

//--------------------------------------------------------------------------
//Double_t AliT0QAChecker::CheckLaser(TObjArray *listrec) const {
//   
//  return 1.0; 
//}

//--------------------------------------------------------------------------
Double_t AliT0QAChecker::CheckRaw(TObjArray *listrec) const {
   
  //Fk Set drawing options for LED and CFD efficiencies from the raw data
  TH1F *hCFDEffData = (TH1F*) listrec->UncheckedAt(207);//hRawTrigger 
  TH1F *hLEDEffData = (TH1F*) listrec->UncheckedAt(208);//hRawTrigger 

  //clean objects added at previous checks
  EraseOldMessages((TH1*) hCFDEffData); 
  hCFDEffData->GetListOfFunctions()->Add((TH1D*) hLEDEffData->Clone());	      

  TLegend leg(0.12,0.76,0.9,0.92," ","brNDC");
  leg.SetFillStyle(0); leg.SetBorderSize(0); leg.SetTextSize(0.04); leg.SetNColumns(2);
  leg.AddEntry((TH1D*) hCFDEffData,"CFD","p");
  leg.AddEntry((TH1D*) hLEDEffData,"LED","p");
  hCFDEffData->GetListOfFunctions()->Add((TLegend*) leg.Clone());	      


  //Fk Draw CFD-mean for each PMT
  TH2F* fhCFD = (TH2F*) listrec->UncheckedAt(210);
  TH1F* fhCFDSubtrMean = (TH1F*) listrec->UncheckedAt(231);

  EraseOldMessages((TH1*) fhCFDSubtrMean); 
  for(int ipmt=0; ipmt<24;ipmt++){ 
    TH1F*  hProjDummy = (TH1F*) fhCFD->ProjectionY("dummy",ipmt+1,ipmt+1);
    Float_t mean=0.0, rms=0.0;
    GetMeanAndRmsAroundMainMaximum(mean, rms,  hProjDummy,0);

    Float_t deviation = mean - fMeanCFDFromGoodRunParam[ipmt]; 

    fhCFDSubtrMean->SetBinContent(ipmt+1,deviation);
    fhCFDSubtrMean->SetBinError(ipmt+1,rms);
      
    delete hProjDummy;
  }
  TLine linelowredCFD(0, fCFDErrorThreshold, 24, fCFDErrorThreshold);    
  linelowredCFD.SetLineColor(2);
  linelowredCFD.SetLineStyle(3);
  linelowredCFD.SetLineWidth(4);
  TLine linehighredCFD(0, -fCFDErrorThreshold, 24, -fCFDErrorThreshold);    
  linehighredCFD.SetLineColor(2);
  linehighredCFD.SetLineStyle(3);
  linehighredCFD.SetLineWidth(4);
  fhCFDSubtrMean->GetListOfFunctions()->Add((TLine*) linelowredCFD.Clone());	      
  fhCFDSubtrMean->GetListOfFunctions()->Add((TLine*) linehighredCFD.Clone());	      

 
 
  //Fk Draw LED-mean for each PMT
  TH2F* fhLED = (TH2F*) listrec->UncheckedAt(211);
  TH1F* fhLEDSubtrMean = (TH1F*) listrec->UncheckedAt(232);
 
  EraseOldMessages((TH1*) fhLEDSubtrMean); 
  for(int ipmt=0; ipmt<24;ipmt++){ 
    TH1F*  hProjDummy = (TH1F*) fhLED->ProjectionY("dummy",ipmt+1,ipmt+1);
    Float_t mean=0.0, rms=0.0;
    GetMeanAndRmsAroundMainMaximum(mean, rms,  hProjDummy,1);
    Float_t deviation = mean - fMeanLEDFromGoodRunParam[ipmt]; 

    fhLEDSubtrMean->SetBinContent(ipmt+1,deviation);
    fhLEDSubtrMean->SetBinError(ipmt+1,rms);
      
    delete hProjDummy;
  }
  TLine linelowredLED(0, fLEDErrorThreshold, 24, fLEDErrorThreshold);    
  linelowredLED.SetLineColor(2);
  linelowredLED.SetLineStyle(3);
  linelowredLED.SetLineWidth(4);
  TLine linehighredLED(0, -fLEDErrorThreshold, 24, -fLEDErrorThreshold);    
  linehighredLED.SetLineColor(2);
  linehighredLED.SetLineStyle(3);
  linehighredLED.SetLineWidth(4);
  fhLEDSubtrMean->GetListOfFunctions()->Add((TLine*) linelowredLED.Clone());	      
  fhLEDSubtrMean->GetListOfFunctions()->Add((TLine*) linehighredLED.Clone());	      

     
  //Fk Draw QTC-mean for each PMT
  TH2F* fhQTC = (TH2F*) listrec->UncheckedAt(212);
  TH1F* fhQTCSubtrMean = (TH1F*) listrec->UncheckedAt(233);
   
  EraseOldMessages((TH1*) fhQTCSubtrMean); 
  for(int ipmt=0; ipmt<24;ipmt++){ 
    TH1F*  hProjDummy = (TH1F*) fhQTC->ProjectionY("dummy",ipmt+1,ipmt+1);
    Float_t mean=0.0, rms=0.0;
    GetMeanAndRmsAroundMainMaximum(mean, rms,  hProjDummy,2);
    Float_t deviation = mean - fMeanQTCFromGoodRunParam[ipmt]; 

    fhQTCSubtrMean->SetBinContent(ipmt+1,deviation);
    fhQTCSubtrMean->SetBinError(ipmt+1,rms);
      
    delete hProjDummy;
  }
  TLine linelowredQTC(0, fQTCErrorThreshold, 24, fQTCErrorThreshold);    
  linelowredQTC.SetLineColor(2);
  linelowredQTC.SetLineStyle(3);
  linelowredQTC.SetLineWidth(4);
  TLine linehighredQTC(0, -fQTCErrorThreshold, 24, -fQTCErrorThreshold);    
  linehighredQTC.SetLineColor(2);
  linehighredQTC.SetLineStyle(3);
  linehighredQTC.SetLineWidth(4);
  fhQTCSubtrMean->GetListOfFunctions()->Add((TLine*) linelowredQTC.Clone());	      
  fhQTCSubtrMean->GetListOfFunctions()->Add((TLine*) linehighredQTC.Clone());	      

  //CFD and LED efficiency in range ~2000- ~3000 
  TH1F* hCFDeffSubRange = (TH1F*) listrec->UncheckedAt(237);
  TH1F* hEffLEDSubRange = (TH1F*) listrec->UncheckedAt(238);
  // ratio CDF eff /LEF eff in subragne 
  TH1F* hRatioCFDLEDeff = (TH1F*) listrec->UncheckedAt(239);//FK   
  EraseOldMessages((TH1*) hRatioCFDLEDeff); 
  int npmt = hRatioCFDLEDeff->GetNbinsX();
  for(int ipmt=1;ipmt<=npmt;ipmt++){
    Float_t c0 = hCFDeffSubRange->GetBinContent(ipmt); 
    Float_t c1 = hEffLEDSubRange->GetBinContent(ipmt);
    if(c1){
      hRatioCFDLEDeff->SetBinContent(ipmt,c0/c1);  
    }else{
      hRatioCFDLEDeff->SetBinContent(ipmt,0);  
    }  
  }

  TLine linelowredRatioCFDLEDeff(0, 1+fRatioCFDEffLEDEffErrorThreshold, 24, 1+fRatioCFDEffLEDEffErrorThreshold);    
  linelowredRatioCFDLEDeff.SetLineColor(2);
  linelowredRatioCFDLEDeff.SetLineStyle(3);
  linelowredRatioCFDLEDeff.SetLineWidth(4);
  TLine linehighredRatioCFDLEDeff(0, 1-fRatioCFDEffLEDEffErrorThreshold, 24, 1-fRatioCFDEffLEDEffErrorThreshold);    
  linehighredRatioCFDLEDeff.SetLineColor(2);
  linehighredRatioCFDLEDeff.SetLineStyle(3);
  linehighredRatioCFDLEDeff.SetLineWidth(4);
  hRatioCFDLEDeff->GetListOfFunctions()->Add((TLine*) linelowredRatioCFDLEDeff.Clone());	      
  hRatioCFDLEDeff->GetListOfFunctions()->Add((TLine*) linehighredRatioCFDLEDeff.Clone());	      

  //        PERFROM CHECKS on HISTOGRAMS

  //-------- triggers -----------
  Int_t qualityFlagTrigger = kT0Info; //init quality flag for a given histogram; 

  TH1F *hTrigger = (TH1F*) listrec->UncheckedAt(169);//hRawTrigger 

  // clean objects added at previous checks
  EraseOldMessages((TH1*) hTrigger); 

  if(hTrigger->Integral()>0){
    //trigger plot does have some counts in it
    //are Mean, ORA and ORC not empty?  
    if( hTrigger->GetBinContent(1)<0.001 || hTrigger->GetBinContent(3)<0.001 || hTrigger->GetBinContent(4)<0.001){
      qualityFlagTrigger = kT0Error; //no entries on diagonal
      AliDebug(AliQAv1::GetQADebugLevel(), Form("T0: too little ORA and ORC in  %s", hTrigger->GetName() ));

      TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
      text.AddText(Form("Check ORA and ORC")); 
      text.AddText(Form("Report problem to the T0 on-call expert")); 
      text.SetBorderSize(0);
      text.SetFillStyle(0);
      hTrigger->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
    }

  }else{ //Trigger histo empty

    qualityFlagTrigger = kT0Error;
    AliDebug(AliQAv1::GetQADebugLevel(), Form("T0 histogram  %s has NO entries", hTrigger->GetName() ));

    TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
    text.AddText(Form("NO ENTRIES!!!")); 
    text.AddText(Form("If T0 is READY report")); 
    text.AddText(Form("readout problem to the T0 on-call expert")); 
    text.SetBorderSize(0);
    text.SetFillStyle(0);
    hTrigger->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      

  }
  //---------- CFD eff/LED eff within subrange  -----------
  Int_t qualityFlagRatioCFDeffLEDeff = kT0Info; //init quality flag for a given histogram;
  int nPMTs = hRatioCFDLEDeff->GetNbinsX(); 

  for(int ipmt=1; ipmt<=nPMTs; ipmt++){
    if(TMath::Abs( hRatioCFDLEDeff->GetBinContent(ipmt) -1) > fRatioCFDEffLEDEffErrorThreshold){ //mean is expected to be around 1
      qualityFlagRatioCFDeffLEDeff = kT0Error;
    }
  }
  if(qualityFlagRatioCFDeffLEDeff == kT0Error){
    TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
    text.AddText(Form("Problem with efficiency ratio CFD/LED !!!")); 
    text.AddText(Form("If T0 is READY and beam is on report")); 
    text.AddText(Form("the problem to the T0 on-call expert"));
    text.SetBorderSize(0);
    text.SetFillStyle(0);
    hRatioCFDLEDeff->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
  }
  

  //---------- CFD -  mean CFD  -----------
  Int_t qualityFlagCFDSubtr = kT0Info; //init quality flag for a given histogram;
  nPMTs = fhCFDSubtrMean->GetNbinsX(); 

  for(int ipmt=1; ipmt<=nPMTs; ipmt++){
    if(TMath::Abs( fhCFDSubtrMean->GetBinContent(ipmt)) > fCFDErrorThreshold){
      qualityFlagCFDSubtr = kT0Error;

   }
  }
  if(qualityFlagCFDSubtr == kT0Error){
    TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
    text.AddText(Form("Problem with CFD timing  !!!")); 
    text.AddText(Form("If T0 is READY and beam is on report")); 
    text.AddText(Form("the problem to the T0 on-call expert"));
    text.SetBorderSize(0);
    text.SetFillStyle(0);
    fhCFDSubtrMean->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
  }
  //--------- QTC efficiency ---------------

  Int_t qualityFlagEffQTC = kT0Info; //init quality flag for a given histogram;
  TH1F *hEffQTC = (TH1F*) listrec->UncheckedAt(209);//hRawTrigger 
  
  EraseOldMessages((TH1*) hEffQTC); // clean objects added at previous checks

  nPMTs = hEffQTC->GetNbinsX(); 
  for(int ipmt=1; ipmt<=nPMTs; ipmt++){
    if(TMath::Abs( hEffQTC->GetBinContent(ipmt)) < fQTCEfficiencyErrorThreshold){
      qualityFlagEffQTC = kT0Error;
    }
  }
  if( qualityFlagEffQTC == kT0Error){
    TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
    text.AddText(Form("Problem with QTC efficiency !!!")); 
    text.AddText(Form("If T0 is READY and beam is on report")); 
    text.AddText(Form("the problem to the T0 on-call expert"));
    text.SetBorderSize(0);
    text.SetFillStyle(0);
    hEffQTC->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
  }
  TLine linehighredQTCeff(0, fQTCEfficiencyErrorThreshold, 24, fQTCEfficiencyErrorThreshold);    
  linehighredQTCeff.SetLineColor(2);
  linehighredQTCeff.SetLineStyle(3);
  linehighredQTCeff.SetLineWidth(4);
  hEffQTC->GetListOfFunctions()->Add((TLine*) linehighredQTCeff.Clone());	      
 
  //---------- BCID --------------------
  Int_t qualityFlagBCID = kT0Info; //init quality flag for a given histogram; 
  TH2F *hBCID = (TH2F*) listrec->UncheckedAt(236); //BCID versus TRM  BCID
     
  // clean objects added at previous checks
  EraseOldMessages((TH1*)hBCID);

  if(hBCID->Integral()>0){
    //BCID does have some counts in it

    Int_t nbinsX = hBCID->GetNbinsX();
    Int_t startX = hBCID->GetXaxis()->FindBin(100); //skip region close to orbit period
    Int_t nbinsY = hBCID->GetNbinsY();
    Int_t binWidthX = (Int_t) hBCID->GetXaxis()->GetBinWidth(1);
    Int_t binWidthY = (Int_t) hBCID->GetYaxis()->GetBinWidth(1);
    double entriesOnDiagonal  = 0; //count diagonal and off diagonal entries
    double entriesOffDiagonal = 0;

    for(Int_t itrm=startX; itrm<=nbinsX; itrm++){ //BCID TRM
      for(Int_t ibcid=1; ibcid<=nbinsY; ibcid++){ //BCID
        if(TMath::Abs( (itrm*binWidthX - fBCIDOffsetParam) % fBCIDPeriodParam - binWidthY*ibcid) < fBCIDBandWidthParam ){ 
          entriesOnDiagonal  += hBCID->GetBinContent(itrm,ibcid); //On  Diagonal
          //hBCID->Fill(itrm*binWidthX,ibcid*binWidthY,0.001); // visualize the diagonal belt
        }else{
          entriesOffDiagonal += hBCID->GetBinContent(itrm,ibcid); //Off Diagonal
        }
      }
    }
    if(entriesOnDiagonal<1 || entriesOffDiagonal>20){
      qualityFlagBCID = kT0Error; //no entries on diagonal
      AliDebug(AliQAv1::GetQADebugLevel(), Form("T0   %s is not diagonal", hBCID->GetName() ));

      TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
      text.AddText(Form("Check if entries are on diagonal")); 
      text.AddText(Form("Report readout problem to the T0 on-call expert")); 
      text.SetBorderSize(0);
      text.SetFillStyle(0);
      hBCID->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
    }
  }else{ //BCID empty

    qualityFlagBCID = kT0Error;
    AliDebug(AliQAv1::GetQADebugLevel(), Form("T0 :  %s has NO entries", hBCID->GetName() ));

    TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
    text.AddText(Form("NO ENTRIES!!!")); 
    text.AddText(Form("If T0 is READY report")); 
    text.AddText(Form("readout problem to the T0 on-call expert"));
    text.SetBorderSize(0);
    text.SetFillStyle(0);
    hBCID->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
  }

  //--------- mean versus vertex 1st ---------
  Int_t qualityFlagMeanVersusVertex1st = kT0Info; //init quality flag for a given histogram;
  TH2F *hMeanVersusVertex1st  = (TH2F*) listrec->UncheckedAt(220);  //fhMeanBest  time
  EraseOldMessages((TH1*) hMeanVersusVertex1st); 
 
  if(hMeanVersusVertex1st->Integral()<1){
    qualityFlagMeanVersusVertex1st = kT0Error;
    AliDebug(AliQAv1::GetQADebugLevel(), Form("T0 histogram  %s has NO entries", hMeanVersusVertex1st->GetName() ));

    TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
    text.AddText(Form("NO ENTRIES!!!")); 
    text.AddText(Form("If T0 is READY and beam is on report")); 
    text.AddText(Form("the problem to the T0 on-call expert"));
    text.SetBorderSize(0);
    text.SetFillStyle(0);
    hMeanVersusVertex1st->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
  }


  //--------- vertex TVDC on ---------
  Int_t qualityFlagVertex1stTVDCon = kT0Info; //init quality flag for a given histogram;
  TH1F *hVertex1stTVDCon  = (TH1F*) listrec->UncheckedAt(223);  //fhMeanBest  time
  EraseOldMessages((TH1*) hVertex1stTVDCon); 
 
  if(hVertex1stTVDCon->Integral()<1){
    qualityFlagVertex1stTVDCon = kT0Error;
    AliDebug(AliQAv1::GetQADebugLevel(), Form("T0 histogram  %s has NO entries", hVertex1stTVDCon->GetName() ));

    TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
    text.AddText(Form("NO ENTRIES!!!")); 
    text.AddText(Form("If T0 is READY and beam is on report")); 
    text.AddText(Form("the problem to the T0 on-call expert"));
    text.SetBorderSize(0);
    text.SetFillStyle(0);
    hVertex1stTVDCon->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
  }else{
    if(TMath::Abs(hVertex1stTVDCon->GetMean()) > fTZeroAMinusCErrorThreshold){ 
      qualityFlagVertex1stTVDCon = kT0Error;

      TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
      text.AddText(Form("Displaced vertex")); 
      text.AddText(Form("If T0 is READY and beam is on report")); 
      text.AddText(Form("the problem to the T0 on-call expert"));
      text.SetBorderSize(0);
      text.SetFillStyle(0);
      hVertex1stTVDCon->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
    }
  }

  //--------- vertex TVDC off ---------
  Int_t qualityFlagVertex1stTVDCoff = kT0Info; //init quality flag for a given histogram;
  TH1F *hVertex1stTVDCoff  = (TH1F*) listrec->UncheckedAt(225);  //fhMeanBest  time
  EraseOldMessages((TH1*) hVertex1stTVDCoff); 
 
  if(hVertex1stTVDCoff->Integral()<1){
    qualityFlagVertex1stTVDCoff = kT0Warning;
    AliDebug(AliQAv1::GetQADebugLevel(), Form("T0 histogram  %s has NO entries", hVertex1stTVDCoff->GetName() ));

    TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
    text.AddText(Form("Warning: NO ENTRIES")); 
    text.SetBorderSize(0);
    text.SetFillStyle(0);
    hVertex1stTVDCoff->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
  }



  //----------- time TVDC on ---------
    
  Int_t qualityFlagMean1stTVDCon = kT0Info; //init quality flag for a given histogram;
  TH1F *hMean1stTVDCon  = (TH1F*) listrec->UncheckedAt(226);  //fhMeanBest  time
  EraseOldMessages((TH1*) hMean1stTVDCon); 
 
  if(hMean1stTVDCon->Integral()<1){
    qualityFlagMean1stTVDCon = kT0Error;
    AliDebug(AliQAv1::GetQADebugLevel(), Form("T0 histogram  %s has NO entries", hMean1stTVDCon->GetName() ));

    TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
    text.AddText(Form("NO ENTRIES!!!")); 
    text.AddText(Form("If T0 is READY and beam is on report")); 
    text.AddText(Form("the problem to the T0 on-call expert"));
    text.SetBorderSize(0);
    text.SetFillStyle(0);
    hMean1stTVDCon->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
  }else{
    //cout<<"Mean: "<<TMath::Abs(hMean1stTVDCon->GetMean())<<" threshold "<<fTZeroAPlusCErrorThreshold<<endl;
    if(TMath::Abs(hMean1stTVDCon->GetMean()) > fTZeroAPlusCErrorThreshold){ 
      qualityFlagMean1stTVDCon = kT0Error;

      TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
      text.AddText(Form("Shift of mean time")); 
      text.AddText(Form("If T0 is READY and beam is on report")); 
      text.AddText(Form("the problem to the T0 on-call expert"));
      text.SetBorderSize(0);
      text.SetFillStyle(0);
      hMean1stTVDCon->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
    }
  }

  //----------- time TVDC off ---------
    
  Int_t qualityFlagMean1stTVDCoff = kT0Info; //init quality flag for a given histogram;
  TH1F *hMean1stTVDCoff  = (TH1F*) listrec->UncheckedAt(227);  //fhMeanBest  time
  EraseOldMessages((TH1*) hMean1stTVDCoff); 
 
  if(hMean1stTVDCoff->Integral()<1){
    qualityFlagMean1stTVDCoff = kT0Warning;
    AliDebug(AliQAv1::GetQADebugLevel(), Form("T0 histogram  %s has NO entries", hMean1stTVDCoff->GetName() ));

    TPaveText text(0.20,0.50,0.99,0.99,"NDC");   
    text.AddText(Form("Warning: NO ENTRIES")); 
    text.SetBorderSize(0);
    text.SetFillStyle(0);
    hMean1stTVDCoff->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
  }
 


  //----------------------- executive summary ---------------------
  int lowestQualityFlag = (int) qualityFlagTrigger;
  if(qualityFlagRatioCFDeffLEDeff   < lowestQualityFlag)  lowestQualityFlag = qualityFlagRatioCFDeffLEDeff;
  if(qualityFlagCFDSubtr            < lowestQualityFlag)  lowestQualityFlag = qualityFlagCFDSubtr;
  if(qualityFlagEffQTC              < lowestQualityFlag)  lowestQualityFlag = qualityFlagEffQTC;
  if(qualityFlagMeanVersusVertex1st < lowestQualityFlag)  lowestQualityFlag = qualityFlagMeanVersusVertex1st;
  if(qualityFlagBCID                < lowestQualityFlag)  lowestQualityFlag = qualityFlagBCID;
  if(qualityFlagVertex1stTVDCon     < lowestQualityFlag)  lowestQualityFlag = qualityFlagVertex1stTVDCon;
  if(qualityFlagVertex1stTVDCoff    < lowestQualityFlag)  lowestQualityFlag = qualityFlagVertex1stTVDCoff;
  if(qualityFlagMean1stTVDCon       < lowestQualityFlag)  lowestQualityFlag = qualityFlagMean1stTVDCon;
  if(qualityFlagMean1stTVDCoff      < lowestQualityFlag)  lowestQualityFlag = qualityFlagMean1stTVDCoff;
  

  return ConvertQualityFlagToDouble(lowestQualityFlag); 
  
}

//--------------------------------------------------------------------------
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(0.30,0.50,0.99,0.99,"NDC");
    
    text.AddText(Form("T0 RUN %d ",AliCDBManager::Instance()->GetRun()));
    
    AliDebug(AliQAv1::GetQADebugLevel(), Form("numentries %d mean %f  #sigma %f", (int)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);
      { // RS Clean previous additions
	TList* lstF = fhESD->GetListOfFunctions();
	if (lstF) {
	  TObject *stats = lstF->FindObject("stats");
	  lstF->Remove(stats);
	  TObject *obj;
	  while ((obj = lstF->First())) {
	    while(lstF->Remove(obj)) { }
	    delete obj;
	  }
	  if (stats) lstF->Add(stats);
	} 
      }
      fhESD->GetListOfFunctions()->Add((TPaveText*)text.Clone());	
      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;
}


//--------------------------------------------------------------------------
void AliT0QAChecker::EraseOldMessages(TH1* h) const 
{
  //erase the old captions 
  TList* lstF = h->GetListOfFunctions();
  if(lstF){  
     TObject *stats = lstF->FindObject("stats");
     lstF->Remove(stats);
     TObject *obj;
     while ((obj = lstF->First())) {
       while(lstF->Remove(obj)) { }
         delete obj;
    }
    if (stats) lstF->Add(stats);
  }
}
//--------------------------------------------------------------------------
Double_t AliT0QAChecker::ConvertQualityFlagToDouble(int qualityFlag) const 
{
  //covert quality flag to double
  Double_t checkr=1.0;

  switch ( qualityFlag ){
    case kT0Info:
        checkr = 1.0; break;
    case kT0Warning:
        checkr = 0.75; break;
    case kT0Error:
          checkr = 0.25; break;
    case kT0Fatal:
        checkr = -1.0; break;
    default:
         AliError("Invalid ecc value. FIXME !");
         checkr = 0.25; break;
  };

  return checkr; 
}
 
//--------------------------------------------------------------------------
Float_t AliT0QAChecker::GetMeanAboveThreshold(TH1F* hV, Float_t thr) const{
  //caculate mean value of histo bins above threshold
  Int_t nBins = hV->GetNbinsX();
  Int_t nBinsAboveThr = 0; 
  Float_t sum = 0;

  for(Int_t ib=1;ib<=nBins;ib++){
    Float_t val = hV->GetBinContent(ib);
    if(val<thr){
      sum+=val;
      nBinsAboveThr++; 
    }
  }

  if(nBinsAboveThr>0) return sum/nBinsAboveThr;
  else return hV->GetMean();
}
    
//--------------------------------------------------------------------------
void AliT0QAChecker::GetMeanAndRmsAroundMainMaximum(Float_t &meanHisto,Float_t &rmsHisto, TH1F *histo, int type) const{

  if(!histo){
    meanHisto=0.0;
    rmsHisto=0.0;
    return;
  }
  if(histo->Integral()<0.00001){
    meanHisto=0.0;
    rmsHisto=0.0;
    return;
  }

  double nSigma      = 3.0; //n sigma window around mean and main maximum 
  double expectedRMS = 13.0; // expected rms of the main peak in case of CFD
  if(type == 1) expectedRMS = 34.0; //LED
  if(type == 2) expectedRMS = 34.0; //QTC

  //0) approx of mean is global maximum
  Int_t   nb     =  histo->GetNbinsX();
  Int_t   bmax   =  histo->GetMaximumBin();
  Float_t xmax   =  histo->GetBinCenter(bmax);

  double window = expectedRMS * nSigma;
  //1) estimate a mean in the nSigma window around main max
  int nlow = histo->FindBin( xmax - window);
  int nhigh = histo->FindBin( xmax + window);
  if(nlow<1)   nlow = 1; 
  if(nhigh>nb) nhigh = nb;

  Float_t sum=0.0, sumWeight=0.0, sumWeightSqr=0.0;
  for(int ii=nlow;ii<=nhigh;ii++){
    sum          += histo->GetBinContent(ii);  
    sumWeight    += histo->GetBinContent(ii)*histo->GetBinCenter(ii);
  }  
  if(sum>0.0){
    meanHisto = sumWeight/sum; //mean in 1st itteration
  }else{
    meanHisto = 0.0;
    rmsHisto=0.0;
    return;
  }
  
  //2) recalculte mean and rms in the nSigma window around mean 1)
  nlow  = histo->FindBin( meanHisto - window);
  nhigh = histo->FindBin( meanHisto + window);
  if(nlow<1)   nlow = 1; 
  if(nhigh>nb) nhigh = nb;

  sum=0.0; sumWeight=0.0; sumWeightSqr=0.0;
  for(int ii=nlow;ii<=nhigh;ii++){
    sum          += histo->GetBinContent(ii);  
    sumWeight    += histo->GetBinContent(ii)*histo->GetBinCenter(ii);
    sumWeightSqr += histo->GetBinContent(ii)*histo->GetBinCenter(ii)*histo->GetBinCenter(ii);
  }
  if(sum>0.0){
    meanHisto = sumWeight/sum; //mean in 2nd itteration
    rmsHisto  = sumWeightSqr/sum - meanHisto*meanHisto;//rms square
    if(rmsHisto > 0.0) rmsHisto = sqrt(rmsHisto); //rms
    else  rmsHisto = 0.0;
    return;
  }else{
    meanHisto = 0.0;
    rmsHisto  = 0.0;
    return;
  }
}
 AliT0QAChecker.cxx:1
 AliT0QAChecker.cxx:2
 AliT0QAChecker.cxx:3
 AliT0QAChecker.cxx:4
 AliT0QAChecker.cxx:5
 AliT0QAChecker.cxx:6
 AliT0QAChecker.cxx:7
 AliT0QAChecker.cxx:8
 AliT0QAChecker.cxx:9
 AliT0QAChecker.cxx:10
 AliT0QAChecker.cxx:11
 AliT0QAChecker.cxx:12
 AliT0QAChecker.cxx:13
 AliT0QAChecker.cxx:14
 AliT0QAChecker.cxx:15
 AliT0QAChecker.cxx:16
 AliT0QAChecker.cxx:17
 AliT0QAChecker.cxx:18
 AliT0QAChecker.cxx:19
 AliT0QAChecker.cxx:20
 AliT0QAChecker.cxx:21
 AliT0QAChecker.cxx:22
 AliT0QAChecker.cxx:23
 AliT0QAChecker.cxx:24
 AliT0QAChecker.cxx:25
 AliT0QAChecker.cxx:26
 AliT0QAChecker.cxx:27
 AliT0QAChecker.cxx:28
 AliT0QAChecker.cxx:29
 AliT0QAChecker.cxx:30
 AliT0QAChecker.cxx:31
 AliT0QAChecker.cxx:32
 AliT0QAChecker.cxx:33
 AliT0QAChecker.cxx:34
 AliT0QAChecker.cxx:35
 AliT0QAChecker.cxx:36
 AliT0QAChecker.cxx:37
 AliT0QAChecker.cxx:38
 AliT0QAChecker.cxx:39
 AliT0QAChecker.cxx:40
 AliT0QAChecker.cxx:41
 AliT0QAChecker.cxx:42
 AliT0QAChecker.cxx:43
 AliT0QAChecker.cxx:44
 AliT0QAChecker.cxx:45
 AliT0QAChecker.cxx:46
 AliT0QAChecker.cxx:47
 AliT0QAChecker.cxx:48
 AliT0QAChecker.cxx:49
 AliT0QAChecker.cxx:50
 AliT0QAChecker.cxx:51
 AliT0QAChecker.cxx:52
 AliT0QAChecker.cxx:53
 AliT0QAChecker.cxx:54
 AliT0QAChecker.cxx:55
 AliT0QAChecker.cxx:56
 AliT0QAChecker.cxx:57
 AliT0QAChecker.cxx:58
 AliT0QAChecker.cxx:59
 AliT0QAChecker.cxx:60
 AliT0QAChecker.cxx:61
 AliT0QAChecker.cxx:62
 AliT0QAChecker.cxx:63
 AliT0QAChecker.cxx:64
 AliT0QAChecker.cxx:65
 AliT0QAChecker.cxx:66
 AliT0QAChecker.cxx:67
 AliT0QAChecker.cxx:68
 AliT0QAChecker.cxx:69
 AliT0QAChecker.cxx:70
 AliT0QAChecker.cxx:71
 AliT0QAChecker.cxx:72
 AliT0QAChecker.cxx:73
 AliT0QAChecker.cxx:74
 AliT0QAChecker.cxx:75
 AliT0QAChecker.cxx:76
 AliT0QAChecker.cxx:77
 AliT0QAChecker.cxx:78
 AliT0QAChecker.cxx:79
 AliT0QAChecker.cxx:80
 AliT0QAChecker.cxx:81
 AliT0QAChecker.cxx:82
 AliT0QAChecker.cxx:83
 AliT0QAChecker.cxx:84
 AliT0QAChecker.cxx:85
 AliT0QAChecker.cxx:86
 AliT0QAChecker.cxx:87
 AliT0QAChecker.cxx:88
 AliT0QAChecker.cxx:89
 AliT0QAChecker.cxx:90
 AliT0QAChecker.cxx:91
 AliT0QAChecker.cxx:92
 AliT0QAChecker.cxx:93
 AliT0QAChecker.cxx:94
 AliT0QAChecker.cxx:95
 AliT0QAChecker.cxx:96
 AliT0QAChecker.cxx:97
 AliT0QAChecker.cxx:98
 AliT0QAChecker.cxx:99
 AliT0QAChecker.cxx:100
 AliT0QAChecker.cxx:101
 AliT0QAChecker.cxx:102
 AliT0QAChecker.cxx:103
 AliT0QAChecker.cxx:104
 AliT0QAChecker.cxx:105
 AliT0QAChecker.cxx:106
 AliT0QAChecker.cxx:107
 AliT0QAChecker.cxx:108
 AliT0QAChecker.cxx:109
 AliT0QAChecker.cxx:110
 AliT0QAChecker.cxx:111
 AliT0QAChecker.cxx:112
 AliT0QAChecker.cxx:113
 AliT0QAChecker.cxx:114
 AliT0QAChecker.cxx:115
 AliT0QAChecker.cxx:116
 AliT0QAChecker.cxx:117
 AliT0QAChecker.cxx:118
 AliT0QAChecker.cxx:119
 AliT0QAChecker.cxx:120
 AliT0QAChecker.cxx:121
 AliT0QAChecker.cxx:122
 AliT0QAChecker.cxx:123
 AliT0QAChecker.cxx:124
 AliT0QAChecker.cxx:125
 AliT0QAChecker.cxx:126
 AliT0QAChecker.cxx:127
 AliT0QAChecker.cxx:128
 AliT0QAChecker.cxx:129
 AliT0QAChecker.cxx:130
 AliT0QAChecker.cxx:131
 AliT0QAChecker.cxx:132
 AliT0QAChecker.cxx:133
 AliT0QAChecker.cxx:134
 AliT0QAChecker.cxx:135
 AliT0QAChecker.cxx:136
 AliT0QAChecker.cxx:137
 AliT0QAChecker.cxx:138
 AliT0QAChecker.cxx:139
 AliT0QAChecker.cxx:140
 AliT0QAChecker.cxx:141
 AliT0QAChecker.cxx:142
 AliT0QAChecker.cxx:143
 AliT0QAChecker.cxx:144
 AliT0QAChecker.cxx:145
 AliT0QAChecker.cxx:146
 AliT0QAChecker.cxx:147
 AliT0QAChecker.cxx:148
 AliT0QAChecker.cxx:149
 AliT0QAChecker.cxx:150
 AliT0QAChecker.cxx:151
 AliT0QAChecker.cxx:152
 AliT0QAChecker.cxx:153
 AliT0QAChecker.cxx:154
 AliT0QAChecker.cxx:155
 AliT0QAChecker.cxx:156
 AliT0QAChecker.cxx:157
 AliT0QAChecker.cxx:158
 AliT0QAChecker.cxx:159
 AliT0QAChecker.cxx:160
 AliT0QAChecker.cxx:161
 AliT0QAChecker.cxx:162
 AliT0QAChecker.cxx:163
 AliT0QAChecker.cxx:164
 AliT0QAChecker.cxx:165
 AliT0QAChecker.cxx:166
 AliT0QAChecker.cxx:167
 AliT0QAChecker.cxx:168
 AliT0QAChecker.cxx:169
 AliT0QAChecker.cxx:170
 AliT0QAChecker.cxx:171
 AliT0QAChecker.cxx:172
 AliT0QAChecker.cxx:173
 AliT0QAChecker.cxx:174
 AliT0QAChecker.cxx:175
 AliT0QAChecker.cxx:176
 AliT0QAChecker.cxx:177
 AliT0QAChecker.cxx:178
 AliT0QAChecker.cxx:179
 AliT0QAChecker.cxx:180
 AliT0QAChecker.cxx:181
 AliT0QAChecker.cxx:182
 AliT0QAChecker.cxx:183
 AliT0QAChecker.cxx:184
 AliT0QAChecker.cxx:185
 AliT0QAChecker.cxx:186
 AliT0QAChecker.cxx:187
 AliT0QAChecker.cxx:188
 AliT0QAChecker.cxx:189
 AliT0QAChecker.cxx:190
 AliT0QAChecker.cxx:191
 AliT0QAChecker.cxx:192
 AliT0QAChecker.cxx:193
 AliT0QAChecker.cxx:194
 AliT0QAChecker.cxx:195
 AliT0QAChecker.cxx:196
 AliT0QAChecker.cxx:197
 AliT0QAChecker.cxx:198
 AliT0QAChecker.cxx:199
 AliT0QAChecker.cxx:200
 AliT0QAChecker.cxx:201
 AliT0QAChecker.cxx:202
 AliT0QAChecker.cxx:203
 AliT0QAChecker.cxx:204
 AliT0QAChecker.cxx:205
 AliT0QAChecker.cxx:206
 AliT0QAChecker.cxx:207
 AliT0QAChecker.cxx:208
 AliT0QAChecker.cxx:209
 AliT0QAChecker.cxx:210
 AliT0QAChecker.cxx:211
 AliT0QAChecker.cxx:212
 AliT0QAChecker.cxx:213
 AliT0QAChecker.cxx:214
 AliT0QAChecker.cxx:215
 AliT0QAChecker.cxx:216
 AliT0QAChecker.cxx:217
 AliT0QAChecker.cxx:218
 AliT0QAChecker.cxx:219
 AliT0QAChecker.cxx:220
 AliT0QAChecker.cxx:221
 AliT0QAChecker.cxx:222
 AliT0QAChecker.cxx:223
 AliT0QAChecker.cxx:224
 AliT0QAChecker.cxx:225
 AliT0QAChecker.cxx:226
 AliT0QAChecker.cxx:227
 AliT0QAChecker.cxx:228
 AliT0QAChecker.cxx:229
 AliT0QAChecker.cxx:230
 AliT0QAChecker.cxx:231
 AliT0QAChecker.cxx:232
 AliT0QAChecker.cxx:233
 AliT0QAChecker.cxx:234
 AliT0QAChecker.cxx:235
 AliT0QAChecker.cxx:236
 AliT0QAChecker.cxx:237
 AliT0QAChecker.cxx:238
 AliT0QAChecker.cxx:239
 AliT0QAChecker.cxx:240
 AliT0QAChecker.cxx:241
 AliT0QAChecker.cxx:242
 AliT0QAChecker.cxx:243
 AliT0QAChecker.cxx:244
 AliT0QAChecker.cxx:245
 AliT0QAChecker.cxx:246
 AliT0QAChecker.cxx:247
 AliT0QAChecker.cxx:248
 AliT0QAChecker.cxx:249
 AliT0QAChecker.cxx:250
 AliT0QAChecker.cxx:251
 AliT0QAChecker.cxx:252
 AliT0QAChecker.cxx:253
 AliT0QAChecker.cxx:254
 AliT0QAChecker.cxx:255
 AliT0QAChecker.cxx:256
 AliT0QAChecker.cxx:257
 AliT0QAChecker.cxx:258
 AliT0QAChecker.cxx:259
 AliT0QAChecker.cxx:260
 AliT0QAChecker.cxx:261
 AliT0QAChecker.cxx:262
 AliT0QAChecker.cxx:263
 AliT0QAChecker.cxx:264
 AliT0QAChecker.cxx:265
 AliT0QAChecker.cxx:266
 AliT0QAChecker.cxx:267
 AliT0QAChecker.cxx:268
 AliT0QAChecker.cxx:269
 AliT0QAChecker.cxx:270
 AliT0QAChecker.cxx:271
 AliT0QAChecker.cxx:272
 AliT0QAChecker.cxx:273
 AliT0QAChecker.cxx:274
 AliT0QAChecker.cxx:275
 AliT0QAChecker.cxx:276
 AliT0QAChecker.cxx:277
 AliT0QAChecker.cxx:278
 AliT0QAChecker.cxx:279
 AliT0QAChecker.cxx:280
 AliT0QAChecker.cxx:281
 AliT0QAChecker.cxx:282
 AliT0QAChecker.cxx:283
 AliT0QAChecker.cxx:284
 AliT0QAChecker.cxx:285
 AliT0QAChecker.cxx:286
 AliT0QAChecker.cxx:287
 AliT0QAChecker.cxx:288
 AliT0QAChecker.cxx:289
 AliT0QAChecker.cxx:290
 AliT0QAChecker.cxx:291
 AliT0QAChecker.cxx:292
 AliT0QAChecker.cxx:293
 AliT0QAChecker.cxx:294
 AliT0QAChecker.cxx:295
 AliT0QAChecker.cxx:296
 AliT0QAChecker.cxx:297
 AliT0QAChecker.cxx:298
 AliT0QAChecker.cxx:299
 AliT0QAChecker.cxx:300
 AliT0QAChecker.cxx:301
 AliT0QAChecker.cxx:302
 AliT0QAChecker.cxx:303
 AliT0QAChecker.cxx:304
 AliT0QAChecker.cxx:305
 AliT0QAChecker.cxx:306
 AliT0QAChecker.cxx:307
 AliT0QAChecker.cxx:308
 AliT0QAChecker.cxx:309
 AliT0QAChecker.cxx:310
 AliT0QAChecker.cxx:311
 AliT0QAChecker.cxx:312
 AliT0QAChecker.cxx:313
 AliT0QAChecker.cxx:314
 AliT0QAChecker.cxx:315
 AliT0QAChecker.cxx:316
 AliT0QAChecker.cxx:317
 AliT0QAChecker.cxx:318
 AliT0QAChecker.cxx:319
 AliT0QAChecker.cxx:320
 AliT0QAChecker.cxx:321
 AliT0QAChecker.cxx:322
 AliT0QAChecker.cxx:323
 AliT0QAChecker.cxx:324
 AliT0QAChecker.cxx:325
 AliT0QAChecker.cxx:326
 AliT0QAChecker.cxx:327
 AliT0QAChecker.cxx:328
 AliT0QAChecker.cxx:329
 AliT0QAChecker.cxx:330
 AliT0QAChecker.cxx:331
 AliT0QAChecker.cxx:332
 AliT0QAChecker.cxx:333
 AliT0QAChecker.cxx:334
 AliT0QAChecker.cxx:335
 AliT0QAChecker.cxx:336
 AliT0QAChecker.cxx:337
 AliT0QAChecker.cxx:338
 AliT0QAChecker.cxx:339
 AliT0QAChecker.cxx:340
 AliT0QAChecker.cxx:341
 AliT0QAChecker.cxx:342
 AliT0QAChecker.cxx:343
 AliT0QAChecker.cxx:344
 AliT0QAChecker.cxx:345
 AliT0QAChecker.cxx:346
 AliT0QAChecker.cxx:347
 AliT0QAChecker.cxx:348
 AliT0QAChecker.cxx:349
 AliT0QAChecker.cxx:350
 AliT0QAChecker.cxx:351
 AliT0QAChecker.cxx:352
 AliT0QAChecker.cxx:353
 AliT0QAChecker.cxx:354
 AliT0QAChecker.cxx:355
 AliT0QAChecker.cxx:356
 AliT0QAChecker.cxx:357
 AliT0QAChecker.cxx:358
 AliT0QAChecker.cxx:359
 AliT0QAChecker.cxx:360
 AliT0QAChecker.cxx:361
 AliT0QAChecker.cxx:362
 AliT0QAChecker.cxx:363
 AliT0QAChecker.cxx:364
 AliT0QAChecker.cxx:365
 AliT0QAChecker.cxx:366
 AliT0QAChecker.cxx:367
 AliT0QAChecker.cxx:368
 AliT0QAChecker.cxx:369
 AliT0QAChecker.cxx:370
 AliT0QAChecker.cxx:371
 AliT0QAChecker.cxx:372
 AliT0QAChecker.cxx:373
 AliT0QAChecker.cxx:374
 AliT0QAChecker.cxx:375
 AliT0QAChecker.cxx:376
 AliT0QAChecker.cxx:377
 AliT0QAChecker.cxx:378
 AliT0QAChecker.cxx:379
 AliT0QAChecker.cxx:380
 AliT0QAChecker.cxx:381
 AliT0QAChecker.cxx:382
 AliT0QAChecker.cxx:383
 AliT0QAChecker.cxx:384
 AliT0QAChecker.cxx:385
 AliT0QAChecker.cxx:386
 AliT0QAChecker.cxx:387
 AliT0QAChecker.cxx:388
 AliT0QAChecker.cxx:389
 AliT0QAChecker.cxx:390
 AliT0QAChecker.cxx:391
 AliT0QAChecker.cxx:392
 AliT0QAChecker.cxx:393
 AliT0QAChecker.cxx:394
 AliT0QAChecker.cxx:395
 AliT0QAChecker.cxx:396
 AliT0QAChecker.cxx:397
 AliT0QAChecker.cxx:398
 AliT0QAChecker.cxx:399
 AliT0QAChecker.cxx:400
 AliT0QAChecker.cxx:401
 AliT0QAChecker.cxx:402
 AliT0QAChecker.cxx:403
 AliT0QAChecker.cxx:404
 AliT0QAChecker.cxx:405
 AliT0QAChecker.cxx:406
 AliT0QAChecker.cxx:407
 AliT0QAChecker.cxx:408
 AliT0QAChecker.cxx:409
 AliT0QAChecker.cxx:410
 AliT0QAChecker.cxx:411
 AliT0QAChecker.cxx:412
 AliT0QAChecker.cxx:413
 AliT0QAChecker.cxx:414
 AliT0QAChecker.cxx:415
 AliT0QAChecker.cxx:416
 AliT0QAChecker.cxx:417
 AliT0QAChecker.cxx:418
 AliT0QAChecker.cxx:419
 AliT0QAChecker.cxx:420
 AliT0QAChecker.cxx:421
 AliT0QAChecker.cxx:422
 AliT0QAChecker.cxx:423
 AliT0QAChecker.cxx:424
 AliT0QAChecker.cxx:425
 AliT0QAChecker.cxx:426
 AliT0QAChecker.cxx:427
 AliT0QAChecker.cxx:428
 AliT0QAChecker.cxx:429
 AliT0QAChecker.cxx:430
 AliT0QAChecker.cxx:431
 AliT0QAChecker.cxx:432
 AliT0QAChecker.cxx:433
 AliT0QAChecker.cxx:434
 AliT0QAChecker.cxx:435
 AliT0QAChecker.cxx:436
 AliT0QAChecker.cxx:437
 AliT0QAChecker.cxx:438
 AliT0QAChecker.cxx:439
 AliT0QAChecker.cxx:440
 AliT0QAChecker.cxx:441
 AliT0QAChecker.cxx:442
 AliT0QAChecker.cxx:443
 AliT0QAChecker.cxx:444
 AliT0QAChecker.cxx:445
 AliT0QAChecker.cxx:446
 AliT0QAChecker.cxx:447
 AliT0QAChecker.cxx:448
 AliT0QAChecker.cxx:449
 AliT0QAChecker.cxx:450
 AliT0QAChecker.cxx:451
 AliT0QAChecker.cxx:452
 AliT0QAChecker.cxx:453
 AliT0QAChecker.cxx:454
 AliT0QAChecker.cxx:455
 AliT0QAChecker.cxx:456
 AliT0QAChecker.cxx:457
 AliT0QAChecker.cxx:458
 AliT0QAChecker.cxx:459
 AliT0QAChecker.cxx:460
 AliT0QAChecker.cxx:461
 AliT0QAChecker.cxx:462
 AliT0QAChecker.cxx:463
 AliT0QAChecker.cxx:464
 AliT0QAChecker.cxx:465
 AliT0QAChecker.cxx:466
 AliT0QAChecker.cxx:467
 AliT0QAChecker.cxx:468
 AliT0QAChecker.cxx:469
 AliT0QAChecker.cxx:470
 AliT0QAChecker.cxx:471
 AliT0QAChecker.cxx:472
 AliT0QAChecker.cxx:473
 AliT0QAChecker.cxx:474
 AliT0QAChecker.cxx:475
 AliT0QAChecker.cxx:476
 AliT0QAChecker.cxx:477
 AliT0QAChecker.cxx:478
 AliT0QAChecker.cxx:479
 AliT0QAChecker.cxx:480
 AliT0QAChecker.cxx:481
 AliT0QAChecker.cxx:482
 AliT0QAChecker.cxx:483
 AliT0QAChecker.cxx:484
 AliT0QAChecker.cxx:485
 AliT0QAChecker.cxx:486
 AliT0QAChecker.cxx:487
 AliT0QAChecker.cxx:488
 AliT0QAChecker.cxx:489
 AliT0QAChecker.cxx:490
 AliT0QAChecker.cxx:491
 AliT0QAChecker.cxx:492
 AliT0QAChecker.cxx:493
 AliT0QAChecker.cxx:494
 AliT0QAChecker.cxx:495
 AliT0QAChecker.cxx:496
 AliT0QAChecker.cxx:497
 AliT0QAChecker.cxx:498
 AliT0QAChecker.cxx:499
 AliT0QAChecker.cxx:500
 AliT0QAChecker.cxx:501
 AliT0QAChecker.cxx:502
 AliT0QAChecker.cxx:503
 AliT0QAChecker.cxx:504
 AliT0QAChecker.cxx:505
 AliT0QAChecker.cxx:506
 AliT0QAChecker.cxx:507
 AliT0QAChecker.cxx:508
 AliT0QAChecker.cxx:509
 AliT0QAChecker.cxx:510
 AliT0QAChecker.cxx:511
 AliT0QAChecker.cxx:512
 AliT0QAChecker.cxx:513
 AliT0QAChecker.cxx:514
 AliT0QAChecker.cxx:515
 AliT0QAChecker.cxx:516
 AliT0QAChecker.cxx:517
 AliT0QAChecker.cxx:518
 AliT0QAChecker.cxx:519
 AliT0QAChecker.cxx:520
 AliT0QAChecker.cxx:521
 AliT0QAChecker.cxx:522
 AliT0QAChecker.cxx:523
 AliT0QAChecker.cxx:524
 AliT0QAChecker.cxx:525
 AliT0QAChecker.cxx:526
 AliT0QAChecker.cxx:527
 AliT0QAChecker.cxx:528
 AliT0QAChecker.cxx:529
 AliT0QAChecker.cxx:530
 AliT0QAChecker.cxx:531
 AliT0QAChecker.cxx:532
 AliT0QAChecker.cxx:533
 AliT0QAChecker.cxx:534
 AliT0QAChecker.cxx:535
 AliT0QAChecker.cxx:536
 AliT0QAChecker.cxx:537
 AliT0QAChecker.cxx:538
 AliT0QAChecker.cxx:539
 AliT0QAChecker.cxx:540
 AliT0QAChecker.cxx:541
 AliT0QAChecker.cxx:542
 AliT0QAChecker.cxx:543
 AliT0QAChecker.cxx:544
 AliT0QAChecker.cxx:545
 AliT0QAChecker.cxx:546
 AliT0QAChecker.cxx:547
 AliT0QAChecker.cxx:548
 AliT0QAChecker.cxx:549
 AliT0QAChecker.cxx:550
 AliT0QAChecker.cxx:551
 AliT0QAChecker.cxx:552
 AliT0QAChecker.cxx:553
 AliT0QAChecker.cxx:554
 AliT0QAChecker.cxx:555
 AliT0QAChecker.cxx:556
 AliT0QAChecker.cxx:557
 AliT0QAChecker.cxx:558
 AliT0QAChecker.cxx:559
 AliT0QAChecker.cxx:560
 AliT0QAChecker.cxx:561
 AliT0QAChecker.cxx:562
 AliT0QAChecker.cxx:563
 AliT0QAChecker.cxx:564
 AliT0QAChecker.cxx:565
 AliT0QAChecker.cxx:566
 AliT0QAChecker.cxx:567
 AliT0QAChecker.cxx:568
 AliT0QAChecker.cxx:569
 AliT0QAChecker.cxx:570
 AliT0QAChecker.cxx:571
 AliT0QAChecker.cxx:572
 AliT0QAChecker.cxx:573
 AliT0QAChecker.cxx:574
 AliT0QAChecker.cxx:575
 AliT0QAChecker.cxx:576
 AliT0QAChecker.cxx:577
 AliT0QAChecker.cxx:578
 AliT0QAChecker.cxx:579
 AliT0QAChecker.cxx:580
 AliT0QAChecker.cxx:581
 AliT0QAChecker.cxx:582
 AliT0QAChecker.cxx:583
 AliT0QAChecker.cxx:584
 AliT0QAChecker.cxx:585
 AliT0QAChecker.cxx:586
 AliT0QAChecker.cxx:587
 AliT0QAChecker.cxx:588
 AliT0QAChecker.cxx:589
 AliT0QAChecker.cxx:590
 AliT0QAChecker.cxx:591
 AliT0QAChecker.cxx:592
 AliT0QAChecker.cxx:593
 AliT0QAChecker.cxx:594
 AliT0QAChecker.cxx:595
 AliT0QAChecker.cxx:596
 AliT0QAChecker.cxx:597
 AliT0QAChecker.cxx:598
 AliT0QAChecker.cxx:599
 AliT0QAChecker.cxx:600
 AliT0QAChecker.cxx:601
 AliT0QAChecker.cxx:602
 AliT0QAChecker.cxx:603
 AliT0QAChecker.cxx:604
 AliT0QAChecker.cxx:605
 AliT0QAChecker.cxx:606
 AliT0QAChecker.cxx:607
 AliT0QAChecker.cxx:608
 AliT0QAChecker.cxx:609
 AliT0QAChecker.cxx:610
 AliT0QAChecker.cxx:611
 AliT0QAChecker.cxx:612
 AliT0QAChecker.cxx:613
 AliT0QAChecker.cxx:614
 AliT0QAChecker.cxx:615
 AliT0QAChecker.cxx:616
 AliT0QAChecker.cxx:617
 AliT0QAChecker.cxx:618
 AliT0QAChecker.cxx:619
 AliT0QAChecker.cxx:620
 AliT0QAChecker.cxx:621
 AliT0QAChecker.cxx:622
 AliT0QAChecker.cxx:623
 AliT0QAChecker.cxx:624
 AliT0QAChecker.cxx:625
 AliT0QAChecker.cxx:626
 AliT0QAChecker.cxx:627
 AliT0QAChecker.cxx:628
 AliT0QAChecker.cxx:629
 AliT0QAChecker.cxx:630
 AliT0QAChecker.cxx:631
 AliT0QAChecker.cxx:632
 AliT0QAChecker.cxx:633
 AliT0QAChecker.cxx:634
 AliT0QAChecker.cxx:635
 AliT0QAChecker.cxx:636
 AliT0QAChecker.cxx:637
 AliT0QAChecker.cxx:638
 AliT0QAChecker.cxx:639
 AliT0QAChecker.cxx:640
 AliT0QAChecker.cxx:641
 AliT0QAChecker.cxx:642
 AliT0QAChecker.cxx:643
 AliT0QAChecker.cxx:644
 AliT0QAChecker.cxx:645
 AliT0QAChecker.cxx:646
 AliT0QAChecker.cxx:647
 AliT0QAChecker.cxx:648
 AliT0QAChecker.cxx:649
 AliT0QAChecker.cxx:650
 AliT0QAChecker.cxx:651
 AliT0QAChecker.cxx:652
 AliT0QAChecker.cxx:653
 AliT0QAChecker.cxx:654
 AliT0QAChecker.cxx:655
 AliT0QAChecker.cxx:656
 AliT0QAChecker.cxx:657
 AliT0QAChecker.cxx:658
 AliT0QAChecker.cxx:659
 AliT0QAChecker.cxx:660
 AliT0QAChecker.cxx:661
 AliT0QAChecker.cxx:662
 AliT0QAChecker.cxx:663
 AliT0QAChecker.cxx:664
 AliT0QAChecker.cxx:665
 AliT0QAChecker.cxx:666
 AliT0QAChecker.cxx:667
 AliT0QAChecker.cxx:668
 AliT0QAChecker.cxx:669
 AliT0QAChecker.cxx:670
 AliT0QAChecker.cxx:671
 AliT0QAChecker.cxx:672
 AliT0QAChecker.cxx:673
 AliT0QAChecker.cxx:674
 AliT0QAChecker.cxx:675
 AliT0QAChecker.cxx:676
 AliT0QAChecker.cxx:677
 AliT0QAChecker.cxx:678
 AliT0QAChecker.cxx:679
 AliT0QAChecker.cxx:680
 AliT0QAChecker.cxx:681
 AliT0QAChecker.cxx:682
 AliT0QAChecker.cxx:683
 AliT0QAChecker.cxx:684
 AliT0QAChecker.cxx:685
 AliT0QAChecker.cxx:686
 AliT0QAChecker.cxx:687
 AliT0QAChecker.cxx:688
 AliT0QAChecker.cxx:689
 AliT0QAChecker.cxx:690
 AliT0QAChecker.cxx:691
 AliT0QAChecker.cxx:692
 AliT0QAChecker.cxx:693
 AliT0QAChecker.cxx:694
 AliT0QAChecker.cxx:695
 AliT0QAChecker.cxx:696
 AliT0QAChecker.cxx:697
 AliT0QAChecker.cxx:698
 AliT0QAChecker.cxx:699
 AliT0QAChecker.cxx:700
 AliT0QAChecker.cxx:701
 AliT0QAChecker.cxx:702
 AliT0QAChecker.cxx:703
 AliT0QAChecker.cxx:704
 AliT0QAChecker.cxx:705
 AliT0QAChecker.cxx:706
 AliT0QAChecker.cxx:707
 AliT0QAChecker.cxx:708
 AliT0QAChecker.cxx:709
 AliT0QAChecker.cxx:710
 AliT0QAChecker.cxx:711
 AliT0QAChecker.cxx:712
 AliT0QAChecker.cxx:713
 AliT0QAChecker.cxx:714
 AliT0QAChecker.cxx:715
 AliT0QAChecker.cxx:716
 AliT0QAChecker.cxx:717
 AliT0QAChecker.cxx:718
 AliT0QAChecker.cxx:719
 AliT0QAChecker.cxx:720
 AliT0QAChecker.cxx:721
 AliT0QAChecker.cxx:722
 AliT0QAChecker.cxx:723
 AliT0QAChecker.cxx:724
 AliT0QAChecker.cxx:725
 AliT0QAChecker.cxx:726
 AliT0QAChecker.cxx:727
 AliT0QAChecker.cxx:728
 AliT0QAChecker.cxx:729
 AliT0QAChecker.cxx:730
 AliT0QAChecker.cxx:731
 AliT0QAChecker.cxx:732
 AliT0QAChecker.cxx:733
 AliT0QAChecker.cxx:734
 AliT0QAChecker.cxx:735
 AliT0QAChecker.cxx:736
 AliT0QAChecker.cxx:737
 AliT0QAChecker.cxx:738
 AliT0QAChecker.cxx:739
 AliT0QAChecker.cxx:740
 AliT0QAChecker.cxx:741
 AliT0QAChecker.cxx:742
 AliT0QAChecker.cxx:743
 AliT0QAChecker.cxx:744
 AliT0QAChecker.cxx:745
 AliT0QAChecker.cxx:746
 AliT0QAChecker.cxx:747
 AliT0QAChecker.cxx:748
 AliT0QAChecker.cxx:749
 AliT0QAChecker.cxx:750
 AliT0QAChecker.cxx:751
 AliT0QAChecker.cxx:752
 AliT0QAChecker.cxx:753
 AliT0QAChecker.cxx:754
 AliT0QAChecker.cxx:755
 AliT0QAChecker.cxx:756
 AliT0QAChecker.cxx:757
 AliT0QAChecker.cxx:758
 AliT0QAChecker.cxx:759
 AliT0QAChecker.cxx:760
 AliT0QAChecker.cxx:761
 AliT0QAChecker.cxx:762
 AliT0QAChecker.cxx:763
 AliT0QAChecker.cxx:764
 AliT0QAChecker.cxx:765
 AliT0QAChecker.cxx:766
 AliT0QAChecker.cxx:767
 AliT0QAChecker.cxx:768
 AliT0QAChecker.cxx:769
 AliT0QAChecker.cxx:770
 AliT0QAChecker.cxx:771
 AliT0QAChecker.cxx:772
 AliT0QAChecker.cxx:773
 AliT0QAChecker.cxx:774
 AliT0QAChecker.cxx:775
 AliT0QAChecker.cxx:776
 AliT0QAChecker.cxx:777
 AliT0QAChecker.cxx:778
 AliT0QAChecker.cxx:779
 AliT0QAChecker.cxx:780
 AliT0QAChecker.cxx:781
 AliT0QAChecker.cxx:782
 AliT0QAChecker.cxx:783
 AliT0QAChecker.cxx:784
 AliT0QAChecker.cxx:785
 AliT0QAChecker.cxx:786
 AliT0QAChecker.cxx:787
 AliT0QAChecker.cxx:788
 AliT0QAChecker.cxx:789
 AliT0QAChecker.cxx:790
 AliT0QAChecker.cxx:791
 AliT0QAChecker.cxx:792
 AliT0QAChecker.cxx:793
 AliT0QAChecker.cxx:794
 AliT0QAChecker.cxx:795
 AliT0QAChecker.cxx:796
 AliT0QAChecker.cxx:797
 AliT0QAChecker.cxx:798
 AliT0QAChecker.cxx:799
 AliT0QAChecker.cxx:800
 AliT0QAChecker.cxx:801
 AliT0QAChecker.cxx:802
 AliT0QAChecker.cxx:803
 AliT0QAChecker.cxx:804
 AliT0QAChecker.cxx:805
 AliT0QAChecker.cxx:806
 AliT0QAChecker.cxx:807
 AliT0QAChecker.cxx:808
 AliT0QAChecker.cxx:809
 AliT0QAChecker.cxx:810
 AliT0QAChecker.cxx:811
 AliT0QAChecker.cxx:812
 AliT0QAChecker.cxx:813
 AliT0QAChecker.cxx:814
 AliT0QAChecker.cxx:815
 AliT0QAChecker.cxx:816
 AliT0QAChecker.cxx:817
 AliT0QAChecker.cxx:818
 AliT0QAChecker.cxx:819
 AliT0QAChecker.cxx:820
 AliT0QAChecker.cxx:821
 AliT0QAChecker.cxx:822
 AliT0QAChecker.cxx:823
 AliT0QAChecker.cxx:824
 AliT0QAChecker.cxx:825
 AliT0QAChecker.cxx:826
 AliT0QAChecker.cxx:827
 AliT0QAChecker.cxx:828
 AliT0QAChecker.cxx:829
 AliT0QAChecker.cxx:830
 AliT0QAChecker.cxx:831
 AliT0QAChecker.cxx:832
 AliT0QAChecker.cxx:833
 AliT0QAChecker.cxx:834
 AliT0QAChecker.cxx:835
 AliT0QAChecker.cxx:836
 AliT0QAChecker.cxx:837
 AliT0QAChecker.cxx:838
 AliT0QAChecker.cxx:839
 AliT0QAChecker.cxx:840
 AliT0QAChecker.cxx:841
 AliT0QAChecker.cxx:842
 AliT0QAChecker.cxx:843
 AliT0QAChecker.cxx:844
 AliT0QAChecker.cxx:845
 AliT0QAChecker.cxx:846
 AliT0QAChecker.cxx:847
 AliT0QAChecker.cxx:848
 AliT0QAChecker.cxx:849
 AliT0QAChecker.cxx:850
 AliT0QAChecker.cxx:851
 AliT0QAChecker.cxx:852
 AliT0QAChecker.cxx:853
 AliT0QAChecker.cxx:854
 AliT0QAChecker.cxx:855
 AliT0QAChecker.cxx:856
 AliT0QAChecker.cxx:857
 AliT0QAChecker.cxx:858
 AliT0QAChecker.cxx:859
 AliT0QAChecker.cxx:860
 AliT0QAChecker.cxx:861
 AliT0QAChecker.cxx:862
 AliT0QAChecker.cxx:863
 AliT0QAChecker.cxx:864
 AliT0QAChecker.cxx:865
 AliT0QAChecker.cxx:866
 AliT0QAChecker.cxx:867
 AliT0QAChecker.cxx:868
 AliT0QAChecker.cxx:869
 AliT0QAChecker.cxx:870
 AliT0QAChecker.cxx:871
 AliT0QAChecker.cxx:872
 AliT0QAChecker.cxx:873
 AliT0QAChecker.cxx:874
 AliT0QAChecker.cxx:875
 AliT0QAChecker.cxx:876
 AliT0QAChecker.cxx:877
 AliT0QAChecker.cxx:878
 AliT0QAChecker.cxx:879
 AliT0QAChecker.cxx:880
 AliT0QAChecker.cxx:881
 AliT0QAChecker.cxx:882
 AliT0QAChecker.cxx:883