ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2007, 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 implemented a la AliMUONQAChecker.
  Checks the quality assurance by realzed checks on histogram content.
  P. Christiansen, Lund, September 2009.

  Based on AliPHOSQAChecker.
  Checks the quality assurance by comparing with reference data.
  P. Christiansen, Lund, January 2008.
*/

// --- ROOT header files ---
#include <TH1.h>

// --- AliRoot header files ---
#include "AliTPCQAChecker.h"
#include "AliTPCQADataMakerRec.h"

ClassImp(AliTPCQAChecker)


//__________________________________________________________________
AliTPCQAChecker& AliTPCQAChecker::operator = (const AliTPCQAChecker &checker)
{
  // Equal operator.
  this->~AliTPCQAChecker();
  new(this) AliTPCQAChecker(checker);
  return *this;  
}

//__________________________________________________________________
void
AliTPCQAChecker::Check(Double_t * rv, AliQAv1::ALITASK_t index, TObjArray ** list, 
		       const AliDetectorRecoParam * /*recoParam*/)
{
  /* It is important to understand the destinction between indexed tasks (AliQAv1::TASKINDEX_t) which are used in the DataMaker classes and indexed tasks (AliQAv1::ALITASK_t) whihc are used in the checker class.

     From the AliQAChecker::Run() methods we have:
     AliQAv1::kRAW
     - AliQAv1::kRAWS 
     
     AliQAv1::kSIM 
     - AliQAv1::kHITS
     - AliQAv1::kSDIGITS
     - AliQAv1::kDIGITS
     
     AliQAv1::kREC
     - AliQAv1::kDIGITSR 
     - AliQAv1::kRECPOINTS
     - AliQAv1::kTRACKSEGMENTS 
     - AliQAv1::kRECPARTICLES
     
     AliQAv1::kESD ; 
     -AliQAv1::kESDS

     This means that for each group of tasks the Check will be called
     one or more times.  This also mean that we cannot know what
     histograms will be or not be there in a single call... And we
     also do not know the position in the list of the histogram.
  */
  
  /// Check objects in list
  if(fDebug>0)
    AliInfo("In AliTPCQAChecker::Check");
  
  if (index!=AliQAv1::kRAW&&index!=AliQAv1::kSIM&&index!=AliQAv1::kREC&&index!=AliQAv1::kESD) {
    
    AliWarning(Form("Checker for task %d not implement for the moment",index));
    return;
  }
  
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
    rv[specie] = 1.0; // All is fine 
  
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
    
    if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) 
      continue ; 
    
    if (index == AliQAv1::kRAW)
      rv[specie] = CheckRAW(specie, list[specie]);
    if (index == AliQAv1::kSIM)
      rv[specie] = CheckSIM(specie, list[specie]);
    if (index == AliQAv1::kREC)
      rv[specie] = CheckREC(specie, list[specie]);
    if (index == AliQAv1::kESD)
      rv[specie] = CheckESD(specie, list[specie]);

    if(fDebug>3)
      AliInfo(Form("Specie: %s. Task: %s. Value: %f",  
		   AliRecoParam::GetEventSpecieName(specie),
		   AliQAv1::GetAliTaskName(index),
		   rv[specie]));
  }
}

//______________________________________________________________________________
Double_t AliTPCQAChecker::CheckRAW(Int_t specie, TObjArray* list)
{
  /// Check ESD
  if(fDebug>0)
    AliInfo("In AliTPCQAChecker::CheckRAW");
  
  if(fDebug>2)
    list->Print();

  TH1* hRawsOccupancyVsSector = static_cast<TH1*>
    (list->FindObject(Form("%s_hRawsOccupancyVsSector",AliRecoParam::GetEventSpecieName(specie))));
  TH1* hRawsQmaxVsSector = static_cast<TH1*>
    (list->FindObject(Form("%s_hRawsQmaxVsSector",AliRecoParam::GetEventSpecieName(specie))));
  
  if (!hRawsOccupancyVsSector || !hRawsQmaxVsSector)
    return -0.5; // fatal
  
  if(hRawsOccupancyVsSector->GetEntries()==0) {
    return 0.25; // error - No TPC data!
  }
  
  Int_t nBinsX = hRawsOccupancyVsSector->GetNbinsX();
  for(Int_t i = 1; i <= nBinsX; i++) {
    
    if(hRawsOccupancyVsSector->GetBinContent(i)==0)
      return 0.75; // warning - no TPC data for at least one sector
  }
  
  return 1.0; // ok
}

//______________________________________________________________________________
Double_t AliTPCQAChecker::CheckSIM(Int_t specie, TObjArray* list)
{
  // This method checks the QA histograms associated with simulation
  //
  // For TPC this is:
  // Digits : 
  // The digit histogram gives the ADC distribution for all sigbnals
  // above threshold. The check is just that there are digits.
  // Hits : The hit histograms are checked to see that they are not
  // empty. They contain a lot of detailed information on the
  // energyloss model (they were used to debug the AliRoot TPC use of
  // FLUKA).
  //
  // The check methods are simple:
  // We do not know if it is bad that histograms are missing because
  // this will always be the case for summable digits. So this check
  // is not possible here.
  // If digit histogram is empty (set error)
  // If one of the hit histograms are empty (set error)
  if(fDebug>0)
    AliInfo("In AliTPCQAChecker::CheckSIM");
  
  if(fDebug>2)
    list->Print();

  TH1* hDigits = static_cast<TH1*>
    (list->FindObject(Form("%s_hDigitsADC",AliRecoParam::GetEventSpecieName(specie))));
  TH1* hHitsNhits = static_cast<TH1*> 
    (list->FindObject(Form("%s_hHitsNhits",AliRecoParam::GetEventSpecieName(specie))));
  TH1* hHitsElectrons         = static_cast<TH1*> 
    (list->FindObject(Form("%s_hHitsElectrons",AliRecoParam::GetEventSpecieName(specie))));
  TH1* hHitsRadius        = static_cast<TH1*> 
    (list->FindObject(Form("%s_hHitsRadius",AliRecoParam::GetEventSpecieName(specie))));
  TH1* histHitsPrimPerCm          = static_cast<TH1*> 
    (list->FindObject(Form("%s_histHitsPrimPerCm",AliRecoParam::GetEventSpecieName(specie))));
  TH1* histHitsElectronsPerCm          = static_cast<TH1*> 
    (list->FindObject(Form("%s_histHitsElectronsPerCm",AliRecoParam::GetEventSpecieName(specie))));
  
//   if (!(hDigits) ||                                             // digit hists
//       !(hHitsNhits && hHitsElectrons && hHitsRadius && histHitsPrimPerCm && histHitsElectronsPerCm)) // hit hists
//     return -0.5; // fatal
  
  if (hDigits) {
    if(hDigits->GetEntries()==0) 
      return 0.25; // error
  }

  if (hHitsNhits && hHitsElectrons && hHitsRadius && 
      histHitsPrimPerCm && histHitsElectronsPerCm) {
    if (hHitsNhits->GetEntries()==0 || hHitsElectrons->GetEntries()==0 ||
	hHitsRadius->GetEntries()==0 || histHitsPrimPerCm->GetEntries()==0 ||
	histHitsElectronsPerCm->GetEntries()==0) 
      return 0.25; // error
  }

  return 1; // ok
}

//______________________________________________________________________________
Double_t AliTPCQAChecker::CheckREC(Int_t specie, TObjArray* list)
{
  // This method checks the QA histograms associated with reconstruction
  //
  // For TPC this is:
  // DigitsR : 
  // The digit histogram gives the ADC distribution for all sigbnals
  // above threshold. The check is just that there are digits.
  // RecPoints : 
  // The cluster histograms are meant to give an idea about the gain
  // from the cluster charge and to indicate iof there are rows with
  // noise clusters, i.e., they are very visual.
  //
  // The check methods are simple:
  // If there are no histogram at all (set fatal)
  // If digit histogram is there, but there are no digits (set error)
  // If cluster histogram is there but there are less than 1000 
  //    clusters (set warning)
  // If there are more than 1000 clusters but no clusters for either short, 
  // medium, or long pads (set error)
  if(fDebug>0)
    AliInfo("In AliTPCQAChecker::CheckREC");
  
  if(fDebug>2)
    list->Print();

  TH1* hDigits = static_cast<TH1*>
    (list->FindObject(Form("%s_hDigitsADC",AliRecoParam::GetEventSpecieName(specie))));
  TH1* hNclustersVsRow = static_cast<TH1*> 
    (list->FindObject(Form("%s_hRecPointsRow",AliRecoParam::GetEventSpecieName(specie))));
  TH1* hQshort         = static_cast<TH1*> 
    (list->FindObject(Form("%s_hRecPointsQShort",AliRecoParam::GetEventSpecieName(specie))));
  TH1* hQmedium        = static_cast<TH1*> 
    (list->FindObject(Form("%s_hRecPointsQMedium",AliRecoParam::GetEventSpecieName(specie))));
  TH1* hQlong          = static_cast<TH1*> 
    (list->FindObject(Form("%s_hRecPointsQLong",AliRecoParam::GetEventSpecieName(specie))));
  // The Qmax histograms are for now ignored

  if (!hDigits &&                                             // digits missing
      (!hNclustersVsRow || !hQshort || !hQmedium || !hQlong)) // 1 recpoint hist missing
    return -0.5; // fatal

  if (hDigits && hDigits->GetEntries()==0) 
    return 0.25; // error
  
  if (hNclustersVsRow && hNclustersVsRow->GetEntries() < 1000) {
    return 0.75; // warning
  } else { 
    if (!hQshort || !hQlong || !hQlong)
      return -0.5;// fatal - they should be there if the cluster vs row hist is there
    if (hQshort->GetEntries()==0 || hQmedium->GetEntries()==0 ||
	hQlong->GetEntries()==0) 
      return 0.25; // error
  }
  return 1; // ok
}

//______________________________________________________________________________
Double_t AliTPCQAChecker::CheckESD(Int_t specie, TObjArray* list)
{
  // This method checks the QA histograms associated with ESDs
  // (Note that there is aslo a globalQA which is running on all
  //  the ESD information so for now this is just a few basic
  //  histograms)
  //
  // The check methods are simple:
  // If there are no histogram at all (set fatal)
  // 
  if(fDebug>0)
    AliInfo("In AliTPCQAChecker::CheckESD");

  if(fDebug>2)
    list->Print();

  TH1* hESDclusters = static_cast<TH1*>
    (list->FindObject(Form("%s_hESDclusters",AliRecoParam::GetEventSpecieName(specie))));
  TH1* hESDratio = static_cast<TH1*>
    (list->FindObject(Form("%s_hESDratio",AliRecoParam::GetEventSpecieName(specie))));
  TH1* hESDpt = static_cast<TH1*>
    (list->FindObject(Form("%s_hESDpt",AliRecoParam::GetEventSpecieName(specie))));
  
  if (!hESDclusters || !hESDratio || !hESDpt) 
    return -0.5; // fatal

  return 1.0; // ok
}

//______________________________________________________________________________
void AliTPCQAChecker::Init(const AliQAv1::DETECTORINDEX_t det) 
{
  /// intialises QA and QA checker settings
  if(fDebug>0)
    AliInfo("In AliTPCQAChecker::Init");
  AliQAv1::Instance(det) ; 
  Float_t hiValue[AliQAv1::kNBIT] ; 
  Float_t lowValue[AliQAv1::kNBIT] ;
  hiValue[AliQAv1::kINFO]       = 1.00; 
  lowValue[AliQAv1::kINFO]      = 0.99; 
  hiValue[AliQAv1::kWARNING]    = 0.99; 
  lowValue[AliQAv1::kWARNING]   = 0.50; 
  hiValue[AliQAv1::kERROR]      = 0.50; 
  lowValue[AliQAv1::kERROR]     = 0.00; 
  hiValue[AliQAv1::kFATAL]      = 0.00; 
  lowValue[AliQAv1::kFATAL]     =-1.00; 
  //  SetHiLo(&hiValue[0], &lowValue[0]) ; 
  SetHiLo(hiValue, lowValue) ; 
}

//______________________________________________________________________________
void 
AliTPCQAChecker::SetQA(AliQAv1::ALITASK_t index, Double_t * value) const
{
  /// sets the QA according the return value of the Check

  if(fDebug>0)
    AliInfo("In AliTPCQAChecker::SetQA");

  AliQAv1 * qa = AliQAv1::Instance(index);
  
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {

    if (value==NULL) { // No checker is implemented, set all QA to Fatal
      
      if(fDebug>1)
	AliInfo(Form("Fatal QA. Task: %s. Specie: %s", 
		     AliQAv1::GetAliTaskName(index), 
		     AliRecoParam::GetEventSpecieName(specie)));
      qa->Set(AliQAv1::kFATAL, specie) ; 
    } else {
      
      if ( value[specie] >= fLowTestValue[AliQAv1::kFATAL] && 
	   value[specie] < fUpTestValue[AliQAv1::kFATAL] ) {
	
	if(fDebug>1)
	  AliInfo(Form("QA-Fatal. Task: %s. Specie: %s", 
		       AliQAv1::GetAliTaskName(index), 
		       AliRecoParam::GetEventSpecieName(specie)));
        qa->Set(AliQAv1::kFATAL, specie) ; 
      } else if ( value[specie] > fLowTestValue[AliQAv1::kERROR] && 
		  value[specie] <= fUpTestValue[AliQAv1::kERROR]  ) {
	
	if(fDebug>1)
	  AliInfo(Form("QA-Error. Task: %s. Specie: %s", 
		       AliQAv1::GetAliTaskName(index), 
		       AliRecoParam::GetEventSpecieName(specie)));
        qa->Set(AliQAv1::kERROR, specie) ; 
      } else if (value[specie] > fLowTestValue[AliQAv1::kWARNING] && 
		 value[specie] <= fUpTestValue[AliQAv1::kWARNING]) {
	
	if(fDebug>1)
	  AliInfo(Form("QA-Warning. Task: %s. Specie: %s", 
		       AliQAv1::GetAliTaskName(index), 
		       AliRecoParam::GetEventSpecieName(specie)));
	qa->Set(AliQAv1::kWARNING, specie) ;
      } else if (value[specie] > fLowTestValue[AliQAv1::kINFO] && 
		 value[specie] <= fUpTestValue[AliQAv1::kINFO] ) { 
	
	if(fDebug>1)
	  AliInfo(Form("QA-Info. Task: %s. Specie: %s", 
		       AliQAv1::GetAliTaskName(index), 
		       AliRecoParam::GetEventSpecieName(specie)));
	qa->Set(AliQAv1::kINFO, specie) ; 	
      }
    }
  }
}
 AliTPCQAChecker.cxx:1
 AliTPCQAChecker.cxx:2
 AliTPCQAChecker.cxx:3
 AliTPCQAChecker.cxx:4
 AliTPCQAChecker.cxx:5
 AliTPCQAChecker.cxx:6
 AliTPCQAChecker.cxx:7
 AliTPCQAChecker.cxx:8
 AliTPCQAChecker.cxx:9
 AliTPCQAChecker.cxx:10
 AliTPCQAChecker.cxx:11
 AliTPCQAChecker.cxx:12
 AliTPCQAChecker.cxx:13
 AliTPCQAChecker.cxx:14
 AliTPCQAChecker.cxx:15
 AliTPCQAChecker.cxx:16
 AliTPCQAChecker.cxx:17
 AliTPCQAChecker.cxx:18
 AliTPCQAChecker.cxx:19
 AliTPCQAChecker.cxx:20
 AliTPCQAChecker.cxx:21
 AliTPCQAChecker.cxx:22
 AliTPCQAChecker.cxx:23
 AliTPCQAChecker.cxx:24
 AliTPCQAChecker.cxx:25
 AliTPCQAChecker.cxx:26
 AliTPCQAChecker.cxx:27
 AliTPCQAChecker.cxx:28
 AliTPCQAChecker.cxx:29
 AliTPCQAChecker.cxx:30
 AliTPCQAChecker.cxx:31
 AliTPCQAChecker.cxx:32
 AliTPCQAChecker.cxx:33
 AliTPCQAChecker.cxx:34
 AliTPCQAChecker.cxx:35
 AliTPCQAChecker.cxx:36
 AliTPCQAChecker.cxx:37
 AliTPCQAChecker.cxx:38
 AliTPCQAChecker.cxx:39
 AliTPCQAChecker.cxx:40
 AliTPCQAChecker.cxx:41
 AliTPCQAChecker.cxx:42
 AliTPCQAChecker.cxx:43
 AliTPCQAChecker.cxx:44
 AliTPCQAChecker.cxx:45
 AliTPCQAChecker.cxx:46
 AliTPCQAChecker.cxx:47
 AliTPCQAChecker.cxx:48
 AliTPCQAChecker.cxx:49
 AliTPCQAChecker.cxx:50
 AliTPCQAChecker.cxx:51
 AliTPCQAChecker.cxx:52
 AliTPCQAChecker.cxx:53
 AliTPCQAChecker.cxx:54
 AliTPCQAChecker.cxx:55
 AliTPCQAChecker.cxx:56
 AliTPCQAChecker.cxx:57
 AliTPCQAChecker.cxx:58
 AliTPCQAChecker.cxx:59
 AliTPCQAChecker.cxx:60
 AliTPCQAChecker.cxx:61
 AliTPCQAChecker.cxx:62
 AliTPCQAChecker.cxx:63
 AliTPCQAChecker.cxx:64
 AliTPCQAChecker.cxx:65
 AliTPCQAChecker.cxx:66
 AliTPCQAChecker.cxx:67
 AliTPCQAChecker.cxx:68
 AliTPCQAChecker.cxx:69
 AliTPCQAChecker.cxx:70
 AliTPCQAChecker.cxx:71
 AliTPCQAChecker.cxx:72
 AliTPCQAChecker.cxx:73
 AliTPCQAChecker.cxx:74
 AliTPCQAChecker.cxx:75
 AliTPCQAChecker.cxx:76
 AliTPCQAChecker.cxx:77
 AliTPCQAChecker.cxx:78
 AliTPCQAChecker.cxx:79
 AliTPCQAChecker.cxx:80
 AliTPCQAChecker.cxx:81
 AliTPCQAChecker.cxx:82
 AliTPCQAChecker.cxx:83
 AliTPCQAChecker.cxx:84
 AliTPCQAChecker.cxx:85
 AliTPCQAChecker.cxx:86
 AliTPCQAChecker.cxx:87
 AliTPCQAChecker.cxx:88
 AliTPCQAChecker.cxx:89
 AliTPCQAChecker.cxx:90
 AliTPCQAChecker.cxx:91
 AliTPCQAChecker.cxx:92
 AliTPCQAChecker.cxx:93
 AliTPCQAChecker.cxx:94
 AliTPCQAChecker.cxx:95
 AliTPCQAChecker.cxx:96
 AliTPCQAChecker.cxx:97
 AliTPCQAChecker.cxx:98
 AliTPCQAChecker.cxx:99
 AliTPCQAChecker.cxx:100
 AliTPCQAChecker.cxx:101
 AliTPCQAChecker.cxx:102
 AliTPCQAChecker.cxx:103
 AliTPCQAChecker.cxx:104
 AliTPCQAChecker.cxx:105
 AliTPCQAChecker.cxx:106
 AliTPCQAChecker.cxx:107
 AliTPCQAChecker.cxx:108
 AliTPCQAChecker.cxx:109
 AliTPCQAChecker.cxx:110
 AliTPCQAChecker.cxx:111
 AliTPCQAChecker.cxx:112
 AliTPCQAChecker.cxx:113
 AliTPCQAChecker.cxx:114
 AliTPCQAChecker.cxx:115
 AliTPCQAChecker.cxx:116
 AliTPCQAChecker.cxx:117
 AliTPCQAChecker.cxx:118
 AliTPCQAChecker.cxx:119
 AliTPCQAChecker.cxx:120
 AliTPCQAChecker.cxx:121
 AliTPCQAChecker.cxx:122
 AliTPCQAChecker.cxx:123
 AliTPCQAChecker.cxx:124
 AliTPCQAChecker.cxx:125
 AliTPCQAChecker.cxx:126
 AliTPCQAChecker.cxx:127
 AliTPCQAChecker.cxx:128
 AliTPCQAChecker.cxx:129
 AliTPCQAChecker.cxx:130
 AliTPCQAChecker.cxx:131
 AliTPCQAChecker.cxx:132
 AliTPCQAChecker.cxx:133
 AliTPCQAChecker.cxx:134
 AliTPCQAChecker.cxx:135
 AliTPCQAChecker.cxx:136
 AliTPCQAChecker.cxx:137
 AliTPCQAChecker.cxx:138
 AliTPCQAChecker.cxx:139
 AliTPCQAChecker.cxx:140
 AliTPCQAChecker.cxx:141
 AliTPCQAChecker.cxx:142
 AliTPCQAChecker.cxx:143
 AliTPCQAChecker.cxx:144
 AliTPCQAChecker.cxx:145
 AliTPCQAChecker.cxx:146
 AliTPCQAChecker.cxx:147
 AliTPCQAChecker.cxx:148
 AliTPCQAChecker.cxx:149
 AliTPCQAChecker.cxx:150
 AliTPCQAChecker.cxx:151
 AliTPCQAChecker.cxx:152
 AliTPCQAChecker.cxx:153
 AliTPCQAChecker.cxx:154
 AliTPCQAChecker.cxx:155
 AliTPCQAChecker.cxx:156
 AliTPCQAChecker.cxx:157
 AliTPCQAChecker.cxx:158
 AliTPCQAChecker.cxx:159
 AliTPCQAChecker.cxx:160
 AliTPCQAChecker.cxx:161
 AliTPCQAChecker.cxx:162
 AliTPCQAChecker.cxx:163
 AliTPCQAChecker.cxx:164
 AliTPCQAChecker.cxx:165
 AliTPCQAChecker.cxx:166
 AliTPCQAChecker.cxx:167
 AliTPCQAChecker.cxx:168
 AliTPCQAChecker.cxx:169
 AliTPCQAChecker.cxx:170
 AliTPCQAChecker.cxx:171
 AliTPCQAChecker.cxx:172
 AliTPCQAChecker.cxx:173
 AliTPCQAChecker.cxx:174
 AliTPCQAChecker.cxx:175
 AliTPCQAChecker.cxx:176
 AliTPCQAChecker.cxx:177
 AliTPCQAChecker.cxx:178
 AliTPCQAChecker.cxx:179
 AliTPCQAChecker.cxx:180
 AliTPCQAChecker.cxx:181
 AliTPCQAChecker.cxx:182
 AliTPCQAChecker.cxx:183
 AliTPCQAChecker.cxx:184
 AliTPCQAChecker.cxx:185
 AliTPCQAChecker.cxx:186
 AliTPCQAChecker.cxx:187
 AliTPCQAChecker.cxx:188
 AliTPCQAChecker.cxx:189
 AliTPCQAChecker.cxx:190
 AliTPCQAChecker.cxx:191
 AliTPCQAChecker.cxx:192
 AliTPCQAChecker.cxx:193
 AliTPCQAChecker.cxx:194
 AliTPCQAChecker.cxx:195
 AliTPCQAChecker.cxx:196
 AliTPCQAChecker.cxx:197
 AliTPCQAChecker.cxx:198
 AliTPCQAChecker.cxx:199
 AliTPCQAChecker.cxx:200
 AliTPCQAChecker.cxx:201
 AliTPCQAChecker.cxx:202
 AliTPCQAChecker.cxx:203
 AliTPCQAChecker.cxx:204
 AliTPCQAChecker.cxx:205
 AliTPCQAChecker.cxx:206
 AliTPCQAChecker.cxx:207
 AliTPCQAChecker.cxx:208
 AliTPCQAChecker.cxx:209
 AliTPCQAChecker.cxx:210
 AliTPCQAChecker.cxx:211
 AliTPCQAChecker.cxx:212
 AliTPCQAChecker.cxx:213
 AliTPCQAChecker.cxx:214
 AliTPCQAChecker.cxx:215
 AliTPCQAChecker.cxx:216
 AliTPCQAChecker.cxx:217
 AliTPCQAChecker.cxx:218
 AliTPCQAChecker.cxx:219
 AliTPCQAChecker.cxx:220
 AliTPCQAChecker.cxx:221
 AliTPCQAChecker.cxx:222
 AliTPCQAChecker.cxx:223
 AliTPCQAChecker.cxx:224
 AliTPCQAChecker.cxx:225
 AliTPCQAChecker.cxx:226
 AliTPCQAChecker.cxx:227
 AliTPCQAChecker.cxx:228
 AliTPCQAChecker.cxx:229
 AliTPCQAChecker.cxx:230
 AliTPCQAChecker.cxx:231
 AliTPCQAChecker.cxx:232
 AliTPCQAChecker.cxx:233
 AliTPCQAChecker.cxx:234
 AliTPCQAChecker.cxx:235
 AliTPCQAChecker.cxx:236
 AliTPCQAChecker.cxx:237
 AliTPCQAChecker.cxx:238
 AliTPCQAChecker.cxx:239
 AliTPCQAChecker.cxx:240
 AliTPCQAChecker.cxx:241
 AliTPCQAChecker.cxx:242
 AliTPCQAChecker.cxx:243
 AliTPCQAChecker.cxx:244
 AliTPCQAChecker.cxx:245
 AliTPCQAChecker.cxx:246
 AliTPCQAChecker.cxx:247
 AliTPCQAChecker.cxx:248
 AliTPCQAChecker.cxx:249
 AliTPCQAChecker.cxx:250
 AliTPCQAChecker.cxx:251
 AliTPCQAChecker.cxx:252
 AliTPCQAChecker.cxx:253
 AliTPCQAChecker.cxx:254
 AliTPCQAChecker.cxx:255
 AliTPCQAChecker.cxx:256
 AliTPCQAChecker.cxx:257
 AliTPCQAChecker.cxx:258
 AliTPCQAChecker.cxx:259
 AliTPCQAChecker.cxx:260
 AliTPCQAChecker.cxx:261
 AliTPCQAChecker.cxx:262
 AliTPCQAChecker.cxx:263
 AliTPCQAChecker.cxx:264
 AliTPCQAChecker.cxx:265
 AliTPCQAChecker.cxx:266
 AliTPCQAChecker.cxx:267
 AliTPCQAChecker.cxx:268
 AliTPCQAChecker.cxx:269
 AliTPCQAChecker.cxx:270
 AliTPCQAChecker.cxx:271
 AliTPCQAChecker.cxx:272
 AliTPCQAChecker.cxx:273
 AliTPCQAChecker.cxx:274
 AliTPCQAChecker.cxx:275
 AliTPCQAChecker.cxx:276
 AliTPCQAChecker.cxx:277
 AliTPCQAChecker.cxx:278
 AliTPCQAChecker.cxx:279
 AliTPCQAChecker.cxx:280
 AliTPCQAChecker.cxx:281
 AliTPCQAChecker.cxx:282
 AliTPCQAChecker.cxx:283
 AliTPCQAChecker.cxx:284
 AliTPCQAChecker.cxx:285
 AliTPCQAChecker.cxx:286
 AliTPCQAChecker.cxx:287
 AliTPCQAChecker.cxx:288
 AliTPCQAChecker.cxx:289
 AliTPCQAChecker.cxx:290
 AliTPCQAChecker.cxx:291
 AliTPCQAChecker.cxx:292
 AliTPCQAChecker.cxx:293
 AliTPCQAChecker.cxx:294
 AliTPCQAChecker.cxx:295
 AliTPCQAChecker.cxx:296
 AliTPCQAChecker.cxx:297
 AliTPCQAChecker.cxx:298
 AliTPCQAChecker.cxx:299
 AliTPCQAChecker.cxx:300
 AliTPCQAChecker.cxx:301
 AliTPCQAChecker.cxx:302
 AliTPCQAChecker.cxx:303
 AliTPCQAChecker.cxx:304
 AliTPCQAChecker.cxx:305
 AliTPCQAChecker.cxx:306
 AliTPCQAChecker.cxx:307
 AliTPCQAChecker.cxx:308
 AliTPCQAChecker.cxx:309
 AliTPCQAChecker.cxx:310
 AliTPCQAChecker.cxx:311
 AliTPCQAChecker.cxx:312
 AliTPCQAChecker.cxx:313
 AliTPCQAChecker.cxx:314
 AliTPCQAChecker.cxx:315
 AliTPCQAChecker.cxx:316
 AliTPCQAChecker.cxx:317
 AliTPCQAChecker.cxx:318
 AliTPCQAChecker.cxx:319
 AliTPCQAChecker.cxx:320
 AliTPCQAChecker.cxx:321
 AliTPCQAChecker.cxx:322
 AliTPCQAChecker.cxx:323
 AliTPCQAChecker.cxx:324
 AliTPCQAChecker.cxx:325
 AliTPCQAChecker.cxx:326
 AliTPCQAChecker.cxx:327
 AliTPCQAChecker.cxx:328
 AliTPCQAChecker.cxx:329
 AliTPCQAChecker.cxx:330
 AliTPCQAChecker.cxx:331
 AliTPCQAChecker.cxx:332
 AliTPCQAChecker.cxx:333
 AliTPCQAChecker.cxx:334
 AliTPCQAChecker.cxx:335
 AliTPCQAChecker.cxx:336
 AliTPCQAChecker.cxx:337
 AliTPCQAChecker.cxx:338
 AliTPCQAChecker.cxx:339
 AliTPCQAChecker.cxx:340
 AliTPCQAChecker.cxx:341
 AliTPCQAChecker.cxx:342
 AliTPCQAChecker.cxx:343
 AliTPCQAChecker.cxx:344
 AliTPCQAChecker.cxx:345
 AliTPCQAChecker.cxx:346
 AliTPCQAChecker.cxx:347
 AliTPCQAChecker.cxx:348
 AliTPCQAChecker.cxx:349
 AliTPCQAChecker.cxx:350
 AliTPCQAChecker.cxx:351
 AliTPCQAChecker.cxx:352
 AliTPCQAChecker.cxx:353
 AliTPCQAChecker.cxx:354
 AliTPCQAChecker.cxx:355
 AliTPCQAChecker.cxx:356
 AliTPCQAChecker.cxx:357
 AliTPCQAChecker.cxx:358
 AliTPCQAChecker.cxx:359
 AliTPCQAChecker.cxx:360
 AliTPCQAChecker.cxx:361
 AliTPCQAChecker.cxx:362
 AliTPCQAChecker.cxx:363
 AliTPCQAChecker.cxx:364
 AliTPCQAChecker.cxx:365
 AliTPCQAChecker.cxx:366
 AliTPCQAChecker.cxx:367
 AliTPCQAChecker.cxx:368
 AliTPCQAChecker.cxx:369
 AliTPCQAChecker.cxx:370