1 #ifndef ALIVANALYSISMUON_H
2 #define ALIVANALYSISMUON_H
4 /* $Id: AliVAnalysisMuon.h 47782 2011-02-24 18:37:31Z martinez $ */
7 // Base class for single muon analysis
9 // Author: Diego Stocco
12 #include "AliAnalysisTaskSE.h"
20 class AliMergeableCollection;
21 class AliCounterCollection;
25 class AliCFGridSparse;
26 class AliMuonEventCuts;
27 class AliMuonTrackCuts;
28 class AliMuonPairCuts;
31 class AliVAnalysisMuon : public AliAnalysisTaskSE {
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);
38 virtual ~AliVAnalysisMuon();
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();
46 void SetCentralityClasses(Int_t nCentralityBins = -1, Double_t* centralityBins = 0x0);
47 TAxis* GetCentralityClasses() const;
48 Bool_t SetCentralityClassesFromOutput();
50 void SetTrigClassPatterns(const TString pattern);
51 TString GetDefaultTrigClassPatterns() const;
52 /// Get trigger classes
53 TList* GetAllSelectedTrigClasses() const;
55 void SetTerminateOptions(TString physSel="All", TString trigClass="ANY", TString centralityRange="", TString furtherOpts="");
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; }
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,
70 void SetWeight ( TObject* wgtObj );
71 TObject* GetWeight ( const char* wgtName );
75 /////////////////////////////////////////////////////
76 // Pure virtual methods to be implemented bu users //
77 /////////////////////////////////////////////////////
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)
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
96 Int_t GetParticleType ( AliVParticle* track , Bool_t forceReachFirstAncestor = kFALSE);
97 Int_t RecoTrackMother (AliVParticle* mcParticle, Bool_t forceReachFirstAncestor = kFALSE );
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);
105 kPhysSelPass, ///< Physics selected events
106 kPhysSelReject, ///< Events non-passing selection
107 kNselections ///< Number of selections
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
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
133 AliCounterCollection* fEventCounters; //!< event counters
134 AliMergeableCollection* fMergeableCollection; //!< collection of mergeable objects
135 TObjArray* fOutputList; //!< List of outputs
138 AliVAnalysisMuon(const AliVAnalysisMuon&);
139 AliVAnalysisMuon& operator=(const AliVAnalysisMuon&);
142 void CreateMergeableObjects(TString physSel, TString trigClassName, TString centrality);
143 TObjArray* fOutputPrototypeList; //!< List of prototype object to be used in collection
145 ClassDef(AliVAnalysisMuon, 5);