ROOT logo
#ifndef ALIANALYSISTASKMUONRESOLUTION_H
#define ALIANALYSISTASKMUONRESOLUTION_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */ 

/// \ingroup muondep
/// \class AliAnalysisTaskMuonResolution
/// \brief Muon spectrometer resolution
//Author: Philippe Pillot - SUBATECH Nantes

#include <TString.h>
#include <TMatrixD.h>
#include <TF1.h>
#include "AliAnalysisTaskSE.h"
#include "AliMuonTrackCuts.h"

class TH1;
class TH2;
class TGraphErrors;
class TObjArray;
class TList;
class AliMUONTrack;
class AliMUONTrackParam;
class AliMUONGeometryTransformer;
class AliMUONVCluster;

class AliAnalysisTaskMuonResolution : public AliAnalysisTaskSE {
public:
  
  AliAnalysisTaskMuonResolution();
  AliAnalysisTaskMuonResolution(const char *name);
  virtual ~AliAnalysisTaskMuonResolution();
  
  /// Set location of the default OCDB storage (if not set use "raw://")
  void SetDefaultStorage(const char* ocdbPath) { fDefaultStorage = ocdbPath; }
  
  void SetStartingResolution(Int_t chId, Double_t valNB, Double_t valB);
  void SetStartingResolution(Double_t valNB[10], Double_t valB[10]);
  void GetStartingResolution(Double_t valNB[10], Double_t valB[10]) const;
  
  void SetHalfChShift(Int_t hchId, Double_t valNB, Double_t valB);
  void SetHalfChShift(Double_t valNB[20], Double_t valB[20]);
  void GetHalfChShift(Double_t valNB[20], Double_t valB[20]) const;
  void ShiftHalfCh(Bool_t flag = kTRUE) { fShiftHalfCh = flag; }
  void PrintHalfChShift(Bool_t flag = kTRUE) { fPrintHalfChShift = flag; }
  
  void SetDEShift(Int_t iDE, Double_t valNB, Double_t valB);
  void SetDEShift(Double_t valNB[200], Double_t valB[200]);
  void GetDEShift(Double_t valNB[200], Double_t valB[200]) const;
  void ShiftDE(Bool_t flag = kTRUE) { fShiftDE = flag; }
  void PrintDEShift(Bool_t flag = kTRUE) { fPrintDEShift = flag; }
  
  /// set the minimum momentum value of the tracks used to compute the resolution
  void SetMinMomentum(Double_t val) { fMinMomentum = val; }
  
  /// set the flag to use only tracks passing the physics selection
  void SelectPhysics(Bool_t flag = kTRUE) {fSelectPhysics = flag;}
  
  /// set the flag to use only tracks matched with trigger or not
  void MatchTrigger(Bool_t flag = kTRUE) { fMatchTrig = flag; }
  
  /// set the flag to use only tracks passing the acceptance cuts (Rabs, eta)
  void ApplyAccCut(Bool_t flag = kTRUE) { fApplyAccCut = flag; }
  
  // set standard cuts to select tracks to be considered
  void SetMuonTrackCuts(AliMuonTrackCuts &trackCuts);
  
  /// Select events belonging to at least one of the trigger classes selected by the mask to fill histograms:
  /// - if the physics selection is used, apply the mask to the trigger word returned by the physics selection
  /// - if not, apply the mask to the trigger word built by looking for triggers listed in "fSelectTriggerClass"
  void SelectTrigger(Bool_t flag = kTRUE, UInt_t mask = AliVEvent::kMUON) {fSelectTrigger = flag; fTriggerMask = mask;}
  
  /// set the extrapolation mode to get the track parameters and covariances at a given cluster:
  /// 0 = extrapolate from the closest cluster; 1 = extrapolate from the previous cluster except between stations 2-3-4
  void SetExtrapMode(Int_t val) { fExtrapMode = val; }
  
  /// set the flag to add or not the systematic shifts of the residuals to the resolution
  void CorrectForSystematics(Bool_t flag = kTRUE) { fCorrectForSystematics = flag; }
  
  /// Set the OCDB path to the alignment file used in the reco (if not set use default storage)
  void SetAlignStorage(const char* ocdbPath) { fNewAlignStorage = ocdbPath; }
  
  void ReAlign(const char* oldAlignStorage = 0x0, const char* newAlignStorage = "");
  
  /// return the list of summary canvases
  TObjArray* GetCanvases() {return fCanvases;}
  
  /// set the flag to show the progression bar
  void ShowProgressBar(Bool_t flag = kTRUE) {fShowProgressBar = flag;}
  
  /// set the flag to print the cluster resolution per chamber/DE
  void PrintClusterRes(Bool_t perCh = kTRUE, Bool_t perDE = kFALSE) {fPrintClResPerCh = perCh; fPrintClResPerDE = perDE;}
  
  void FitResiduals(Bool_t flag = kTRUE);
  
  /// set the flag to remove mono-cathod clusters (either considering all the pads or only the ones directly below)
  void RemoveMonoCathodClusters(Bool_t flag = kTRUE, Bool_t checkAllPads = kTRUE) {fRemoveMonoCathCl = flag; fCheckAllPads = checkAllPads;}
  
  /// set the flag to improve the track before measuring the resolution
  void ImproveTracks(Bool_t flag = kTRUE) {fImproveTracks = flag;}
  
  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *);
  virtual void   NotifyRun();
  virtual void   Terminate(Option_t *);
  
private:
  
  /// Not implemented
  AliAnalysisTaskMuonResolution(const AliAnalysisTaskMuonResolution& rhs);
  /// Not implemented
  AliAnalysisTaskMuonResolution& operator = (const AliAnalysisTaskMuonResolution& rhs);
  
  void ModifyClusters(AliMUONTrack& track);
  void Zoom(TH1* h, Double_t fractionCut = 0.01);
  void ZoomLeft(TH1* h, Double_t fractionCut = 0.02);
  void ZoomRight(TH1* h, Double_t fractionCut = 0.02);
  void GetMeanRMS(TH1* h, Double_t& mean, Double_t& meanErr,Double_t& rms, Double_t& rmsErr, TGraphErrors* gMean = 0x0,
		  TGraphErrors* gRMS = 0x0, Int_t i = 0, Double_t x = 0, Bool_t zoom = kTRUE, Bool_t enableFit = kTRUE);
  void FillMeanSigmaClusterVsX(const TH2* hIn, const TH2* hOut, TGraphErrors* gMean, TGraphErrors* gSigma);
  void Cov2CovP(const AliMUONTrackParam &param, TMatrixD &covP);
  UInt_t BuildTriggerWord(const TString& FiredTriggerClasses);
  void CheckPads(AliMUONVCluster *cl, Bool_t &hasBending, Bool_t &hasNonBending) const;
  void CheckPadsBelow(AliMUONVCluster *cl, Bool_t &hasBending, Bool_t &hasNonBending) const;
  
private:
  
  enum eResiduals {
    kResidualPerChClusterIn             = 0,  ///< cluster-track residual-X/Y distribution per chamber (cluster attached to the track)
    kResidualPerChClusterOut            = 2,  ///< cluster-track residual-X/Y distribution per chamber (cluster not attached to the track)
    kTrackResPerCh                      = 4,  ///< track resolution-X/Y per chamber
    kMCSPerCh                           = 6,  ///< MCS X/Y-dispersion of extrapolated track per chamber
    kClusterRes2PerCh                   = 8,  ///< cluster X/Y-resolution per chamber
    kResidualPerDEClusterIn             = 10, ///< cluster-track residual-X/Y distribution per DE (cluster attached to the track)
    kResidualPerDEClusterOut            = 12, ///< cluster-track residual-X/Y distribution per DE (cluster not attached to the track)
    kTrackResPerDE                      = 14, ///< track resolution-X/Y per DE
    kMCSPerDE                           = 16, ///< MCS X/Y-dispersion of extrapolated track per DE
    kResidualPerHalfChClusterIn         = 18, ///< cluster-track residual-X/Y distribution per half chamber (cluster attached to the track)
    kResidualPerHalfChClusterOut        = 20, ///< cluster-track residual-X/Y distribution per half chamber (cluster not attached to the track)
    kTrackResPerHalfCh                  = 22, ///< track resolution-X/Y per half chamber
    kMCSPerHalfCh                       = 24, ///< MCS X/Y-dispersion of extrapolated track per half chamber
    kLocalChi2PerCh                     = 26, ///< local chi2-X/Y/total distribution per chamber
    kLocalChi2PerDE                     = 29  ///< local chi2-X/Y/total distribution per DE
  };
  
  enum eResidualsVsP {
    kResidualInChVsPClusterIn           = 0,  ///< cluster-track residual-X/Y distribution in chamber i versus momentum (cluster attached to the track)
    kResidualInChVsPClusterOut          = 20, ///< cluster-track residual-X/Y distribution in chamber i versus momentum (cluster not attached to the track)
    kResidualVsPClusterIn               = 40, ///< cluster-track residual-X/Y distribution integrated over chambers versus momentum (cluster attached to the track)
    kResidualVsPClusterOut              = 42  ///< cluster-track residual-X/Y distribution integrated over chambers versus momentum (cluster not attached to the track)
  };
  
  enum eResidualsVsCent {
    kResidualInChVsCentClusterIn        = 0,  ///< cluster-track residual-X/Y distribution in chamber i versus centrality (cluster attached to the track)
    kResidualInChVsCentClusterOut       = 20, ///< cluster-track residual-X/Y distribution in chamber i versus centrality (cluster not attached to the track)
    kResidualVsCentClusterIn            = 40, ///< cluster-track residual-X/Y distribution integrated over chambers versus centrality (cluster attached to the track)
    kResidualVsCentClusterOut           = 42  ///< cluster-track residual-X/Y distribution integrated over chambers versus centrality (cluster not attached to the track)
  };
  
  enum eResidualsVsAngle {
    kResidualInChVsAngleClusterIn       = 0,  ///< cluster-track residual-X/Y distribution in chamber i versus track angle in X/Y direction (cluster attached to the track)
    kResidualInChVsAngleClusterOut      = 20, ///< cluster-track residual-X/Y distribution in chamber i versus track angle in X/Y direction (cluster not attached to the track)
    kResidualVsAngleClusterIn           = 40, ///< cluster-track residual-X/Y distribution integrated over chambers versus track angle in X/Y direction (cluster attached to the track)
    kResidualVsAngleClusterOut          = 42, ///< cluster-track residual-X/Y distribution integrated over chambers versus track angle in X/Y direction (cluster not attached to the track)
    kResidualInHalfChVsAngleClusterIn   = 44  ///< cluster-track residual-X/Y distribution in half-chamber i versus track angle in X/Y direction (cluster attached to the track)
  };
  
  enum eLocalChi2 {
    kLocalChi2PerChMean                 = 0,  ///< local chi2-X/Y/total per chamber: mean
    kLocalChi2PerDEMean                 = 3   ///< local chi2-X/Y/total per DE: mean
  };
  
  enum eChamberRes {
    kResidualPerChMeanClusterIn         = 0,  ///< cluster-track residual-X/Y per chamber: mean (cluster in)
    kResidualPerChMeanClusterOut        = 2,  ///< cluster-track residual-X/Y per chamber: mean (cluster out)
    kResidualPerChSigmaClusterIn        = 4,  ///< cluster-track residual-X/Y per chamber: sigma (cluster in)
    kResidualPerChSigmaClusterOut       = 6,  ///< cluster-track residual-X/Y per chamber: sigma (cluster out)
    kResidualPerChDispersionClusterOut  = 8,  ///< cluster-track residual-X/Y per chamber: dispersion (cluster out)
    kCombinedResidualPerChSigma         = 10, ///< combined cluster-track residual-X/Y per chamber
    kTrackResPerChMean                  = 12, ///< track X/Y-resolution per chamber
    kMCSPerChMean                       = 14, ///< MCS X/Y-dispersion of extrapolated track per chamber
    kClusterResPerCh                    = 16, ///< cluster X/Y-resolution per chamber
    kCalcClusterResPerCh                = 18, ///< calculated cluster X/Y-resolution per chamber
    kResidualPerDEMeanClusterIn         = 20, ///< cluster-track residual-X/Y per DE: mean (cluster in)
    kResidualPerDEMeanClusterOut        = 22, ///< cluster-track residual-X/Y per DE: mean (cluster out)
    kCombinedResidualPerDESigma         = 24, ///< combined cluster-track residual-X/Y per DE
    kClusterResPerDE                    = 26, ///< cluster X/Y-resolution per DE
    kResidualPerHalfChMeanClusterIn     = 28, ///< cluster-track residual-X/Y per half chamber: mean (cluster in)
    kResidualPerHalfChMeanClusterOut    = 30, ///< cluster-track residual-X/Y per half chamber: mean (cluster out)
    kCombinedResidualPerHalfChSigma     = 32, ///< combined cluster-track residual-X/Y per half chamber
    kClusterResPerHalfCh                = 34, ///< cluster X/Y-resolution per half chamber
    kResidualMeanClusterInVsP           = 36, ///< cluster-track residual-X/Y per chamber versus momentum: mean (cluster in)
    kCombinedResidualSigmaVsP           = 38, ///< cluster X/Y-resolution per chamber versus momentum
    kCombinedResidualAllChSigmaVsP      = 40, ///< cluster X/Y-resolution integrated over chambers versus momentum
    kResidualMeanClusterInVsCent        = 42, ///< cluster-track residual-X/Y per chamber versus centrality: mean (cluster in)
    kCombinedResidualSigmaVsCent        = 44, ///< cluster X/Y-resolution per chamber versus centrality
    kCombinedResidualAllChSigmaVsCent   = 46, ///< cluster X/Y-resolution integrated over chambers versus centrality
    kResidualMeanClusterInVsAngle       = 48, ///< cluster-track residual-X/Y per chamber versus track angle in X/Y direction: mean (cluster in)
    kCombinedResidualSigmaVsAngle       = 50, ///< cluster X/Y-resolution per chamber versus track angle in X/Y direction
    kCombinedResidualAllChSigmaVsAngle  = 52, ///< cluster X/Y-resolution integrated over chambers versus track angle in X/Y direction
    kHChResidualMeanClusterInVsAngle    = 54  ///< cluster-track residual-X/Y per half-chamber versus track angle in X/Y direction: mean (cluster in)
  };
  
  enum eTrackRes {
    kUncorrPRes                         = 0,  ///< muon momentum reconstructed resolution at first cluster vs p
    kPRes                               = 1,  ///< muon momentum reconstructed resolution at vertex vs p
    kUncorrPtRes                        = 2,  ///< muon transverse momentum reconstructed resolution at first cluster vs p
    kPtRes                              = 3,  ///< muon transverse momentum reconstructed resolution at vertex vs p
    kUncorrSlopeRes                     = 4,  ///< muon slope-X/Y reconstructed resolution at first cluster vs p
    kSlopeRes                           = 6   ///< muon slope-X/Y reconstructed resolution at vertex vs p
  };
  
  enum eCanvases {
    kResPerCh                           = 0,  ///< summary canvas
    kResPerDE                           = 1,  ///< summary canvas
    kResPerHalfCh                       = 2,  ///< summary canvas
    kResPerChVsP                        = 3,  ///< summary canvas
    kResPerChVsCent                     = 4,  ///< summary canvas
    kResPerChVsAngle                    = 5,  ///< summary canvas
    kShiftPerChVsP                      = 6,  ///< summary canvas
    kShiftPerChVsCent                   = 7,  ///< summary canvas
    kShiftPerChVsAngle                  = 8,  ///< summary canvas
    kDetailResPerCh                     = 9,  ///< summary canvas
    kDetailResPerHalfCh                 = 13, ///< summary canvas
    kDetailResPerDE                     = 17  ///< summary canvas
  };
  
  static const Int_t fgkMinEntries; ///< minimum number of entries needed to compute resolution
  
  TObjArray*  fResiduals;       //!< List of residual histos
  TObjArray*  fResidualsVsP;    //!< List of residual vs. p histos
  TObjArray*  fResidualsVsCent; //!< List of residual vs. centrality histos
  TObjArray*  fResidualsVsAngle;//!< List of residual vs. track angle histos
  TObjArray*  fLocalChi2;       //!< List of plots related to local chi2 per chamber/DE
  TObjArray*  fChamberRes;      //!< List of plots related to chamber/DE resolution
  TObjArray*  fTrackRes;        //!< List of plots related to track resolution (p, pT, ...)
  TObjArray*  fCanvases;        //!< List of canvases summarizing the results
  TObjArray*  fTmpHists;        //!< List of temporary histograms
  
  Double_t fClusterResNB[10];   ///< cluster resolution in non-bending direction
  Double_t fClusterResB[10];    ///< cluster resolution in bending direction
  
  Double_t fHalfChShiftNB[20];  ///< half-chamber deplacements in non-bending direction
  Double_t fHalfChShiftB[20];   ///< half-chamber deplacements in bending direction
  
  Double_t fDEShiftNB[200];     ///< DE deplacements in non-bending direction
  Double_t fDEShiftB[200];      ///< DE deplacements in bending direction
  
  TString  fDefaultStorage;        ///< location of the default OCDB storage
  Int_t    fNEvents;               //!< number of processed events
  Bool_t   fShowProgressBar;       ///< show the progression bar
  Bool_t   fPrintClResPerCh;       ///< print the cluster resolution per chamber
  Bool_t   fPrintClResPerDE;       ///< print the cluster resolution per DE
  TF1*     fGaus;                  ///< gaussian function to fit the residuals
  Double_t fMinMomentum;           ///< use only tracks with momentum higher than this value
  Bool_t   fSelectPhysics;         ///< use only tracks passing the physics selection
  Bool_t   fMatchTrig;             ///< use only tracks matched with trigger
  Bool_t   fApplyAccCut;           ///< use only tracks passing the acceptance cuts (Rabs, eta)
  Bool_t   fSelectTrigger;         ///< use only tracks passing the trigger selection
  UInt_t   fTriggerMask;           ///< trigger mask to be used when selecting tracks
  Int_t    fExtrapMode;            ///< extrapolation mode to get the track parameters and covariances at a given cluster
  Bool_t   fCorrectForSystematics; ///< add or not the systematic shifts of the residuals to the resolution
  Bool_t   fRemoveMonoCathCl;      ///< remove or not the mono-cathod clusters
  Bool_t   fCheckAllPads;          ///< use all pads or only the ones directly below the cluster to look for mono-cathods
  Bool_t   fImproveTracks;         ///< flag telling whether to improve or not the track before measuring the resolution
  Bool_t   fShiftHalfCh;           ///< flag telling wether to displace half-chambers by fHalfChShift(N)B[i] or not
  Bool_t   fPrintHalfChShift;      ///< print the half-chamber displacements
  Bool_t   fShiftDE;               ///< flag telling wether to displace DEs by fDEShift(N)B[i] or not
  Bool_t   fPrintDEShift;          ///< print the DE displacements
  Bool_t   fOCDBLoaded;            //!< flag telling if the OCDB has been properly loaded or not
  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
  Bool_t   fReAlign;               ///< flag telling whether to re-align the spectrometer or not before computing resolution
  TString  fOldAlignStorage;       ///< location of the OCDB storage where to find old MUON/Align/Data (use the default one if empty)
  TString  fNewAlignStorage;       ///< location of the OCDB storage where to find new MUON/Align/Data (use the default one if empty)
  AliMUONGeometryTransformer* fOldGeoTransformer; //!< geometry transformer used to recontruct the present data
  AliMUONGeometryTransformer* fNewGeoTransformer; //!< new geometry transformer containing the new alignment to be applied
  
  TList* fSelectTriggerClass; //!< list of trigger class that can be selected to fill histograms
  
  AliMuonTrackCuts* fMuonTrackCuts; ///< cuts to select tracks to be considered
  
  ClassDef(AliAnalysisTaskMuonResolution, 4); // chamber resolution analysis
};

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::SetStartingResolution(Int_t chId, Double_t valNB, Double_t valB)
{
  /// set chamber non-bending and bending resolutions
  if (chId < 0 || chId >= 10) return;
  fClusterResNB[chId] = valNB;
  fClusterResB[chId] = valB;
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::SetStartingResolution(Double_t valNB[10], Double_t valB[10])
{
  /// set chambers non-bending and bending resolutions
  for (Int_t i = 0; i < 10; i++) {
    fClusterResNB[i] = valNB[i];
    fClusterResB[i] = valB[i];
  }
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::GetStartingResolution(Double_t valNB[10], Double_t valB[10]) const
{
  /// set chambers non-bending and bending resolutions
  for (Int_t i = 0; i < 10; i++) {
    valNB[i] = fClusterResNB[i];
    valB[i] = fClusterResB[i];
  }
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::SetHalfChShift(Int_t hchId, Double_t valNB, Double_t valB)
{
  /// set chamber non-bending and bending resolutions
  if (hchId < 0 || hchId >= 20) return;
  fHalfChShiftNB[hchId] = valNB;
  fHalfChShiftB[hchId] = valB;
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::SetHalfChShift(Double_t valNB[20], Double_t valB[20])
{
  /// set chambers non-bending and bending resolutions
  for (Int_t i = 0; i < 20; i++) {
    fHalfChShiftNB[i] = valNB[i];
    fHalfChShiftB[i] = valB[i];
  }
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::GetHalfChShift(Double_t valNB[20], Double_t valB[20]) const
{
  /// set chambers non-bending and bending resolutions
  for (Int_t i = 0; i < 20; i++) {
    valNB[i] = fHalfChShiftNB[i];
    valB[i] = fHalfChShiftB[i];
  }
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::SetDEShift(Int_t iDE, Double_t valNB, Double_t valB)
{
  /// set chamber non-bending and bending resolutions
  if (iDE < 0 || iDE >= 200) return;
  fDEShiftNB[iDE] = valNB;
  fDEShiftB[iDE] = valB;
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::SetDEShift(Double_t valNB[200], Double_t valB[200])
{
  /// set chambers non-bending and bending resolutions
  for (Int_t i = 0; i < 200; i++) {
    fDEShiftNB[i] = valNB[i];
    fDEShiftB[i] = valB[i];
  }
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::GetDEShift(Double_t valNB[200], Double_t valB[200]) const
{
  /// set chambers non-bending and bending resolutions
  for (Int_t i = 0; i < 200; i++) {
    valNB[i] = fDEShiftNB[i];
    valB[i] = fDEShiftB[i];
  }
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::ReAlign(const char* oldAlignStorage, const char* newAlignStorage)
{
  /// Set the flag to activate the re-alignment and the specific storage where to find the old/new alignment data.
  /// If oldAlignStorage = 0x0 we assume the spectrometer was not aligned before (default geometry)
  /// If old(new)AlignStorage = "" we assume the old(new) alignment data are in the default storage
  if (oldAlignStorage) fOldAlignStorage = oldAlignStorage;
  else fOldAlignStorage = "none";
  fNewAlignStorage = newAlignStorage;
  fReAlign = kTRUE;
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::FitResiduals(Bool_t flag)
{
  /// set gaussian function to fit the residual distribution to extract the mean and the dispersion.
  /// if not set: take the mean and the RMS of the distribution
  delete fGaus;
  if (flag) fGaus = new TF1("fGaus","gaus");
  else fGaus = NULL;
}

//________________________________________________________________________
inline void AliAnalysisTaskMuonResolution::SetMuonTrackCuts(AliMuonTrackCuts &trackCuts)
{
  /// set standard cuts to select tracks to be considered
  delete fMuonTrackCuts;
  fMuonTrackCuts = new AliMuonTrackCuts(trackCuts);
}

#endif

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