2 // Calculate the multiplicity in the forward regions event-by-event
14 #include "AliForwardMultiplicityTask.h"
15 #include "AliTriggerAnalysis.h"
16 #include "AliPhysicsSelection.h"
18 #include "AliESDEvent.h"
19 #include "AliAODHandler.h"
20 #include "AliMultiplicity.h"
21 #include "AliInputEventHandler.h"
22 #include "AliForwardCorrectionManager.h"
23 #include "AliAnalysisManager.h"
26 #include <TDirectory.h>
31 //====================================================================
32 AliForwardMultiplicityTask::AliForwardMultiplicityTask()
33 : AliForwardMultiplicityBase(),
45 DGUARD(fDebug, 3,"Default CTOR of AliForwardMultiplicityTask");
48 //____________________________________________________________________
49 AliForwardMultiplicityTask::AliForwardMultiplicityTask(const char* name)
50 : AliForwardMultiplicityBase(name),
52 fEventInspector("event"),
53 fSharingFilter("sharing"),
54 fDensityCalculator("density"),
55 fCorrections("corrections"),
56 fHistCollector("collector"),
57 fEventPlaneFinder("eventplane")
65 DGUARD(fDebug, 3,"named CTOR of AliForwardMultiplicityTask: %s", name);
68 //____________________________________________________________________
69 AliForwardMultiplicityTask::AliForwardMultiplicityTask(const AliForwardMultiplicityTask& o)
70 : AliForwardMultiplicityBase(o),
72 fEventInspector(o.fEventInspector),
73 fSharingFilter(o.fSharingFilter),
74 fDensityCalculator(o.fDensityCalculator),
75 fCorrections(o.fCorrections),
76 fHistCollector(o.fHistCollector),
77 fEventPlaneFinder(o.fEventPlaneFinder)
84 // o Object to copy from
86 DGUARD(fDebug, 3,"Copy CTOR of AliForwardMultiplicityTask");
89 //____________________________________________________________________
90 AliForwardMultiplicityTask&
91 AliForwardMultiplicityTask::operator=(const AliForwardMultiplicityTask& o)
94 // Assignment operator
97 // o Object to assign from
100 // Reference to this object
102 DGUARD(fDebug,3,"Assignment to AliForwardMultiplicityTask");
103 if (&o == this) return *this;
104 AliForwardMultiplicityBase::operator=(o);
106 fEventInspector = o.fEventInspector;
107 fSharingFilter = o.fSharingFilter;
108 fDensityCalculator = o.fDensityCalculator;
109 fCorrections = o.fCorrections;
110 fHistCollector = o.fHistCollector;
111 fEventPlaneFinder = o.fEventPlaneFinder;
116 //____________________________________________________________________
118 AliForwardMultiplicityTask::UserExec(Option_t*)
121 // Process each event
127 DGUARD(fDebug,1,"Process the input event");
128 // static Int_t cnt = 0;
130 // Get the input data
131 AliESDEvent* esd = GetESDEvent();
140 Bool_t lowFlux = kFALSE;
145 UShort_t nClusters = 0;
146 UInt_t found = fEventInspector.Process(esd, triggers, lowFlux,
147 ivz, ip, cent, nClusters);
149 if (found & AliFMDEventInspector::kNoEvent) return;
150 if (found & AliFMDEventInspector::kNoTriggers) return;
152 // Set trigger bits, and mark this event for storage
153 fAODFMD.SetTriggerBits(triggers);
154 fAODFMD.SetSNN(fEventInspector.GetEnergy());
155 fAODFMD.SetSystem(fEventInspector.GetCollisionSystem());
156 fAODFMD.SetCentrality(cent);
157 fAODFMD.SetNClusters(nClusters);
160 if (found & AliFMDEventInspector::kNoSPD) return;
161 if (found & AliFMDEventInspector::kNoFMD) return;
162 if (found & AliFMDEventInspector::kNoVertex) return;
164 if (triggers & AliAODForwardMult::kPileUp) return;
166 fAODFMD.SetIpZ(ip.Z());
168 if (found & AliFMDEventInspector::kBadVertex) return;
170 // We we do not want to use low flux specific code, we disable it here.
171 if (!fEnableLowFlux) lowFlux = false;
174 AliESDFMD* esdFMD = esd->GetFMDData();
175 // // Apply the sharing filter (or hit merging or clustering if you like)
176 if (!fSharingFilter.Filter(*esdFMD, lowFlux, fESDFMD, ip.Z())) {
177 AliWarning("Sharing filter failed!");
181 // Calculate the inclusive charged particle density
182 if (!fDensityCalculator.Calculate(fESDFMD, fHistos, lowFlux, cent, ip)) {
183 // if (!fDensityCalculator.Calculate(*esdFMD, fHistos, ivz, lowFlux)) {
184 AliWarning("Density calculator failed!");
188 if (fEventInspector.GetCollisionSystem() == AliFMDEventInspector::kPbPb) {
189 if (!fEventPlaneFinder.FindEventplane(esd, fAODEP,
190 &(fAODFMD.GetHistogram()), &fHistos))
191 AliWarning("Eventplane finder failed!");
194 // Do the secondary and other corrections.
195 if (!fCorrections.Correct(fHistos, ivz)) {
196 AliWarning("Corrections failed");
200 if (!fHistCollector.Collect(fHistos, fRingSums,
201 ivz, fAODFMD.GetHistogram(),
202 fAODFMD.GetCentrality())) {
203 AliWarning("Histogram collector failed");
207 if (fAODFMD.IsTriggerBits(AliAODForwardMult::kInel))
208 fHData->Add(&(fAODFMD.GetHistogram()));
213 //____________________________________________________________________
215 AliForwardMultiplicityTask::FinishTaskOutput()
218 Warning("FinishTaskOutput", "No list defined");
223 AliAnalysisTaskSE::FinishTaskOutput();