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

/* $Id$ */

//Class to calculate the intrinsic efficiency of the detection elements of the
//MUON tracking chambers in function of the position in the detection element.
//Work on ESD only
//Author:  Nicolas LE BRIS - SUBATECH Nantes
// Modified by Matthieu LENHARDT - SUBATECH Nantes
// Modified by Antoine LARDEUX - SUBATECH Nantes
// Modified by Philippe PILLOT - SUBATECH Nantes

// ROOT includes
#include <TROOT.h>
#include <TList.h>
#include <THnSparse.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TGeoGlobalMagField.h>
#include <TVectorD.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TH2D.h>
#include <TFile.h>

// STEER includes
#include "AliESDEvent.h"
#include "AliESDMuonTrack.h"
#include "AliGeomManager.h"
#include "AliCDBManager.h"
#include "AliInputEventHandler.h"
#include "AliCounterCollection.h"

// ANALYSIS includes
#include "AliAnalysisDataSlot.h"
#include "AliAnalysisDataContainer.h"
#include "AliAnalysisManager.h"
#include "AliCentrality.h"
#include "AliAnalysisTaskMuonTrackingEff.h"

//MUON includes
#include "AliMUONCDB.h"
#include "AliMUONESDInterface.h"
#include "AliMUONVTrackReconstructor.h"
#include "AliMUONRecoParam.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONTrack.h"
#include "AliMUONTrackParam.h"
#include "AliMUONTrackExtrap.h"
#include "AliMUONVCluster.h"
#include "AliMUONConstants.h"
#include "AliMUON2DMap.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONCalibParamNI.h"
#include "AliMUONTrackerData.h"

//include MUON/mapping:
#include "AliMpDEManager.h"
#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
#include "AliMpPad.h"
#include "AliMpArea.h"
#include "AliMpDEIterator.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"

ClassImp(AliAnalysisTaskMuonTrackingEff)

const Int_t AliAnalysisTaskMuonTrackingEff::fgkNofDE[11] = {4, 4, 4, 4, 18, 18, 26, 26, 26, 26, 156};
const Int_t AliAnalysisTaskMuonTrackingEff::fgkNofBusPath = 888;
const Int_t AliAnalysisTaskMuonTrackingEff::fgkNofManu = 16828;

//________________________________________________________________________
AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff() :
  AliAnalysisTaskSE(),
  fOCDBLoaded(kFALSE),
  fOCDBpath(""),
  fAlignOCDBpath(""),
  fRecoParamOCDBpath(""),
  fCentMin(-FLT_MAX),
  fCentMax(FLT_MAX),
  fMuonTrackCuts(0x0),
  fPtCut(-1.),
  fUseMCLabel(kFALSE),
  fEnableDisplay(kFALSE),
  fTransformer(0x0),
  fDEPlanes(0x0),
  fClusters(0x0),
  fChamberTDHistList(0x0),
  fChamberTTHistList(0x0),
  fChamberSDHistList(0x0),
  fExtraHistList(0x0)
{
  /// Default constructor
}

//________________________________________________________________________
AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff(TString name) :
  AliAnalysisTaskSE(name),
  fOCDBLoaded(kFALSE),
  fOCDBpath("raw://"),
  fAlignOCDBpath(""),
  fRecoParamOCDBpath(""),
  fCentMin(-FLT_MAX),
  fCentMax(FLT_MAX),
  fMuonTrackCuts(0x0),
  fPtCut(-1.),
  fUseMCLabel(kFALSE),
  fEnableDisplay(kFALSE),
  fTransformer(0x0),
  fDEPlanes(0x0),
  fClusters(0x0),
  fChamberTDHistList(0x0),
  fChamberTTHistList(0x0),
  fChamberSDHistList(0x0),
  fExtraHistList(0x0)
{
  /// Constructor
  
  // Output slots
  DefineOutput(1, AliCounterCollection::Class());
  DefineOutput(2, TList::Class());
  DefineOutput(3, TList::Class());
  DefineOutput(4, TList::Class());
  DefineOutput(5, TList::Class());
}

//________________________________________________________________________
AliAnalysisTaskMuonTrackingEff::~AliAnalysisTaskMuonTrackingEff()
{
  /// Destructor
  if (!AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
    delete fMuonTrackCuts;
    delete fClusters;
    delete fChamberTDHistList;
    delete fChamberTTHistList;
    delete fChamberSDHistList;
    delete fExtraHistList;
  }
  delete fTransformer;
  delete fDEPlanes;
}

//________________________________________________________________________
void AliAnalysisTaskMuonTrackingEff::NotifyRun()
{
  /// Load the OCDB and the Geometry
  
  // Load it only once
  if (fOCDBLoaded) return;
  
  // OCDB
  AliCDBManager* man = AliCDBManager::Instance();
  if (man->IsDefaultStorageSet()) printf("EfficiencyTask: CDB default storage already set!\n");
  else {
    man->SetDefaultStorage(fOCDBpath.Data());
    if (!fAlignOCDBpath.IsNull()) man->SetSpecificStorage("MUON/Align/Data",fAlignOCDBpath.Data());
    if (!fRecoParamOCDBpath.IsNull()) man->SetSpecificStorage("MUON/Calib/RecoParam",fRecoParamOCDBpath.Data());
  }
  if (man->GetRun() > -1) printf("EfficiencyTask: run number already set!\n");
  else man->SetRun(fCurrentRunNumber);
  
  // Geometry
  if (!AliGeomManager::GetGeometry()) {
    AliGeomManager::LoadGeometry();
    if (!AliGeomManager::GetGeometry()) return;  
    if (!AliGeomManager::ApplyAlignObjsFromCDB("MUON")) return;
  }
  fTransformer = new AliMUONGeometryTransformer();
  fTransformer->LoadGeometryData();
  
  // Mapping
  if (!AliMpSegmentation::Instance(kFALSE) || !AliMpDDLStore::Instance(kFALSE)) {
    if (!AliMUONCDB::LoadMapping()) return;
  }
  
  // vectors (x0, y0, z0, a, b, c) defining the plane of each DE in the global frame
  Double_t pl0[3] = {0., 0., 0.};
  Double_t pl1[3] = {0., 0., 1.};
  Double_t pg0[3], pg1[3];
  fDEPlanes = new TObjArray(1026);
  fDEPlanes->SetOwner(kTRUE);
  for (Int_t i = 0; i < AliMUONConstants::NTrackingCh(); i++) {
    AliMpDEIterator it;
    it.First(i);
    while (!it.IsDone()) {
      Int_t deId = it.CurrentDEId();
      fTransformer->Local2Global(deId, pl0[0], pl0[1], pl0[2], pg0[0], pg0[1], pg0[2]);
      fTransformer->Local2Global(deId, pl1[0], pl1[1], pl1[2], pg1[0], pg1[1], pg1[2]);
      TVectorD *plane = new TVectorD(6);
      (*plane)[0] = pg0[0];
      (*plane)[1] = pg0[1];
      (*plane)[2] = pg0[2];
      (*plane)[3] = pg1[0] - pg0[0];
      (*plane)[4] = pg1[1] - pg0[1];
      (*plane)[5] = pg1[2] - pg0[2];
      fDEPlanes->AddAt(plane, deId);
      it.Next();
    }
  }
  
  // Prepare the tracker (will load RecoParam and magnetic field if not already done)
  if (!AliMUONESDInterface::GetTracker()) AliMUONESDInterface::ResetTracker();
  
  // get the trackCuts for this run
  if (!fMuonTrackCuts) AliFatal("You must specify the requested selections (AliMuonTrackCut obj is missing)");
  fMuonTrackCuts->SetRun(fInputHandler);
  fMuonTrackCuts->Print();
  
  fOCDBLoaded = kTRUE;
}

//________________________________________________________________________
void AliAnalysisTaskMuonTrackingEff::UserCreateOutputObjects()
{
  /// Define output objects
  
  // count detected, accepted and expected clusters
  fClusters = new AliCounterCollection(GetOutputSlot(1)->GetContainer()->GetName());
  fClusters->AddRubric("Cluster", "Detected/Accepted/Expected");
  fClusters->AddRubric("Chamber", AliMpConstants::NofTrackingChambers());
  fClusters->AddRubric("DE", fgkNofDE[10]);
  fClusters->AddRubric("BusPatch", fgkNofBusPath);
  fClusters->AddRubric("Manu", fgkNofManu);
  fClusters->AddRubric("Channel", AliMpConstants::ManuNofChannels());
  fClusters->Init();
  
  fChamberTDHistList = new TList();
  fChamberTDHistList->SetOwner();
  fChamberTTHistList = new TList();
  fChamberTTHistList->SetOwner();
  fChamberSDHistList = new TList();
  fChamberSDHistList->SetOwner();
  fExtraHistList = new TList();
  fExtraHistList->SetOwner();
  
  THnSparse *hn = 0x0;
  TString histName, histTitle;
  
  // centrality bins
  Int_t nCentBins = 22;
  Double_t centRange[2] = {-5., 105.};
  
  // prepare binning for THnSparse
  // 1: Ch or DE Id
  // 2: centrality
  // 3: pt
  // 4: y
  // 5: phi
  // 6: sign
  const Int_t nDims = 6;
  Int_t nBins[nDims] = {0, nCentBins, 20, 15, 15, 2};
  Double_t xMin[nDims] = {0., centRange[0], 0., -4., 0., -2.};
  Double_t xMax[nDims] = {0., centRange[1], 20., -2.5, TMath::TwoPi(), 2.};
  
  for (Int_t iCh = 0; iCh < 10; iCh++)
  {
    // histograms per chamber
    nBins[0] = fgkNofDE[iCh];
    xMin[0] = 0.; xMax[0] = static_cast<Double_t>(fgkNofDE[iCh]);
    histTitle.Form("ChamberNbr %d", iCh+1);
    histName.Form("TD_ChamberNbr%d", iCh+1);
    hn = new THnSparseT<TArrayF>(histName, histTitle, nDims, nBins, xMin, xMax);
    fChamberTDHistList->AddAt(hn, iCh);
    histName.Form("TT_ChamberNbr%d",iCh+1);
    hn = new THnSparseT<TArrayF>(histName, histTitle, nDims, nBins, xMin, xMax);
    fChamberTTHistList->AddAt(hn, iCh);
    histName.Form("SD_ChamberNbr%d", iCh+1);
    hn = new THnSparseT<TArrayF>(histName, histTitle, nDims, nBins, xMin, xMax);
    fChamberSDHistList->AddAt(hn, iCh);
    
  }
  
  // global histograms per chamber
  nBins[0] = 10;
  xMin[0] = 0.5; xMax[0] = 10.5;
  hn = new THnSparseT<TArrayF>("TD_Chambers 11", "Chambers 11", nDims, nBins, xMin, xMax);
  fChamberTDHistList->AddAt(hn, 10);
  hn = new THnSparseT<TArrayF>("TT_Chambers 11", "Chambers 11", nDims, nBins, xMin, xMax);
  fChamberTTHistList->AddAt(hn, 10);
  hn = new THnSparseT<TArrayF>("SD_Chambers 11", "Chambers 11", nDims, nBins, xMin, xMax);
  fChamberSDHistList->AddAt(hn, 10);

  //Extra histograms
  TH1F *fHistCent = new TH1F("fHistCent", "centrality distribution", nCentBins, centRange[0], centRange[1]);
  fExtraHistList->AddAt(fHistCent,0);
  TH1F *fHistPt = new TH1F("fHistPt", "pt distribution", 250, 0., 50.);
  fExtraHistList->AddAt(fHistPt,1);
  TH1F *fHistY = new TH1F("fHistY", "y distribution", 60, -4., -2.5);
  fExtraHistList->AddAt(fHistY,2);
  TH1F *fHistTheta = new TH1F("fHistTheta", "theta distribution", 120, 2.8, 3.2);
  fExtraHistList->AddAt(fHistTheta,3);
  TH1F *fHistP = new TH1F("fHistP", "momentum distribution", 250, 0., 500.);
  fExtraHistList->AddAt(fHistP,4);
  TH1F *fHistZ = new TH1F("fHistZ", "Z distribution", 200, -100., 100.);
  fExtraHistList->AddAt(fHistZ,5);
  TH1F *fHistPhi = new TH1F("fHistPhi", "phi distribution", 60, 0., TMath::TwoPi());
  fExtraHistList->AddAt(fHistPhi,6);
  TH1F *fHistPtRap2p5To2p75 = new TH1F("fHistPtRap2p5To2p75", "2.5 < y < 2.75", 250, 0., 50.);
  fExtraHistList->AddAt(fHistPtRap2p5To2p75,7);
  TH1F *fHistPtRap2p75To3p0 = new TH1F("fHistPtRap2p75To3p0", "2.75 < y < 3.0", 250, 0., 50.);
  fExtraHistList->AddAt(fHistPtRap2p75To3p0,8);
  TH1F *fHistPtRap3p0To3p25 = new TH1F("fHistPtRap3p0To3p25", "3.0 < y < 3.25", 250, 0., 50.);
  fExtraHistList->AddAt(fHistPtRap3p0To3p25,9);
  TH1F *fHistPtRap3p25To3p5 = new TH1F("fHistPtRap3p25To3p5", "3.25 < y < 3.5", 250, 0., 50.);
  fExtraHistList->AddAt(fHistPtRap3p25To3p5,10);
  TH1F *fHistPtRap3p5To3p75 = new TH1F("fHistPtRap3p5To3p75", "3.5 < y < 3.75", 250, 0., 50.);
  fExtraHistList->AddAt(fHistPtRap3p5To3p75,11);
  TH1F *fHistPtRap3p75To4p0 = new TH1F("fHistPtRap3p75To4p0", "3.75 < y < 4.0", 250, 0., 50.);
  fExtraHistList->AddAt(fHistPtRap3p75To4p0,12);
  TH1F *fHistRapPt1p0To2p0 = new TH1F("fHistRapPt1p0To2p0", "1.0 < pT < 2.0", 60, -4., -2.5);
  fExtraHistList->AddAt(fHistRapPt1p0To2p0,13);
  TH1F *fHistRapPt2p0To5p0 = new TH1F("fHistRapPt2p0To5p0", "2.0 < pT < 5.0", 60, -4., -2.5);
  fExtraHistList->AddAt(fHistRapPt2p0To5p0,14);
  TH1F *fHistRapPt5p0To8p0 = new TH1F("fHistRapPt5p0To8p0", "5.0 < pT < 8.0", 60, -4., -2.5);
  fExtraHistList->AddAt(fHistRapPt5p0To8p0,15);
  TH1F *fHistRapPt2p0To4p0 = new TH1F("fHistRapPt2p0To4p0", "2.0 < pT < 4.0", 60, -4., -2.5);
  fExtraHistList->AddAt(fHistRapPt2p0To4p0,16);
  TH1F *fHistRapPt4p0To8p0 = new TH1F("fHistRapPt4p0To8p0", "4.0 < pT < 8.0", 60, -4., -2.5);
  fExtraHistList->AddAt(fHistRapPt4p0To8p0,17);
  
  TH2D *hDXYOverDXYMax = new TH2D("hDXYOverDXYMax", "DXY / DXYMax;DX / DXMax;DY / DYMax", 100, -1., 1., 100, -1., 1.);
  fExtraHistList->AddAt(hDXYOverDXYMax,18);
  TH2D *hDXOverDXMax = new TH2D("hDXOverDXMax", "DX / DXMax vs pXZ;pXZ;DX / DXMax", 50, 0., 500., 100, -1., 1.);
  fExtraHistList->AddAt(hDXOverDXMax,19);
  TH2D *hDYOverDYMax = new TH2D("hDYOverDYMax", "DY / DYMax vs pYZ;pYZ;DY / DYMax", 50, 0., 500., 100, -1., 1.);
  fExtraHistList->AddAt(hDYOverDYMax,20);
  
  // post the output data at least once
  PostData(1, fClusters);  
  PostData(2, fChamberTDHistList);
  PostData(3, fChamberTTHistList);
  PostData(4, fChamberSDHistList);
  PostData(5, fExtraHistList);
}

//________________________________________________________________________
void AliAnalysisTaskMuonTrackingEff::UserExec(Option_t *)
{
  /// Main event loop
  
  // check the OCDB has been loaded properly
  if (!fOCDBLoaded) AliFatal("Problem occur while loading OCDB objects");
  
  // get the current event
  AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
  if (!esd) return;
  
  // get the centrality
  Double_t cent = esd->GetCentrality()->GetCentralityPercentileUnchecked("V0M");
  if (cent <= fCentMin || cent > fCentMax) return;
  static_cast<TH1F*>(fExtraHistList->At(0))->Fill(cent);
  
  // loop over tracks
  AliMUONTrack track;
  Int_t nTracks = (Int_t)esd->GetNumberOfMuonTracks();
  for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
    AliESDMuonTrack *esdTrack = esd->GetMuonTrack(iTrack);
    
    // apply track selections
    Double_t pT = esdTrack->Pt();
    if (!esdTrack->ContainTrackerData() || !fMuonTrackCuts->IsSelected(esdTrack) || (fPtCut > 0. && pT < fPtCut) ||
	(fUseMCLabel && (esdTrack->GetLabel() < 0 || esdTrack->TestBit(BIT(22))))) continue;
    
    // fill histograms
    Double_t y = esdTrack->Y();
    Double_t phi = esdTrack->Phi();
    static_cast<TH1F*>(fExtraHistList->At(1))->Fill(pT);
    static_cast<TH1F*>(fExtraHistList->At(2))->Fill(y);
    static_cast<TH1F*>(fExtraHistList->At(3))->Fill(esdTrack->Theta());
    static_cast<TH1F*>(fExtraHistList->At(4))->Fill(esdTrack->P());
    static_cast<TH1F*>(fExtraHistList->At(5))->Fill(esdTrack->GetZ());
    static_cast<TH1F*>(fExtraHistList->At(6))->Fill(phi);
    if ( (y < -2.5) && (y > -2.75) ) static_cast<TH1F*>(fExtraHistList->At(7))->Fill(pT);
    if ( (y < -2.75) && (y > -3.0) ) static_cast<TH1F*>(fExtraHistList->At(8))->Fill(pT);
    if ( (y < -3.0) && (y > -3.25) ) static_cast<TH1F*>(fExtraHistList->At(9))->Fill(pT);
    if ( (y < -3.25) && (y > -3.5) ) static_cast<TH1F*>(fExtraHistList->At(10))->Fill(pT);
    if ( (y < -3.5) && (y > -3.75) ) static_cast<TH1F*>(fExtraHistList->At(11))->Fill(pT);
    if ( (y < -3.75) && (y > -4.0) ) static_cast<TH1F*>(fExtraHistList->At(12))->Fill(pT);
    if ( (pT > 1.0) && (pT < 2.0) ) static_cast<TH1F*>(fExtraHistList->At(13))->Fill(y);
    if ( (pT > 2.0) && (pT < 5.0) ) static_cast<TH1F*>(fExtraHistList->At(14))->Fill(y);
    if ( (pT > 5.0) && (pT < 8.0) ) static_cast<TH1F*>(fExtraHistList->At(15))->Fill(y);
    if ( (pT > 2.0) && (pT < 4.0) ) static_cast<TH1F*>(fExtraHistList->At(16))->Fill(y);
    if ( (pT > 4.0) && (pT < 8.0) ) static_cast<TH1F*>(fExtraHistList->At(17))->Fill(y);
    
    // convert to MUON track
    AliMUONESDInterface::ESDToMUON(*esdTrack, track);
    Double_t trackInfo[6] = {0., cent, pT, y, phi, static_cast<Double_t>(esdTrack->Charge())};
    
    // tag the removable clusters/chambers, i.e. not needed to fulfill the tracking conditions
    Bool_t removableChambers[10];
    Bool_t isValidTrack = TagRemovableClusters(track, removableChambers);
    
    // loop over clusters
    Int_t previousCh = -1;
    TObjArray *trackParams = track.GetTrackParamAtCluster();
    AliMUONTrackParam *trackParam = static_cast<AliMUONTrackParam*>(trackParams->First());
    while (trackParam) {
      
      AliMUONVCluster* cluster = trackParam->GetClusterPtr();
      Int_t currentCh = cluster->GetChamberId();
      Int_t currentDE = cluster->GetDetElemId();
      
      // find the pads at the position of the cluster
      Double_t pos[3] = {cluster->GetX(), cluster->GetY(), cluster->GetZ()};
      AliMpPad pad[2];
      FindPads(currentDE, pos, pad);
      
      AliMUONTrackParam *nextTrackParam = static_cast<AliMUONTrackParam*>(trackParams->After(trackParam));
      Int_t nextCh = nextTrackParam ? nextTrackParam->GetClusterPtr()->GetChamberId() : 10;
      
      // record all clusters/chambers
      RecordCluster(currentCh, currentDE, pad, trackInfo, "Detected", fChamberSDHistList, (currentCh != nextCh));
      
      // record removable clusters/chambers
      if (trackParam->IsRemovable()) {
	Bool_t recordChamber = (removableChambers[currentCh] && currentCh != nextCh);
	RecordCluster(currentCh, currentDE, pad, trackInfo, "Accepted", fChamberTDHistList, recordChamber);
	RecordCluster(currentCh, currentDE, pad, trackInfo, "Expected", fChamberTTHistList, recordChamber);
      }
      
      // record missing clusters/chambers prior to current one
      while (previousCh < currentCh-1 && (isValidTrack || previousCh < 5))
	FindAndRecordMissingClusters(*trackParam, ++previousCh, trackInfo);
      
      // stop if we reached station 4 or 5 and the track is not valid
      if (!isValidTrack && currentCh > 5) break;
      
      // record missing cluster on the same chamber
      if (currentCh != previousCh && currentCh != nextCh)
	FindAndRecordMissingClusters(*trackParam, currentCh, trackInfo);
      
      if (nextTrackParam) {
	
	// prepare next step
	previousCh = currentCh;
	trackParam = nextTrackParam;
	
      } else {
	
	// record missing clusters/chambers next to the last chamber
	while (++currentCh < 10 && (isValidTrack || currentCh < 6))
	  FindAndRecordMissingClusters(*trackParam, currentCh, trackInfo);
	
	break;
      }
      
    }
    
  }
  
  // post the output data:
  PostData(1, fClusters);  
  PostData(2, fChamberTDHistList);
  PostData(3, fChamberTTHistList);
  PostData(4, fChamberSDHistList);
  PostData(5, fExtraHistList);
}
    
//________________________________________________________________________
void AliAnalysisTaskMuonTrackingEff::Terminate(Option_t *)
{
  /// final plots
  
  if (!fEnableDisplay) return;
  
  fClusters = static_cast<AliCounterCollection*>(GetOutputData(1));
  if (!fClusters) return;
  
  // load mapping locally if not already done
  AliCDBManager* man = AliCDBManager::Instance();
  if (!man->IsDefaultStorageSet()) {
    if (gROOT->IsBatch()) man->SetDefaultStorage("alien://folder=/alice/simulation/2008/v4-15-Release/Ideal");
    else man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  }
  if (man->GetRun() < 0) man->SetRun(0);
  if (!AliMpSegmentation::Instance(kFALSE) || !AliMpDDLStore::Instance(kFALSE)) {
    if (!AliMUONCDB::LoadMapping()) return;
  }
  
  TString clusterKey[3] = {"Detected", "Accepted", "Expected"};
  
  // list of fired DEs
  TObjArray *deKeys = fClusters->GetKeyWords("DE").Tokenize(",");
  Int_t nDEs = deKeys->GetEntriesFast();
  
  // loop over cluster types
  for (Int_t iKey = 0; iKey < 3; iKey++) {
    
    // create the cluster store
    AliMUON2DMap clustersStore(kTRUE);
    
    // loop over fired DEs
    for (Int_t iDE = 0; iDE < nDEs; iDE++) {
      
      // get DE Id
      TString deKey = static_cast<TObjString*>(deKeys->UncheckedAt(iDE))->GetString();
      Int_t deId = deKey.Atoi();
      
      // get numbers of clusters in this DE for each manu/channel combination
      TH2D *channelVsManu = fClusters->Get("channel", "Manu",
					   Form("Cluster:%s/DE:%s", clusterKey[iKey].Data(), deKey.Data()));
      Int_t nManus = channelVsManu->GetNbinsX();
      Int_t nChannels = channelVsManu->GetNbinsY();
      
      // loop over fired manus
      for (Int_t iManu = 1; iManu <= nManus; iManu++) {
	
	// get manu Id
	TString manuKey = channelVsManu->GetXaxis()->GetBinLabel(iManu);
	Int_t manuId = manuKey.Atoi();
	
	// loop over fired channels
	for (Int_t iChannel = 1; iChannel <= nChannels; iChannel++) {
	  
	  // get channel Id
	  TString channelKey = channelVsManu->GetYaxis()->GetBinLabel(iChannel);
	  Int_t channelId = channelKey.Atoi();
	  
	  // get the number of clusters in this pad
	  Int_t nClusters = static_cast<Int_t>(channelVsManu->GetBinContent(iManu, iChannel));
	  if (nClusters < 1) continue;
	  
	  // register the clusters
	  AliMUONVCalibParam* c = static_cast<AliMUONVCalibParam*>(clustersStore.FindObject(deId, manuId));
	  if (!c) {
	    c = new AliMUONCalibParamNI(1, AliMpConstants::ManuNofChannels(), deId, manuId);
	    clustersStore.Add(c);
	  }
	  c->SetValueAsInt(channelId, 0, nClusters);
	  
	}
	
      }
      
      // clean memory
      delete channelVsManu;
      
    }
    
    // create the tracker data
    TString suffix = GetName();
    suffix.ReplaceAll("MuonTrackingEfficiency","");
    AliMUONTrackerData clustersData(Form("%sClusters%s", clusterKey[iKey].Data(), suffix.Data()),
				    Form("%s clusters %s", clusterKey[iKey].Data(), suffix.Data()), 1, kFALSE);
    clustersData.SetDimensionName(0, "count");
    clustersData.Add(clustersStore);
    
    // save it to a file
    TFile *outFile = TFile::Open("DisplayResults.root", "UPDATE");
    if (outFile && outFile->IsOpen()) {
      clustersData.Write(0x0, TObject::kOverwrite);
      outFile->Close();
    }
    
  }
  
  // clean memory
  delete deKeys;
  
}

//________________________________________________________________________
Bool_t AliAnalysisTaskMuonTrackingEff::TagRemovableClusters(AliMUONTrack &track, Bool_t removableChambers[10])
{
  /// Identify clusters/chambers that can be removed from the track
  /// return kTRUE if the track as it is satisfies the tracking conditions
  
  for (Int_t i = 0; i < 10; i++) removableChambers[i] = kFALSE;
  
  // check if track is valid as it is
  UInt_t requestedStationMask = AliMUONESDInterface::GetTracker()->GetRecoParam()->RequestedStationMask();
  Bool_t request2ChInSameSt45 = !AliMUONESDInterface::GetTracker()->GetRecoParam()->MakeMoreTrackCandidates();
  Bool_t isValidTrack = track.IsValid(requestedStationMask, request2ChInSameSt45);
  
  // count the number of clusters per chamber and the number of chambers hit per station
  Int_t nClInCh[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  Int_t nChInSt[5] = {0, 0, 0, 0, 0};
  Int_t previousCh = -1;
  Int_t nClusters = track.GetNClusters();
  for (Int_t i = 0; i < nClusters; i++) {
    
    AliMUONTrackParam *trackParam = static_cast<AliMUONTrackParam*>(track.GetTrackParamAtCluster()->UncheckedAt(i));
    Int_t currentCh = trackParam->GetClusterPtr()->GetChamberId();
    Int_t currentSt = currentCh/2;
    
    nClInCh[currentCh]++;
    
    if (currentCh != previousCh) {
      previousCh = currentCh;
      nChInSt[currentSt]++;
    }
    
  }
  
  // tag removable clusters/chambers
  for (Int_t i = 0; i < nClusters; i++) {
    
    AliMUONTrackParam *trackParam = static_cast<AliMUONTrackParam*>(track.GetTrackParamAtCluster()->UncheckedAt(i));
    Int_t currentCh = trackParam->GetClusterPtr()->GetChamberId();
    Int_t currentSt = currentCh/2;
    
    // for stations 1, 2 and 3
    if (currentSt < 3) {
      
      if (!((1 << currentSt) & requestedStationMask) || // station not required
	  nChInSt[currentSt] == 2) { // or both chamber hit in the station
	
	removableChambers[currentCh] = kTRUE;
	trackParam->SetRemovable(kTRUE);
	
      } else if (nClInCh[currentCh] == 2) { // 2 clusters in the chamber
	
	trackParam->SetRemovable(kTRUE);
	
      }
      
    } else { // for stations 4 and 5
      
      // if the track is already not valid we can certainly not remove more cluster on station 4 or 5
      if (!isValidTrack) continue;
      
      if (((request2ChInSameSt45 && // tracking starts with 2 chamber hits in the same station:
	    nChInSt[4-currentSt/4] == 2) || // --> 2 hits in the other stations
	   (!request2ChInSameSt45 && // or tracking starts with 2 chamber hits in stations 4&5:
	    nChInSt[3]+nChInSt[4] >= 3)) && // --> at least 3 hits in stations 4&5
	  (!((1 << currentSt) & requestedStationMask) || // + this station not requested
	   nChInSt[currentSt] == 2)) { // or 2 hits in it
        
        removableChambers[currentCh] = kTRUE;
        trackParam->SetRemovable(kTRUE);
        
      } else if (nClInCh[currentCh] == 2) { // 2 clusters in the chamber
	
	trackParam->SetRemovable(kTRUE);
	
      }
      
    }
    
  }
  
  return isValidTrack;
  
}

//________________________________________________________________________
void AliAnalysisTaskMuonTrackingEff::FindAndRecordMissingClusters(AliMUONTrackParam &param, Int_t chamber,
								  Double_t trackInfo[6])
{
  /// Find which detection elements should have been hit and record the missing clusters
  
  static const Double_t maxDZ = 0.01; // max distance between extrapolated track and DE to stop to extrapolate
  static const Double_t maxDevX = 0.01; // max X-deviation per dZ(cm) between the linear and the correct extrapolation
  static const Double_t maxDevY = 0.1; // max Y-deviation per dZ(cm) between the linear and the correct extrapolation
  static const Double_t minDXY = 1.; // min half-size of track area to intersect with DE to account for bad DE area
  
  Bool_t missingChamber = (chamber != param.GetClusterPtr()->GetChamberId());
  Int_t startDE = param.GetClusterPtr()->GetDetElemId();
  Double_t pos[3], maxDX, maxDY, dZ = 0.;
  AliMUONTrackParam param1, param2;
  AliMpPad pad[2];
  
  // extrapolate the track to the missing chamber if needed
  param1.SetParameters(param.GetParameters());
  param1.SetZ(param.GetZ());
  if (missingChamber && !AliMUONTrackExtrap::ExtrapToZ(&param1, AliMUONConstants::DefaultChamberZ(chamber))) return;
  
  Double_t pX = param1.Px();
  Double_t pY = param1.Py();
  Double_t pZ = param1.Pz();
  Double_t pXZ = TMath::Sqrt(pX*pX + pZ*pZ);
  Double_t pYZ = TMath::Sqrt(pY*pY + pZ*pZ);
  
  // loop over DEs
  AliMpDEIterator it;
  it.First(chamber);
  while (!it.IsDone()) {
    Int_t deId = it.CurrentDEId();
    
    // skip current cluster
    if (deId == startDE) {
      it.Next();
      continue;
    }
    
    // reset parameters
    param2.SetParameters(param1.GetParameters());
    param2.SetZ(param1.GetZ());
    
    // check if the track can cross this DE
    Int_t nStep = 0;
    Bool_t crossDE = kFALSE;
    Bool_t extrapOk = kTRUE;
    do {
      
      // plots to check that the correct extrapolation is within the area opened around the linear extrapolation
      if (nStep >= 1) {
	Double_t dX = pos[0]-param2.GetNonBendingCoor();
	Double_t dY = pos[1]-param2.GetBendingCoor();
	Double_t dXOverDXMax = (dZ > 0.) ? dX*pXZ/(maxDevX*dZ) : 0.;
	Double_t dYOverDYMax = (dZ > 0.) ? dY*pYZ/(maxDevY*dZ) : 0.;
	static_cast<TH2D*>(fExtraHistList->At(18))->Fill(dXOverDXMax, dYOverDYMax);
	static_cast<TH2D*>(fExtraHistList->At(19))->Fill(pXZ, dXOverDXMax);
	static_cast<TH2D*>(fExtraHistList->At(20))->Fill(pYZ, dYOverDYMax);
	if (dXOverDXMax >= 1.) printf("st = %d; pXZ = %f; dZ = %f; dX = %f; dX*PXZ/(dZ*maxDevX) = %f\n",
				      chamber/2, pXZ, dZ, dX, dXOverDXMax);
	if (dYOverDYMax >= 1.) printf("st = %d; pYZ = %f; dZ = %f; dY = %f; dY*PYZ/(dZ*maxDevY) = %f\n",
				      chamber/2, pYZ, dZ, dY, dYOverDYMax);
      }
      nStep++;
      
      // build the area in which the track can eventually cross this DE and check if it overlaps with the DE area
      Intersect(param2, deId, pos);
      dZ = TMath::Abs(pos[2]-param2.GetZ());
      maxDX = minDXY + maxDevX*dZ/pXZ;
      maxDY = minDXY + maxDevY*dZ/pYZ;
      AliMpArea area(pos[0], pos[1], maxDX, maxDY);
      crossDE = OverlapDE(area, deId);
      
    } while(crossDE && dZ > maxDZ && (extrapOk = AliMUONTrackExtrap::ExtrapToZ(&param2, pos[2])));
    
    // find the pads (if any) at the position of the missing cluster and register it
    if (crossDE && extrapOk && FindPads(deId, pos, pad)) {
      RecordCluster(chamber, deId, pad, trackInfo, "Expected", fChamberTTHistList, missingChamber);
      missingChamber = kFALSE;
    }
    
    it.Next();
  }
  
}

//________________________________________________________________________
void AliAnalysisTaskMuonTrackingEff::Intersect(AliMUONTrackParam &param, Int_t deId, Double_t p[3])
{
  /// Find the intersection point between the track (assuming straight line) and the DE in the global frame
  
  Double_t pos[3] = {param.GetNonBendingCoor(), param.GetBendingCoor(), param.GetZ()};
  Double_t slope[2] = {param.GetNonBendingSlope(), param.GetBendingSlope()};
  TVectorD &plane = *(static_cast<TVectorD*>(fDEPlanes->UncheckedAt(deId)));
  
  p[2] = (plane[3]*(slope[0]*pos[2]-pos[0]+plane[0]) + plane[4]*(slope[1]*pos[2]-pos[1]+plane[1]) + plane[5]*plane[2]) /
  (plane[3]*slope[0] + plane[4]*slope[1] + plane[5]);
  p[0] = slope[0]*(p[2]-pos[2]) + pos[0];
  p[1] = slope[1]*(p[2]-pos[2]) + pos[1];
  
}

//________________________________________________________________________
Bool_t AliAnalysisTaskMuonTrackingEff::OverlapDE(AliMpArea &area, Int_t deId)
{
  /// Check whether (global) area overlaps with the given DE
  
  AliMpArea* globalDEArea = fTransformer->GetDEArea(deId);
  if (!globalDEArea) return kFALSE;
  
  return area.Overlap(*globalDEArea);
  
}

//________________________________________________________________________
void AliAnalysisTaskMuonTrackingEff::RecordCluster(Int_t chamber, Int_t deId, AliMpPad pad[2], Double_t trackInfo[6],
						   TString clusterKey, TList *chamberHistList, Bool_t recordChamber)
{
  /// Register the cluster in the given stores
  
  // register the pads
  for (Int_t iCath = 0; iCath < 2; iCath++) if (pad[iCath].IsValid()) {
    Int_t manuId = pad[iCath].GetManuId();
    Int_t busPatchId = AliMpDDLStore::Instance()->GetBusPatchId(deId,manuId);
    fClusters->Count(Form("Cluster:%s/Chamber:%d/DE:%d/BusPatch:%d/Manu:%d/Channel:%d",
		     clusterKey.Data(), chamber, deId, busPatchId, manuId, pad[iCath].GetManuChannel()));
  }
  
  // register the DE
  trackInfo[0] = static_cast<Double_t>(deId%100);
  static_cast<THnSparse*>(chamberHistList->At(chamber))->Fill(trackInfo);
  
  // register the chamber
  if (recordChamber) {
    trackInfo[0] = static_cast<Double_t>(chamber+1);
    static_cast<THnSparse*>(chamberHistList->At(10))->Fill(trackInfo);
  }
  
}

//________________________________________________________________________
Bool_t AliAnalysisTaskMuonTrackingEff::FindPads(Int_t deId, Double_t pos[3], AliMpPad pad[2])
{
  /// Look for pads at the cluster's location
  
  static const AliMpPad emptyPad;
  
  // compute the cluster position in the DE frame
  Double_t localPos[3];
  fTransformer->Global2Local(deId, pos[0], pos[1], pos[2], localPos[0], localPos[1], localPos[2]);
  
  // find pads at this position
  for (Int_t iCath = 0; iCath < 2; iCath++) {
    const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentation(deId, AliMp::GetCathodType(iCath));
    if (seg) pad[iCath] = seg->PadByPosition(localPos[0], localPos[1], kFALSE);
    else pad[iCath] = emptyPad;
  }
  
  return (pad[0].IsValid() || pad[1].IsValid());
  
}

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