]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/MUON/lite/AliAnalysisTaskMuonQA.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGPP / MUON / lite / AliAnalysisTaskMuonQA.h
1 #ifndef ALIANALYSISTASKMUONQA_H
2 #define ALIANALYSISTASKMUONQA_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */ 
7
8 /// \ingroup muondep
9 /// \class AliAnalysisTaskMuonQA
10 /// \brief Quality assurance of MUON ESDs
11 //Author: Philippe Pillot - SUBATECH Nantes
12
13 #include "AliAnalysisTaskSE.h"
14 #include "TArrayI.h"
15
16 class TMap;
17 class TList;
18 class TObjArray;
19 class AliCounterCollection;
20 class AliMuonTrackCuts;
21
22 class AliAnalysisTaskMuonQA : public AliAnalysisTaskSE {
23  public:
24   
25   AliAnalysisTaskMuonQA();
26   AliAnalysisTaskMuonQA(const char *name);
27   virtual ~AliAnalysisTaskMuonQA();
28   
29   virtual void   UserCreateOutputObjects();
30   virtual void   UserExec(Option_t *);
31   virtual void   Terminate(Option_t *);
32   virtual void   NotifyRun();
33   
34   /// Select negative (<0), positive (>0) or all (==0) tracks to fill histograms
35   void SelectCharge(Short_t charge = 0) {fSelectCharge = charge;}
36   
37   /// Select events passing the physics selection to fill histograms
38   void SelectPhysics(Bool_t flag = kTRUE) {fSelectPhysics = flag;}
39   
40   /// Select events belonging to at least one of the trigger classes selected by the mask to fill histograms:
41   /// - if the physics selection is used, apply the mask to the trigger word returned by the physics selection
42   /// - if not, apply the mask to the trigger word built by looking for triggers listed in "fSelectTriggerClass"
43   void SelectTrigger(Bool_t flag = kTRUE, UInt_t mask = AliVEvent::kMUON) {fSelectTrigger = flag; fTriggerMask = mask;}
44         
45   /// Select track matching the trigger to fill histograms
46   void SelectMatched(Bool_t flag = kTRUE) {fSelectMatched = flag;}
47   
48   /// Use only tracks passing the acceptance cuts (Rabs, eta)
49   void ApplyAccCut(Bool_t flag = kTRUE) { fApplyAccCut = flag; }
50   
51   // Set track cuts
52   void SetTrackCuts ( AliMuonTrackCuts* trackCuts );
53   /// Get track cuts
54   AliMuonTrackCuts* GetTrackCuts() { return fTrackCuts; }
55   
56  private:
57   
58   /// Not implemented
59   AliAnalysisTaskMuonQA(const AliAnalysisTaskMuonQA& rhs);
60   /// Not implemented
61   AliAnalysisTaskMuonQA& operator = (const AliAnalysisTaskMuonQA& rhs);
62   
63   Double_t ChangeThetaRange(Double_t theta);
64
65   UInt_t BuildTriggerWord(TString& FiredTriggerClasses);
66   
67   TList* BuildListOfTriggerCases(TString& FiredTriggerClasses);
68   TList* BuildListOfAllTriggerCases(TString& FiredTriggerClasses);
69   TList* BuildListOfSelectedTriggerCases(TString& FiredTriggerClasses);
70         
71  private:
72   
73   enum eList {
74     kNTracks                 = 0,  ///< number of tracks
75     kMatchTrig               = 1,  ///< number of tracks matched with trigger
76     kSign                    = 2,  ///< track sign
77     kDCA                     = 3,  ///< DCA distribution
78     kP                       = 4,  ///< P distribution
79     kPMuPlus                 = 5,  ///< P distribution of mu+
80     kPMuMinus                = 6,  ///< P distribution of mu-
81     kPt                      = 7,  ///< Pt distribution
82     kPtMuPlus                = 8,  ///< Pt distribution of mu+
83     kPtMuMinus               = 9,  ///< Pt distribution of mu-
84     kRapidity                = 10, ///< rapidity distribution
85     kThetaX                  = 11, ///< thetaX distribution
86     kThetaY                  = 12, ///< thetaY distribution
87     kChi2                    = 13, ///< normalized chi2 distribution
88     kProbChi2                = 14, ///< distribution of probability of chi2
89     kNClustersPerTrack       = 15, ///< number of clusters per track
90     kNChamberHitPerTrack     = 16,  ///< number of chamber hit per track
91     kPtMatchLpt              = 17, ///< Pt distribution match Lpt
92     kPtMatchHpt              = 18, ///< Pt distribution match Hpt
93     kPtMuPlusMatchLpt        = 19,  ///< Pt distribution of mu+ match Lpt
94     kPtMuPlusMatchHpt        = 20,  ///< Pt distribution of mu+ match Hpt
95     kPtMuMinusMatchLpt       = 21,  ///< Pt distribution of mu- match Lpt
96     kPtMuMinusMatchHpt       = 22,   ///< Pt distribution of mu- match Hpt
97     kMuonTrig                = 23   ///< Muon triggers
98   };
99   
100   enum eListExpert {
101     kNClustersPerCh          = 0,  ///< number of clusters per chamber
102     kNClustersPerDE          = 1,  ///< number of clusters per DE
103     kClusterHitMapInCh       = 2,  ///< cluster position distribution in chamber i
104     kClusterChargeInCh       = 12, ///< cluster charge distribution in chamber i
105     kClusterChargePerDE      = 22, ///< cluster charge distribution per DE
106     kClusterSizeInCh         = 23, ///< cluster size distribution in chamber i
107     kClusterSizePerDE        = 33  ///< cluster size distribution per DE
108   };
109   
110   enum eListNorm {
111     kClusterChargePerChMean  = 0,  ///< cluster charge per Ch: mean
112     kClusterChargePerChSigma = 1,  ///< cluster charge per Ch: dispersion
113     kClusterChargePerDEMean  = 2,  ///< cluster charge per DE: mean
114     kClusterChargePerDESigma = 3,  ///< cluster charge per DE: dispersion
115     kClusterSizePerChMean    = 4,  ///< cluster size per Ch: mean
116     kClusterSizePerChSigma   = 5,  ///< cluster size per Ch: dispersion
117     kClusterSizePerDEMean    = 6,  ///< cluster size per DE: mean
118     kClusterSizePerDESigma   = 7,  ///< cluster size per DE: dispersion
119     kNClustersPerChPerTrack  = 8,  ///< number of clusters per chamber per track
120     kNClustersPerDEPerTrack  = 9   ///< number of clusters per DE per track
121   };
122   
123   TObjArray*  fList;       //!< List of output object for everybody
124   TObjArray*  fListExpert; //!< List of output object for experts
125   TObjArray*  fListNorm;   //!< Normalized histograms
126   
127   AliCounterCollection* fTrackCounters; //!< track statistics
128   AliCounterCollection* fEventCounters; //!< event statistics
129   
130   Short_t fSelectCharge;  ///< Fill histograms only with negative/position tracks (0=all)
131   Bool_t  fSelectPhysics; ///< Fill histograms only with events passing the physics selection
132   Bool_t  fSelectTrigger; ///< Fill histograms only with events passing the trigger selection
133   UInt_t  fTriggerMask;   ///< Trigger mask to be used when selecting events
134   Bool_t  fSelectMatched; ///< Fill histograms only with tracks matching the trigger
135   Bool_t  fApplyAccCut;   ///< use only tracks passing the acceptance cuts (Rabs, eta)
136   
137   TMap*  fTriggerClass;       //!< map of trigger class name associated to short name
138   TList* fSelectTriggerClass; //!< list of trigger class that can be selected to fill histograms
139   AliMuonTrackCuts* fTrackCuts; ///< Track cuts
140   TArrayI fMuonTrigIndex; ///< Combined muon trigger index
141   
142   static const Int_t nCh;       ///< number of tracking chambers
143   static const Int_t nDE;       ///< number of DE
144   static const Float_t dMax[5]; ///< maximum diameter of each station
145   
146   ClassDef(AliAnalysisTaskMuonQA, 7);
147 };
148
149 #endif
150