]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/muon/AliVAnalysisMuon.h
Improve determination of the muon source (Diego)
[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  protected:
74   
75   /////////////////////////////////////////////////////
76   // Pure virtual methods to be implemented bu users //
77   /////////////////////////////////////////////////////
78   
79   virtual void MyUserCreateOutputObjects() = 0;
80   // In this method you have to create your own output as well as
81   // the mergeable objects that will be then used
82   // in the counter collection.
83   // To do so, create your object and add it to the collection through:
84   //    TH1* histo = new TH1F();
85   //    AddObjectToCollection(histo, index)
86   
87   virtual void ProcessEvent(TString physSel, const TObjArray& selectTrigClasses, TString centrality) = 0;
88   // This method is called at each event.
89   // In this method you can fill the histograms or the CF container that you have created
90   
91   /////////////////////
92   // Utility methods //
93   /////////////////////
94     
95   // Methods for MC
96   Int_t GetParticleType ( AliVParticle* track , Bool_t forceReachFirstAncestor = kFALSE);
97   Int_t RecoTrackMother (AliVParticle* mcParticle, Bool_t forceReachFirstAncestor = kFALSE );
98   
99   // Methods for mergeable object collections
100   Bool_t AddObjectToCollection(TObject* object, Int_t index = -1);
101   TObject* GetMergeableObject(TString physSel, TString trigClassName, TString centrality, TString objectName);
102   TObject* GetSum(TString physSel, TString trigClassNames, TString centrality, TString objectPattern);
103   
104   enum {
105     kPhysSelPass,    ///< Physics selected events
106     kPhysSelReject,  ///< Events non-passing selection
107     kNselections     ///< Number of selections
108   };
109   
110   enum {
111     kCharmMu,       ///< Mu from charm
112     kBeautyMu,      ///< Mu from beauty
113     kQuarkoniumMu,  ///< Mu from resonance
114     kWbosonMu,      ///< Mu from W
115     kDecayMu,       ///< Decay mu
116     kSecondaryMu,   ///< Secondary mu
117     kRecoHadron,    ///< Reconstructed hadron
118     kUnidentified,  ///< Particle that fails matching kine
119     kNtrackSources  ///< Total number of track sources
120   };
121   
122   AliMuonEventCuts* fMuonEventCuts; ///< Muon event cuts
123   AliMuonTrackCuts* fMuonTrackCuts; ///< Muon track cuts
124   AliMuonPairCuts* fMuonPairCuts;   ///< Muon pair track cuts
125   AliESDEvent* fESDEvent;      //!< ESD event, not owner
126   AliAODEvent* fAODEvent;      //!< AOD event, not owner
127   TObjArray* fTerminateOptions; ///< Terminate options
128   TObjArray* fChargeKeys;      ///< Muon charge keys
129   TObjArray* fSrcKeys;         ///< MC sources names
130   TObjArray* fPhysSelKeys;     ///< Physics selection names
131   THashList* fWeights;         ///< List of objects to weight histograms
132   
133   AliCounterCollection* fEventCounters;  //!< event counters
134   AliMergeableCollection* fMergeableCollection; //!< collection of mergeable objects
135   TObjArray* fOutputList;  //!< List of outputs  
136
137  private:
138   AliVAnalysisMuon(const AliVAnalysisMuon&);
139   AliVAnalysisMuon& operator=(const AliVAnalysisMuon&);
140   
141   void InitKeys();
142   void CreateMergeableObjects(TString physSel, TString trigClassName, TString centrality);
143   TObjArray* fOutputPrototypeList; //!< List of prototype object to be used in collection
144
145   ClassDef(AliVAnalysisMuon, 5);
146 };
147
148 #endif