ROOT logo
#ifndef ALIANALYSISTASKMUONPERFORMANCE_H
#define ALIANALYSISTASKMUONPERFORMANCE_H

/// \ingroup "PWG3muon"
/// \class AliAnalysisTaskMuonPerformance
/// \brief Analysis task for 
///
//  Author D.Stocco and P.Pillot, Subatech, Nantes


#include "AliAnalysisTaskSE.h"
#include "AliLog.h"

class TObjArray;
class TH1;
class TH2;
class TGraphAsymmErrors;
class TGraphErrors;
class TCanvas;
class AliMUONRecoParam;
class AliCFContainer;
class AliMCParticle;
class AliESDMuonTrack;
class AliCFEffGrid;

class AliAnalysisTaskMuonPerformance : public AliAnalysisTaskSE {
 public:
  AliAnalysisTaskMuonPerformance();
  AliAnalysisTaskMuonPerformance(const char *name);
  virtual ~AliAnalysisTaskMuonPerformance();
  
  /// Set location of the default OCDB storage (if not set use "raw://")
  void SetDefaultStorage(const char* ocdbPath) { fDefaultStorage = ocdbPath; }
  
  /// Set the OCDB path to the alignment file used in the reco (if not set use default storage)
  void SetAlignStorage(const char* ocdbPath) { fAlignOCDBpath = ocdbPath; }
  
  /// Set the OCDB path to the recoParam file used in the reco (if not set use default storage)
  void SetRecoParamStorage(const char* ocdbPath) { fRecoParamOCDBpath = ocdbPath; }
  
  // Set the binning to be used to study the detector resolution versus momentum
  void SetPBins(Int_t nBins, Double_t min, Double_t max);
  
  /// set the flag to add or not the systematic shifts of the residuals to the resolution
  void CorrectClusterResForSystematics(Bool_t flag = kTRUE) { fCorrectForSystematics = flag; }
  
  /// set the flag to fit or not the cluster residuals to extract means and sigmas
  void FitClusterResiduals(Bool_t flag = kTRUE) { fFitResiduals = flag; }
  
  /// set the flag to select reconstructed tracks still reconstructible for efficiency calculations
  void EnforceTrackingCriteria(Bool_t flag = kTRUE) { fEnforceTrkCriteria = flag; }
  
  /// set the flag to use kinematics from MC track for efficiency calculations when available
  void UseMCKinematics(Bool_t flag = kTRUE) { fUseMCKinematics = flag; }
  
  /// if trk and trig parts match different MC, set the triggerable level from the MC matching the trk part
  void SetMCTrigLevelFromMatchTrk(Bool_t flag = kTRUE) { fMCTrigLevelFromMatchTrk = flag; }
  
  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(Option_t *option);
  virtual void   NotifyRun();
  
  enum {
    kVarPt,         ///< Transverse momentum
    kVarEta,        ///< Pseudo-rapidity
    kVarPhi,        ///< Azimuthal angle
    kVarThetaZones, ///< Theta at absorber end (4 zones)
    kVarCharge,     ///< Particle charge
    kVarHasTracker, ///< Is tracker track
    kVarTrigger,    ///< Trigger info
    kVarMotherType, ///< Mother type
    kVarMatchMC,    ///< MC matching flag
    kVarMCTrigger,  ///< MC trigger info
    kVarCent,       ///< Centrality
    kVarDupliTrg,   ///< Flag trigger track already found
    kNvars          ///< THnSparse dimensions
  };
  
  enum {
    kStepReconstructed, ///< Reconstructed tracks
    kStepGeneratedMC,   ///< Generated tracks (MC)
    kNsteps             ///< Number of steps
  };
  
 private:
  
  AliAnalysisTaskMuonPerformance(const AliAnalysisTaskMuonPerformance&);
  AliAnalysisTaskMuonPerformance& operator=(const AliAnalysisTaskMuonPerformance&);
  
  Bool_t  GetEfficiency(AliCFEffGrid* efficiency, Double_t& calcEff, Double_t& calcEffErr);
  Int_t   RecoTrackMother(AliMCParticle* mcParticle);
  Float_t GetBinThetaAbsEnd(Float_t RAtAbsEnd, Bool_t isTheta = kFALSE);
  void    FillContainerInfoReco(Double_t* containerInput, AliESDMuonTrack* esdTrack, Bool_t isValid, Int_t mcID);
  void    FillContainerInfoMC(Double_t* containerInput, AliMCParticle* mcPart);
  
  void    FitLandauGausResVsP(TH2* h, const char* fitting, TGraphAsymmErrors* gMean, TGraphAsymmErrors* gMostProb, TGraphAsymmErrors* gSigma);
  void    FitGausResVsMom(TH2* h, const Double_t mean0, const Double_t sigma0, const char* fitting, TGraphAsymmErrors* gMean, TGraphAsymmErrors* gSigma);
  void    FitPDCAVsMom(TH2* h, const char* fitting, TGraphAsymmErrors* gMean, TGraphAsymmErrors* gSigma);
  void    FitClusterResidual(TH1* h, Int_t i, Double_t& sigma, TGraphErrors* gMean, TGraphErrors* gSigma);
  
  TCanvas* DrawVsAng(const char* name, const char* title, TH1* h1, TH2* h2);
  TCanvas* DrawVsPos(const char* name, const char* title, TH2* h1, TH2* h2, TH2* h3);
  TCanvas* DrawFitLandauGausResPVsP(const char* name, const char* title, TH2* h, const Int_t nBins, const char* fitting);
  TCanvas* DrawResPVsP(const char* name, const char* title, TH2* h, const Int_t nBins);
  
  void Zoom(TH1* h, Double_t fractionCut = 0.01);
  
  void FillEffHistos(AliCFEffGrid* efficiency, const char* suffix, TObjArray* list);
  
  enum {
    kNoMatchTrig,  ///< No match with trigger
    kOtherTrig,    ///< Match trigger not passing any Pt threshold (MC)
    kAllPtTrig,    ///< Match All Pt
    kLowPtTrig,    ///< Match Low Pt
    kHighPtTrig,   ///< Match High Pt
    kNtrigCuts     ///< Total number of trigger types
  };
  
  enum {
    kCharmMu,       ///< Mu from charm
    kBeautyMu,      ///< Mu from beauty
    kPrimaryMu,     ///< Primary mu
    kSecondaryMu,   ///< Secondary mu
    kRecoHadron,    ///< Reconstructed hadron
    kUnknownPart,   ///< Particle that fails matching kine
    kNtrackSources  ///< Total number of track sources
  };
  
  enum {
    kNoMatch,     ///< not matched with either reconstructible track or triggerable track
    kTrackerOnly, ///< matched with reconstructible track only
    kMatchedSame, ///< matched with reconstructible track and triggerable track of same ID
    kMatchedDiff, ///< matched with reconstructible track and triggerable track of different ID
    kTriggerOnly, ///< matched with triggerable track only
    kNMatchMC     ///< Total number of MC matching flags
  };
  
  // Histograms for trigger resolution
  enum {
    kResTrigX11,                          ///< Residual of x position in first trigger chamber
    kResTrigY11,                          ///< Residual of y position in first trigger chamber
    kResTrigSlopeY                        ///< Residual of trigger track slope
  };
  
  // Histograms for tracker resolution
  enum {
    kResPAtVtx,                           ///< momentum residual at vertex
    kResPAtVtxVsP,                        ///< momentum residual at vertex versus P
    kResPAtVtxVsPIn23deg,                 ///< momentum residual at vertex versus P for tracks in ]2,3] degrees at absorber end
    kResPAtVtxVsPIn310deg,                ///< momentum residual at vertex versus P for tracks in ]3,10[ degrees at absorber end
    kResPAtVtxVsPIn02degMC,               ///< momentum residual at vertex versus P for tracks with MC angle < 2 degrees
    kResPAtVtxVsPosAbsEndIn02degMC,       ///< momentum residual at vertex versus position at absorber end for tracks with MC angle <= 2 degrees
    kResPAtVtxVsPosAbsEndIn23degMC,       ///< momentum residual at vertex versus position at absorber end for tracks with MC angle in ]2,3] degrees
    kResPAtVtxVsPosAbsEndIn310degMC,      ///< momentum residual at vertex versus position at absorber end for tracks with MC angle in ]3,10[ degrees
    kResPAtVtxVsAngleAtAbsEnd,            ///< momentum residual at vertex versus angle at absorber end
    kResPAtVtxVsMCAngle,                  ///< momentum residual at vertex versus MC angle
    kResPAtVtxVsAngleAtAbsEndVsP,         ///< momentum residual at vertex versus angle at absorber end versus momentum
    kResPtAtVtxVsPt,                      ///< transverse momentum residual at vertex versus pT
    
    kResPAt1stCl,                         ///< momentum residual at first cluster
    kResPAt1stClVsP,                      ///< momentum residual at first cluster versus P
    kResPtAt1stClVsPt,                    ///< transverse momentum residual at first cluster versus pT
    
    kResSlopeXAtVtx,                      ///< slope-X residual at vertex
    kResSlopeYAtVtx,                      ///< slope-Y residual at vertex
    kResSlopeXAtVtxVsP,                   ///< slope-X residual at vertex versus P
    kResSlopeYAtVtxVsP,                   ///< slope-Y residual at vertex versus P
    kResSlopeXAtVtxVsPosAbsEndIn02degMC,  ///< slope-X residual at vertex versus position at absorber end for tracks with MC angle <= 2 degrees
    kResSlopeYAtVtxVsPosAbsEndIn02degMC,  ///< slope-Y residual at vertex versus position at absorber end for tracks with MC angle <= 2 degrees
    kResSlopeXAtVtxVsPosAbsEndIn23degMC,  ///< slope-X residual at vertex versus position at absorber end for tracks with MC angle in ]2,3] degrees
    kResSlopeYAtVtxVsPosAbsEndIn23degMC,  ///< slope-Y residual at vertex versus position at absorber end for tracks with MC angle in ]2,3] degrees
    kResSlopeXAtVtxVsPosAbsEndIn310degMC, ///< slope-X residual at vertex versus position at absorber end for tracks with MC angle in ]3,10[ degrees
    kResSlopeYAtVtxVsPosAbsEndIn310degMC, ///< slope-Y residual at vertex versus position at absorber end for tracks with MC angle in ]3,10[ degrees
    kResSlopeXAtVtxVsAngleAtAbsEnd,       ///< slope-X residual at vertex versus angle at absorber end
    kResSlopeYAtVtxVsAngleAtAbsEnd,       ///< slope-Y residual at vertex versus angle at absorber end
    kResSlopeXAtVtxVsMCAngle,             ///< slope-X residual at vertex versus MC angle
    kResSlopeYAtVtxVsMCAngle,             ///< slope-Y residual at vertex versus MC angle
    
    kResSlopeXAt1stCl,                    ///< slope-X residual at first cluster
    kResSlopeYAt1stCl,                    ///< slope-Y residual at first cluster
    kResSlopeXAt1stClVsP,                 ///< slope-X residual at first cluster versus P
    kResSlopeYAt1stClVsP,                 ///< slope-Y residual at first cluster versus P
    
    kResEtaAtVtx,                         ///< eta residual at vertex
    kResEtaAtVtxVsP,                      ///< eta residual at vertex versus P
    kResEtaAtVtxVsPosAbsEndIn02degMC,     ///< eta residual at vertex versus position at absorber end for tracks with MC angle <= 2 degrees
    kResEtaAtVtxVsPosAbsEndIn23degMC,     ///< eta residual at vertex versus position at absorber end for tracks with MC angle in ]2,3] degrees
    kResEtaAtVtxVsPosAbsEndIn310degMC,    ///< eta residual at vertex versus position at absorber end for tracks with MC angle in ]3,10[ degrees
    kResEtaAtVtxVsAngleAtAbsEnd,          ///< eta residual at vertex versus angle at absorber end
    kResEtaAtVtxVsMCAngle,                ///< eta residual at vertex versus MC angle
    
    kResPhiAtVtx,                         ///< phi residual at vertex
    kResPhiAtVtxVsP,                      ///< phi residual at vertex versus P
    kResPhiAtVtxVsPosAbsEndIn02degMC,     ///< phi residual at vertex versus position at absorber end for tracks with MC angle <= 2 degrees
    kResPhiAtVtxVsPosAbsEndIn23degMC,     ///< phi residual at vertex versus position at absorber end for tracks with MC angle in ]2,3] degrees
    kResPhiAtVtxVsPosAbsEndIn310degMC,    ///< phi residual at vertex versus position at absorber end for tracks with MC angle in ]3,10[ degrees
    kResPhiAtVtxVsAngleAtAbsEnd,          ///< phi residual at vertex versus angle at absorber end
    kResPhiAtVtxVsMCAngle,                ///< phi residual at vertex versus MC angle
    
    kPDCA,                                ///< P*DCA distribution
    kPDCAVsPIn23deg,                      ///< P * DCA distribution versus P for tracks in ]2,3] degrees at absorber end
    kPDCAVsPIn310deg,                     ///< P * DCA distribution versus P for tracks in ]3,10[ degrees at absorber end
    kPDCAVsPosAbsEndIn02degMC,            ///< P * DCA distribution versus position at absorber end for tracks with MC angle <= 2 degrees
    kPDCAVsPosAbsEndIn23degMC,            ///< P * DCA distribution versus position at absorber end for tracks with MC angle in ]2,3] degrees
    kPDCAVsPosAbsEndIn310degMC,           ///< P * DCA distribution versus position at absorber end for tracks with MC angle in ]3,10[ degrees
    kPDCAVsAngleAtAbsEnd,                 ///< P * DCA distribution versus angle at absorber end
    kPDCAVsMCAngle,                       ///< P * DCA distribution versus MC angle
    
    kPMCSAngVsPIn23deg,                   ///< P * MCS deviation angle distribution versus P for tracks in ]2,3] degrees at absorber end
    kPMCSAngVsPIn310deg,                  ///< P * MCS deviation angle distribution versus P for tracks in ]3,10[ degrees at absorber end
    
    kResClXVsCh,                          ///< cluster residual-X versus chamber
    kResClYVsCh,                          ///< cluster residual-Y versus chamber
    kResClXVsDE,                          ///< cluster residual-X versus DE
    kResClYVsDE                           ///< cluster residual-Y versus DE
  };
  
  // Graphs and canvases for momentum resolution at vertex
  enum {
    kMeanResPAtVtxVsP,                    ///< mean momentum residual at vertex versus P
    kMostProbResPAtVtxVsP,                ///< most probable momentum residual at vertex versus P
    kSigmaResPAtVtxVsP,                   ///< relative momentum resolution at vertex versus P
    kcResPAtVtx,                          ///< momentum residual at vertex in 3 angular regions
    kcResPAtVtxMC,                        ///< momentum residual at vertex in 3 MC angular regions
    kcResPAtVtxVsPosAbsEndMC,             ///< momentum residual at vertex versus position at absorber end in 3 MC angular regions
    kcResPAtVtxVsPIn23deg,                ///< momentum residual for tracks between 2 and 3 degrees
    kcResPAtVtxVsPIn310deg,               ///< momentum residual for tracks between 3 and 10 degrees
    kcResPAtVtxVsPIn02degMC               ///< momentum residuals for tracks with MC angle < 2 degrees
  };
  
  // Graphs for momentum resolution at first cluster
  enum {
    kMeanResPAt1stClVsP,                  ///< mean momentum residual at first cluster versus P
    kSigmaResPAt1stClVsP                  ///< relative momentum resolution at first cluster versus P
  };
  
  // Graphs and canvases for slope resolution at vertex
  enum {
    kMeanResSlopeXAtVtxVsP,               ///< mean slope-X residual at vertex versus P
    kMeanResSlopeYAtVtxVsP,               ///< mean slope-Y residual at vertex versus P
    kSigmaResSlopeXAtVtxVsP,              ///< slope-X resolution at vertex versus P
    kSigmaResSlopeYAtVtxVsP,              ///< slope-Y resolution at vertex versus P
    kcResSlopeXAtVtx,                     ///< slope-X residual at vertex in 3 angular regions
    kcResSlopeYAtVtx,                     ///< slope-Y residual at vertex in 3 angular regions
    kcResSlopeXAtVtxMC,                   ///< slope-X residual at vertex in 3 MC angular regions
    kcResSlopeYAtVtxMC,                   ///< slope-Y residual at vertex in 3 MC angular regions
    kcResSlopeXAtVtxVsPosAbsEndMC,        ///< slope-X residual at vertex versus position at absorber end in 3 MC angular regions
    kcResSlopeYAtVtxVsPosAbsEndMC         ///< slope-Y residual at vertex versus position at absorber end in 3 MC angular regions
  };
  
  // Graphs for slope resolution at first cluster
  enum {
    kMeanResSlopeXAt1stClVsP,             ///< mean slope-X residual at first cluster versus P
    kMeanResSlopeYAt1stClVsP,             ///< mean slope-Y residual at first cluster versus P
    kSigmaResSlopeXAt1stClVsP,            ///< slope-X resolution at first cluster versus P
    kSigmaResSlopeYAt1stClVsP             ///< slope-Y resolution at first cluster versus P
  };
  
  // Graphs and canvases for eta resolution at vertex
  enum {
    kMeanResEtaAtVtxVsP,                  ///< mean eta residual at vertex versus P
    kSigmaResEtaAtVtxVsP,                 ///< eta resolution at vertex
    kcResEtaAtVtx,                        ///< eta residual at vertex in 3 angular regions
    kcResEtaAtVtxMC,                      ///< eta residual at vertex in 3 MC angular regions
    kcResEtaAtVtxVsPosAbsEndMC            ///< eta residual at vertex versus position at absorber end in 3 MC angular regions
  };
  
  // Graphs and canvases for phi resolution at vertex
  enum {
    kMeanResPhiAtVtxVsP,                  ///< mean phi residual at vertex versus P
    kSigmaResPhiAtVtxVsP,                 ///< phi resolution at vertex
    kcResPhiAtVtx,                        ///< phi residual at vertex in 3 angular regions
    kcResPhiAtVtxMC,                      ///< phi residual at vertex in 3 MC angular regions
    kcResPhiAtVtxVsPosAbsEndMC            ///< phi residual at vertex versus position at absorber end in 3 MC angular regions
  };
  
  // Graphs and cavases for DCA resolution and MCS dispersion
  enum {
    kMeanPDCAVsPIn23deg,                  ///< mean P * DCA versus P for tracks in ]2,3] degrees at absorber end
    kSigmaPDCAVsPIn23deg,                 ///< P * DCA resolution versus P for tracks in ]2,3] degrees at absorber end
    kMeanPDCAVsPIn310deg,                 ///< mean P * DCA versus P for tracks in ]3,10[ degrees at absorber end
    kSigmaPDCAVsPIn310deg,                ///< P * DCA resolution versus P for tracks in ]3,10[ degrees at absorber end
    kMeanPMCSAngVsPIn23deg,               ///< mean P * MCS deviation angle versus P for tracks in ]2,3] degrees at absorber end
    kSigmaPMCSAngVsPIn23deg,              ///< P * MCS deviation angle dispersion versus P for tracks in ]2,3] degrees at absorber end
    kMeanPMCSAngVsPIn310deg,              ///< mean P * MCS deviation angle versus P for tracks in ]3,10[ degrees at absorber end
    kSigmaPMCSAngVsPIn310deg,             ///< P * MCS deviation angle dispersion versus P for tracks in ]3,10[ degrees at absorber end
    kcPDCA,                               ///< P * DCA in 3 angular regions
    kcPDCAMC,                             ///< P * DCA in 3 MC angular regions
    kcPDCAVsPosAbsEndMC                   ///< P * DCA versus position at absorber end in 3 MC angular regions
  };
  
  // Graphs for cluster resolution
  enum {
    kMeanResClXVsCh,                      ///< mean cluster residual-X versus chamber
    kMeanResClYVsCh,                      ///< mean cluster residual-Y versus chamber
    kSigmaResClXVsCh,                     ///< cluster resolution-X versus chamber
    kSigmaResClYVsCh,                     ///< cluster resolution-Y versus chamber
    kMeanResClXVsDE,                      ///< mean cluster residual-X versus DE
    kMeanResClYVsDE,                      ///< mean cluster residual-Y versus DE
    kSigmaResClXVsDE,                     ///< cluster resolution-X versus DE
    kSigmaResClYVsDE                      ///< cluster resolution-Y versus DE
  };
  
  TString  fDefaultStorage;          ///< location of the default OCDB storage
  TString  fAlignOCDBpath;           ///< OCDB path to the alignment file
  TString  fRecoParamOCDBpath;       ///< OCDB path to the recoParam file
  Int_t    fNPBins;                  ///< number of momentum bins
  Double_t fPRange[2];               ///< momentum range
  Bool_t   fCorrectForSystematics;   ///< add or not the systematic shifts of the residuals to the resolution
  Bool_t   fFitResiduals;            ///< fit or not the cluster residuals to extract means and sigmas
  Bool_t   fEnforceTrkCriteria;      ///< select reconstructed tracks still reconstructible
  Bool_t   fUseMCKinematics;         ///< use kinematics from MC track when available
  Bool_t   fMCTrigLevelFromMatchTrk; ///< set the triggerable level from the MC matching the trk part
  UInt_t   fRequestedStationMask;    //!< mask of requested stations
  Bool_t   fRequest2ChInSameSt45;    //!< 2 fired chambers requested in the same station (4 or 5) or not
  Double_t fSigmaCutTrig;            //!< sigma cut to associate trigger track to triggerable track
  Double_t fClusterMaxRes[2];        //!< highest chamber resolution in both directions
  Int_t    fNDE;                     //!< total number of DE
  Int_t    fDEIndices[1100];         //!< index of DE in histograms refered by ID
  Int_t    fDEIds[200];              //!< ID of DE refered by index in histograms
  
  AliCFContainer* fCFContainer; //!< Pointer to the CF container
  TObjArray* fEfficiencyList;   //!< List of histograms for tracker/trigger efficiencies
  TObjArray* fTriggerList;      //!< List of histograms for trigger resolution
  TObjArray* fTrackerList;      //!< List of histograms for tracker resolution
  TObjArray* fPAtVtxList;       //!< List of graph and canvas about momentum resolution at vertex
  TObjArray* fSlopeAtVtxList;   //!< List of graph and canvas about slope resolution at vertex
  TObjArray* fEtaAtVtxList;     //!< List of graph and canvas about eta resolution at vertex
  TObjArray* fPhiAtVtxList;     //!< List of graph and canvas about phi resolution at vertex
  TObjArray* fPAt1stClList;     //!< List of graph and canvas about momentum resolution at first cluster
  TObjArray* fSlopeAt1stClList; //!< List of graph and canvas about slope resolution at first cluster
  TObjArray* fDCAList;          //!< List of graph and canvas about DCA
  TObjArray* fClusterList;      //!< List of graph and canvas about cluster resolution
  
  ClassDef(AliAnalysisTaskMuonPerformance, 3); // Muon performance analysis
};

inline void AliAnalysisTaskMuonPerformance::SetPBins(Int_t nBins, Double_t pMin, Double_t pMax)
{
  /// Set the binning to be used to study the detector resolution versus momentum
  if (nBins > 0) fNPBins = nBins;
  else AliError("Incorrect number of momentum bins");
  if (pMin >= 0. && pMax > pMin) {
    fPRange[0] = pMin;
    fPRange[1] = pMax;
  } else AliError("Incorrect momentum range");
}


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