ROOT logo
/**************************************************************************
 * Copyright(c) 2004, 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.                  *
 **************************************************************************/
//__________________________________________________________________
//
// Yves?
// What 
// is 
// this 
// class 
// supposed 
// to
// do?
//__________________________________________________________________
//
// --- ROOT system ---
#include <TClass.h>
#include <TH1F.h> 
#include <TF1.h> 
#include <TH2.h> 
#include <TH1I.h> 
#include <TIterator.h> 
#include <TKey.h> 
#include <TFile.h> 
#include <iostream>
#include <TCanvas.h>
#include <TStyle.h>
#include <TLatex.h>
#include <TFitResult.h>
#include <TParameter.h>
#include <TMacro.h>
#include <TPaveText.h>
#include <TVirtualFitter.h>

// --- AliRoot header files ---
#include "AliLog.h"
#include "AliQAv1.h"
#include "AliQAChecker.h"
#include "AliFMDQAChecker.h"
#include "AliFMDQADataMakerRec.h"
#include "AliRecoParam.h"
#include <AliCDBManager.h>
#include <AliCDBEntry.h>
#include <AliCDBId.h>
#include <AliQAThresholds.h>

ClassImp(AliFMDQAChecker)
#if 0
; // This is for Emacs! - do not delete
#endif

namespace {
  void addFitsMacro(TList* l) {
    TMacro* m = new TMacro("fits");
    m->AddLine("void fits() {");
    m->AddLine("  if (!gPad) { Printf(\"No gPad\"); return; }");
    m->AddLine("  TList* lp = gPad->GetListOfPrimitives();");
    m->AddLine("  if (!lp) return;");
    m->AddLine("  TObject* po = 0;");
    m->AddLine("  TIter next(lp);");
    m->AddLine("  while ((po = next())) {");
    m->AddLine("    if (!po->IsA()->InheritsFrom(TH1::Class())) continue;");
    m->AddLine("    TH1*   htmp = dynamic_cast<TH1*>(po);");
    m->AddLine("    TList* lf   = htmp->GetListOfFunctions();");
    m->AddLine("    TObject* pso = (lf ? lf->FindObject(\"stats\") : 0);");
    m->AddLine("    if (!pso) continue;");
    m->AddLine("    TPaveStats* ps = static_cast<TPaveStats*>(pso);");
    m->AddLine("    ps->SetOptFit(111);");
    m->AddLine("    UShort_t qual = htmp->GetUniqueID();");
    m->AddLine("    ps->SetFillColor(qual >= 3 ? kRed-4 : qual >= 2 ? kOrange-4 : qual >= 1 ? kYellow-4 : kGreen-4);");
    // m->AddLine("    lf->Remove(lf->FindObject(\"fits\"));");
    // m->AddLine("    ps->Paint();");
    m->AddLine("    break;");
    m->AddLine("  }");
    // m->AddLine("  gPad->Modified(); gPad->Update(); gPad->cd();");
    m->AddLine("}");

    TObject* old = l->FindObject(m->GetName());
    if (old) l->Remove(old);
    l->Add(m);
  }
  
  const Double_t kROErrorsLabelY    = .30;
  
  const Int_t    kConvolutionSteps  = 100;
  const Double_t kConvolutionNSigma = 5;

  // 
  // The shift of the most probable value for the ROOT function TMath::Landau 
  //
  const Double_t  kMpShift  = -0.22278298;
  // 
  // Integration normalisation 
  //
  const Double_t  kInvSq2Pi = 1. / TMath::Sqrt(2*TMath::Pi());

  Double_t landau(Double_t x, Double_t delta, Double_t xi)
  {
    // 
    // Calculate the shifted Landau
    // @f[
    //    f'_{L}(x;\Delta,\xi) = f_L(x;\Delta+0.22278298\xi)
    // @f]
    //
    // where @f$ f_{L}@f$ is the ROOT implementation of the Landau
    // distribution (known to have @f$ \Delta_{p}=-0.22278298@f$ for
    // @f$\Delta=0,\xi=1@f$.
    // 
    // Parameters:
    //    x      Where to evaluate @f$ f'_{L}@f$ 
    //    delta  Most probable value 
    //    xi     The 'width' of the distribution 
    //
    // Return:
    //    @f$ f'_{L}(x;\Delta,\xi) @f$
    //
    return TMath::Landau(x, delta - xi * kMpShift, xi);
  }
  Double_t landauGaus(Double_t x, Double_t delta, Double_t xi,
		      Double_t sigma, Double_t sigmaN)
  {
    // 
    // Calculate the value of a Landau convolved with a Gaussian 
    // 
    // @f[ 
    // f(x;\Delta,\xi,\sigma') = \frac{1}{\sigma' \sqrt{2 \pi}}
    //    \int_{-\infty}^{+\infty} d\Delta' f'_{L}(x;\Delta',\xi)
    //    \exp{-\frac{(\Delta-\Delta')^2}{2\sigma'^2}}
    // @f]
    // 
    // where @f$ f'_{L}@f$ is the Landau distribution, @f$ \Delta@f$
    // the energy loss, @f$ \xi@f$ the width of the Landau, and @f$
    // \sigma'^2=\sigma^2-\sigma_n^2 @f$.  Here, @f$\sigma@f$ is the
    // variance of the Gaussian, and @f$\sigma_n@f$ is a parameter
    // modelling noise in the detector.
    //
    // Note that this function uses the constants kConvolutionSteps and
    // kConvolutionNSigma
    // 
    // References: 
    //  - <a href="http://dx.doi.org/10.1016/0168-583X(84)90472-5">Nucl.Instrum.Meth.B1:16</a>
    //  - <a href="http://dx.doi.org/10.1103/PhysRevA.28.615">Phys.Rev.A28:615</a>
    //  - <a href="http://root.cern.ch/root/htmldoc/tutorials/fit/langaus.C.html">ROOT implementation</a>
    // 
    // Parameters:
    //    x         where to evaluate @f$ f@f$
    //    delta     @f$ \Delta@f$ of @f$ f(x;\Delta,\xi,\sigma')@f$
    //    xi        @f$ \xi@f$ of @f$ f(x;\Delta,\xi,\sigma')@f$
    //    sigma     @f$ \sigma@f$ of @f$\sigma'^2=\sigma^2-\sigma_n^2 @f$
    //    sigma_n   @f$ \sigma_n@f$ of @f$\sigma'^2=\sigma^2-\sigma_n^2 @f$
    // 
    // Return:
    //    @f$ f@f$ evaluated at @f$ x@f$.  
    //
    Double_t deltap = delta - xi * kMpShift;
    Double_t sigma2 = sigmaN*sigmaN + sigma*sigma;
    Double_t sigma1 = sigmaN == 0 ? sigma : TMath::Sqrt(sigma2);
    Double_t xlow   = x - kConvolutionNSigma * sigma1;
    Double_t xhigh  = x + kConvolutionNSigma * sigma1;
    Double_t step   = (xhigh - xlow) / kConvolutionSteps;
    Double_t sum    = 0;
  
    for (Int_t i = 0; i <= kConvolutionSteps/2; i++) { 
      Double_t x1 = xlow  + (i - .5) * step;
      Double_t x2 = xhigh - (i - .5) * step;
    
      sum += TMath::Landau(x1, deltap, xi, kTRUE) * TMath::Gaus(x, x1, sigma1);
      sum += TMath::Landau(x2, deltap, xi, kTRUE) * TMath::Gaus(x, x2, sigma1);
    }
    return step * sum * kInvSq2Pi / sigma1;
  }

  // 
  // Utility function to use in TF1 defintition 
  //
  Double_t landauGaus1(Double_t* xp, Double_t* pp) 
  {
    Double_t x        = xp[0];
    Double_t constant = pp[0];
    Double_t delta    = pp[1];
    Double_t xi       = pp[2];
    Double_t sigma    = pp[3];
    Double_t sigmaN   = pp[4];

    return constant * landauGaus(x, delta, xi, sigma, sigmaN);
  }

  //____________________________________________________________________
  TF1* makeLandauGaus(const char* , 
		      Double_t  c=1, 
		      Double_t  delta=.5,  Double_t xi=0.07, 
		      Double_t  sigma=.1,  Double_t sigmaN=-1, 
		      Double_t  xmin=0,    Double_t xmax=15)
  {
    // 
    // Generate a TF1 object of @f$ f_I@f$ 
    // 
    // Parameters:
    //    c        Constant
    //    delta    @f$ \Delta@f$ 
    //    xi       @f$ \xi_1@f$	       
    //    sigma    @f$ \sigma_1@f$ 	       
    //    sigma_n  @f$ \sigma_n@f$ 	       
    //    xmin     Least value of range
    //    xmax     Largest value of range
    // 
    // Return:
    //    Newly allocated TF1 object
    //
    Int_t npar     = 5;
    TF1*  func     = new TF1("landauGaus", 
			     &landauGaus1,xmin,xmax,npar);
    // func->SetLineStyle(((i-2) % 10)+2); // start at dashed
    func->SetLineColor(kBlack); 
    func->SetLineWidth(2);
    func->SetNpx(500);
    func->SetParNames("C","#Delta_{p}","#xi", "#sigma", "#sigma_{n}");

    // Set the initial parameters from the seed fit 
    func->SetParameter(0,      c);       
    func->SetParameter(1,  delta);   
    func->SetParameter(2,     xi);      
    func->SetParameter(3,  sigma);   
    func->SetParameter(4, sigmaN); 

    func->SetParLimits(1, 0,    xmax);
    func->SetParLimits(2, 0,    xmax);
    func->SetParLimits(3, 0.01, 1);
    
    if (sigmaN < 0) func->FixParameter(4, 0);
    else            func->SetParLimits(4, 0, xmax);

    return func;
  }
}
  
//__________________________________________________________________
AliFMDQAChecker::AliFMDQAChecker() 
  : AliQACheckerBase("FMD","FMD Quality Assurance Checker") ,
    fDoScale(false),
    fDidExternal(false), 
    fShowFitResults(true),
    fELossLowCut(0.2), 
    fELossNRMS(3), 
    fELossBadChi2Nu(10), 
    fELossFkupChi2Nu(100), 
    fELossMinEntries(1000),
    fELossMaxEntries(-1),
    fELossGoodParError(0.1),
    fELossMinSharing(0.1),
    fROErrorsBad(0.3), 
    fROErrorsFkup(0.5),
    fMaxNProblem(10),
    fMaxNBad(10),
    fNoFits(false)
{
}          

//__________________________________________________________________
void
AliFMDQAChecker::ProcessExternalParams()
{
  ProcessExternalParam("ELossLowCut",		fELossLowCut);
  ProcessExternalParam("ELossNRMS",		fELossNRMS);
  ProcessExternalParam("ELossBadChi2Nu",	fELossBadChi2Nu);
  ProcessExternalParam("ELossFkupChi2Nu",	fELossFkupChi2Nu);
  ProcessExternalParam("ELossGoodParError",	fELossGoodParError);
  ProcessExternalParam("ROErrorsBad",		fROErrorsBad);
  ProcessExternalParam("ROErrorsFkup",		fROErrorsFkup);
  ProcessExternalParam("ELossMinSharing",       fELossMinSharing);
  Double_t tmp = 0;
  ProcessExternalParam("CommonScale", tmp);
  fDoScale = tmp > 0; tmp = fELossMinEntries;
  ProcessExternalParam("ELossMinEntries", tmp);
  fELossMinEntries = tmp; tmp = fELossMaxEntries;
  ProcessExternalParam("ELossMaxEntries", tmp);
  fELossMaxEntries = tmp; tmp = fMaxNProblem;
  ProcessExternalParam("MaxNProblem", tmp);
  fMaxNProblem = tmp; tmp = 0;
  fELossMaxEntries = tmp; tmp = fMaxNBad;
  ProcessExternalParam("MaxNBad", tmp);
  fMaxNBad = tmp; tmp = 0;
  ProcessExternalParam("NoFits", tmp);
  fNoFits = tmp > 0; tmp = 0;

  GetThresholds();

  fDidExternal = true;
}
//__________________________________________________________________
void
AliFMDQAChecker::ProcessExternalParam(const char* name, Double_t& v)
{
  TObject* o = fExternParamList->FindObject(name);
  if (!o) return; 
  TParameter<double>* p = static_cast<TParameter<double>*>(o);
  v = p->GetVal();
  AliDebugF(3, "External parameter: %-20s=%lf", name, v);
}

//__________________________________________________________________
void
AliFMDQAChecker::GetThresholds()
{
  const char*    path   = "GRP/Calib/QAThresholds";
  AliCDBManager* cdbMan = AliCDBManager::Instance();
  AliCDBEntry*   cdbEnt = cdbMan->Get(path);
  if (!cdbEnt) { 
    AliWarningF("Failed to get CDB entry at %s", path);
    return;
  }
  
  TObjArray*     cdbObj = static_cast<TObjArray*>(cdbEnt->GetObject());
  if (!cdbObj) { 
    AliWarningF("Failed to get CDB object at %s", path);
    return;
  }
  
  TObject*       fmdObj = cdbObj->FindObject("FMD");
  if (!fmdObj) { 
    AliWarningF("Failed to get FMD object at from CDB %s", path);
    return;
  }
  
  AliQAThresholds* qaThr = static_cast<AliQAThresholds*>(fmdObj);
  Int_t nThr = qaThr->GetSize();
  for (Int_t i = 0; i < nThr; i++) { 
    TObject* thr = qaThr->GetThreshold(i);
    if (!thr) continue; 

    TParameter<double>* d = dynamic_cast<TParameter<double>*>(thr);
    if (!d) { 
      AliWarningF("Parameter %s not of type double", thr->GetName());
      continue;
    }
    Double_t val = d->GetVal();
    TString  name(thr->GetName());
    if      (name.EqualTo("ELossBadChi2Nu"))     fELossBadChi2Nu    = val;
    else if (name.EqualTo("ELossFkupChi2Nu"))    fELossFkupChi2Nu   = val;
    else if (name.EqualTo("ELossGoodParError"))  fELossGoodParError = val;
    else if (name.EqualTo("ROErrorsBad"))        fROErrorsBad       = val;
    else if (name.EqualTo("ROErrorsFkup"))       fROErrorsFkup      = val;    
    else if (name.EqualTo("MaxNProblem"))        fMaxNProblem       = val;
    else if (name.EqualTo("MaxNBad"))            fMaxNBad           = val;
    AliDebugF(3, "Threshold %s=%f", name.Data(), val);
  }
}

//__________________________________________________________________
AliQAv1::QABIT_t
AliFMDQAChecker::Quality2Bit(UShort_t value) const
{
  AliQAv1::QABIT_t  ret   = AliQAv1::kINFO; // Assume success 
  if      (value >= kWhatTheFk) ret = AliQAv1::kFATAL;
  else if (value >= kBad)       ret = AliQAv1::kERROR;
  else if (value >= kProblem)   ret = AliQAv1::kWARNING;
  
  return ret;
}

//__________________________________________________________________
void
AliFMDQAChecker::SetQA(AliQAv1::ALITASK_t index, Double_t* values) const
{
  AliQAv1 * qa = AliQAv1::Instance(index) ;

  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
    // Check if specie is defined 
    if (!qa->IsEventSpecieSet(AliRecoParam::ConvertIndex(specie)))
      continue ;
    
    // No checker is implemented, set all QA to Fatal
    if (!values) { 
      qa->Set(AliQAv1::kFATAL, specie) ; 
      continue;
    }
    
    UShort_t          value = values[specie];
    AliQAv1::QABIT_t  ret   = Quality2Bit(value);
    
    qa->Set(ret, AliRecoParam::ConvertIndex(specie));
    AliDebugF(3, "Quality of %s: %d -> %d", 
	      AliRecoParam::GetEventSpecieName(specie), value, ret);
  }
}

//__________________________________________________________________
UShort_t
AliFMDQAChecker::BasicCheck(TH1* hist) const
{
  if (hist->GetEntries() <= 0) return kOK;
  return (hist->GetMean() > 0 ? kOK : kProblem);
}

//__________________________________________________________________
UShort_t
AliFMDQAChecker::CheckOne(AliQAv1::ALITASK_t          what,
			  AliRecoParam::EventSpecie_t specie, 
			  TH1*                        hist) const
{
  if(what == AliQAv1::kESD) return CheckESD(specie, hist);
  if(what == AliQAv1::kRAW) return CheckRaw(specie, hist);
  if(what == AliQAv1::kSIM) return CheckSim(specie, hist);
  if(what == AliQAv1::kREC) return CheckRec(specie, hist);
  return 0;
}
//__________________________________________________________________
UShort_t 
AliFMDQAChecker::CheckESD(AliRecoParam::EventSpecie_t /* specie*/, 
			  TH1*                        hist) const
{
  return BasicCheck(hist);
}
namespace {
  Double_t Chi2Scale(TH1* h, Double_t base=10000) 
  {
    return 1. / TMath::Max(1., h->GetEntries() / base);
  }
  void AddLine(TObjArray* lines, 
	       Double_t x1, Double_t x2, Double_t x3, 
	       Double_t y, Double_t dy,
	       const char* name, Double_t val, Double_t lim, 
	       Bool_t ok, Int_t color)
  {
    TString n; n.Form("%s:", name);
    TLatex* ltx = new TLatex(x1, y, n);
    ltx->SetNDC(true);
    ltx->SetTextSize(dy-0.01);
    ltx->SetTextColor(color);
    lines->Add(ltx);
    
    n.Form("%7.3f", val);
    ltx = new TLatex(x2, y, n);
    ltx->SetNDC(true);
    ltx->SetTextSize(dy-0.01);
    ltx->SetTextColor(color);
    lines->Add(ltx);
    
    if (lim < 0) n = "(ignored)";
    else  n.Form("%c %4.2f", ok ? '<' : '>', lim);
    ltx = new TLatex(x3, y, n);
    ltx->SetNDC(true);
    ltx->SetTextSize(dy-0.01);
    ltx->SetTextColor(color);
    lines->Add(ltx);
  }
}

//__________________________________________________________________
UShort_t
AliFMDQAChecker::CheckFit(TH1* hist, const TFitResultPtr& res, 
			  Double_t low, Double_t high, Int_t& color) const
{
  color = kGreen+4;

  // Check if there's indeed a result - if not, flag as OK
  if (!res.Get()) return 0;

  UShort_t   ret   = 0;
  Int_t      nPar  = res->NPar();
  Double_t   dy    = .06;
  Double_t   x     = .2;
  Double_t   x2    = .3;
  Double_t   x3    = .4;
  Double_t   y     = .9-dy;
  Double_t   chi2  = res->Chi2();
  Int_t      nu    = res->Ndf();
  Double_t   s     = Chi2Scale(hist,fELossMinEntries);
  Double_t   red   = (nu == 0 ? fELossFkupChi2Nu : chi2 / nu);
  TObjArray* lines = 0;
  // TLatex*    lRed  = 0;
  TLatex*    ltx   = 0;
  Int_t      chi2Check = 0;
  Double_t   chi2Lim   = fELossBadChi2Nu;
  if (AliDebugLevel() > 0) 
    printf("FIT: %s, 1, %d, %f, %f\n", hist->GetName(),
	    Int_t(hist->GetEntries()), red, s * red);
  red *= s;
  if (red > fELossBadChi2Nu) { // || res->Prob() < .01) { 
    // AliWarningF("Fit gave chi^2/nu=%f/%d=%f>%f (%f)", 
    //             res->Chi2(), res->Ndf(), red, fELossBadChi2Nu, 
    //             fELossFkupChi2Nu);
    // res->Print();
    chi2Check++;
    if (red > fELossFkupChi2Nu) { 
      chi2Check++;
      chi2Lim = fELossFkupChi2Nu;
    }
  }
  ret += chi2Check;

  if (fShowFitResults) { 
    lines = new TObjArray(nPar+3);
    lines->SetName("lines");
    lines->SetOwner(true);

    AddLine(lines, x, x2, x3, y, dy, "#chi^{2}/#nu", red, chi2Lim,
	    chi2Check < 1, chi2Check < 1 ? color : 
	    chi2Check < 2 ? kOrange+2 : kRed+2);
    
    Double_t x1 = .85;
    Double_t y1 = .5;

    // y1 -= dy;
    ltx = new TLatex(x1, y1, Form("Fit range: [%6.2f,%6.2f]", low, high));
    ltx->SetTextColor(kGray+3);
    ltx->SetTextSize(dy-.01);
    ltx->SetTextAlign(31);
    ltx->SetNDC(true);
    lines->Add(ltx);

    y1 -= dy;
    ltx = new TLatex(x1, y1, Form("Entries: %d (%d)", 
				  Int_t(hist->GetEffectiveEntries()),
				  fELossMaxEntries));
    ltx->SetTextColor(kGray+3);
    ltx->SetTextSize(dy-.01);
    ltx->SetTextAlign(31);
    ltx->SetNDC(true);
    lines->Add(ltx);

    y1 -= dy;
    ltx = new TLatex(x1, y1, Form("%s: %f #pm %f", 
				  res->ParName(1).c_str(),
				  res->Parameter(1),
				  res->ParError(1)));
    ltx->SetTextColor(kGray+3);
    ltx->SetTextSize(dy-.01);
    ltx->SetTextAlign(31);
    ltx->SetNDC(true);
    lines->Add(ltx);
  }
  
  // Now check the relative error on the fit parameters 
  Int_t parsOk = 0;
  for (Int_t i = 0; i < nPar; i++) { 
    if (res->IsParameterFixed(i)) continue; 
    Double_t thr = fELossGoodParError;
    Double_t pv  = res->Parameter(i);
    Double_t pe  = res->ParError(i);
    Double_t rel = (pv == 0 ? 100 : pe / pv);
    Bool_t   ok  = (i == 3) || (rel < thr);
    if (lines) {
      y -= dy;
      AddLine(lines, x, x2, x3, y, dy,Form("#delta%s/%s", 
					   res->ParName(i).c_str(),
					   res->ParName(i).c_str()),
	      rel, (i == 3 ? -1 : thr), ok, ok ? color : kOrange+2);
    }
    if (i == 3) continue; // Skip sigma 
    if (ok) parsOk++;
  }
  if (parsOk > 0) 
    ret = TMath::Max(ret-(parsOk-1),0);
  if (ret > 1) color = kRed+2;
  if (ret > 0) color = kOrange+2;

  if (lines) {
    TList*   lf  = hist->GetListOfFunctions();
    TObject* old = lf->FindObject(lines->GetName());
    if (old) {
      lf->Remove(old);
      delete old;
    }
    lf->Add(lines);
  }
  hist->SetStats(false);
    
  return ret;
}

//__________________________________________________________________
UShort_t
AliFMDQAChecker::CheckRaw(AliRecoParam::EventSpecie_t specie, 
			  TH1*                        hist) const
{
  Int_t ret = BasicCheck(hist);
  TString name(hist->GetName());
  if (name.Contains("readouterrors", TString::kIgnoreCase)) { 
    // Check the mean number of errors per event 
    TH2*  roErrors = static_cast<TH2*>(hist);
    Int_t nY       = roErrors->GetNbinsY();

    TLatex* ltx = new TLatex(.15, .9, Form("Thresholds: %5.2f,%5.2f",
					   fROErrorsBad, fROErrorsFkup));
    ltx->SetName("thresholds");
    ltx->SetTextColor(kGray+3);
    ltx->SetNDC();

    TList* ll = hist->GetListOfFunctions(); 
    TObject* old = ll->FindObject(ltx->GetName());
    if (old) { 
      ll->Remove(old);
      delete old;
    }
    ll->Add(ltx);
    
    for (Int_t i = 1; i <= 3; i++) {
      Double_t sum = 0;
      Int_t    cnt = 0;
      for (Int_t j = 1; j <= nY; j++) {
	Int_t n =  roErrors->GetBinContent(i, j);
	sum     += n * roErrors->GetYaxis()->GetBinCenter(j);
	cnt     += n;
      }
      Double_t mean = (cnt <= 0 ? 0 : sum / cnt);
      Double_t x    = ((i-.5) * (1-0.1-0.1) / 3 + 0.1);
      
      ltx = new TLatex(x, kROErrorsLabelY, Form("Mean: %6.3f", mean));
      ltx->SetName(Form("FMD%d", i));
      ltx->SetNDC();
      ltx->SetTextAngle(90);
      ltx->SetTextColor(kGreen+4);
      old = ll->FindObject(ltx->GetName());
      if (old) { 
	ll->Remove(old);
	delete old;
      }
      ll->Add(ltx);

      if (mean > fROErrorsBad) { 
	AliWarningF("Mean of readout errors for FMD%d = %f > %f (%f)", 
		    i, mean, fROErrorsBad, fROErrorsFkup);
	ret++;
	ltx->SetTextColor(kOrange+2);
	if (mean > fROErrorsFkup) {
	  ret++;
	  ltx->SetTextColor(kRed+2);
	}
      }
    }
  }
  else if (name.Contains("eloss",TString::kIgnoreCase)) { 
    // If we' asked to not fit the data, return immediately
    if (fNoFits) return ret;
    // Do not fit cosmic or calibration data 
    if (specie == AliRecoParam::kCosmic || 
	specie == AliRecoParam::kCalib) return ret;
    // Do not fit `expert' histograms 
    if (hist->TestBit(AliQAv1::GetExpertBit())) return ret;
    // Do not fit histograms with too little data 
    if (hist->GetEntries() < fELossMinEntries) return ret;

    // Try to fit a function to the histogram 
    Double_t xMin  = hist->GetXaxis()->GetXmin();
    Double_t xMax  = hist->GetXaxis()->GetXmax();

    hist->GetXaxis()->SetRangeUser(fELossLowCut, xMax);
    Int_t    bMaxY = hist->GetMaximumBin();
    Double_t xMaxY = hist->GetXaxis()->GetBinCenter(bMaxY);
    Double_t rms   = hist->GetRMS();
    Double_t low   = hist->GetXaxis()->GetBinCenter(bMaxY-4);
    hist->GetXaxis()->SetRangeUser(0.2, xMaxY+(fELossNRMS+1)*rms);
    rms  = hist->GetRMS();
    hist->GetXaxis()->SetRange(0,-1);
    TF1*          func = makeLandauGaus(name);
    func->SetParameter(1, xMaxY);
    func->SetLineColor(kGreen+4);
    // func->SetLineStyle(2);
    Double_t high = xMax; // xMaxY+fELossNRMS*rms;
    if (fELossNRMS > 0) high = xMaxY+fELossNRMS*rms;
    
    // Check we don't have an empty fit range 
    if (low >= high) return ret;

    // Check that we have enough counts in the fit range 
    Int_t bLow  = hist->FindBin(low);
    Int_t bHigh = hist->FindBin(high);
    if (bLow >= bHigh || hist->Integral(bLow, bHigh) < fELossMinEntries)
      return ret;

    // Set our fit function 
    TString fitOpt("QS");
    TFitResultPtr res   = hist->Fit(func, fitOpt, "", low, high);
    Int_t         color = func->GetLineColor();
    UShort_t      qual  = CheckFit(hist, res, low, high, color);

    // Make sure we save the function in the full range of the histogram
    func = hist->GetFunction("landauGaus");
    if (fELossNRMS <= 0) func->SetRange(xMin, xMax);
    // func->SetParent(hist);
    func->Save(xMin, xMax, 0, 0, 0, 0);
    func->SetLineColor(color);

    fitOpt.Append("+");
    res = hist->Fit("pol2", fitOpt, "", fELossMinSharing, low-0.05);
    func = hist->GetFunction("pol2");
    Double_t   s     = Chi2Scale(hist,fELossMinEntries*100);
    Double_t   chi2  = (!res.Get() ? 0 : res->Chi2());
    Int_t      nu    = (!res.Get() ? 1 : res->Ndf());
    Double_t   red   = s * (nu == 0 ? fELossFkupChi2Nu : chi2 / nu);
    if (AliDebugLevel()) 
      printf("FIT: %s, 2, %d, %f, %f\n", hist->GetName(),
	     Int_t(hist->GetEntries()), red, s * red);
    red *= s;
    if (red > fELossFkupChi2Nu) func->SetLineColor(kRed);
    else                        func->SetLineColor(kGreen+4);

    // Now check if this histogram should be cleared or not 
    if (fELossMaxEntries > 0 && hist->GetEntries() > fELossMaxEntries)
      hist->SetBit(AliFMDQADataMakerRec::kResetBit);
    if (qual > 0) { 
      func->SetLineWidth(3);
      func->SetLineStyle(1);
      if (qual > 1) 
	func->SetLineWidth(4);
    }
    ret += qual;
  }

  return ret;
}
//__________________________________________________________________
UShort_t
AliFMDQAChecker::CheckSim(AliRecoParam::EventSpecie_t /* specie*/, 
			  TH1*                        hist) const
{
  // 
  // Check simulated hits 
  // 
  return BasicCheck(hist);
}
//__________________________________________________________________
UShort_t
AliFMDQAChecker::CheckRec(AliRecoParam::EventSpecie_t /* specie*/, 
			  TH1*                        hist) const
{
  // 
  // Check reconstructed data 
  // 
  return BasicCheck(hist);
}

//__________________________________________________________________
void AliFMDQAChecker::AddStatusPave(TH1* hist, Int_t qual, 
				    Double_t xl, Double_t yl, 
				    Double_t xh, Double_t yh) const
{
  //
  // Add a status pave to a plot
  // 
  if (xh < 0) xh = gStyle->GetStatX();
  if (xl < 0) xl = xh - gStyle->GetStatW(); 
  if (yh < 0) yh = gStyle->GetStatY();
  if (yl < 0) yl = xl - gStyle->GetStatH(); 
  
  TPaveText* text = new TPaveText(xl, yl, xh, yh, "brNDC");
  Int_t   bg  = kGreen-10;
  Int_t   fg  = kBlack;
  TString msg = "OK";
  if      (qual >= kWhatTheFk) { bg = kRed+1; fg = kWhite; msg = "Argh!"; }
  else if (qual >= kBad)       { bg = kRed-3; fg = kWhite; msg = "Bad"; }
  else if (qual >= kProblem)   { bg = kOrange-4; msg = "Warning"; }
  text->AddText(msg);
  text->SetTextFont(62);
  text->SetTextColor(fg);
  text->SetFillColor(bg);

  TList*   ll  = hist->GetListOfFunctions();
  TObject* old = ll->FindObject(text->GetName());
  if (old) { 
    ll->Remove(old);
    delete old;
  }
  ll->Add(text);
}

//__________________________________________________________________
void AliFMDQAChecker::Check(Double_t*                   rv, 
			    AliQAv1::ALITASK_t          what, 
			    TObjArray**                 list, 
			    const AliDetectorRecoParam* /*t*/) 
{
  // 
  // Member function called to do the actual checking
  //
  // Parameters: 
  //    rv   Array of return values. 
  //    what What to check 
  //    list Array of arrays of histograms.  There's one arrat for
  //         each 'specie'
  //    t    Reconstruction parameters - not used. 
  //
  // The bounds defined for RV are 
  // 
  //   FATAL:      [-1,   0.0]
  //   ERROR:      (0.0,  0.002]
  //   WARNING:    (0.002,0.5]
  //   INFO:       (0.5,  1.0]
  //
  // Double_t* rv = new Double_t[AliRecoParam::kNSpecies] ; 

  if (!fDidExternal) ProcessExternalParams();

  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
    // Int_t count   = 0;
    rv[specie]    = 0.; 

    if (!AliQAv1::Instance()->IsEventSpecieSet(specie) ) 
      continue ;
    
    if(!list[specie]) continue;
    
    TH1*     hist  = 0;
    Int_t    nHist = list[specie]->GetEntriesFast();

    // Find the status histogram if any 
    TH2*  status  = 0;
    Int_t istatus = AliFMDQADataMakerRec::GetHalfringIndex(4, 'i', 0, 0);
    if (istatus < nHist) 
      status = dynamic_cast<TH2*>(list[specie]->At(istatus));
      
    UShort_t ret   = 0;
    for(Int_t i= 0; i< nHist; i++) {
      if (!(hist = static_cast<TH1*>(list[specie]->At(i)))) continue;
      if (hist == status) continue;
      
      Int_t qual = CheckOne(what, AliRecoParam::ConvertIndex(specie), hist);
      hist->SetUniqueID(Quality2Bit(qual));
      hist->SetStats(0);
      AddStatusPave(hist, qual);
      ret += qual;

      if (!status) continue;

      // Parse out the detector and ring, calculate the bin, and fill
      // status histogram.
      TString nme(hist->GetName());
      Char_t cD   = nme[nme.Length()-2];
      Char_t cR   = nme[nme.Length()-1];
      Int_t  xbin = 0;
      switch (cD) { 
      case '1': xbin = 1; break;
      case '2': xbin = 2 + ((cR == 'i' || cR == 'I') ? 0 : 1); break;
      case '3': xbin = 4 + ((cR == 'i' || cR == 'I') ? 0 : 1); break;
      }
      if (xbin == 0) continue;
      status->Fill(xbin, qual);
		   
    } // for (int i ...)
    rv[specie] = ret;
    // if      (ret > kWhatTheFk) rv[specie] = fLowTestValue[AliQAv1::kFATAL];
    // else if (ret > kBad)       rv[specie] = fUpTestValue[AliQAv1::kERROR]; 
    // else if (ret > kProblem)   rv[specie] = fUpTestValue[AliQAv1::kWARNING]; 
    // else                       rv[specie] = fUpTestValue[AliQAv1::kINFO]; 
    AliDebugF(3, "Combined sum is %d -> %f", ret, rv[specie]);

    if (status) { 
      Int_t nProblem = 0;
      Int_t nBad     = 0;
      for (Int_t i = 1; i < status->GetXaxis()->GetNbins(); i++) { 
	nProblem += status->GetBinContent(i, 3);
	nBad     += status->GetBinContent(i, 4);
      }
      Int_t qual = 0;
      if (nProblem > fMaxNProblem) qual++;
      if (nBad     > fMaxNBad)     qual += 2;
      status->SetUniqueID(Quality2Bit(qual));
      AddStatusPave(status, qual);
    }
    // if (count != 0) rv[specie] /= count;
  }
  // return rv;
}

namespace {
  Int_t CheckForLog(TAxis*       axis,
		    TVirtualPad* pad, 
		    Int_t        xyz)
  {
    Int_t ret = 0;
    TString t(axis->GetTitle());
    if (!t.Contains("[log]", TString::kIgnoreCase)) return 0;
    t.ReplaceAll("[log]", "");
    switch (xyz) { 
    case 1: pad->SetLogx(); ret |= 0x1; break;
    case 2: pad->SetLogy(); ret |= 0x2; break;
    case 3: pad->SetLogz(); ret |= 0x4; break;
    }
    axis->SetTitle(t);
    return ret;
  }
  void RestoreLog(TAxis* axis, Bool_t log) 
  {
    if (!log) return;
    TString t(axis->GetTitle());
    t.Append("[log]");
    axis->SetTitle(t);
  }
}

namespace {
  void FindMinMax(TH1* h, Double_t& min, Double_t& max)
  {
    Double_t tmin = 1e9;
    Double_t tmax = 0;
    for (Int_t i = 1; i <= h->GetNbinsX(); i++) { 
      Double_t c = h->GetBinContent(i);
      if (c < 1e-8) continue;
      tmin = TMath::Min(tmin, c);
      tmax = TMath::Max(tmax, c);
    }
    min = tmin;
    max = tmax;
  }
}

namespace { 
  Int_t GetHalfringPad(TH1* h) {
    TString nme(h->GetName());
    Char_t cD   = nme[nme.Length()-2];
    Char_t cR   = nme[nme.Length()-1];
    Int_t  xbin = 0;
    switch (cD) { 
    case '1': xbin = 1; break;
    case '2': xbin = ((cR == 'i' || cR == 'I') ? 2 : 5); break;
    case '3': xbin = ((cR == 'i' || cR == 'I') ? 3 : 6); break;
    }
    return xbin;
  }
}

//____________________________________________________________________________ 
void 
AliFMDQAChecker::MakeImage(TObjArray** list, 
			   AliQAv1::TASKINDEX_t task, 
			   AliQAv1::MODE_t mode) 
{
  // makes the QA image for sim and rec
  // 
  // Parameters: 
  //    task What to check 
  //    list Array of arrays of histograms.  There's one array for
  //         each 'specie'
  //    t    Reconstruction parameters - not used. 
  // 
  Int_t    nImages = 0 ;
  Double_t max     = 0;
  Double_t min     = 10000;

  // Loop over all species 
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
    AliRecoParam::EventSpecie_t spe = AliRecoParam::ConvertIndex(specie);
    if (!AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))
	->IsEventSpecieSet(spe)) 
      continue;
									
    // If nothing is defined for this specie, go on. 
    if(!list[specie] || list[specie]->GetEntriesFast() == 0) continue;

    // Loop over the histograms and figure out how many histograms we
    // have and the min/max 
    TH1* hist  = 0;
    Int_t nHist = list[specie]->GetEntriesFast();
    for(Int_t i= 0; i< nHist; i++) {
      hist = static_cast<TH1F*>(list[specie]->At(i));
      if (hist && hist->TestBit(AliQAv1::GetImageBit())) {
        nImages++; 
	TString name(hist->GetName());
	if (name.Contains("readouterrors", TString::kIgnoreCase) || 
	    name.Contains("status", TString::kIgnoreCase)) continue;

	// Double_t hMax = hist->GetMaximum(); 
	// hist->GetBinContent(hist->GetMaximumBin());
	// Double_t hMin = hist->GetMinimum();
	// hist->GetBinContent(hist->GetMinimumBin());
	Double_t hMax, hMin;
	FindMinMax(hist, hMin, hMax);
	max = TMath::Max(max, hMax);
	min = TMath::Min(min, hMin);
	// AliInfoF("Min/max of %40s: %f/%f, global -> %f/%f", 
	//          hist->GetName(), hMin, hMax, min, max);
      }
    }
    break ; 
  }
  // AliInfoF("Global min/max=%f/%f", min, max);
  min = TMath::Max(1e-1, min);
  max = TMath::Max(1e5,  max);

  // IF no images, go on. 
  if (nImages == 0) {
    AliDebug(AliQAv1::GetQADebugLevel(), 
	     Form("No histogram will be plotted for %s %s\n", GetName(), 
		  AliQAv1::GetTaskName(task).Data()));
    return;
  }

  AliDebug(AliQAv1::GetQADebugLevel(), 
	   Form("%d histograms will be plotted for %s %s\n", 
		nImages, GetName(), AliQAv1::GetTaskName(task).Data()));  
  gStyle->SetOptStat(0);
  
  // Again loop over species and draw a canvas 
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
    if (!AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))
	->IsEventSpecieSet(specie)) continue;

    // if Nothing here, go on
    if(!list[specie] || list[specie]->GetEntries() <= 0 || 
       nImages <= 0) continue;

   // Form the title 
    const Char_t * title = Form("QA_%s_%s_%s", GetName(), 
				AliQAv1::GetTaskName(task).Data(), 
				AliRecoParam::GetEventSpecieName(specie)); 
    if (!fImage[specie]) fImage[specie] = new TCanvas(title, title) ;
    fImage[specie]->Clear() ; 
    fImage[specie]->SetTitle(title) ; 
    fImage[specie]->cd() ; 

    // Put something in the canvas - even if empty 
    TPaveText someText(0.015, 0.015, 0.98, 0.98) ;
    someText.AddText(title) ;
    someText.SetFillColor(0);
    someText.SetFillStyle(0);
    someText.SetBorderSize(0);
    someText.SetTextColor(kRed+1);
    someText.Draw() ; 
    TString outName(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), 
			 AliQAv1::GetModeName(mode), 
			 AliQAChecker::Instance()->GetRunNumber(), 
			 AliQAv1::GetImageFileFormat()));
    fImage[specie]->Print(outName, "ps") ; 

    // Now set some parameters on the canvas 
    fImage[specie]->Clear(); 
    fImage[specie]->SetTopMargin(0.10);
    fImage[specie]->SetBottomMargin(0.15);
    fImage[specie]->SetLeftMargin(0.15);
    fImage[specie]->SetRightMargin(0.05);
    
    // Put title on top 
    const char* topT = Form("Mode: %s, Task: %s, Specie: %s, Run: %d",
			    AliQAv1::GetModeName(mode), 
			    AliQAv1::GetTaskName(task).Data(), 
			    AliRecoParam::GetEventSpecieName(specie),
			    AliQAChecker::Instance()->GetRunNumber());
    TLatex* topText = new TLatex(.5, .99, topT);
    topText->SetTextAlign(23);
    topText->SetTextSize(.038);
    topText->SetTextFont(42);
    topText->SetTextColor(kBlue+3);
    topText->SetNDC();
    topText->Draw();

    // Find the status histogram if any 
    TH2*  status  = 0;
    Int_t istatus = AliFMDQADataMakerRec::GetHalfringIndex(4, 'i', 0, 0);
    if (istatus < list[specie]->GetEntriesFast()) 
      status = dynamic_cast<TH2*>(list[specie]->At(istatus));

    // Divide canvas 
    // if (fDoScale) 
    TVirtualPad* plots = fImage[specie];
    TVirtualPad* stat  = 0;
    if (status) {
      // AliWarning("Drawing plots sub-pad");
      TPad* pM = new TPad("plots", "Plots Pad", 0, .2, 1., .9, 0, 0);
      fImage[specie]->cd();
      pM->Draw();
      plots = pM;
      // AliWarning("Drawing status sub-pad");
      TPad* pS = new TPad("status", "Status Pad", 0, 0, 1., .2, 0, 0);
      fImage[specie]->cd();
      pS->Draw();
      pS->SetLogz();
      stat = pS;
      // status->DrawCopy("colz");
    }
    // AliWarningF("fImage[specie]=%p, plots=%p", fImage[specie], plots);
    // plots->cd();
    Int_t nx = 3;
    Int_t ny = (nImages + .5) / nx;
    plots->Divide(nx, ny, 0, 0);
    // else fImage[specie]->Divide(nx, ny);
    
    
    // Loop over histograms 
    TH1*  hist  = 0;
    Int_t nHist = list[specie]->GetEntriesFast();
    for (Int_t i = 0; i < nHist; i++) { 
      hist = static_cast<TH1*>(list[specie]->At(i));
      if (!hist || !hist->TestBit(AliQAv1::GetImageBit())) continue;
      if (hist == status) continue;
      TString name(hist->GetName());
      Bool_t isROE = name.Contains("readouterrors", TString::kIgnoreCase);

      // Go to sub-pad 
      TVirtualPad* pad = 0;
      if      (isROE) pad = plots->cd(4);
      else            pad = plots->cd(GetHalfringPad(hist));
      
      pad->SetRightMargin(0.01);
      if (!fDoScale) { 
	pad->SetLeftMargin(0.10);
	pad->SetBottomMargin(0.10);
      }

      // Check for log scale 
      Int_t logOpts = 0;
      logOpts |= CheckForLog(hist->GetXaxis(), pad, 1);
      logOpts |= CheckForLog(hist->GetYaxis(), pad, 2);
      logOpts |= CheckForLog(hist->GetZaxis(), pad, 3);

      // Figure out special cases 
      TString opt("");
      if (isROE) {
	pad->SetRightMargin(0.15);
	pad->SetBottomMargin(0.10);
	// pad->SetTopMargin(0.02);
	opt="COLZ";
      }
      else {
	pad->SetGridx();
	pad->SetGridy();
	if (fDoScale) { 
	  hist->SetMinimum(min);
	  hist->SetMaximum(max);
	}
	else { 
	  hist->SetMinimum();
	  hist->SetMaximum();
	}
      }
      // Draw (As a copy)
      hist->DrawCopy(opt);
      
      // Special cases 
      if (!name.Contains("readouterrors", TString::kIgnoreCase)) {
	gStyle->SetOptTitle(0);
	TPad* insert = new TPad("insert", "Zoom", 
				.5,.5, .99, .95, 0, 0, 0);
	insert->SetTopMargin(0.01);
	insert->SetRightMargin(0.01);
	insert->SetFillColor(0);
	insert->SetBorderSize(1);
	insert->SetBorderMode(0);
	insert->Draw();
	insert->cd();
	if (logOpts & 0x1) insert->SetLogx();
	if (logOpts & 0x2) insert->SetLogy();
	if (logOpts & 0x4) insert->SetLogz();
	hist->GetXaxis()->SetRange(1, hist->GetNbinsX()/8);
	TH1* copy = hist->DrawCopy(opt);
	copy->GetXaxis()->SetNdivisions(408, false);
	// Restore full range 
	hist->GetXaxis()->SetRange(0, 0);
	gStyle->SetOptTitle(1);
      }
      pad->cd();
      // Possibly restore the log options 
      RestoreLog(hist->GetXaxis(), logOpts & 0x1);
      RestoreLog(hist->GetYaxis(), logOpts & 0x2);
      RestoreLog(hist->GetZaxis(), logOpts & 0x4);
    }
    if (status && stat) {
      stat->cd();
      status->DrawCopy("BOX TEXT");
    }
    // Print to a post-script file 
    fImage[specie]->Print(outName, "ps");
    if (AliDebugLevel() > 0) 
      fImage[specie]->Print(Form("%s_%d.png", 
				 AliRecoParam::GetEventSpecieName(specie), 
				 AliQAChecker::Instance()->GetRunNumber()));
  }
}

//__________________________________________________________________
//
// EOF
//
 AliFMDQAChecker.cxx:1
 AliFMDQAChecker.cxx:2
 AliFMDQAChecker.cxx:3
 AliFMDQAChecker.cxx:4
 AliFMDQAChecker.cxx:5
 AliFMDQAChecker.cxx:6
 AliFMDQAChecker.cxx:7
 AliFMDQAChecker.cxx:8
 AliFMDQAChecker.cxx:9
 AliFMDQAChecker.cxx:10
 AliFMDQAChecker.cxx:11
 AliFMDQAChecker.cxx:12
 AliFMDQAChecker.cxx:13
 AliFMDQAChecker.cxx:14
 AliFMDQAChecker.cxx:15
 AliFMDQAChecker.cxx:16
 AliFMDQAChecker.cxx:17
 AliFMDQAChecker.cxx:18
 AliFMDQAChecker.cxx:19
 AliFMDQAChecker.cxx:20
 AliFMDQAChecker.cxx:21
 AliFMDQAChecker.cxx:22
 AliFMDQAChecker.cxx:23
 AliFMDQAChecker.cxx:24
 AliFMDQAChecker.cxx:25
 AliFMDQAChecker.cxx:26
 AliFMDQAChecker.cxx:27
 AliFMDQAChecker.cxx:28
 AliFMDQAChecker.cxx:29
 AliFMDQAChecker.cxx:30
 AliFMDQAChecker.cxx:31
 AliFMDQAChecker.cxx:32
 AliFMDQAChecker.cxx:33
 AliFMDQAChecker.cxx:34
 AliFMDQAChecker.cxx:35
 AliFMDQAChecker.cxx:36
 AliFMDQAChecker.cxx:37
 AliFMDQAChecker.cxx:38
 AliFMDQAChecker.cxx:39
 AliFMDQAChecker.cxx:40
 AliFMDQAChecker.cxx:41
 AliFMDQAChecker.cxx:42
 AliFMDQAChecker.cxx:43
 AliFMDQAChecker.cxx:44
 AliFMDQAChecker.cxx:45
 AliFMDQAChecker.cxx:46
 AliFMDQAChecker.cxx:47
 AliFMDQAChecker.cxx:48
 AliFMDQAChecker.cxx:49
 AliFMDQAChecker.cxx:50
 AliFMDQAChecker.cxx:51
 AliFMDQAChecker.cxx:52
 AliFMDQAChecker.cxx:53
 AliFMDQAChecker.cxx:54
 AliFMDQAChecker.cxx:55
 AliFMDQAChecker.cxx:56
 AliFMDQAChecker.cxx:57
 AliFMDQAChecker.cxx:58
 AliFMDQAChecker.cxx:59
 AliFMDQAChecker.cxx:60
 AliFMDQAChecker.cxx:61
 AliFMDQAChecker.cxx:62
 AliFMDQAChecker.cxx:63
 AliFMDQAChecker.cxx:64
 AliFMDQAChecker.cxx:65
 AliFMDQAChecker.cxx:66
 AliFMDQAChecker.cxx:67
 AliFMDQAChecker.cxx:68
 AliFMDQAChecker.cxx:69
 AliFMDQAChecker.cxx:70
 AliFMDQAChecker.cxx:71
 AliFMDQAChecker.cxx:72
 AliFMDQAChecker.cxx:73
 AliFMDQAChecker.cxx:74
 AliFMDQAChecker.cxx:75
 AliFMDQAChecker.cxx:76
 AliFMDQAChecker.cxx:77
 AliFMDQAChecker.cxx:78
 AliFMDQAChecker.cxx:79
 AliFMDQAChecker.cxx:80
 AliFMDQAChecker.cxx:81
 AliFMDQAChecker.cxx:82
 AliFMDQAChecker.cxx:83
 AliFMDQAChecker.cxx:84
 AliFMDQAChecker.cxx:85
 AliFMDQAChecker.cxx:86
 AliFMDQAChecker.cxx:87
 AliFMDQAChecker.cxx:88
 AliFMDQAChecker.cxx:89
 AliFMDQAChecker.cxx:90
 AliFMDQAChecker.cxx:91
 AliFMDQAChecker.cxx:92
 AliFMDQAChecker.cxx:93
 AliFMDQAChecker.cxx:94
 AliFMDQAChecker.cxx:95
 AliFMDQAChecker.cxx:96
 AliFMDQAChecker.cxx:97
 AliFMDQAChecker.cxx:98
 AliFMDQAChecker.cxx:99
 AliFMDQAChecker.cxx:100
 AliFMDQAChecker.cxx:101
 AliFMDQAChecker.cxx:102
 AliFMDQAChecker.cxx:103
 AliFMDQAChecker.cxx:104
 AliFMDQAChecker.cxx:105
 AliFMDQAChecker.cxx:106
 AliFMDQAChecker.cxx:107
 AliFMDQAChecker.cxx:108
 AliFMDQAChecker.cxx:109
 AliFMDQAChecker.cxx:110
 AliFMDQAChecker.cxx:111
 AliFMDQAChecker.cxx:112
 AliFMDQAChecker.cxx:113
 AliFMDQAChecker.cxx:114
 AliFMDQAChecker.cxx:115
 AliFMDQAChecker.cxx:116
 AliFMDQAChecker.cxx:117
 AliFMDQAChecker.cxx:118
 AliFMDQAChecker.cxx:119
 AliFMDQAChecker.cxx:120
 AliFMDQAChecker.cxx:121
 AliFMDQAChecker.cxx:122
 AliFMDQAChecker.cxx:123
 AliFMDQAChecker.cxx:124
 AliFMDQAChecker.cxx:125
 AliFMDQAChecker.cxx:126
 AliFMDQAChecker.cxx:127
 AliFMDQAChecker.cxx:128
 AliFMDQAChecker.cxx:129
 AliFMDQAChecker.cxx:130
 AliFMDQAChecker.cxx:131
 AliFMDQAChecker.cxx:132
 AliFMDQAChecker.cxx:133
 AliFMDQAChecker.cxx:134
 AliFMDQAChecker.cxx:135
 AliFMDQAChecker.cxx:136
 AliFMDQAChecker.cxx:137
 AliFMDQAChecker.cxx:138
 AliFMDQAChecker.cxx:139
 AliFMDQAChecker.cxx:140
 AliFMDQAChecker.cxx:141
 AliFMDQAChecker.cxx:142
 AliFMDQAChecker.cxx:143
 AliFMDQAChecker.cxx:144
 AliFMDQAChecker.cxx:145
 AliFMDQAChecker.cxx:146
 AliFMDQAChecker.cxx:147
 AliFMDQAChecker.cxx:148
 AliFMDQAChecker.cxx:149
 AliFMDQAChecker.cxx:150
 AliFMDQAChecker.cxx:151
 AliFMDQAChecker.cxx:152
 AliFMDQAChecker.cxx:153
 AliFMDQAChecker.cxx:154
 AliFMDQAChecker.cxx:155
 AliFMDQAChecker.cxx:156
 AliFMDQAChecker.cxx:157
 AliFMDQAChecker.cxx:158
 AliFMDQAChecker.cxx:159
 AliFMDQAChecker.cxx:160
 AliFMDQAChecker.cxx:161
 AliFMDQAChecker.cxx:162
 AliFMDQAChecker.cxx:163
 AliFMDQAChecker.cxx:164
 AliFMDQAChecker.cxx:165
 AliFMDQAChecker.cxx:166
 AliFMDQAChecker.cxx:167
 AliFMDQAChecker.cxx:168
 AliFMDQAChecker.cxx:169
 AliFMDQAChecker.cxx:170
 AliFMDQAChecker.cxx:171
 AliFMDQAChecker.cxx:172
 AliFMDQAChecker.cxx:173
 AliFMDQAChecker.cxx:174
 AliFMDQAChecker.cxx:175
 AliFMDQAChecker.cxx:176
 AliFMDQAChecker.cxx:177
 AliFMDQAChecker.cxx:178
 AliFMDQAChecker.cxx:179
 AliFMDQAChecker.cxx:180
 AliFMDQAChecker.cxx:181
 AliFMDQAChecker.cxx:182
 AliFMDQAChecker.cxx:183
 AliFMDQAChecker.cxx:184
 AliFMDQAChecker.cxx:185
 AliFMDQAChecker.cxx:186
 AliFMDQAChecker.cxx:187
 AliFMDQAChecker.cxx:188
 AliFMDQAChecker.cxx:189
 AliFMDQAChecker.cxx:190
 AliFMDQAChecker.cxx:191
 AliFMDQAChecker.cxx:192
 AliFMDQAChecker.cxx:193
 AliFMDQAChecker.cxx:194
 AliFMDQAChecker.cxx:195
 AliFMDQAChecker.cxx:196
 AliFMDQAChecker.cxx:197
 AliFMDQAChecker.cxx:198
 AliFMDQAChecker.cxx:199
 AliFMDQAChecker.cxx:200
 AliFMDQAChecker.cxx:201
 AliFMDQAChecker.cxx:202
 AliFMDQAChecker.cxx:203
 AliFMDQAChecker.cxx:204
 AliFMDQAChecker.cxx:205
 AliFMDQAChecker.cxx:206
 AliFMDQAChecker.cxx:207
 AliFMDQAChecker.cxx:208
 AliFMDQAChecker.cxx:209
 AliFMDQAChecker.cxx:210
 AliFMDQAChecker.cxx:211
 AliFMDQAChecker.cxx:212
 AliFMDQAChecker.cxx:213
 AliFMDQAChecker.cxx:214
 AliFMDQAChecker.cxx:215
 AliFMDQAChecker.cxx:216
 AliFMDQAChecker.cxx:217
 AliFMDQAChecker.cxx:218
 AliFMDQAChecker.cxx:219
 AliFMDQAChecker.cxx:220
 AliFMDQAChecker.cxx:221
 AliFMDQAChecker.cxx:222
 AliFMDQAChecker.cxx:223
 AliFMDQAChecker.cxx:224
 AliFMDQAChecker.cxx:225
 AliFMDQAChecker.cxx:226
 AliFMDQAChecker.cxx:227
 AliFMDQAChecker.cxx:228
 AliFMDQAChecker.cxx:229
 AliFMDQAChecker.cxx:230
 AliFMDQAChecker.cxx:231
 AliFMDQAChecker.cxx:232
 AliFMDQAChecker.cxx:233
 AliFMDQAChecker.cxx:234
 AliFMDQAChecker.cxx:235
 AliFMDQAChecker.cxx:236
 AliFMDQAChecker.cxx:237
 AliFMDQAChecker.cxx:238
 AliFMDQAChecker.cxx:239
 AliFMDQAChecker.cxx:240
 AliFMDQAChecker.cxx:241
 AliFMDQAChecker.cxx:242
 AliFMDQAChecker.cxx:243
 AliFMDQAChecker.cxx:244
 AliFMDQAChecker.cxx:245
 AliFMDQAChecker.cxx:246
 AliFMDQAChecker.cxx:247
 AliFMDQAChecker.cxx:248
 AliFMDQAChecker.cxx:249
 AliFMDQAChecker.cxx:250
 AliFMDQAChecker.cxx:251
 AliFMDQAChecker.cxx:252
 AliFMDQAChecker.cxx:253
 AliFMDQAChecker.cxx:254
 AliFMDQAChecker.cxx:255
 AliFMDQAChecker.cxx:256
 AliFMDQAChecker.cxx:257
 AliFMDQAChecker.cxx:258
 AliFMDQAChecker.cxx:259
 AliFMDQAChecker.cxx:260
 AliFMDQAChecker.cxx:261
 AliFMDQAChecker.cxx:262
 AliFMDQAChecker.cxx:263
 AliFMDQAChecker.cxx:264
 AliFMDQAChecker.cxx:265
 AliFMDQAChecker.cxx:266
 AliFMDQAChecker.cxx:267
 AliFMDQAChecker.cxx:268
 AliFMDQAChecker.cxx:269
 AliFMDQAChecker.cxx:270
 AliFMDQAChecker.cxx:271
 AliFMDQAChecker.cxx:272
 AliFMDQAChecker.cxx:273
 AliFMDQAChecker.cxx:274
 AliFMDQAChecker.cxx:275
 AliFMDQAChecker.cxx:276
 AliFMDQAChecker.cxx:277
 AliFMDQAChecker.cxx:278
 AliFMDQAChecker.cxx:279
 AliFMDQAChecker.cxx:280
 AliFMDQAChecker.cxx:281
 AliFMDQAChecker.cxx:282
 AliFMDQAChecker.cxx:283
 AliFMDQAChecker.cxx:284
 AliFMDQAChecker.cxx:285
 AliFMDQAChecker.cxx:286
 AliFMDQAChecker.cxx:287
 AliFMDQAChecker.cxx:288
 AliFMDQAChecker.cxx:289
 AliFMDQAChecker.cxx:290
 AliFMDQAChecker.cxx:291
 AliFMDQAChecker.cxx:292
 AliFMDQAChecker.cxx:293
 AliFMDQAChecker.cxx:294
 AliFMDQAChecker.cxx:295
 AliFMDQAChecker.cxx:296
 AliFMDQAChecker.cxx:297
 AliFMDQAChecker.cxx:298
 AliFMDQAChecker.cxx:299
 AliFMDQAChecker.cxx:300
 AliFMDQAChecker.cxx:301
 AliFMDQAChecker.cxx:302
 AliFMDQAChecker.cxx:303
 AliFMDQAChecker.cxx:304
 AliFMDQAChecker.cxx:305
 AliFMDQAChecker.cxx:306
 AliFMDQAChecker.cxx:307
 AliFMDQAChecker.cxx:308
 AliFMDQAChecker.cxx:309
 AliFMDQAChecker.cxx:310
 AliFMDQAChecker.cxx:311
 AliFMDQAChecker.cxx:312
 AliFMDQAChecker.cxx:313
 AliFMDQAChecker.cxx:314
 AliFMDQAChecker.cxx:315
 AliFMDQAChecker.cxx:316
 AliFMDQAChecker.cxx:317
 AliFMDQAChecker.cxx:318
 AliFMDQAChecker.cxx:319
 AliFMDQAChecker.cxx:320
 AliFMDQAChecker.cxx:321
 AliFMDQAChecker.cxx:322
 AliFMDQAChecker.cxx:323
 AliFMDQAChecker.cxx:324
 AliFMDQAChecker.cxx:325
 AliFMDQAChecker.cxx:326
 AliFMDQAChecker.cxx:327
 AliFMDQAChecker.cxx:328
 AliFMDQAChecker.cxx:329
 AliFMDQAChecker.cxx:330
 AliFMDQAChecker.cxx:331
 AliFMDQAChecker.cxx:332
 AliFMDQAChecker.cxx:333
 AliFMDQAChecker.cxx:334
 AliFMDQAChecker.cxx:335
 AliFMDQAChecker.cxx:336
 AliFMDQAChecker.cxx:337
 AliFMDQAChecker.cxx:338
 AliFMDQAChecker.cxx:339
 AliFMDQAChecker.cxx:340
 AliFMDQAChecker.cxx:341
 AliFMDQAChecker.cxx:342
 AliFMDQAChecker.cxx:343
 AliFMDQAChecker.cxx:344
 AliFMDQAChecker.cxx:345
 AliFMDQAChecker.cxx:346
 AliFMDQAChecker.cxx:347
 AliFMDQAChecker.cxx:348
 AliFMDQAChecker.cxx:349
 AliFMDQAChecker.cxx:350
 AliFMDQAChecker.cxx:351
 AliFMDQAChecker.cxx:352
 AliFMDQAChecker.cxx:353
 AliFMDQAChecker.cxx:354
 AliFMDQAChecker.cxx:355
 AliFMDQAChecker.cxx:356
 AliFMDQAChecker.cxx:357
 AliFMDQAChecker.cxx:358
 AliFMDQAChecker.cxx:359
 AliFMDQAChecker.cxx:360
 AliFMDQAChecker.cxx:361
 AliFMDQAChecker.cxx:362
 AliFMDQAChecker.cxx:363
 AliFMDQAChecker.cxx:364
 AliFMDQAChecker.cxx:365
 AliFMDQAChecker.cxx:366
 AliFMDQAChecker.cxx:367
 AliFMDQAChecker.cxx:368
 AliFMDQAChecker.cxx:369
 AliFMDQAChecker.cxx:370
 AliFMDQAChecker.cxx:371
 AliFMDQAChecker.cxx:372
 AliFMDQAChecker.cxx:373
 AliFMDQAChecker.cxx:374
 AliFMDQAChecker.cxx:375
 AliFMDQAChecker.cxx:376
 AliFMDQAChecker.cxx:377
 AliFMDQAChecker.cxx:378
 AliFMDQAChecker.cxx:379
 AliFMDQAChecker.cxx:380
 AliFMDQAChecker.cxx:381
 AliFMDQAChecker.cxx:382
 AliFMDQAChecker.cxx:383
 AliFMDQAChecker.cxx:384
 AliFMDQAChecker.cxx:385
 AliFMDQAChecker.cxx:386
 AliFMDQAChecker.cxx:387
 AliFMDQAChecker.cxx:388
 AliFMDQAChecker.cxx:389
 AliFMDQAChecker.cxx:390
 AliFMDQAChecker.cxx:391
 AliFMDQAChecker.cxx:392
 AliFMDQAChecker.cxx:393
 AliFMDQAChecker.cxx:394
 AliFMDQAChecker.cxx:395
 AliFMDQAChecker.cxx:396
 AliFMDQAChecker.cxx:397
 AliFMDQAChecker.cxx:398
 AliFMDQAChecker.cxx:399
 AliFMDQAChecker.cxx:400
 AliFMDQAChecker.cxx:401
 AliFMDQAChecker.cxx:402
 AliFMDQAChecker.cxx:403
 AliFMDQAChecker.cxx:404
 AliFMDQAChecker.cxx:405
 AliFMDQAChecker.cxx:406
 AliFMDQAChecker.cxx:407
 AliFMDQAChecker.cxx:408
 AliFMDQAChecker.cxx:409
 AliFMDQAChecker.cxx:410
 AliFMDQAChecker.cxx:411
 AliFMDQAChecker.cxx:412
 AliFMDQAChecker.cxx:413
 AliFMDQAChecker.cxx:414
 AliFMDQAChecker.cxx:415
 AliFMDQAChecker.cxx:416
 AliFMDQAChecker.cxx:417
 AliFMDQAChecker.cxx:418
 AliFMDQAChecker.cxx:419
 AliFMDQAChecker.cxx:420
 AliFMDQAChecker.cxx:421
 AliFMDQAChecker.cxx:422
 AliFMDQAChecker.cxx:423
 AliFMDQAChecker.cxx:424
 AliFMDQAChecker.cxx:425
 AliFMDQAChecker.cxx:426
 AliFMDQAChecker.cxx:427
 AliFMDQAChecker.cxx:428
 AliFMDQAChecker.cxx:429
 AliFMDQAChecker.cxx:430
 AliFMDQAChecker.cxx:431
 AliFMDQAChecker.cxx:432
 AliFMDQAChecker.cxx:433
 AliFMDQAChecker.cxx:434
 AliFMDQAChecker.cxx:435
 AliFMDQAChecker.cxx:436
 AliFMDQAChecker.cxx:437
 AliFMDQAChecker.cxx:438
 AliFMDQAChecker.cxx:439
 AliFMDQAChecker.cxx:440
 AliFMDQAChecker.cxx:441
 AliFMDQAChecker.cxx:442
 AliFMDQAChecker.cxx:443
 AliFMDQAChecker.cxx:444
 AliFMDQAChecker.cxx:445
 AliFMDQAChecker.cxx:446
 AliFMDQAChecker.cxx:447
 AliFMDQAChecker.cxx:448
 AliFMDQAChecker.cxx:449
 AliFMDQAChecker.cxx:450
 AliFMDQAChecker.cxx:451
 AliFMDQAChecker.cxx:452
 AliFMDQAChecker.cxx:453
 AliFMDQAChecker.cxx:454
 AliFMDQAChecker.cxx:455
 AliFMDQAChecker.cxx:456
 AliFMDQAChecker.cxx:457
 AliFMDQAChecker.cxx:458
 AliFMDQAChecker.cxx:459
 AliFMDQAChecker.cxx:460
 AliFMDQAChecker.cxx:461
 AliFMDQAChecker.cxx:462
 AliFMDQAChecker.cxx:463
 AliFMDQAChecker.cxx:464
 AliFMDQAChecker.cxx:465
 AliFMDQAChecker.cxx:466
 AliFMDQAChecker.cxx:467
 AliFMDQAChecker.cxx:468
 AliFMDQAChecker.cxx:469
 AliFMDQAChecker.cxx:470
 AliFMDQAChecker.cxx:471
 AliFMDQAChecker.cxx:472
 AliFMDQAChecker.cxx:473
 AliFMDQAChecker.cxx:474
 AliFMDQAChecker.cxx:475
 AliFMDQAChecker.cxx:476
 AliFMDQAChecker.cxx:477
 AliFMDQAChecker.cxx:478
 AliFMDQAChecker.cxx:479
 AliFMDQAChecker.cxx:480
 AliFMDQAChecker.cxx:481
 AliFMDQAChecker.cxx:482
 AliFMDQAChecker.cxx:483
 AliFMDQAChecker.cxx:484
 AliFMDQAChecker.cxx:485
 AliFMDQAChecker.cxx:486
 AliFMDQAChecker.cxx:487
 AliFMDQAChecker.cxx:488
 AliFMDQAChecker.cxx:489
 AliFMDQAChecker.cxx:490
 AliFMDQAChecker.cxx:491
 AliFMDQAChecker.cxx:492
 AliFMDQAChecker.cxx:493
 AliFMDQAChecker.cxx:494
 AliFMDQAChecker.cxx:495
 AliFMDQAChecker.cxx:496
 AliFMDQAChecker.cxx:497
 AliFMDQAChecker.cxx:498
 AliFMDQAChecker.cxx:499
 AliFMDQAChecker.cxx:500
 AliFMDQAChecker.cxx:501
 AliFMDQAChecker.cxx:502
 AliFMDQAChecker.cxx:503
 AliFMDQAChecker.cxx:504
 AliFMDQAChecker.cxx:505
 AliFMDQAChecker.cxx:506
 AliFMDQAChecker.cxx:507
 AliFMDQAChecker.cxx:508
 AliFMDQAChecker.cxx:509
 AliFMDQAChecker.cxx:510
 AliFMDQAChecker.cxx:511
 AliFMDQAChecker.cxx:512
 AliFMDQAChecker.cxx:513
 AliFMDQAChecker.cxx:514
 AliFMDQAChecker.cxx:515
 AliFMDQAChecker.cxx:516
 AliFMDQAChecker.cxx:517
 AliFMDQAChecker.cxx:518
 AliFMDQAChecker.cxx:519
 AliFMDQAChecker.cxx:520
 AliFMDQAChecker.cxx:521
 AliFMDQAChecker.cxx:522
 AliFMDQAChecker.cxx:523
 AliFMDQAChecker.cxx:524
 AliFMDQAChecker.cxx:525
 AliFMDQAChecker.cxx:526
 AliFMDQAChecker.cxx:527
 AliFMDQAChecker.cxx:528
 AliFMDQAChecker.cxx:529
 AliFMDQAChecker.cxx:530
 AliFMDQAChecker.cxx:531
 AliFMDQAChecker.cxx:532
 AliFMDQAChecker.cxx:533
 AliFMDQAChecker.cxx:534
 AliFMDQAChecker.cxx:535
 AliFMDQAChecker.cxx:536
 AliFMDQAChecker.cxx:537
 AliFMDQAChecker.cxx:538
 AliFMDQAChecker.cxx:539
 AliFMDQAChecker.cxx:540
 AliFMDQAChecker.cxx:541
 AliFMDQAChecker.cxx:542
 AliFMDQAChecker.cxx:543
 AliFMDQAChecker.cxx:544
 AliFMDQAChecker.cxx:545
 AliFMDQAChecker.cxx:546
 AliFMDQAChecker.cxx:547
 AliFMDQAChecker.cxx:548
 AliFMDQAChecker.cxx:549
 AliFMDQAChecker.cxx:550
 AliFMDQAChecker.cxx:551
 AliFMDQAChecker.cxx:552
 AliFMDQAChecker.cxx:553
 AliFMDQAChecker.cxx:554
 AliFMDQAChecker.cxx:555
 AliFMDQAChecker.cxx:556
 AliFMDQAChecker.cxx:557
 AliFMDQAChecker.cxx:558
 AliFMDQAChecker.cxx:559
 AliFMDQAChecker.cxx:560
 AliFMDQAChecker.cxx:561
 AliFMDQAChecker.cxx:562
 AliFMDQAChecker.cxx:563
 AliFMDQAChecker.cxx:564
 AliFMDQAChecker.cxx:565
 AliFMDQAChecker.cxx:566
 AliFMDQAChecker.cxx:567
 AliFMDQAChecker.cxx:568
 AliFMDQAChecker.cxx:569
 AliFMDQAChecker.cxx:570
 AliFMDQAChecker.cxx:571
 AliFMDQAChecker.cxx:572
 AliFMDQAChecker.cxx:573
 AliFMDQAChecker.cxx:574
 AliFMDQAChecker.cxx:575
 AliFMDQAChecker.cxx:576
 AliFMDQAChecker.cxx:577
 AliFMDQAChecker.cxx:578
 AliFMDQAChecker.cxx:579
 AliFMDQAChecker.cxx:580
 AliFMDQAChecker.cxx:581
 AliFMDQAChecker.cxx:582
 AliFMDQAChecker.cxx:583
 AliFMDQAChecker.cxx:584
 AliFMDQAChecker.cxx:585
 AliFMDQAChecker.cxx:586
 AliFMDQAChecker.cxx:587
 AliFMDQAChecker.cxx:588
 AliFMDQAChecker.cxx:589
 AliFMDQAChecker.cxx:590
 AliFMDQAChecker.cxx:591
 AliFMDQAChecker.cxx:592
 AliFMDQAChecker.cxx:593
 AliFMDQAChecker.cxx:594
 AliFMDQAChecker.cxx:595
 AliFMDQAChecker.cxx:596
 AliFMDQAChecker.cxx:597
 AliFMDQAChecker.cxx:598
 AliFMDQAChecker.cxx:599
 AliFMDQAChecker.cxx:600
 AliFMDQAChecker.cxx:601
 AliFMDQAChecker.cxx:602
 AliFMDQAChecker.cxx:603
 AliFMDQAChecker.cxx:604
 AliFMDQAChecker.cxx:605
 AliFMDQAChecker.cxx:606
 AliFMDQAChecker.cxx:607
 AliFMDQAChecker.cxx:608
 AliFMDQAChecker.cxx:609
 AliFMDQAChecker.cxx:610
 AliFMDQAChecker.cxx:611
 AliFMDQAChecker.cxx:612
 AliFMDQAChecker.cxx:613
 AliFMDQAChecker.cxx:614
 AliFMDQAChecker.cxx:615
 AliFMDQAChecker.cxx:616
 AliFMDQAChecker.cxx:617
 AliFMDQAChecker.cxx:618
 AliFMDQAChecker.cxx:619
 AliFMDQAChecker.cxx:620
 AliFMDQAChecker.cxx:621
 AliFMDQAChecker.cxx:622
 AliFMDQAChecker.cxx:623
 AliFMDQAChecker.cxx:624
 AliFMDQAChecker.cxx:625
 AliFMDQAChecker.cxx:626
 AliFMDQAChecker.cxx:627
 AliFMDQAChecker.cxx:628
 AliFMDQAChecker.cxx:629
 AliFMDQAChecker.cxx:630
 AliFMDQAChecker.cxx:631
 AliFMDQAChecker.cxx:632
 AliFMDQAChecker.cxx:633
 AliFMDQAChecker.cxx:634
 AliFMDQAChecker.cxx:635
 AliFMDQAChecker.cxx:636
 AliFMDQAChecker.cxx:637
 AliFMDQAChecker.cxx:638
 AliFMDQAChecker.cxx:639
 AliFMDQAChecker.cxx:640
 AliFMDQAChecker.cxx:641
 AliFMDQAChecker.cxx:642
 AliFMDQAChecker.cxx:643
 AliFMDQAChecker.cxx:644
 AliFMDQAChecker.cxx:645
 AliFMDQAChecker.cxx:646
 AliFMDQAChecker.cxx:647
 AliFMDQAChecker.cxx:648
 AliFMDQAChecker.cxx:649
 AliFMDQAChecker.cxx:650
 AliFMDQAChecker.cxx:651
 AliFMDQAChecker.cxx:652
 AliFMDQAChecker.cxx:653
 AliFMDQAChecker.cxx:654
 AliFMDQAChecker.cxx:655
 AliFMDQAChecker.cxx:656
 AliFMDQAChecker.cxx:657
 AliFMDQAChecker.cxx:658
 AliFMDQAChecker.cxx:659
 AliFMDQAChecker.cxx:660
 AliFMDQAChecker.cxx:661
 AliFMDQAChecker.cxx:662
 AliFMDQAChecker.cxx:663
 AliFMDQAChecker.cxx:664
 AliFMDQAChecker.cxx:665
 AliFMDQAChecker.cxx:666
 AliFMDQAChecker.cxx:667
 AliFMDQAChecker.cxx:668
 AliFMDQAChecker.cxx:669
 AliFMDQAChecker.cxx:670
 AliFMDQAChecker.cxx:671
 AliFMDQAChecker.cxx:672
 AliFMDQAChecker.cxx:673
 AliFMDQAChecker.cxx:674
 AliFMDQAChecker.cxx:675
 AliFMDQAChecker.cxx:676
 AliFMDQAChecker.cxx:677
 AliFMDQAChecker.cxx:678
 AliFMDQAChecker.cxx:679
 AliFMDQAChecker.cxx:680
 AliFMDQAChecker.cxx:681
 AliFMDQAChecker.cxx:682
 AliFMDQAChecker.cxx:683
 AliFMDQAChecker.cxx:684
 AliFMDQAChecker.cxx:685
 AliFMDQAChecker.cxx:686
 AliFMDQAChecker.cxx:687
 AliFMDQAChecker.cxx:688
 AliFMDQAChecker.cxx:689
 AliFMDQAChecker.cxx:690
 AliFMDQAChecker.cxx:691
 AliFMDQAChecker.cxx:692
 AliFMDQAChecker.cxx:693
 AliFMDQAChecker.cxx:694
 AliFMDQAChecker.cxx:695
 AliFMDQAChecker.cxx:696
 AliFMDQAChecker.cxx:697
 AliFMDQAChecker.cxx:698
 AliFMDQAChecker.cxx:699
 AliFMDQAChecker.cxx:700
 AliFMDQAChecker.cxx:701
 AliFMDQAChecker.cxx:702
 AliFMDQAChecker.cxx:703
 AliFMDQAChecker.cxx:704
 AliFMDQAChecker.cxx:705
 AliFMDQAChecker.cxx:706
 AliFMDQAChecker.cxx:707
 AliFMDQAChecker.cxx:708
 AliFMDQAChecker.cxx:709
 AliFMDQAChecker.cxx:710
 AliFMDQAChecker.cxx:711
 AliFMDQAChecker.cxx:712
 AliFMDQAChecker.cxx:713
 AliFMDQAChecker.cxx:714
 AliFMDQAChecker.cxx:715
 AliFMDQAChecker.cxx:716
 AliFMDQAChecker.cxx:717
 AliFMDQAChecker.cxx:718
 AliFMDQAChecker.cxx:719
 AliFMDQAChecker.cxx:720
 AliFMDQAChecker.cxx:721
 AliFMDQAChecker.cxx:722
 AliFMDQAChecker.cxx:723
 AliFMDQAChecker.cxx:724
 AliFMDQAChecker.cxx:725
 AliFMDQAChecker.cxx:726
 AliFMDQAChecker.cxx:727
 AliFMDQAChecker.cxx:728
 AliFMDQAChecker.cxx:729
 AliFMDQAChecker.cxx:730
 AliFMDQAChecker.cxx:731
 AliFMDQAChecker.cxx:732
 AliFMDQAChecker.cxx:733
 AliFMDQAChecker.cxx:734
 AliFMDQAChecker.cxx:735
 AliFMDQAChecker.cxx:736
 AliFMDQAChecker.cxx:737
 AliFMDQAChecker.cxx:738
 AliFMDQAChecker.cxx:739
 AliFMDQAChecker.cxx:740
 AliFMDQAChecker.cxx:741
 AliFMDQAChecker.cxx:742
 AliFMDQAChecker.cxx:743
 AliFMDQAChecker.cxx:744
 AliFMDQAChecker.cxx:745
 AliFMDQAChecker.cxx:746
 AliFMDQAChecker.cxx:747
 AliFMDQAChecker.cxx:748
 AliFMDQAChecker.cxx:749
 AliFMDQAChecker.cxx:750
 AliFMDQAChecker.cxx:751
 AliFMDQAChecker.cxx:752
 AliFMDQAChecker.cxx:753
 AliFMDQAChecker.cxx:754
 AliFMDQAChecker.cxx:755
 AliFMDQAChecker.cxx:756
 AliFMDQAChecker.cxx:757
 AliFMDQAChecker.cxx:758
 AliFMDQAChecker.cxx:759
 AliFMDQAChecker.cxx:760
 AliFMDQAChecker.cxx:761
 AliFMDQAChecker.cxx:762
 AliFMDQAChecker.cxx:763
 AliFMDQAChecker.cxx:764
 AliFMDQAChecker.cxx:765
 AliFMDQAChecker.cxx:766
 AliFMDQAChecker.cxx:767
 AliFMDQAChecker.cxx:768
 AliFMDQAChecker.cxx:769
 AliFMDQAChecker.cxx:770
 AliFMDQAChecker.cxx:771
 AliFMDQAChecker.cxx:772
 AliFMDQAChecker.cxx:773
 AliFMDQAChecker.cxx:774
 AliFMDQAChecker.cxx:775
 AliFMDQAChecker.cxx:776
 AliFMDQAChecker.cxx:777
 AliFMDQAChecker.cxx:778
 AliFMDQAChecker.cxx:779
 AliFMDQAChecker.cxx:780
 AliFMDQAChecker.cxx:781
 AliFMDQAChecker.cxx:782
 AliFMDQAChecker.cxx:783
 AliFMDQAChecker.cxx:784
 AliFMDQAChecker.cxx:785
 AliFMDQAChecker.cxx:786
 AliFMDQAChecker.cxx:787
 AliFMDQAChecker.cxx:788
 AliFMDQAChecker.cxx:789
 AliFMDQAChecker.cxx:790
 AliFMDQAChecker.cxx:791
 AliFMDQAChecker.cxx:792
 AliFMDQAChecker.cxx:793
 AliFMDQAChecker.cxx:794
 AliFMDQAChecker.cxx:795
 AliFMDQAChecker.cxx:796
 AliFMDQAChecker.cxx:797
 AliFMDQAChecker.cxx:798
 AliFMDQAChecker.cxx:799
 AliFMDQAChecker.cxx:800
 AliFMDQAChecker.cxx:801
 AliFMDQAChecker.cxx:802
 AliFMDQAChecker.cxx:803
 AliFMDQAChecker.cxx:804
 AliFMDQAChecker.cxx:805
 AliFMDQAChecker.cxx:806
 AliFMDQAChecker.cxx:807
 AliFMDQAChecker.cxx:808
 AliFMDQAChecker.cxx:809
 AliFMDQAChecker.cxx:810
 AliFMDQAChecker.cxx:811
 AliFMDQAChecker.cxx:812
 AliFMDQAChecker.cxx:813
 AliFMDQAChecker.cxx:814
 AliFMDQAChecker.cxx:815
 AliFMDQAChecker.cxx:816
 AliFMDQAChecker.cxx:817
 AliFMDQAChecker.cxx:818
 AliFMDQAChecker.cxx:819
 AliFMDQAChecker.cxx:820
 AliFMDQAChecker.cxx:821
 AliFMDQAChecker.cxx:822
 AliFMDQAChecker.cxx:823
 AliFMDQAChecker.cxx:824
 AliFMDQAChecker.cxx:825
 AliFMDQAChecker.cxx:826
 AliFMDQAChecker.cxx:827
 AliFMDQAChecker.cxx:828
 AliFMDQAChecker.cxx:829
 AliFMDQAChecker.cxx:830
 AliFMDQAChecker.cxx:831
 AliFMDQAChecker.cxx:832
 AliFMDQAChecker.cxx:833
 AliFMDQAChecker.cxx:834
 AliFMDQAChecker.cxx:835
 AliFMDQAChecker.cxx:836
 AliFMDQAChecker.cxx:837
 AliFMDQAChecker.cxx:838
 AliFMDQAChecker.cxx:839
 AliFMDQAChecker.cxx:840
 AliFMDQAChecker.cxx:841
 AliFMDQAChecker.cxx:842
 AliFMDQAChecker.cxx:843
 AliFMDQAChecker.cxx:844
 AliFMDQAChecker.cxx:845
 AliFMDQAChecker.cxx:846
 AliFMDQAChecker.cxx:847
 AliFMDQAChecker.cxx:848
 AliFMDQAChecker.cxx:849
 AliFMDQAChecker.cxx:850
 AliFMDQAChecker.cxx:851
 AliFMDQAChecker.cxx:852
 AliFMDQAChecker.cxx:853
 AliFMDQAChecker.cxx:854
 AliFMDQAChecker.cxx:855
 AliFMDQAChecker.cxx:856
 AliFMDQAChecker.cxx:857
 AliFMDQAChecker.cxx:858
 AliFMDQAChecker.cxx:859
 AliFMDQAChecker.cxx:860
 AliFMDQAChecker.cxx:861
 AliFMDQAChecker.cxx:862
 AliFMDQAChecker.cxx:863
 AliFMDQAChecker.cxx:864
 AliFMDQAChecker.cxx:865
 AliFMDQAChecker.cxx:866
 AliFMDQAChecker.cxx:867
 AliFMDQAChecker.cxx:868
 AliFMDQAChecker.cxx:869
 AliFMDQAChecker.cxx:870
 AliFMDQAChecker.cxx:871
 AliFMDQAChecker.cxx:872
 AliFMDQAChecker.cxx:873
 AliFMDQAChecker.cxx:874
 AliFMDQAChecker.cxx:875
 AliFMDQAChecker.cxx:876
 AliFMDQAChecker.cxx:877
 AliFMDQAChecker.cxx:878
 AliFMDQAChecker.cxx:879
 AliFMDQAChecker.cxx:880
 AliFMDQAChecker.cxx:881
 AliFMDQAChecker.cxx:882
 AliFMDQAChecker.cxx:883
 AliFMDQAChecker.cxx:884
 AliFMDQAChecker.cxx:885
 AliFMDQAChecker.cxx:886
 AliFMDQAChecker.cxx:887
 AliFMDQAChecker.cxx:888
 AliFMDQAChecker.cxx:889
 AliFMDQAChecker.cxx:890
 AliFMDQAChecker.cxx:891
 AliFMDQAChecker.cxx:892
 AliFMDQAChecker.cxx:893
 AliFMDQAChecker.cxx:894
 AliFMDQAChecker.cxx:895
 AliFMDQAChecker.cxx:896
 AliFMDQAChecker.cxx:897
 AliFMDQAChecker.cxx:898
 AliFMDQAChecker.cxx:899
 AliFMDQAChecker.cxx:900
 AliFMDQAChecker.cxx:901
 AliFMDQAChecker.cxx:902
 AliFMDQAChecker.cxx:903
 AliFMDQAChecker.cxx:904
 AliFMDQAChecker.cxx:905
 AliFMDQAChecker.cxx:906
 AliFMDQAChecker.cxx:907
 AliFMDQAChecker.cxx:908
 AliFMDQAChecker.cxx:909
 AliFMDQAChecker.cxx:910
 AliFMDQAChecker.cxx:911
 AliFMDQAChecker.cxx:912
 AliFMDQAChecker.cxx:913
 AliFMDQAChecker.cxx:914
 AliFMDQAChecker.cxx:915
 AliFMDQAChecker.cxx:916
 AliFMDQAChecker.cxx:917
 AliFMDQAChecker.cxx:918
 AliFMDQAChecker.cxx:919
 AliFMDQAChecker.cxx:920
 AliFMDQAChecker.cxx:921
 AliFMDQAChecker.cxx:922
 AliFMDQAChecker.cxx:923
 AliFMDQAChecker.cxx:924
 AliFMDQAChecker.cxx:925
 AliFMDQAChecker.cxx:926
 AliFMDQAChecker.cxx:927
 AliFMDQAChecker.cxx:928
 AliFMDQAChecker.cxx:929
 AliFMDQAChecker.cxx:930
 AliFMDQAChecker.cxx:931
 AliFMDQAChecker.cxx:932
 AliFMDQAChecker.cxx:933
 AliFMDQAChecker.cxx:934
 AliFMDQAChecker.cxx:935
 AliFMDQAChecker.cxx:936
 AliFMDQAChecker.cxx:937
 AliFMDQAChecker.cxx:938
 AliFMDQAChecker.cxx:939
 AliFMDQAChecker.cxx:940
 AliFMDQAChecker.cxx:941
 AliFMDQAChecker.cxx:942
 AliFMDQAChecker.cxx:943
 AliFMDQAChecker.cxx:944
 AliFMDQAChecker.cxx:945
 AliFMDQAChecker.cxx:946
 AliFMDQAChecker.cxx:947
 AliFMDQAChecker.cxx:948
 AliFMDQAChecker.cxx:949
 AliFMDQAChecker.cxx:950
 AliFMDQAChecker.cxx:951
 AliFMDQAChecker.cxx:952
 AliFMDQAChecker.cxx:953
 AliFMDQAChecker.cxx:954
 AliFMDQAChecker.cxx:955
 AliFMDQAChecker.cxx:956
 AliFMDQAChecker.cxx:957
 AliFMDQAChecker.cxx:958
 AliFMDQAChecker.cxx:959
 AliFMDQAChecker.cxx:960
 AliFMDQAChecker.cxx:961
 AliFMDQAChecker.cxx:962
 AliFMDQAChecker.cxx:963
 AliFMDQAChecker.cxx:964
 AliFMDQAChecker.cxx:965
 AliFMDQAChecker.cxx:966
 AliFMDQAChecker.cxx:967
 AliFMDQAChecker.cxx:968
 AliFMDQAChecker.cxx:969
 AliFMDQAChecker.cxx:970
 AliFMDQAChecker.cxx:971
 AliFMDQAChecker.cxx:972
 AliFMDQAChecker.cxx:973
 AliFMDQAChecker.cxx:974
 AliFMDQAChecker.cxx:975
 AliFMDQAChecker.cxx:976
 AliFMDQAChecker.cxx:977
 AliFMDQAChecker.cxx:978
 AliFMDQAChecker.cxx:979
 AliFMDQAChecker.cxx:980
 AliFMDQAChecker.cxx:981
 AliFMDQAChecker.cxx:982
 AliFMDQAChecker.cxx:983
 AliFMDQAChecker.cxx:984
 AliFMDQAChecker.cxx:985
 AliFMDQAChecker.cxx:986
 AliFMDQAChecker.cxx:987
 AliFMDQAChecker.cxx:988
 AliFMDQAChecker.cxx:989
 AliFMDQAChecker.cxx:990
 AliFMDQAChecker.cxx:991
 AliFMDQAChecker.cxx:992
 AliFMDQAChecker.cxx:993
 AliFMDQAChecker.cxx:994
 AliFMDQAChecker.cxx:995
 AliFMDQAChecker.cxx:996
 AliFMDQAChecker.cxx:997
 AliFMDQAChecker.cxx:998
 AliFMDQAChecker.cxx:999
 AliFMDQAChecker.cxx:1000
 AliFMDQAChecker.cxx:1001
 AliFMDQAChecker.cxx:1002
 AliFMDQAChecker.cxx:1003
 AliFMDQAChecker.cxx:1004
 AliFMDQAChecker.cxx:1005
 AliFMDQAChecker.cxx:1006
 AliFMDQAChecker.cxx:1007
 AliFMDQAChecker.cxx:1008
 AliFMDQAChecker.cxx:1009
 AliFMDQAChecker.cxx:1010
 AliFMDQAChecker.cxx:1011
 AliFMDQAChecker.cxx:1012
 AliFMDQAChecker.cxx:1013
 AliFMDQAChecker.cxx:1014
 AliFMDQAChecker.cxx:1015
 AliFMDQAChecker.cxx:1016
 AliFMDQAChecker.cxx:1017
 AliFMDQAChecker.cxx:1018
 AliFMDQAChecker.cxx:1019
 AliFMDQAChecker.cxx:1020
 AliFMDQAChecker.cxx:1021
 AliFMDQAChecker.cxx:1022
 AliFMDQAChecker.cxx:1023
 AliFMDQAChecker.cxx:1024
 AliFMDQAChecker.cxx:1025
 AliFMDQAChecker.cxx:1026
 AliFMDQAChecker.cxx:1027
 AliFMDQAChecker.cxx:1028
 AliFMDQAChecker.cxx:1029
 AliFMDQAChecker.cxx:1030
 AliFMDQAChecker.cxx:1031
 AliFMDQAChecker.cxx:1032
 AliFMDQAChecker.cxx:1033
 AliFMDQAChecker.cxx:1034
 AliFMDQAChecker.cxx:1035
 AliFMDQAChecker.cxx:1036
 AliFMDQAChecker.cxx:1037
 AliFMDQAChecker.cxx:1038
 AliFMDQAChecker.cxx:1039
 AliFMDQAChecker.cxx:1040
 AliFMDQAChecker.cxx:1041
 AliFMDQAChecker.cxx:1042
 AliFMDQAChecker.cxx:1043
 AliFMDQAChecker.cxx:1044
 AliFMDQAChecker.cxx:1045
 AliFMDQAChecker.cxx:1046
 AliFMDQAChecker.cxx:1047
 AliFMDQAChecker.cxx:1048
 AliFMDQAChecker.cxx:1049
 AliFMDQAChecker.cxx:1050
 AliFMDQAChecker.cxx:1051
 AliFMDQAChecker.cxx:1052
 AliFMDQAChecker.cxx:1053
 AliFMDQAChecker.cxx:1054
 AliFMDQAChecker.cxx:1055
 AliFMDQAChecker.cxx:1056
 AliFMDQAChecker.cxx:1057
 AliFMDQAChecker.cxx:1058
 AliFMDQAChecker.cxx:1059
 AliFMDQAChecker.cxx:1060
 AliFMDQAChecker.cxx:1061
 AliFMDQAChecker.cxx:1062
 AliFMDQAChecker.cxx:1063
 AliFMDQAChecker.cxx:1064
 AliFMDQAChecker.cxx:1065
 AliFMDQAChecker.cxx:1066
 AliFMDQAChecker.cxx:1067
 AliFMDQAChecker.cxx:1068
 AliFMDQAChecker.cxx:1069
 AliFMDQAChecker.cxx:1070
 AliFMDQAChecker.cxx:1071
 AliFMDQAChecker.cxx:1072
 AliFMDQAChecker.cxx:1073
 AliFMDQAChecker.cxx:1074
 AliFMDQAChecker.cxx:1075
 AliFMDQAChecker.cxx:1076
 AliFMDQAChecker.cxx:1077
 AliFMDQAChecker.cxx:1078
 AliFMDQAChecker.cxx:1079
 AliFMDQAChecker.cxx:1080
 AliFMDQAChecker.cxx:1081
 AliFMDQAChecker.cxx:1082
 AliFMDQAChecker.cxx:1083
 AliFMDQAChecker.cxx:1084
 AliFMDQAChecker.cxx:1085
 AliFMDQAChecker.cxx:1086
 AliFMDQAChecker.cxx:1087
 AliFMDQAChecker.cxx:1088
 AliFMDQAChecker.cxx:1089
 AliFMDQAChecker.cxx:1090
 AliFMDQAChecker.cxx:1091
 AliFMDQAChecker.cxx:1092
 AliFMDQAChecker.cxx:1093
 AliFMDQAChecker.cxx:1094
 AliFMDQAChecker.cxx:1095
 AliFMDQAChecker.cxx:1096
 AliFMDQAChecker.cxx:1097
 AliFMDQAChecker.cxx:1098
 AliFMDQAChecker.cxx:1099
 AliFMDQAChecker.cxx:1100
 AliFMDQAChecker.cxx:1101
 AliFMDQAChecker.cxx:1102
 AliFMDQAChecker.cxx:1103
 AliFMDQAChecker.cxx:1104
 AliFMDQAChecker.cxx:1105
 AliFMDQAChecker.cxx:1106
 AliFMDQAChecker.cxx:1107
 AliFMDQAChecker.cxx:1108
 AliFMDQAChecker.cxx:1109
 AliFMDQAChecker.cxx:1110
 AliFMDQAChecker.cxx:1111
 AliFMDQAChecker.cxx:1112
 AliFMDQAChecker.cxx:1113
 AliFMDQAChecker.cxx:1114
 AliFMDQAChecker.cxx:1115
 AliFMDQAChecker.cxx:1116
 AliFMDQAChecker.cxx:1117
 AliFMDQAChecker.cxx:1118
 AliFMDQAChecker.cxx:1119
 AliFMDQAChecker.cxx:1120
 AliFMDQAChecker.cxx:1121
 AliFMDQAChecker.cxx:1122
 AliFMDQAChecker.cxx:1123
 AliFMDQAChecker.cxx:1124
 AliFMDQAChecker.cxx:1125
 AliFMDQAChecker.cxx:1126
 AliFMDQAChecker.cxx:1127
 AliFMDQAChecker.cxx:1128
 AliFMDQAChecker.cxx:1129
 AliFMDQAChecker.cxx:1130
 AliFMDQAChecker.cxx:1131
 AliFMDQAChecker.cxx:1132
 AliFMDQAChecker.cxx:1133
 AliFMDQAChecker.cxx:1134
 AliFMDQAChecker.cxx:1135
 AliFMDQAChecker.cxx:1136
 AliFMDQAChecker.cxx:1137
 AliFMDQAChecker.cxx:1138
 AliFMDQAChecker.cxx:1139
 AliFMDQAChecker.cxx:1140
 AliFMDQAChecker.cxx:1141
 AliFMDQAChecker.cxx:1142
 AliFMDQAChecker.cxx:1143
 AliFMDQAChecker.cxx:1144
 AliFMDQAChecker.cxx:1145
 AliFMDQAChecker.cxx:1146
 AliFMDQAChecker.cxx:1147
 AliFMDQAChecker.cxx:1148
 AliFMDQAChecker.cxx:1149
 AliFMDQAChecker.cxx:1150
 AliFMDQAChecker.cxx:1151
 AliFMDQAChecker.cxx:1152
 AliFMDQAChecker.cxx:1153
 AliFMDQAChecker.cxx:1154
 AliFMDQAChecker.cxx:1155
 AliFMDQAChecker.cxx:1156
 AliFMDQAChecker.cxx:1157
 AliFMDQAChecker.cxx:1158
 AliFMDQAChecker.cxx:1159
 AliFMDQAChecker.cxx:1160
 AliFMDQAChecker.cxx:1161
 AliFMDQAChecker.cxx:1162
 AliFMDQAChecker.cxx:1163
 AliFMDQAChecker.cxx:1164
 AliFMDQAChecker.cxx:1165
 AliFMDQAChecker.cxx:1166
 AliFMDQAChecker.cxx:1167
 AliFMDQAChecker.cxx:1168
 AliFMDQAChecker.cxx:1169
 AliFMDQAChecker.cxx:1170
 AliFMDQAChecker.cxx:1171
 AliFMDQAChecker.cxx:1172
 AliFMDQAChecker.cxx:1173
 AliFMDQAChecker.cxx:1174
 AliFMDQAChecker.cxx:1175
 AliFMDQAChecker.cxx:1176
 AliFMDQAChecker.cxx:1177
 AliFMDQAChecker.cxx:1178
 AliFMDQAChecker.cxx:1179
 AliFMDQAChecker.cxx:1180
 AliFMDQAChecker.cxx:1181
 AliFMDQAChecker.cxx:1182
 AliFMDQAChecker.cxx:1183
 AliFMDQAChecker.cxx:1184