]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/muon/AliAnalysisTaskSingleMu.h
Transition PWG3 --> PWGHF
[u/mrichter/AliRoot.git] / PWG / muon / AliAnalysisTaskSingleMu.h
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