ROOT logo
/**************************************************************************
 * Copyright(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.                  *
 **************************************************************************/


/* $Id$ */

//...
//  Checks the quality assurance. 
//  By comparing with reference data
//  Skeleton for HMPID
//...

// --- ROOT system ---
#include <TClass.h>
#include <TH1F.h> 
#include <TH1I.h>
#include <TH2.h> 
#include <TF1.h> 
#include <TIterator.h> 
#include <TKey.h> 
#include <TFile.h>
#include <TLine.h>
#include <TParameter.h> 
#include <TPaveText.h>
// --- Standard library ---

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

ClassImp(AliHMPIDQAChecker)
 //_________________________________________________________________
AliHMPIDQAChecker::AliHMPIDQAChecker() : 
AliQACheckerBase("HMPID","HMPID Quality Assurance Data Checker"), 
fNoReference(kTRUE),
fQARefRec(NULL),

fHmpQaThr_NumberOfExcludedDDL(0),
fHmpQaThr_DataSizeLowerThreshold(900),
fHmpQaThr_DataSizeUpperThreshold(1500),
fHmpQaThr_PadOccupancyLowerThreshold(0.005),
fHmpQaThr_PadOccupancyUpperThreshold(0.8),
fHmpQaThr_SectorGainLossWarningThreshold(3),
fHmpQaThr_SectorGainLossErrorThreshold(6),
fHmpQaThr_MissingPadFractionWarningThreshold(0.3),
fHmpQaThr_MissingPadFractionErrorThreshold(0.5),
fIsOnlineThr(kFALSE)                                 
 


{
    //ctor, fetches the reference data from OCDB 
  char * detOCDBDir = Form("HMPID/%s/%s", AliQAv1::GetRefOCDBDirName(), AliQAv1::GetRefDataDirName()) ; 
  AliCDBEntry * QARefRec = AliQAManager::QAManager()->Get(detOCDBDir);
  if(QARefRec) {
    fQARefRec = dynamic_cast<TObjArray*> (QARefRec->GetObject()) ; 
    if (fQARefRec)
      if (fQARefRec->GetEntries()) 
        fNoReference = kFALSE ;            
    if (fNoReference) 
      AliInfo("QA reference data NOT retrieved for Reconstruction check. No HMPIDChecker!");
  }
    
}

//_________________________________________________________________
AliHMPIDQAChecker::~AliHMPIDQAChecker() 
{
  if(fQARefRec) { fQARefRec->Delete() ;   delete fQARefRec ; }
}
//_________________________________________________________________
void AliHMPIDQAChecker::Check(Double_t *  check, AliQAv1::ALITASK_t index, TObjArray ** list, const AliDetectorRecoParam * /*recoParam*/) 
{
//
// Main check function: Depending on the TASK, different checks are applied
// At the moment:       check for empty histograms and checks for RecPoints

  InitOnlineThresholds();    
  
  if(fNoReference)  

  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
    check[specie] = 1.0;    
    //printf("+++++++++++++++++++++ specie %d name: %s \n",specie,AliRecoParam::GetEventSpecieName(specie));
    if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) continue ;     
    // checking for empy histograms
    if(CheckEntries(list[specie]) == 0)  {
      AliWarning("histograms are empty");
      check[specie] = 0.4;//-> Corresponds to kWARNING see AliQACheckerBase::Run
    }
  
    check[specie] = AliQAv1::kINFO ;
    
    
    //check sim
    if(index == AliQAv1::kSIM) check[specie] = CheckSim(list[specie], fQARefRec);

    // checking rec points
    if(index == AliQAv1::kREC) check[specie] = CheckRec(list[specie], fQARefRec);
   
    //checking raw data
    if(index == AliQAv1::kRAW) {       check[specie] = CheckRaw(specie,list[specie]);       }
                               
    
  } // species loop
}
//_________________________________________________________________
Double_t AliHMPIDQAChecker::CheckEntries(TObjArray * list) const
{
  //
  //  check on the QA histograms on the input list: 
  // 

  Double_t test = 0.0  ;
  Int_t count = 0 ; 
  
  if (list->GetEntries() == 0){  
    test = 1. ; // nothing to check
  }
  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; 
	count++ ; 
	test += rv ; 
      }
      else{
	AliError("Data type cannot be processed") ;
      }
      
    }
    if (count != 0) { 
      if (test==0) {
	AliWarning("Histograms are booked for THIS specific Task, but they are all empty: setting flag to kWARNING");
	test = 0.;  //upper limit value to set kWARNING flag for a task
      }
      else test = 1 ;
    }
  }

  return test ; 
}  
//_________________________________________________________________
Double_t AliHMPIDQAChecker::CheckSim(TObjArray *listsim, TObjArray *listref) const
{
  //
  //  check on the HMPID RecPoints by using expo fit and Kolmogorov Test:
  //

   Float_t checkresponse = 0;

   Float_t counter = 0 ;
   TIter next(listsim) ;
   TH1* histo;
   while ( (histo = dynamic_cast<TH1 *>(next())) ) {
     //PH The histogram should have at least 10 bins with at least 5 entries
     Int_t nbinsabove = 0;
     for (Int_t ibin=histo->FindBin(1); ibin<=histo->FindBin(50); ibin++) { 
       if (histo->GetBinContent(ibin)>5) nbinsabove++;
     }

   if( nbinsabove < 10 ) counter++;
   else {
    TString h = histo->GetTitle();
    if(h.Contains("Zoom")){
    histo->Fit("expo","LQ0","",5,50);
    if(histo->GetFunction("expo")->GetParameter(1) !=0 ) if(TMath::Abs((-1./(histo->GetFunction("expo"))->GetParameter(1)) - 35 ) > 5) counter++;
    }
    if(h.Contains("size  MIP"))   if(TMath::Abs(histo->GetMean()-5) > 2) counter++;
    if(h.Contains("size  Phots")) if(TMath::Abs(histo->GetMean()-2) > 2) counter++;
    if(h.Contains("distribution")) if(histo->KolmogorovTest((TH1F *)listref->At(0))<0.8) counter++;
    AliDebug(AliQAv1::GetQADebugLevel(),Form(" Kolm. test : %f ",histo->KolmogorovTest((TH1F *)listref->At(0))));  
   }
  }
 Float_t response = counter/(7.+7.+42.+42.); // 7.+7.+42 +42 = N checked histograms (-> To be replaced by listsim->GetEntries())
 
 if(response < 0.1) checkresponse = 0.7;      // <10% of the check histograms show a failing check -> Corresponds to kINFO see AliQACheckerBase::Run
 else if(response < 0.5) checkresponse = 0.4; //  50%  of the check histograms show a failing check -> Corresponds to kWARNING see AliQACheckerBase::Run
 else checkresponse = 0.001;                  // > 50% of the check histograms show a failing check -> Corresponds to kERROR see AliQACheckerBase::Run
 return checkresponse;
}

//___________________________________________________________________________________________________
Double_t AliHMPIDQAChecker::CheckRec(TObjArray *listrec, TObjArray *listref) const
{
  //
  //  check on the HMPID RecPoints by using expo fit and Kolmogorov Test:
  //

   Float_t checkresponse = 0;

   Float_t counter = 0 ;
   TIter next(listrec) ;
   TH1* histo;
   while ( (histo = dynamic_cast<TH1 *>(next())) ) {
     //PH The histogram should have at least 10 bins with at least 5 entries
     Int_t nbinsabove = 0;
     for (Int_t ibin=histo->FindBin(1); ibin<=histo->FindBin(50); ibin++) { 
       if (histo->GetBinContent(ibin)>5) nbinsabove++;
     }

   if( nbinsabove < 10 ) counter++;
   else {
    TString h = histo->GetTitle();
    if(h.Contains("Zoom")){
    histo->Fit("expo","LQ0","",5,50);
    if(histo->GetFunction("expo")->GetParameter(1) !=0 ) if(TMath::Abs((-1./(histo->GetFunction("expo"))->GetParameter(1)) - 35 ) > 5) counter++;
    }
    if(h.Contains("size  MIP"))   if(TMath::Abs(histo->GetMean()-5) > 2) counter++;
    if(h.Contains("size  Phots")) if(TMath::Abs(histo->GetMean()-2) > 2) counter++;
    if(h.Contains("distribution")) if(histo->KolmogorovTest((TH1F *)listref->At(0))<0.8) counter++;
    AliDebug(AliQAv1::GetQADebugLevel(),Form(" Kolm. test : %f ",histo->KolmogorovTest((TH1F *)listref->At(0))));  
   }
  }
 Float_t response = counter/(7.+7.+42.+42.); // 7.+7.+42 +42 = N checked histograms (-> To be replaced by listrec->GetEntries())
 
 if(response < 0.1) checkresponse = 0.7;      // <10% of the check histograms show a failing check -> Corresponds to kINFO see AliQACheckerBase::Run
 else if(response < 0.5) checkresponse = 0.4; //  50%  of the check histograms show a failing check -> Corresponds to kWARNING see AliQACheckerBase::Run
 else checkresponse = 0.001;                  // > 50% of the check histograms show a failing check -> Corresponds to kERROR see AliQACheckerBase::Run
 return checkresponse;
}
//___________________________________________________________________________________________________
Double_t AliHMPIDQAChecker::CheckRaw(Int_t specie, TObjArray* list)
{
  //
  // Check the raw data for offline / online using default or updated thresholds from AMORE
  // As of now (06/07/2012) the quality flag of all histos in raw will be est to the result of teh CheckRaw and displayed
  // in AMORE. But we can pu undividual labels.
  //
  
  //Int_t raqQualFlag = AliQAv1::kNULLBit;
  
  Int_t hmpQaFlags[4]={-1}; //init for the 4 shifter histos
  
  TString histname ="null";
  TPaveText text(0.65,0.8,0.9,0.99,"NDC"); 
  TPaveText text1(0.65,0.8,0.9,0.99,"NDC"); 
   
 
  Int_t entries = list->GetEntriesFast();
  
  if ( entries == 0 ) {
     AliWarning(Form("HMPID QA Checker RAWS: no object to analyse! Exiting..."));
     return AliQAv1::kFATAL;
  }
  
  TLine* lineDdlDataSizeMin = new TLine(1536,fHmpQaThr_DataSizeUpperThreshold,1548,fHmpQaThr_DataSizeUpperThreshold);
  TLine* lineDdlDataSizeMax = new TLine(1536,fHmpQaThr_DataSizeLowerThreshold,1548,fHmpQaThr_DataSizeLowerThreshold);
  
  TLine* linePadOccupMin = new TLine(1536,fHmpQaThr_PadOccupancyUpperThreshold,1548,fHmpQaThr_PadOccupancyUpperThreshold);
  TLine* linePadOccupMax = new TLine(1536,fHmpQaThr_PadOccupancyLowerThreshold,1548,fHmpQaThr_PadOccupancyLowerThreshold);
  
  
  Int_t badDdlCnt = 0, badOccCnt = 0;
  
  //___ check data size per ddl
  if( list->FindObject(Form("%s_hHmpDdlDataSize",AliRecoParam::GetEventSpecieName(specie)) )) 
    {
      TH1* h1 = dynamic_cast<TH1*>( list->FindObject(Form("%s_hHmpDdlDataSize",AliRecoParam::GetEventSpecieName(specie)))); 
      if(h1) {
      if( h1->Integral() > 1 ) {
      // no entres -> fatal
      //if( h1->GetEntries() == 0) {raqQualFlag = AliQAv1::kFATAL;}
      h1->SetStats(0);
      
      
      // clean up the text, stat, lines, ...
      if( h1->GetListOfFunctions() ) h1->GetListOfFunctions()->Clear();
      
      for ( Int_t iddl = 1 ; iddl <= 14; iddl++)
	{
	  if( h1->GetBinContent(iddl) < fHmpQaThr_DataSizeLowerThreshold || h1->GetBinContent(iddl) > fHmpQaThr_DataSizeUpperThreshold ) badDdlCnt++; 
	}
      //___ check if one or more DDLs are excluded
        
      
      badDdlCnt -= fHmpQaThr_NumberOfExcludedDDL;
      
      
      
      //___ check how many are bad
      if ( badDdlCnt == 0 )  
	{         
	  hmpQaFlags[0] = AliQAv1::kINFO;
	  text1.Clear();
	  text1.AddText(Form("OK (%d)",fIsOnlineThr));
	  text1.SetFillColor(kGreen);
	  h1->GetListOfFunctions()->Add((TPaveText*)text1.Clone());	 
	  lineDdlDataSizeMin->SetLineColor(kGreen);
	  lineDdlDataSizeMax->SetLineColor(kGreen);
	  h1->GetListOfFunctions()->Add((TLine*)lineDdlDataSizeMin->Clone());
	  h1->GetListOfFunctions()->Add((TLine*)lineDdlDataSizeMax->Clone());
	}
      else if ( badDdlCnt == 1 )  
	{         
	  hmpQaFlags[0]  = AliQAv1::kWARNING;
	  text1.Clear();
	  text1.AddText(Form("WARNING CHECK TWIKI (%d)",fIsOnlineThr));
	  text1.SetFillColor(kOrange);
	  h1->GetListOfFunctions()->Add((TPaveText*)text1.Clone());	
	  lineDdlDataSizeMin->SetLineColor(kOrange);
	  lineDdlDataSizeMax->SetLineColor(kOrange);
	  h1->GetListOfFunctions()->Add((TLine*)lineDdlDataSizeMin->Clone());
	  h1->GetListOfFunctions()->Add((TLine*)lineDdlDataSizeMax->Clone());   
	}
      else if (  badDdlCnt >= 2 )  
	{
	  hmpQaFlags[0]  = AliQAv1::kERROR;         
	  text1.Clear();
	  text1.AddText(Form("ERROR CALL ONCALL (%d)",fIsOnlineThr));
	  text1.SetFillColor(kRed);
	  h1->GetListOfFunctions()->Add((TPaveText*)text1.Clone());	      
	  lineDdlDataSizeMin->SetLineColor(kRed);
	  lineDdlDataSizeMax->SetLineColor(kRed);
	  h1->GetListOfFunctions()->Add((TLine*)lineDdlDataSizeMin->Clone());
	  h1->GetListOfFunctions()->Add((TLine*)lineDdlDataSizeMax->Clone());   
	}
      else 
	{
	  hmpQaFlags[0]  = AliQAv1::kFATAL;
	  text1.Clear();
	  text1.AddText(Form("FATAL CALL ONCALL (%d)",fIsOnlineThr));
	  text1.SetFillColor(kRed);
	  h1->GetListOfFunctions()->Add((TPaveText*)text1.Clone());	      
	  lineDdlDataSizeMin->SetLineColor(kRed);
	  lineDdlDataSizeMax->SetLineColor(kRed);
	  h1->GetListOfFunctions()->Add((TLine*)lineDdlDataSizeMin->Clone());
	  h1->GetListOfFunctions()->Add((TLine*)lineDdlDataSizeMax->Clone());   
	}
      }
      }//the histo is filled
    }//___hHmpDdlDataSize
  
  
  
  if( list->FindObject(Form("%s_fHmpPadOcc",AliRecoParam::GetEventSpecieName(specie)) )) 
    {
     
      
      TH1* h1 = dynamic_cast<TH1*>( list->FindObject(Form("%s_fHmpPadOcc",AliRecoParam::GetEventSpecieName(specie)))); 
       if(h1) {
       if( h1->Integral() > 1 ) {
      // no entres -> fatal
      //if( h1->GetEntries() == 0) {raqQualFlag = AliQAv1::kFATAL;}
       h1->SetStats(0);
      // clean up the text, stat, lines, ...
      if( h1->GetListOfFunctions() ) h1->GetListOfFunctions()->Clear();
      
      for ( Int_t iddl = 1 ; iddl <= 14; iddl++)
	{
	  if( h1->GetBinContent(iddl) < fHmpQaThr_PadOccupancyLowerThreshold || h1->GetBinContent(iddl) > fHmpQaThr_PadOccupancyUpperThreshold ) badOccCnt++; 
	}
       
      badOccCnt -= fHmpQaThr_NumberOfExcludedDDL;
         
      //___ check how many are bad
      if ( badOccCnt == 0 )  
	{
	  hmpQaFlags[1]  = AliQAv1::kINFO;
	  text.Clear();
	  text.AddText(Form("OK (%d)",fIsOnlineThr));
	  text.SetFillColor(kGreen);
	  h1->GetListOfFunctions()->Add((TPaveText*)text.Clone());	
	  linePadOccupMin->SetLineColor(kGreen);
	  linePadOccupMax->SetLineColor(kGreen);
	  h1->GetListOfFunctions()->Add((TLine*)linePadOccupMin->Clone());
	  h1->GetListOfFunctions()->Add((TLine*)linePadOccupMax->Clone());         
	}
      else if ( badOccCnt == 1 )  
	{
	  hmpQaFlags[1]  = AliQAv1::kWARNING;
	  text.Clear();
	  text.AddText(Form("WARNING CHECK TWIKI (%d)",fIsOnlineThr));
	  text.SetFillColor(kOrange);
	  h1->GetListOfFunctions()->Add((TPaveText*)text.Clone());	
	  linePadOccupMin->SetLineColor(kGreen);
	  linePadOccupMax->SetLineColor(kGreen);
	  h1->GetListOfFunctions()->Add((TLine*)linePadOccupMin->Clone());
	  h1->GetListOfFunctions()->Add((TLine*)linePadOccupMax->Clone());
	}
      else if (  badOccCnt == 2 )  
	{
	  hmpQaFlags[1]  = AliQAv1::kERROR;
	  text.Clear();
	  text.AddText(Form("ERROR CALL ONCALL (%d)",fIsOnlineThr));
	  text.SetFillColor(kRed);
	  h1->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
	  linePadOccupMin->SetLineColor(kGreen);
	  linePadOccupMax->SetLineColor(kGreen);
	  h1->GetListOfFunctions()->Add((TLine*)linePadOccupMin->Clone());
	  h1->GetListOfFunctions()->Add((TLine*)linePadOccupMax->Clone());
	}
      else 
	{
	  hmpQaFlags[1] = AliQAv1::kFATAL;
	  text.Clear();
	  text.AddText(Form("FATAL CALL ONCALL (%d)",fIsOnlineThr));
	  text.SetFillColor(kRed);
	  h1->GetListOfFunctions()->Add((TPaveText*)text.Clone());	      
	  linePadOccupMin->SetLineColor(kGreen);
	  linePadOccupMax->SetLineColor(kGreen);
	  h1->GetListOfFunctions()->Add((TLine*)linePadOccupMin->Clone());
	  h1->GetListOfFunctions()->Add((TLine*)linePadOccupMax->Clone());   
	}
      }
    }
    }//___HmpPadOcc
  
  Int_t sumPadMapChROR[7]={0};
  Int_t sumPadMapChROL[7]={0};
  Int_t bigMapFlag =  AliQAv1::kINFO;
  Int_t errCntBigMap = 0;

  if( list->FindObject(Form("%s_hHmpBigMap",AliRecoParam::GetEventSpecieName(specie)) )) 
    {
      TH2* h2 = dynamic_cast<TH2*>( list->FindObject(Form("%s_hHmpBigMap",AliRecoParam::GetEventSpecieName(specie)))); 
      if(h2) {
        if( h2->Integral() > 1 ) {
      // no entres -> fatal
     // if( h2->GetEntries() == 0) {raqQualFlag = AliQAv1::kFATAL;}
       h2->SetStats(0);
      // clean up the text, stat, lines, ...
      if( h2->GetListOfFunctions() ) h2->GetListOfFunctions()->Clear();

      //calculate missing pad fraction
      for(Int_t ich = 0; ich < 7; ich++)
	{
	  for(Int_t iy=1+ich*144;iy<=144+ich*144;iy++) {
	    for(Int_t ix=1;ix<=80;ix++)    if(h2->GetBinContent(ix,iy) > 0) sumPadMapChROL[ich]++;
	    for(Int_t ix=81;ix<=160;ix++)  if(h2->GetBinContent(ix,iy) > 0) sumPadMapChROR[ich]++;        
	  }
	}//ch loop
       //check the calculated missing pad fraction
      for(Int_t ich = 0; ich < 7; ich++)
	{
          
          bigMapFlag =  AliQAv1::kINFO; 
	  if( (1-sumPadMapChROL[ich]/1.0/11520) > fHmpQaThr_MissingPadFractionWarningThreshold ||
	      (1-sumPadMapChROR[ich]/1.0/11520) > fHmpQaThr_MissingPadFractionWarningThreshold ) 
          {
            bigMapFlag =  AliQAv1::kWARNING;
            }
	  if( (1-sumPadMapChROL[ich]/1.0/11520) > fHmpQaThr_MissingPadFractionErrorThreshold ||
	      (1-sumPadMapChROR[ich]/1.0/11520) > fHmpQaThr_MissingPadFractionErrorThreshold ) {
             bigMapFlag =  AliQAv1::kERROR; 
             errCntBigMap++;
           }	  
          
     	}//ch loop
      if( errCntBigMap > 0 ) bigMapFlag =  AliQAv1::kERROR;

      //update labels
       if (  bigMapFlag == AliQAv1::kINFO )  
	{
	  hmpQaFlags[2]  = AliQAv1::kINFO;
	  text.Clear();
	  text.AddText(Form("OK (%d)",fIsOnlineThr));
	  text.SetFillColor(kGreen);
	  h2->GetListOfFunctions()->Add((TPaveText*)text.Clone());	
	}
       else if (  bigMapFlag == AliQAv1::kWARNING )  
	{
	  hmpQaFlags[2]  = AliQAv1::kWARNING;
	  text.Clear();
	  text.AddText(Form("WARNING CHECK TWIKI (%d)",fIsOnlineThr));
	  text.SetFillColor(kOrange);
	  h2->GetListOfFunctions()->Add((TPaveText*)text.Clone());	
	}
       else if (  bigMapFlag == AliQAv1::kERROR )  
	{
	  hmpQaFlags[2]  = AliQAv1::kERROR;
	  text.Clear();
	  text.AddText(Form("ERROR CALL ONCALL (%d)",fIsOnlineThr));
	  text.SetFillColor(kRed);
	  h2->GetListOfFunctions()->Add((TPaveText*)text.Clone());	
	}
       else
	 {
	   hmpQaFlags[2]  = AliQAv1::kFATAL;
	   text.Clear();
	   text.AddText(Form("FATAL CALL ONCALL (%d)",fIsOnlineThr));
	   text.SetFillColor(kRed);
	   h2->GetListOfFunctions()->Add((TPaveText*)text.Clone());	
	 }      
        }       
     }
    }//___HmpBigMap
  

  Int_t numSectorsMissing = 0, numSectorsGainLoss = 0;
  Double_t  hSumQPerSector[42]={0};

  if( list->FindObject(Form("%s_fHmpHvSectorQ",AliRecoParam::GetEventSpecieName(specie))))
    {
      
      TH2* h2 = dynamic_cast<TH2*>( list->FindObject(Form("%s_fHmpHvSectorQ",AliRecoParam::GetEventSpecieName(specie)))); 
      if(h2) {
        if(h2->Integral() > 0 ) {
      // no entres -> fatal
     // if( h2->GetEntries() == 0) {raqQualFlag = AliQAv1::kFATAL;}
             h2->SetStats(0);
      // clean up the text, stat, lines, ...
      if( h2->GetListOfFunctions() ) h2->GetListOfFunctions()->Clear();
     
      //___ check sectors 
      for(Int_t isec = 1 ; isec <= 42; isec++)
	{
	  for(Int_t ibiny=100;ibiny<410;ibiny++) {hSumQPerSector[isec-1] += h2->GetBinContent(ibiny,isec); }
	  if(hSumQPerSector[isec-1]  < 0.001) {numSectorsGainLoss++;}  // there is no photon and mip peak, gain loss
	  if(h2->GetBinContent(1,isec) < 0.01 ) {numSectorsMissing++; } //practically there is no charge , the sector is missing
	}
      Int_t  sectorErrors = numSectorsGainLoss+numSectorsMissing;
     
      
	if ( sectorErrors <=  3)
	  {
	    hmpQaFlags[3]  = AliQAv1::kINFO;
	    text.Clear();
	    text.AddText(Form("OK (%d)",fIsOnlineThr));
	    text.SetFillColor(kGreen);
	    h2->GetListOfFunctions()->Add((TPaveText*)text.Clone());	   
	  }
	else if ( sectorErrors > fHmpQaThr_SectorGainLossWarningThreshold)
	  {
	    hmpQaFlags[3]  = AliQAv1::kWARNING;
	    text.Clear();
	    text.AddText(Form("WARNING CHECK TWIKI (%d)",fIsOnlineThr));
            if(numSectorsMissing > 0 ) text.AddText(Form("MISSING SECTOR?"));              
	    text.SetFillColor(kOrange);
	    h2->GetListOfFunctions()->Add((TPaveText*)text.Clone());
	  }
	else if ( sectorErrors > fHmpQaThr_SectorGainLossErrorThreshold)
	  {
	    hmpQaFlags[3]  = AliQAv1::kERROR;
	    text.Clear();
	    text.AddText(Form("ERROR CALL ONCALL (%d)",fIsOnlineThr));
            if(numSectorsMissing > 0 ) text.AddText(Form("MISSING SECTOR?"));
	    text.SetFillColor(kRed);
	    h2->GetListOfFunctions()->Add((TPaveText*)text.Clone());	
	  }
	else
	  {
	    hmpQaFlags[3]  = AliQAv1::kFATAL;
	    text.Clear();
	    text.AddText(Form("FATAL CALL ONCALL (%d)",fIsOnlineThr));
	    text.SetFillColor(kRed);
	    h2->GetListOfFunctions()->Add((TPaveText*)text.Clone());	
	  }
        }
    }
  }
  
  
  //del lines, ...
  lineDdlDataSizeMin->Delete();
  lineDdlDataSizeMax->Delete();
  linePadOccupMin->Delete();
  linePadOccupMax->Delete();
  
  Double_t dflag = -1;
  switch ( TMath::MaxElement(4,hmpQaFlags))
    {
    case  AliQAv1::kINFO:
      dflag = 1.0;
      
      break;
    case AliQAv1::kWARNING:
      dflag = 0.75;
      
      break;
    case AliQAv1::kERROR:
      dflag = 0.25;
      
      break;
    case AliQAv1::kFATAL:
      dflag = -1.0;
     
      break;
    default:
      dflag = AliQAv1::kNULLBit;
     
      break;
    }	  
     
  return dflag;
  
  
  
}
//___________________________________________________________________________________________________
void AliHMPIDQAChecker::InitOnlineThresholds()
{
  //
  // Init the online thresholds from GRP generated by AMORE
  //
  
  AliCDBManager* man = AliCDBManager::Instance(); 
  if(!man)  {     fIsOnlineThr = kFALSE;     return;   }
  

  if(!man->Get("GRP/Calib/QAThresholds"))  {     fIsOnlineThr = kFALSE;    return;    }
 
  AliCDBEntry* entry = man->Get("GRP/Calib/QAThresholds");
  if(!entry)    {     fIsOnlineThr = kFALSE;    return;    }
  
  TObjArray* branch = (TObjArray*) entry->GetObject();
  if(!branch ) {     fIsOnlineThr = kFALSE;     return;    }

  AliQAThresholds* thresholds = (AliQAThresholds*) branch->FindObject("HMP");  
  if(!thresholds) { fIsOnlineThr = kFALSE; return;   }
  else 
     fIsOnlineThr = kTRUE; 
  
  
  Int_t teCnt = 0;
  TString parName = "zero";
  while ( thresholds->GetThreshold(teCnt)) 
  {
     if(!((thresholds->GetThreshold(teCnt))->GetName())) return;
         
     parName = (thresholds->GetThreshold(teCnt))->GetName();
     
     if( parName.Contains("HmpNumberOfExcludedDDLthreshold") )
     {
       TParameter<int>* myParam = (TParameter<int>*) thresholds->GetThreshold(teCnt); 
       fHmpQaThr_NumberOfExcludedDDL = myParam->GetVal();
     }
   
     
     if( parName.Contains("HmpDataSizeLowerThreshold") ) 
     {
       TParameter<int>* myParam = (TParameter<int>*) thresholds->GetThreshold(teCnt); 
       fHmpQaThr_DataSizeLowerThreshold = myParam->GetVal();
     }
             
     if( parName.Contains("HmpDataSizeUpperThreshold") ) 
     {
       TParameter<int>* myParam = (TParameter<int>*) thresholds->GetThreshold(teCnt); 
       fHmpQaThr_DataSizeUpperThreshold = myParam->GetVal();
     }
          
     if( parName.Contains("HmpPadOccupancyLowerThreshold") ) 
     {
       TParameter<float>* myParam = (TParameter<float>*) thresholds->GetThreshold(teCnt); 
       fHmpQaThr_PadOccupancyLowerThreshold = myParam->GetVal();
     }
           
     if( parName.Contains("HmpPadOccupancyUpperThreshold") ) 
     {
       TParameter<float>* myParam = (TParameter<float>*) thresholds->GetThreshold(teCnt); 
       fHmpQaThr_PadOccupancyUpperThreshold = myParam->GetVal();
     }
                    
     if( parName.Contains("HmpSectorGainLossWarningThreshold") ) 
      {
       TParameter<int>* myParam = (TParameter<int>*) thresholds->GetThreshold(teCnt); 
       fHmpQaThr_SectorGainLossWarningThreshold = myParam->GetVal();
     } 
       
     if( parName.Contains("HmpSectorGainLossErrorThreshold") ) 
       {
       TParameter<int>* myParam = (TParameter<int>*) thresholds->GetThreshold(teCnt); 
       fHmpQaThr_SectorGainLossErrorThreshold = myParam->GetVal();
     } 
       
     if( parName.Contains("HmpMissingPadFractionWarningThreshold") ) 
       {
       TParameter<float>* myParam = (TParameter<float>*) thresholds->GetThreshold(teCnt); 
       fHmpQaThr_MissingPadFractionWarningThreshold = myParam->GetVal();
     }
     
     if( parName.Contains("HmpMissingPadFractionErrorThreshold") ) 
         {
       TParameter<float>* myParam = (TParameter<float>*) thresholds->GetThreshold(teCnt); 
       fHmpQaThr_MissingPadFractionErrorThreshold = myParam->GetVal();
     }
      
     teCnt++;    
  }//while
  
  
  // PrintThresholds();
}
//___________________________________________________________________________________________________
void AliHMPIDQAChecker::PrintThresholds()
{
  Printf("--- Printing thresholds ---");  
  Printf("--- Default or online: %i ---",fIsOnlineThr);  
  Printf("--- fHmpQaThr_NumberOfExcludedDDL: %i ---",fHmpQaThr_NumberOfExcludedDDL);
  Printf("--- fHmpQaThr_DataSizeLowerThreshold: %i ---",fHmpQaThr_DataSizeLowerThreshold);
  Printf("--- fHmpQaThr_DataSizeUpperThreshold: %i ---",fHmpQaThr_DataSizeUpperThreshold);
  Printf("--- fHmpQaThr_PadOccupancyLowerThreshold: %f ---",fHmpQaThr_PadOccupancyLowerThreshold);
  Printf("--- fHmpQaThr_PadOccupancyUpperThreshold: %f ---",fHmpQaThr_PadOccupancyUpperThreshold);
  Printf("--- fHmpQaThr_SectorGainLossWarningThreshold: %i ---",fHmpQaThr_SectorGainLossWarningThreshold);
  Printf("--- fHmpQaThr_SectorGainLossErrorThreshold: %i ---",fHmpQaThr_SectorGainLossErrorThreshold);
  Printf("--- fHmpQaThr_MissingPadFractionWarningThreshold: %f ---",fHmpQaThr_MissingPadFractionWarningThreshold);
  Printf("--- fHmpQaThr_MissingPadFractionErrorThreshold: %f ---",fHmpQaThr_MissingPadFractionErrorThreshold);
  Printf("--- Printing thresholds done ---");  

  
  
  
}
//___________________________________________________________________________________________________


 AliHMPIDQAChecker.cxx:1
 AliHMPIDQAChecker.cxx:2
 AliHMPIDQAChecker.cxx:3
 AliHMPIDQAChecker.cxx:4
 AliHMPIDQAChecker.cxx:5
 AliHMPIDQAChecker.cxx:6
 AliHMPIDQAChecker.cxx:7
 AliHMPIDQAChecker.cxx:8
 AliHMPIDQAChecker.cxx:9
 AliHMPIDQAChecker.cxx:10
 AliHMPIDQAChecker.cxx:11
 AliHMPIDQAChecker.cxx:12
 AliHMPIDQAChecker.cxx:13
 AliHMPIDQAChecker.cxx:14
 AliHMPIDQAChecker.cxx:15
 AliHMPIDQAChecker.cxx:16
 AliHMPIDQAChecker.cxx:17
 AliHMPIDQAChecker.cxx:18
 AliHMPIDQAChecker.cxx:19
 AliHMPIDQAChecker.cxx:20
 AliHMPIDQAChecker.cxx:21
 AliHMPIDQAChecker.cxx:22
 AliHMPIDQAChecker.cxx:23
 AliHMPIDQAChecker.cxx:24
 AliHMPIDQAChecker.cxx:25
 AliHMPIDQAChecker.cxx:26
 AliHMPIDQAChecker.cxx:27
 AliHMPIDQAChecker.cxx:28
 AliHMPIDQAChecker.cxx:29
 AliHMPIDQAChecker.cxx:30
 AliHMPIDQAChecker.cxx:31
 AliHMPIDQAChecker.cxx:32
 AliHMPIDQAChecker.cxx:33
 AliHMPIDQAChecker.cxx:34
 AliHMPIDQAChecker.cxx:35
 AliHMPIDQAChecker.cxx:36
 AliHMPIDQAChecker.cxx:37
 AliHMPIDQAChecker.cxx:38
 AliHMPIDQAChecker.cxx:39
 AliHMPIDQAChecker.cxx:40
 AliHMPIDQAChecker.cxx:41
 AliHMPIDQAChecker.cxx:42
 AliHMPIDQAChecker.cxx:43
 AliHMPIDQAChecker.cxx:44
 AliHMPIDQAChecker.cxx:45
 AliHMPIDQAChecker.cxx:46
 AliHMPIDQAChecker.cxx:47
 AliHMPIDQAChecker.cxx:48
 AliHMPIDQAChecker.cxx:49
 AliHMPIDQAChecker.cxx:50
 AliHMPIDQAChecker.cxx:51
 AliHMPIDQAChecker.cxx:52
 AliHMPIDQAChecker.cxx:53
 AliHMPIDQAChecker.cxx:54
 AliHMPIDQAChecker.cxx:55
 AliHMPIDQAChecker.cxx:56
 AliHMPIDQAChecker.cxx:57
 AliHMPIDQAChecker.cxx:58
 AliHMPIDQAChecker.cxx:59
 AliHMPIDQAChecker.cxx:60
 AliHMPIDQAChecker.cxx:61
 AliHMPIDQAChecker.cxx:62
 AliHMPIDQAChecker.cxx:63
 AliHMPIDQAChecker.cxx:64
 AliHMPIDQAChecker.cxx:65
 AliHMPIDQAChecker.cxx:66
 AliHMPIDQAChecker.cxx:67
 AliHMPIDQAChecker.cxx:68
 AliHMPIDQAChecker.cxx:69
 AliHMPIDQAChecker.cxx:70
 AliHMPIDQAChecker.cxx:71
 AliHMPIDQAChecker.cxx:72
 AliHMPIDQAChecker.cxx:73
 AliHMPIDQAChecker.cxx:74
 AliHMPIDQAChecker.cxx:75
 AliHMPIDQAChecker.cxx:76
 AliHMPIDQAChecker.cxx:77
 AliHMPIDQAChecker.cxx:78
 AliHMPIDQAChecker.cxx:79
 AliHMPIDQAChecker.cxx:80
 AliHMPIDQAChecker.cxx:81
 AliHMPIDQAChecker.cxx:82
 AliHMPIDQAChecker.cxx:83
 AliHMPIDQAChecker.cxx:84
 AliHMPIDQAChecker.cxx:85
 AliHMPIDQAChecker.cxx:86
 AliHMPIDQAChecker.cxx:87
 AliHMPIDQAChecker.cxx:88
 AliHMPIDQAChecker.cxx:89
 AliHMPIDQAChecker.cxx:90
 AliHMPIDQAChecker.cxx:91
 AliHMPIDQAChecker.cxx:92
 AliHMPIDQAChecker.cxx:93
 AliHMPIDQAChecker.cxx:94
 AliHMPIDQAChecker.cxx:95
 AliHMPIDQAChecker.cxx:96
 AliHMPIDQAChecker.cxx:97
 AliHMPIDQAChecker.cxx:98
 AliHMPIDQAChecker.cxx:99
 AliHMPIDQAChecker.cxx:100
 AliHMPIDQAChecker.cxx:101
 AliHMPIDQAChecker.cxx:102
 AliHMPIDQAChecker.cxx:103
 AliHMPIDQAChecker.cxx:104
 AliHMPIDQAChecker.cxx:105
 AliHMPIDQAChecker.cxx:106
 AliHMPIDQAChecker.cxx:107
 AliHMPIDQAChecker.cxx:108
 AliHMPIDQAChecker.cxx:109
 AliHMPIDQAChecker.cxx:110
 AliHMPIDQAChecker.cxx:111
 AliHMPIDQAChecker.cxx:112
 AliHMPIDQAChecker.cxx:113
 AliHMPIDQAChecker.cxx:114
 AliHMPIDQAChecker.cxx:115
 AliHMPIDQAChecker.cxx:116
 AliHMPIDQAChecker.cxx:117
 AliHMPIDQAChecker.cxx:118
 AliHMPIDQAChecker.cxx:119
 AliHMPIDQAChecker.cxx:120
 AliHMPIDQAChecker.cxx:121
 AliHMPIDQAChecker.cxx:122
 AliHMPIDQAChecker.cxx:123
 AliHMPIDQAChecker.cxx:124
 AliHMPIDQAChecker.cxx:125
 AliHMPIDQAChecker.cxx:126
 AliHMPIDQAChecker.cxx:127
 AliHMPIDQAChecker.cxx:128
 AliHMPIDQAChecker.cxx:129
 AliHMPIDQAChecker.cxx:130
 AliHMPIDQAChecker.cxx:131
 AliHMPIDQAChecker.cxx:132
 AliHMPIDQAChecker.cxx:133
 AliHMPIDQAChecker.cxx:134
 AliHMPIDQAChecker.cxx:135
 AliHMPIDQAChecker.cxx:136
 AliHMPIDQAChecker.cxx:137
 AliHMPIDQAChecker.cxx:138
 AliHMPIDQAChecker.cxx:139
 AliHMPIDQAChecker.cxx:140
 AliHMPIDQAChecker.cxx:141
 AliHMPIDQAChecker.cxx:142
 AliHMPIDQAChecker.cxx:143
 AliHMPIDQAChecker.cxx:144
 AliHMPIDQAChecker.cxx:145
 AliHMPIDQAChecker.cxx:146
 AliHMPIDQAChecker.cxx:147
 AliHMPIDQAChecker.cxx:148
 AliHMPIDQAChecker.cxx:149
 AliHMPIDQAChecker.cxx:150
 AliHMPIDQAChecker.cxx:151
 AliHMPIDQAChecker.cxx:152
 AliHMPIDQAChecker.cxx:153
 AliHMPIDQAChecker.cxx:154
 AliHMPIDQAChecker.cxx:155
 AliHMPIDQAChecker.cxx:156
 AliHMPIDQAChecker.cxx:157
 AliHMPIDQAChecker.cxx:158
 AliHMPIDQAChecker.cxx:159
 AliHMPIDQAChecker.cxx:160
 AliHMPIDQAChecker.cxx:161
 AliHMPIDQAChecker.cxx:162
 AliHMPIDQAChecker.cxx:163
 AliHMPIDQAChecker.cxx:164
 AliHMPIDQAChecker.cxx:165
 AliHMPIDQAChecker.cxx:166
 AliHMPIDQAChecker.cxx:167
 AliHMPIDQAChecker.cxx:168
 AliHMPIDQAChecker.cxx:169
 AliHMPIDQAChecker.cxx:170
 AliHMPIDQAChecker.cxx:171
 AliHMPIDQAChecker.cxx:172
 AliHMPIDQAChecker.cxx:173
 AliHMPIDQAChecker.cxx:174
 AliHMPIDQAChecker.cxx:175
 AliHMPIDQAChecker.cxx:176
 AliHMPIDQAChecker.cxx:177
 AliHMPIDQAChecker.cxx:178
 AliHMPIDQAChecker.cxx:179
 AliHMPIDQAChecker.cxx:180
 AliHMPIDQAChecker.cxx:181
 AliHMPIDQAChecker.cxx:182
 AliHMPIDQAChecker.cxx:183
 AliHMPIDQAChecker.cxx:184
 AliHMPIDQAChecker.cxx:185
 AliHMPIDQAChecker.cxx:186
 AliHMPIDQAChecker.cxx:187
 AliHMPIDQAChecker.cxx:188
 AliHMPIDQAChecker.cxx:189
 AliHMPIDQAChecker.cxx:190
 AliHMPIDQAChecker.cxx:191
 AliHMPIDQAChecker.cxx:192
 AliHMPIDQAChecker.cxx:193
 AliHMPIDQAChecker.cxx:194
 AliHMPIDQAChecker.cxx:195
 AliHMPIDQAChecker.cxx:196
 AliHMPIDQAChecker.cxx:197
 AliHMPIDQAChecker.cxx:198
 AliHMPIDQAChecker.cxx:199
 AliHMPIDQAChecker.cxx:200
 AliHMPIDQAChecker.cxx:201
 AliHMPIDQAChecker.cxx:202
 AliHMPIDQAChecker.cxx:203
 AliHMPIDQAChecker.cxx:204
 AliHMPIDQAChecker.cxx:205
 AliHMPIDQAChecker.cxx:206
 AliHMPIDQAChecker.cxx:207
 AliHMPIDQAChecker.cxx:208
 AliHMPIDQAChecker.cxx:209
 AliHMPIDQAChecker.cxx:210
 AliHMPIDQAChecker.cxx:211
 AliHMPIDQAChecker.cxx:212
 AliHMPIDQAChecker.cxx:213
 AliHMPIDQAChecker.cxx:214
 AliHMPIDQAChecker.cxx:215
 AliHMPIDQAChecker.cxx:216
 AliHMPIDQAChecker.cxx:217
 AliHMPIDQAChecker.cxx:218
 AliHMPIDQAChecker.cxx:219
 AliHMPIDQAChecker.cxx:220
 AliHMPIDQAChecker.cxx:221
 AliHMPIDQAChecker.cxx:222
 AliHMPIDQAChecker.cxx:223
 AliHMPIDQAChecker.cxx:224
 AliHMPIDQAChecker.cxx:225
 AliHMPIDQAChecker.cxx:226
 AliHMPIDQAChecker.cxx:227
 AliHMPIDQAChecker.cxx:228
 AliHMPIDQAChecker.cxx:229
 AliHMPIDQAChecker.cxx:230
 AliHMPIDQAChecker.cxx:231
 AliHMPIDQAChecker.cxx:232
 AliHMPIDQAChecker.cxx:233
 AliHMPIDQAChecker.cxx:234
 AliHMPIDQAChecker.cxx:235
 AliHMPIDQAChecker.cxx:236
 AliHMPIDQAChecker.cxx:237
 AliHMPIDQAChecker.cxx:238
 AliHMPIDQAChecker.cxx:239
 AliHMPIDQAChecker.cxx:240
 AliHMPIDQAChecker.cxx:241
 AliHMPIDQAChecker.cxx:242
 AliHMPIDQAChecker.cxx:243
 AliHMPIDQAChecker.cxx:244
 AliHMPIDQAChecker.cxx:245
 AliHMPIDQAChecker.cxx:246
 AliHMPIDQAChecker.cxx:247
 AliHMPIDQAChecker.cxx:248
 AliHMPIDQAChecker.cxx:249
 AliHMPIDQAChecker.cxx:250
 AliHMPIDQAChecker.cxx:251
 AliHMPIDQAChecker.cxx:252
 AliHMPIDQAChecker.cxx:253
 AliHMPIDQAChecker.cxx:254
 AliHMPIDQAChecker.cxx:255
 AliHMPIDQAChecker.cxx:256
 AliHMPIDQAChecker.cxx:257
 AliHMPIDQAChecker.cxx:258
 AliHMPIDQAChecker.cxx:259
 AliHMPIDQAChecker.cxx:260
 AliHMPIDQAChecker.cxx:261
 AliHMPIDQAChecker.cxx:262
 AliHMPIDQAChecker.cxx:263
 AliHMPIDQAChecker.cxx:264
 AliHMPIDQAChecker.cxx:265
 AliHMPIDQAChecker.cxx:266
 AliHMPIDQAChecker.cxx:267
 AliHMPIDQAChecker.cxx:268
 AliHMPIDQAChecker.cxx:269
 AliHMPIDQAChecker.cxx:270
 AliHMPIDQAChecker.cxx:271
 AliHMPIDQAChecker.cxx:272
 AliHMPIDQAChecker.cxx:273
 AliHMPIDQAChecker.cxx:274
 AliHMPIDQAChecker.cxx:275
 AliHMPIDQAChecker.cxx:276
 AliHMPIDQAChecker.cxx:277
 AliHMPIDQAChecker.cxx:278
 AliHMPIDQAChecker.cxx:279
 AliHMPIDQAChecker.cxx:280
 AliHMPIDQAChecker.cxx:281
 AliHMPIDQAChecker.cxx:282
 AliHMPIDQAChecker.cxx:283
 AliHMPIDQAChecker.cxx:284
 AliHMPIDQAChecker.cxx:285
 AliHMPIDQAChecker.cxx:286
 AliHMPIDQAChecker.cxx:287
 AliHMPIDQAChecker.cxx:288
 AliHMPIDQAChecker.cxx:289
 AliHMPIDQAChecker.cxx:290
 AliHMPIDQAChecker.cxx:291
 AliHMPIDQAChecker.cxx:292
 AliHMPIDQAChecker.cxx:293
 AliHMPIDQAChecker.cxx:294
 AliHMPIDQAChecker.cxx:295
 AliHMPIDQAChecker.cxx:296
 AliHMPIDQAChecker.cxx:297
 AliHMPIDQAChecker.cxx:298
 AliHMPIDQAChecker.cxx:299
 AliHMPIDQAChecker.cxx:300
 AliHMPIDQAChecker.cxx:301
 AliHMPIDQAChecker.cxx:302
 AliHMPIDQAChecker.cxx:303
 AliHMPIDQAChecker.cxx:304
 AliHMPIDQAChecker.cxx:305
 AliHMPIDQAChecker.cxx:306
 AliHMPIDQAChecker.cxx:307
 AliHMPIDQAChecker.cxx:308
 AliHMPIDQAChecker.cxx:309
 AliHMPIDQAChecker.cxx:310
 AliHMPIDQAChecker.cxx:311
 AliHMPIDQAChecker.cxx:312
 AliHMPIDQAChecker.cxx:313
 AliHMPIDQAChecker.cxx:314
 AliHMPIDQAChecker.cxx:315
 AliHMPIDQAChecker.cxx:316
 AliHMPIDQAChecker.cxx:317
 AliHMPIDQAChecker.cxx:318
 AliHMPIDQAChecker.cxx:319
 AliHMPIDQAChecker.cxx:320
 AliHMPIDQAChecker.cxx:321
 AliHMPIDQAChecker.cxx:322
 AliHMPIDQAChecker.cxx:323
 AliHMPIDQAChecker.cxx:324
 AliHMPIDQAChecker.cxx:325
 AliHMPIDQAChecker.cxx:326
 AliHMPIDQAChecker.cxx:327
 AliHMPIDQAChecker.cxx:328
 AliHMPIDQAChecker.cxx:329
 AliHMPIDQAChecker.cxx:330
 AliHMPIDQAChecker.cxx:331
 AliHMPIDQAChecker.cxx:332
 AliHMPIDQAChecker.cxx:333
 AliHMPIDQAChecker.cxx:334
 AliHMPIDQAChecker.cxx:335
 AliHMPIDQAChecker.cxx:336
 AliHMPIDQAChecker.cxx:337
 AliHMPIDQAChecker.cxx:338
 AliHMPIDQAChecker.cxx:339
 AliHMPIDQAChecker.cxx:340
 AliHMPIDQAChecker.cxx:341
 AliHMPIDQAChecker.cxx:342
 AliHMPIDQAChecker.cxx:343
 AliHMPIDQAChecker.cxx:344
 AliHMPIDQAChecker.cxx:345
 AliHMPIDQAChecker.cxx:346
 AliHMPIDQAChecker.cxx:347
 AliHMPIDQAChecker.cxx:348
 AliHMPIDQAChecker.cxx:349
 AliHMPIDQAChecker.cxx:350
 AliHMPIDQAChecker.cxx:351
 AliHMPIDQAChecker.cxx:352
 AliHMPIDQAChecker.cxx:353
 AliHMPIDQAChecker.cxx:354
 AliHMPIDQAChecker.cxx:355
 AliHMPIDQAChecker.cxx:356
 AliHMPIDQAChecker.cxx:357
 AliHMPIDQAChecker.cxx:358
 AliHMPIDQAChecker.cxx:359
 AliHMPIDQAChecker.cxx:360
 AliHMPIDQAChecker.cxx:361
 AliHMPIDQAChecker.cxx:362
 AliHMPIDQAChecker.cxx:363
 AliHMPIDQAChecker.cxx:364
 AliHMPIDQAChecker.cxx:365
 AliHMPIDQAChecker.cxx:366
 AliHMPIDQAChecker.cxx:367
 AliHMPIDQAChecker.cxx:368
 AliHMPIDQAChecker.cxx:369
 AliHMPIDQAChecker.cxx:370
 AliHMPIDQAChecker.cxx:371
 AliHMPIDQAChecker.cxx:372
 AliHMPIDQAChecker.cxx:373
 AliHMPIDQAChecker.cxx:374
 AliHMPIDQAChecker.cxx:375
 AliHMPIDQAChecker.cxx:376
 AliHMPIDQAChecker.cxx:377
 AliHMPIDQAChecker.cxx:378
 AliHMPIDQAChecker.cxx:379
 AliHMPIDQAChecker.cxx:380
 AliHMPIDQAChecker.cxx:381
 AliHMPIDQAChecker.cxx:382
 AliHMPIDQAChecker.cxx:383
 AliHMPIDQAChecker.cxx:384
 AliHMPIDQAChecker.cxx:385
 AliHMPIDQAChecker.cxx:386
 AliHMPIDQAChecker.cxx:387
 AliHMPIDQAChecker.cxx:388
 AliHMPIDQAChecker.cxx:389
 AliHMPIDQAChecker.cxx:390
 AliHMPIDQAChecker.cxx:391
 AliHMPIDQAChecker.cxx:392
 AliHMPIDQAChecker.cxx:393
 AliHMPIDQAChecker.cxx:394
 AliHMPIDQAChecker.cxx:395
 AliHMPIDQAChecker.cxx:396
 AliHMPIDQAChecker.cxx:397
 AliHMPIDQAChecker.cxx:398
 AliHMPIDQAChecker.cxx:399
 AliHMPIDQAChecker.cxx:400
 AliHMPIDQAChecker.cxx:401
 AliHMPIDQAChecker.cxx:402
 AliHMPIDQAChecker.cxx:403
 AliHMPIDQAChecker.cxx:404
 AliHMPIDQAChecker.cxx:405
 AliHMPIDQAChecker.cxx:406
 AliHMPIDQAChecker.cxx:407
 AliHMPIDQAChecker.cxx:408
 AliHMPIDQAChecker.cxx:409
 AliHMPIDQAChecker.cxx:410
 AliHMPIDQAChecker.cxx:411
 AliHMPIDQAChecker.cxx:412
 AliHMPIDQAChecker.cxx:413
 AliHMPIDQAChecker.cxx:414
 AliHMPIDQAChecker.cxx:415
 AliHMPIDQAChecker.cxx:416
 AliHMPIDQAChecker.cxx:417
 AliHMPIDQAChecker.cxx:418
 AliHMPIDQAChecker.cxx:419
 AliHMPIDQAChecker.cxx:420
 AliHMPIDQAChecker.cxx:421
 AliHMPIDQAChecker.cxx:422
 AliHMPIDQAChecker.cxx:423
 AliHMPIDQAChecker.cxx:424
 AliHMPIDQAChecker.cxx:425
 AliHMPIDQAChecker.cxx:426
 AliHMPIDQAChecker.cxx:427
 AliHMPIDQAChecker.cxx:428
 AliHMPIDQAChecker.cxx:429
 AliHMPIDQAChecker.cxx:430
 AliHMPIDQAChecker.cxx:431
 AliHMPIDQAChecker.cxx:432
 AliHMPIDQAChecker.cxx:433
 AliHMPIDQAChecker.cxx:434
 AliHMPIDQAChecker.cxx:435
 AliHMPIDQAChecker.cxx:436
 AliHMPIDQAChecker.cxx:437
 AliHMPIDQAChecker.cxx:438
 AliHMPIDQAChecker.cxx:439
 AliHMPIDQAChecker.cxx:440
 AliHMPIDQAChecker.cxx:441
 AliHMPIDQAChecker.cxx:442
 AliHMPIDQAChecker.cxx:443
 AliHMPIDQAChecker.cxx:444
 AliHMPIDQAChecker.cxx:445
 AliHMPIDQAChecker.cxx:446
 AliHMPIDQAChecker.cxx:447
 AliHMPIDQAChecker.cxx:448
 AliHMPIDQAChecker.cxx:449
 AliHMPIDQAChecker.cxx:450
 AliHMPIDQAChecker.cxx:451
 AliHMPIDQAChecker.cxx:452
 AliHMPIDQAChecker.cxx:453
 AliHMPIDQAChecker.cxx:454
 AliHMPIDQAChecker.cxx:455
 AliHMPIDQAChecker.cxx:456
 AliHMPIDQAChecker.cxx:457
 AliHMPIDQAChecker.cxx:458
 AliHMPIDQAChecker.cxx:459
 AliHMPIDQAChecker.cxx:460
 AliHMPIDQAChecker.cxx:461
 AliHMPIDQAChecker.cxx:462
 AliHMPIDQAChecker.cxx:463
 AliHMPIDQAChecker.cxx:464
 AliHMPIDQAChecker.cxx:465
 AliHMPIDQAChecker.cxx:466
 AliHMPIDQAChecker.cxx:467
 AliHMPIDQAChecker.cxx:468
 AliHMPIDQAChecker.cxx:469
 AliHMPIDQAChecker.cxx:470
 AliHMPIDQAChecker.cxx:471
 AliHMPIDQAChecker.cxx:472
 AliHMPIDQAChecker.cxx:473
 AliHMPIDQAChecker.cxx:474
 AliHMPIDQAChecker.cxx:475
 AliHMPIDQAChecker.cxx:476
 AliHMPIDQAChecker.cxx:477
 AliHMPIDQAChecker.cxx:478
 AliHMPIDQAChecker.cxx:479
 AliHMPIDQAChecker.cxx:480
 AliHMPIDQAChecker.cxx:481
 AliHMPIDQAChecker.cxx:482
 AliHMPIDQAChecker.cxx:483
 AliHMPIDQAChecker.cxx:484
 AliHMPIDQAChecker.cxx:485
 AliHMPIDQAChecker.cxx:486
 AliHMPIDQAChecker.cxx:487
 AliHMPIDQAChecker.cxx:488
 AliHMPIDQAChecker.cxx:489
 AliHMPIDQAChecker.cxx:490
 AliHMPIDQAChecker.cxx:491
 AliHMPIDQAChecker.cxx:492
 AliHMPIDQAChecker.cxx:493
 AliHMPIDQAChecker.cxx:494
 AliHMPIDQAChecker.cxx:495
 AliHMPIDQAChecker.cxx:496
 AliHMPIDQAChecker.cxx:497
 AliHMPIDQAChecker.cxx:498
 AliHMPIDQAChecker.cxx:499
 AliHMPIDQAChecker.cxx:500
 AliHMPIDQAChecker.cxx:501
 AliHMPIDQAChecker.cxx:502
 AliHMPIDQAChecker.cxx:503
 AliHMPIDQAChecker.cxx:504
 AliHMPIDQAChecker.cxx:505
 AliHMPIDQAChecker.cxx:506
 AliHMPIDQAChecker.cxx:507
 AliHMPIDQAChecker.cxx:508
 AliHMPIDQAChecker.cxx:509
 AliHMPIDQAChecker.cxx:510
 AliHMPIDQAChecker.cxx:511
 AliHMPIDQAChecker.cxx:512
 AliHMPIDQAChecker.cxx:513
 AliHMPIDQAChecker.cxx:514
 AliHMPIDQAChecker.cxx:515
 AliHMPIDQAChecker.cxx:516
 AliHMPIDQAChecker.cxx:517
 AliHMPIDQAChecker.cxx:518
 AliHMPIDQAChecker.cxx:519
 AliHMPIDQAChecker.cxx:520
 AliHMPIDQAChecker.cxx:521
 AliHMPIDQAChecker.cxx:522
 AliHMPIDQAChecker.cxx:523
 AliHMPIDQAChecker.cxx:524
 AliHMPIDQAChecker.cxx:525
 AliHMPIDQAChecker.cxx:526
 AliHMPIDQAChecker.cxx:527
 AliHMPIDQAChecker.cxx:528
 AliHMPIDQAChecker.cxx:529
 AliHMPIDQAChecker.cxx:530
 AliHMPIDQAChecker.cxx:531
 AliHMPIDQAChecker.cxx:532
 AliHMPIDQAChecker.cxx:533
 AliHMPIDQAChecker.cxx:534
 AliHMPIDQAChecker.cxx:535
 AliHMPIDQAChecker.cxx:536
 AliHMPIDQAChecker.cxx:537
 AliHMPIDQAChecker.cxx:538
 AliHMPIDQAChecker.cxx:539
 AliHMPIDQAChecker.cxx:540
 AliHMPIDQAChecker.cxx:541
 AliHMPIDQAChecker.cxx:542
 AliHMPIDQAChecker.cxx:543
 AliHMPIDQAChecker.cxx:544
 AliHMPIDQAChecker.cxx:545
 AliHMPIDQAChecker.cxx:546
 AliHMPIDQAChecker.cxx:547
 AliHMPIDQAChecker.cxx:548
 AliHMPIDQAChecker.cxx:549
 AliHMPIDQAChecker.cxx:550
 AliHMPIDQAChecker.cxx:551
 AliHMPIDQAChecker.cxx:552
 AliHMPIDQAChecker.cxx:553
 AliHMPIDQAChecker.cxx:554
 AliHMPIDQAChecker.cxx:555
 AliHMPIDQAChecker.cxx:556
 AliHMPIDQAChecker.cxx:557
 AliHMPIDQAChecker.cxx:558
 AliHMPIDQAChecker.cxx:559
 AliHMPIDQAChecker.cxx:560
 AliHMPIDQAChecker.cxx:561
 AliHMPIDQAChecker.cxx:562
 AliHMPIDQAChecker.cxx:563
 AliHMPIDQAChecker.cxx:564
 AliHMPIDQAChecker.cxx:565
 AliHMPIDQAChecker.cxx:566
 AliHMPIDQAChecker.cxx:567
 AliHMPIDQAChecker.cxx:568
 AliHMPIDQAChecker.cxx:569
 AliHMPIDQAChecker.cxx:570
 AliHMPIDQAChecker.cxx:571
 AliHMPIDQAChecker.cxx:572
 AliHMPIDQAChecker.cxx:573
 AliHMPIDQAChecker.cxx:574
 AliHMPIDQAChecker.cxx:575
 AliHMPIDQAChecker.cxx:576
 AliHMPIDQAChecker.cxx:577
 AliHMPIDQAChecker.cxx:578
 AliHMPIDQAChecker.cxx:579
 AliHMPIDQAChecker.cxx:580
 AliHMPIDQAChecker.cxx:581
 AliHMPIDQAChecker.cxx:582
 AliHMPIDQAChecker.cxx:583
 AliHMPIDQAChecker.cxx:584
 AliHMPIDQAChecker.cxx:585
 AliHMPIDQAChecker.cxx:586
 AliHMPIDQAChecker.cxx:587
 AliHMPIDQAChecker.cxx:588
 AliHMPIDQAChecker.cxx:589
 AliHMPIDQAChecker.cxx:590
 AliHMPIDQAChecker.cxx:591
 AliHMPIDQAChecker.cxx:592
 AliHMPIDQAChecker.cxx:593
 AliHMPIDQAChecker.cxx:594
 AliHMPIDQAChecker.cxx:595
 AliHMPIDQAChecker.cxx:596
 AliHMPIDQAChecker.cxx:597
 AliHMPIDQAChecker.cxx:598
 AliHMPIDQAChecker.cxx:599
 AliHMPIDQAChecker.cxx:600
 AliHMPIDQAChecker.cxx:601
 AliHMPIDQAChecker.cxx:602
 AliHMPIDQAChecker.cxx:603
 AliHMPIDQAChecker.cxx:604
 AliHMPIDQAChecker.cxx:605
 AliHMPIDQAChecker.cxx:606
 AliHMPIDQAChecker.cxx:607
 AliHMPIDQAChecker.cxx:608
 AliHMPIDQAChecker.cxx:609
 AliHMPIDQAChecker.cxx:610
 AliHMPIDQAChecker.cxx:611
 AliHMPIDQAChecker.cxx:612
 AliHMPIDQAChecker.cxx:613
 AliHMPIDQAChecker.cxx:614
 AliHMPIDQAChecker.cxx:615
 AliHMPIDQAChecker.cxx:616
 AliHMPIDQAChecker.cxx:617
 AliHMPIDQAChecker.cxx:618
 AliHMPIDQAChecker.cxx:619
 AliHMPIDQAChecker.cxx:620
 AliHMPIDQAChecker.cxx:621
 AliHMPIDQAChecker.cxx:622
 AliHMPIDQAChecker.cxx:623
 AliHMPIDQAChecker.cxx:624
 AliHMPIDQAChecker.cxx:625
 AliHMPIDQAChecker.cxx:626
 AliHMPIDQAChecker.cxx:627
 AliHMPIDQAChecker.cxx:628
 AliHMPIDQAChecker.cxx:629
 AliHMPIDQAChecker.cxx:630
 AliHMPIDQAChecker.cxx:631
 AliHMPIDQAChecker.cxx:632
 AliHMPIDQAChecker.cxx:633
 AliHMPIDQAChecker.cxx:634
 AliHMPIDQAChecker.cxx:635
 AliHMPIDQAChecker.cxx:636
 AliHMPIDQAChecker.cxx:637
 AliHMPIDQAChecker.cxx:638
 AliHMPIDQAChecker.cxx:639
 AliHMPIDQAChecker.cxx:640
 AliHMPIDQAChecker.cxx:641
 AliHMPIDQAChecker.cxx:642
 AliHMPIDQAChecker.cxx:643
 AliHMPIDQAChecker.cxx:644
 AliHMPIDQAChecker.cxx:645
 AliHMPIDQAChecker.cxx:646
 AliHMPIDQAChecker.cxx:647
 AliHMPIDQAChecker.cxx:648
 AliHMPIDQAChecker.cxx:649
 AliHMPIDQAChecker.cxx:650
 AliHMPIDQAChecker.cxx:651
 AliHMPIDQAChecker.cxx:652
 AliHMPIDQAChecker.cxx:653
 AliHMPIDQAChecker.cxx:654
 AliHMPIDQAChecker.cxx:655
 AliHMPIDQAChecker.cxx:656
 AliHMPIDQAChecker.cxx:657
 AliHMPIDQAChecker.cxx:658
 AliHMPIDQAChecker.cxx:659
 AliHMPIDQAChecker.cxx:660
 AliHMPIDQAChecker.cxx:661
 AliHMPIDQAChecker.cxx:662
 AliHMPIDQAChecker.cxx:663
 AliHMPIDQAChecker.cxx:664
 AliHMPIDQAChecker.cxx:665
 AliHMPIDQAChecker.cxx:666
 AliHMPIDQAChecker.cxx:667
 AliHMPIDQAChecker.cxx:668
 AliHMPIDQAChecker.cxx:669
 AliHMPIDQAChecker.cxx:670
 AliHMPIDQAChecker.cxx:671
 AliHMPIDQAChecker.cxx:672
 AliHMPIDQAChecker.cxx:673
 AliHMPIDQAChecker.cxx:674
 AliHMPIDQAChecker.cxx:675
 AliHMPIDQAChecker.cxx:676
 AliHMPIDQAChecker.cxx:677
 AliHMPIDQAChecker.cxx:678
 AliHMPIDQAChecker.cxx:679
 AliHMPIDQAChecker.cxx:680
 AliHMPIDQAChecker.cxx:681
 AliHMPIDQAChecker.cxx:682
 AliHMPIDQAChecker.cxx:683
 AliHMPIDQAChecker.cxx:684
 AliHMPIDQAChecker.cxx:685
 AliHMPIDQAChecker.cxx:686
 AliHMPIDQAChecker.cxx:687
 AliHMPIDQAChecker.cxx:688
 AliHMPIDQAChecker.cxx:689
 AliHMPIDQAChecker.cxx:690
 AliHMPIDQAChecker.cxx:691
 AliHMPIDQAChecker.cxx:692
 AliHMPIDQAChecker.cxx:693
 AliHMPIDQAChecker.cxx:694
 AliHMPIDQAChecker.cxx:695
 AliHMPIDQAChecker.cxx:696
 AliHMPIDQAChecker.cxx:697
 AliHMPIDQAChecker.cxx:698
 AliHMPIDQAChecker.cxx:699
 AliHMPIDQAChecker.cxx:700
 AliHMPIDQAChecker.cxx:701
 AliHMPIDQAChecker.cxx:702
 AliHMPIDQAChecker.cxx:703
 AliHMPIDQAChecker.cxx:704
 AliHMPIDQAChecker.cxx:705
 AliHMPIDQAChecker.cxx:706
 AliHMPIDQAChecker.cxx:707
 AliHMPIDQAChecker.cxx:708
 AliHMPIDQAChecker.cxx:709
 AliHMPIDQAChecker.cxx:710
 AliHMPIDQAChecker.cxx:711
 AliHMPIDQAChecker.cxx:712
 AliHMPIDQAChecker.cxx:713
 AliHMPIDQAChecker.cxx:714
 AliHMPIDQAChecker.cxx:715
 AliHMPIDQAChecker.cxx:716
 AliHMPIDQAChecker.cxx:717
 AliHMPIDQAChecker.cxx:718
 AliHMPIDQAChecker.cxx:719
 AliHMPIDQAChecker.cxx:720
 AliHMPIDQAChecker.cxx:721
 AliHMPIDQAChecker.cxx:722
 AliHMPIDQAChecker.cxx:723
 AliHMPIDQAChecker.cxx:724
 AliHMPIDQAChecker.cxx:725
 AliHMPIDQAChecker.cxx:726
 AliHMPIDQAChecker.cxx:727