ROOT logo
 /**************************************************************************
 * Copyright(c) 2007-2009, 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
//  W.Ferrarese  P.Cerello  Mag 2008
//  INFN Torino

// --- ROOT system ---
#include "TH1.h"
#include <Riostream.h>
#include "TStyle.h"

// --- AliRoot header files ---
#include "AliITSQAChecker.h"
#include "AliITSQASPDChecker.h"
#include "AliITSQASDDChecker.h"
#include "AliITSQASSDChecker.h"
#include "AliITSQADataMakerRec.h"

ClassImp(AliITSQAChecker)

//____________________________________________________________________________
AliITSQAChecker::AliITSQAChecker(Bool_t kMode, Short_t subDet, Short_t ldc) :
AliQACheckerBase("ITS","SDD Quality Assurance Checker"),
fkOnline(0),
fDet(0),  
fLDC(0),
fSPDOffset(0), 
fSDDOffset(0), 
fSSDOffset(0),
fSPDHisto(0),
fSDDHisto(0),
fSSDHisto(0),
fSPDChecker(0),  // SPD Checker
fSDDChecker(0),  // SDD Checker
fSSDChecker(0)  // SSD Checker

{
  // Standard constructor
  fkOnline = kMode; fDet = subDet; fLDC = ldc;
  if(fDet == 0 || fDet == 1) {
    AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQAChecker::Create SPD Checker\n");
    fSPDChecker = new AliITSQASPDChecker();
  }
  if(fDet == 0 || fDet == 2) {
    AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQAChecker::Create SDD Checker\n");
    fSDDChecker = new AliITSQASDDChecker();
  }
  if(fDet == 0 || fDet == 3) {
    AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQAChecker::Create SSD Checker\n");
    fSSDChecker = new AliITSQASSDChecker();
  }
  InitQACheckerLimits();
}

//____________________________________________________________________________
AliITSQAChecker::~AliITSQAChecker(){
  // destructor
  if(fSPDChecker)delete fSPDChecker;
  if(fSDDChecker)delete fSDDChecker;
  if(fSSDChecker)delete fSSDChecker;

}
//____________________________________________________________________________
void AliITSQAChecker::Check(Double_t * rv, AliQAv1::ALITASK_t index, TObjArray ** list, const AliDetectorRecoParam * recoParam)
{


  // basic checks on the QA histograms on the input list
  //for the ITS subdetectorQA (Raws Digits Hits RecPoints SDigits) return the worst value of the three result
  if(index == AliQAv1::kESD){
    
    for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
      rv[specie] = 0.0 ; 
      if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) 
        continue ; 
      AliDebug(AliQAv1::GetQADebugLevel(),"Checker for ESD");
      Int_t tested = 0;
      Int_t empty = 0;
      // The following flags are set to kTRUE if the corresponding
      // QA histograms exceed a given quality threshold
      Bool_t cluMapSA = kFALSE;
      Bool_t cluMapMI = kFALSE;
      Bool_t cluMI = kFALSE;
      Bool_t cluSA = kFALSE;
      Bool_t verSPDZ = kFALSE;
      if (list[specie]->GetEntries() == 0) {
        rv[specie] = 0.; // nothing to check
      }
      else {
	Double_t stepbit[AliQAv1::kNBIT];
	Double_t histonumb= list[specie]->GetEntries();
	CreateStepForBit(histonumb,stepbit); 
        TIter next1(list[specie]);
        TH1 * hdata;
        Int_t nskipped=0;
        Bool_t skipped[6]={kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE};
        // look for layers that we wanted to skip
        while ( (hdata = dynamic_cast<TH1 *>(next1())) ) {
          if(hdata){
	    TString hname = hdata->GetName();
	    if(!hname.Contains("hESDSkippedLayers")) continue;
	    for(Int_t k=1; k<7; k++) {
	      if(hdata->GetBinContent(k)>0) { 
		nskipped++; 
		skipped[k-1]=kTRUE; 
	      } 
	    } 
	  }
	}
        TIter next(list[specie]);
        while ( (hdata = dynamic_cast<TH1 *>(next())) ) {
          if(hdata){
            TString hname = hdata->GetName();
            Double_t entries = hdata->GetEntries();
            ++tested;
            if(!(entries>0.))++empty;
            AliDebug(AliQAv1::GetQADebugLevel(),Form("ESD hist name %s - entries %12.1g",hname.Data(),entries));
            if(hname.Contains("hESDClusterMapSA") && entries>0.){
              cluMapSA = kTRUE;
              AliDebug(AliQAv1::GetQADebugLevel(),Form("Processing histogram %s",hname.Data()));
              // Check if there are layers with anomalously low 
              // contributing points to SA reconstructed tracks
              for(Int_t k=1;k<7;k++){
                // check if the layer was skipped
                if(skipped[k-1]) continue;
                if(hdata->GetBinContent(k)<0.5*(entries/6.)){
                  cluMapSA = kFALSE;
                  AliDebug(AliQAv1::GetQADebugLevel(),Form("SA tracks have few points on layer %d - look at histogram hESDClustersSA",k));
                }
              }  
            }//end clustermapsa 
	    
            else if(hname.Contains("hESDClusterMapMI") && entries>0.){
              // Check if there are layers with anomalously low 
              // contributing points to MI reconstructed tracks
              AliDebug(AliQAv1::GetQADebugLevel(),Form("Processing histogram %s",hname.Data()));
              cluMapMI = kTRUE;
              for(Int_t k=1;k<7;k++){
                // check if the layer was skipped
                if(skipped[k-1]) continue;
                if(hdata->GetBinContent(k)<0.5*(entries/6.)){
                  cluMapMI = kFALSE;
                  AliDebug(AliQAv1::GetQADebugLevel(),Form("MI tracks have few points on layer %d - look at histogram hESDClustersMI",k));
                }
              }  
            }//end clustermapmi
	    
            else if(hname.Contains("hESDClustersMI") && entries>0.){
              // Check if 6 clusters MI tracks are the majority
              AliDebug(AliQAv1::GetQADebugLevel(),Form("Processing histogram %s",hname.Data()));
              cluMI = kTRUE;
              Double_t maxlaytracks = hdata->GetBinContent(7-nskipped);
              for(Int_t k=2; k<7-nskipped; k++){
                if(hdata->GetBinContent(k)>maxlaytracks){
                  cluMI = kFALSE;
                  AliDebug(AliQAv1::GetQADebugLevel(),Form("MI Tracks with %d clusters are more than tracks with %d clusters. Look at histogram hESDClustersMI",k-1,6-nskipped));
                }
              }
            }//end clustersmi
	    
            else if(hname.Contains("hESDClustersSA") && entries>0.){
              // Check if 6 clusters SA tracks are the majority
              AliDebug(AliQAv1::GetQADebugLevel(),Form("Processing histogram %s",hname.Data()));
              cluSA = kTRUE;
              Double_t maxlaytracks = hdata->GetBinContent(7-nskipped);
              for(Int_t k=2; k<7-nskipped; k++){
                if(hdata->GetBinContent(k)>maxlaytracks){
                  cluSA = kFALSE;
                  AliDebug(AliQAv1::GetQADebugLevel(), Form("SA Tracks with %d clusters are more than tracks with %d clusters. Look at histogram hESDClustersSA",k-1,6-nskipped));
                }
              }
            }//end clusterssa
	    
            else if(hname.Contains("hSPDVertexZ") && entries>0.){
              // Check if average Z vertex coordinate is -5 < z < 5 cm
              AliDebug(AliQAv1::GetQADebugLevel(),Form("Processing histogram %s",hname.Data()));
              verSPDZ = kTRUE;
              if(hdata->GetMean()<-5. && hdata->GetMean()>5.){
                verSPDZ = kFALSE;
                AliDebug(AliQAv1::GetQADebugLevel(),Form("Average z vertex coordinate is at z= %10.4g cm",hdata->GetMean()));
              }
            }//end spdvertexz
	    
	    else{ AliError("ESD Checker - invalid data type");}//end else
	    
	    rv[specie] = 0.;
	    if(tested>0){
	      if(tested == empty){
		rv[specie] = 2500.; // set to error
		AliWarning(Form("All ESD histograms are empty - specie=%d",specie));
	      }
	      else {
		rv[specie] = 2500.-1500.*(static_cast<Double_t>(tested-empty)/static_cast<Double_t>(tested)); // INFO if all histos are filled
		if(cluMapSA)rv[specie]-=200.;
		if(cluMapMI)rv[specie]-=200.;
		if(cluMI)rv[specie]-=200.;
		if(cluSA)rv[specie]-=200.;
		if(verSPDZ)rv[specie]-=199.;  // down to 1 if everything is OK
	      }
	    }//end tested
	  }//end hdata
	}//end while
	//     AliDebug(AliQAv1::GetQADebugLevel(), Form("ESD - Tested %d histograms, Return value %f \n",tested,rv[specie]));
	AliInfo(Form("ESD - Tested %d histograms, Return value %f \n",tested,rv[specie]));
      }
    }
  } // end of ESD QA
  else{
    
    //____________________________________________________________________________

    Double_t spdCheck[AliRecoParam::kNSpecies] ;
    Double_t sddCheck[AliRecoParam::kNSpecies] ;
    Double_t ssdCheck[AliRecoParam::kNSpecies] ;



    for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
      if ( !AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; 
      if ( AliQAv1::Instance()->IsEventSpecieSet(specie) ) {
	Double_t histotot=list[specie]->GetEntries();
	if(histotot!=0)
	  {
	    spdCheck[specie]=0.;
	    sddCheck[specie]=0.;
	    ssdCheck[specie]=0.;
	    rv[specie] = 0.0 ;// 
	    //pixel
	    if(fDet == 0 || fDet == 1) {
	      fSPDChecker->SetTaskOffset(fSPDOffset);
	      //printf("spdoffset = %i \n",fSPDOffset );
	      Double_t histoSPD=double(GetSPDHisto());
	      if(AliITSQADataMakerRec::AreEqual(histoSPD,0)==kFALSE){
		Double_t *stepSPD=new Double_t[AliQAv1::kNBIT];
		CreateStepForBit(histoSPD,stepSPD);
		fSPDChecker->SetStepBit(stepSPD);
		spdCheck[specie] = fSPDChecker->Check(index, list[specie], recoParam);
		if(spdCheck[specie]>fUpTestValue[AliQAv1::kFATAL]||spdCheck[specie]<0.)
		  {
		    AliInfo(Form("SPD check result for %s  is out of range (%f)!!! Retval of specie %s is sit to -1\n ",AliQAv1::GetAliTaskName(index),spdCheck[specie],AliRecoParam::GetEventSpecieName(specie)));
		    spdCheck[specie]=fUpTestValue[AliQAv1::kFATAL];
		  }
		delete []stepSPD;
	      }//end check SPD entries
	      else{spdCheck[specie]=fUpTestValue[AliQAv1::kFATAL];}
	      rv[specie]=spdCheck[specie];
	    }//end SPD check
	    //drift
	    if(fDet == 0 || fDet == 2) {
	      fSDDChecker->SetTaskOffset(fSDDOffset);
	      fSDDChecker->SetEventSpecieForCheck(specie);
	      Double_t histoSDD=double(GetSDDHisto());
	      if(AliITSQADataMakerRec::AreEqual(histoSDD,0)==kFALSE){
		Double_t *stepSDD=new Double_t[AliQAv1::kNBIT];
		CreateStepForBit(histoSDD,stepSDD);
		fSDDChecker->SetStepBit(stepSDD);
		sddCheck[specie] = fSDDChecker->Check(index, list[specie], recoParam);	
		if(sddCheck[specie]>fUpTestValue[AliQAv1::kFATAL]||sddCheck[specie]<0.)
		  {
		    AliInfo(Form("SDD check result for %s  is out of range (%f)!!! Retval of specie %s is sit to -1\n ",AliQAv1::GetAliTaskName(index),sddCheck[specie],AliRecoParam::GetEventSpecieName(specie)));
		    sddCheck[specie]=fUpTestValue[AliQAv1::kFATAL];
		  }
		delete []stepSDD;
	      }//end check SDD entries
	      else{ssdCheck[specie]=fUpTestValue[AliQAv1::kFATAL];}
	      if(sddCheck[specie]>rv[specie])rv[specie]=sddCheck[specie];  
	    }//end SDD
	    //strip
	    if(fDet == 0 || fDet == 3) {
	      fSSDChecker->SetTaskOffset(fSSDOffset);
	      Double_t histoSSD=double(GetSSDHisto());
	      if(AliITSQADataMakerRec::AreEqual(histoSSD,0)==kFALSE){
	      Double_t *stepSSD=new Double_t[AliQAv1::kNBIT];
	      CreateStepForBit(histoSSD,stepSSD);
	      fSSDChecker->SetStepBit(stepSSD);
	      ssdCheck[specie] = fSSDChecker->Check(index, list[specie], recoParam);
	      if(ssdCheck[specie]>fUpTestValue[AliQAv1::kFATAL]||ssdCheck[specie]<0.)
		{
		  AliInfo(Form("SSD check result for %s is out of range (%f)!!! Retval of specie %s is sit to -1\n ",AliQAv1::GetAliTaskName(index),ssdCheck[specie],AliRecoParam::GetEventSpecieName(specie)));
		  ssdCheck[specie]=fUpTestValue[AliQAv1::kFATAL];
		}
	      delete [] stepSSD;
	      }//end check SSD entries
	      else{ssdCheck[specie]=fUpTestValue[AliQAv1::kFATAL];}
	      if(ssdCheck[specie]>rv[specie])rv[specie]=ssdCheck[specie];
	    }//end SSD
	    
	    AliInfo(Form("Check result for %s: \n\t  SPD %f \n\t  SDD %f \n\t  SSD %f \n Check result %f \n ",AliQAv1::GetAliTaskName(index),spdCheck[specie],sddCheck[specie],ssdCheck[specie],rv[specie]));
	    // here merging part for common ITS QA result
	    // 
	  }//end entries
      }//end if event specie
    }//end for
  }
}

//____________________________________________________________________________
void AliITSQAChecker::SetTaskOffset(Int_t SPDOffset, Int_t SDDOffset, Int_t SSDOffset)
{
  //Setting the 3 offsets for each task called
  fSPDOffset = SPDOffset;
  fSDDOffset = SDDOffset;
  fSSDOffset = SSDOffset;
}

//____________________________________________________________________________
void AliITSQAChecker::SetHisto(Int_t SPDhisto, Int_t SDDhisto, Int_t SSDhisto)
{
  //Setting the 3 offsets for each task called
  fSPDHisto = SPDhisto;
  fSDDHisto = SDDhisto;
  fSSDHisto = SSDhisto;
}

 //____________________________________________________________________________
 void AliITSQAChecker::SetDetTaskOffset(Int_t subdet,Int_t offset)
 {
   //returns the offset for each task and for each subdetector
   switch(subdet){
   case 1:
     SetSPDTaskOffset(offset);
     break;
   case 2:
     SetSDDTaskOffset(offset);
     break;
   case 3:
     SetSSDTaskOffset(offset);
     break;
   default:
     AliWarning("No specific (SPD,SDD or SSD) subdetector correspond to to this number!!! all offsets set to zero for all the detectors\n");
     SetTaskOffset(0, 0, 0);
     break;
   }
 }

 //____________________________________________________________________________
 void AliITSQAChecker::SetDetHisto(Int_t subdet,Int_t histo)
 {
   //set the number od histograms for the subdetector
   switch(subdet){
   case 1:
     SetSPDHisto(histo);
     break;
   case 2:
     SetSDDHisto(histo);
     break;
   case 3:
     SetSSDHisto(histo);
     break;
   default:
     AliWarning("No specific (SPD,SDD or SSD) subdetector correspond to to this number!!! all offsets set to zero for all the detectors\n");
     SetHisto(0, 0, 0);
     break;
   }
 }

//_____________________________________________________________________________

void AliITSQAChecker::InitQACheckerLimits()
{
  //init the tolerance range for each QA bit 
  AliInfo("Setting of tolerance values\n");

  Float_t lowtolerancevalue[AliQAv1::kNBIT];

  Float_t hightolerancevalue[AliQAv1::kNBIT];
  for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
    {
      lowtolerancevalue[bit]=(bit*1000.);
      hightolerancevalue[bit]=((bit+1.)*1000.);
    }
  SetHiLo(hightolerancevalue,lowtolerancevalue);
  //  AliInfo(Form("Range Value  \n INFO    -> %f <  value <  %f \n WARNING -> %f <  value <= %f \n ERROR   -> %f <  value <= %f \n FATAL   -> %f <= value <  %f \n", fLowTestValue[AliQAv1::kINFO], fUpTestValue[AliQAv1::kINFO], fLowTestValue[AliQAv1::kWARNING], fUpTestValue[AliQAv1::kWARNING], fLowTestValue[AliQAv1::kERROR], fUpTestValue[AliQAv1::kERROR], fLowTestValue[AliQAv1::kFATAL], fUpTestValue[AliQAv1::kFATAL]  ));

  if(fDet == 0 || fDet == 1) {
    fSPDChecker->SetSPDLimits( lowtolerancevalue,hightolerancevalue );
  }
  if(fDet == 0 || fDet == 2) {
    fSDDChecker->SetSDDLimits( lowtolerancevalue,hightolerancevalue );
  }
  if(fDet == 0 || fDet == 3) {
    fSSDChecker->SetSSDLimits( lowtolerancevalue,hightolerancevalue );
  }


  
}


//_____________________________________________________________________________

void AliITSQAChecker::CreateStepForBit(Double_t histonumb,Double_t *steprange)
{
  //creation of the step bit for each QA bit 
  for(Int_t bit=0;bit < AliQAv1::kNBIT; bit++)
    {       
      //printf("%i\t %f \t %f \t %f \n",bit, fUpTestValue[bit],fLowTestValue[AliQAv1::kINFO],histonumb);
      steprange[bit]=double((fUpTestValue[bit] - fLowTestValue[AliQAv1::kINFO])/histonumb);
      //printf("%i\t %f \t %f \t %f \t %f\n",bit, fUpTestValue[bit],fLowTestValue[AliQAv1::kINFO],histonumb,steprange[bit] );
    }
  //AliInfo(Form("StepBitValue:numner of histo %f\n\t INFO %f \t WARNING %f \t ERROR %f \t FATAL %f \n",histonumb, steprange[AliQAv1::kINFO],steprange[AliQAv1::kWARNING],steprange[AliQAv1::kERROR],steprange[AliQAv1::kFATAL]));
}


//_____________________________________________________________________________
void AliITSQAChecker::SetQA(AliQAv1::ALITASK_t index, Double_t * value) const
{
  //Setting of the QA tolerance values
  AliQAv1 * qa = AliQAv1::Instance(index) ;


  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {

    if (! qa->IsEventSpecieSet(AliRecoParam::ConvertIndex(specie)))
      continue ;
    if (  value == NULL ) { // No checker is implemented, set all QA to Fatal
      qa->Set(AliQAv1::kFATAL, specie) ; 
    } else {
      if ( value[specie] > fLowTestValue[AliQAv1::kFATAL] && value[specie] <= fUpTestValue[AliQAv1::kFATAL] ) 
        qa->Set(AliQAv1::kFATAL, AliRecoParam::ConvertIndex(specie)) ; 
      else if ( value[specie] > fLowTestValue[AliQAv1::kERROR] && value[specie] <= fUpTestValue[AliQAv1::kERROR]  )
        qa->Set(AliQAv1::kERROR, AliRecoParam::ConvertIndex(specie)) ; 
      else if ( value[specie] > fLowTestValue[AliQAv1::kWARNING] && value[specie] <= fUpTestValue[AliQAv1::kWARNING]  )
        qa->Set(AliQAv1::kWARNING, AliRecoParam::ConvertIndex(specie)) ;
      else if ( value[specie] > fLowTestValue[AliQAv1::kINFO] && value[specie] <= fUpTestValue[AliQAv1::kINFO] ) 
        qa->Set(AliQAv1::kINFO, AliRecoParam::ConvertIndex(specie)) ; 	
      //else if(value[specie]==0) qa->Set(AliQAv1::kFATAL, AliRecoParam::ConvertIndex(specie)) ; //no ckeck has been done
    }
    qa->ShowStatus(AliQAv1::kITS,index,AliRecoParam::ConvertIndex(specie));
  }//end for

}


//__________________________________________________________________
void  AliITSQAChecker::MakeImage( TObjArray ** list, AliQAv1::TASKINDEX_t task, AliQAv1::MODE_t mode)
{
  //make a summary image
  //gStyle->SetPalette(1);

  //Int_t nImages = 0 ;
  //Int_t imageindex=0;
  for (Int_t esIndex = 0 ; esIndex < AliRecoParam::kNSpecies ; esIndex++) {
    if (! AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(esIndex)) ) 
      continue ;
    //else imageindex=esIndex;

    TIter next(list[esIndex]) ;  
    TH1 * hdata = NULL ; 
    while ( (hdata=static_cast<TH1 *>(next())) ) {
      TString cln(hdata->ClassName()) ; 
      if ( ! cln.Contains("TH") )
        continue ; 
      if(cln.Contains("TH2")) 
	{
	  Float_t min=hdata->GetMinimum();
	  Float_t max=hdata->GetMaximum();
	  if(max>min) hdata->SetOption("colz");
	}
    }
    break ; 
  }

  Bool_t retvalue=kFALSE;

  if(GetSubDet()==0) MakeITSImage(list,task, mode);
  else if(GetSubDet()==1) 
    {
      retvalue=fSPDChecker->MakeSPDImage(list,task, mode) ; 
      if(retvalue==kFALSE)AliQACheckerBase::MakeImage(list,task, mode);
    }
  else if(GetSubDet()==2){ retvalue=fSDDChecker->MakeSDDImage(list,task, mode) ;if(retvalue==kFALSE)AliQACheckerBase::MakeImage(list,task,mode); }
  else if(GetSubDet()==3) 
    {
      retvalue=fSSDChecker->MakeSSDImage(list,task, mode) ;
      if(retvalue==kFALSE)AliQACheckerBase::MakeImage(list,task, mode); 
    }

}

 AliITSQAChecker.cxx:1
 AliITSQAChecker.cxx:2
 AliITSQAChecker.cxx:3
 AliITSQAChecker.cxx:4
 AliITSQAChecker.cxx:5
 AliITSQAChecker.cxx:6
 AliITSQAChecker.cxx:7
 AliITSQAChecker.cxx:8
 AliITSQAChecker.cxx:9
 AliITSQAChecker.cxx:10
 AliITSQAChecker.cxx:11
 AliITSQAChecker.cxx:12
 AliITSQAChecker.cxx:13
 AliITSQAChecker.cxx:14
 AliITSQAChecker.cxx:15
 AliITSQAChecker.cxx:16
 AliITSQAChecker.cxx:17
 AliITSQAChecker.cxx:18
 AliITSQAChecker.cxx:19
 AliITSQAChecker.cxx:20
 AliITSQAChecker.cxx:21
 AliITSQAChecker.cxx:22
 AliITSQAChecker.cxx:23
 AliITSQAChecker.cxx:24
 AliITSQAChecker.cxx:25
 AliITSQAChecker.cxx:26
 AliITSQAChecker.cxx:27
 AliITSQAChecker.cxx:28
 AliITSQAChecker.cxx:29
 AliITSQAChecker.cxx:30
 AliITSQAChecker.cxx:31
 AliITSQAChecker.cxx:32
 AliITSQAChecker.cxx:33
 AliITSQAChecker.cxx:34
 AliITSQAChecker.cxx:35
 AliITSQAChecker.cxx:36
 AliITSQAChecker.cxx:37
 AliITSQAChecker.cxx:38
 AliITSQAChecker.cxx:39
 AliITSQAChecker.cxx:40
 AliITSQAChecker.cxx:41
 AliITSQAChecker.cxx:42
 AliITSQAChecker.cxx:43
 AliITSQAChecker.cxx:44
 AliITSQAChecker.cxx:45
 AliITSQAChecker.cxx:46
 AliITSQAChecker.cxx:47
 AliITSQAChecker.cxx:48
 AliITSQAChecker.cxx:49
 AliITSQAChecker.cxx:50
 AliITSQAChecker.cxx:51
 AliITSQAChecker.cxx:52
 AliITSQAChecker.cxx:53
 AliITSQAChecker.cxx:54
 AliITSQAChecker.cxx:55
 AliITSQAChecker.cxx:56
 AliITSQAChecker.cxx:57
 AliITSQAChecker.cxx:58
 AliITSQAChecker.cxx:59
 AliITSQAChecker.cxx:60
 AliITSQAChecker.cxx:61
 AliITSQAChecker.cxx:62
 AliITSQAChecker.cxx:63
 AliITSQAChecker.cxx:64
 AliITSQAChecker.cxx:65
 AliITSQAChecker.cxx:66
 AliITSQAChecker.cxx:67
 AliITSQAChecker.cxx:68
 AliITSQAChecker.cxx:69
 AliITSQAChecker.cxx:70
 AliITSQAChecker.cxx:71
 AliITSQAChecker.cxx:72
 AliITSQAChecker.cxx:73
 AliITSQAChecker.cxx:74
 AliITSQAChecker.cxx:75
 AliITSQAChecker.cxx:76
 AliITSQAChecker.cxx:77
 AliITSQAChecker.cxx:78
 AliITSQAChecker.cxx:79
 AliITSQAChecker.cxx:80
 AliITSQAChecker.cxx:81
 AliITSQAChecker.cxx:82
 AliITSQAChecker.cxx:83
 AliITSQAChecker.cxx:84
 AliITSQAChecker.cxx:85
 AliITSQAChecker.cxx:86
 AliITSQAChecker.cxx:87
 AliITSQAChecker.cxx:88
 AliITSQAChecker.cxx:89
 AliITSQAChecker.cxx:90
 AliITSQAChecker.cxx:91
 AliITSQAChecker.cxx:92
 AliITSQAChecker.cxx:93
 AliITSQAChecker.cxx:94
 AliITSQAChecker.cxx:95
 AliITSQAChecker.cxx:96
 AliITSQAChecker.cxx:97
 AliITSQAChecker.cxx:98
 AliITSQAChecker.cxx:99
 AliITSQAChecker.cxx:100
 AliITSQAChecker.cxx:101
 AliITSQAChecker.cxx:102
 AliITSQAChecker.cxx:103
 AliITSQAChecker.cxx:104
 AliITSQAChecker.cxx:105
 AliITSQAChecker.cxx:106
 AliITSQAChecker.cxx:107
 AliITSQAChecker.cxx:108
 AliITSQAChecker.cxx:109
 AliITSQAChecker.cxx:110
 AliITSQAChecker.cxx:111
 AliITSQAChecker.cxx:112
 AliITSQAChecker.cxx:113
 AliITSQAChecker.cxx:114
 AliITSQAChecker.cxx:115
 AliITSQAChecker.cxx:116
 AliITSQAChecker.cxx:117
 AliITSQAChecker.cxx:118
 AliITSQAChecker.cxx:119
 AliITSQAChecker.cxx:120
 AliITSQAChecker.cxx:121
 AliITSQAChecker.cxx:122
 AliITSQAChecker.cxx:123
 AliITSQAChecker.cxx:124
 AliITSQAChecker.cxx:125
 AliITSQAChecker.cxx:126
 AliITSQAChecker.cxx:127
 AliITSQAChecker.cxx:128
 AliITSQAChecker.cxx:129
 AliITSQAChecker.cxx:130
 AliITSQAChecker.cxx:131
 AliITSQAChecker.cxx:132
 AliITSQAChecker.cxx:133
 AliITSQAChecker.cxx:134
 AliITSQAChecker.cxx:135
 AliITSQAChecker.cxx:136
 AliITSQAChecker.cxx:137
 AliITSQAChecker.cxx:138
 AliITSQAChecker.cxx:139
 AliITSQAChecker.cxx:140
 AliITSQAChecker.cxx:141
 AliITSQAChecker.cxx:142
 AliITSQAChecker.cxx:143
 AliITSQAChecker.cxx:144
 AliITSQAChecker.cxx:145
 AliITSQAChecker.cxx:146
 AliITSQAChecker.cxx:147
 AliITSQAChecker.cxx:148
 AliITSQAChecker.cxx:149
 AliITSQAChecker.cxx:150
 AliITSQAChecker.cxx:151
 AliITSQAChecker.cxx:152
 AliITSQAChecker.cxx:153
 AliITSQAChecker.cxx:154
 AliITSQAChecker.cxx:155
 AliITSQAChecker.cxx:156
 AliITSQAChecker.cxx:157
 AliITSQAChecker.cxx:158
 AliITSQAChecker.cxx:159
 AliITSQAChecker.cxx:160
 AliITSQAChecker.cxx:161
 AliITSQAChecker.cxx:162
 AliITSQAChecker.cxx:163
 AliITSQAChecker.cxx:164
 AliITSQAChecker.cxx:165
 AliITSQAChecker.cxx:166
 AliITSQAChecker.cxx:167
 AliITSQAChecker.cxx:168
 AliITSQAChecker.cxx:169
 AliITSQAChecker.cxx:170
 AliITSQAChecker.cxx:171
 AliITSQAChecker.cxx:172
 AliITSQAChecker.cxx:173
 AliITSQAChecker.cxx:174
 AliITSQAChecker.cxx:175
 AliITSQAChecker.cxx:176
 AliITSQAChecker.cxx:177
 AliITSQAChecker.cxx:178
 AliITSQAChecker.cxx:179
 AliITSQAChecker.cxx:180
 AliITSQAChecker.cxx:181
 AliITSQAChecker.cxx:182
 AliITSQAChecker.cxx:183
 AliITSQAChecker.cxx:184
 AliITSQAChecker.cxx:185
 AliITSQAChecker.cxx:186
 AliITSQAChecker.cxx:187
 AliITSQAChecker.cxx:188
 AliITSQAChecker.cxx:189
 AliITSQAChecker.cxx:190
 AliITSQAChecker.cxx:191
 AliITSQAChecker.cxx:192
 AliITSQAChecker.cxx:193
 AliITSQAChecker.cxx:194
 AliITSQAChecker.cxx:195
 AliITSQAChecker.cxx:196
 AliITSQAChecker.cxx:197
 AliITSQAChecker.cxx:198
 AliITSQAChecker.cxx:199
 AliITSQAChecker.cxx:200
 AliITSQAChecker.cxx:201
 AliITSQAChecker.cxx:202
 AliITSQAChecker.cxx:203
 AliITSQAChecker.cxx:204
 AliITSQAChecker.cxx:205
 AliITSQAChecker.cxx:206
 AliITSQAChecker.cxx:207
 AliITSQAChecker.cxx:208
 AliITSQAChecker.cxx:209
 AliITSQAChecker.cxx:210
 AliITSQAChecker.cxx:211
 AliITSQAChecker.cxx:212
 AliITSQAChecker.cxx:213
 AliITSQAChecker.cxx:214
 AliITSQAChecker.cxx:215
 AliITSQAChecker.cxx:216
 AliITSQAChecker.cxx:217
 AliITSQAChecker.cxx:218
 AliITSQAChecker.cxx:219
 AliITSQAChecker.cxx:220
 AliITSQAChecker.cxx:221
 AliITSQAChecker.cxx:222
 AliITSQAChecker.cxx:223
 AliITSQAChecker.cxx:224
 AliITSQAChecker.cxx:225
 AliITSQAChecker.cxx:226
 AliITSQAChecker.cxx:227
 AliITSQAChecker.cxx:228
 AliITSQAChecker.cxx:229
 AliITSQAChecker.cxx:230
 AliITSQAChecker.cxx:231
 AliITSQAChecker.cxx:232
 AliITSQAChecker.cxx:233
 AliITSQAChecker.cxx:234
 AliITSQAChecker.cxx:235
 AliITSQAChecker.cxx:236
 AliITSQAChecker.cxx:237
 AliITSQAChecker.cxx:238
 AliITSQAChecker.cxx:239
 AliITSQAChecker.cxx:240
 AliITSQAChecker.cxx:241
 AliITSQAChecker.cxx:242
 AliITSQAChecker.cxx:243
 AliITSQAChecker.cxx:244
 AliITSQAChecker.cxx:245
 AliITSQAChecker.cxx:246
 AliITSQAChecker.cxx:247
 AliITSQAChecker.cxx:248
 AliITSQAChecker.cxx:249
 AliITSQAChecker.cxx:250
 AliITSQAChecker.cxx:251
 AliITSQAChecker.cxx:252
 AliITSQAChecker.cxx:253
 AliITSQAChecker.cxx:254
 AliITSQAChecker.cxx:255
 AliITSQAChecker.cxx:256
 AliITSQAChecker.cxx:257
 AliITSQAChecker.cxx:258
 AliITSQAChecker.cxx:259
 AliITSQAChecker.cxx:260
 AliITSQAChecker.cxx:261
 AliITSQAChecker.cxx:262
 AliITSQAChecker.cxx:263
 AliITSQAChecker.cxx:264
 AliITSQAChecker.cxx:265
 AliITSQAChecker.cxx:266
 AliITSQAChecker.cxx:267
 AliITSQAChecker.cxx:268
 AliITSQAChecker.cxx:269
 AliITSQAChecker.cxx:270
 AliITSQAChecker.cxx:271
 AliITSQAChecker.cxx:272
 AliITSQAChecker.cxx:273
 AliITSQAChecker.cxx:274
 AliITSQAChecker.cxx:275
 AliITSQAChecker.cxx:276
 AliITSQAChecker.cxx:277
 AliITSQAChecker.cxx:278
 AliITSQAChecker.cxx:279
 AliITSQAChecker.cxx:280
 AliITSQAChecker.cxx:281
 AliITSQAChecker.cxx:282
 AliITSQAChecker.cxx:283
 AliITSQAChecker.cxx:284
 AliITSQAChecker.cxx:285
 AliITSQAChecker.cxx:286
 AliITSQAChecker.cxx:287
 AliITSQAChecker.cxx:288
 AliITSQAChecker.cxx:289
 AliITSQAChecker.cxx:290
 AliITSQAChecker.cxx:291
 AliITSQAChecker.cxx:292
 AliITSQAChecker.cxx:293
 AliITSQAChecker.cxx:294
 AliITSQAChecker.cxx:295
 AliITSQAChecker.cxx:296
 AliITSQAChecker.cxx:297
 AliITSQAChecker.cxx:298
 AliITSQAChecker.cxx:299
 AliITSQAChecker.cxx:300
 AliITSQAChecker.cxx:301
 AliITSQAChecker.cxx:302
 AliITSQAChecker.cxx:303
 AliITSQAChecker.cxx:304
 AliITSQAChecker.cxx:305
 AliITSQAChecker.cxx:306
 AliITSQAChecker.cxx:307
 AliITSQAChecker.cxx:308
 AliITSQAChecker.cxx:309
 AliITSQAChecker.cxx:310
 AliITSQAChecker.cxx:311
 AliITSQAChecker.cxx:312
 AliITSQAChecker.cxx:313
 AliITSQAChecker.cxx:314
 AliITSQAChecker.cxx:315
 AliITSQAChecker.cxx:316
 AliITSQAChecker.cxx:317
 AliITSQAChecker.cxx:318
 AliITSQAChecker.cxx:319
 AliITSQAChecker.cxx:320
 AliITSQAChecker.cxx:321
 AliITSQAChecker.cxx:322
 AliITSQAChecker.cxx:323
 AliITSQAChecker.cxx:324
 AliITSQAChecker.cxx:325
 AliITSQAChecker.cxx:326
 AliITSQAChecker.cxx:327
 AliITSQAChecker.cxx:328
 AliITSQAChecker.cxx:329
 AliITSQAChecker.cxx:330
 AliITSQAChecker.cxx:331
 AliITSQAChecker.cxx:332
 AliITSQAChecker.cxx:333
 AliITSQAChecker.cxx:334
 AliITSQAChecker.cxx:335
 AliITSQAChecker.cxx:336
 AliITSQAChecker.cxx:337
 AliITSQAChecker.cxx:338
 AliITSQAChecker.cxx:339
 AliITSQAChecker.cxx:340
 AliITSQAChecker.cxx:341
 AliITSQAChecker.cxx:342
 AliITSQAChecker.cxx:343
 AliITSQAChecker.cxx:344
 AliITSQAChecker.cxx:345
 AliITSQAChecker.cxx:346
 AliITSQAChecker.cxx:347
 AliITSQAChecker.cxx:348
 AliITSQAChecker.cxx:349
 AliITSQAChecker.cxx:350
 AliITSQAChecker.cxx:351
 AliITSQAChecker.cxx:352
 AliITSQAChecker.cxx:353
 AliITSQAChecker.cxx:354
 AliITSQAChecker.cxx:355
 AliITSQAChecker.cxx:356
 AliITSQAChecker.cxx:357
 AliITSQAChecker.cxx:358
 AliITSQAChecker.cxx:359
 AliITSQAChecker.cxx:360
 AliITSQAChecker.cxx:361
 AliITSQAChecker.cxx:362
 AliITSQAChecker.cxx:363
 AliITSQAChecker.cxx:364
 AliITSQAChecker.cxx:365
 AliITSQAChecker.cxx:366
 AliITSQAChecker.cxx:367
 AliITSQAChecker.cxx:368
 AliITSQAChecker.cxx:369
 AliITSQAChecker.cxx:370
 AliITSQAChecker.cxx:371
 AliITSQAChecker.cxx:372
 AliITSQAChecker.cxx:373
 AliITSQAChecker.cxx:374
 AliITSQAChecker.cxx:375
 AliITSQAChecker.cxx:376
 AliITSQAChecker.cxx:377
 AliITSQAChecker.cxx:378
 AliITSQAChecker.cxx:379
 AliITSQAChecker.cxx:380
 AliITSQAChecker.cxx:381
 AliITSQAChecker.cxx:382
 AliITSQAChecker.cxx:383
 AliITSQAChecker.cxx:384
 AliITSQAChecker.cxx:385
 AliITSQAChecker.cxx:386
 AliITSQAChecker.cxx:387
 AliITSQAChecker.cxx:388
 AliITSQAChecker.cxx:389
 AliITSQAChecker.cxx:390
 AliITSQAChecker.cxx:391
 AliITSQAChecker.cxx:392
 AliITSQAChecker.cxx:393
 AliITSQAChecker.cxx:394
 AliITSQAChecker.cxx:395
 AliITSQAChecker.cxx:396
 AliITSQAChecker.cxx:397
 AliITSQAChecker.cxx:398
 AliITSQAChecker.cxx:399
 AliITSQAChecker.cxx:400
 AliITSQAChecker.cxx:401
 AliITSQAChecker.cxx:402
 AliITSQAChecker.cxx:403
 AliITSQAChecker.cxx:404
 AliITSQAChecker.cxx:405
 AliITSQAChecker.cxx:406
 AliITSQAChecker.cxx:407
 AliITSQAChecker.cxx:408
 AliITSQAChecker.cxx:409
 AliITSQAChecker.cxx:410
 AliITSQAChecker.cxx:411
 AliITSQAChecker.cxx:412
 AliITSQAChecker.cxx:413
 AliITSQAChecker.cxx:414
 AliITSQAChecker.cxx:415
 AliITSQAChecker.cxx:416
 AliITSQAChecker.cxx:417
 AliITSQAChecker.cxx:418
 AliITSQAChecker.cxx:419
 AliITSQAChecker.cxx:420
 AliITSQAChecker.cxx:421
 AliITSQAChecker.cxx:422
 AliITSQAChecker.cxx:423
 AliITSQAChecker.cxx:424
 AliITSQAChecker.cxx:425
 AliITSQAChecker.cxx:426
 AliITSQAChecker.cxx:427
 AliITSQAChecker.cxx:428
 AliITSQAChecker.cxx:429
 AliITSQAChecker.cxx:430
 AliITSQAChecker.cxx:431
 AliITSQAChecker.cxx:432
 AliITSQAChecker.cxx:433
 AliITSQAChecker.cxx:434
 AliITSQAChecker.cxx:435
 AliITSQAChecker.cxx:436
 AliITSQAChecker.cxx:437
 AliITSQAChecker.cxx:438
 AliITSQAChecker.cxx:439
 AliITSQAChecker.cxx:440
 AliITSQAChecker.cxx:441
 AliITSQAChecker.cxx:442
 AliITSQAChecker.cxx:443
 AliITSQAChecker.cxx:444
 AliITSQAChecker.cxx:445
 AliITSQAChecker.cxx:446
 AliITSQAChecker.cxx:447
 AliITSQAChecker.cxx:448
 AliITSQAChecker.cxx:449
 AliITSQAChecker.cxx:450
 AliITSQAChecker.cxx:451
 AliITSQAChecker.cxx:452
 AliITSQAChecker.cxx:453
 AliITSQAChecker.cxx:454
 AliITSQAChecker.cxx:455
 AliITSQAChecker.cxx:456
 AliITSQAChecker.cxx:457
 AliITSQAChecker.cxx:458
 AliITSQAChecker.cxx:459
 AliITSQAChecker.cxx:460
 AliITSQAChecker.cxx:461
 AliITSQAChecker.cxx:462
 AliITSQAChecker.cxx:463
 AliITSQAChecker.cxx:464
 AliITSQAChecker.cxx:465
 AliITSQAChecker.cxx:466
 AliITSQAChecker.cxx:467
 AliITSQAChecker.cxx:468
 AliITSQAChecker.cxx:469
 AliITSQAChecker.cxx:470
 AliITSQAChecker.cxx:471
 AliITSQAChecker.cxx:472
 AliITSQAChecker.cxx:473
 AliITSQAChecker.cxx:474
 AliITSQAChecker.cxx:475
 AliITSQAChecker.cxx:476
 AliITSQAChecker.cxx:477
 AliITSQAChecker.cxx:478
 AliITSQAChecker.cxx:479
 AliITSQAChecker.cxx:480
 AliITSQAChecker.cxx:481
 AliITSQAChecker.cxx:482
 AliITSQAChecker.cxx:483
 AliITSQAChecker.cxx:484
 AliITSQAChecker.cxx:485
 AliITSQAChecker.cxx:486
 AliITSQAChecker.cxx:487
 AliITSQAChecker.cxx:488
 AliITSQAChecker.cxx:489
 AliITSQAChecker.cxx:490
 AliITSQAChecker.cxx:491
 AliITSQAChecker.cxx:492
 AliITSQAChecker.cxx:493
 AliITSQAChecker.cxx:494
 AliITSQAChecker.cxx:495
 AliITSQAChecker.cxx:496
 AliITSQAChecker.cxx:497