ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$

#include "AliMUONTrackerQAChecker.h"

/// \class AliMUONTrackerQAChecker
///
/// Implementation of AliQACheckerBase for MCH and MTR
///
/// For the moment we only implement the checking of raw data QA for the tracker
/// by looking at the occupancy at the bus patch level.
///
/// \author Laurent Aphecetche, Subatech

#include "AliCDBManager.h"
#include "AliCodeTimer.h"
#include "AliLog.h"
#include "AliMUONQAIndices.h"
#include "AliMUONRecoParam.h"
#include "AliMpBusPatch.h"
#include "AliMpDDLStore.h"
#include "AliQAv1.h"
#include "Riostream.h"
#include "TAxis.h"
#include "TDirectory.h"
#include "TGaxis.h"
#include "TH1.h"
#include "TLine.h"
#include "TMath.h"
#include "TPaveText.h"
#include "TVirtualPad.h"
#include "TStyle.h"
#include "TLatex.h"

/// \cond CLASSIMP
ClassImp(AliMUONTrackerQAChecker)
/// \endcond

namespace {
  
  //___________________________________________________________________________  
  int trim(Int_t n, 
           Double_t* x,
           Double_t alpha,
           Double_t& tmean,
           Double_t& tvar,
           Double_t& min,
           Double_t& max)
  {
    //
    // Calculates the trimmed (tmean) mean
    // of a sample (x) and estimates the variance (tvar)
    // of that mean.
    //
    
    // First check input parameters
    
    // number of observations
    if ( n < 2 )
    {
      return -1;
    }
    
    if ( alpha < 0 || alpha >= 0.5 )
      // proportion of observations
      // to be trimmed at each end of the sorted sample
    {
      return -2;
    }
    
    // Input parameters are good. Let's move on.
    
    // Insure we use a sample sorted into ascending order.
    
    Int_t* indices = new Int_t[n];
    
    TMath::Sort(n,x,indices,kFALSE);
    
    Double_t* sx = new Double_t[n];
    
    for ( Int_t i = 0; i < n; ++i )
    {
      sx[i] = x[indices[i]];
    }
    delete[] indices;
    
    
    // Number of observations trimmed at each end.
    
    Int_t k = TMath::FloorNint(alpha * n);
    
    double sum = 0.0;
    
    for ( Int_t i = k; i < n - k ; ++i )
    {
      sum += sx[i];
    }
    
    tmean = sum / ( n - 2 * k );
    
    double t2 = 0.0;
    
    for ( Int_t i = k; i < n - k; ++i )
    {
      t2 += (sx[i] - tmean) * (sx[i] - tmean);
    }
    
    tvar = (
            t2 +
            k * (sx[k] - tmean) * (sx[k] - tmean) +
            k * (sx[n - k - 1] - tmean) * (sx[n - k - 1] - tmean)
            ) / (n * n);
    
    // get the min and max for the non-rejected values
    min = DBL_MAX;
    max = 0.0;
    
    for ( Int_t i = k; i < n-k; ++i ) 
    {
      min = TMath::Min(min,sx[i]);
      max = TMath::Max(max,sx[i]);
    }
    
    delete[] sx;
    
    return 0;
  }

  //___________________________________________________________________________  
  Int_t GetColorFromCheckCode(AliMUONVQAChecker::ECheckCode code)
  {
    if ( code == AliMUONVQAChecker::kInfo ) return AliMUONVQAChecker::kInfoColor;
    else if ( code == AliMUONVQAChecker::kWarning ) return AliMUONVQAChecker::kWarningColor;
    else if ( code ==  AliMUONVQAChecker::kFatal) return AliMUONVQAChecker::kFatalColor;
    else return AliMUONVQAChecker::kErrorColor;
  }
  
  const char* NOTENOUGHEVENTMESSAGE = "Not enough event to judge. Please wait a bit";
  const char* NOTIFYEXPERTMESSAGE = "PLEASE NOTIFY EXPERT !";
  const char* ALLISFINEMESSAGE = "All is fine. Just enjoy.";
  
  const int NOTENOUGHEVENTLIMIT = 50;
  
  //___________________________________________________________________________  
  void SetupHisto(Int_t neventsseen, Int_t neventsused, const TObjArray& messages, TH1& histo, AliMUONVQAChecker::ECheckCode code, const char* extraopt="")
  {
    Bool_t allIsFine(kFALSE);
    
    if ( code == AliMUONVQAChecker::kInfo ) 
    {
      allIsFine = kTRUE;
    }    
    
    Double_t y1 = 0.99 - (messages.GetLast()+(allIsFine?1:0)+2)*0.075;
    
    TPaveText* text = new TPaveText(0.5,y1,0.99,0.99,"NDC");
    
    text->AddText(Form("MCH RUN %d - %d events seen - %d events used",AliCDBManager::Instance()->GetRun(),neventsseen,neventsused));
    
    TIter next(&messages);
    TObjString* str;
    
    while ( ( str = static_cast<TObjString*>(next()) ) )
    {
      text->AddText(str->String());
    }
    
    if ( allIsFine )
    {
      text->AddText(ALLISFINEMESSAGE);
    }
                    
    text->SetFillColor(GetColorFromCheckCode(code));
                      
    Int_t color = GetColorFromCheckCode(code);
    
    histo.SetFillStyle(1001);
    histo.SetFillColor(color);    
    TString sopt("BAR");
    sopt += extraopt;
    histo.SetOption(sopt.Data());
    
    histo.SetBit(TH1::kNoTitle); 
    
    TList* lstF = histo.GetListOfFunctions();
    TObject* title = lstF->FindObject("title");
    if (title) delete lstF->Remove(title);
    // 
    lstF->Add(text);  
    
  }

  //___________________________________________________________________________  
  void ShowTrueValue(TH1& hrostatusnorm, Int_t v)
  {
    // For a bar > 100% we put the text inside the bar (as TEXT45 option is putting above which
    // would go offscreen)
    
    Int_t bin = hrostatusnorm.FindBin(1.0*v);
    
    Double_t value = hrostatusnorm.GetBinContent(bin);
    
    if ( value > 100.0 ) 
    {
      TLatex* l = new TLatex(hrostatusnorm.GetBinCenter(bin),50,Form("%g",value));
      l->SetTextFont(gStyle->GetTextFont());
      l->SetTextAlign(22);
      l->SetTextAngle(45);
      l->SetTextSize(0.02*hrostatusnorm.GetMarkerSize());
      hrostatusnorm.GetListOfFunctions()->Add(l);
    }
  }

}
//__________________________________________________________________
AliMUONTrackerQAChecker::AliMUONTrackerQAChecker() : AliMUONVQAChecker()
{
	/// ctor
}          

//__________________________________________________________________
AliMUONTrackerQAChecker::~AliMUONTrackerQAChecker() 
{
	/// dtor
}

//______________________________________________________________________________
AliMUONVQAChecker::ECheckCode*
AliMUONTrackerQAChecker::CheckRecPoints(TObjArray ** list, const AliMUONRecoParam* /*recoParam*/)
{
  /// Check rec points
  /// Very binary check for the moment. 
  
  AliCodeTimerAuto("",0);
  
  AliMUONVQAChecker::ECheckCode * rv = new AliMUONVQAChecker::ECheckCode[AliRecoParam::kNSpecies] ; 
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
    rv[specie] =  AliMUONVQAChecker::kInfo; 
  
  
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
  {
    TH1* h = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerNumberOfClustersPerDE,AliRecoParam::ConvertIndex(specie));

    if ( !h ) rv[specie] = AliMUONVQAChecker::kWarning; // only a warning if histo not found, in order not to kill anything because QA failed...
  
    else if ( h->GetMean() == 0.0 ) rv[specie] =  MarkHisto(*h,AliMUONVQAChecker::kFatal);
  }
  return rv;
}

//______________________________________________________________________________
AliMUONVQAChecker::ECheckCode 
AliMUONTrackerQAChecker::MarkHisto(TH1& histo, AliMUONVQAChecker::ECheckCode value) const
{
  /// Mark histo as originator of some QA error/warning
  
  if ( value != AliMUONVQAChecker::kInfo )
  {
    histo.SetBit(AliQAv1::GetQABit());
  }
  
  return value;
}

//______________________________________________________________________________
AliMUONVQAChecker::ECheckCode*
AliMUONTrackerQAChecker::CheckESD(TObjArray ** list, const AliMUONRecoParam* /*recoParam*/)
{
  /// Check ESD
  
  AliCodeTimerAuto("",0);
  
  AliMUONVQAChecker::ECheckCode * rv = new AliMUONVQAChecker::ECheckCode[AliRecoParam::kNSpecies] ; 
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
    rv[specie] = AliMUONVQAChecker::kInfo; 
  
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
    
    TH1* h = AliQAv1::GetData(list,AliMUONQAIndices::kESDnTracks,AliRecoParam::ConvertIndex(specie));
  
    if (!h) rv[specie] = AliMUONVQAChecker::kWarning;
  
    else if ( h->GetMean() == 0.0 ) rv[specie] =  MarkHisto(*h,AliMUONVQAChecker::kFatal); // no track -> fatal
  
    h = AliQAv1::GetData(list,AliMUONQAIndices::kESDMatchTrig,AliRecoParam::ConvertIndex(specie));
  
    if (!h) rv[specie] = AliMUONVQAChecker::kWarning;
  
    else if (h->GetMean() == 0.0 ) rv[specie] = MarkHisto(*h,AliMUONVQAChecker::kError); // no trigger matching -> error
  }
  return rv;
}

//______________________________________________________________________________
AliMUONVQAChecker::ECheckCode*
AliMUONTrackerQAChecker::CheckRaws(TObjArray ** list, const AliMUONRecoParam* recoParam)
{
  /// Check raws

  AliCodeTimerAuto("",0);
  
  if (!recoParam) return 0x0;
  
  AliMUONVQAChecker::ECheckCode * rv = new AliMUONVQAChecker::ECheckCode[AliRecoParam::kNSpecies] ; 

  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
  {
    rv[specie] = AliMUONVQAChecker::kInfo; 
  }
  
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
  {
    TH1* hneventsseen = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerNofPhysicsEventsSeen,AliRecoParam::ConvertIndex(specie));
    TH1* hneventsused = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerNofGoodPhysicsEventsUsed,AliRecoParam::ConvertIndex(specie));

    if (!hneventsseen || !hneventsused ) continue;
    
    Int_t neventsseen = TMath::Nint(hneventsseen->GetBinContent(1));
    Int_t neventsused = TMath::Nint(hneventsused->GetBinContent(1));
        
    AliMUONVQAChecker::ECheckCode c1 = AliMUONVQAChecker::kInfo;
    AliMUONVQAChecker::ECheckCode c2 = AliMUONVQAChecker::kInfo;
    AliMUONVQAChecker::ECheckCode c3 = AliMUONVQAChecker::kInfo;
    
    TH1* hbp = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerBusPatchOccupancy,AliRecoParam::ConvertIndex(specie));    
    TH1* hbpconfig = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerBusPatchConfig,AliRecoParam::ConvertIndex(specie));
    TH1* hddl = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerDDLOccupancy,AliRecoParam::ConvertIndex(specie));    

    if ( hbp && hbpconfig && hddl ) 
    {
      c1 = BeautifyOccupancyHistograms(*hddl,*hbp,hbpconfig,neventsseen,neventsused,*recoParam);  
    }
    else
    {
      AliError(Form("Could not BeautifyOccupancyHistograms : hddl=%p hbpconfig=%p hbp=%p",hddl,hbpconfig,hbp));
    }
    
    TH1* hbuspatchtokenerrors = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerBusPatchTokenLostErrors,AliRecoParam::ConvertIndex(specie));
    TH1* hrostatus = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerReadoutStatus,AliRecoParam::ConvertIndex(specie));    
    TH1* hrostatusnorm = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerReadoutStatusPerEvent,AliRecoParam::ConvertIndex(specie));
    
    if ( hrostatus && hrostatusnorm && hbuspatchtokenerrors )
    {
      c2 = BeautifyReadoutHistograms(*hrostatus,*hrostatusnorm,*hbuspatchtokenerrors,
                                     neventsseen,neventsused,*recoParam);
    }
    else
    {
      AliError(Form("Could not BeautifyReadoutHistograms : hrostatus=%p hrostatusnorm=%p hbuspatchtokenerrors=%p",
                    hrostatus,hrostatusnorm,hbuspatchtokenerrors));
    }
    
    
    TH1* heventsize = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerDDLEventSize,AliRecoParam::ConvertIndex(specie));    
    TH1* heventsizeperevent = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerDDLEventSizePerEvent,AliRecoParam::ConvertIndex(specie));
    
    if ( heventsize && heventsizeperevent ) 
    {
      c3 = BeautifyEventsizeHistograms(*heventsize,*heventsizeperevent,
                                       neventsseen,neventsused,*recoParam);
    }
    else
    {
      AliError(Form("Could not BeautifyEventsizeHistograms heventsize=%p heventsizeperevent=%p",heventsize,heventsizeperevent));
    }
    
    if ( c1 == AliMUONVQAChecker::kFatal || c2 == AliMUONVQAChecker::kFatal || c3 == AliMUONVQAChecker::kFatal )
    {
      rv[specie] = AliMUONVQAChecker::kFatal;
    }
    else if ( c1 == AliMUONVQAChecker::kError || c2 == AliMUONVQAChecker::kError || c3 == AliMUONVQAChecker::kError )
    {
      rv[specie] = AliMUONVQAChecker::kError;
    }
    else if ( c1 == AliMUONVQAChecker::kWarning || c2 == AliMUONVQAChecker::kWarning || c3 == AliMUONVQAChecker::kWarning )
    {
      rv[specie] = AliMUONVQAChecker::kWarning;
    }
    else
    {
      rv[specie] = AliMUONVQAChecker::kInfo;
    }
  }
  
  return rv;
}

//____________________________________________________________________________ 
AliMUONVQAChecker::ECheckCode
AliMUONTrackerQAChecker::BeautifyOccupancyHistograms(TH1& hddl,
                                                     TH1& hbp, 
                                                     const TH1* hbuspatchconfig, 
                                                     Int_t neventsseen,
                                                     Int_t neventsused,
                                                     const AliMUONRecoParam& recoParam)
{
  /// Put labels, limits and so on on the TrackerBusPatchOccupancy histograms
  /// hbuspatchconfig and hbp must have the same bin definitions
  
  if ( hbuspatchconfig )
  {
    if ( hbp.GetNbinsX() != hbuspatchconfig->GetNbinsX() ||
        hbp.GetXaxis()->GetXmin() != hbuspatchconfig->GetXaxis()->GetXmin() ||
        hbp.GetXaxis()->GetXmax() != hbuspatchconfig->GetXaxis()->GetXmax() )
    {
      AliError("hbp and hbuspatchconfig histograms are not compatible !");
      return AliMUONVQAChecker::kFatal;
    }
  }
  
  hddl.SetStats(kFALSE);
  hbp.SetXTitle("Absolute Bus Patch Id");
  hbp.SetYTitle("Occupancy (percent)");
  hbp.SetStats(kFALSE);
  
  Double_t xmin = hbp.GetXaxis()->GetXmin();
  Double_t xmax = hbp.GetXaxis()->GetXmax();
  
  Double_t occMax(0.1); // 0.1% y-limit for the plot
  Double_t maxToleratedOccupancy(recoParam.BuspatchOccupancyHighLimit()*100.0); 
  Double_t minToleratedOccupancy(recoParam.BuspatchOccupancyLowLimit()*100.0);   
  TLine* line1 = new TLine(xmin,maxToleratedOccupancy,xmax,maxToleratedOccupancy);
  line1->SetLineColor(1);
  line1->SetLineWidth(1);

  TLine* line2 = new TLine(xmin,minToleratedOccupancy,xmax,minToleratedOccupancy);
  line2->SetLineColor(1);
  line2->SetLineWidth(1);
  
  TList* lstF = hbp.GetListOfFunctions();
  if (lstF) {
    TObject *stats = lstF->FindObject("stats");
    lstF->Remove(stats);
    TObject *obj;
    while ((obj = lstF->First())) { while(lstF->Remove(obj)) { } delete obj; }
    if (stats) lstF->Add(stats);
  } 
  
  hbp.GetListOfFunctions()->Add(line1);
  hbp.GetListOfFunctions()->Add(line2);
    
  TIter next(AliMpDDLStore::Instance()->CreateBusPatchIterator());
  AliMpBusPatch* bp(0x0);

  Int_t nBusPatches(0);
  Int_t nMissingBusPatches(0);
  
  while ( ( bp = static_cast<AliMpBusPatch*>(next())) )
  {
    ++nBusPatches;
    
    Int_t bin = hbp.FindBin(bp->GetId());
    
    if ( hbp.GetBinContent(bin) <= 0.0 ) 
    {
      ++nMissingBusPatches;
    }
  }
  
  next.Reset();
  
  Int_t ok(-1);
  Int_t n(0);
  Int_t nBusPatchesAboveLimit(0);
  Int_t nBusPatchesBelowLimit(0);
  Double_t alpha(0.1); // trim 10% of data
  Double_t tmean(0.0),tvar(0.0);
  Double_t ymin(0.0),ymax(0.0);
  
  if ( nBusPatches ) 
  {
    Double_t* x = new Double_t[nBusPatches];
    
    while ( ( bp = static_cast<AliMpBusPatch*>(next())) )
    {
      Int_t bin = hbp.FindBin(bp->GetId());
      if ( hbp.GetBinContent(bin) > 0 )
      {
        x[n] = hbp.GetBinContent(bin);
        ++n;
      }
      if ( hbp.GetBinContent(bin) > maxToleratedOccupancy )
      {
        ++nBusPatchesAboveLimit;
      }
      if ( hbp.GetBinContent(bin) < minToleratedOccupancy )
      {
        // check whether this buspatch has a reason to be absent (only valid
        // if we got the config, otherwise we cannot do the test)
        if ( hbuspatchconfig && hbuspatchconfig->GetBinContent(bin) > 0 )
        {
          // should be there, so it's an error
          ++nBusPatchesBelowLimit;
        }
      }
    }
    
    // computed the truncated mean of the occupancy values, in order to get a 
    // reasonable y-range for the histogram (without giant peaks to the roof 
    // for misbehaving buspatches).
    ok = trim(n,x,alpha,tmean,tvar,ymin,ymax);
    
    delete[] x;
  }
  
  if ( ok < 0 ) 
  {
    ymax = occMax;
  }
  else
  {
    ymax = TMath::Max(ymax,occMax);
  }
  
  hbp.SetMaximum(ymax*1.4);
  
  AliMUONVQAChecker::ECheckCode rv(AliMUONVQAChecker::kInfo);

  TObjArray messages;
  messages.SetOwner(kTRUE);
  
  if ( neventsseen < NOTENOUGHEVENTLIMIT ) 
  {
    messages.Add(new TObjString(NOTENOUGHEVENTMESSAGE));
  }
  else
  {
    if ( ok < 0 ) 
    {
      messages.Add(new TObjString("Could not compute truncated mean. Not enough events ?"));
      
      if ( neventsused < TMath::Nint(0.1*neventsseen) )
      {
        messages.Add(new TObjString(Form("We've actually seen %d events, but used only %d !",neventsseen,neventsused)));
        messages.Add(new TObjString("For a normal physics run, this is highly suspect !"));
        messages.Add(new TObjString(NOTIFYEXPERTMESSAGE));
        rv = AliMUONVQAChecker::kFatal;
      }
    }
    else if (!nBusPatches)
    {
      messages.Add(new TObjString(Form("Could not get the total number of buspatches (%d). ERROR !!!",
                         nBusPatches)));
      messages.Add(new TObjString("Please check with expert !"));
      rv = AliMUONVQAChecker::kFatal;
    }
    else
    {
      Float_t missingBusPatchFraction = nMissingBusPatches*100.0/nBusPatches;
      Float_t aboveLimitFraction = nBusPatchesAboveLimit*100.0/nBusPatches;
      Float_t belowLimitFraction = nBusPatchesBelowLimit*100.0/nBusPatches;
      
      messages.Add(new TObjString(Form("%5.2f %% of missing buspatches (%d out of %d)",missingBusPatchFraction,nMissingBusPatches,nBusPatches)));
      messages.Add(new TObjString(Form("%5.2f %% bus patches above the %5.2f %% limit",aboveLimitFraction,maxToleratedOccupancy)));
      messages.Add(new TObjString(Form("%5.2f %% bus patches below the %e %% limit",belowLimitFraction,minToleratedOccupancy)));
      messages.Add(new TObjString(Form("Bus patch mean occupancy (truncated at %2d %%) is %7.2f %%",(Int_t)(alpha*100),tmean)));
      
      if ( aboveLimitFraction > recoParam.FractionOfBuspatchOutsideOccupancyLimit()*100.0 || 
          belowLimitFraction > recoParam.FractionOfBuspatchOutsideOccupancyLimit()*100.0 ) 
      {
        rv = AliMUONVQAChecker::kError;
      }
      else
      {
        rv = AliMUONVQAChecker::kInfo;
      }
    }
  }
  
  SetupHisto(neventsseen,neventsused,messages,hbp,rv);
  
  /// Make as well a version for DDL occupancy, that'll be used by the shifter
  SetupHisto(neventsseen,neventsused,messages,hddl,rv);
  
  
  hddl.SetStats(kFALSE);
  
  return rv;
}

//______________________________________________________________________________
AliMUONVQAChecker::ECheckCode 
AliMUONTrackerQAChecker::BeautifyReadoutHistograms(TH1& hrostatus,
                                                   TH1& hrostatusnorm,
                                                   const TH1& hbuspatchtokenerrors,
                                                   Int_t neventsseen,
                                                   Int_t neventsused,
                                                   const AliMUONRecoParam& recoParam)
{
  /// Normalize and put some text on the readout error histogram
  /// Note in particular the treatment of tokenlost errors !
  
  hrostatusnorm.Reset();
  
  AliMUONVQAChecker::ECheckCode rv(AliMUONVQAChecker::kInfo);
  
  TObjArray messages;
  messages.SetOwner(kTRUE);
  
  if ( neventsseen < NOTENOUGHEVENTLIMIT )
  {
    messages.Add(new TObjString(NOTENOUGHEVENTMESSAGE));
  }
  else
  {
    hrostatusnorm.Add(&hrostatus,100.0/neventsseen);
    hrostatusnorm.SetOption("TEXT45"); // note : cannot use HIST option, otherwise the associated function (i.e. the tpavetext) is not drawn...
    hrostatusnorm.SetMinimum(0.0);
    hrostatusnorm.SetMaximum(100.0);
    
    Double_t tokenLost = hrostatusnorm.GetBinContent(hrostatusnorm.FindBin(1.0*AliMUONQAIndices::kTrackerRawNofTokenLostErrors));
    
    if ( tokenLost > recoParam.TokenLostLimit() )
    {
      rv = AliMUONVQAChecker::kError;
      
      messages.Add(new TObjString("There are some token lost errors !"));
      messages.Add(new TObjString("PLEASE CHECK THE BUSY TIME FOR MUON !"));
      messages.Add(new TObjString("If above 5 ms please have the MUON expert"));
      messages.Add(new TObjString("check the following bus patches :"));
      
      for ( Int_t i = 1; i <= hbuspatchtokenerrors.GetNbinsX(); ++i ) 
      {
        if ( hbuspatchtokenerrors.GetBinContent(i) > 0 ) 
        {
          messages.Add(new TObjString(Form("BP %4d",i)));
        }
      }
    }
    
    if ( hrostatusnorm.GetBinContent(hrostatusnorm.FindBin(AliMUONQAIndices::kTrackerRawNofEmptyEvents)) > 25.0 )
    {
      messages.Add(new TObjString("Too many empty events !"));
      messages.Add(new TObjString(NOTIFYEXPERTMESSAGE));
      rv = AliMUONVQAChecker::kFatal;      
    }    
  }
   
  SetupHisto(neventsseen,neventsused,messages,hrostatusnorm,rv,"text45");
  
  ShowTrueValue(hrostatusnorm,AliMUONQAIndices::kTrackerRawNofTokenLostErrors);
  ShowTrueValue(hrostatusnorm,AliMUONQAIndices::kTrackerRawNofParityErrors);
  ShowTrueValue(hrostatusnorm,AliMUONQAIndices::kTrackerRawNofPaddingErrors);
  ShowTrueValue(hrostatusnorm,AliMUONQAIndices::kTrackerRawNofGlitchErrors);
  
  return rv;
}

//______________________________________________________________________________
AliMUONVQAChecker::ECheckCode 
AliMUONTrackerQAChecker::BeautifyEventsizeHistograms(TH1& heventsize,
                                                     TH1& heventsizeperevent,
                                                     Int_t neventsseen,
                                                     Int_t neventsused,
                                                     const AliMUONRecoParam& recoParam)
{
  /// Normalize and put some text on the event size histogram

  AliMUONVQAChecker::ECheckCode rv(AliMUONVQAChecker::kInfo);

  heventsizeperevent.Reset();

  TObjArray messages;
  messages.SetOwner(kTRUE);
  
  if ( neventsseen < NOTENOUGHEVENTLIMIT )
  {
    messages.Add(new TObjString(NOTENOUGHEVENTMESSAGE));
  }
  else
  {
    heventsizeperevent.Add(&heventsize,1.0/neventsseen/1024.0);
    heventsizeperevent.SetMinimum(0);
    
    Double_t totalEventSizePerEvent = heventsizeperevent.Integral();
    
    TString msg;
    TString action;
    
    if ( totalEventSizePerEvent > recoParam.EventSizeHardLimit() ) 
    {
      rv = AliMUONVQAChecker::kError;
      msg = "That is really too high.";
      action = NOTIFYEXPERTMESSAGE;
    }
    else if ( totalEventSizePerEvent > recoParam.EventSizeSoftLimit() ) 
    {
      msg = "That is a bit high.";
      action = "Please keep an eye on it.";
      rv = AliMUONVQAChecker::kWarning;
    }
    else 
    {
      rv = AliMUONVQAChecker::kInfo;
    }
    
    messages.Add(new TObjString(Form("<MCH event size> %5.1f KB/event\n",totalEventSizePerEvent)));
    if (msg.Length()>0)
    {
      messages.Add(new TObjString(msg));
      messages.Add(new TObjString(action));
    }
  }
  
  SetupHisto(neventsseen,neventsused,messages,heventsizeperevent,rv);
  
  return rv;
}



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