]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/muon/AliVAnalysisMuon.h
1) Adding class AliAnalysisMuonUtility which contains static methods allowing to...
[u/mrichter/AliRoot.git] / PWG / muon / AliVAnalysisMuon.h
1 #ifndef ALIVANALYSISMUON_H
2 #define ALIVANALYSISMUON_H
3
4 /* $Id: AliVAnalysisMuon.h 47782 2011-02-24 18:37:31Z martinez $ */ 
5
6 //
7 // Base class for single muon analysis
8 //
9 // Author: Diego Stocco
10 //
11
12 #include "AliAnalysisTaskSE.h"
13
14 class TString;
15 class TObjArray;
16 class TAxis;
17 class TLorentzVector;
18 class TList;
19 class AliMergeableCollection;
20 class AliCounterCollection;
21 class AliVParticle;
22 class AliAODEvent;
23 class AliESDEvent;
24 class AliCFGridSparse;
25 class AliMuonEventCuts;
26 class AliMuonTrackCuts;
27 class AliMuonPairCuts;
28 class AliVVertex;
29
30 class AliVAnalysisMuon : public AliAnalysisTaskSE {
31  public:
32   AliVAnalysisMuon();
33   AliVAnalysisMuon(const char *name, const AliMuonTrackCuts& trackCuts);
34   AliVAnalysisMuon(const char *name, const AliMuonPairCuts& pairCuts);
35   AliVAnalysisMuon(const char *name, const AliMuonTrackCuts& trackCuts, const AliMuonPairCuts& pairCuts);
36   
37   virtual ~AliVAnalysisMuon();
38
39   virtual void   UserCreateOutputObjects();
40   virtual void   UserExec(Option_t *option);
41   virtual void   Terminate(Option_t *option);
42   virtual void   NotifyRun();
43   virtual void   FinishTaskOutput();
44
45   void SetCentralityClasses(Int_t nCentralityBins = -1, Double_t* centralityBins = 0x0);
46   TAxis* GetCentralityClasses() const;
47   Bool_t SetCentralityClassesFromOutput();
48
49   void SetTrigClassPatterns(const TString pattern);
50   TString GetDefaultTrigClassPatterns() const;
51   /// Get trigger classes
52   TList* GetAllSelectedTrigClasses() const;
53   
54   void SetTerminateOptions(TString physSel="All", TString trigClass="ANY", TString centralityRange="", TString furtherOpts="");
55   
56   /// Get muon event cuts
57   AliMuonEventCuts* GetMuonEventCuts() { return fMuonEventCuts; }
58   /// Get muon track cuts
59   AliMuonTrackCuts* GetMuonTrackCuts() { return fMuonTrackCuts; }
60   /// Get muon pair cuts
61   AliMuonPairCuts* GetMuonPairCuts() { return fMuonPairCuts; }
62   
63   // Utility methods for CF container
64   static Bool_t SetSparseRange(AliCFGridSparse* gridSparse,
65                                Int_t ivar, TString labelName,
66                                Double_t varMin, Double_t varMax,
67                                TString option = "");
68
69  protected:
70   
71   /////////////////////////////////////////////////////
72   // Pure virtual methods to be implemented bu users //
73   /////////////////////////////////////////////////////
74   
75   virtual void MyUserCreateOutputObjects() = 0;
76   // In this method you have to create your own output as well as
77   // the mergeable objects that will be then used
78   // in the counter collection.
79   // To do so, create your object and add it to the collection through:
80   //    TH1* histo = new TH1F();
81   //    AddObjectToCollection(histo, index)
82   
83   virtual void ProcessEvent(TString physSel, const TObjArray& selectTrigClasses, TString centrality) = 0;
84   // This method is called at each event.
85   // In this method you can fill the histograms or the CF container that you have created
86   
87   /////////////////////
88   // Utility methods //
89   /////////////////////
90     
91   // Methods for MC
92   Int_t GetParticleType(AliVParticle* track);
93   Int_t RecoTrackMother(AliVParticle* mcParticle);
94   
95   // Methods for mergeable object collections
96   Bool_t AddObjectToCollection(TObject* object, Int_t index = -1);
97   TObject* GetMergeableObject(TString physSel, TString trigClassName, TString centrality, TString objectName);
98   TObject* GetSum(TString physSel, TString trigClassNames, TString centrality, TString objectPattern);
99   
100   enum {
101     kPhysSelPass,    ///< Physics selected events
102     kPhysSelReject,  ///< Events non-passing selection
103     kNselections     ///< Number of selections
104   };
105   
106   enum {
107     kCharmMu,       ///< Mu from charm
108     kBeautyMu,      ///< Mu from beauty
109     kQuarkoniumMu,  ///< Mu from resonance
110     kWbosonMu,      ///< Mu from W
111     kDecayMu,       ///< Decay mu
112     kSecondaryMu,   ///< Secondary mu
113     kRecoHadron,    ///< Reconstructed hadron
114     kUnidentified,  ///< Particle that fails matching kine
115     kNtrackSources  ///< Total number of track sources
116   };
117   
118   AliMuonEventCuts* fMuonEventCuts; ///< Muon event cuts
119   AliMuonTrackCuts* fMuonTrackCuts; ///< Muon track cuts
120   AliMuonPairCuts* fMuonPairCuts;   ///< Muon pair track cuts
121   AliESDEvent* fESDEvent;      //!< ESD event, not owner
122   AliAODEvent* fAODEvent;      //!< AOD event, not owner
123   TObjArray* fTerminateOptions; ///< Terminate options
124   TObjArray* fChargeKeys;      ///< Muon charge keys
125   TObjArray* fSrcKeys;         ///< MC sources names
126   TObjArray* fPhysSelKeys;     ///< Physics selection names
127   
128   AliCounterCollection* fEventCounters;  //!< event counters
129   AliMergeableCollection* fMergeableCollection; //!< collection of mergeable objects
130   TObjArray* fOutputList;  //!< List of outputs  
131
132  private:
133   AliVAnalysisMuon(const AliVAnalysisMuon&);
134   AliVAnalysisMuon& operator=(const AliVAnalysisMuon&);
135   
136   void InitKeys();
137   void CreateMergeableObjects(TString physSel, TString trigClassName, TString centrality);
138   TObjArray* fOutputPrototypeList; //!< List of prototype object to be used in collection
139
140   ClassDef(AliVAnalysisMuon, 4);
141 };
142
143 #endif