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