ROOT logo
//--------------------------------------------------------------------------
// Macro for QA monitoring.
//
// In case it is not run with full aliroot, it needs the following libraries to compile:
//  - libSTEERBase.so
//  - libESD.so
//  - libAOD.so
//  - libANALYSIS.so
//  - libANALYSISalice.so
//  - libCORRFW.so
//  - libPWGmuon.so
//
// TString includePath = "-I${ALICE_ROOT}/PWGmuon ";  gSystem->SetIncludePath(includePath.Data());
//
// The macro reads results of the QA task and produce monitoring plots.
//
// Authors: Cynthia Hadjidakis - IPN Orsay
// QA histos from counters (event, track) and run per run histos
// To be done:
// - reorganize last part (reading and extracting info from run per run histos)
// - remove trigger selection when muon QA task modified (now a selection is done one triggers' name)
//--------------------------------------------------------------------------

#if !defined(__CINT__) || defined(__MAKECINT__)

#include <Riostream.h>
// ROOT includes
#include "TEnv.h"
#include "TMath.h"
#include "TGrid.h"
#include "TGridResult.h"
#include "THashList.h"
#include "TFile.h"
#include "TH1.h"
#include "TH2.h"
#include "TF1.h"
#include "TSystem.h"
#include "TStyle.h"
#include "TCanvas.h"
#include "TPad.h"
#include "TLegend.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TFileMerger.h"
// ALIROOT includes
#include "AliCounterCollection.h"
#endif

Int_t GetRunNumber(TString);
TString GetRunList(const char *runList, TObjArray *runs);
Bool_t MergeOutputs(const char*,const char*);
Bool_t GetTriggerLists(const char *triggerList, TString listFromContainer, TObjArray *triggersB=0, TObjArray *triggersShortName=0);
void SetCanvas(TCanvas *canvas, Int_t logy=1);
TH1* ProcessHisto( AliCounterCollection* counter, TString variable, TString selection, TString hName="", TString xName="", TString yName="", Int_t color=1);
TH2* ProcessHisto2D( AliCounterCollection* counter, TString hVariable, TString hVariable2, TString hSelection, TString hName);
Int_t GetIndex(TObjArray *triggersB, Int_t trigNr, Int_t centNr);
TCanvas *ProcessCanvasAllTrigger(AliCounterCollection *counter, TString canvasName);
TCanvas *ProcessCanvasTriggerContent(TObjArray *trigName, TObjArray trigNoPS, TObjArray trigWithPS, TString canvasName);
TCanvas *ProcessCanvasRelativeTriggerContent(TObjArray *array, TObjArray trigNoPS, TString canvasName);
TCanvas *ProcessCanvasPhysSelCut(TObjArray *triggersB, TObjArray trigNoPS, TObjArray trigWithPS, TString canvasName);
TCanvas *ProcessCanvasPhysSelCutCentrality(TObjArray *triggersB, TObjArray trigNoPS, TObjArray trigBWithPS, Int_t trigNr, TString canvasName, TString *legendHeader);
TCanvas *ProcessCanvasCentralityPercentile(TObjArray *triggersB, TObjArray trigNoPS, TObjArray trigWithPS, Int_t trigNr, TString canvasName, TString *legendHeader);
TCanvas *ProcessCanvasTracksoverTrigger(TObjArray *triggersB, TObjArray trigSel, TObjArray trackTracker, TObjArray trackTrigger, TObjArray trackMatched, TObjArray trackAll, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader=""); 
TCanvas *ProcessCanvasTrackMultB(TObjArray *triggersB, TObjArray trigSel, TObjArray trackTracker, TObjArray trackTrigger, TObjArray trackMatched, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader="");
TCanvas *ProcessCanvasRatioTrackB(TObjArray *triggersB, TObjArray trigSel, TObjArray trackTracker, TObjArray trackTrigger, TObjArray trackMatched, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader="");
TCanvas *ProcessCanvasAsymMatched(TObjArray *triggersB, TObjArray trackPosMatched, TObjArray trackNegMatched, TObjArray trackhAllMatched, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader="");
TCanvas *ProcessCanvasHighPtMuons(TObjArray *triggersB, TObjArray trigSel, TObjArray trackMatchedLowPt, TObjArray trackAllMatchedHightPt, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader="");
TCanvas *ProcessCanvasBeamGasMatched(TObjArray *triggersB, TObjArray trackBeamGasMatched, TObjArray trackBeamGasMatchedHighPt, TObjArray trackAllMatched, TObjArray trackMatchedHighPt, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader="");
Bool_t IsHeavyIonCollision(AliCounterCollection *eventCounters);

//loop on centrality
const Int_t kCentBinMax = 4;
TString kCentBinName[kCentBinMax] = {"v0mult:any/","v0mult:low,int,high/","v0mult:low/","v0mult:high/"};
TString kCentLegendName[kCentBinMax] ={"all collisions","[0-80%] from V0 amplitude","low mult. [60-80%] from V0 amplitude","high mult. [0-10%] from V0 amplitude"};
TString kCentLegendNameShort[kCentBinMax] ={"all","[0-80%]","[60-80%]","[0-10%]"};

//--------------------------------------------------------------------------
void PlotMuonQA(const char* baseDir, const char* runList = 0x0, const char * triggerList = 0x0, Bool_t selectPhysics = kFALSE, const char *LHCPeriod = "LHC11c", const char *QAFileName = "QAresults.root") {
	
  /// Macro for QA monitoring.
  /// Example: baseDir = "alien:///alice/cern.ch/user/p/ppillot/pp7TeV/LHC10d/MuonQA/pass1/results/".
  /// If runList != 0x0: only the given runs will be used. Otherwise use all runs found in baseDir.
  /// If triggerList !=0x0: only the given triggers are displayed. Otherwise use the default list of triggers (see GetTriggerLists)
	
#if defined(__CINT__) && !defined(__MAKECINT__)
  gSystem->Load("libTree");
  gSystem->Load("libGeom");
  gSystem->Load("libVMC");
  gSystem->Load("libPhysics");
  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libAOD");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libCORRFW");
  gSystem->Load("libPWGHFbase");
  gSystem->Load("libPWGmuon");
#endif
  
  // Cosmetics and configuration
  gStyle->SetFillColor(10);
  gStyle->SetPadGridX(kTRUE);
  gStyle->SetPadGridY(kTRUE);
  gStyle->SetPadRightMargin(0.01);
  
  TString OutFileName = "QA_";  OutFileName += LHCPeriod;
  TString OutFileNamePDF=  OutFileName.Data();  OutFileNamePDF+= ".pdf";
  TString OutFileNamePDF_open = OutFileNamePDF.Data(); OutFileNamePDF_open += "[";  
  TString OutFileNamePDF_close= OutFileNamePDF.Data(); OutFileNamePDF_close += "]";  
  TString OutFileNameROOT=  OutFileName.Data();  OutFileNameROOT+= ".root";
  
  Int_t PRINTSTAT = 1;
  Int_t kCMUS = 1;

  if (0){ // Equivalent to the fast read option
    gEnv->SetValue("XNet.ConnectTimeout",10);
    gEnv->SetValue("XNet.RequestTimeout",10);
    gEnv->SetValue("XNet.MaxRedirectCount",2);
    gEnv->SetValue("XNet.ReconnectTimeout",10);
    gEnv->SetValue("XNet.FirstConnectMaxCnt",1);
  }
  
  TH1::AddDirectory(kFALSE);
  
  TString alienBaseDir = baseDir;
  
  if (alienBaseDir.Contains("alien:") && !TGrid::Connect("alien://")) {
    Error("MergeQA","cannot connect to grid");
    return;
  }
  
  cout<<"//---------------------------------- //"<<endl;
  cout<<"//          Run selection            //"<<endl;
  cout<<"//---------------------------------- //"<<endl;
  
  TObjArray *runs = new TObjArray();
  runs->SetOwner(kTRUE);
  TString selectRuns = GetRunList(runList,runs);
	
  // physics selection
  TString select = selectPhysics ? "selected:yes" : "";
  	
  cout<<"//---------------------------------- //"<<endl;
  cout<<"//        Get global counter        //"<<endl;
  cout<<"//---------------------------------- //"<<endl;
  
  TString mergedFilename = Form("%s/%s", baseDir,QAFileName);
  if (runList) MergeOutputs(runList, mergedFilename);

  TFile *globalFile = TFile::Open(mergedFilename.Data());
  if (!globalFile || ! globalFile->IsOpen()) {
    Error("PlotQA", "failed to open file: %s", mergedFilename.Data());
    return;
  }
  globalFile->Cd("MUON_QA");
  
  TString selection;
	
  // get counters
  AliCounterCollection* eventCounters = static_cast<AliCounterCollection*>(globalFile->FindObjectAny("eventCounters"));
  AliCounterCollection* trackCounters = static_cast<AliCounterCollection*>(globalFile->FindObjectAny("trackCounters"));

  // run list from counters
  if (!runList) selectRuns += trackCounters->GetKeyWords("run");
	
  cout<<"//---------------------------------- //"<<endl;
  cout<<"//        Trigger selection          //"<<endl;
  cout<<"//---------------------------------- //"<<endl;

  TObjArray *triggersB, *triggersShortName;
  triggersB = new TObjArray();
  triggersB->SetOwner();
  triggersShortName = new TObjArray();
  triggersShortName->SetOwner();

  TString listFromContainer = eventCounters->GetKeyWords("trigger");
  Bool_t success = GetTriggerLists(triggerList, listFromContainer, triggersB, triggersShortName);
  if(!success) return;
	
  cout<<"//---------------------------------- //"<<endl;
  cout<<"//      Set collision type ?          //"<<endl;
  cout<<"//---------------------------------- //"<<endl;

  Bool_t isHeavyIon = kTRUE;
  isHeavyIon = IsHeavyIonCollision(eventCounters);
	
  cout<<"//---------------------------------- //"<<endl;
  cout<<"//        Trigger plots              //"<<endl;
  cout<<"//---------------------------------- //"<<endl;
	
  //plot all trigger from event counters without any selection
  TString CanvasName = "AllTriggers";
  TCanvas *cAll = ProcessCanvasAllTrigger(eventCounters, CanvasName);

  cout<<"//---------------------------------- //"<<endl;
  cout<<"//   Processing event counters       //"<<endl;
  cout<<"//---------------------------------- //"<<endl;

  //declare a default canvas c1 
  CanvasName = "c1";
  TCanvas *c1 = new TCanvas(CanvasName.Data(),CanvasName.Data());
  c1->cd();
  
  Int_t nCentBin = ( isHeavyIon ) ? kCentBinMax : 1;
  TString selectionCent;
	       
  Int_t *colorTab = new Int_t[triggersB->GetEntriesFast()];
  Int_t const colorNrFirst = 8;
  Int_t colorIndex = 0;
  Int_t colorTabFirst[colorNrFirst] = {kGray+2,kRed,kBlue,kGreen,kOrange,kCyan,kMagenta,kYellow};
  for ( Int_t i = 0; i < triggersB->GetEntriesFast(); i++ ) {
    colorTab[i] = colorTabFirst[i] + colorIndex;
    if ( i%colorNrFirst == 0 ) colorIndex++;
  } 
  TArrayI *colorInd = new TArrayI( triggersB->GetEntriesFast() );

  for ( Int_t i = 0; i < triggersB->GetEntriesFast(); i++ ) colorInd->AddAt(colorTab[i],i); 
  
  Int_t nTrig = triggersB->GetEntriesFast();

  TObjArray trigNoPS(nTrig*nCentBin);
  TObjArray trigWithPS(nTrig*nCentBin);
  TObjArray trigWithPST0Flag(nTrig*nCentBin);
  TObjArray trigWithPST0SPDFlag(nTrig*nCentBin);

  TObjArray trigSel;
  TObjArray trackTrigger(nTrig*nCentBin); 
  TObjArray trackTracker(nTrig*nCentBin); 
  TObjArray trackMatched(nTrig*nCentBin);
  TObjArray trackAll(nTrig*nCentBin); 

  TObjArray trackAllMatched(nTrig*nCentBin); //matched tracks + additional geometrical cut
  TObjArray trackMatchedLowPt(nTrig*nCentBin);
  TObjArray trackMatchedHighPt(nTrig*nCentBin);

  TObjArray trackPosMatched(nTrig*nCentBin);
  TObjArray trackNegMatched(nTrig*nCentBin);

  TObjArray trackBeamGasMatched(nTrig*nCentBin);
  TObjArray trackBeamGasMatchedHighPt(nTrig*nCentBin);

  cout<<Form("Processing for %d triggers...",triggersB->GetEntriesFast()-1)<<endl;
    
  //loop on centrality
  for ( Int_t iCentBin = 0; iCentBin < nCentBin; iCentBin++){
    selectionCent = kCentBinName[iCentBin];
		
    //Loop on trigger (last is all triggers)
    for(Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast(); iTrig++){
    
      TString histoNameBase = "h_trig", histoName;
      histoNameBase+= iTrig+1;
 		
      Int_t index = GetIndex(triggersB,iTrig,iCentBin);

      TH1* histo = 0;

      TString triggerName = ( (TObjString*) triggersB->At(iTrig) )->GetString();
      if(triggerName.EqualTo(" ")) continue;
      // Histo trigger without Phys. Sel. 
      selection = selectionCent; selection += Form("trigger:%s/%s", triggerName.Data(), selectRuns.Data());		
      // cout<<selection<<endl;
      histoName = histoNameBase;
      histoName += "BNoPS";
      histo = (TH1*) ProcessHisto(eventCounters, "run", selection, histoName, "", "Trigger content w/o Phys. Sel.", colorInd->At(iTrig));
      trigNoPS.AddAt(histo,index);
      // Histo trigger with Phys. Sel. 
      selection = selectionCent; selection += Form("trigger:%s/%s/selected:yes", triggerName.Data(), selectRuns.Data());
      histoName = histoNameBase;
      histoName += "BWithPS";
      histo = (TH1*) ProcessHisto(eventCounters, "run", selection, histoName, "", "Trigger content w/ Phys. Sel.", colorInd->At(iTrig));
      trigWithPS.AddAt(histo,index);
    // Histo trigger with Phys. Sel. and T0 pile up not flagged
      selection = selectionCent; selection += Form("trigger:%s/%s/selected:yes/t0pileup:no", triggerName.Data(), selectRuns.Data());
      histoName = histoNameBase;
      histoName += "BWithPST0Flag";
      histo = (TH1*) ProcessHisto(eventCounters, "run", selection, histoName, "", "Trigger content w/ Phys. Sel. and no pile up from T0 flag", colorInd->At(iTrig));
      trigWithPST0Flag.AddAt(histo,index);
    // Histo trigger with Phys. Sel. and T0 + SPD pile up not flagged
      selection = selectionCent; selection += Form("trigger:%s/%s/selected:yes/t0pileup:no/spdpileup:no", triggerName.Data(), selectRuns.Data());
      histoName = histoNameBase;
      histoName += "BWithPST0SPDFlag";
      histo = (TH1*) ProcessHisto(eventCounters, "run", selection, histoName, "", "Trigger content w/ Phys. Sel. and no pile up from T0 and SPD flag", colorInd->At(iTrig));
      trigWithPST0SPDFlag.AddAt(histo,index);
		
      // Histo tracking : Phys. Sel.  is selected or not depending on the macro arguments
      selection = selectionCent; selection += Form("track:triggeronly/trigger:%s/%s/%s", triggerName.Data(), selectRuns.Data(), select.Data());
      histo = (TH1*) ProcessHisto(trackCounters, "run", selection, "");
      trackTrigger.AddAt(histo,index);

      selection = selectionCent; selection += Form("track:trackeronly/trigger:%s/%s/%s", triggerName.Data(), selectRuns.Data(), select.Data());
      histo = (TH1*) ProcessHisto(trackCounters, "run", selection, "");
      trackTracker.AddAt(histo,index);

      selection = selectionCent; selection += Form("track:matched/trigger:%s/%s/%s", triggerName.Data(), selectRuns.Data(), select.Data());
      histo = (TH1*) ProcessHisto(trackCounters, "run", selection, "");
      trackMatched.AddAt(histo,index);
		
      histo = (TH1*) ( (TH1*) trackTrigger.At(index))->Clone("");
      histo->Add( (TH1*) trackTracker.At(index) );
      histo->Add( (TH1*) trackMatched.At(index) );
      trackAll.AddAt(histo,index);

      //for the following, only integrated over centrality
      if ( iCentBin > 0 ) continue;
      
      selection = selectionCent; selection += Form("track:matched/trigger:%s/%s/%s/pt:low/acc:in", triggerName.Data() ,selectRuns.Data(), select.Data());
      histo = (TH1*) ProcessHisto(trackCounters, "run", selection, "");
      trackMatchedLowPt.AddAt(histo,index);

      selection = selectionCent; selection += Form("track:matched/trigger:%s/%s/%s/pt:high/acc:in", triggerName.Data() ,selectRuns.Data(), select.Data());
      histo = (TH1*) ProcessHisto(trackCounters, "run", selection, "");
      trackMatchedHighPt.AddAt(histo,index);

      selection = selectionCent; selection += Form("track:matched/trigger:%s/%s/charge:pos/%s/acc:in",triggerName.Data(), select.Data(),selectRuns.Data());
      histo = (TH1*) ProcessHisto(trackCounters, "run", selection, "");
      trackPosMatched.AddAt(histo,index);
    
      selection = selectionCent; selection += Form("track:matched/trigger:%s/%s/charge:neg/%s/acc:in",triggerName.Data(), select.Data(),selectRuns.Data());
      histo =  (TH1*) ProcessHisto(trackCounters, "run", selection, "");
      trackNegMatched.AddAt(histo,index);

      selection = selectionCent; selection += Form("track:matched/trigger:%s/%s/%s/acc:in",triggerName.Data(), select.Data(),selectRuns.Data());
      histo =  (TH1*) ProcessHisto(trackCounters, "run", selection, "");
      trackAllMatched.AddAt(histo,index);

      selection = selectionCent; selection += Form("track:matched/trigger:%s/%s/%s/acc:in/tagTrack:beamGas",triggerName.Data(), select.Data(),selectRuns.Data());
      histo =  (TH1*) ProcessHisto(trackCounters, "run", selection, "");
      trackBeamGasMatched.AddAt(histo,index);

      selection = selectionCent; selection += Form("track:matched/trigger:%s/%s/%s/acc:in/tagTrack:beamGas/pt:high",triggerName.Data(), select.Data(),selectRuns.Data());
      histo =  (TH1*) ProcessHisto(trackCounters, "run", selection, "");
      trackBeamGasMatchedHighPt.AddAt(histo,index);
    }
  }

  if ( selectPhysics) trigSel = trigWithPS;
  else trigSel = trigNoPS;
	
  //if there is not Beam triggers just stop now
  Int_t count_trigger=0;
  for(Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast(); iTrig++){
    Int_t centBinNr = 0;
    Int_t index = GetIndex(triggersB,iTrig,centBinNr);
    count_trigger += (static_cast<TH1*>(trigNoPS.At(index)))->GetEntries();
  }
  if(count_trigger<=0) return;
	
  Int_t *NumOfBNoPS = new Int_t[nCentBin*nTrig];
  Int_t *NumOfBWithPS = new Int_t[nCentBin*nTrig];
	
  for ( Int_t iCentBin = 0; iCentBin < nCentBin; iCentBin++){
    for ( Int_t iTrig = 0; iTrig < nTrig; iTrig++){
      Int_t index = GetIndex(triggersB,iTrig,iCentBin);
      NumOfBNoPS[index] = (static_cast<TH1*>(trigNoPS.At(index)))->Integral();
      NumOfBWithPS[index] = (static_cast<TH1*>(trigWithPS.At(index)))->Integral();
    }
  }
	
  cout<<"//==================================================================================="<<endl;
  cout<<"// Put all plots in a ps file, easier to publish (Twiki)"<<endl;
  cout<<"//==================================================================================="<<endl;
  
  c1->Print(OutFileNamePDF_open.Data());
  TFile *rootFileOut = TFile::Open(OutFileNameROOT.Data(),"RECREATE");
  rootFileOut->cd();
  TDirectoryFile *dirGlobal = new TDirectoryFile("Global","Global","",(TDirectory*)rootFileOut->GetMotherDir());
  cout<<"dirGlobal mother "<<(dirGlobal->GetMotherDir())->GetName()<<endl;
  //An array of TDirectoryFile
  TObjArray *dirTrigger = new TObjArray();
  dirTrigger->SetOwner();
  TObjArray *dirCent = new TObjArray();
  dirCent->SetOwner();
  for ( Int_t i = 0; i < triggersB->GetEntriesFast()-1 ; i++) {
    TString currTrigName = ( (TObjString*) triggersShortName->At(i) )->GetString();
    TDirectoryFile *dirFile = new TDirectoryFile( currTrigName.Data(),currTrigName.Data(),"",(TDirectory*)rootFileOut->GetMotherDir() );
    dirTrigger->AddLast( dirFile );
    for( Int_t j = 0; j < nCentBin; j++) {
      TString centName = kCentLegendNameShort[j];
      TDirectoryFile *dirFileCent = new TDirectoryFile( centName.Data(),centName.Data(),"",dirFile );
      dirCent->AddLast( dirFileCent );
    }
  }

  cAll->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cAll->Write();
  	
  cout<<"//==================================================================================="<<endl;
  cout<<"// new canvas with the total number of trigger with and without Phys. Sel."<<endl;
  cout<<"//==================================================================================="<<endl;
	
  TCanvas *cTriggerContent = ProcessCanvasTriggerContent(triggersB, trigNoPS, trigWithPS, "TriggerContent");
  cTriggerContent->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cTriggerContent->Write();
  cTriggerContent->Close();

  cout<<"//==================================================================================="<<endl;
  cout<<"// new canvas with the relative content of each trigger w/o physics selection"<<endl;
  cout<<"//==================================================================================="<<endl;
	
  TCanvas *cRelativeTriggerContent = ProcessCanvasRelativeTriggerContent(triggersB, trigNoPS, "RelativeTriggerContent");
  cRelativeTriggerContent->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cRelativeTriggerContent->Write();
  cRelativeTriggerContent->Close();
  

  cout<<"//==================================================================================="<<endl;
  cout<<"// new canvas with effect from physics selection for each trigger "<<endl;
  cout<<"//==================================================================================="<<endl;
	
  TCanvas *cPhysSelCut = 0x0;
  cPhysSelCut = ProcessCanvasPhysSelCut(triggersB, trigNoPS, trigWithPS, "PhysSelCutOnCollTrigger");
  cPhysSelCut->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cPhysSelCut->Write();
  cPhysSelCut->Close();
  rootFileOut->cd();
	
  cout<<"//==================================================================================="<<endl;
  cout<<"// new canvas with effect from T0 pile-up flag for each trigger "<<endl;
  cout<<"//==================================================================================="<<endl;
	
  TCanvas *cPhysSelCutT0Flag = 0x0;
  cPhysSelCutT0Flag = ProcessCanvasPhysSelCut(triggersB, trigNoPS, trigWithPST0Flag, "PhysSelCutOnCollTriggerT0Flag");
  cPhysSelCutT0Flag->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cPhysSelCutT0Flag->Write();
  cPhysSelCutT0Flag->Close();
  rootFileOut->cd();
	

 cout<<"//==================================================================================="<<endl;
  cout<<"// new canvas with effect from T0 + SPD pile-up flag for each trigger "<<endl;
  cout<<"//==================================================================================="<<endl;
	
  TCanvas *cPhysSelCutT0SPDFlag = 0x0;
  cPhysSelCutT0SPDFlag = ProcessCanvasPhysSelCut(triggersB, trigNoPS, trigWithPST0SPDFlag, "PhysSelCutOnCollTriggerT0SPDFlag");
  cPhysSelCutT0SPDFlag->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cPhysSelCutT0SPDFlag->Write();
  cPhysSelCutT0SPDFlag->Close();
  rootFileOut->cd();

  TString canvasName;
  TString triggerName;	
  TString legendHeader="";
	
  if ( isHeavyIon ){

  cout<<"//==================================================================================="<<endl;
  cout<<"// new canvas with effect from physics selection for each trigger and centrality bin (only in heavy-ion) "<<endl;
  cout<<"//==================================================================================="<<endl;

    TCanvas *cPhysSelCutCentrality;
	
    //loop over trigger
    for( Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast(); iTrig++){
      //skip sum of all triggers
      if(iTrig == (triggersB->GetEntriesFast()-1)) continue;

      canvasName = "PhysSel_trigger";
      canvasName += ( (TObjString*) triggersShortName->At(iTrig) )->GetString();
	
      cPhysSelCutCentrality = ProcessCanvasPhysSelCutCentrality(triggersB, trigNoPS, trigWithPS, iTrig, canvasName, kCentLegendNameShort+1);
      cPhysSelCutCentrality->Print(OutFileNamePDF.Data());
      ( (TDirectoryFile*) dirTrigger->At(iTrig) )->cd();
      cPhysSelCutCentrality->Write();		
      cPhysSelCutCentrality->Close();		
    }
  }
  rootFileOut->cd();
	
  if ( isHeavyIon ){
    cout<<"//==================================================================================="<<endl;
    cout<<"// new canvas for centrality percentile check (only in PbPb) "<<endl;
    cout<<"//==================================================================================="<<endl;
   
    TCanvas *cCentralityCheck;
		
    //loop over trigger
    for ( Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast(); iTrig++){
      //skip sum of all triggers
      if ( iTrig == (triggersB->GetEntriesFast()-1) ) continue;
 			
      canvasName = "CentralityCheck_trigger";
      canvasName += ( (TObjString*) triggersShortName->At(iTrig) )->GetString();
			
      cCentralityCheck = ProcessCanvasCentralityPercentile(triggersB,trigNoPS,trigWithPS,iTrig,canvasName,kCentLegendNameShort);

      cCentralityCheck->Print(OutFileNamePDF.Data());
      ( (TDirectoryFile*) dirTrigger->At(iTrig) )->cd();
      cCentralityCheck->Write();
      cCentralityCheck->Close();
    }
  }
  rootFileOut->cd();
	

  cout<<"//==================================================================================="<<endl;
  cout<<"// Ratio of tracks over trigger type (2 canvases) "<<endl;
  cout<<"//==================================================================================="<<endl;

  //Print a canvas per trigger type
  TCanvas *cTracksoverTrigger;
  TCanvas* cTrackMultB;
 	
  //loop over centrality bins
  for ( Int_t iCentBin = 0; iCentBin < nCentBin; iCentBin++){
    if ( isHeavyIon ){
      legendHeader = "for ";
      legendHeader += kCentLegendName[iCentBin];
    }
    else legendHeader ="";
    //loop over triggers
    for(Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast(); iTrig++){
      //skip sum of all triggers
      if( iTrig == (triggersB->GetEntriesFast()-1) ) continue;

      ( (TDirectoryFile*) dirCent->At( iTrig*nCentBin+iCentBin ) )->cd();

      canvasName = "RatioTrackTypes_cent";
      canvasName += iCentBin;
      canvasName +="trigger";
      canvasName += ( (TObjString*) triggersShortName->At(iTrig) )->GetString();
      cTracksoverTrigger = ProcessCanvasTracksoverTrigger(triggersB, trigSel, trackTracker, trackTrigger, trackMatched, trackAll, iTrig, iCentBin, canvasName,legendHeader);
      cTracksoverTrigger->Print(OutFileNamePDF.Data());
      cTracksoverTrigger->Write();
      cTracksoverTrigger->Close();

      canvasName = "TrackMult_cent";
      canvasName += iCentBin;
      canvasName +="trigger";
      canvasName +=( (TObjString*) triggersShortName->At(iTrig) )->GetString();		
      cTrackMultB= ProcessCanvasTrackMultB(triggersB, trigSel, trackTracker, trackTrigger, trackMatched, iTrig, iCentBin, canvasName, legendHeader);
      cTrackMultB->Print(OutFileNamePDF.Data());
      cTrackMultB->Write();
      cTrackMultB->Close();
    }
  }
  rootFileOut->cd();

  cout<<"//===================================================="<<endl;
  cout<<"// Draw matched tracks asymmetry for each trigger "<<endl;
  cout<<"//===================================================="<<endl;
	
  //Print a canvas per trigger type
  TCanvas *cAsymMatched;

  legendHeader = "for all collisions";
  for ( Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast(); iTrig++){
    //skip sum of all triggers
    if ( iTrig == (triggersB->GetEntriesFast()-1) ) continue;
    
    ( (TDirectoryFile*) dirTrigger->At( iTrig ) )->cd();
    
    canvasName = "AsymMatched";
    canvasName +="trigger";
    canvasName +=( (TObjString*) triggersShortName->At(iTrig) )->GetString();
    Int_t iCentBin = 0;
    cAsymMatched = ProcessCanvasAsymMatched(triggersB, trackPosMatched, trackNegMatched, trackAllMatched, iTrig, iCentBin, canvasName,legendHeader);
    cAsymMatched->Print(OutFileNamePDF.Data());
    cAsymMatched->Write();
    cAsymMatched->Close();
  }
  rootFileOut->cd();
  legendHeader = ""; 

  cout<<"//===================================================================="<<endl;
  cout<<"// Draw beam gas contribution to matched tracks for each trigger "<<endl;
  cout<<"//===================================================================="<<endl;
	
  //Print a canvas per trigger type
  TCanvas *cBeamGasMatched;

  //loop over trigger
  for ( Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast(); iTrig++){
    //skip sum of all triggers
    if ( iTrig == (triggersB->GetEntriesFast()-1)) continue;

    ( (TDirectoryFile*) dirTrigger->At(iTrig) )->cd();
    canvasName = "BeamGasMatched";
    canvasName +="trigger";
    canvasName +=( (TObjString*) triggersShortName->At(iTrig) )->GetString();
    Int_t iCentBin = 0;
    cBeamGasMatched= ProcessCanvasBeamGasMatched(triggersB, trackBeamGasMatched, trackBeamGasMatchedHighPt, trackAllMatched, trackMatchedHighPt, iTrig, iCentBin, canvasName,legendHeader);
    cBeamGasMatched->Print(OutFileNamePDF.Data());
    cBeamGasMatched->Write();
    cBeamGasMatched->Close();
  }
  rootFileOut->cd();

  cout<<"//=================================================="<<endl;
  cout<<"// Draw high pt tracks per trigger"<<endl;
  cout<<"//=================================================="<<endl;

  //Print a canvas per trigger type
  TCanvas *cHighPtMuons;
  legendHeader = "for all collisions";
  //loop over trigger
  for ( Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast(); iTrig++){
    //skip sum of all triggers
    if( iTrig == (triggersB->GetEntriesFast()-1)) continue;
    
    ( (TDirectoryFile*) dirTrigger->At( iTrig ) )->cd();
	
    canvasName = "HighPtMuons";
    canvasName +="trigger";
    canvasName +=( (TObjString*) triggersShortName->At(iTrig) )->GetString();

    Int_t iCentBin = 0;
    cHighPtMuons = ProcessCanvasHighPtMuons(triggersB, trigSel, trackMatchedLowPt, trackMatchedHighPt, iTrig, iCentBin, canvasName,legendHeader);
    cHighPtMuons->Print(OutFileNamePDF.Data());
    cHighPtMuons->Write();
    cHighPtMuons->Close();
  }
  rootFileOut->cd();
	
  // close merged file	
  globalFile->Close();
  
  //===================================================================================
  //Print out the number of trigger without and with Phys. Sel.
  //===================================================================================
  
  cout << endl << endl;
  //====================================================
  if (PRINTSTAT){
    if ( triggersB->At(kCMUS) ) { 
    
      // set the format to print labels
      Int_t centBinNr = 0;
      THashList* labels = (static_cast<TH1*>(trigWithPS.At(triggersB->GetEntriesFast()*centBinNr+kCMUS)))->GetXaxis()->GetLabels();
      TString format(Form("\n%%%ds %%9d",0));
      Int_t nRuns=0;
    
      // print value for each label
      TObjString* label = 0x0;
      TIter nextLabel(labels);
      cout << "-------------------------------------------------" << endl;
      cout << "Run Number" << "\t Number of "<< ( (TObjString*) triggersB->At(kCMUS) )->GetString()<<" after Phys. Sel. " << endl ;  
      while ((label = static_cast<TObjString*>(nextLabel()))) {
	nRuns++;
	Int_t bin = (Int_t) label->GetUniqueID();
	printf(format.Data(), label->String().Data(), (Int_t) (static_cast<TH1*>(trigWithPS.At(triggersB->GetEntriesFast()*centBinNr+kCMUS)))->GetBinContent(bin));
      }
      printf("\n========== Total #runs = %d ==============\n",nRuns);
      printf("\n\n");
    
    
      cout << "-------------------------------------------------" << endl;
      cout << "Total statistic" << endl; 
      cout << " " << endl ; 
    
      cout << "-------------------------------------------------------------------" << endl;
      cout<<"Number of triggers w/o Phys. Sel./ w/ Phys. Sel (Phys. Sel. cut in %)"<<endl;
      for(Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast()-1; iTrig++){
	TString triggerNameB = ( (TObjString*) triggersB->At(iTrig) )->GetString();
			
	Int_t	cutinpercent	=	0;
	printf("%10s\t",triggerNameB.Data());
	Int_t index = GetIndex(triggersB,iTrig,centBinNr);
	if(NumOfBNoPS[index]) cutinpercent = (Int_t) ((Double_t)(NumOfBNoPS[index]-NumOfBWithPS[index])/(NumOfBNoPS[index])*100.);
	printf("%5.2e / %.2e (%d%%)\n", (Double_t) NumOfBNoPS[index],(Double_t) NumOfBWithPS[index],cutinpercent);
	cutinpercent = 0;
      }
    } 
  }
  
  //temporary
  //    return;

  
  //--------------------------------------------- //
  //        monitor quantities run per run        //
  //--------------------------------------------- //

  //output histos
  //const Int_t kNHistos =  100;
  //TObjArray outHist(kNHistos);

  Int_t const nMuonTriggerCase = 7;
  TH1F *hMuonTrigger[nMuonTriggerCase];
  TString muonTriggerName[nMuonTriggerCase] = {"Unlike-only","Like-only","Hpt-only","Unlike&Like","Unlike&Hpt","Like&Hpt","Unlike&Like&Hpt"};
  for ( Int_t i = 0; i < nMuonTriggerCase; i++ ) {
    hMuonTrigger[i] = new TH1F(Form("hMuonTrigger_%s", muonTriggerName[i].Data()),Form("Trigger %s per run",muonTriggerName[i].Data()),10000,1,10000);
  }

  TH1F* hTriggerCutVsRun[2], *hTriggerCutWidthVsRun[2];
  for ( Int_t ihisto=0; ihisto<2; ++ihisto ) {
    TString cutName = ( ihisto == 0 ) ? "Lpt" : "Hpt";
    hTriggerCutVsRun[ihisto] = new TH1F(Form("hTriggerCutVsRun%s", cutName.Data()), Form("Trigger %s cut per run", cutName.Data()), 10000,1,10000);
    hTriggerCutWidthVsRun[ihisto] = (TH1F*)hTriggerCutVsRun[ihisto]->Clone(Form("hTriggerCutWidthVsRun%s", cutName.Data()));
  }
  TF1* fitMatchTrig = new TF1("fitMatchTrig","[3] + [0] * ( 1. + TMath::Erf((x - [1]) / [2] / TMath::Sqrt(2.)))", 0.1, 6.);	
  TH1F* hNClustersPerTrackVsRun_Mean = new TH1F("hNClustersPerTrackVsRun_Mean", "averaged number of associated clusters per track;run;<n_{clusters}>",10000,1,10000);
  TH1F* hNClustersPerTrackVsRun_Sigma = new TH1F("hNClustersPerTrackVsRun_Sigma", "dispersion of the number of associated clusters per track;run;#sigma_{n_{clusters}}",10000,1,10000);
  TH1F* hNChamberHitPerTrack_Mean = new TH1F("hNChamberHitPerTrack_Mean", "averaged number of chambers hit per track;run;<n_{chamber hit}>",10000,1,10000);
  TH1F* hNChamberHitPerTrack_Sigma = new TH1F("hNChamberHitPerTrack_Sigma", "dispersion of the number of chambers hit per track;run;#sigma_{n_{chamber hit}}",10000,1,10000);
  TH1F* hChi2_Mean = new TH1F("hChi2_Mean", "averaged normalized #chi^{2} distribution;run;<#chi^{2} / ndf>",10000,1,10000);
  TH1F* hChi2_Sigma = new TH1F("hChi2_Sigma", "dispersion of normalized #chi^{2} distribution;run;#sigma_{#chi^{2} / ndf}",10000,1,10000);
  TH1F* hNClustersInCh[10];
  for (Int_t ich=0; ich<10; ich++){
    hNClustersInCh[ich] = new TH1F(Form("hNClustersInCh%d",ich+1), Form("averaged number of clusters in chamber %d per track;run;<n_{clusters}>",ich+1),10000,1,10000);
  }
  TH1F* hClusterChargeMeanInCh[10], *hClusterChargeSigmaInCh[10];
  for (Int_t ich=0; ich<10; ich++){
    hClusterChargeMeanInCh[ich] = new TH1F(Form("hClusterChargeMeanInCh%d",ich+1), Form("averaged cluster charge -mean- per track in chamber %d",ich+1),10000,1,10000);
    hClusterChargeSigmaInCh[ich] = new TH1F(Form("hClusterChargeSigmaInCh%d",ich+1), Form("averaged cluster charge -sigma- per track in chamber %d",ich+1),10000,1,10000);
  }
  TH1F* hClusterSizeMeanInCh[10], *hClusterSizeSigmaInCh[10];
  for (Int_t ich=0; ich<10; ich++){
    hClusterSizeMeanInCh[ich] = new TH1F(Form("hClusterSizeMeanInCh%d",ich+1), Form("averaged cluster size -mean- per track in chamber %d",ich+1),10000,1,10000);
    hClusterSizeSigmaInCh[ich] = new TH1F(Form("hClusterSizeSigmaInCh%d",ich+1), Form("averaged cluster size -sigma- per track in chamber %d",ich+1),10000,1,10000);
  }

  TH1F* hClusterHitMapXInCh[10];
  for (Int_t ich=0; ich<10; ich++){
    hClusterHitMapXInCh[ich] = new TH1F(Form("hClusterHitMapXInCh%d",ich+1), Form("averaged cluster position distribution in chamber %d;X (cm)",ich+1),10000,1,10000);
  }
  TH1F* hClusterHitMapYInCh[10];
  for (Int_t ich=0; ich<10; ich++){
    hClusterHitMapYInCh[ich] = new TH1F(Form("hClusterHitMapYInCh%d",ich+1), Form("averaged cluster position distribution in chamber %d;Y (cm)",ich+1),10000,1,10000);
  }


  Int_t ibin = 1;
  
  // Are the runs stored locally or in alien?
  Int_t isAlienFile = 0;
  if(alienBaseDir.Contains("alien:")){
    isAlienFile = 1;
    alienBaseDir.ReplaceAll("alien://","");
  }

  cout<<"============================================================"<<endl;
  cout<< "Monitoring quantities run per run: loop over "<<runs->GetEntriesFast()<<" runs."<<endl;
  cout<<"  directory = "<<alienBaseDir.Data()<<endl;
  cout<<"============================================================"<<endl;

  // Loop over runs
  for ( Int_t irun=0; irun<runs->GetEntriesFast(); irun++ ) {
    
    TString run = ((TObjString*)runs->UncheckedAt(irun))->GetString();

    // get the file (or list of files) to be analyzed
    TString command;
    TGridResult *res = 0;
    
    if(isAlienFile){
      command = Form("find %s/ %s/%s", alienBaseDir.Data(), run.Data(), QAFileName);
      res = gGrid->Command(command);
      if (!res) {
	Error("PlotMuonQA","no result for the command: %s",command.Data());
	return;
      }
    }
    else{
      res = new TGridResult();	
      
      command = Form("find %s/*%s/ -name %s | xargs", alienBaseDir.Data(), run.Data(), QAFileName);
      TString foundFiles = gSystem->GetFromPipe(command.Data());
      TObjArray* arr = foundFiles.Tokenize(" ");

      for ( Int_t iarr=0; iarr<arr->GetEntries(); iarr++ ) {
        res->Add(new TObjString(arr->At(iarr)->GetName()));
      }
      delete arr;
    }
    
    // Loop over 'find' results and get next LFN
    TIter nextmap(res);
    TObjString *objs = 0;
    TObject* currObj = 0x0;
    Bool_t searchRunNr = kFALSE;
    if ( !isAlienFile && run.Contains("*") ) searchRunNr = kTRUE;

    //some checks
    while ( ( currObj = nextmap() ) ){
      
      // get the current file url
      if(isAlienFile){
        objs = static_cast<TObjString*>(static_cast<TMap*>(currObj)->GetValue("turl"));
      }
      else{
        objs=static_cast<TObjString*>(currObj);
      }
      
      if (objs->GetString().IsNull()) {
	Error("PlotMuonQA","turl/obj not found for the run %s... SKIPPING", run.Data());
	continue;
      }
    
      if ( searchRunNr ) {
	Int_t runNr = GetRunNumber(objs->GetString());
	if (runNr > 0) run = Form("%i",runNr);
      }
  
      if ( run.IsDigit() && ! selectRuns.Contains(Form("%i",run.Atoi())) ) continue;
      
      // open the outfile for this run
      TFile *runFile = TFile::Open(objs->GetString());
      if (!runFile || ! runFile->IsOpen()) {
	Error("PlotMuonQA","failed to open file: %s", objs->GetName());
	continue;
      }
      runFile->Cd("MUON_QA");
      
      // get interesting histos
      TObjArray* general1 = static_cast<TObjArray*>(runFile->FindObjectAny("general1"));
      TObjArray* general2 = static_cast<TObjArray*>(runFile->FindObjectAny("general2"));
      TObjArray* expert = static_cast<TObjArray*>(runFile->FindObjectAny("expert"));
      
      if (!general1 || !general2 || !expert){
	Error("PlotMuonQA","All objects not here !!! ===> Skipping...for %s",objs->GetName());		
	continue;
      }
      
      TH1* hNClustersPerTrack = static_cast<TH1*>(general1->FindObject("hNClustersPerTrack"));
      TH1* hNChamberHitPerTrack = static_cast<TH1*>(general1->FindObject("hNChamberHitPerTrack"));
      TH1* hChi2 = static_cast<TH1*>(general1->FindObject("hChi2"));
      TH1* hNClustersPerCh = static_cast<TH1*>(general2->FindObject("hNClustersPerCh"));
      TH1 *hClusterChargePerChMean =static_cast<TH1*>(general2->FindObject("hClusterChargePerChMean")); 
      TH1 *hClusterChargePerChSigma =static_cast<TH1*>(general2->FindObject("hClusterChargePerChSigma")); 
      TH1 *hClusterSizePerChMean =static_cast<TH1*>(general2->FindObject("hClusterSizePerChMean")); 
      TH1 *hClusterSizePerChSigma =static_cast<TH1*>(general2->FindObject("hClusterSizePerChSigma")); 
      TH1* hMuonTriggers = static_cast<TH1*>(general1->FindObject("hMuonTriggers"));
      for (Int_t ihisto=0; ihisto<nMuonTriggerCase; ihisto++){
	Int_t val = 0;
	if ( hMuonTriggers ) val = hMuonTriggers->GetBinContent(ihisto+2);
	if ( hMuonTrigger[ihisto]->GetSumw2N() == 0 ) hMuonTrigger[ihisto]->Sumw2();
	hMuonTrigger[ihisto]->SetBinContent(ibin,val);
	hMuonTrigger[ihisto]->SetBinError(ibin,TMath::Sqrt(val));
	hMuonTrigger[ihisto]->GetXaxis()->SetBinLabel(ibin,run.Data());
      }
      TH1* hPtDistrib = static_cast<TH1*>(general1->FindObject("hPt"));
      TH1* hPtDistribLpt = static_cast<TH1*>(general1->FindObject("hPtMatchLpt"));
      TH1* hPtDistribHpt = static_cast<TH1*>(general1->FindObject("hPtMatchHpt"));
      if ( hPtDistrib && hPtDistribLpt && hPtDistribHpt ) {
	if ( hPtDistrib->GetSumw2N() == 0 ) hPtDistrib->Sumw2();
	TH1* histoMatch[2] = {hPtDistribLpt, hPtDistribHpt};
	for ( Int_t ihisto=0; ihisto<2; ++ihisto ) {
	  if ( histoMatch[ihisto]->GetSumw2N() == 0 ) histoMatch[ihisto]->Sumw2();
	  if ( histoMatch[ihisto]->GetEntries() == 0 ) continue;
	  histoMatch[ihisto]->Divide(hPtDistrib);
	  Double_t minEff = 99999., maxEff = -1.;
	  Double_t ptMinFit = 0.1;
	  Double_t ptMaxFit = 6.;
	  Int_t ptBinLow = histoMatch[ihisto]->GetXaxis()->FindBin(ptMinFit);
	  Int_t ptBinHigh = histoMatch[ihisto]->GetXaxis()->FindBin(ptMaxFit);
	  for ( Int_t currBin=ptBinLow; currBin<=ptBinHigh; currBin++ ) {
	    Double_t currEff = histoMatch[ihisto]->GetBinContent(currBin);
	    Double_t currPt = histoMatch[ihisto]->GetXaxis()->GetBinCenter(currBin);
	    if ( currPt < 1.5 && minEff > currEff ) {
	      ptMinFit = currPt;
	      minEff = currEff;
	    }
	    if ( currPt > 0.5 && maxEff < currEff ) {
	      ptMaxFit = currPt;
	      maxEff = currEff;
	    }
	  } // loop on histo bins
	  fitMatchTrig->SetParameters(0.5, 0.5, 0.8, 0.2);
	  fitMatchTrig->SetParLimits(0,0.,1.);
	  fitMatchTrig->SetParLimits(1,0.,5.);
	  fitMatchTrig->SetParLimits(2,0.,5.);
	  fitMatchTrig->SetParLimits(3,0.,0.5);
	  histoMatch[ihisto]->Fit(fitMatchTrig,"RQ0","",ptMinFit,ptMaxFit);          
	  Double_t ptCut = fitMatchTrig->GetParameter(1);
	  Double_t ptCutErr = fitMatchTrig->GetParError(1);
	  Double_t ptCutWidth = fitMatchTrig->GetParameter(2);
	  if ( ptCut < 0 || ptCut > 10. ) {
	    ptCut = ptCutErr = ptCutWidth = 0.;
	  }
	  hTriggerCutVsRun[ihisto]->SetBinContent(ibin, ptCut);
	  hTriggerCutVsRun[ihisto]->SetBinError(ibin, ptCutErr);
	  hTriggerCutWidthVsRun[ihisto]->SetBinContent(ibin, ptCut);
	  hTriggerCutWidthVsRun[ihisto]->SetBinError(ibin, ptCutWidth);
	} // loop on match histos
      }			
      TH2* hClusterHitMapInCh[10];
      for(Int_t ich=0; ich<10; ich++) hClusterHitMapInCh[ich] = static_cast<TH2*>(expert->FindObject(Form("hClusterHitMapInCh%d",ich+1)));
      
      if (!hNClustersPerCh) {
	Warning("PlotMUONQA","File: %s has empty histograms !", objs->GetName());
	hNClustersPerTrackVsRun_Mean->SetBinContent(ibin, 0.);
	hNClustersPerTrackVsRun_Mean->SetBinError(ibin, 1.);
	hNClustersPerTrackVsRun_Sigma->SetBinContent(ibin, 0.);
	hNClustersPerTrackVsRun_Sigma->SetBinError(ibin, 1.);
	hNChamberHitPerTrack_Mean->SetBinContent(ibin, 0.);
	hNChamberHitPerTrack_Mean->SetBinError(ibin, 1.);
	hNChamberHitPerTrack_Sigma->SetBinContent(ibin, 0.);
	hNChamberHitPerTrack_Sigma->SetBinError(ibin, 1.);
	hChi2_Mean->SetBinContent(ibin, 0.);
	hChi2_Mean->SetBinError(ibin, 1.);
	hChi2_Sigma->SetBinContent(ibin, 0.);
	hChi2_Sigma->SetBinError(ibin, 1.);
	for (Int_t ich=0; ich<10; ich++) {
	  hNClustersInCh[ich]->SetBinContent(ibin,0.);
	  hNClustersInCh[ich]->SetBinError(ibin,1.);
	  hClusterHitMapXInCh[ich]->SetBinContent(ibin,0.);
	  hClusterHitMapXInCh[ich]->SetBinError(ibin,1.);
	  hClusterHitMapYInCh[ich]->SetBinContent(ibin,0.);
	  hClusterHitMapYInCh[ich]->SetBinError(ibin,1.);	
	}
	//runFile->Close();
	//continue;
      }
      else {
	// fill monitoring plots
	hNClustersPerTrackVsRun_Mean->SetBinContent(ibin, hNClustersPerTrack->GetMean());
	hNClustersPerTrackVsRun_Mean->SetBinError(ibin, hNClustersPerTrack->GetMeanError());
	hNClustersPerTrackVsRun_Sigma->SetBinContent(ibin, hNClustersPerTrack->GetRMS());
	hNClustersPerTrackVsRun_Sigma->SetBinError(ibin, hNClustersPerTrack->GetRMSError());
	hNChamberHitPerTrack_Mean->SetBinContent(ibin, hNChamberHitPerTrack->GetMean());
	hNChamberHitPerTrack_Mean->SetBinError(ibin, hNChamberHitPerTrack->GetMeanError());
	hNChamberHitPerTrack_Sigma->SetBinContent(ibin, hNChamberHitPerTrack->GetRMS());
	hNChamberHitPerTrack_Sigma->SetBinError(ibin, hNChamberHitPerTrack->GetRMSError());
	hChi2_Mean->SetBinContent(ibin, hChi2->GetMean());
	hChi2_Mean->SetBinError(ibin, hChi2->GetMeanError());
	hChi2_Sigma->SetBinContent(ibin, hChi2->GetRMS());
	hChi2_Sigma->SetBinError(ibin, hChi2->GetRMSError());
	for (Int_t ich=0; ich<10; ich++) {
	  hNClustersInCh[ich]->SetBinContent(ibin,hNClustersPerCh->GetBinContent(ich+1));
	  hNClustersInCh[ich]->SetBinError(ibin,hNClustersPerCh->GetBinError(ich+1));
	  hClusterChargeMeanInCh[ich]->SetBinContent(ibin,hClusterChargePerChMean->GetBinContent(ich+1));
          hClusterChargeMeanInCh[ich]->SetBinError(ibin,hClusterChargePerChMean->GetBinError(ich+1));
	  hClusterChargeSigmaInCh[ich]->SetBinContent(ibin,hClusterChargePerChSigma->GetBinContent(ich+1));
          hClusterChargeSigmaInCh[ich]->SetBinError(ibin,hClusterChargePerChSigma->GetBinError(ich+1));
	  hClusterSizeMeanInCh[ich]->SetBinContent(ibin,hClusterSizePerChMean->GetBinContent(ich+1));
          hClusterSizeMeanInCh[ich]->SetBinError(ibin,hClusterSizePerChMean->GetBinError(ich+1));
	  hClusterSizeSigmaInCh[ich]->SetBinContent(ibin,hClusterSizePerChSigma->GetBinContent(ich+1));
          hClusterSizeSigmaInCh[ich]->SetBinError(ibin,hClusterSizePerChSigma->GetBinError(ich+1));
	  hNClustersInCh[ich]->SetBinContent(ibin,hNClustersPerCh->GetBinContent(ich+1));
          hNClustersInCh[ich]->SetBinError(ibin,hNClustersPerCh->GetBinError(ich+1));
	  hClusterHitMapXInCh[ich]->SetBinContent(ibin,hClusterHitMapInCh[ich]->GetMean(1));
	  hClusterHitMapXInCh[ich]->SetBinError(ibin,hClusterHitMapInCh[ich]->GetMeanError(1));
	  hClusterHitMapYInCh[ich]->SetBinContent(ibin,hClusterHitMapInCh[ich]->GetMean(2));
	  hClusterHitMapYInCh[ich]->SetBinError(ibin,hClusterHitMapInCh[ich]->GetMeanError(2));	  
	}
      }
      
      // set labels
      for ( Int_t ihisto=0; ihisto<2; ++ihisto ) {
        hTriggerCutVsRun[ihisto]->GetXaxis()->SetBinLabel(ibin,run.Data());
        hTriggerCutWidthVsRun[ihisto]->GetXaxis()->SetBinLabel(ibin,run.Data());
      }
      hNClustersPerTrackVsRun_Mean->GetXaxis()->SetBinLabel(ibin, run.Data());
      hNClustersPerTrackVsRun_Sigma->GetXaxis()->SetBinLabel(ibin, run.Data());
      hNChamberHitPerTrack_Mean->GetXaxis()->SetBinLabel(ibin, run.Data());
      hNChamberHitPerTrack_Sigma->GetXaxis()->SetBinLabel(ibin, run.Data());
      hChi2_Mean->GetXaxis()->SetBinLabel(ibin, run.Data());
      hChi2_Sigma->GetXaxis()->SetBinLabel(ibin, run.Data());
      for (Int_t ich=0; ich<10; ich++){
	hNClustersInCh[ich]->GetXaxis()->SetBinLabel(ibin, run.Data());
	hClusterChargeMeanInCh[ich]->GetXaxis()->SetBinLabel(ibin, run.Data());
	hClusterChargeSigmaInCh[ich]->GetXaxis()->SetBinLabel(ibin, run.Data());
	hClusterSizeMeanInCh[ich]->GetXaxis()->SetBinLabel(ibin, run.Data());
	hClusterSizeSigmaInCh[ich]->GetXaxis()->SetBinLabel(ibin, run.Data());
	hClusterHitMapXInCh[ich]->GetXaxis()->SetBinLabel(ibin, run.Data());
	hClusterHitMapYInCh[ich]->GetXaxis()->SetBinLabel(ibin, run.Data());
      }
      
      // close outfile for this run
      runFile->Close();
      ibin++;      
    }
    
    delete res;
  }//end loop over runs
  
  //sort label
  hNClustersPerTrackVsRun_Mean->LabelsOption("a");
  hNClustersPerTrackVsRun_Sigma->LabelsOption("a");
  hNChamberHitPerTrack_Mean->LabelsOption("a");
  hNChamberHitPerTrack_Sigma->LabelsOption("a");
  hChi2_Mean->LabelsOption("a");
  hChi2_Sigma->LabelsOption("a");
  
  for(Int_t ich=0; ich<10; ich++){
    hNClustersInCh[ich]->LabelsOption("a");
    hClusterChargeMeanInCh[ich]->LabelsOption("a");
    hClusterChargeSigmaInCh[ich]->LabelsOption("a");
    hClusterSizeMeanInCh[ich]->LabelsOption("a");
    hClusterSizeSigmaInCh[ich]->LabelsOption("a");
    hClusterHitMapXInCh[ich]->LabelsOption("a");
    hClusterHitMapYInCh[ich]->LabelsOption("a");
  }
  
  TString dirToGo =  OutFileNameROOT.Data(); dirToGo+=":/";
  gDirectory->Cd(dirToGo.Data());
  cout<<"=================================================="<<endl;
  cout<<"Display Mean and Sigma of the number of associated clusters to a track "<<endl;
  cout<<"=================================================="<<endl;
  TLegend *lNClusters = new TLegend(0.75,0.85,0.99,0.99);
  lNClusters->AddEntry(hNClustersPerTrackVsRun_Mean,"clusters","PL");
  lNClusters->AddEntry(hNChamberHitPerTrack_Mean,"chamber hit","PL");
  
  TCanvas* cNClusters = new TCanvas("cNClusters","cNClusters",1200,900);
  cNClusters->Divide(1,2);
  cNClusters->cd(1);
  //hNClustersPerTrackVsRun_Mean->SetMaximum(11);
  hNClustersPerTrackVsRun_Mean->SetMinimum(7);
  hNClustersPerTrackVsRun_Mean->SetStats(kFALSE);
  hNClustersPerTrackVsRun_Mean->GetXaxis()->SetRange(1,ibin-1);
  hNClustersPerTrackVsRun_Mean->GetXaxis()->SetNdivisions(1,kFALSE);
  //hNClustersPerTrackVsRun_Mean->LabelsOption("u");
  hNClustersPerTrackVsRun_Mean->SetLabelSize(0.04);
  hNClustersPerTrackVsRun_Mean->SetTitle("averaged number of associated clusters or of the number of chamber hit per track");
  hNClustersPerTrackVsRun_Mean->SetLineWidth(2);
  hNClustersPerTrackVsRun_Mean->Draw("e");
  hNChamberHitPerTrack_Mean->SetLineColor(kRed);
  hNChamberHitPerTrack_Mean->SetLineWidth(2);
  hNChamberHitPerTrack_Mean->Draw("esame");
  lNClusters->Draw("same");
  
  cNClusters->cd(2);
  //hNClustersPerTrackVsRun_Sigma->SetMaximum(1.1);
  hNClustersPerTrackVsRun_Sigma->SetMinimum(0.4);
  hNClustersPerTrackVsRun_Sigma->SetStats(kFALSE);
  hNClustersPerTrackVsRun_Sigma->GetXaxis()->SetRange(1,ibin-1);
  hNClustersPerTrackVsRun_Sigma->GetXaxis()->SetNdivisions(1,kFALSE);
  //hNClustersPerTrackVsRun_Sigma->LabelsOption("u");
  hNClustersPerTrackVsRun_Sigma->SetLabelSize(0.04);
  hNClustersPerTrackVsRun_Sigma->SetTitle("dispersion of the number of associated clusters or of the number of chamber hit per track");
  hNClustersPerTrackVsRun_Sigma->SetLineWidth(2);
  hNClustersPerTrackVsRun_Sigma->Draw("e");
  hNChamberHitPerTrack_Sigma->SetLineWidth(2);
  hNChamberHitPerTrack_Sigma->SetLineColor(kRed);
  hNChamberHitPerTrack_Sigma->Draw("esame");
  lNClusters->Draw("same");
  
  cNClusters->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cNClusters->Write();
  
  cout<<"=================================================="<<endl;
  cout<<" Display average number of cluster per chamber "<<endl;
  cout<<"=================================================="<<endl;

  TLegend *lNClustersPerCh = new TLegend(0.92,0.45,0.99,0.99);
  TCanvas* cNClustersPerCh = new TCanvas("cNClustersPerCh","cNClustersPerCh",1200,900);
  cNClustersPerCh->cd();
  cNClustersPerCh->SetRightMargin(0.1);
  hNClustersInCh[0]->SetStats(kFALSE);
  hNClustersInCh[0]->GetXaxis()->SetRange(1,ibin-1);
  hNClustersInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);
  //hNClustersInCh[0]->LabelsOption("u");
  hNClustersInCh[0]->SetLabelSize(0.02);
  hNClustersInCh[0]->SetTitle("averaged number of clusters in chamber i per track");
  hNClustersInCh[0]->SetMaximum(1.2);
  hNClustersInCh[0]->SetMinimum(0.01);
  for (Int_t ich=0; ich<10; ich++) {
    hNClustersInCh[ich]->SetLineColor(ich+1+ich/9);
    hNClustersInCh[ich]->SetLineWidth(2);
    if (ich == 0) hNClustersInCh[ich]->Draw("e");
    else hNClustersInCh[ich]->Draw("esame");
    lNClustersPerCh->AddEntry(hNClustersInCh[ich],Form("ch%d",ich+1),"PL");
  }
  lNClustersPerCh->Draw("same");
  
  cNClustersPerCh->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cNClustersPerCh->Write();

  cout<<"=================================================="<<endl;
  cout<<" Display average cluster charge per chamber "<<endl;
  cout<<"=================================================="<<endl;                                                                   
       
  TLegend *lClusterChargePerCh = new TLegend(0.92,0.45,0.99,0.99);
  TCanvas* cClusterChargePerCh = new TCanvas("cClustersChargePerCh","cClustersChargePerCh",1200,900);
  cClusterChargePerCh->SetRightMargin(0.1);
  cClusterChargePerCh->Divide(1,2);

  cClusterChargePerCh->cd(1);
  hClusterChargeMeanInCh[0]->SetStats(kFALSE);
  hClusterChargeMeanInCh[0]->GetXaxis()->SetRange(1,ibin-1);
  hClusterChargeMeanInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);
  //hClusterChargeInCh[0]->LabelsOption("u"); 
  hClusterChargeMeanInCh[0]->SetLabelSize(0.04);
  hClusterChargeMeanInCh[0]->SetTitle("Cluster charge mean (fC) per track in chamber i");
  hClusterChargeMeanInCh[0]->SetMaximum(150);
  hClusterChargeMeanInCh[0]->SetMinimum(30);
  for (Int_t ich=0; ich<10; ich++) {
    hClusterChargeMeanInCh[ich]->SetLineColor(ich+1+ich/9);
    hClusterChargeMeanInCh[ich]->SetLineWidth(2);
    if (ich == 0) hClusterChargeMeanInCh[ich]->Draw("e");
    else hClusterChargeMeanInCh[ich]->Draw("esame");
    lClusterChargePerCh->AddEntry(hClusterChargeMeanInCh[ich],Form("ch%d",ich+1),"PL");
  }
  lClusterChargePerCh->Draw("same");

  cClusterChargePerCh->cd(2);
  hClusterChargeSigmaInCh[0]->SetStats(kFALSE);
  hClusterChargeSigmaInCh[0]->GetXaxis()->SetRange(1,ibin-1);
  hClusterChargeSigmaInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);
  //hClusterChargeInCh[0]->LabelsOption("u");                                                                               
  hClusterChargeSigmaInCh[0]->SetLabelSize(0.04);
  hClusterChargeSigmaInCh[0]->SetTitle("Cluster charge sigma per track in chamber i");
  hClusterChargeSigmaInCh[0]->SetMaximum(250);
  hClusterChargeSigmaInCh[0]->SetMinimum(50);
  for (Int_t ich=0; ich<10; ich++) {
    hClusterChargeSigmaInCh[ich]->SetLineColor(ich+1+ich/9);
    hClusterChargeSigmaInCh[ich]->SetLineWidth(2);
    if (ich == 0) hClusterChargeSigmaInCh[ich]->Draw("e");
    else hClusterChargeSigmaInCh[ich]->Draw("esame");
  }
  lClusterChargePerCh->Draw("same");

  cClusterChargePerCh->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cClusterChargePerCh->Write();

  cout<<"=================================================="<<endl;
  cout<<" Display average cluster size per chamber     "<<endl;
  cout<<"=================================================="<<endl;

  TLegend *lClusterSizePerCh = new TLegend(0.92,0.45,0.99,0.99);
  TCanvas* cClusterSizePerCh = new TCanvas("cClustersSizePerCh","cClustersSizePerCh",1200,900);
  cClusterSizePerCh->SetRightMargin(0.1);
  cClusterSizePerCh->Divide(1,2);

  cClusterSizePerCh->cd(1);
  hClusterSizeMeanInCh[0]->SetStats(kFALSE);
  hClusterSizeMeanInCh[0]->GetXaxis()->SetRange(1,ibin-1);
  hClusterSizeMeanInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);

  hClusterSizeMeanInCh[0]->SetLabelSize(0.04);
  hClusterSizeMeanInCh[0]->SetTitle("Cluster size mean (npads) per track in chamber i");
  hClusterSizeMeanInCh[0]->SetMaximum(18);
  hClusterSizeMeanInCh[0]->SetMinimum(0);
  for (Int_t ich=0; ich<10; ich++) {
    hClusterSizeMeanInCh[ich]->SetLineColor(ich+1+ich/9);
    hClusterSizeMeanInCh[ich]->SetLineWidth(2);
    if (ich == 0) hClusterSizeMeanInCh[ich]->Draw("e");
    else hClusterSizeMeanInCh[ich]->Draw("esame");
    lClusterSizePerCh->AddEntry(hClusterSizeMeanInCh[ich],Form("ch%d",ich+1),"PL");
  }
  lClusterSizePerCh->Draw("same");

  cClusterSizePerCh->cd(2);
  hClusterSizeSigmaInCh[0]->SetStats(kFALSE);
  hClusterSizeSigmaInCh[0]->GetXaxis()->SetRange(1,ibin-1);
  hClusterSizeSigmaInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);

  hClusterSizeSigmaInCh[0]->SetLabelSize(0.04);
  hClusterSizeSigmaInCh[0]->SetTitle("Cluster size sigma (npads) per track in chamber i");
  hClusterSizeSigmaInCh[0]->SetMaximum(7);
  hClusterSizeSigmaInCh[0]->SetMinimum(0);
  for (Int_t ich=0; ich<10; ich++) {
    hClusterSizeSigmaInCh[ich]->SetLineColor(ich+1+ich/9);
    hClusterSizeSigmaInCh[ich]->SetLineWidth(2);
    if (ich == 0) hClusterSizeSigmaInCh[ich]->Draw("e");
    else hClusterSizeSigmaInCh[ich]->Draw("esame");
  }
  lClusterSizePerCh->Draw("same");

  cClusterSizePerCh->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cClusterSizePerCh->Write();


  cout<<"=================================================="<<endl;
  cout<<"Display average X and Y position of clusters per chamber"<<endl;
  cout<<"=================================================="<<endl;
  TLegend *lClusterHitMapPerCh = new TLegend(0.92,0.45,0.99,0.99);
  TCanvas* cClusterHitMapPerCh = new TCanvas("cClusterHitMapPerCh","cClusterHitMapPerCh",1200,900);
  cClusterHitMapPerCh->Divide(1,2);
  cClusterHitMapPerCh->GetPad(1)->SetRightMargin(0.1);
  cClusterHitMapPerCh->GetPad(2)->SetRightMargin(0.1);
	
  cClusterHitMapPerCh->cd(1);
  hClusterHitMapXInCh[0]->SetStats(kFALSE);
  hClusterHitMapXInCh[0]->GetXaxis()->SetRange(1,ibin-1);
  hClusterHitMapXInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);
  //hNClustersInCh[0]->LabelsOption("u");
  hClusterHitMapXInCh[0]->SetLabelSize(0.04);
  hClusterHitMapXInCh[0]->SetTitle("<X> of clusters - associated to a track - in chamber i");
  hClusterHitMapXInCh[0]->SetMaximum(30);
  hClusterHitMapXInCh[0]->SetMinimum(-30);
  for (Int_t ich=0; ich<10; ich++) {
    hClusterHitMapXInCh[ich]->SetLineColor(ich+1+ich/9);
    hClusterHitMapXInCh[ich]->SetLineWidth(2);
    if (ich == 0) hClusterHitMapXInCh[ich]->Draw("e");
    else hClusterHitMapXInCh[ich]->Draw("esame");
    
    lClusterHitMapPerCh->AddEntry(hClusterHitMapXInCh[ich],Form("ch%d",ich+1),"PL");
  }
  lClusterHitMapPerCh->Draw("same");
  
  cClusterHitMapPerCh->cd(2);
  hClusterHitMapYInCh[0]->SetStats(kFALSE);
  hClusterHitMapYInCh[0]->GetXaxis()->SetRange(1,ibin-1);
  hClusterHitMapYInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);
  //hNClustersInCh[0]->LabelsOption("u");
  hClusterHitMapYInCh[0]->SetLabelSize(0.04);
  hClusterHitMapYInCh[0]->SetTitle("<Y> of clusters - associated to a track - in chamber i");
  hClusterHitMapYInCh[0]->SetMaximum(30);
  hClusterHitMapYInCh[0]->SetMinimum(-30);
  for (Int_t ich=0; ich<10; ich++) {
    hClusterHitMapYInCh[ich]->SetLineColor(ich+1+ich/9);
    hClusterHitMapYInCh[ich]->SetLineWidth(2);
    if (ich == 0) hClusterHitMapYInCh[ich]->Draw("e");
    else hClusterHitMapYInCh[ich]->Draw("esame");
  }
  lClusterHitMapPerCh->Draw("same");

  cClusterHitMapPerCh->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cClusterHitMapPerCh->Write();


  cout<<"=================================================="<<endl;
  cout<<" Display tracks ChiSquare "<<endl;
  cout<<"=================================================="<<endl;
  TCanvas* cChi2 = new TCanvas("cChi2","cChi2",1200,900);
  cChi2->Divide(1,2);
  cChi2->cd(1);
  hChi2_Mean->SetStats(kFALSE);
  hChi2_Mean->GetXaxis()->SetRange(1,ibin-1);
  hChi2_Mean->GetXaxis()->SetNdivisions(1,kFALSE);
  //hChi2_Mean->LabelsOption("u");
  hChi2_Mean->SetLabelSize(0.04);
  hChi2_Mean->SetLineWidth(2);
  hChi2_Mean->Draw("e");

  cChi2->cd(2);
  hChi2_Sigma->SetStats(kFALSE);
  hChi2_Sigma->GetXaxis()->SetRange(1,ibin-1);
  hChi2_Sigma->GetXaxis()->SetNdivisions(1,kFALSE);
  //hChi2_Sigma->LabelsOption("u");
  hChi2_Sigma->SetLabelSize(0.04);
  hChi2_Sigma->SetLineWidth(2);
  hChi2_Sigma->Draw("e");

  cChi2->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cChi2->Write();

  cout<<"=================================================="<<endl;
  cout<<" Display track Lpt/Hpt "<<endl;
  cout<<"=================================================="<<endl;

  if ( hTriggerCutVsRun[0] && hTriggerCutVsRun[1] ) {
    TCanvas* cLptHpt = new TCanvas("cLptHpt","cLptHpt",1200,900);
    cLptHpt->Divide(1,2);
    TLegend* legLptHpt = new TLegend(0.72,0.7,0.9,0.85);
    legLptHpt->SetBorderSize(1);
    for ( Int_t ihisto=0; ihisto<2; ++ihisto) {
      cLptHpt->cd(ihisto+1);
      TH1* currHistos[2] = {hTriggerCutVsRun[ihisto], hTriggerCutWidthVsRun[ihisto]};
      for ( Int_t jhisto=0; jhisto<2; jhisto++ ) {
        currHistos[jhisto]->GetXaxis()->SetRange(1,ibin-1);
        currHistos[jhisto]->GetYaxis()->SetRangeUser(0.,5.);
        currHistos[jhisto]->LabelsOption("a");
        currHistos[jhisto]->SetStats(kFALSE);
        currHistos[jhisto]->GetXaxis()->SetLabelSize(0.04);
        currHistos[jhisto]->SetLineWidth(2);
      }
      hTriggerCutWidthVsRun[ihisto]->SetLineColor(2);
      hTriggerCutWidthVsRun[ihisto]->SetMarkerColor(2);
      hTriggerCutWidthVsRun[ihisto]->SetFillColor(2);
      hTriggerCutWidthVsRun[ihisto]->SetFillStyle(3001);
      hTriggerCutWidthVsRun[ihisto]->Draw("e2");
      hTriggerCutVsRun[ihisto]->Draw("esame");
      if ( ihisto == 0 ) {
        legLptHpt->AddEntry(hTriggerCutWidthVsRun[ihisto],"Fit width","f");
        legLptHpt->AddEntry(hTriggerCutVsRun[ihisto],"pt cut from fit (stat error)","lp");
        legLptHpt->Draw("same");
      }
    }
    cLptHpt->Print(OutFileNamePDF.Data());
    dirGlobal->cd();
    cLptHpt->Write();
 }


  cout<<"=================================================="<<endl;
  cout<<" Display muon trigger "<<endl;
  cout<<"=================================================="<<endl;
  
  TCanvas* cMuonTriggerUnlikeLike = new TCanvas("cMuonTriggerUnlikeLike","cMuonTriggerUnlikeLike",1200,900);
  TCanvas* cMuonTriggerHpt = new TCanvas("cMuonTriggerHpt","cMuonTriggerHpt",1200,900);
  cMuonTriggerHpt->Divide(1,2);
  
  Int_t const ntrig = 3;
  Int_t  const nhist = 3;
  TH1F *hRelMuonTrigger[ntrig], *hTot;
  
  //3 configurations (3x3 histos for 3 canvases)
  Int_t conf[ntrig][nhist]={{0,1,3},{0,2,4},{1,2,5}};
  TString sconf[ntrig][nhist]={{"hTriggerUnlikeOnly","hTriggerLikeOnly","hTriggerUnlikeAndLike"},{"hTriggerUnlikeOnly","hTriggerHptOnly","hTriggerUnlikeAndHpt"},{"hTriggerLikeOnly","hTriggerHptOnly","hTriggerLikeAndHpt"}};
  TString sname;
  
  for ( Int_t i=0; i < ntrig; i++ ) {
    for ( Int_t j=0; j < nhist; j++ ) {
      sname = sconf[i][j]; sname +=(i+1);
      hMuonTrigger[conf[i][j]]->GetXaxis()->SetRange(1,ibin-1);
      hRelMuonTrigger[j] = (TH1F*)hMuonTrigger[conf[i][j]]->Clone(sname);
      hRelMuonTrigger[j]->SetLineColor(j+1);
      hRelMuonTrigger[j]->SetStats(kFALSE);
      hRelMuonTrigger[j]->GetXaxis()->SetNdivisions(1,kFALSE);
      hRelMuonTrigger[j]->LabelsOption("a");                 
      hRelMuonTrigger[j]->SetLabelSize(0.02);
      //hRelMuonTrigger[j]->GetXaxis()->SetLabelSize(0.04);
      hRelMuonTrigger[j]->SetLineWidth(2);
      hRelMuonTrigger[j]->SetTitle("");
      
    }
    sname = "hTot";
    sname += (i+1);
    hTot = (TH1F*) hRelMuonTrigger[0]->Clone(sname);
    hTot->Add(hRelMuonTrigger[1]);
    hTot->Add(hRelMuonTrigger[2],-1);
    hRelMuonTrigger[0]->Add(hRelMuonTrigger[2],-1);
    hRelMuonTrigger[1]->Add(hRelMuonTrigger[2],-1);
    
    for(Int_t j=0; j < nhist; j++) hRelMuonTrigger[j]->Divide(hTot);
    
    if(i==0) cMuonTriggerUnlikeLike->cd();
    else cMuonTriggerHpt->cd(i);
    
    if (i==0) hRelMuonTrigger[i]->SetTitle("Relative muon triggers content");
    TLegend *leg = new TLegend(0.72,0.7,0.9,0.85);
    leg->SetBorderSize(1);
    
    for(Int_t j=0; j<nhist; j++){
     if(j==0){
       hRelMuonTrigger[j]->SetMaximum(1);
       hRelMuonTrigger[j]->SetMinimum(0);
       hRelMuonTrigger[j]->Draw("e");
     }
     else hRelMuonTrigger[j]->Draw("esame");
     sname = sconf[i][j];
     leg->AddEntry(hRelMuonTrigger[j],sname,"l");
    }
    leg->Draw("same");
  }
  cMuonTriggerUnlikeLike->Print(OutFileNamePDF.Data());
  dirGlobal->cd();
  cMuonTriggerUnlikeLike->Write();
  cMuonTriggerHpt->Print(OutFileNamePDF.Data());
  cMuonTriggerHpt->Write(); 
  
  // close the PDF file
 c1->Print(OutFileNamePDF_close.Data());
 c1->Close();
 //Note: closing the file delete all related TDirectoryFile (dirCent and dirTrigger)
 rootFileOut->Close(); 
 

 delete runs;
 delete triggersB;
 delete colorInd;

 return;
 
}

void SetCanvas(TCanvas *canvas, Int_t logy){
  
  if(!canvas) return;
  canvas->SetTopMargin(0.05);
  canvas->SetRightMargin(0.01);
  canvas->SetGridy(1);
  canvas->SetLogy(logy);
	
  return;
}

Bool_t IsHeavyIonCollision(AliCounterCollection *eventCounters){
	
  if(!eventCounters) return kFALSE;
	
  Double_t sum = eventCounters->GetSum("v0mult:low,int,high");
  Bool_t result = kTRUE;
  if(sum<=0) result = kFALSE;
	
  cout<<" Collision type is set to ";
  if( result == kFALSE) cout<<"p-p"<<endl;
  else cout<<"heavy-ion"<<endl;
	
  return result;
}

TCanvas *ProcessCanvasAllTrigger( AliCounterCollection *eventCounters, TString canvasName) {

  if ( !eventCounters ) return 0;

  TString cName = Form("c%s",canvasName.Data());
  TCanvas *cAll = new TCanvas(canvasName.Data(),canvasName.Data());
  cAll->SetLeftMargin(0.18);
  cAll->SetRightMargin(0.18);
  cAll->SetLogz(1);
  cAll->cd();

  TH2* hAll = (TH2*) ProcessHisto2D(eventCounters, "trigger", "run", "run:any" , "");
  for ( Int_t ibin=1; ibin <= hAll->GetYaxis()->GetNbins(); ++ibin ) {
    TString currLabel = hAll->GetYaxis()->GetBinLabel(ibin);
    TObjArray* labelArray = currLabel.Tokenize("-");
    labelArray->SetOwner();
    //cout<<currLabel<<endl;
    TString newLabel = labelArray->At(0)->GetName();
    if ( labelArray->GetEntries() >= 2 ) newLabel = Form("%s-%s", newLabel.Data(), labelArray->At(1)->GetName());
    hAll->GetYaxis()->SetBinLabel(ibin, newLabel.Data());
    delete labelArray;
  }
  hAll->Draw("COLZ");

  return cAll;
}

TCanvas *ProcessCanvasTriggerContent(TObjArray *array, TObjArray trigNoPS, TObjArray trigWithPS, TString canvasName){
 
  if(!array) return 0x0;
	
  TString cName =  "c"; 
  cName += canvasName; 
  TCanvas *cTriggerContent = new TCanvas(canvasName,cName,1200,900);
  SetCanvas(cTriggerContent);
  cTriggerContent->cd();
 
  TLegend* legcTC = new TLegend(0.2,0.15,0.50,0.40);
  legcTC->SetHeader("Physics Selection");
  legcTC->AddEntry(".","applied :","");
 
  for(Int_t iTrig = 0; iTrig < array->GetEntriesFast(); iTrig++){
    //skip the sum of all triggers
    if( iTrig == (array->GetEntriesFast()-1) ) continue;
    TH1* hNoPS = static_cast<TH1*>(trigNoPS.At(iTrig));
    TH1* hWithPS = static_cast<TH1*>(trigWithPS.At(iTrig));
    if (!hNoPS ||!hWithPS) continue;
    hNoPS->SetLineStyle(2);
    if(iTrig==0){
      hNoPS->SetMinimum(1e-3);
      hNoPS->Draw();
      hWithPS->Draw("same");
    }
    else{
      hNoPS->Draw("same");
      hWithPS->Draw("same");
    }
    legcTC->AddEntry(hWithPS,(( (TObjString*) array->At(iTrig) )->GetString()).Data(),"l");
  }
  legcTC->AddEntry(".","not applied :","");
	
  for(Int_t iTrig = 0; iTrig < array->GetEntriesFast(); iTrig++){
   if( iTrig == (array->GetEntriesFast()-1) ) continue;
    TH1* hNoPS = static_cast<TH1*>(trigNoPS.At(iTrig));
    if(hNoPS) legcTC->AddEntry(hNoPS,(( (TObjString*) array->At(iTrig) )->GetString()).Data(),"l");	 
  }
	
  legcTC->Draw("same");
 
  return cTriggerContent;
}

TCanvas *ProcessCanvasRelativeTriggerContent(TObjArray *triggersB, TObjArray trigNoPS, TString canvasName){
	
  if(!triggersB) return 0x0;
	
  TString cName =  "c" ; 
  cName += canvasName;
  TCanvas *cRelativeTriggerContent = new TCanvas(canvasName,cName,1200,900);
  SetCanvas(cRelativeTriggerContent);
  cRelativeTriggerContent->cd();
	
  TObjArray relTrigNoPS(triggersB->GetEntriesFast());
  TLegend* legcRTC = new TLegend(0.2,0.15,0.50,0.40);
	
  TString hName, hTriggerName;
  Int_t indAllTrig = triggersB->GetEntriesFast()-1;
  TH1* hAllTrig = static_cast<TH1*> (trigNoPS.At(indAllTrig));
  if(!hAllTrig) return 0;

  for(Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast()-1; iTrig++){
    hName = "ratio";
    hName += ( (TObjString*) triggersB->At(iTrig) )->GetString();
    TH1* histo = static_cast<TH1*> (trigNoPS.At(iTrig));
    if(!histo) continue;
    TH1* hRatio = (TH1*) histo->Clone(hName);
    hRatio->Divide(hAllTrig);
    hRatio->SetLineStyle(1);
    if(iTrig==0){
      hRatio->SetMaximum(1.5);
      hRatio->SetMinimum(0.001);
      hRatio->SetLabelSize(0.04);
      hRatio->GetYaxis()->SetTitle("Relative trigger content"); 
      hRatio->Draw("E");
    }
    else{
      hRatio->Draw("ESAME");
    }
    relTrigNoPS.AddAt(hRatio,iTrig);
  }

  legcRTC->SetHeader("Physics Selection not applied");	
  for(Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast()-1; iTrig++){
    TH1* hRatio = static_cast<TH1*>(relTrigNoPS.At(iTrig));
    if (!hRatio) continue;
    legcRTC->AddEntry(hRatio,(( (TObjString*) triggersB->At(iTrig) )->GetString()).Data(),"l");
  }
  legcRTC->Draw("same");
	
  return cRelativeTriggerContent;
}

TCanvas *ProcessCanvasPhysSelCut(TObjArray *triggersB, TObjArray trigNoPS, TObjArray trigWithPS, TString canvasName){
	
  if(!triggersB) return 0x0;

  TString cName = "c";
  cName += canvasName;
  TCanvas *c1 = new TCanvas(canvasName,cName,1200,900);
  SetCanvas(c1);
  c1->cd();
	 
  TObjArray trigRatio(triggersB->GetEntriesFast());
  TLegend* legcRTC = new TLegend(0.2,0.15,0.50,0.40);
  TString header = "Physics Selection Cut on selected triggers:";
  if (canvasName.Contains("T0Flag")) header += " and T0 pile-up event selection"; 
  if (canvasName.Contains("T0SPDFlag")) header += " and T0, SPD pile-up event selection"; 
  legcRTC->SetHeader(header.Data());

  TString hName;
  for(Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast()-1; iTrig++){
		
    hName = "ratio";
    hName += ( (TObjString*) triggersB->At(iTrig) )->GetString();
    TH1 * hWithPS = (TH1*) (static_cast<TH1*> (trigWithPS.At(iTrig)));
    TH1 * hNoPS = (TH1*) (static_cast<TH1*> (trigNoPS.At(iTrig)));
    if (!hNoPS || !hWithPS) continue;
    TH1 *hRatio = (TH1*) hWithPS->Clone(hName);
    hRatio->Divide(hNoPS);
    hName = "ratioNoPS";
    hName += ( (TObjString*) triggersB->At(iTrig) )->GetString();

    if(iTrig==0){
      hRatio->SetMaximum(1.5);
      hRatio->SetMinimum(0.05);
      hRatio->SetLabelSize(0.02);
      hRatio->GetYaxis()->SetTitle("Accepted / All from Phys. Sel."); 
      hRatio->SetTitle("Physics Selection Cut"); 
      hRatio->Draw("E");
    }
    else{
      hRatio->Draw("ESAME");
    }
    trigRatio.AddAt(hRatio,iTrig);
  }
	 
  for(Int_t iTrig = 0; iTrig < triggersB->GetEntriesFast()-1; iTrig++){
    TH1 * histo = static_cast<TH1*> (trigRatio.At(iTrig));
    if (!histo) continue;
    legcRTC->AddEntry(histo,(( (TObjString*) triggersB->At(iTrig) )->GetString()).Data(),"l");
  }
  legcRTC->Draw("same");
		
  return c1;
}	

TCanvas *ProcessCanvasPhysSelCutCentrality(TObjArray *triggersB, TObjArray trigNoPS, TObjArray trigWithPS, Int_t trigNr, TString canvasName, TString *legendHeader){
	
  if(!triggersB || !legendHeader) return 0x0;

  TString cName = "c";
  cName += canvasName;
  TCanvas *c1 = new TCanvas(canvasName,cName,1200,900);
  SetCanvas(c1);
  c1->cd();
	
  Int_t const centBinMaxi = kCentBinMax - 1;
  TObjArray trigWithPSRatio(centBinMaxi);
  TLegend* legcRTC = new TLegend(0.2,0.15,0.50,0.40);
  legcRTC->SetHeader("V0 amplitude bins:");
  Int_t colorTab[3] = {kBlack,kRed,kBlue};
  TArrayI colorInd(centBinMaxi);
  for (Int_t i = 0; i < centBinMaxi; i++ ) {
    if(i<3) colorInd.AddAt(colorTab[i],i);
    else colorInd.AddAt(colorTab[2]+i-2,i);
  }

  TString hName;
	
  Float_t yMin = 0.05, yMax = 2;
	
  for(Int_t iCentBin = 0; iCentBin < centBinMaxi; iCentBin++){

    Int_t index = GetIndex(triggersB,trigNr,iCentBin);
    TH1 *hWithPS = static_cast<TH1*> (trigWithPS.At(index));
    TH1 *hNoPS = static_cast<TH1*> (trigNoPS.At(index));
    if (!hNoPS || !hWithPS) continue;
		
    hName = "ratio";
    hName += ( (TObjString*) triggersB->At(trigNr) )->GetString();
    TH1 *hRatio  = (TH1*) hWithPS->Clone(hName);
    hRatio->Divide(hNoPS);
    hRatio->SetLineColor(colorInd.At(iCentBin));
    if ( iCentBin == 0 ) {
      hRatio->SetMaximum(yMax);
      hRatio->SetMinimum(yMin);
      hRatio->SetLabelSize(0.02);
      hRatio->GetYaxis()->SetTitle("Accepted / All from Phys. Sel.");
      TString sTitle = "for ", sTitle2 = (( (TObjString*) triggersB->At(trigNr) )->GetString()).Data();
      if ( !sTitle2.IsNull() ) sTitle += sTitle2;
      else sTitle = "";
      hRatio->SetTitle(Form("Phys. Sel. %s - Multiplicity from V0 amplitude",sTitle.Data()));
      hRatio->Draw("E");
    }
    else{
      hRatio->Draw("ESAME");
    }
    trigWithPSRatio.AddAt(hRatio,iCentBin);
  }
	
  for ( Int_t centBin = 0; centBin < centBinMaxi; centBin++ ){
    TH1 *hRatio = static_cast<TH1*> (trigWithPSRatio.At(centBin));
    if ( !hRatio ) continue;
    legcRTC->AddEntry(hRatio,(legendHeader[centBin]).Data(),"l");
  }
  legcRTC->Draw("same");
	
	
  return c1;
}	

TCanvas *ProcessCanvasCentralityPercentile(TObjArray *triggersB, TObjArray trigNoPS, TObjArray trigWithPS, Int_t trigNr, TString canvasName, TString *legendHeader){
	
  if(!triggersB || !legendHeader) return 0x0;
		
  TString cName = "c";
  cName += canvasName;
  TCanvas *c1 = new TCanvas(canvasName,cName,1200,900);
  SetCanvas(c1,0);
  c1->cd();
	
  Int_t const centBinMaxi = 2;
  TObjArray trigRatio(centBinMaxi), trigRatioNoPS(centBinMaxi);
  TLegend* legcRTC = new TLegend(0.2,0.15,0.50,0.40);
  legcRTC->SetHeader("Physics Selection");
	
 Int_t colorTab[2] = {kRed,kBlue};
 TArrayI colorInd(centBinMaxi);
 for (Int_t i = 0; i < centBinMaxi; i++ ) {
   if(i<2) colorInd.AddAt(colorTab[i],i);
   else colorInd.AddAt(colorTab[1]+i-1,i);
 }
 
 TString hName;
 
 Float_t yMin = 0., yMax = 0.3;
 
 //process centrality bin 0-10% (centBin=3) and 60-80% (centBin=3) and compare it to 0-80% (centBin=1)	
 Int_t centBinMin = 2;
 TH1 *hWithPSAll = static_cast<TH1*> (trigWithPS.At(1*triggersB->GetEntriesFast()+trigNr));
 TH1 *hNoPSAll = static_cast<TH1*> (trigNoPS.At(1*triggersB->GetEntriesFast()+trigNr));
 if (!hNoPSAll || !hWithPSAll) return 0;
 
 for ( Int_t centBin = centBinMin; centBin < centBinMaxi+centBinMin; centBin++){
   
   if ( centBin > kCentBinMax ) continue;
   
   Int_t index = GetIndex(triggersB,trigNr,centBin);
   TH1 *hWithPS = static_cast<TH1*> (trigWithPS.At(index));
   TH1 *hNoPS = static_cast<TH1*> (trigNoPS.At(index));
   if (!hNoPS || !hWithPS) continue;
   
   hName = "ratio";
   hName += ( (TObjString*) triggersB->At(trigNr) )->GetString();
   TH1 *hRatio = (TH1*) hWithPS->Clone(hName);
   hRatio->Divide(hWithPSAll);
   hRatio->Scale(0.8);
   hRatio->SetLineColor(colorInd.At(centBin-centBinMin));
   hName = "ratioNoPS";
   hName += ( (TObjString*) triggersB->At(trigNr) )->GetString();
   TH1 *hRatioNoPS = (TH1*) (hNoPS->Clone(hName));
   hRatioNoPS->Divide(hNoPSAll);
   hRatioNoPS->Scale(0.8);
   hRatioNoPS->SetLineStyle(2);
   hRatioNoPS->SetLineColor(colorInd.At(centBin-centBinMin));

   if ( centBin == centBinMin ){
     hRatio->SetMaximum(yMax);
     hRatio->SetMinimum(yMin);
     hRatio->SetLabelSize(0.02);
     hRatio->GetYaxis()->SetTitle("Centrality percentile check"); 
     TString sTitle = "for ", sTitle2 = (( (TObjString*) triggersB->At(trigNr) )->GetString()).Data();
     if ( !sTitle2.IsNull() ) sTitle += sTitle2;
     else sTitle = "";
     hRatio->SetTitle(Form("Centrality percentile check %s - Multiplicity from V0 amplitude",sTitle.Data()));
     hRatio->Draw("E");
     hRatioNoPS->Draw("EPSAME");
   }
   else{
     hRatio->Draw("ESAME");
     hRatioNoPS->Draw("EPSAME");
   }
   trigRatio.AddAt(hRatio,centBin-centBinMin);
   trigRatioNoPS.AddAt(hRatioNoPS,centBin-centBinMin);
 }
	
  legcRTC->AddEntry(".","applied :","");
  for(Int_t centBin = centBinMin; centBin < centBinMaxi+centBinMin; centBin++){
    TH1 *hRatio = static_cast<TH1*> (trigRatio.At(centBin-centBinMin));
    if (!hRatio) continue;
    legcRTC->AddEntry(hRatio,(legendHeader[centBin]).Data(),"l");
  }
  legcRTC->AddEntry(".","not applied :","");
  for(Int_t centBin = centBinMin; centBin < centBinMaxi+centBinMin; centBin++){
    TH1 *hRatioNoPS = static_cast<TH1*> (trigRatioNoPS.At(centBin-centBinMin));
    if (!hRatioNoPS) continue;
    legcRTC->AddEntry(hRatioNoPS,(legendHeader[centBin]).Data(),"l");
  }
  legcRTC->Draw("same");
	
	
  return c1;
}	

TCanvas *ProcessCanvasTracksoverTrigger(TObjArray *triggersB, TObjArray trigSel, TObjArray trackTracker, TObjArray trackTrigger, TObjArray trackMatched, TObjArray trackAll, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader){
	 
  if(!triggersB || trigNr<0 || centNr<0 ) return 0x0;
	
  Int_t index = GetIndex(triggersB,trigNr,centNr);

  TH1 *hTrackerPerB, *hTriggerPerB, *hMatchedPerB, *hAllTracksPerB, *hTrigSel, *histo;
		 
  TString hName, hNameBase;
  hNameBase =( (TObjString*) triggersB->At(trigNr) )->GetString();
		
  hTrigSel = static_cast<TH1*> (trigSel.At(index));
  if (!hTrigSel) return 0;

  hName = Form("hTrackerPer%s",hNameBase.Data());
  histo = static_cast<TH1*> (trackTracker.At(index));
  if (!histo) return 0;
  hTrackerPerB = (TH1*) histo->Clone(hName);
  if ( hTrackerPerB->GetEntries() ) hTrackerPerB->Divide(hTrigSel);
  hTrackerPerB->SetLineColor(kRed);
	 
  hName = Form("hTriggerPer%s",hNameBase.Data());
  histo = static_cast<TH1*> (trackTrigger.At(index));
  if (!histo) return 0;
  hTriggerPerB = (TH1*) histo->Clone(hName);
  if ( hTriggerPerB->GetEntries() > 0 ) hTriggerPerB->Divide(hTrigSel);
  hTriggerPerB->SetLineColor(kBlue);
	 
  hName = Form("hMatchedPer%s",hNameBase.Data());
  histo = static_cast<TH1*> (trackMatched.At(index));
  if (!histo) return 0;
  hMatchedPerB = (TH1*) histo->Clone(hName);
  if ( hMatchedPerB->GetEntries() > 0 ) hMatchedPerB->Divide(hTrigSel);
  hMatchedPerB->SetLineColor(kViolet);
	 
  hName = Form("hAllTracksPer%s",hNameBase.Data());
  histo = static_cast<TH1*> (trackAll.At(index));
  if (!histo) return 0;
  hAllTracksPerB = (TH1*) histo->Clone(hName);
  if ( hAllTracksPerB->GetEntries() > 0 ) hAllTracksPerB->Divide(hTrigSel);
 
  hAllTracksPerB->SetLineWidth(3);
  hAllTracksPerB->SetLineColor(kBlack);
  hAllTracksPerB->SetTitle(Form("Number of Tracks /%s %s",hNameBase.Data(),legendHeader.Data()));
  hAllTracksPerB->SetMinimum(0.0001);
  if ( hAllTracksPerB->GetEntries() == 0 ) hAllTracksPerB->SetMaximum(0.1);
  hAllTracksPerB->SetLabelSize(0.02);
	
  TString cName = "c";
  cName += canvasName;
  hNameBase = ( (TObjString*) triggersB->At(trigNr) )->GetString();
  cName += hNameBase;	
  TCanvas *cRatioTrackTypesB = new TCanvas(canvasName,cName,1200,900);
  SetCanvas(cRatioTrackTypesB,0);
  cRatioTrackTypesB->cd();
	
  TLegend* legcTTCINT1B; 
	 	 
  hAllTracksPerB->Draw("E");
  hTrackerPerB->Draw("Esame");
  hMatchedPerB->Draw("Esame");
  hTriggerPerB->Draw("Esame");
	 
  legcTTCINT1B = new TLegend(0.70,0.5,0.90,0.70);
  legcTTCINT1B->AddEntry(hAllTracksPerB,"All tracks","l");
  legcTTCINT1B->AddEntry(hTrackerPerB,"Tracking (only) tracks","l");
  legcTTCINT1B->AddEntry(hMatchedPerB,"Matched tracks","l");
  legcTTCINT1B->AddEntry(hTriggerPerB,"Trigger (only) tracks","l");
  legcTTCINT1B->Draw("same");
	
  return cRatioTrackTypesB;
	
}

TCanvas *ProcessCanvasTrackMultB(TObjArray *triggersB, TObjArray trigSel, TObjArray trackTracker, TObjArray trackTrigger, TObjArray trackMatched, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader){

  if( !triggersB || centNr < 0 || trigNr < 0 ) return 0x0;
	
  Int_t index = GetIndex(triggersB,trigNr,centNr);
  TString hNameBase = ( (TObjString*) triggersB->At(trigNr) )->GetString();

  TString cName = Form("c%s%s",canvasName.Data(),hNameBase.Data());
  TCanvas *cTrackMultB = new TCanvas(canvasName,cName,1200,900);
  SetCanvas(cTrackMultB,0);
  cTrackMultB->Divide(1,2);
  cTrackMultB->cd(1);
	
  TH1* hSumTriggerOverB, *hSumTrackerOverB, *hTrigSel, *hTracker, *hTrigger, *hMatched; 
  TString hName; 

  hTrigSel = static_cast<TH1*> (trigSel.At(index));
  if (!hTrigSel) return 0;
  hTracker = static_cast<TH1*> (trackTracker.At(index));
  if (!hTracker) return 0;
  hTrigger = static_cast<TH1*> (trackTrigger.At(index));
  if (!hTrigger) return 0;
  hMatched = static_cast<TH1*> (trackMatched.At(index));
  if (!hMatched) return 0;
  
  hName = Form("hSumTriggerOver%s",hNameBase.Data());
  hSumTriggerOverB = (TH1*) hTrigger->Clone(hName);
  hSumTriggerOverB->Add(hMatched);
  hSumTriggerOverB->Divide(hTrigSel);
  hName = Form("Sum of trigger tracks (matched + trigger-only) / # events in %s %s",hNameBase.Data(),legendHeader.Data());
  hSumTriggerOverB->SetTitle(hName);
  hSumTriggerOverB->SetLabelSize(0.04);
  hSumTriggerOverB->SetLineColor(kBlue);

  hName = Form("hSumTrackerOver%s",hNameBase.Data());
  hSumTrackerOverB = (TH1*) hTracker->Clone(hName);
  hSumTrackerOverB->Add(hMatched);
  hSumTrackerOverB->Divide(hTrigSel);
  hName = Form("Sum of tracker tracks (matched + tracker-only) / # events in %s %s",hNameBase.Data(),legendHeader.Data());
  hSumTrackerOverB->SetTitle(hName);
  //hSumTrackerOverCINT1B->LabelsOption("u");
  hSumTrackerOverB->SetLabelSize(0.04);
  hSumTrackerOverB->SetLineColor(kBlue);
      	
  hSumTriggerOverB->Draw("e");
  cTrackMultB->cd(2);
  hSumTrackerOverB->Draw("e");
	
  return cTrackMultB;
	
}

TCanvas *ProcessCanvasRatioTrackB(TObjArray *triggersB, TObjArray trigSel, TObjArray trackTracker, TObjArray trackTrigger, TObjArray trackMatched, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader) {

  if(!triggersB || trigNr < 0 || centNr < 0 ) return 0x0;
  
  Int_t index = GetIndex(triggersB,trigNr,centNr);
  TString hNameBase =( (TObjString*) triggersB->At(trigNr) )->GetString();
  
  TString cName = Form("c%s%s",canvasName.Data(),hNameBase.Data());
  TCanvas *cRatioTrackB = new TCanvas(canvasName,cName,1200,900);
  SetCanvas(cRatioTrackB,0);
  
  TH1* hTrackerOverTriggerB, *hMatchedOverTriggerB, *hMatchedOverTrackerB, *hTrigSel, *hTracker, *hTrigger, *hMatched; 	
  hTrigSel = static_cast<TH1*> (trigSel.At(index));
  if (!hTrigSel) return 0;
  hTracker = static_cast<TH1*> (trackTracker.At(index));
  if (!hTracker) return 0;
  hTrigger = static_cast<TH1*> (trackTrigger.At(index));
  if (!hTrigger) return 0;
  hMatched = static_cast<TH1*> (trackMatched.At(index));
  if (!hMatched) return 0;
  
  TString hName = Form("hTrackerOverTrigger%s",hNameBase.Data());
  hTrackerOverTriggerB = (TH1*) hTracker->Clone(hName);
  hTrackerOverTriggerB->Divide(hTrigger);
  hName = Form("# tracker tracks / # trigger tracks in %s %s",hNameBase.Data(),legendHeader.Data());
  hTrackerOverTriggerB->SetTitle(hName);
  //hTrackerOverTriggerCINT1B->LabelsOption("u");
  hTrackerOverTriggerB->SetLabelSize(0.02);
  hTrackerOverTriggerB->SetLineColor(kBlue);
    
  hName = Form("hMatchedOverTrigger%s",hNameBase.Data());	
  hMatchedOverTriggerB = (TH1*) hMatched->Clone(hName);
  hMatchedOverTriggerB->Divide(hTrigger);
  hName = Form("# matched tracks / # trigger tracks in %s %s",hNameBase.Data(),legendHeader.Data());
  hMatchedOverTriggerB->SetTitle(hName);
  //hMatchedOverTriggerCINT1B->LabelsOption("u");
  hMatchedOverTriggerB->SetLabelSize(0.02);
  hMatchedOverTriggerB->SetLineColor(kBlue);
    
  hName = Form("hMatchedOverTracker%s",hNameBase.Data());
  hMatchedOverTrackerB = (TH1*) hMatched->Clone(hName);
  hMatchedOverTrackerB->Divide(hTracker);
  hName = Form("# matched tracks / # tracker tracks in %s %s",hNameBase.Data(),legendHeader.Data());
  hMatchedOverTrackerB->SetTitle(hName);
  //hMatchedOverTrackerCINT1B->LabelsOption("u");
  hMatchedOverTrackerB->SetLabelSize(0.02);
  hMatchedOverTrackerB->SetLineColor(kBlue);
  
  cRatioTrackB->Divide(1,3);
  cRatioTrackB->cd(1);
  hTrackerOverTriggerB->Draw("e");	
  cRatioTrackB->cd(2);
  hMatchedOverTriggerB->Draw("e");	
  cRatioTrackB->cd(3);
  hMatchedOverTrackerB->Draw("e");	
    
  return cRatioTrackB;	
}

TCanvas *ProcessCanvasAsymMatched(TObjArray *triggersB, TObjArray trackPosMatched, TObjArray trackNegMatched, TObjArray trackAllMatched, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader) {

  if(!triggersB || trigNr < 0 || centNr < 0 ) return 0x0;
  
  Int_t index = GetIndex(triggersB,trigNr,centNr);
  TString hName, hNameBase = (( (TObjString*) triggersB->At(trigNr) )->GetString());
  
  TString cName = Form("c%s%s",canvasName.Data(),hNameBase.Data());	
  TCanvas *cAsymMatched = new TCanvas(canvasName.Data(),cName,1200,900);
  SetCanvas(cAsymMatched,0);
  cAsymMatched->cd();
	
  TH1* hPosMatched, *hNegMatched, *hAllMatched;
 
  hPosMatched = static_cast<TH1*> (trackPosMatched.At(index));
  if (!hPosMatched) return 0;
  hNegMatched = static_cast<TH1*> (trackNegMatched.At(index));
  if (!hNegMatched) return 0;
  hAllMatched = static_cast<TH1*> (trackAllMatched.At(index));
  if (!hAllMatched) return 0;

  hName = Form("hAsyMatchedFor%s",hNameBase.Data());
  TH1 *hAsymMatched = (TH1*) hPosMatched->Clone(hName); 
  hAsymMatched->Add(hNegMatched,-1);
  hAsymMatched->Divide(hAllMatched);
  hAsymMatched->SetLineColor(kRed);
  hAsymMatched->SetMinimum(-0.3);
  hAsymMatched->SetMaximum(0.3);
  hAsymMatched->SetLabelSize(0.02);
  hName = Form("Matched tracks charge asymmetry for %s with acc. cuts %s",hNameBase.Data(),legendHeader.Data());
  hAsymMatched->SetTitle(hName);
  hAsymMatched->GetYaxis()->SetTitle("Charged tracks asymmetry");  
  hAsymMatched->Draw("EH");
	
  return cAsymMatched;

}

TCanvas *ProcessCanvasHighPtMuons(TObjArray *triggersB, TObjArray trigSel, TObjArray trackMatchedLowPt, TObjArray trackAllMatchedHighPt, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader) {

  if ( !triggersB || trigNr < 0 || centNr < 0 ) return 0x0;
  
  Int_t index = GetIndex(triggersB,trigNr,centNr);
  TString hName, hNameBase = (( (TObjString*) triggersB->At(trigNr) )->GetString());
  
  TString cName = Form("c%s%s",canvasName.Data(),hNameBase.Data());	
  TCanvas *cHighPtMuons = new TCanvas(canvasName.Data(),cName,1200,900);
  SetCanvas(cHighPtMuons,0);
  cHighPtMuons->cd();
  TLegend* legcHPM;
  
  TH1* hRelMatchedLowPt, *hRelMatchedHighPt, *hTrigSel, *hMatchedLowPt, *hAllMatchedHighPt;  
  hTrigSel = static_cast<TH1*> (trigSel.At(index));
  if (!hTrigSel) return 0;
  hMatchedLowPt = static_cast<TH1*> (trackMatchedLowPt.At(index));
  if (!hMatchedLowPt) return 0;
  hAllMatchedHighPt = static_cast<TH1*> (trackAllMatchedHighPt.At(index));
  if (!hAllMatchedHighPt) return 0;

  hName = Form("hMatchedLowPtPer%s ",hNameBase.Data());
  hRelMatchedLowPt = (TH1*) hMatchedLowPt->Clone(hName);
  hRelMatchedLowPt->Divide(hTrigSel);
  hRelMatchedLowPt->SetLineColor(kBlue);
  hRelMatchedLowPt->SetTitle("");
  hName = Form("Ratio per %s ",hNameBase.Data());
  hRelMatchedLowPt->GetYaxis()->SetTitle(hName);
  hRelMatchedLowPt->SetMinimum(0.0001);
  hRelMatchedLowPt->SetLabelSize(0.02);
	 
  hName = Form("hMatchedHighPtPer%s ",hNameBase.Data());
  hRelMatchedHighPt = (TH1*) hAllMatchedHighPt->Clone(hName);
  hRelMatchedHighPt->Divide(hTrigSel);
  hRelMatchedHighPt->SetLineColor(kRed);
	 	 
  hName = Form("Number of matched track per %s (include Vtx and R_{Abs} cuts) %s",hNameBase.Data(),legendHeader.Data());
  hRelMatchedLowPt->SetTitle(hName);
  hRelMatchedLowPt->Draw("E");
  hRelMatchedHighPt->Draw("Esame");
	 
  legcHPM = new TLegend(0.60,0.45,0.98,0.65);
  //legcHPM->SetHeader(hName);
  legcHPM->AddEntry(".","Physics selection applied :","");	
  legcHPM->AddEntry(hRelMatchedLowPt," p_{T} > 1 GeV/c ","l");
  legcHPM->AddEntry(hRelMatchedHighPt," p_{T} >  2 GeV/c ","l");
  legcHPM->Draw("same");
	
  return cHighPtMuons;
}

TCanvas *ProcessCanvasBeamGasMatched ( TObjArray *triggersB, TObjArray trackBeamGasMatched, TObjArray trackBeamGasMatchedHighPt, TObjArray trackAllMatched, TObjArray trackMatchedHighPt, Int_t trigNr, Int_t centNr, TString canvasName,TString legendHeader) {

  if(!triggersB || trigNr < 0 || centNr < 0 )    return 0x0;

  Int_t index = GetIndex(triggersB,trigNr,centNr);
  TString hName, hNameBase = (( (TObjString*) triggersB->At(trigNr) )->GetString());
	
  TString cName = Form("c%s%s",canvasName.Data(),hNameBase.Data());	
  TCanvas *cBeamGasMatched = new TCanvas(canvasName.Data(),cName,1200,900);
  SetCanvas(cBeamGasMatched,0);
  cBeamGasMatched->cd();
		
  TH1* hBeamGasMatched, *hBeamGasMatchedHighPt, *hAllMatched, *hMatchedHighPt;

  hBeamGasMatched = static_cast<TH1*> (trackBeamGasMatched.At(index));
  if (!hBeamGasMatched) return 0;
  hBeamGasMatchedHighPt = static_cast<TH1*> (trackBeamGasMatchedHighPt.At(index));
  if (!hBeamGasMatchedHighPt) return 0;
  hAllMatched = static_cast<TH1*> (trackAllMatched.At(index));
  if (!hAllMatched) return 0;
  hMatchedHighPt = static_cast<TH1*> (trackMatchedHighPt.At(index));
  if (!hMatchedHighPt) return 0;

  hName = Form("hBeamGasMatchedPer%s ",hNameBase.Data());
  TH1 *hRelBeamGasMatched = (TH1*) hBeamGasMatched->Clone(hName);
  hRelBeamGasMatched->Divide(hAllMatched);
  hRelBeamGasMatched->SetLineColor(kBlack);
  hRelBeamGasMatched->SetMinimum(0.0);
  hRelBeamGasMatched->SetMaximum(1.1);
  hRelBeamGasMatched->SetLabelSize(0.02);
  
  hName = Form("hBeamGasMatchedHightPtPer%s ",hNameBase.Data());
  TH1 *hRelBeamGasMatchedHighPt = (TH1*) hBeamGasMatchedHighPt->Clone(hName);
  hRelBeamGasMatchedHighPt->Divide(hMatchedHighPt);
  hRelBeamGasMatchedHighPt->SetLineColor(kRed);

  hName = Form("Identified beam-gas tracks (pxDCA cuts) in matched tracks for %s",hNameBase.Data());
  if(!legendHeader.IsNull()) hName += Form(" %s",legendHeader.Data());
  hRelBeamGasMatched->SetTitle(hName);	 
  hRelBeamGasMatched->GetYaxis()->SetTitle("Relative beam-gas tracks");  
  hRelBeamGasMatched->Draw("EH");
  hRelBeamGasMatchedHighPt->Draw("EHsame");

  TLegend *leg = new TLegend(0.60,0.45,0.98,0.65);
  leg->AddEntry(".","Physics selection applied :","");	
  leg->AddEntry(hRelBeamGasMatched," All p_{T}","l");
  leg->AddEntry(hRelBeamGasMatchedHighPt," p_{T} >  2 GeV/c ","l");
  leg->Draw("same");
	
  return cBeamGasMatched;
}

Int_t GetIndex( TObjArray *triggers, Int_t trigNr, Int_t centNr ) {

  return ( centNr * triggers->GetEntriesFast() + trigNr );
}

TH1* ProcessHisto( AliCounterCollection* counter, TString hVariable, TString hSelection, TString hName, TString xName, TString yName, Int_t color){
  
  
  TH1* h1 = 0x0;
  if( !counter ) return h1;

  //cout<<"ProcessHisto selection "<<hSelection<<endl;
	
  if ( !hSelection.Contains("trigger: /") && !hSelection.Contains("trigger:/") ) h1 = (TH1*) counter->Draw(hVariable,hSelection);
  //cout<<"ProcessHisto selection2 "<<h1<<endl;
  if ( !h1 ) h1 = new TH1D(hName,"",10,0,10);
  else {
    if ( h1->GetSumw2N() == 0 ) h1->Sumw2();
    h1->LabelsOption("a");
    if(hName.Sizeof()>1) h1->SetName(hName);
    if(xName.Sizeof()>1) h1->GetXaxis()->SetTitle(xName);
    if(yName.Sizeof()>1) h1->GetYaxis()->SetTitle(yName);
    if(color>0) h1->SetLineColor(color);
    h1->SetLineWidth(2);
    
  }
  
  return h1;
}

TH2* ProcessHisto2D( AliCounterCollection* counter, TString hVariable, TString hVariable2, TString hSelection, TString hName){
	
  
  TH2* h1 = 0x0;
  if( !counter ) return h1;
  Bool_t setName = kTRUE;
  
  if(hName.Sizeof()==1) setName = kFALSE;
  
  h1 = (TH2*) counter->Draw(hVariable,hVariable2,hSelection);
  if ( !h1 ) h1 = new TH2D(hName,"",10,0,10,10,0,10);
  else {
    if ( h1->GetSumw2N() == 0 ) h1->Sumw2();
    h1->LabelsOption("a");
    if(setName) h1->SetName(hName);
  }
  
  return h1;
}

Bool_t GetTriggerLists(const char* triggerList, TString listFromContainer, TObjArray *triggersB, TObjArray *triggersShortName){
	
  //Get the trigger list from a file
  //The file should consist of a line for each trigger with the following layout:
  //        MB triggernameB 
  //     or MUONUNLIKE triggernameB 
  //     or NOSHOW triggernameB 
  //if filename is 0, then all the triggers stored are used	
  if( !triggersB || !triggersShortName) return kFALSE;
  Int_t const nColumn = 2;
  TObjArray* triggers[nColumn] = {triggersShortName, triggersB};
  
  TString trigSuffix[nColumn] = {"","B"};
  TString currTrigName = "";
  TObjArray* fullTriggerList[nColumn];
	
  for ( Int_t ibeam=0; ibeam<nColumn; ++ibeam ) {
    fullTriggerList[ibeam] = new TObjArray();
    fullTriggerList[ibeam]->SetOwner();
  }
  
  // Build trigger list (from file or use all trigger stored)
  if ( triggerList ) {
    // only the ones in the triggerList
    ifstream inFile(triggerList);
    if (!inFile.is_open()) {
      Error("PlotMuonQA","unable to open file %s", triggerList);
      return kFALSE;
    }
    
    while ( !inFile.eof() ) {
      Bool_t isGoodB = kTRUE;
      for ( Int_t ibeam=0; ibeam<nColumn; ++ibeam ) {
        currTrigName.ReadToken( inFile );
        if ( ! isGoodB ) continue;
        if ( currTrigName.IsNull() || ! currTrigName.IsAscii() ) {
          if ( ibeam==0 || ibeam == 1 ) {
            isGoodB = kFALSE;
            continue;
          }
          currTrigName = "notrigger";
        }
        fullTriggerList[ibeam]->AddLast(new TObjString(currTrigName));
      }
    }
    inFile.close();
  }
  else {
    TObjArray *triggersInContainer = listFromContainer.Tokenize(",");
    Int_t nTrig = 0;
    for ( Int_t iTrig = 0; iTrig < triggersInContainer->GetEntriesFast(); iTrig++ ) {
      currTrigName = triggersInContainer->At(iTrig)->GetName();
      Bool_t keep = kFALSE;
      if ( ( currTrigName.Contains("-B-") ||  currTrigName.Contains("-ABCE-") ) && 
	   ( ! ((TString) currTrigName(0)).CompareTo("C") ) && !currTrigName.Contains("WU") && 
	   !currTrigName.Contains("UP") && !currTrigName.Contains("SPI") && !currTrigName.Contains("PHI") && 
	   !currTrigName.Contains("EMC") && !currTrigName.Contains("ZED") && !currTrigName.Contains("TRUE") && 
	   !currTrigName.Contains("SHM")  && !currTrigName.Contains("TPC") && !currTrigName.Contains("BEAM") && 
	   !currTrigName.Contains("1A") && !currTrigName.Contains("1C")) 
	keep = kTRUE;//cyn: to be removed once the trigger filtering is carried out in the analysis task
      if (!keep) continue;
      nTrig++;
      for (Int_t ibeam = 0; ibeam < nColumn; ibeam++) {
	fullTriggerList[ibeam]->AddLast( new TObjString(currTrigName) );
      }
    }
    //if no triggers are kept, then keep all of them
    if (nTrig == 0) {
      printf("INFO: no trigger selected over %d triggers: all triggers kept!!\n",
	     triggersInContainer->GetEntriesFast());
      for ( Int_t iTrig = 0; iTrig < triggersInContainer->GetEntriesFast(); iTrig++ ) {
	currTrigName = triggersInContainer->At(iTrig)->GetName();
	for (Int_t ibeam = 0; ibeam < nColumn; ibeam++) {
	  fullTriggerList[ibeam]->AddLast( new TObjString(currTrigName) );
	}
      }
    }
    if ( triggersInContainer ) delete triggersInContainer;
  }

  //
  // Select only existing triggers in container
  //
  TObjArray *triggersFromContainer = listFromContainer.Tokenize(",");
  TObjString* trigName = 0x0;
	
  TString selectAllTriggers[nColumn];
  for ( Int_t ibeam=0; ibeam<nColumn; ++ibeam ) selectAllTriggers[ibeam]= "";
  
  for ( Int_t itrig=0; itrig<fullTriggerList[0]->GetEntries(); ++itrig ) {
    Bool_t isBadTrig = kFALSE;
    for ( Int_t ibeam=0; ibeam<nColumn; ++ibeam ) {
      currTrigName = fullTriggerList[ibeam]->At(itrig)->GetName();
      //condition on trigger name from trigger list
      if ( ibeam == 0 && currTrigName.Contains("NOSHOW") ) {
	break;
      }
      //select only the existing triggers in the container 
      //note that the trigger in the trigger file can be a list of different trigger
      if ( ibeam > 0 && triggersFromContainer ) {
	TIter nextTrigger( triggersFromContainer );
	isBadTrig = kTRUE;
	while ( ( trigName = static_cast<TObjString*>(nextTrigger()) ) ) {
	  if ( currTrigName.Contains(trigName->GetString()) ){
	    isBadTrig = kFALSE;
	  }
	}
	if ( isBadTrig == kTRUE ){ 
	  if ( ibeam == 1){
	    if ( triggers[0]->GetLast() != (triggers[0]->LowerBound()-1) ) triggers[0]->RemoveAt(triggers[0]->GetLast());
	    break;
	  }
	  currTrigName = " ";
	}
      }
      triggers[ibeam]->AddLast(new TObjString(currTrigName));
      if ( isBadTrig ) continue;
      if ( ! selectAllTriggers[ibeam].IsNull() ) selectAllTriggers[ibeam] += ",";
      selectAllTriggers[ibeam] += currTrigName;
    }
  }
  if(triggersFromContainer) delete triggersFromContainer;
  if(trigName) delete trigName;
	
	
  // Complete trigger list and print values
  cout<<" Nr of triggers read "<<triggers[0]->GetEntriesFast()<<endl;
  for ( Int_t ibeam=0; ibeam<nColumn; ++ibeam ) {
    triggers[ibeam]->AddLast(new TObjString(selectAllTriggers[ibeam]));
    printf(" %s triggers:\n", trigSuffix[ibeam].Data());
    triggers[ibeam]->Print();
    delete fullTriggerList[ibeam];
  }
	
  return kTRUE;
}

Int_t GetRunNumber(TString filePath)
{
  /// Get run number from file path
  TObjArray* array = filePath.Tokenize("/");
  array->SetOwner();
  TString auxString = "";
  Int_t runNum = -1;
  for ( Int_t ientry=0; ientry<array->GetEntries(); ientry++ ) {
    auxString = array->At(ientry)->GetName();
    if ( auxString.IsDigit() && auxString.Length()>=6 && auxString.Length()<=9 ) {
      runNum = auxString.Atoi();
      break;
    }
  }
  delete array;

  if ( runNum < 0 ) {
    array = auxString.Tokenize("_");
    array->SetOwner();
    auxString = array->Last()->GetName();
    auxString.ReplaceAll(".root","");
    if ( auxString.IsDigit() ) runNum = auxString.Atoi();
    delete array;
  }

  return runNum;
}

TString GetRunList(const char *runList, TObjArray *runs){

  // list of runs to be analyzed
  TString selectRuns = "run:";
  
  if(runList) {
    // only the ones in the runList
    ifstream inFile(runList);
    if (!inFile.is_open()) {
      Error("PlotMuonQA","unable to open file %s", runList);
      return selectRuns;
    }
    
    TString currLine;
    while (!inFile.eof()) {
      currLine.ReadLine(inFile);
      if ( currLine.IsNull() ) continue;
      Int_t currRun = GetRunNumber(currLine);
      if (currRun<0) {
        Warning("PlotMuonQA","invalid run number: %s", currLine.Data());
        continue;
      }
      if(runs) runs->AddLast(new TObjString(Form("%d", currRun)));
      selectRuns += Form("%i,",currRun);
    }
    selectRuns.Remove(TString::kTrailing, ',');
    inFile.close();
    
  } else {
    // all runs
    cout<<"runList is not set"<<endl;
    if(runs) runs->AddLast(new TObjString("*"));
  }
  
  printf("selected runs from runlist %s: %s\n",runList, selectRuns.Data());
	
  return selectRuns;
}

Bool_t MergeOutputs(const char* inputList,const char* outFilename)
{
  ifstream inFile(inputList);
  if ( ! inFile.is_open()) {
    printf("Error: cannot find inputList %s\n", inputList);
    return kFALSE;
  }
  TString currLine = "";
  TFileMerger fileMerger;
  Int_t mergeType = ( TFileMerger::kRegular | TFileMerger::kAll | TFileMerger::kOnlyListed );
  fileMerger.AddObjectNames("MUON_QA");
  while ( ! inFile.eof() ) {
    currLine.ReadLine(inFile);
    if ( ! currLine.EndsWith(".root") ) continue;
    fileMerger.AddFile(currLine.Data());
  }
  inFile.close();
  if ( fileMerger.GetMergeList()->GetEntries() == 0 ) return kFALSE;
  fileMerger.OutputFile(outFilename,kTRUE,1); // needed when merging single files for specific directories
  fileMerger.PartialMerge(mergeType);

  return kTRUE;
}
 PlotMuonQA.C:1
 PlotMuonQA.C:2
 PlotMuonQA.C:3
 PlotMuonQA.C:4
 PlotMuonQA.C:5
 PlotMuonQA.C:6
 PlotMuonQA.C:7
 PlotMuonQA.C:8
 PlotMuonQA.C:9
 PlotMuonQA.C:10
 PlotMuonQA.C:11
 PlotMuonQA.C:12
 PlotMuonQA.C:13
 PlotMuonQA.C:14
 PlotMuonQA.C:15
 PlotMuonQA.C:16
 PlotMuonQA.C:17
 PlotMuonQA.C:18
 PlotMuonQA.C:19
 PlotMuonQA.C:20
 PlotMuonQA.C:21
 PlotMuonQA.C:22
 PlotMuonQA.C:23
 PlotMuonQA.C:24
 PlotMuonQA.C:25
 PlotMuonQA.C:26
 PlotMuonQA.C:27
 PlotMuonQA.C:28
 PlotMuonQA.C:29
 PlotMuonQA.C:30
 PlotMuonQA.C:31
 PlotMuonQA.C:32
 PlotMuonQA.C:33
 PlotMuonQA.C:34
 PlotMuonQA.C:35
 PlotMuonQA.C:36
 PlotMuonQA.C:37
 PlotMuonQA.C:38
 PlotMuonQA.C:39
 PlotMuonQA.C:40
 PlotMuonQA.C:41
 PlotMuonQA.C:42
 PlotMuonQA.C:43
 PlotMuonQA.C:44
 PlotMuonQA.C:45
 PlotMuonQA.C:46
 PlotMuonQA.C:47
 PlotMuonQA.C:48
 PlotMuonQA.C:49
 PlotMuonQA.C:50
 PlotMuonQA.C:51
 PlotMuonQA.C:52
 PlotMuonQA.C:53
 PlotMuonQA.C:54
 PlotMuonQA.C:55
 PlotMuonQA.C:56
 PlotMuonQA.C:57
 PlotMuonQA.C:58
 PlotMuonQA.C:59
 PlotMuonQA.C:60
 PlotMuonQA.C:61
 PlotMuonQA.C:62
 PlotMuonQA.C:63
 PlotMuonQA.C:64
 PlotMuonQA.C:65
 PlotMuonQA.C:66
 PlotMuonQA.C:67
 PlotMuonQA.C:68
 PlotMuonQA.C:69
 PlotMuonQA.C:70
 PlotMuonQA.C:71
 PlotMuonQA.C:72
 PlotMuonQA.C:73
 PlotMuonQA.C:74
 PlotMuonQA.C:75
 PlotMuonQA.C:76
 PlotMuonQA.C:77
 PlotMuonQA.C:78
 PlotMuonQA.C:79
 PlotMuonQA.C:80
 PlotMuonQA.C:81
 PlotMuonQA.C:82
 PlotMuonQA.C:83
 PlotMuonQA.C:84
 PlotMuonQA.C:85
 PlotMuonQA.C:86
 PlotMuonQA.C:87
 PlotMuonQA.C:88
 PlotMuonQA.C:89
 PlotMuonQA.C:90
 PlotMuonQA.C:91
 PlotMuonQA.C:92
 PlotMuonQA.C:93
 PlotMuonQA.C:94
 PlotMuonQA.C:95
 PlotMuonQA.C:96
 PlotMuonQA.C:97
 PlotMuonQA.C:98
 PlotMuonQA.C:99
 PlotMuonQA.C:100
 PlotMuonQA.C:101
 PlotMuonQA.C:102
 PlotMuonQA.C:103
 PlotMuonQA.C:104
 PlotMuonQA.C:105
 PlotMuonQA.C:106
 PlotMuonQA.C:107
 PlotMuonQA.C:108
 PlotMuonQA.C:109
 PlotMuonQA.C:110
 PlotMuonQA.C:111
 PlotMuonQA.C:112
 PlotMuonQA.C:113
 PlotMuonQA.C:114
 PlotMuonQA.C:115
 PlotMuonQA.C:116
 PlotMuonQA.C:117
 PlotMuonQA.C:118
 PlotMuonQA.C:119
 PlotMuonQA.C:120
 PlotMuonQA.C:121
 PlotMuonQA.C:122
 PlotMuonQA.C:123
 PlotMuonQA.C:124
 PlotMuonQA.C:125
 PlotMuonQA.C:126
 PlotMuonQA.C:127
 PlotMuonQA.C:128
 PlotMuonQA.C:129
 PlotMuonQA.C:130
 PlotMuonQA.C:131
 PlotMuonQA.C:132
 PlotMuonQA.C:133
 PlotMuonQA.C:134
 PlotMuonQA.C:135
 PlotMuonQA.C:136
 PlotMuonQA.C:137
 PlotMuonQA.C:138
 PlotMuonQA.C:139
 PlotMuonQA.C:140
 PlotMuonQA.C:141
 PlotMuonQA.C:142
 PlotMuonQA.C:143
 PlotMuonQA.C:144
 PlotMuonQA.C:145
 PlotMuonQA.C:146
 PlotMuonQA.C:147
 PlotMuonQA.C:148
 PlotMuonQA.C:149
 PlotMuonQA.C:150
 PlotMuonQA.C:151
 PlotMuonQA.C:152
 PlotMuonQA.C:153
 PlotMuonQA.C:154
 PlotMuonQA.C:155
 PlotMuonQA.C:156
 PlotMuonQA.C:157
 PlotMuonQA.C:158
 PlotMuonQA.C:159
 PlotMuonQA.C:160
 PlotMuonQA.C:161
 PlotMuonQA.C:162
 PlotMuonQA.C:163
 PlotMuonQA.C:164
 PlotMuonQA.C:165
 PlotMuonQA.C:166
 PlotMuonQA.C:167
 PlotMuonQA.C:168
 PlotMuonQA.C:169
 PlotMuonQA.C:170
 PlotMuonQA.C:171
 PlotMuonQA.C:172
 PlotMuonQA.C:173
 PlotMuonQA.C:174
 PlotMuonQA.C:175
 PlotMuonQA.C:176
 PlotMuonQA.C:177
 PlotMuonQA.C:178
 PlotMuonQA.C:179
 PlotMuonQA.C:180
 PlotMuonQA.C:181
 PlotMuonQA.C:182
 PlotMuonQA.C:183
 PlotMuonQA.C:184
 PlotMuonQA.C:185
 PlotMuonQA.C:186
 PlotMuonQA.C:187
 PlotMuonQA.C:188
 PlotMuonQA.C:189
 PlotMuonQA.C:190
 PlotMuonQA.C:191
 PlotMuonQA.C:192
 PlotMuonQA.C:193
 PlotMuonQA.C:194
 PlotMuonQA.C:195
 PlotMuonQA.C:196
 PlotMuonQA.C:197
 PlotMuonQA.C:198
 PlotMuonQA.C:199
 PlotMuonQA.C:200
 PlotMuonQA.C:201
 PlotMuonQA.C:202
 PlotMuonQA.C:203
 PlotMuonQA.C:204
 PlotMuonQA.C:205
 PlotMuonQA.C:206
 PlotMuonQA.C:207
 PlotMuonQA.C:208
 PlotMuonQA.C:209
 PlotMuonQA.C:210
 PlotMuonQA.C:211
 PlotMuonQA.C:212
 PlotMuonQA.C:213
 PlotMuonQA.C:214
 PlotMuonQA.C:215
 PlotMuonQA.C:216
 PlotMuonQA.C:217
 PlotMuonQA.C:218
 PlotMuonQA.C:219
 PlotMuonQA.C:220
 PlotMuonQA.C:221
 PlotMuonQA.C:222
 PlotMuonQA.C:223
 PlotMuonQA.C:224
 PlotMuonQA.C:225
 PlotMuonQA.C:226
 PlotMuonQA.C:227
 PlotMuonQA.C:228
 PlotMuonQA.C:229
 PlotMuonQA.C:230
 PlotMuonQA.C:231
 PlotMuonQA.C:232
 PlotMuonQA.C:233
 PlotMuonQA.C:234
 PlotMuonQA.C:235
 PlotMuonQA.C:236
 PlotMuonQA.C:237
 PlotMuonQA.C:238
 PlotMuonQA.C:239
 PlotMuonQA.C:240
 PlotMuonQA.C:241
 PlotMuonQA.C:242
 PlotMuonQA.C:243
 PlotMuonQA.C:244
 PlotMuonQA.C:245
 PlotMuonQA.C:246
 PlotMuonQA.C:247
 PlotMuonQA.C:248
 PlotMuonQA.C:249
 PlotMuonQA.C:250
 PlotMuonQA.C:251
 PlotMuonQA.C:252
 PlotMuonQA.C:253
 PlotMuonQA.C:254
 PlotMuonQA.C:255
 PlotMuonQA.C:256
 PlotMuonQA.C:257
 PlotMuonQA.C:258
 PlotMuonQA.C:259
 PlotMuonQA.C:260
 PlotMuonQA.C:261
 PlotMuonQA.C:262
 PlotMuonQA.C:263
 PlotMuonQA.C:264
 PlotMuonQA.C:265
 PlotMuonQA.C:266
 PlotMuonQA.C:267
 PlotMuonQA.C:268
 PlotMuonQA.C:269
 PlotMuonQA.C:270
 PlotMuonQA.C:271
 PlotMuonQA.C:272
 PlotMuonQA.C:273
 PlotMuonQA.C:274
 PlotMuonQA.C:275
 PlotMuonQA.C:276
 PlotMuonQA.C:277
 PlotMuonQA.C:278
 PlotMuonQA.C:279
 PlotMuonQA.C:280
 PlotMuonQA.C:281
 PlotMuonQA.C:282
 PlotMuonQA.C:283
 PlotMuonQA.C:284
 PlotMuonQA.C:285
 PlotMuonQA.C:286
 PlotMuonQA.C:287
 PlotMuonQA.C:288
 PlotMuonQA.C:289
 PlotMuonQA.C:290
 PlotMuonQA.C:291
 PlotMuonQA.C:292
 PlotMuonQA.C:293
 PlotMuonQA.C:294
 PlotMuonQA.C:295
 PlotMuonQA.C:296
 PlotMuonQA.C:297
 PlotMuonQA.C:298
 PlotMuonQA.C:299
 PlotMuonQA.C:300
 PlotMuonQA.C:301
 PlotMuonQA.C:302
 PlotMuonQA.C:303
 PlotMuonQA.C:304
 PlotMuonQA.C:305
 PlotMuonQA.C:306
 PlotMuonQA.C:307
 PlotMuonQA.C:308
 PlotMuonQA.C:309
 PlotMuonQA.C:310
 PlotMuonQA.C:311
 PlotMuonQA.C:312
 PlotMuonQA.C:313
 PlotMuonQA.C:314
 PlotMuonQA.C:315
 PlotMuonQA.C:316
 PlotMuonQA.C:317
 PlotMuonQA.C:318
 PlotMuonQA.C:319
 PlotMuonQA.C:320
 PlotMuonQA.C:321
 PlotMuonQA.C:322
 PlotMuonQA.C:323
 PlotMuonQA.C:324
 PlotMuonQA.C:325
 PlotMuonQA.C:326
 PlotMuonQA.C:327
 PlotMuonQA.C:328
 PlotMuonQA.C:329
 PlotMuonQA.C:330
 PlotMuonQA.C:331
 PlotMuonQA.C:332
 PlotMuonQA.C:333
 PlotMuonQA.C:334
 PlotMuonQA.C:335
 PlotMuonQA.C:336
 PlotMuonQA.C:337
 PlotMuonQA.C:338
 PlotMuonQA.C:339
 PlotMuonQA.C:340
 PlotMuonQA.C:341
 PlotMuonQA.C:342
 PlotMuonQA.C:343
 PlotMuonQA.C:344
 PlotMuonQA.C:345
 PlotMuonQA.C:346
 PlotMuonQA.C:347
 PlotMuonQA.C:348
 PlotMuonQA.C:349
 PlotMuonQA.C:350
 PlotMuonQA.C:351
 PlotMuonQA.C:352
 PlotMuonQA.C:353
 PlotMuonQA.C:354
 PlotMuonQA.C:355
 PlotMuonQA.C:356
 PlotMuonQA.C:357
 PlotMuonQA.C:358
 PlotMuonQA.C:359
 PlotMuonQA.C:360
 PlotMuonQA.C:361
 PlotMuonQA.C:362
 PlotMuonQA.C:363
 PlotMuonQA.C:364
 PlotMuonQA.C:365
 PlotMuonQA.C:366
 PlotMuonQA.C:367
 PlotMuonQA.C:368
 PlotMuonQA.C:369
 PlotMuonQA.C:370
 PlotMuonQA.C:371
 PlotMuonQA.C:372
 PlotMuonQA.C:373
 PlotMuonQA.C:374
 PlotMuonQA.C:375
 PlotMuonQA.C:376
 PlotMuonQA.C:377
 PlotMuonQA.C:378
 PlotMuonQA.C:379
 PlotMuonQA.C:380
 PlotMuonQA.C:381
 PlotMuonQA.C:382
 PlotMuonQA.C:383
 PlotMuonQA.C:384
 PlotMuonQA.C:385
 PlotMuonQA.C:386
 PlotMuonQA.C:387
 PlotMuonQA.C:388
 PlotMuonQA.C:389
 PlotMuonQA.C:390
 PlotMuonQA.C:391
 PlotMuonQA.C:392
 PlotMuonQA.C:393
 PlotMuonQA.C:394
 PlotMuonQA.C:395
 PlotMuonQA.C:396
 PlotMuonQA.C:397
 PlotMuonQA.C:398
 PlotMuonQA.C:399
 PlotMuonQA.C:400
 PlotMuonQA.C:401
 PlotMuonQA.C:402
 PlotMuonQA.C:403
 PlotMuonQA.C:404
 PlotMuonQA.C:405
 PlotMuonQA.C:406
 PlotMuonQA.C:407
 PlotMuonQA.C:408
 PlotMuonQA.C:409
 PlotMuonQA.C:410
 PlotMuonQA.C:411
 PlotMuonQA.C:412
 PlotMuonQA.C:413
 PlotMuonQA.C:414
 PlotMuonQA.C:415
 PlotMuonQA.C:416
 PlotMuonQA.C:417
 PlotMuonQA.C:418
 PlotMuonQA.C:419
 PlotMuonQA.C:420
 PlotMuonQA.C:421
 PlotMuonQA.C:422
 PlotMuonQA.C:423
 PlotMuonQA.C:424
 PlotMuonQA.C:425
 PlotMuonQA.C:426
 PlotMuonQA.C:427
 PlotMuonQA.C:428
 PlotMuonQA.C:429
 PlotMuonQA.C:430
 PlotMuonQA.C:431
 PlotMuonQA.C:432
 PlotMuonQA.C:433
 PlotMuonQA.C:434
 PlotMuonQA.C:435
 PlotMuonQA.C:436
 PlotMuonQA.C:437
 PlotMuonQA.C:438
 PlotMuonQA.C:439
 PlotMuonQA.C:440
 PlotMuonQA.C:441
 PlotMuonQA.C:442
 PlotMuonQA.C:443
 PlotMuonQA.C:444
 PlotMuonQA.C:445
 PlotMuonQA.C:446
 PlotMuonQA.C:447
 PlotMuonQA.C:448
 PlotMuonQA.C:449
 PlotMuonQA.C:450
 PlotMuonQA.C:451
 PlotMuonQA.C:452
 PlotMuonQA.C:453
 PlotMuonQA.C:454
 PlotMuonQA.C:455
 PlotMuonQA.C:456
 PlotMuonQA.C:457
 PlotMuonQA.C:458
 PlotMuonQA.C:459
 PlotMuonQA.C:460
 PlotMuonQA.C:461
 PlotMuonQA.C:462
 PlotMuonQA.C:463
 PlotMuonQA.C:464
 PlotMuonQA.C:465
 PlotMuonQA.C:466
 PlotMuonQA.C:467
 PlotMuonQA.C:468
 PlotMuonQA.C:469
 PlotMuonQA.C:470
 PlotMuonQA.C:471
 PlotMuonQA.C:472
 PlotMuonQA.C:473
 PlotMuonQA.C:474
 PlotMuonQA.C:475
 PlotMuonQA.C:476
 PlotMuonQA.C:477
 PlotMuonQA.C:478
 PlotMuonQA.C:479
 PlotMuonQA.C:480
 PlotMuonQA.C:481
 PlotMuonQA.C:482
 PlotMuonQA.C:483
 PlotMuonQA.C:484
 PlotMuonQA.C:485
 PlotMuonQA.C:486
 PlotMuonQA.C:487
 PlotMuonQA.C:488
 PlotMuonQA.C:489
 PlotMuonQA.C:490
 PlotMuonQA.C:491
 PlotMuonQA.C:492
 PlotMuonQA.C:493
 PlotMuonQA.C:494
 PlotMuonQA.C:495
 PlotMuonQA.C:496
 PlotMuonQA.C:497
 PlotMuonQA.C:498
 PlotMuonQA.C:499
 PlotMuonQA.C:500
 PlotMuonQA.C:501
 PlotMuonQA.C:502
 PlotMuonQA.C:503
 PlotMuonQA.C:504
 PlotMuonQA.C:505
 PlotMuonQA.C:506
 PlotMuonQA.C:507
 PlotMuonQA.C:508
 PlotMuonQA.C:509
 PlotMuonQA.C:510
 PlotMuonQA.C:511
 PlotMuonQA.C:512
 PlotMuonQA.C:513
 PlotMuonQA.C:514
 PlotMuonQA.C:515
 PlotMuonQA.C:516
 PlotMuonQA.C:517
 PlotMuonQA.C:518
 PlotMuonQA.C:519
 PlotMuonQA.C:520
 PlotMuonQA.C:521
 PlotMuonQA.C:522
 PlotMuonQA.C:523
 PlotMuonQA.C:524
 PlotMuonQA.C:525
 PlotMuonQA.C:526
 PlotMuonQA.C:527
 PlotMuonQA.C:528
 PlotMuonQA.C:529
 PlotMuonQA.C:530
 PlotMuonQA.C:531
 PlotMuonQA.C:532
 PlotMuonQA.C:533
 PlotMuonQA.C:534
 PlotMuonQA.C:535
 PlotMuonQA.C:536
 PlotMuonQA.C:537
 PlotMuonQA.C:538
 PlotMuonQA.C:539
 PlotMuonQA.C:540
 PlotMuonQA.C:541
 PlotMuonQA.C:542
 PlotMuonQA.C:543
 PlotMuonQA.C:544
 PlotMuonQA.C:545
 PlotMuonQA.C:546
 PlotMuonQA.C:547
 PlotMuonQA.C:548
 PlotMuonQA.C:549
 PlotMuonQA.C:550
 PlotMuonQA.C:551
 PlotMuonQA.C:552
 PlotMuonQA.C:553
 PlotMuonQA.C:554
 PlotMuonQA.C:555
 PlotMuonQA.C:556
 PlotMuonQA.C:557
 PlotMuonQA.C:558
 PlotMuonQA.C:559
 PlotMuonQA.C:560
 PlotMuonQA.C:561
 PlotMuonQA.C:562
 PlotMuonQA.C:563
 PlotMuonQA.C:564
 PlotMuonQA.C:565
 PlotMuonQA.C:566
 PlotMuonQA.C:567
 PlotMuonQA.C:568
 PlotMuonQA.C:569
 PlotMuonQA.C:570
 PlotMuonQA.C:571
 PlotMuonQA.C:572
 PlotMuonQA.C:573
 PlotMuonQA.C:574
 PlotMuonQA.C:575
 PlotMuonQA.C:576
 PlotMuonQA.C:577
 PlotMuonQA.C:578
 PlotMuonQA.C:579
 PlotMuonQA.C:580
 PlotMuonQA.C:581
 PlotMuonQA.C:582
 PlotMuonQA.C:583
 PlotMuonQA.C:584
 PlotMuonQA.C:585
 PlotMuonQA.C:586
 PlotMuonQA.C:587
 PlotMuonQA.C:588
 PlotMuonQA.C:589
 PlotMuonQA.C:590
 PlotMuonQA.C:591
 PlotMuonQA.C:592
 PlotMuonQA.C:593
 PlotMuonQA.C:594
 PlotMuonQA.C:595
 PlotMuonQA.C:596
 PlotMuonQA.C:597
 PlotMuonQA.C:598
 PlotMuonQA.C:599
 PlotMuonQA.C:600
 PlotMuonQA.C:601
 PlotMuonQA.C:602
 PlotMuonQA.C:603
 PlotMuonQA.C:604
 PlotMuonQA.C:605
 PlotMuonQA.C:606
 PlotMuonQA.C:607
 PlotMuonQA.C:608
 PlotMuonQA.C:609
 PlotMuonQA.C:610
 PlotMuonQA.C:611
 PlotMuonQA.C:612
 PlotMuonQA.C:613
 PlotMuonQA.C:614
 PlotMuonQA.C:615
 PlotMuonQA.C:616
 PlotMuonQA.C:617
 PlotMuonQA.C:618
 PlotMuonQA.C:619
 PlotMuonQA.C:620
 PlotMuonQA.C:621
 PlotMuonQA.C:622
 PlotMuonQA.C:623
 PlotMuonQA.C:624
 PlotMuonQA.C:625
 PlotMuonQA.C:626
 PlotMuonQA.C:627
 PlotMuonQA.C:628
 PlotMuonQA.C:629
 PlotMuonQA.C:630
 PlotMuonQA.C:631
 PlotMuonQA.C:632
 PlotMuonQA.C:633
 PlotMuonQA.C:634
 PlotMuonQA.C:635
 PlotMuonQA.C:636
 PlotMuonQA.C:637
 PlotMuonQA.C:638
 PlotMuonQA.C:639
 PlotMuonQA.C:640
 PlotMuonQA.C:641
 PlotMuonQA.C:642
 PlotMuonQA.C:643
 PlotMuonQA.C:644
 PlotMuonQA.C:645
 PlotMuonQA.C:646
 PlotMuonQA.C:647
 PlotMuonQA.C:648
 PlotMuonQA.C:649
 PlotMuonQA.C:650
 PlotMuonQA.C:651
 PlotMuonQA.C:652
 PlotMuonQA.C:653
 PlotMuonQA.C:654
 PlotMuonQA.C:655
 PlotMuonQA.C:656
 PlotMuonQA.C:657
 PlotMuonQA.C:658
 PlotMuonQA.C:659
 PlotMuonQA.C:660
 PlotMuonQA.C:661
 PlotMuonQA.C:662
 PlotMuonQA.C:663
 PlotMuonQA.C:664
 PlotMuonQA.C:665
 PlotMuonQA.C:666
 PlotMuonQA.C:667
 PlotMuonQA.C:668
 PlotMuonQA.C:669
 PlotMuonQA.C:670
 PlotMuonQA.C:671
 PlotMuonQA.C:672
 PlotMuonQA.C:673
 PlotMuonQA.C:674
 PlotMuonQA.C:675
 PlotMuonQA.C:676
 PlotMuonQA.C:677
 PlotMuonQA.C:678
 PlotMuonQA.C:679
 PlotMuonQA.C:680
 PlotMuonQA.C:681
 PlotMuonQA.C:682
 PlotMuonQA.C:683
 PlotMuonQA.C:684
 PlotMuonQA.C:685
 PlotMuonQA.C:686
 PlotMuonQA.C:687
 PlotMuonQA.C:688
 PlotMuonQA.C:689
 PlotMuonQA.C:690
 PlotMuonQA.C:691
 PlotMuonQA.C:692
 PlotMuonQA.C:693
 PlotMuonQA.C:694
 PlotMuonQA.C:695
 PlotMuonQA.C:696
 PlotMuonQA.C:697
 PlotMuonQA.C:698
 PlotMuonQA.C:699
 PlotMuonQA.C:700
 PlotMuonQA.C:701
 PlotMuonQA.C:702
 PlotMuonQA.C:703
 PlotMuonQA.C:704
 PlotMuonQA.C:705
 PlotMuonQA.C:706
 PlotMuonQA.C:707
 PlotMuonQA.C:708
 PlotMuonQA.C:709
 PlotMuonQA.C:710
 PlotMuonQA.C:711
 PlotMuonQA.C:712
 PlotMuonQA.C:713
 PlotMuonQA.C:714
 PlotMuonQA.C:715
 PlotMuonQA.C:716
 PlotMuonQA.C:717
 PlotMuonQA.C:718
 PlotMuonQA.C:719
 PlotMuonQA.C:720
 PlotMuonQA.C:721
 PlotMuonQA.C:722
 PlotMuonQA.C:723
 PlotMuonQA.C:724
 PlotMuonQA.C:725
 PlotMuonQA.C:726
 PlotMuonQA.C:727
 PlotMuonQA.C:728
 PlotMuonQA.C:729
 PlotMuonQA.C:730
 PlotMuonQA.C:731
 PlotMuonQA.C:732
 PlotMuonQA.C:733
 PlotMuonQA.C:734
 PlotMuonQA.C:735
 PlotMuonQA.C:736
 PlotMuonQA.C:737
 PlotMuonQA.C:738
 PlotMuonQA.C:739
 PlotMuonQA.C:740
 PlotMuonQA.C:741
 PlotMuonQA.C:742
 PlotMuonQA.C:743
 PlotMuonQA.C:744
 PlotMuonQA.C:745
 PlotMuonQA.C:746
 PlotMuonQA.C:747
 PlotMuonQA.C:748
 PlotMuonQA.C:749
 PlotMuonQA.C:750
 PlotMuonQA.C:751
 PlotMuonQA.C:752
 PlotMuonQA.C:753
 PlotMuonQA.C:754
 PlotMuonQA.C:755
 PlotMuonQA.C:756
 PlotMuonQA.C:757
 PlotMuonQA.C:758
 PlotMuonQA.C:759
 PlotMuonQA.C:760
 PlotMuonQA.C:761
 PlotMuonQA.C:762
 PlotMuonQA.C:763
 PlotMuonQA.C:764
 PlotMuonQA.C:765
 PlotMuonQA.C:766
 PlotMuonQA.C:767
 PlotMuonQA.C:768
 PlotMuonQA.C:769
 PlotMuonQA.C:770
 PlotMuonQA.C:771
 PlotMuonQA.C:772
 PlotMuonQA.C:773
 PlotMuonQA.C:774
 PlotMuonQA.C:775
 PlotMuonQA.C:776
 PlotMuonQA.C:777
 PlotMuonQA.C:778
 PlotMuonQA.C:779
 PlotMuonQA.C:780
 PlotMuonQA.C:781
 PlotMuonQA.C:782
 PlotMuonQA.C:783
 PlotMuonQA.C:784
 PlotMuonQA.C:785
 PlotMuonQA.C:786
 PlotMuonQA.C:787
 PlotMuonQA.C:788
 PlotMuonQA.C:789
 PlotMuonQA.C:790
 PlotMuonQA.C:791
 PlotMuonQA.C:792
 PlotMuonQA.C:793
 PlotMuonQA.C:794
 PlotMuonQA.C:795
 PlotMuonQA.C:796
 PlotMuonQA.C:797
 PlotMuonQA.C:798
 PlotMuonQA.C:799
 PlotMuonQA.C:800
 PlotMuonQA.C:801
 PlotMuonQA.C:802
 PlotMuonQA.C:803
 PlotMuonQA.C:804
 PlotMuonQA.C:805
 PlotMuonQA.C:806
 PlotMuonQA.C:807
 PlotMuonQA.C:808
 PlotMuonQA.C:809
 PlotMuonQA.C:810
 PlotMuonQA.C:811
 PlotMuonQA.C:812
 PlotMuonQA.C:813
 PlotMuonQA.C:814
 PlotMuonQA.C:815
 PlotMuonQA.C:816
 PlotMuonQA.C:817
 PlotMuonQA.C:818
 PlotMuonQA.C:819
 PlotMuonQA.C:820
 PlotMuonQA.C:821
 PlotMuonQA.C:822
 PlotMuonQA.C:823
 PlotMuonQA.C:824
 PlotMuonQA.C:825
 PlotMuonQA.C:826
 PlotMuonQA.C:827
 PlotMuonQA.C:828
 PlotMuonQA.C:829
 PlotMuonQA.C:830
 PlotMuonQA.C:831
 PlotMuonQA.C:832
 PlotMuonQA.C:833
 PlotMuonQA.C:834
 PlotMuonQA.C:835
 PlotMuonQA.C:836
 PlotMuonQA.C:837
 PlotMuonQA.C:838
 PlotMuonQA.C:839
 PlotMuonQA.C:840
 PlotMuonQA.C:841
 PlotMuonQA.C:842
 PlotMuonQA.C:843
 PlotMuonQA.C:844
 PlotMuonQA.C:845
 PlotMuonQA.C:846
 PlotMuonQA.C:847
 PlotMuonQA.C:848
 PlotMuonQA.C:849
 PlotMuonQA.C:850
 PlotMuonQA.C:851
 PlotMuonQA.C:852
 PlotMuonQA.C:853
 PlotMuonQA.C:854
 PlotMuonQA.C:855
 PlotMuonQA.C:856
 PlotMuonQA.C:857
 PlotMuonQA.C:858
 PlotMuonQA.C:859
 PlotMuonQA.C:860
 PlotMuonQA.C:861
 PlotMuonQA.C:862
 PlotMuonQA.C:863
 PlotMuonQA.C:864
 PlotMuonQA.C:865
 PlotMuonQA.C:866
 PlotMuonQA.C:867
 PlotMuonQA.C:868
 PlotMuonQA.C:869
 PlotMuonQA.C:870
 PlotMuonQA.C:871
 PlotMuonQA.C:872
 PlotMuonQA.C:873
 PlotMuonQA.C:874
 PlotMuonQA.C:875
 PlotMuonQA.C:876
 PlotMuonQA.C:877
 PlotMuonQA.C:878
 PlotMuonQA.C:879
 PlotMuonQA.C:880
 PlotMuonQA.C:881
 PlotMuonQA.C:882
 PlotMuonQA.C:883
 PlotMuonQA.C:884
 PlotMuonQA.C:885
 PlotMuonQA.C:886
 PlotMuonQA.C:887
 PlotMuonQA.C:888
 PlotMuonQA.C:889
 PlotMuonQA.C:890
 PlotMuonQA.C:891
 PlotMuonQA.C:892
 PlotMuonQA.C:893
 PlotMuonQA.C:894
 PlotMuonQA.C:895
 PlotMuonQA.C:896
 PlotMuonQA.C:897
 PlotMuonQA.C:898
 PlotMuonQA.C:899
 PlotMuonQA.C:900
 PlotMuonQA.C:901
 PlotMuonQA.C:902
 PlotMuonQA.C:903
 PlotMuonQA.C:904
 PlotMuonQA.C:905
 PlotMuonQA.C:906
 PlotMuonQA.C:907
 PlotMuonQA.C:908
 PlotMuonQA.C:909
 PlotMuonQA.C:910
 PlotMuonQA.C:911
 PlotMuonQA.C:912
 PlotMuonQA.C:913
 PlotMuonQA.C:914
 PlotMuonQA.C:915
 PlotMuonQA.C:916
 PlotMuonQA.C:917
 PlotMuonQA.C:918
 PlotMuonQA.C:919
 PlotMuonQA.C:920
 PlotMuonQA.C:921
 PlotMuonQA.C:922
 PlotMuonQA.C:923
 PlotMuonQA.C:924
 PlotMuonQA.C:925
 PlotMuonQA.C:926
 PlotMuonQA.C:927
 PlotMuonQA.C:928
 PlotMuonQA.C:929
 PlotMuonQA.C:930
 PlotMuonQA.C:931
 PlotMuonQA.C:932
 PlotMuonQA.C:933
 PlotMuonQA.C:934
 PlotMuonQA.C:935
 PlotMuonQA.C:936
 PlotMuonQA.C:937
 PlotMuonQA.C:938
 PlotMuonQA.C:939
 PlotMuonQA.C:940
 PlotMuonQA.C:941
 PlotMuonQA.C:942
 PlotMuonQA.C:943
 PlotMuonQA.C:944
 PlotMuonQA.C:945
 PlotMuonQA.C:946
 PlotMuonQA.C:947
 PlotMuonQA.C:948
 PlotMuonQA.C:949
 PlotMuonQA.C:950
 PlotMuonQA.C:951
 PlotMuonQA.C:952
 PlotMuonQA.C:953
 PlotMuonQA.C:954
 PlotMuonQA.C:955
 PlotMuonQA.C:956
 PlotMuonQA.C:957
 PlotMuonQA.C:958
 PlotMuonQA.C:959
 PlotMuonQA.C:960
 PlotMuonQA.C:961
 PlotMuonQA.C:962
 PlotMuonQA.C:963
 PlotMuonQA.C:964
 PlotMuonQA.C:965
 PlotMuonQA.C:966
 PlotMuonQA.C:967
 PlotMuonQA.C:968
 PlotMuonQA.C:969
 PlotMuonQA.C:970
 PlotMuonQA.C:971
 PlotMuonQA.C:972
 PlotMuonQA.C:973
 PlotMuonQA.C:974
 PlotMuonQA.C:975
 PlotMuonQA.C:976
 PlotMuonQA.C:977
 PlotMuonQA.C:978
 PlotMuonQA.C:979
 PlotMuonQA.C:980
 PlotMuonQA.C:981
 PlotMuonQA.C:982
 PlotMuonQA.C:983
 PlotMuonQA.C:984
 PlotMuonQA.C:985
 PlotMuonQA.C:986
 PlotMuonQA.C:987
 PlotMuonQA.C:988
 PlotMuonQA.C:989
 PlotMuonQA.C:990
 PlotMuonQA.C:991
 PlotMuonQA.C:992
 PlotMuonQA.C:993
 PlotMuonQA.C:994
 PlotMuonQA.C:995
 PlotMuonQA.C:996
 PlotMuonQA.C:997
 PlotMuonQA.C:998
 PlotMuonQA.C:999
 PlotMuonQA.C:1000
 PlotMuonQA.C:1001
 PlotMuonQA.C:1002
 PlotMuonQA.C:1003
 PlotMuonQA.C:1004
 PlotMuonQA.C:1005
 PlotMuonQA.C:1006
 PlotMuonQA.C:1007
 PlotMuonQA.C:1008
 PlotMuonQA.C:1009
 PlotMuonQA.C:1010
 PlotMuonQA.C:1011
 PlotMuonQA.C:1012
 PlotMuonQA.C:1013
 PlotMuonQA.C:1014
 PlotMuonQA.C:1015
 PlotMuonQA.C:1016
 PlotMuonQA.C:1017
 PlotMuonQA.C:1018
 PlotMuonQA.C:1019
 PlotMuonQA.C:1020
 PlotMuonQA.C:1021
 PlotMuonQA.C:1022
 PlotMuonQA.C:1023
 PlotMuonQA.C:1024
 PlotMuonQA.C:1025
 PlotMuonQA.C:1026
 PlotMuonQA.C:1027
 PlotMuonQA.C:1028
 PlotMuonQA.C:1029
 PlotMuonQA.C:1030
 PlotMuonQA.C:1031
 PlotMuonQA.C:1032
 PlotMuonQA.C:1033
 PlotMuonQA.C:1034
 PlotMuonQA.C:1035
 PlotMuonQA.C:1036
 PlotMuonQA.C:1037
 PlotMuonQA.C:1038
 PlotMuonQA.C:1039
 PlotMuonQA.C:1040
 PlotMuonQA.C:1041
 PlotMuonQA.C:1042
 PlotMuonQA.C:1043
 PlotMuonQA.C:1044
 PlotMuonQA.C:1045
 PlotMuonQA.C:1046
 PlotMuonQA.C:1047
 PlotMuonQA.C:1048
 PlotMuonQA.C:1049
 PlotMuonQA.C:1050
 PlotMuonQA.C:1051
 PlotMuonQA.C:1052
 PlotMuonQA.C:1053
 PlotMuonQA.C:1054
 PlotMuonQA.C:1055
 PlotMuonQA.C:1056
 PlotMuonQA.C:1057
 PlotMuonQA.C:1058
 PlotMuonQA.C:1059
 PlotMuonQA.C:1060
 PlotMuonQA.C:1061
 PlotMuonQA.C:1062
 PlotMuonQA.C:1063
 PlotMuonQA.C:1064
 PlotMuonQA.C:1065
 PlotMuonQA.C:1066
 PlotMuonQA.C:1067
 PlotMuonQA.C:1068
 PlotMuonQA.C:1069
 PlotMuonQA.C:1070
 PlotMuonQA.C:1071
 PlotMuonQA.C:1072
 PlotMuonQA.C:1073
 PlotMuonQA.C:1074
 PlotMuonQA.C:1075
 PlotMuonQA.C:1076
 PlotMuonQA.C:1077
 PlotMuonQA.C:1078
 PlotMuonQA.C:1079
 PlotMuonQA.C:1080
 PlotMuonQA.C:1081
 PlotMuonQA.C:1082
 PlotMuonQA.C:1083
 PlotMuonQA.C:1084
 PlotMuonQA.C:1085
 PlotMuonQA.C:1086
 PlotMuonQA.C:1087
 PlotMuonQA.C:1088
 PlotMuonQA.C:1089
 PlotMuonQA.C:1090
 PlotMuonQA.C:1091
 PlotMuonQA.C:1092
 PlotMuonQA.C:1093
 PlotMuonQA.C:1094
 PlotMuonQA.C:1095
 PlotMuonQA.C:1096
 PlotMuonQA.C:1097
 PlotMuonQA.C:1098
 PlotMuonQA.C:1099
 PlotMuonQA.C:1100
 PlotMuonQA.C:1101
 PlotMuonQA.C:1102
 PlotMuonQA.C:1103
 PlotMuonQA.C:1104
 PlotMuonQA.C:1105
 PlotMuonQA.C:1106
 PlotMuonQA.C:1107
 PlotMuonQA.C:1108
 PlotMuonQA.C:1109
 PlotMuonQA.C:1110
 PlotMuonQA.C:1111
 PlotMuonQA.C:1112
 PlotMuonQA.C:1113
 PlotMuonQA.C:1114
 PlotMuonQA.C:1115
 PlotMuonQA.C:1116
 PlotMuonQA.C:1117
 PlotMuonQA.C:1118
 PlotMuonQA.C:1119
 PlotMuonQA.C:1120
 PlotMuonQA.C:1121
 PlotMuonQA.C:1122
 PlotMuonQA.C:1123
 PlotMuonQA.C:1124
 PlotMuonQA.C:1125
 PlotMuonQA.C:1126
 PlotMuonQA.C:1127
 PlotMuonQA.C:1128
 PlotMuonQA.C:1129
 PlotMuonQA.C:1130
 PlotMuonQA.C:1131
 PlotMuonQA.C:1132
 PlotMuonQA.C:1133
 PlotMuonQA.C:1134
 PlotMuonQA.C:1135
 PlotMuonQA.C:1136
 PlotMuonQA.C:1137
 PlotMuonQA.C:1138
 PlotMuonQA.C:1139
 PlotMuonQA.C:1140
 PlotMuonQA.C:1141
 PlotMuonQA.C:1142
 PlotMuonQA.C:1143
 PlotMuonQA.C:1144
 PlotMuonQA.C:1145
 PlotMuonQA.C:1146
 PlotMuonQA.C:1147
 PlotMuonQA.C:1148
 PlotMuonQA.C:1149
 PlotMuonQA.C:1150
 PlotMuonQA.C:1151
 PlotMuonQA.C:1152
 PlotMuonQA.C:1153
 PlotMuonQA.C:1154
 PlotMuonQA.C:1155
 PlotMuonQA.C:1156
 PlotMuonQA.C:1157
 PlotMuonQA.C:1158
 PlotMuonQA.C:1159
 PlotMuonQA.C:1160
 PlotMuonQA.C:1161
 PlotMuonQA.C:1162
 PlotMuonQA.C:1163
 PlotMuonQA.C:1164
 PlotMuonQA.C:1165
 PlotMuonQA.C:1166
 PlotMuonQA.C:1167
 PlotMuonQA.C:1168
 PlotMuonQA.C:1169
 PlotMuonQA.C:1170
 PlotMuonQA.C:1171
 PlotMuonQA.C:1172
 PlotMuonQA.C:1173
 PlotMuonQA.C:1174
 PlotMuonQA.C:1175
 PlotMuonQA.C:1176
 PlotMuonQA.C:1177
 PlotMuonQA.C:1178
 PlotMuonQA.C:1179
 PlotMuonQA.C:1180
 PlotMuonQA.C:1181
 PlotMuonQA.C:1182
 PlotMuonQA.C:1183
 PlotMuonQA.C:1184
 PlotMuonQA.C:1185
 PlotMuonQA.C:1186
 PlotMuonQA.C:1187
 PlotMuonQA.C:1188
 PlotMuonQA.C:1189
 PlotMuonQA.C:1190
 PlotMuonQA.C:1191
 PlotMuonQA.C:1192
 PlotMuonQA.C:1193
 PlotMuonQA.C:1194
 PlotMuonQA.C:1195
 PlotMuonQA.C:1196
 PlotMuonQA.C:1197
 PlotMuonQA.C:1198
 PlotMuonQA.C:1199
 PlotMuonQA.C:1200
 PlotMuonQA.C:1201
 PlotMuonQA.C:1202
 PlotMuonQA.C:1203
 PlotMuonQA.C:1204
 PlotMuonQA.C:1205
 PlotMuonQA.C:1206
 PlotMuonQA.C:1207
 PlotMuonQA.C:1208
 PlotMuonQA.C:1209
 PlotMuonQA.C:1210
 PlotMuonQA.C:1211
 PlotMuonQA.C:1212
 PlotMuonQA.C:1213
 PlotMuonQA.C:1214
 PlotMuonQA.C:1215
 PlotMuonQA.C:1216
 PlotMuonQA.C:1217
 PlotMuonQA.C:1218
 PlotMuonQA.C:1219
 PlotMuonQA.C:1220
 PlotMuonQA.C:1221
 PlotMuonQA.C:1222
 PlotMuonQA.C:1223
 PlotMuonQA.C:1224
 PlotMuonQA.C:1225
 PlotMuonQA.C:1226
 PlotMuonQA.C:1227
 PlotMuonQA.C:1228
 PlotMuonQA.C:1229
 PlotMuonQA.C:1230
 PlotMuonQA.C:1231
 PlotMuonQA.C:1232
 PlotMuonQA.C:1233
 PlotMuonQA.C:1234
 PlotMuonQA.C:1235
 PlotMuonQA.C:1236
 PlotMuonQA.C:1237
 PlotMuonQA.C:1238
 PlotMuonQA.C:1239
 PlotMuonQA.C:1240
 PlotMuonQA.C:1241
 PlotMuonQA.C:1242
 PlotMuonQA.C:1243
 PlotMuonQA.C:1244
 PlotMuonQA.C:1245
 PlotMuonQA.C:1246
 PlotMuonQA.C:1247
 PlotMuonQA.C:1248
 PlotMuonQA.C:1249
 PlotMuonQA.C:1250
 PlotMuonQA.C:1251
 PlotMuonQA.C:1252
 PlotMuonQA.C:1253
 PlotMuonQA.C:1254
 PlotMuonQA.C:1255
 PlotMuonQA.C:1256
 PlotMuonQA.C:1257
 PlotMuonQA.C:1258
 PlotMuonQA.C:1259
 PlotMuonQA.C:1260
 PlotMuonQA.C:1261
 PlotMuonQA.C:1262
 PlotMuonQA.C:1263
 PlotMuonQA.C:1264
 PlotMuonQA.C:1265
 PlotMuonQA.C:1266
 PlotMuonQA.C:1267
 PlotMuonQA.C:1268
 PlotMuonQA.C:1269
 PlotMuonQA.C:1270
 PlotMuonQA.C:1271
 PlotMuonQA.C:1272
 PlotMuonQA.C:1273
 PlotMuonQA.C:1274
 PlotMuonQA.C:1275
 PlotMuonQA.C:1276
 PlotMuonQA.C:1277
 PlotMuonQA.C:1278
 PlotMuonQA.C:1279
 PlotMuonQA.C:1280
 PlotMuonQA.C:1281
 PlotMuonQA.C:1282
 PlotMuonQA.C:1283
 PlotMuonQA.C:1284
 PlotMuonQA.C:1285
 PlotMuonQA.C:1286
 PlotMuonQA.C:1287
 PlotMuonQA.C:1288
 PlotMuonQA.C:1289
 PlotMuonQA.C:1290
 PlotMuonQA.C:1291
 PlotMuonQA.C:1292
 PlotMuonQA.C:1293
 PlotMuonQA.C:1294
 PlotMuonQA.C:1295
 PlotMuonQA.C:1296
 PlotMuonQA.C:1297
 PlotMuonQA.C:1298
 PlotMuonQA.C:1299
 PlotMuonQA.C:1300
 PlotMuonQA.C:1301
 PlotMuonQA.C:1302
 PlotMuonQA.C:1303
 PlotMuonQA.C:1304
 PlotMuonQA.C:1305
 PlotMuonQA.C:1306
 PlotMuonQA.C:1307
 PlotMuonQA.C:1308
 PlotMuonQA.C:1309
 PlotMuonQA.C:1310
 PlotMuonQA.C:1311
 PlotMuonQA.C:1312
 PlotMuonQA.C:1313
 PlotMuonQA.C:1314
 PlotMuonQA.C:1315
 PlotMuonQA.C:1316
 PlotMuonQA.C:1317
 PlotMuonQA.C:1318
 PlotMuonQA.C:1319
 PlotMuonQA.C:1320
 PlotMuonQA.C:1321
 PlotMuonQA.C:1322
 PlotMuonQA.C:1323
 PlotMuonQA.C:1324
 PlotMuonQA.C:1325
 PlotMuonQA.C:1326
 PlotMuonQA.C:1327
 PlotMuonQA.C:1328
 PlotMuonQA.C:1329
 PlotMuonQA.C:1330
 PlotMuonQA.C:1331
 PlotMuonQA.C:1332
 PlotMuonQA.C:1333
 PlotMuonQA.C:1334
 PlotMuonQA.C:1335
 PlotMuonQA.C:1336
 PlotMuonQA.C:1337
 PlotMuonQA.C:1338
 PlotMuonQA.C:1339
 PlotMuonQA.C:1340
 PlotMuonQA.C:1341
 PlotMuonQA.C:1342
 PlotMuonQA.C:1343
 PlotMuonQA.C:1344
 PlotMuonQA.C:1345
 PlotMuonQA.C:1346
 PlotMuonQA.C:1347
 PlotMuonQA.C:1348
 PlotMuonQA.C:1349
 PlotMuonQA.C:1350
 PlotMuonQA.C:1351
 PlotMuonQA.C:1352
 PlotMuonQA.C:1353
 PlotMuonQA.C:1354
 PlotMuonQA.C:1355
 PlotMuonQA.C:1356
 PlotMuonQA.C:1357
 PlotMuonQA.C:1358
 PlotMuonQA.C:1359
 PlotMuonQA.C:1360
 PlotMuonQA.C:1361
 PlotMuonQA.C:1362
 PlotMuonQA.C:1363
 PlotMuonQA.C:1364
 PlotMuonQA.C:1365
 PlotMuonQA.C:1366
 PlotMuonQA.C:1367
 PlotMuonQA.C:1368
 PlotMuonQA.C:1369
 PlotMuonQA.C:1370
 PlotMuonQA.C:1371
 PlotMuonQA.C:1372
 PlotMuonQA.C:1373
 PlotMuonQA.C:1374
 PlotMuonQA.C:1375
 PlotMuonQA.C:1376
 PlotMuonQA.C:1377
 PlotMuonQA.C:1378
 PlotMuonQA.C:1379
 PlotMuonQA.C:1380
 PlotMuonQA.C:1381
 PlotMuonQA.C:1382
 PlotMuonQA.C:1383
 PlotMuonQA.C:1384
 PlotMuonQA.C:1385
 PlotMuonQA.C:1386
 PlotMuonQA.C:1387
 PlotMuonQA.C:1388
 PlotMuonQA.C:1389
 PlotMuonQA.C:1390
 PlotMuonQA.C:1391
 PlotMuonQA.C:1392
 PlotMuonQA.C:1393
 PlotMuonQA.C:1394
 PlotMuonQA.C:1395
 PlotMuonQA.C:1396
 PlotMuonQA.C:1397
 PlotMuonQA.C:1398
 PlotMuonQA.C:1399
 PlotMuonQA.C:1400
 PlotMuonQA.C:1401
 PlotMuonQA.C:1402
 PlotMuonQA.C:1403
 PlotMuonQA.C:1404
 PlotMuonQA.C:1405
 PlotMuonQA.C:1406
 PlotMuonQA.C:1407
 PlotMuonQA.C:1408
 PlotMuonQA.C:1409
 PlotMuonQA.C:1410
 PlotMuonQA.C:1411
 PlotMuonQA.C:1412
 PlotMuonQA.C:1413
 PlotMuonQA.C:1414
 PlotMuonQA.C:1415
 PlotMuonQA.C:1416
 PlotMuonQA.C:1417
 PlotMuonQA.C:1418
 PlotMuonQA.C:1419
 PlotMuonQA.C:1420
 PlotMuonQA.C:1421
 PlotMuonQA.C:1422
 PlotMuonQA.C:1423
 PlotMuonQA.C:1424
 PlotMuonQA.C:1425
 PlotMuonQA.C:1426
 PlotMuonQA.C:1427
 PlotMuonQA.C:1428
 PlotMuonQA.C:1429
 PlotMuonQA.C:1430
 PlotMuonQA.C:1431
 PlotMuonQA.C:1432
 PlotMuonQA.C:1433
 PlotMuonQA.C:1434
 PlotMuonQA.C:1435
 PlotMuonQA.C:1436
 PlotMuonQA.C:1437
 PlotMuonQA.C:1438
 PlotMuonQA.C:1439
 PlotMuonQA.C:1440
 PlotMuonQA.C:1441
 PlotMuonQA.C:1442
 PlotMuonQA.C:1443
 PlotMuonQA.C:1444
 PlotMuonQA.C:1445
 PlotMuonQA.C:1446
 PlotMuonQA.C:1447
 PlotMuonQA.C:1448
 PlotMuonQA.C:1449
 PlotMuonQA.C:1450
 PlotMuonQA.C:1451
 PlotMuonQA.C:1452
 PlotMuonQA.C:1453
 PlotMuonQA.C:1454
 PlotMuonQA.C:1455
 PlotMuonQA.C:1456
 PlotMuonQA.C:1457
 PlotMuonQA.C:1458
 PlotMuonQA.C:1459
 PlotMuonQA.C:1460
 PlotMuonQA.C:1461
 PlotMuonQA.C:1462
 PlotMuonQA.C:1463
 PlotMuonQA.C:1464
 PlotMuonQA.C:1465
 PlotMuonQA.C:1466
 PlotMuonQA.C:1467
 PlotMuonQA.C:1468
 PlotMuonQA.C:1469
 PlotMuonQA.C:1470
 PlotMuonQA.C:1471
 PlotMuonQA.C:1472
 PlotMuonQA.C:1473
 PlotMuonQA.C:1474
 PlotMuonQA.C:1475
 PlotMuonQA.C:1476
 PlotMuonQA.C:1477
 PlotMuonQA.C:1478
 PlotMuonQA.C:1479
 PlotMuonQA.C:1480
 PlotMuonQA.C:1481
 PlotMuonQA.C:1482
 PlotMuonQA.C:1483
 PlotMuonQA.C:1484
 PlotMuonQA.C:1485
 PlotMuonQA.C:1486
 PlotMuonQA.C:1487
 PlotMuonQA.C:1488
 PlotMuonQA.C:1489
 PlotMuonQA.C:1490
 PlotMuonQA.C:1491
 PlotMuonQA.C:1492
 PlotMuonQA.C:1493
 PlotMuonQA.C:1494
 PlotMuonQA.C:1495
 PlotMuonQA.C:1496
 PlotMuonQA.C:1497
 PlotMuonQA.C:1498
 PlotMuonQA.C:1499
 PlotMuonQA.C:1500
 PlotMuonQA.C:1501
 PlotMuonQA.C:1502
 PlotMuonQA.C:1503
 PlotMuonQA.C:1504
 PlotMuonQA.C:1505
 PlotMuonQA.C:1506
 PlotMuonQA.C:1507
 PlotMuonQA.C:1508
 PlotMuonQA.C:1509
 PlotMuonQA.C:1510
 PlotMuonQA.C:1511
 PlotMuonQA.C:1512
 PlotMuonQA.C:1513
 PlotMuonQA.C:1514
 PlotMuonQA.C:1515
 PlotMuonQA.C:1516
 PlotMuonQA.C:1517
 PlotMuonQA.C:1518
 PlotMuonQA.C:1519
 PlotMuonQA.C:1520
 PlotMuonQA.C:1521
 PlotMuonQA.C:1522
 PlotMuonQA.C:1523
 PlotMuonQA.C:1524
 PlotMuonQA.C:1525
 PlotMuonQA.C:1526
 PlotMuonQA.C:1527
 PlotMuonQA.C:1528
 PlotMuonQA.C:1529
 PlotMuonQA.C:1530
 PlotMuonQA.C:1531
 PlotMuonQA.C:1532
 PlotMuonQA.C:1533
 PlotMuonQA.C:1534
 PlotMuonQA.C:1535
 PlotMuonQA.C:1536
 PlotMuonQA.C:1537
 PlotMuonQA.C:1538
 PlotMuonQA.C:1539
 PlotMuonQA.C:1540
 PlotMuonQA.C:1541
 PlotMuonQA.C:1542
 PlotMuonQA.C:1543
 PlotMuonQA.C:1544
 PlotMuonQA.C:1545
 PlotMuonQA.C:1546
 PlotMuonQA.C:1547
 PlotMuonQA.C:1548
 PlotMuonQA.C:1549
 PlotMuonQA.C:1550
 PlotMuonQA.C:1551
 PlotMuonQA.C:1552
 PlotMuonQA.C:1553
 PlotMuonQA.C:1554
 PlotMuonQA.C:1555
 PlotMuonQA.C:1556
 PlotMuonQA.C:1557
 PlotMuonQA.C:1558
 PlotMuonQA.C:1559
 PlotMuonQA.C:1560
 PlotMuonQA.C:1561
 PlotMuonQA.C:1562
 PlotMuonQA.C:1563
 PlotMuonQA.C:1564
 PlotMuonQA.C:1565
 PlotMuonQA.C:1566
 PlotMuonQA.C:1567
 PlotMuonQA.C:1568
 PlotMuonQA.C:1569
 PlotMuonQA.C:1570
 PlotMuonQA.C:1571
 PlotMuonQA.C:1572
 PlotMuonQA.C:1573
 PlotMuonQA.C:1574
 PlotMuonQA.C:1575
 PlotMuonQA.C:1576
 PlotMuonQA.C:1577
 PlotMuonQA.C:1578
 PlotMuonQA.C:1579
 PlotMuonQA.C:1580
 PlotMuonQA.C:1581
 PlotMuonQA.C:1582
 PlotMuonQA.C:1583
 PlotMuonQA.C:1584
 PlotMuonQA.C:1585
 PlotMuonQA.C:1586
 PlotMuonQA.C:1587
 PlotMuonQA.C:1588
 PlotMuonQA.C:1589
 PlotMuonQA.C:1590
 PlotMuonQA.C:1591
 PlotMuonQA.C:1592
 PlotMuonQA.C:1593
 PlotMuonQA.C:1594
 PlotMuonQA.C:1595
 PlotMuonQA.C:1596
 PlotMuonQA.C:1597
 PlotMuonQA.C:1598
 PlotMuonQA.C:1599
 PlotMuonQA.C:1600
 PlotMuonQA.C:1601
 PlotMuonQA.C:1602
 PlotMuonQA.C:1603
 PlotMuonQA.C:1604
 PlotMuonQA.C:1605
 PlotMuonQA.C:1606
 PlotMuonQA.C:1607
 PlotMuonQA.C:1608
 PlotMuonQA.C:1609
 PlotMuonQA.C:1610
 PlotMuonQA.C:1611
 PlotMuonQA.C:1612
 PlotMuonQA.C:1613
 PlotMuonQA.C:1614
 PlotMuonQA.C:1615
 PlotMuonQA.C:1616
 PlotMuonQA.C:1617
 PlotMuonQA.C:1618
 PlotMuonQA.C:1619
 PlotMuonQA.C:1620
 PlotMuonQA.C:1621
 PlotMuonQA.C:1622
 PlotMuonQA.C:1623
 PlotMuonQA.C:1624
 PlotMuonQA.C:1625
 PlotMuonQA.C:1626
 PlotMuonQA.C:1627
 PlotMuonQA.C:1628
 PlotMuonQA.C:1629
 PlotMuonQA.C:1630
 PlotMuonQA.C:1631
 PlotMuonQA.C:1632
 PlotMuonQA.C:1633
 PlotMuonQA.C:1634
 PlotMuonQA.C:1635
 PlotMuonQA.C:1636
 PlotMuonQA.C:1637
 PlotMuonQA.C:1638
 PlotMuonQA.C:1639
 PlotMuonQA.C:1640
 PlotMuonQA.C:1641
 PlotMuonQA.C:1642
 PlotMuonQA.C:1643
 PlotMuonQA.C:1644
 PlotMuonQA.C:1645
 PlotMuonQA.C:1646
 PlotMuonQA.C:1647
 PlotMuonQA.C:1648
 PlotMuonQA.C:1649
 PlotMuonQA.C:1650
 PlotMuonQA.C:1651
 PlotMuonQA.C:1652
 PlotMuonQA.C:1653
 PlotMuonQA.C:1654
 PlotMuonQA.C:1655
 PlotMuonQA.C:1656
 PlotMuonQA.C:1657
 PlotMuonQA.C:1658
 PlotMuonQA.C:1659
 PlotMuonQA.C:1660
 PlotMuonQA.C:1661
 PlotMuonQA.C:1662
 PlotMuonQA.C:1663
 PlotMuonQA.C:1664
 PlotMuonQA.C:1665
 PlotMuonQA.C:1666
 PlotMuonQA.C:1667
 PlotMuonQA.C:1668
 PlotMuonQA.C:1669
 PlotMuonQA.C:1670
 PlotMuonQA.C:1671
 PlotMuonQA.C:1672
 PlotMuonQA.C:1673
 PlotMuonQA.C:1674
 PlotMuonQA.C:1675
 PlotMuonQA.C:1676
 PlotMuonQA.C:1677
 PlotMuonQA.C:1678
 PlotMuonQA.C:1679
 PlotMuonQA.C:1680
 PlotMuonQA.C:1681
 PlotMuonQA.C:1682
 PlotMuonQA.C:1683
 PlotMuonQA.C:1684
 PlotMuonQA.C:1685
 PlotMuonQA.C:1686
 PlotMuonQA.C:1687
 PlotMuonQA.C:1688
 PlotMuonQA.C:1689
 PlotMuonQA.C:1690
 PlotMuonQA.C:1691
 PlotMuonQA.C:1692
 PlotMuonQA.C:1693
 PlotMuonQA.C:1694
 PlotMuonQA.C:1695
 PlotMuonQA.C:1696
 PlotMuonQA.C:1697
 PlotMuonQA.C:1698
 PlotMuonQA.C:1699
 PlotMuonQA.C:1700
 PlotMuonQA.C:1701
 PlotMuonQA.C:1702
 PlotMuonQA.C:1703
 PlotMuonQA.C:1704
 PlotMuonQA.C:1705
 PlotMuonQA.C:1706
 PlotMuonQA.C:1707
 PlotMuonQA.C:1708
 PlotMuonQA.C:1709
 PlotMuonQA.C:1710
 PlotMuonQA.C:1711
 PlotMuonQA.C:1712
 PlotMuonQA.C:1713
 PlotMuonQA.C:1714
 PlotMuonQA.C:1715
 PlotMuonQA.C:1716
 PlotMuonQA.C:1717
 PlotMuonQA.C:1718
 PlotMuonQA.C:1719
 PlotMuonQA.C:1720
 PlotMuonQA.C:1721
 PlotMuonQA.C:1722
 PlotMuonQA.C:1723
 PlotMuonQA.C:1724
 PlotMuonQA.C:1725
 PlotMuonQA.C:1726
 PlotMuonQA.C:1727
 PlotMuonQA.C:1728
 PlotMuonQA.C:1729
 PlotMuonQA.C:1730
 PlotMuonQA.C:1731
 PlotMuonQA.C:1732
 PlotMuonQA.C:1733
 PlotMuonQA.C:1734
 PlotMuonQA.C:1735
 PlotMuonQA.C:1736
 PlotMuonQA.C:1737
 PlotMuonQA.C:1738
 PlotMuonQA.C:1739
 PlotMuonQA.C:1740
 PlotMuonQA.C:1741
 PlotMuonQA.C:1742
 PlotMuonQA.C:1743
 PlotMuonQA.C:1744
 PlotMuonQA.C:1745
 PlotMuonQA.C:1746
 PlotMuonQA.C:1747
 PlotMuonQA.C:1748
 PlotMuonQA.C:1749
 PlotMuonQA.C:1750
 PlotMuonQA.C:1751
 PlotMuonQA.C:1752
 PlotMuonQA.C:1753
 PlotMuonQA.C:1754
 PlotMuonQA.C:1755
 PlotMuonQA.C:1756
 PlotMuonQA.C:1757
 PlotMuonQA.C:1758
 PlotMuonQA.C:1759
 PlotMuonQA.C:1760
 PlotMuonQA.C:1761
 PlotMuonQA.C:1762
 PlotMuonQA.C:1763
 PlotMuonQA.C:1764
 PlotMuonQA.C:1765
 PlotMuonQA.C:1766
 PlotMuonQA.C:1767
 PlotMuonQA.C:1768
 PlotMuonQA.C:1769
 PlotMuonQA.C:1770
 PlotMuonQA.C:1771
 PlotMuonQA.C:1772
 PlotMuonQA.C:1773
 PlotMuonQA.C:1774
 PlotMuonQA.C:1775
 PlotMuonQA.C:1776
 PlotMuonQA.C:1777
 PlotMuonQA.C:1778
 PlotMuonQA.C:1779
 PlotMuonQA.C:1780
 PlotMuonQA.C:1781
 PlotMuonQA.C:1782
 PlotMuonQA.C:1783
 PlotMuonQA.C:1784
 PlotMuonQA.C:1785
 PlotMuonQA.C:1786
 PlotMuonQA.C:1787
 PlotMuonQA.C:1788
 PlotMuonQA.C:1789
 PlotMuonQA.C:1790
 PlotMuonQA.C:1791
 PlotMuonQA.C:1792
 PlotMuonQA.C:1793
 PlotMuonQA.C:1794
 PlotMuonQA.C:1795
 PlotMuonQA.C:1796
 PlotMuonQA.C:1797
 PlotMuonQA.C:1798
 PlotMuonQA.C:1799
 PlotMuonQA.C:1800
 PlotMuonQA.C:1801
 PlotMuonQA.C:1802
 PlotMuonQA.C:1803
 PlotMuonQA.C:1804
 PlotMuonQA.C:1805
 PlotMuonQA.C:1806
 PlotMuonQA.C:1807
 PlotMuonQA.C:1808
 PlotMuonQA.C:1809
 PlotMuonQA.C:1810
 PlotMuonQA.C:1811
 PlotMuonQA.C:1812
 PlotMuonQA.C:1813
 PlotMuonQA.C:1814
 PlotMuonQA.C:1815
 PlotMuonQA.C:1816
 PlotMuonQA.C:1817
 PlotMuonQA.C:1818
 PlotMuonQA.C:1819
 PlotMuonQA.C:1820
 PlotMuonQA.C:1821
 PlotMuonQA.C:1822
 PlotMuonQA.C:1823
 PlotMuonQA.C:1824
 PlotMuonQA.C:1825
 PlotMuonQA.C:1826
 PlotMuonQA.C:1827
 PlotMuonQA.C:1828
 PlotMuonQA.C:1829
 PlotMuonQA.C:1830
 PlotMuonQA.C:1831
 PlotMuonQA.C:1832
 PlotMuonQA.C:1833
 PlotMuonQA.C:1834
 PlotMuonQA.C:1835
 PlotMuonQA.C:1836
 PlotMuonQA.C:1837
 PlotMuonQA.C:1838
 PlotMuonQA.C:1839
 PlotMuonQA.C:1840
 PlotMuonQA.C:1841
 PlotMuonQA.C:1842
 PlotMuonQA.C:1843
 PlotMuonQA.C:1844
 PlotMuonQA.C:1845
 PlotMuonQA.C:1846
 PlotMuonQA.C:1847
 PlotMuonQA.C:1848
 PlotMuonQA.C:1849
 PlotMuonQA.C:1850
 PlotMuonQA.C:1851
 PlotMuonQA.C:1852
 PlotMuonQA.C:1853
 PlotMuonQA.C:1854
 PlotMuonQA.C:1855
 PlotMuonQA.C:1856
 PlotMuonQA.C:1857
 PlotMuonQA.C:1858
 PlotMuonQA.C:1859
 PlotMuonQA.C:1860
 PlotMuonQA.C:1861
 PlotMuonQA.C:1862
 PlotMuonQA.C:1863
 PlotMuonQA.C:1864
 PlotMuonQA.C:1865
 PlotMuonQA.C:1866
 PlotMuonQA.C:1867
 PlotMuonQA.C:1868
 PlotMuonQA.C:1869
 PlotMuonQA.C:1870
 PlotMuonQA.C:1871
 PlotMuonQA.C:1872
 PlotMuonQA.C:1873
 PlotMuonQA.C:1874
 PlotMuonQA.C:1875
 PlotMuonQA.C:1876
 PlotMuonQA.C:1877
 PlotMuonQA.C:1878
 PlotMuonQA.C:1879
 PlotMuonQA.C:1880
 PlotMuonQA.C:1881
 PlotMuonQA.C:1882
 PlotMuonQA.C:1883
 PlotMuonQA.C:1884
 PlotMuonQA.C:1885
 PlotMuonQA.C:1886
 PlotMuonQA.C:1887
 PlotMuonQA.C:1888
 PlotMuonQA.C:1889
 PlotMuonQA.C:1890
 PlotMuonQA.C:1891
 PlotMuonQA.C:1892
 PlotMuonQA.C:1893
 PlotMuonQA.C:1894
 PlotMuonQA.C:1895
 PlotMuonQA.C:1896
 PlotMuonQA.C:1897
 PlotMuonQA.C:1898
 PlotMuonQA.C:1899
 PlotMuonQA.C:1900
 PlotMuonQA.C:1901
 PlotMuonQA.C:1902
 PlotMuonQA.C:1903
 PlotMuonQA.C:1904
 PlotMuonQA.C:1905
 PlotMuonQA.C:1906
 PlotMuonQA.C:1907
 PlotMuonQA.C:1908
 PlotMuonQA.C:1909
 PlotMuonQA.C:1910
 PlotMuonQA.C:1911
 PlotMuonQA.C:1912
 PlotMuonQA.C:1913
 PlotMuonQA.C:1914
 PlotMuonQA.C:1915
 PlotMuonQA.C:1916
 PlotMuonQA.C:1917
 PlotMuonQA.C:1918
 PlotMuonQA.C:1919
 PlotMuonQA.C:1920
 PlotMuonQA.C:1921
 PlotMuonQA.C:1922
 PlotMuonQA.C:1923
 PlotMuonQA.C:1924
 PlotMuonQA.C:1925
 PlotMuonQA.C:1926
 PlotMuonQA.C:1927
 PlotMuonQA.C:1928
 PlotMuonQA.C:1929
 PlotMuonQA.C:1930
 PlotMuonQA.C:1931
 PlotMuonQA.C:1932
 PlotMuonQA.C:1933
 PlotMuonQA.C:1934
 PlotMuonQA.C:1935
 PlotMuonQA.C:1936
 PlotMuonQA.C:1937
 PlotMuonQA.C:1938
 PlotMuonQA.C:1939
 PlotMuonQA.C:1940
 PlotMuonQA.C:1941
 PlotMuonQA.C:1942
 PlotMuonQA.C:1943
 PlotMuonQA.C:1944
 PlotMuonQA.C:1945
 PlotMuonQA.C:1946
 PlotMuonQA.C:1947
 PlotMuonQA.C:1948
 PlotMuonQA.C:1949
 PlotMuonQA.C:1950
 PlotMuonQA.C:1951
 PlotMuonQA.C:1952
 PlotMuonQA.C:1953
 PlotMuonQA.C:1954
 PlotMuonQA.C:1955
 PlotMuonQA.C:1956
 PlotMuonQA.C:1957
 PlotMuonQA.C:1958
 PlotMuonQA.C:1959
 PlotMuonQA.C:1960
 PlotMuonQA.C:1961
 PlotMuonQA.C:1962
 PlotMuonQA.C:1963
 PlotMuonQA.C:1964
 PlotMuonQA.C:1965
 PlotMuonQA.C:1966
 PlotMuonQA.C:1967
 PlotMuonQA.C:1968
 PlotMuonQA.C:1969
 PlotMuonQA.C:1970
 PlotMuonQA.C:1971
 PlotMuonQA.C:1972
 PlotMuonQA.C:1973
 PlotMuonQA.C:1974
 PlotMuonQA.C:1975
 PlotMuonQA.C:1976
 PlotMuonQA.C:1977
 PlotMuonQA.C:1978
 PlotMuonQA.C:1979
 PlotMuonQA.C:1980
 PlotMuonQA.C:1981
 PlotMuonQA.C:1982
 PlotMuonQA.C:1983
 PlotMuonQA.C:1984
 PlotMuonQA.C:1985
 PlotMuonQA.C:1986
 PlotMuonQA.C:1987
 PlotMuonQA.C:1988
 PlotMuonQA.C:1989
 PlotMuonQA.C:1990
 PlotMuonQA.C:1991
 PlotMuonQA.C:1992
 PlotMuonQA.C:1993
 PlotMuonQA.C:1994
 PlotMuonQA.C:1995
 PlotMuonQA.C:1996
 PlotMuonQA.C:1997
 PlotMuonQA.C:1998
 PlotMuonQA.C:1999
 PlotMuonQA.C:2000
 PlotMuonQA.C:2001
 PlotMuonQA.C:2002
 PlotMuonQA.C:2003
 PlotMuonQA.C:2004
 PlotMuonQA.C:2005
 PlotMuonQA.C:2006
 PlotMuonQA.C:2007
 PlotMuonQA.C:2008
 PlotMuonQA.C:2009
 PlotMuonQA.C:2010
 PlotMuonQA.C:2011
 PlotMuonQA.C:2012
 PlotMuonQA.C:2013
 PlotMuonQA.C:2014
 PlotMuonQA.C:2015
 PlotMuonQA.C:2016
 PlotMuonQA.C:2017
 PlotMuonQA.C:2018
 PlotMuonQA.C:2019
 PlotMuonQA.C:2020
 PlotMuonQA.C:2021
 PlotMuonQA.C:2022
 PlotMuonQA.C:2023
 PlotMuonQA.C:2024
 PlotMuonQA.C:2025
 PlotMuonQA.C:2026
 PlotMuonQA.C:2027
 PlotMuonQA.C:2028
 PlotMuonQA.C:2029
 PlotMuonQA.C:2030
 PlotMuonQA.C:2031
 PlotMuonQA.C:2032
 PlotMuonQA.C:2033
 PlotMuonQA.C:2034
 PlotMuonQA.C:2035
 PlotMuonQA.C:2036
 PlotMuonQA.C:2037
 PlotMuonQA.C:2038
 PlotMuonQA.C:2039
 PlotMuonQA.C:2040
 PlotMuonQA.C:2041
 PlotMuonQA.C:2042
 PlotMuonQA.C:2043
 PlotMuonQA.C:2044
 PlotMuonQA.C:2045
 PlotMuonQA.C:2046
 PlotMuonQA.C:2047
 PlotMuonQA.C:2048
 PlotMuonQA.C:2049
 PlotMuonQA.C:2050
 PlotMuonQA.C:2051
 PlotMuonQA.C:2052
 PlotMuonQA.C:2053
 PlotMuonQA.C:2054
 PlotMuonQA.C:2055
 PlotMuonQA.C:2056
 PlotMuonQA.C:2057
 PlotMuonQA.C:2058
 PlotMuonQA.C:2059
 PlotMuonQA.C:2060
 PlotMuonQA.C:2061
 PlotMuonQA.C:2062
 PlotMuonQA.C:2063
 PlotMuonQA.C:2064
 PlotMuonQA.C:2065
 PlotMuonQA.C:2066
 PlotMuonQA.C:2067
 PlotMuonQA.C:2068
 PlotMuonQA.C:2069
 PlotMuonQA.C:2070
 PlotMuonQA.C:2071
 PlotMuonQA.C:2072
 PlotMuonQA.C:2073
 PlotMuonQA.C:2074
 PlotMuonQA.C:2075
 PlotMuonQA.C:2076
 PlotMuonQA.C:2077
 PlotMuonQA.C:2078
 PlotMuonQA.C:2079
 PlotMuonQA.C:2080
 PlotMuonQA.C:2081
 PlotMuonQA.C:2082
 PlotMuonQA.C:2083
 PlotMuonQA.C:2084
 PlotMuonQA.C:2085
 PlotMuonQA.C:2086
 PlotMuonQA.C:2087
 PlotMuonQA.C:2088
 PlotMuonQA.C:2089
 PlotMuonQA.C:2090
 PlotMuonQA.C:2091
 PlotMuonQA.C:2092
 PlotMuonQA.C:2093
 PlotMuonQA.C:2094
 PlotMuonQA.C:2095
 PlotMuonQA.C:2096
 PlotMuonQA.C:2097
 PlotMuonQA.C:2098
 PlotMuonQA.C:2099
 PlotMuonQA.C:2100
 PlotMuonQA.C:2101
 PlotMuonQA.C:2102
 PlotMuonQA.C:2103
 PlotMuonQA.C:2104
 PlotMuonQA.C:2105
 PlotMuonQA.C:2106
 PlotMuonQA.C:2107
 PlotMuonQA.C:2108
 PlotMuonQA.C:2109
 PlotMuonQA.C:2110
 PlotMuonQA.C:2111
 PlotMuonQA.C:2112
 PlotMuonQA.C:2113
 PlotMuonQA.C:2114
 PlotMuonQA.C:2115
 PlotMuonQA.C:2116
 PlotMuonQA.C:2117
 PlotMuonQA.C:2118
 PlotMuonQA.C:2119
 PlotMuonQA.C:2120
 PlotMuonQA.C:2121
 PlotMuonQA.C:2122
 PlotMuonQA.C:2123
 PlotMuonQA.C:2124
 PlotMuonQA.C:2125
 PlotMuonQA.C:2126
 PlotMuonQA.C:2127
 PlotMuonQA.C:2128
 PlotMuonQA.C:2129
 PlotMuonQA.C:2130
 PlotMuonQA.C:2131
 PlotMuonQA.C:2132
 PlotMuonQA.C:2133
 PlotMuonQA.C:2134
 PlotMuonQA.C:2135
 PlotMuonQA.C:2136
 PlotMuonQA.C:2137
 PlotMuonQA.C:2138
 PlotMuonQA.C:2139
 PlotMuonQA.C:2140
 PlotMuonQA.C:2141
 PlotMuonQA.C:2142
 PlotMuonQA.C:2143
 PlotMuonQA.C:2144
 PlotMuonQA.C:2145
 PlotMuonQA.C:2146
 PlotMuonQA.C:2147
 PlotMuonQA.C:2148
 PlotMuonQA.C:2149
 PlotMuonQA.C:2150
 PlotMuonQA.C:2151
 PlotMuonQA.C:2152
 PlotMuonQA.C:2153
 PlotMuonQA.C:2154
 PlotMuonQA.C:2155
 PlotMuonQA.C:2156
 PlotMuonQA.C:2157
 PlotMuonQA.C:2158
 PlotMuonQA.C:2159
 PlotMuonQA.C:2160
 PlotMuonQA.C:2161
 PlotMuonQA.C:2162
 PlotMuonQA.C:2163
 PlotMuonQA.C:2164
 PlotMuonQA.C:2165
 PlotMuonQA.C:2166
 PlotMuonQA.C:2167
 PlotMuonQA.C:2168
 PlotMuonQA.C:2169
 PlotMuonQA.C:2170
 PlotMuonQA.C:2171
 PlotMuonQA.C:2172
 PlotMuonQA.C:2173
 PlotMuonQA.C:2174
 PlotMuonQA.C:2175
 PlotMuonQA.C:2176
 PlotMuonQA.C:2177
 PlotMuonQA.C:2178
 PlotMuonQA.C:2179
 PlotMuonQA.C:2180
 PlotMuonQA.C:2181
 PlotMuonQA.C:2182
 PlotMuonQA.C:2183
 PlotMuonQA.C:2184
 PlotMuonQA.C:2185
 PlotMuonQA.C:2186
 PlotMuonQA.C:2187
 PlotMuonQA.C:2188
 PlotMuonQA.C:2189
 PlotMuonQA.C:2190
 PlotMuonQA.C:2191
 PlotMuonQA.C:2192
 PlotMuonQA.C:2193
 PlotMuonQA.C:2194
 PlotMuonQA.C:2195
 PlotMuonQA.C:2196
 PlotMuonQA.C:2197
 PlotMuonQA.C:2198
 PlotMuonQA.C:2199
 PlotMuonQA.C:2200
 PlotMuonQA.C:2201
 PlotMuonQA.C:2202
 PlotMuonQA.C:2203
 PlotMuonQA.C:2204
 PlotMuonQA.C:2205
 PlotMuonQA.C:2206
 PlotMuonQA.C:2207
 PlotMuonQA.C:2208
 PlotMuonQA.C:2209
 PlotMuonQA.C:2210
 PlotMuonQA.C:2211
 PlotMuonQA.C:2212
 PlotMuonQA.C:2213
 PlotMuonQA.C:2214
 PlotMuonQA.C:2215
 PlotMuonQA.C:2216
 PlotMuonQA.C:2217
 PlotMuonQA.C:2218
 PlotMuonQA.C:2219
 PlotMuonQA.C:2220
 PlotMuonQA.C:2221
 PlotMuonQA.C:2222
 PlotMuonQA.C:2223
 PlotMuonQA.C:2224
 PlotMuonQA.C:2225
 PlotMuonQA.C:2226
 PlotMuonQA.C:2227
 PlotMuonQA.C:2228
 PlotMuonQA.C:2229
 PlotMuonQA.C:2230
 PlotMuonQA.C:2231
 PlotMuonQA.C:2232
 PlotMuonQA.C:2233
 PlotMuonQA.C:2234
 PlotMuonQA.C:2235
 PlotMuonQA.C:2236
 PlotMuonQA.C:2237
 PlotMuonQA.C:2238
 PlotMuonQA.C:2239
 PlotMuonQA.C:2240
 PlotMuonQA.C:2241
 PlotMuonQA.C:2242
 PlotMuonQA.C:2243
 PlotMuonQA.C:2244
 PlotMuonQA.C:2245
 PlotMuonQA.C:2246
 PlotMuonQA.C:2247
 PlotMuonQA.C:2248
 PlotMuonQA.C:2249
 PlotMuonQA.C:2250
 PlotMuonQA.C:2251
 PlotMuonQA.C:2252
 PlotMuonQA.C:2253
 PlotMuonQA.C:2254
 PlotMuonQA.C:2255
 PlotMuonQA.C:2256
 PlotMuonQA.C:2257
 PlotMuonQA.C:2258
 PlotMuonQA.C:2259
 PlotMuonQA.C:2260
 PlotMuonQA.C:2261
 PlotMuonQA.C:2262
 PlotMuonQA.C:2263
 PlotMuonQA.C:2264
 PlotMuonQA.C:2265
 PlotMuonQA.C:2266
 PlotMuonQA.C:2267
 PlotMuonQA.C:2268
 PlotMuonQA.C:2269
 PlotMuonQA.C:2270
 PlotMuonQA.C:2271
 PlotMuonQA.C:2272
 PlotMuonQA.C:2273
 PlotMuonQA.C:2274
 PlotMuonQA.C:2275
 PlotMuonQA.C:2276
 PlotMuonQA.C:2277
 PlotMuonQA.C:2278
 PlotMuonQA.C:2279
 PlotMuonQA.C:2280
 PlotMuonQA.C:2281
 PlotMuonQA.C:2282
 PlotMuonQA.C:2283
 PlotMuonQA.C:2284
 PlotMuonQA.C:2285
 PlotMuonQA.C:2286
 PlotMuonQA.C:2287
 PlotMuonQA.C:2288
 PlotMuonQA.C:2289
 PlotMuonQA.C:2290
 PlotMuonQA.C:2291
 PlotMuonQA.C:2292
 PlotMuonQA.C:2293
 PlotMuonQA.C:2294
 PlotMuonQA.C:2295
 PlotMuonQA.C:2296
 PlotMuonQA.C:2297
 PlotMuonQA.C:2298
 PlotMuonQA.C:2299
 PlotMuonQA.C:2300
 PlotMuonQA.C:2301
 PlotMuonQA.C:2302
 PlotMuonQA.C:2303
 PlotMuonQA.C:2304
 PlotMuonQA.C:2305
 PlotMuonQA.C:2306
 PlotMuonQA.C:2307
 PlotMuonQA.C:2308
 PlotMuonQA.C:2309
 PlotMuonQA.C:2310
 PlotMuonQA.C:2311
 PlotMuonQA.C:2312
 PlotMuonQA.C:2313
 PlotMuonQA.C:2314
 PlotMuonQA.C:2315
 PlotMuonQA.C:2316
 PlotMuonQA.C:2317
 PlotMuonQA.C:2318
 PlotMuonQA.C:2319
 PlotMuonQA.C:2320
 PlotMuonQA.C:2321
 PlotMuonQA.C:2322
 PlotMuonQA.C:2323
 PlotMuonQA.C:2324
 PlotMuonQA.C:2325