]>
Commit | Line | Data |
---|---|---|
1 | #ifndef ALIANALYSISTASKSINGLEMU_H | |
2 | #define ALIANALYSISTASKSINGLEMU_H | |
3 | ||
4 | /* $Id$ */ | |
5 | ||
6 | /// \ingroup "PWG3muon" | |
7 | /// \class AliAnalysisTaskSingleMu | |
8 | /// \brief Analysis task for single muons in the spectrometer | |
9 | /// | |
10 | // Author Diego Stocco | |
11 | ||
12 | #include "AliAnalysisTaskSE.h" | |
13 | ||
14 | class TList; | |
15 | class AliMCParticle; | |
16 | class TTree; | |
17 | class TMap; | |
18 | class TObjArray; | |
19 | //class TAxis; | |
20 | class AliCFManager; | |
21 | ||
22 | class AliAnalysisTaskSingleMu : public AliAnalysisTaskSE { | |
23 | public: | |
24 | AliAnalysisTaskSingleMu(const char *name = "AliAnalysisTaskSingleMu", Int_t fillTreeScaleDown = 0, Bool_t keepAll = kFALSE); | |
25 | virtual ~AliAnalysisTaskSingleMu(); | |
26 | ||
27 | virtual void UserCreateOutputObjects(); | |
28 | virtual void UserExec(Option_t *option); | |
29 | virtual void Terminate(Option_t *option); | |
30 | virtual void NotifyRun(); | |
31 | virtual void FinishTaskOutput(); | |
32 | ||
33 | void SetTriggerClasses(TString triggerClasses = | |
34 | "CINT1-B-NOPF CINT1-AC-NOPF CINT1-E-NOPF CMUS1-B-NOPF CMUS1-AC-NOPF CMUS1-E-NOPF CINT1B-ABCE-NOPF CINT1A-ABCE-NOPF CINT1C-ABCE-NOPF CMUS1B-ABCE-NOPF CMUS1A-ABCE-NOPF CMUS1C-ABCE-NOPF CINT5-B-NOPF CINT5-AC-NOPF CINT5-E-NOPF CMUS5-B-NOPF CMUS5-AC-NOPF CMUS5-E-NOPF CINT5B-ABCE-NOPF CINT5A-ABCE-NOPF CINT5C-ABCE-NOPF CMUS5B-ABCE-NOPF CMUS5A-ABCE-NOPF CMUS5C-ABCE-NOPF"); | |
35 | ||
36 | /// Get CORRFW manager | |
37 | AliCFManager * GetCFManager() const { return fCFManager; } | |
38 | ||
39 | enum { | |
40 | kHvarPt, ///< Pt at vertex | |
41 | // kHvarY, ///< Rapidity | |
42 | kHvarEta, ///< Pseudo-Rapidity | |
43 | kHvarPhi, ///< Phi | |
44 | kHvarDCA, ///< DCA | |
45 | kHvarVz, ///< Z vertex position | |
46 | kHvarThetaZones, ///< Theta at absorber end (4 zones) | |
47 | kHvarCharge, ///< Particle charge | |
48 | kHvarMatchTrig, ///< Matching trigger | |
49 | kHvarTrigClass, ///< Trigger classes | |
50 | kHvarIsGoodVtx, ///< IP vertex correctly reconstructed | |
51 | kHvarMotherType, ///< Mother type (MC only) | |
52 | kHvarCentrality, ///< Centrality class | |
53 | kNvars ///< THnSparse dimensions | |
54 | }; | |
55 | ||
56 | enum { | |
57 | kStepReconstructed, ///< Reconstructed tracks | |
58 | //kStepAcceptance, ///< Track in acceptance | |
59 | kStepGeneratedMC, ///< Generated tracks (MC) | |
60 | //kStepAcceptanceMC, ///< Track in acceptance (MC) | |
61 | kNsteps ///< Number of steps | |
62 | }; | |
63 | ||
64 | private: | |
65 | ||
66 | AliAnalysisTaskSingleMu(const AliAnalysisTaskSingleMu&); | |
67 | AliAnalysisTaskSingleMu& operator=(const AliAnalysisTaskSingleMu&); | |
68 | ||
69 | ||
70 | enum { | |
71 | kHistoNeventsPerTrig, ///< Number of events per trigger | |
72 | kHistoMuonMultiplicity, ///< Number of muons per event | |
73 | kHistoEventVz, ///< Vertex z distribution for all events | |
74 | kHistoNeventsPerRun, ///< Number of triggers per run (for check) | |
75 | kHistoNmuonsPerRun, ///< Number of muons per run (for check) | |
76 | kNsummaryHistos ///< Number of summary histograms | |
77 | }; | |
78 | ||
79 | enum { | |
80 | kNoMatchTrig, ///< No match with trigger | |
81 | kAllPtTrig, ///< Match All Pt | |
82 | kLowPtTrig, ///< Match Low Pt | |
83 | kHighPtTrig, ///< Match High Pt | |
84 | kNtrigCuts ///< Total number of trigger types | |
85 | }; | |
86 | ||
87 | ||
88 | // Histograms for MC | |
89 | enum { | |
90 | kHistoCheckVzMC, ///< Check vertex distribution for all vertex | |
91 | kHistoCheckVzHasVtxMC, ///< Check vertex distribution for reco vertex | |
92 | kHistoCheckVzNoPileupMC, ///< Check vertex distribution for non-pileup vtx | |
93 | kNsummaryHistosMC ///< Summary histograms for MC | |
94 | }; | |
95 | ||
96 | enum { | |
97 | kHistoPtResolutionMC, ///< Pt resolution | |
98 | kNhistoTypesMC ///< Number of MC histograms | |
99 | }; | |
100 | ||
101 | enum { | |
102 | kCharmMu, ///< Mu from charm | |
103 | kBeautyMu, ///< Mu from beauty | |
104 | kPrimaryMu, ///< Primary mu | |
105 | kSecondaryMu, ///< Secondary mu | |
106 | kRecoHadron, ///< Reconstructed hadron | |
107 | kUnknownPart, ///< Particle that fails matching kine | |
108 | kNtrackSources ///< Total number of track sources | |
109 | }; | |
110 | ||
111 | // Tree | |
112 | enum { | |
113 | kVarPx, ///< Px at vertex | |
114 | kVarPy, ///< Py at vertex | |
115 | kVarPz, ///< Pz at vertex | |
116 | kVarPt, ///< Pt at vertex | |
117 | kVarPxAtDCA, ///< Px at DCA | |
118 | kVarPyAtDCA, ///< Py at DCA | |
119 | kVarPzAtDCA, ///< Pz at DCA | |
120 | kVarPtAtDCA, ///< Pt at DCA | |
121 | kVarPxUncorrected, ///< Px at first chamber | |
122 | kVarPyUncorrected, ///< Py at first chamber | |
123 | kVarPzUncorrected, ///< Pz at first chamber | |
124 | kVarPtUncorrected, ///< Pt at first chamber | |
125 | kVarXUncorrected, ///< X at first chamber | |
126 | kVarYUncorrected, ///< Y at at first chamber | |
127 | kVarZUncorrected, ///< Z at at first chamber | |
128 | kVarXatDCA, ///< X position at DCA | |
129 | kVarYatDCA, ///< Y position at DCA | |
130 | kVarDCA, ///< DCA | |
131 | kVarEta, ///< Eta | |
132 | kVarRapidity, ///< Rapidity | |
133 | kVarCharge, ///< Charge | |
134 | kVarRAtAbsEnd, ///< R at absorber end | |
135 | // Global event info | |
136 | kVarIPVx, ///< IP x position | |
137 | kVarIPVy, ///< IP y position | |
138 | kVarIPVz, ///< IP z position | |
139 | kVarCentrality, ///< Event centrality | |
140 | kNvarFloat | |
141 | }; | |
142 | ||
143 | enum { | |
144 | kVarMatchTrig, ///< Match trigger | |
145 | kVarIsMuon, ///< Is muon | |
146 | kVarIsGhost, ///< Is Ghost (trigger track not matching tracker) | |
147 | kVarLocalCircuit, ///< Fired local circuit | |
148 | // Global event info | |
149 | kVarPassPhysicsSelection, ///< Pass physics selection (Requires ESD) | |
150 | kVarNVtxContrib, ///< Vertex contributors | |
151 | kVarNspdTracklets, ///< SPD tracklets | |
152 | kVarIsPileup, ///< Pileup vertices | |
153 | kNvarInt | |
154 | }; | |
155 | ||
156 | enum { | |
157 | // Global event info | |
158 | kVarTrigMask, ///< Fires triggers mask | |
159 | kNvarChar | |
160 | }; | |
161 | ||
162 | // Event ID | |
163 | enum { | |
164 | // Global event info | |
165 | kVarBunchCrossNumber, ///< Bunch crossing number | |
166 | kVarOrbitNumber, ///< Orbit number | |
167 | kVarPeriodNumber, ///< Period number | |
168 | kVarRunNumber, ///< Run number | |
169 | kNvarUInt | |
170 | }; | |
171 | ||
172 | // Tree MC | |
173 | enum { | |
174 | kVarPxMC, ///< Px from Kine | |
175 | kVarPyMC, ///< Py from Kine | |
176 | kVarPzMC, ///< Pz from Kine | |
177 | kVarPtMC, ///< Pt from Kine | |
178 | kVarEtaMC, ///< Eta from Kine | |
179 | kVarRapidityMC, ///< Rapidity from Kine | |
180 | kVarVxMC, ///< Particle production x vertex from Kine | |
181 | kVarVyMC, ///< Particle production y vertex from Kine | |
182 | kVarVzMC, ///< Particle production z vertex from Kine | |
183 | kVarMotherPxMC, ///< Mother px from Kine | |
184 | kVarMotherPyMC, ///< Mother py from Kine | |
185 | kVarMotherPzMC, ///< Mother pz from Kine | |
186 | kVarMotherEtaMC, ///< Mother eta from Kine | |
187 | kVarMotherRapidityMC, ///< Mother rapidity from Kine | |
188 | kVarMotherVxMC, ///< Mother production x vertex from Kine | |
189 | kVarMotherVyMC, ///< Mother production y vertex from Kine | |
190 | kVarMotherVzMC, ///< Mother production z vertex from Kine | |
191 | // Global event info | |
192 | kVarIPVxMC, ///< IP x position | |
193 | kVarIPVyMC, ///< IP y position | |
194 | kVarIPVzMC, ///< IP z position | |
195 | kNvarFloatMC | |
196 | }; | |
197 | ||
198 | enum { | |
199 | kVarPdg, ///< PDG | |
200 | kVarMotherPdg, ///< Mother PDG | |
201 | kVarMotherType, ///< Mother type | |
202 | kNvarIntMC | |
203 | }; | |
204 | ||
205 | Int_t GetHistoIndex(Int_t histoTypeIndex, Int_t trigIndex = -1, Int_t srcIndex = -1); | |
206 | Float_t GetBinThetaAbsEnd(Float_t RAtAbsEnd, Bool_t isTheta = kFALSE); | |
207 | Float_t GetBinTrigClass(const Char_t* trigClass); | |
208 | ||
209 | void FillTriggerHistos(Int_t histoIndex, Int_t matchTrig, Int_t motherType, | |
210 | Float_t var1, Float_t var2 = 0. , Float_t var3 = 0.); | |
211 | ||
212 | Int_t RecoTrackMother(AliMCParticle* mcParticle); | |
213 | ||
214 | void Reset(Bool_t keepGlobal = kTRUE); | |
215 | ||
216 | void SetAxisLabel(TAxis* axis); | |
217 | ||
218 | Int_t fFillTreeScaleDown; ///< Ntuple must be filled each fFillTreeScaleDown events | |
219 | Bool_t fKeepAll; ///< Flag indicating to keep all info in tree | |
220 | Int_t fkNvtxContribCut; ///< Number of cuts in vertex contributors | |
221 | TObjArray* fTriggerClasses; ///< full trigger class name | |
222 | AliCFManager* fCFManager; //!< Pointer to the CF manager | |
223 | TList* fHistoList; //!< List of histograms for data | |
224 | TList* fHistoListMC; //!< List of histograms for MC | |
225 | TList* fHistoListQA; //!< List of QA histos | |
226 | TTree* fTreeSingleMu; //!< Optional output Tree | |
227 | Float_t* fVarFloat; //!< Reconstructed parameters float | |
228 | Int_t* fVarInt; //!< Reconstructed parameters int | |
229 | Char_t** fVarChar; //!< Reconstructed parameters string | |
230 | UInt_t* fVarUInt; //!< Reconstructed parameters Uint | |
231 | Float_t* fVarFloatMC; //!< MC parameters float | |
232 | Int_t* fVarIntMC; //!< MC parameters int | |
233 | TMap* fAuxObjects; //!< Map of vertex distribution per run | |
234 | TString fDebugString; //!< Debug string | |
235 | ||
236 | ClassDef(AliAnalysisTaskSingleMu, 2); // Single muon analysis | |
237 | }; | |
238 | ||
239 | #endif |