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
//  P. Cerello Apr 2008
//  INFN Torino

// --- ROOT system ---
#include "TH1.h"
#include "TH2F.h"
#include "TString.h"
#include "TList.h"
#include "TCanvas.h"
#include "TFrame.h"
#include "TStyle.h"
#include "TPaletteAxis.h"

// --- AliRoot header files ---
#include"AliQACheckerBase.h"
#include "AliITSQASPDChecker.h"
#include "AliITSQADataMakerRec.h"
#include "AliLog.h"

ClassImp(AliITSQASPDChecker)
 //__________________________________________________________________
 AliITSQASPDChecker::AliITSQASPDChecker() : 
  TObject(),
  fSubDetOffset(0), 
  fStepBitSPD(NULL),
  fLowSPDValue(NULL),
  fHighSPDValue(NULL),
  fImage(NULL) 
{
 // default contructor
}
//__________________________________________________________________
AliITSQASPDChecker& AliITSQASPDChecker::operator = (const AliITSQASPDChecker& qac ) 
{
 // Equal operator.
 this->~AliITSQASPDChecker();
 new(this) AliITSQASPDChecker(qac);
 return *this;
}
//__________________________________________________________________
AliITSQASPDChecker::~AliITSQASPDChecker() {
 // destructor
 if(fStepBitSPD) delete[] fStepBitSPD ;
 if(fLowSPDValue)delete[]fLowSPDValue;
 if(fHighSPDValue) delete[]fHighSPDValue;
 if(fImage) delete[]fImage;
} 

//__________________________________________________________________
Double_t AliITSQASPDChecker::Check(AliQAv1::ALITASK_t index, TObjArray * list, const AliDetectorRecoParam * /*recoParam*/)
{
 //
 // General methods for SPD Cheks to be used in RAWS and REC ALITASK_t
 //

 AliDebug(2, Form("AliITSQASPDChecker called with offset: %d\n", fSubDetOffset));

 Double_t test = 0.0;
 Int_t count = 0;
 // Checks for ALITASK_t AliQAv1::kRAW
 if(index == AliQAv1::kRAW) {
  return CheckRawData(list);
 } else {
  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) {
     TString histName = hdata->GetName();
     if (!histName.Contains("_SPD")) continue;
     Double_t rv = 0.;
     if (hdata->GetEntries()>0) rv = 1;
     if (histName.Contains("LayPattern")) {
      if (hdata->GetBinContent(1)) {
       Double_t ratio=hdata->GetBinContent(2)/hdata->GetBinContent(1);
       AliDebug(2, Form("%s: ratio RecPoints lay2 / lay1 = %f", hdata->GetName(), ratio));
      }
      else
       AliDebug(AliQAv1::GetQADebugLevel(), "No RecPoints in lay1");
     }
     else if(histName.Contains("ModPattern")) {
      Int_t ndead=0;
      for(Int_t ibin=0;ibin<hdata->GetNbinsX();ibin++) {
       if(histName.Contains("SPD1") && ibin<80 && hdata->GetBinContent(ibin+1)>0) ndead++;
       if(histName.Contains("SPD2") && ibin>79 && hdata->GetBinContent(ibin+1)>0) ndead++;
      }
      AliDebug(2, Form("%s: Entries = %d  number of empty modules = %d", 
	 hdata->GetName(),(Int_t)hdata->GetEntries(),ndead));
     }
     else if(histName.Contains("SizeYvsZ")) {
      Double_t meanz=hdata->GetMean(1);
      Double_t meany=hdata->GetMean(2);
      Double_t rmsz=hdata->GetRMS(1);
      Double_t rmsy=hdata->GetRMS(2);
      AliDebug(AliQAv1::GetQADebugLevel(), Form("%s: Cluster sizeY mean = %f  rms = %f", hdata->GetName(),meany,rmsy));
      AliDebug(AliQAv1::GetQADebugLevel(), Form("%s: Cluster sizeZ mean = %f  rms = %f", hdata->GetName(),meanz,rmsz));
     }
     else if(histName.Contains("SPDMultiplicity")) {
      AliDebug(2, Form("%s: Events = %d  mean = %f  rms = %f",
	 hdata->GetName(),(Int_t)hdata->GetEntries(),hdata->GetMean(),hdata->GetRMS()));}

     // else AliDebug(AliQAv1::GetQADebugLevel(), Form("%s -> %f", hdata->GetName(), rv));
     count++;
     test += rv;
    }
    else {
     AliError("Data type cannot be processed") ;
    }
   }

   if (count != 0) {
    if (AliITSQADataMakerRec::AreEqual(test,0)) {
     AliWarning("Histograms are there, but they are all empty: setting flag to kWARNING");
     test = fHighSPDValue[AliQAv1::kWARNING];  //upper limit value to set kWARNING flag for a task
    }
    else {
     test /= count;
    }
   }
  }
 }
 AliDebug(AliQAv1::GetQADebugLevel(), Form("Test Result = %f", test));
 return test ;

}
//__________________________________________________________________
Double_t AliITSQASPDChecker::CheckRawData(const TObjArray * list) {
 //
 // Checks on the raw data histograms [ preliminary version ]
 // The output of this method is the fraction of SPD histograms which are processed by the checker. 
 // The methods returns fHighSPDValue[AliQAv1::kFATAL] in case of data format errors or MEB errors
 // 
 // A. Mastroserio

 Double_t test =0;

 // basic checks on input data
 if(!list) {
  AliError("NO histogram list for RAWS");
  return test;
 }

 if(list->GetEntries() == 0) {
  AliWarning("No histograms in RAW list \n");
  return test;
 }

 // loop over the raw data histograms
 TIter next(list);
 TH1 * hdata;
 Double_t totalHistos = 0;
 Double_t goodHistos = 0; // number of histograms which passed the checks
 Double_t response =0;
 Bool_t fatalProblem = kFALSE;

 while ( (hdata = dynamic_cast<TH1 *>(next())) ) {
  if (hdata) {
   TString histName = hdata->GetName();
   if(!histName.Contains("SPD")) continue;
   totalHistos++;
   // data format error
   if(histName.Contains("SPDErrorsAll")){
    if(hdata->GetListOfFunctions()->GetEntries()<1) hdata->GetListOfFunctions()->Add(new TPaveText(0.2,0.23,0.7,0.5,"NDC"));

    for(Int_t i=0; i<hdata->GetListOfFunctions()->GetEntries(); i++){
     TString funcName = hdata->GetListOfFunctions()->At(i)->ClassName();
     if(funcName.Contains("TPaveText")){
      TPaveText *p = (TPaveText*)hdata->GetListOfFunctions()->At(i);
      p->Clear();

      if(hdata->Integral(0,hdata->GetNbinsX())>0){
       Bool_t isHighMult = kFALSE;
       Bool_t isDataCorrupted=kFALSE;
       for(Int_t ieq=0; ieq<20; ieq++){
	if(hdata->GetBinContent(ieq+1,17+1)>0 && hdata->GetBinContent(ieq+1,20+1)>0) isHighMult = kTRUE;
	for(Int_t iErr=1; iErr<20; iErr++){
	 if(iErr==20 || iErr==17) continue;
	 if(hdata->GetBinContent(ieq+1,iErr+1)>0) isDataCorrupted=kTRUE; 
	}
       }
       if(isHighMult && !isDataCorrupted) {
	p->SetFillColor(kOrange);
	p->AddText("High occupancy in a chip detected (-> errors type 17,20 and 0 are present). ");
	p->AddText("ONLY IF OTHER error types are present CALL the expert");
	response = fHighSPDValue[AliQAv1::kWARNING];
       } else if(isDataCorrupted) {
	p->SetFillColor(kRed);
	p->AddText("Data Format NOT OK. Please call the expert!");
	response = fHighSPDValue[AliQAv1::kFATAL];
	fatalProblem=kTRUE;
       }
       continue;
      } // if errors 
      else {
       p->Clear();
       p->SetFillColor(kGreen);
       p->AddText("OK");
      }
     } // TPaveText
    } // list entries   
   } // data format error

   // MEB error
   else if(histName.Contains("MEB")){
    if(hdata->GetListOfFunctions()->GetEntries()<1) hdata->GetListOfFunctions()->Add(new TPaveText(0.2,0.23,0.7,0.5,"NDC"));

    for(Int_t i=0; i<hdata->GetListOfFunctions()->GetEntries(); i++){
     TString funcName = hdata->GetListOfFunctions()->At(i)->ClassName();
     if(funcName.Contains("TPaveText")){
      TPaveText *p = (TPaveText*)hdata->GetListOfFunctions()->At(i);
      p->Clear();

      if(hdata->GetEntries()>0){
       p->SetFillColor(kRed);
       p->AddText("MEB problem could be present. Please check if SPD is in READY state.");
       p->AddText("If SPD is in -READY- state, please notify it to the expert."); 
       response = fHighSPDValue[AliQAv1::kFATAL];
       fatalProblem=kTRUE;
       continue;

      } else {
       p->SetFillColor(kGreen);
       p->AddText("OK");
      }   

     } // pave text
    } // list 
   }
   goodHistos++;
  }
 }
 if(!fatalProblem) response = goodHistos/totalHistos;
 // printf("n histos %f - good ones %f ----> ratio %f , fatal response %i\n",totalHistos,goodHistos,goodHistos/totalHistos,(Int_t)fatalProblem);
 return response;
}

//__________________________________________________________________
void AliITSQASPDChecker::SetTaskOffset(Int_t TaskOffset)
{
 // Offset for SPD within ITS QA
 fSubDetOffset = TaskOffset;
}

//__________________________________________________________________
void AliITSQASPDChecker::SetStepBit(const Double_t *steprange) 
{
 // Step bit for SPD within ITS QA
 fStepBitSPD = new Double_t[AliQAv1::kNBIT];
 for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
 {
  fStepBitSPD[bit]=steprange[bit];
 }
}


//__________________________________________________________________
void  AliITSQASPDChecker::SetSPDLimits(const Float_t *lowvalue, const Float_t * highvalue)
{
 // SPD limints for QA bit within general ITS QA
 fLowSPDValue = new Float_t[AliQAv1::kNBIT];
 fHighSPDValue= new Float_t[AliQAv1::kNBIT];

 for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
 {
  fLowSPDValue[bit]=lowvalue[bit];
  fHighSPDValue[bit]= highvalue[bit];
 }

}
//__________________________________________________________________
Bool_t  AliITSQASPDChecker::MakeSPDImage( TObjArray ** list, AliQAv1::TASKINDEX_t task, AliQAv1::MODE_t mode)
{
 //create the image for raws and recpoints. In the other case, the default methodof CheckerBase class will be used

 Bool_t val=kFALSE;

 fImage=(TCanvas**)AliQAChecker::Instance()->GetDetQAChecker(0)->GetImage();

 switch(task)
 {
  case AliQAv1::kRAWS:{
		       val = MakeSPDRawsImage(list, task,mode);
		      }
		      break;
  case AliQAv1::kRECPOINTS:;
  case AliQAv1::kHITS:; 
  case AliQAv1::kESDS:; 
  case AliQAv1::kDIGITS:;
  case AliQAv1::kDIGITSR:;
  case AliQAv1::kSDIGITS:;
  case AliQAv1::kTRACKSEGMENTS:;
  case AliQAv1::kRECPARTICLES:; 
  default:
			      {
			       //AliQAChecker::Instance()->GetDetQAChecker(0)->MakeImage(list,task,mode);
			       val = kFALSE;
			      }
			      break;
  case AliQAv1::kNULLTASKINDEX:; case  AliQAv1::kNTASKINDEX: 
			       {AliWarning(Form("No histograms for these tasks ( %s ) \n", AliQAv1::GetTaskName(task).Data())); val = kFALSE;}
			       break;
 }
 return val; 
}
//_______________________________________________________________________
Bool_t AliITSQASPDChecker::MakeSPDRawsImage(TObjArray ** list, AliQAv1::TASKINDEX_t task, AliQAv1::MODE_t mode )
{
 //
 // create layout of the histograms used in the DQM
 //

 // some style settings
 gStyle->SetOptStat(10);  
 for (Int_t esIndex = 0 ; esIndex < AliRecoParam::kNSpecies ; esIndex++) {
  //printf("-------------------------> %i \n", esIndex);
  if (! AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(esIndex)) || list[esIndex]->GetEntries() == 0) 
  {printf ("Nothing for %s \n", AliRecoParam::GetEventSpecieName(esIndex)); continue;}
  else{
   const Char_t * title = Form("QA_%s_%s_%s", GetName(), AliQAv1::GetTaskName(task).Data(), AliRecoParam::GetEventSpecieName(esIndex)) ; 
   if ( !fImage[esIndex] ) {
    fImage[esIndex] = new TCanvas(title, title,6000,3200) ;
   }

   fImage[esIndex]->Clear() ; 
   fImage[esIndex]->SetTitle(title) ; 
   fImage[esIndex]->cd();

   TPaveText someText(0.015, 0.015, 0.98, 0.98);
   someText.AddText(title);
   someText.Draw(); 
   fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ; 
   fImage[esIndex]->Clear() ; 
   Int_t nx =3; 
   Int_t ny =2; 

   fImage[esIndex]->Divide(nx, ny) ; 

   TH1* hist = NULL ;
   Int_t npad = 1 ; 
   fImage[esIndex]->cd(npad); 
   fImage[esIndex]->cd(npad)->SetBorderMode(0) ;

   TIter next(list[esIndex]);

   while ( (hist=static_cast<TH1*>(next())) ) {
    //gPad=fImage[esIndex]->cd(npad)->GetPad(npad);
    if(!hist->TestBit(AliQAv1::GetImageBit())) continue;
    TString name(hist->GetName());
    if(name.Contains("SPDErrorsAll")) {
     fImage[esIndex]->cd(1) ; 
     gPad->SetBorderMode(0) ;  
     gPad->SetRightMargin(0.05);
     gPad->SetLeftMargin(0.1);
     gPad->SetGridx();
     gPad->SetGridy();
     hist->SetOption("text") ;
     hist->DrawCopy();  
    }     
    if(name.Contains("MEB")) {
     fImage[esIndex]->cd(2) ; 
     gPad->SetBorderMode(0) ;  
     gPad->SetGridy();
     gPad->SetGridx();
     gPad->SetRightMargin(0.05);
     gPad->SetLeftMargin(0.15);
     gPad->SetBottomMargin(0.1);
     hist->SetOption("text") ;
     hist->DrawCopy();  
    }     
    if(name.Contains("SPDFastOrCorrelation")){
     fImage[esIndex]->cd(3) ; 
     gPad->SetBorderMode(0) ;  
     hist->SetOption("") ;
     hist->DrawCopy();               
    }

    if(name.Contains("SPDHitMapStaveChipInner")){
     fImage[esIndex]->cd(4) ; 
     gPad->SetBorderMode(0) ;  
     gPad->SetRightMargin(0.25);
     gPad->SetGridx();
     gPad->SetGridy();
     hist->SetObjectStat(0);
     hist->SetOption("colz") ;
     hist->DrawCopy();               
    }
    if(name.Contains("SPDHitMapStaveChipOuter")){
     fImage[esIndex]->cd(5) ; 
     gPad->SetBorderMode(0) ;  
     gPad->SetRightMargin(0.25);
     gPad->SetGridx();
     gPad->SetGridy();
     hist->SetObjectStat(0);
     hist->SetOption("colz") ;
     hist->DrawCopy();               
    }
    if(name.Contains("SPDFastOrMapStaveChip")){
     fImage[esIndex]->cd(6) ; 
     gPad->SetBorderMode(0) ;  
     gPad->SetRightMargin(0.1);
     gPad->SetLeftMargin(0.15);
     gPad->SetBottomMargin(0.15);
     gPad->SetTopMargin(-0.2);
     gPad->SetGridy();
     gPad->SetGridx();
     hist->SetObjectStat(0);
     hist->SetOption("colz") ;
     hist->DrawCopy("colz");   
     TH2F *h2 =  (TH2F*)(gPad->GetListOfPrimitives()->At(0)); 
     for(Int_t i=0; i<h2->GetListOfFunctions()->GetEntries(); i++){
       TString cname = h2->GetListOfFunctions()->At(i)->ClassName();
        if(cname.Contains("TPaletteAxis")){
        TPaletteAxis *palette = (TPaletteAxis*)(h2->GetListOfFunctions()->At(i));
        if(palette) palette->SetLabelSize(0.02);
       }
      }
     hist->DrawCopy("colz");   
     //gPad->Update();
    }


   }

   fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ; 
   //fImage[esIndex]->SaveAs("image.png");
  }
 }
 return kTRUE;
}


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