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"
19 class AliMergeableCollection;
20 class AliCounterCollection;
24 class AliCFGridSparse;
25 class AliMuonEventCuts;
26 class AliMuonTrackCuts;
27 class AliMuonPairCuts;
30 class AliVAnalysisMuon : public AliAnalysisTaskSE {
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);
37 virtual ~AliVAnalysisMuon();
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();
45 void SetCentralityClasses(Int_t nCentralityBins = -1, Double_t* centralityBins = 0x0);
46 TAxis* GetCentralityClasses() const;
47 Bool_t SetCentralityClassesFromOutput();
49 void SetTrigClassPatterns(const TString pattern);
50 TString GetDefaultTrigClassPatterns() const;
51 /// Get trigger classes
52 TList* GetAllSelectedTrigClasses() const;
54 void SetTerminateOptions(TString physSel="All", TString trigClass="ANY", TString centralityRange="", TString furtherOpts="");
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; }
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,
71 /////////////////////////////////////////////////////
72 // Pure virtual methods to be implemented bu users //
73 /////////////////////////////////////////////////////
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)
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
92 Int_t GetParticleType(AliVParticle* track);
93 Int_t RecoTrackMother(AliVParticle* mcParticle);
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);
101 kPhysSelPass, ///< Physics selected events
102 kPhysSelReject, ///< Events non-passing selection
103 kNselections ///< Number of selections
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
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
128 AliCounterCollection* fEventCounters; //!< event counters
129 AliMergeableCollection* fMergeableCollection; //!< collection of mergeable objects
130 TObjArray* fOutputList; //!< List of outputs
133 AliVAnalysisMuon(const AliVAnalysisMuon&);
134 AliVAnalysisMuon& operator=(const AliVAnalysisMuon&);
137 void CreateMergeableObjects(TString physSel, TString trigClassName, TString centrality);
138 TObjArray* fOutputPrototypeList; //!< List of prototype object to be used in collection
140 ClassDef(AliVAnalysisMuon, 4);