2 // Calculate the FMD eventplane
8 // - AnalysisResults.root
15 #include "AliAnalysisManager.h"
16 #include "AliFMDEventPlaneTask.h"
17 #include "AliAODHandler.h"
18 #include "AliAODInputHandler.h"
19 #include "AliAODForwardMult.h"
20 #include "AliAODEvent.h"
21 #include "AliAODForwardEP.h"
23 ClassImp(AliFMDEventPlaneTask)
28 AliFMDEventPlaneTask::AliFMDEventPlaneTask()
29 : AliAnalysisTaskSE(),
30 fSumList(0), // Sum list
31 fOutputList(0), // Output list
32 fAOD(0), // AOD input event
34 fEventPlaneFinder(), // EP finder
35 fZvertex(1111), // Z vertex
36 fCent(-1), // Centrality
37 fHistCent(), // Diagnostics histogram
38 fHistVertexSel(), // Diagnostics histogram
39 fHistVertexAll() // Diagnostics histogram
42 // Default constructor
45 //_____________________________________________________________________
46 AliFMDEventPlaneTask::AliFMDEventPlaneTask(const char* name)
47 : AliAnalysisTaskSE(name),
48 fSumList(0), // Sum list
49 fOutputList(0), // Output list
50 fAOD(0), // AOD input event
52 fEventPlaneFinder("eventPlane"), // EP finder
53 fZvertex(1111), // Z vertex
54 fCent(-1), // Centrality
55 fHistCent(0), // Diagnostics histogram
56 fHistVertexSel(0), // Diagnostics histogram
57 fHistVertexAll(0) // Diagnostics histogram
67 DefineOutput(1, TList::Class());
68 DefineOutput(2, TList::Class());
71 //_____________________________________________________________________
72 AliFMDEventPlaneTask::AliFMDEventPlaneTask(const AliFMDEventPlaneTask& o)
73 : AliAnalysisTaskSE(o),
74 fSumList(o.fSumList), // Sumlist
75 fOutputList(o.fOutputList), // Output list
76 fAOD(o.fAOD), // AOD input event
77 fMC(o.fMC), // MC flag
78 fEventPlaneFinder(o.fEventPlaneFinder), // EP finder
79 fZvertex(o.fZvertex), // Z vertex
80 fCent(o.fCent), // Centrality
81 fHistCent(o.fHistCent), // Diagnostics histogram
82 fHistVertexSel(o.fHistVertexSel), // Diagnostics histogram
83 fHistVertexAll(o.fHistVertexAll) // Diagnostics histogram
89 // o Object to copy from
92 //_____________________________________________________________________
94 AliFMDEventPlaneTask::operator=(const AliFMDEventPlaneTask& o)
97 // Assignment operator
99 if (&o == this) return *this;
100 fSumList = o.fSumList;
101 fOutputList = o.fOutputList;
104 fEventPlaneFinder = o.fEventPlaneFinder;
105 fZvertex = o.fZvertex;
107 fHistCent = o.fHistCent;
108 fHistVertexSel = o.fHistVertexSel;
109 fHistVertexAll = o.fHistVertexAll;
113 //_____________________________________________________________________
114 void AliFMDEventPlaneTask::UserCreateOutputObjects()
117 // Create output objects
120 fSumList = new TList();
121 fSumList->SetName("Sums");
122 fSumList->SetOwner();
124 // Diagnostics histograms
125 fHistCent = new TH1D("hCent", "Centralities", 100, 0, 100);
126 fHistVertexSel = new TH1D("hVertexSel", "Selectec vertices", 40, -20, 20);
127 fHistVertexAll = new TH1D("hVertexAll", "All vertices", 40, -20, 20);
129 fSumList->Add(fHistCent);
130 fSumList->Add(fHistVertexSel);
131 fSumList->Add(fHistVertexAll);
133 // Init of EventPlaneFinder
134 TAxis* pe = new TAxis(200, -4., 6.);
135 fEventPlaneFinder.DefineOutput(fSumList);
136 fEventPlaneFinder.Init(*pe);
138 PostData(1, fSumList);
141 //_____________________________________________________________________
142 void AliFMDEventPlaneTask::UserExec(Option_t */*option*/)
151 // Reset data members
156 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
159 AliAODForwardMult* aodfmult = static_cast<AliAODForwardMult*>(fAOD->FindListObject("Forward"));
161 if (!aodfmult) return;
162 if (!AODCheck(aodfmult)) return;
164 if (fAOD->GetRunNumber() != fEventPlaneFinder.GetRunNumber())
165 fEventPlaneFinder.SetRunNumber(fAOD->GetRunNumber());
167 AliAODForwardEP aodep;
168 TH2D fmdHist = aodfmult->GetHistogram();
170 fEventPlaneFinder.FindEventplane(fAOD, aodep, &fmdHist, 0);
172 PostData(1, fSumList);
175 //_____________________________________________________________________
176 void AliFMDEventPlaneTask::Terminate(Option_t */*option*/)
179 // Terminate - Called after all events
185 // Reinitiate lists if Terminate is called separately!
186 fSumList = dynamic_cast<TList*> (GetOutputData(1));
188 AliError("Could not retrieve TList fSumList");
193 fOutputList = new TList();
194 fOutputList->SetName("Results");
195 fOutputList->SetOwner();
197 // Calculations can be done here: Currently there are none
199 PostData(2, fOutputList);
202 // _____________________________________________________________________
203 Bool_t AliFMDEventPlaneTask::AODCheck(const AliAODForwardMult* aodfm)
206 // Function to check that and AOD event meets the cuts
209 // AliAODForwardMult: forward mult object with trigger and vertex info
212 if (!aodfm->IsTriggerBits(AliAODForwardMult::kOffline)) return kFALSE;
214 fCent = (Double_t)aodfm->GetCentrality();
215 if (0. >= fCent || fCent >= 80.) return kFALSE;
216 fHistCent->Fill(fCent);
218 fZvertex = aodfm->GetIpZ();
219 fHistVertexAll->Fill(fZvertex);
220 if (TMath::Abs(fZvertex) >= 10.) return kFALSE;
221 fHistVertexSel->Fill(fZvertex);
226 //_____________________________________________________________________