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

/* $Id$ */ 

/// \ingroup muondep
/// \class AliAnalysisTaskMuonQA
/// \brief Quality assurance of MUON ESDs
//Author: Philippe Pillot - SUBATECH Nantes

#include "AliAnalysisTaskSE.h"
#include "TArrayI.h"

class TMap;
class TList;
class TObjArray;
class AliCounterCollection;
class AliMuonTrackCuts;

class AliAnalysisTaskMuonQA : public AliAnalysisTaskSE {
 public:
  
  AliAnalysisTaskMuonQA();
  AliAnalysisTaskMuonQA(const char *name);
  virtual ~AliAnalysisTaskMuonQA();
  
  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *);
  virtual void   Terminate(Option_t *);
  virtual void   NotifyRun();
  
  /// Select negative (<0), positive (>0) or all (==0) tracks to fill histograms
  void SelectCharge(Short_t charge = 0) {fSelectCharge = charge;}
  
  /// Select events passing the physics selection to fill histograms
  void SelectPhysics(Bool_t flag = kTRUE) {fSelectPhysics = flag;}
  
  /// 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;}
	
  /// Select track matching the trigger to fill histograms
  void SelectMatched(Bool_t flag = kTRUE) {fSelectMatched = flag;}
  
  /// Use only tracks passing the acceptance cuts (Rabs, eta)
  void ApplyAccCut(Bool_t flag = kTRUE) { fApplyAccCut = flag; }
  
  // Set track cuts
  void SetTrackCuts ( AliMuonTrackCuts* trackCuts );
  /// Get track cuts
  AliMuonTrackCuts* GetTrackCuts() { return fTrackCuts; }
  
 private:
  
  /// Not implemented
  AliAnalysisTaskMuonQA(const AliAnalysisTaskMuonQA& rhs);
  /// Not implemented
  AliAnalysisTaskMuonQA& operator = (const AliAnalysisTaskMuonQA& rhs);
  
  Double_t ChangeThetaRange(Double_t theta);

  UInt_t BuildTriggerWord(TString& FiredTriggerClasses);
  
  TList* BuildListOfTriggerCases(TString& FiredTriggerClasses);
  TList* BuildListOfAllTriggerCases(TString& FiredTriggerClasses);
  TList* BuildListOfSelectedTriggerCases(TString& FiredTriggerClasses);
	
 private:
  
  enum eList {
    kNTracks                 = 0,  ///< number of tracks
    kMatchTrig               = 1,  ///< number of tracks matched with trigger
    kSign                    = 2,  ///< track sign
    kDCA                     = 3,  ///< DCA distribution
    kP                       = 4,  ///< P distribution
    kPMuPlus                 = 5,  ///< P distribution of mu+
    kPMuMinus                = 6,  ///< P distribution of mu-
    kPt                      = 7,  ///< Pt distribution
    kPtMuPlus                = 8,  ///< Pt distribution of mu+
    kPtMuMinus               = 9,  ///< Pt distribution of mu-
    kRapidity                = 10, ///< rapidity distribution
    kThetaX                  = 11, ///< thetaX distribution
    kThetaY                  = 12, ///< thetaY distribution
    kChi2                    = 13, ///< normalized chi2 distribution
    kProbChi2                = 14, ///< distribution of probability of chi2
    kNClustersPerTrack       = 15, ///< number of clusters per track
    kNChamberHitPerTrack     = 16,  ///< number of chamber hit per track
    kPtMatchLpt              = 17, ///< Pt distribution match Lpt
    kPtMatchHpt              = 18, ///< Pt distribution match Hpt
    kPtMuPlusMatchLpt        = 19,  ///< Pt distribution of mu+ match Lpt
    kPtMuPlusMatchHpt        = 20,  ///< Pt distribution of mu+ match Hpt
    kPtMuMinusMatchLpt       = 21,  ///< Pt distribution of mu- match Lpt
    kPtMuMinusMatchHpt       = 22,   ///< Pt distribution of mu- match Hpt
    kMuonTrig                = 23   ///< Muon triggers
  };
  
  enum eListExpert {
    kNClustersPerCh          = 0,  ///< number of clusters per chamber
    kNClustersPerDE          = 1,  ///< number of clusters per DE
    kClusterHitMapInCh       = 2,  ///< cluster position distribution in chamber i
    kClusterChargeInCh       = 12, ///< cluster charge distribution in chamber i
    kClusterChargePerDE      = 22, ///< cluster charge distribution per DE
    kClusterSizeInCh         = 23, ///< cluster size distribution in chamber i
    kClusterSizePerDE        = 33  ///< cluster size distribution per DE
  };
  
  enum eListNorm {
    kClusterChargePerChMean  = 0,  ///< cluster charge per Ch: mean
    kClusterChargePerChSigma = 1,  ///< cluster charge per Ch: dispersion
    kClusterChargePerDEMean  = 2,  ///< cluster charge per DE: mean
    kClusterChargePerDESigma = 3,  ///< cluster charge per DE: dispersion
    kClusterSizePerChMean    = 4,  ///< cluster size per Ch: mean
    kClusterSizePerChSigma   = 5,  ///< cluster size per Ch: dispersion
    kClusterSizePerDEMean    = 6,  ///< cluster size per DE: mean
    kClusterSizePerDESigma   = 7,  ///< cluster size per DE: dispersion
    kNClustersPerChPerTrack  = 8,  ///< number of clusters per chamber per track
    kNClustersPerDEPerTrack  = 9   ///< number of clusters per DE per track
  };
  
  TObjArray*  fList;       //!< List of output object for everybody
  TObjArray*  fListExpert; //!< List of output object for experts
  TObjArray*  fListNorm;   //!< Normalized histograms
  
  AliCounterCollection* fTrackCounters; //!< track statistics
  AliCounterCollection* fEventCounters; //!< event statistics
  
  Short_t fSelectCharge;  ///< Fill histograms only with negative/position tracks (0=all)
  Bool_t  fSelectPhysics; ///< Fill histograms only with events passing the physics selection
  Bool_t  fSelectTrigger; ///< Fill histograms only with events passing the trigger selection
  UInt_t  fTriggerMask;   ///< Trigger mask to be used when selecting events
  Bool_t  fSelectMatched; ///< Fill histograms only with tracks matching the trigger
  Bool_t  fApplyAccCut;   ///< use only tracks passing the acceptance cuts (Rabs, eta)
  
  TMap*  fTriggerClass;       //!< map of trigger class name associated to short name
  TList* fSelectTriggerClass; //!< list of trigger class that can be selected to fill histograms
  AliMuonTrackCuts* fTrackCuts; ///< Track cuts
  TArrayI fMuonTrigIndex; ///< Combined muon trigger index
  
  static const Int_t nCh;       ///< number of tracking chambers
  static const Int_t nDE;       ///< number of DE
  static const Float_t dMax[5]; ///< maximum diameter of each station
  
  ClassDef(AliAnalysisTaskMuonQA, 7);
};

#endif

 AliAnalysisTaskMuonQA.h:1
 AliAnalysisTaskMuonQA.h:2
 AliAnalysisTaskMuonQA.h:3
 AliAnalysisTaskMuonQA.h:4
 AliAnalysisTaskMuonQA.h:5
 AliAnalysisTaskMuonQA.h:6
 AliAnalysisTaskMuonQA.h:7
 AliAnalysisTaskMuonQA.h:8
 AliAnalysisTaskMuonQA.h:9
 AliAnalysisTaskMuonQA.h:10
 AliAnalysisTaskMuonQA.h:11
 AliAnalysisTaskMuonQA.h:12
 AliAnalysisTaskMuonQA.h:13
 AliAnalysisTaskMuonQA.h:14
 AliAnalysisTaskMuonQA.h:15
 AliAnalysisTaskMuonQA.h:16
 AliAnalysisTaskMuonQA.h:17
 AliAnalysisTaskMuonQA.h:18
 AliAnalysisTaskMuonQA.h:19
 AliAnalysisTaskMuonQA.h:20
 AliAnalysisTaskMuonQA.h:21
 AliAnalysisTaskMuonQA.h:22
 AliAnalysisTaskMuonQA.h:23
 AliAnalysisTaskMuonQA.h:24
 AliAnalysisTaskMuonQA.h:25
 AliAnalysisTaskMuonQA.h:26
 AliAnalysisTaskMuonQA.h:27
 AliAnalysisTaskMuonQA.h:28
 AliAnalysisTaskMuonQA.h:29
 AliAnalysisTaskMuonQA.h:30
 AliAnalysisTaskMuonQA.h:31
 AliAnalysisTaskMuonQA.h:32
 AliAnalysisTaskMuonQA.h:33
 AliAnalysisTaskMuonQA.h:34
 AliAnalysisTaskMuonQA.h:35
 AliAnalysisTaskMuonQA.h:36
 AliAnalysisTaskMuonQA.h:37
 AliAnalysisTaskMuonQA.h:38
 AliAnalysisTaskMuonQA.h:39
 AliAnalysisTaskMuonQA.h:40
 AliAnalysisTaskMuonQA.h:41
 AliAnalysisTaskMuonQA.h:42
 AliAnalysisTaskMuonQA.h:43
 AliAnalysisTaskMuonQA.h:44
 AliAnalysisTaskMuonQA.h:45
 AliAnalysisTaskMuonQA.h:46
 AliAnalysisTaskMuonQA.h:47
 AliAnalysisTaskMuonQA.h:48
 AliAnalysisTaskMuonQA.h:49
 AliAnalysisTaskMuonQA.h:50
 AliAnalysisTaskMuonQA.h:51
 AliAnalysisTaskMuonQA.h:52
 AliAnalysisTaskMuonQA.h:53
 AliAnalysisTaskMuonQA.h:54
 AliAnalysisTaskMuonQA.h:55
 AliAnalysisTaskMuonQA.h:56
 AliAnalysisTaskMuonQA.h:57
 AliAnalysisTaskMuonQA.h:58
 AliAnalysisTaskMuonQA.h:59
 AliAnalysisTaskMuonQA.h:60
 AliAnalysisTaskMuonQA.h:61
 AliAnalysisTaskMuonQA.h:62
 AliAnalysisTaskMuonQA.h:63
 AliAnalysisTaskMuonQA.h:64
 AliAnalysisTaskMuonQA.h:65
 AliAnalysisTaskMuonQA.h:66
 AliAnalysisTaskMuonQA.h:67
 AliAnalysisTaskMuonQA.h:68
 AliAnalysisTaskMuonQA.h:69
 AliAnalysisTaskMuonQA.h:70
 AliAnalysisTaskMuonQA.h:71
 AliAnalysisTaskMuonQA.h:72
 AliAnalysisTaskMuonQA.h:73
 AliAnalysisTaskMuonQA.h:74
 AliAnalysisTaskMuonQA.h:75
 AliAnalysisTaskMuonQA.h:76
 AliAnalysisTaskMuonQA.h:77
 AliAnalysisTaskMuonQA.h:78
 AliAnalysisTaskMuonQA.h:79
 AliAnalysisTaskMuonQA.h:80
 AliAnalysisTaskMuonQA.h:81
 AliAnalysisTaskMuonQA.h:82
 AliAnalysisTaskMuonQA.h:83
 AliAnalysisTaskMuonQA.h:84
 AliAnalysisTaskMuonQA.h:85
 AliAnalysisTaskMuonQA.h:86
 AliAnalysisTaskMuonQA.h:87
 AliAnalysisTaskMuonQA.h:88
 AliAnalysisTaskMuonQA.h:89
 AliAnalysisTaskMuonQA.h:90
 AliAnalysisTaskMuonQA.h:91
 AliAnalysisTaskMuonQA.h:92
 AliAnalysisTaskMuonQA.h:93
 AliAnalysisTaskMuonQA.h:94
 AliAnalysisTaskMuonQA.h:95
 AliAnalysisTaskMuonQA.h:96
 AliAnalysisTaskMuonQA.h:97
 AliAnalysisTaskMuonQA.h:98
 AliAnalysisTaskMuonQA.h:99
 AliAnalysisTaskMuonQA.h:100
 AliAnalysisTaskMuonQA.h:101
 AliAnalysisTaskMuonQA.h:102
 AliAnalysisTaskMuonQA.h:103
 AliAnalysisTaskMuonQA.h:104
 AliAnalysisTaskMuonQA.h:105
 AliAnalysisTaskMuonQA.h:106
 AliAnalysisTaskMuonQA.h:107
 AliAnalysisTaskMuonQA.h:108
 AliAnalysisTaskMuonQA.h:109
 AliAnalysisTaskMuonQA.h:110
 AliAnalysisTaskMuonQA.h:111
 AliAnalysisTaskMuonQA.h:112
 AliAnalysisTaskMuonQA.h:113
 AliAnalysisTaskMuonQA.h:114
 AliAnalysisTaskMuonQA.h:115
 AliAnalysisTaskMuonQA.h:116
 AliAnalysisTaskMuonQA.h:117
 AliAnalysisTaskMuonQA.h:118
 AliAnalysisTaskMuonQA.h:119
 AliAnalysisTaskMuonQA.h:120
 AliAnalysisTaskMuonQA.h:121
 AliAnalysisTaskMuonQA.h:122
 AliAnalysisTaskMuonQA.h:123
 AliAnalysisTaskMuonQA.h:124
 AliAnalysisTaskMuonQA.h:125
 AliAnalysisTaskMuonQA.h:126
 AliAnalysisTaskMuonQA.h:127
 AliAnalysisTaskMuonQA.h:128
 AliAnalysisTaskMuonQA.h:129
 AliAnalysisTaskMuonQA.h:130
 AliAnalysisTaskMuonQA.h:131
 AliAnalysisTaskMuonQA.h:132
 AliAnalysisTaskMuonQA.h:133
 AliAnalysisTaskMuonQA.h:134
 AliAnalysisTaskMuonQA.h:135
 AliAnalysisTaskMuonQA.h:136
 AliAnalysisTaskMuonQA.h:137
 AliAnalysisTaskMuonQA.h:138
 AliAnalysisTaskMuonQA.h:139
 AliAnalysisTaskMuonQA.h:140
 AliAnalysisTaskMuonQA.h:141
 AliAnalysisTaskMuonQA.h:142
 AliAnalysisTaskMuonQA.h:143
 AliAnalysisTaskMuonQA.h:144
 AliAnalysisTaskMuonQA.h:145
 AliAnalysisTaskMuonQA.h:146
 AliAnalysisTaskMuonQA.h:147
 AliAnalysisTaskMuonQA.h:148
 AliAnalysisTaskMuonQA.h:149
 AliAnalysisTaskMuonQA.h:150