]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ANALYSIS/AliCentralitySelectionTask.cxx
Coverity
[u/mrichter/AliRoot.git] / ANALYSIS / AliCentralitySelectionTask.cxx
CommitLineData
a540a9d3 1/**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16//*****************************************************
17// Class AliCentralitySelectionTask
18// Class to analyze determine centrality
19// author: Alberica Toia
20//*****************************************************
21
22#include "AliCentralitySelectionTask.h"
23
24#include <TTree.h>
25#include <TList.h>
26#include <TH1F.h>
27#include <TH2F.h>
28#include <TF1.h>
29#include <TProfile.h>
30#include <TFile.h>
31#include <TObjString.h>
32#include <TString.h>
33#include <TCanvas.h>
34#include <TROOT.h>
35#include <TDirectory.h>
36#include <TSystem.h>
37#include <iostream>
38
39#include "AliAnalysisManager.h"
136f0a9b 40#include "AliHeader.h"
a540a9d3 41#include "AliVEvent.h"
42#include "AliESD.h"
43#include "AliESDEvent.h"
44#include "AliESDHeader.h"
45#include "AliESDInputHandler.h"
46#include "AliESDZDC.h"
47#include "AliESDFMD.h"
9448ffd1 48#include "AliESDTZERO.h"
a540a9d3 49#include "AliESDVZERO.h"
a540a9d3 50#include "AliESDtrackCuts.h"
136f0a9b 51#include "AliESDVertex.h"
52#include "AliCentrality.h"
a43ed687 53#include "AliOADBCentrality.h"
54#include "AliOADBContainer.h"
a540a9d3 55#include "AliMultiplicity.h"
56#include "AliAODHandler.h"
136f0a9b 57#include "AliAODHeader.h"
a540a9d3 58#include "AliAODEvent.h"
a540a9d3 59#include "AliAODVertex.h"
136f0a9b 60#include "AliAODVZERO.h"
61#include "AliAODTracklets.h"
a540a9d3 62#include "AliAODMCHeader.h"
a540a9d3 63#include "AliMCEventHandler.h"
136f0a9b 64#include "AliMCEvent.h"
65#include "AliAODMCParticle.h"
a540a9d3 66#include "AliMCParticle.h"
67#include "AliStack.h"
a540a9d3 68#include "AliAnalysisTaskSE.h"
69#include "AliGenEventHeader.h"
70#include "AliGenHijingEventHeader.h"
71#include "AliPhysicsSelectionTask.h"
72#include "AliPhysicsSelection.h"
73#include "AliBackgroundSelection.h"
74#include "AliESDUtils.h"
75
76ClassImp(AliCentralitySelectionTask)
77
78
79//________________________________________________________________________
80AliCentralitySelectionTask::AliCentralitySelectionTask():
81AliAnalysisTaskSE(),
a540a9d3 82 fAnalysisInput("ESD"),
83 fIsMCInput(kFALSE),
a121a512 84 fPass(0),
a540a9d3 85 fCurrentRun(-1),
a540a9d3 86 fUseScaling(0),
d015c169 87 fUseCleaning(0),
a43ed687 88 fV0MScaleFactor(0),
89 fSPDScaleFactor(0),
90 fTPCScaleFactor(0),
91 fV0MScaleFactorMC(0),
92 fV0MSPDOutlierPar0(0),
93 fV0MSPDOutlierPar1(0),
94 fV0MTPCOutlierPar0(0),
95 fV0MTPCOutlierPar1(0),
96 fV0MSPDSigmaOutlierPar0(0),
97 fV0MSPDSigmaOutlierPar1(0),
98 fV0MSPDSigmaOutlierPar2(0),
99 fV0MTPCSigmaOutlierPar0(0),
100 fV0MTPCSigmaOutlierPar1(0),
101 fV0MTPCSigmaOutlierPar2(0),
102 fV0MZDCOutlierPar0(0),
103 fV0MZDCOutlierPar1(0),
104 fV0MZDCEcalOutlierPar0(0),
105 fV0MZDCEcalOutlierPar1(0),
a540a9d3 106 fTrackCuts(0),
107 fZVCut(10),
108 fOutliersCut(5),
407bd85b 109 fQuality(999),
4fced115 110 fCVHN(0),
111 fCVLN(0),
0caaf699 112 fCVHNbit(0),
113 fCVLNbit(0),
9448ffd1 114 fCCENT(0),
115 fCSEMI(0),
116 fCCENTbit(0),
117 fCSEMIbit(0),
624cda23 118 fIsSelected(0),
a540a9d3 119 fCentV0M(0),
120 fCentFMD(0),
121 fCentTRK(0),
122 fCentTKL(0),
123 fCentCL0(0),
124 fCentCL1(0),
125 fCentV0MvsFMD(0),
126 fCentTKLvsV0M(0),
127 fCentZEMvsZDC(0),
128 fHtempV0M(0),
129 fHtempFMD(0),
130 fHtempTRK(0),
131 fHtempTKL(0),
132 fHtempCL0(0),
133 fHtempCL1(0),
134 fHtempV0MvsFMD(0),
135 fHtempTKLvsV0M(0),
136 fHtempZEMvsZDC(0),
137 fOutputList(0),
138 fHOutCentV0M (0),
4fced115 139 fHOutCentV0M_CVHN(0),
140 fHOutCentV0M_CVLN(0),
84bbff84 141 fHOutCentV0M_CVHNinMB(0),
142 fHOutCentV0M_CVLNinMB(0),
9448ffd1 143 fHOutCentV0M_CCENT(0),
144 fHOutCentV0M_CSEMI(0),
145 fHOutCentV0M_CCENTinMB(0),
146 fHOutCentV0M_CSEMIinMB(0),
a540a9d3 147 fHOutCentFMD (0),
148 fHOutCentTRK (0),
149 fHOutCentTKL (0),
150 fHOutCentCL0 (0),
151 fHOutCentCL1 (0),
152 fHOutCentV0MvsFMD(0),
153 fHOutCentTKLvsV0M(0),
154 fHOutCentZEMvsZDC(0),
9138a60c 155 fHOutCentV0MvsCentCL1(0),
156 fHOutCentV0MvsCentTRK(0),
157 fHOutCentTRKvsCentCL1(0),
980d6ad3 158 fHOutCentV0MvsCentZDC(0),
a540a9d3 159 fHOutMultV0M(0),
a43ed687 160 fHOutMultV0O(0),
a540a9d3 161 fHOutMultFMD(0),
162 fHOutMultTRK(0),
163 fHOutMultTKL(0),
164 fHOutMultCL0(0),
165 fHOutMultCL1(0),
31200bdf 166 fHOutMultV0MvsZDN(0),
167 fHOutMultZEMvsZDN(0),
a540a9d3 168 fHOutMultV0MvsZDC(0),
169 fHOutMultZEMvsZDC(0),
39bbe018 170 fHOutMultZEMvsZDCw(0),
a540a9d3 171 fHOutMultV0MvsCL1(0),
172 fHOutMultV0MvsTRK(0),
173 fHOutMultTRKvsCL1(0),
a43ed687 174 fHOutMultV0MvsV0O(0),
175 fHOutMultV0OvsCL1(0),
176 fHOutMultV0OvsTRK(0),
04341115 177 fHOutCentV0Mqual1(0),
178 fHOutCentTRKqual1(0),
179 fHOutCentCL1qual1(0),
79d4544b 180 fHOutMultV0MvsCL1qual1(0),
181 fHOutMultV0MvsTRKqual1(0),
182 fHOutMultTRKvsCL1qual1(0),
04341115 183 fHOutCentV0Mqual2(0),
184 fHOutCentTRKqual2(0),
185 fHOutCentCL1qual2(0),
79d4544b 186 fHOutMultV0MvsCL1qual2(0),
187 fHOutMultV0MvsTRKqual2(0),
188 fHOutMultTRKvsCL1qual2(0),
a540a9d3 189 fHOutQuality(0),
9448ffd1 190 fHOutVertex(0),
191 fHOutVertexT0(0)
a540a9d3 192{
193 // Default constructor
194 AliInfo("Centrality Selection enabled.");
a43ed687 195
a540a9d3 196 fUseScaling=kTRUE;
d015c169 197 fUseCleaning=kTRUE;
9448ffd1 198 fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO.,AliESDTZERO."
a43ed687 199 ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
a540a9d3 200}
201
202//________________________________________________________________________
203AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
204 AliAnalysisTaskSE(name),
a540a9d3 205 fAnalysisInput("ESD"),
206 fIsMCInput(kFALSE),
a121a512 207 fPass(0),
a540a9d3 208 fCurrentRun(-1),
a540a9d3 209 fUseScaling(0),
d015c169 210 fUseCleaning(0),
a43ed687 211 fV0MScaleFactor(0),
212 fSPDScaleFactor(0),
213 fTPCScaleFactor(0),
214 fV0MScaleFactorMC(0),
215 fV0MSPDOutlierPar0(0),
216 fV0MSPDOutlierPar1(0),
217 fV0MTPCOutlierPar0(0),
218 fV0MTPCOutlierPar1(0),
219 fV0MSPDSigmaOutlierPar0(0),
220 fV0MSPDSigmaOutlierPar1(0),
221 fV0MSPDSigmaOutlierPar2(0),
222 fV0MTPCSigmaOutlierPar0(0),
223 fV0MTPCSigmaOutlierPar1(0),
4fced115 224 fV0MTPCSigmaOutlierPar2(0),
a43ed687 225 fV0MZDCOutlierPar0(0),
226 fV0MZDCOutlierPar1(0),
227 fV0MZDCEcalOutlierPar0(0),
228 fV0MZDCEcalOutlierPar1(0),
a540a9d3 229 fTrackCuts(0),
230 fZVCut(10),
231 fOutliersCut(5),
407bd85b 232 fQuality(999),
4fced115 233 fCVHN(0),
234 fCVLN(0),
0caaf699 235 fCVHNbit(0),
236 fCVLNbit(0),
9448ffd1 237 fCCENT(0),
238 fCSEMI(0),
239 fCCENTbit(0),
240 fCSEMIbit(0),
624cda23 241 fIsSelected(0),
a540a9d3 242 fCentV0M(0),
243 fCentFMD(0),
244 fCentTRK(0),
245 fCentTKL(0),
246 fCentCL0(0),
247 fCentCL1(0),
248 fCentV0MvsFMD(0),
249 fCentTKLvsV0M(0),
250 fCentZEMvsZDC(0),
251 fHtempV0M(0),
252 fHtempFMD(0),
253 fHtempTRK(0),
254 fHtempTKL(0),
255 fHtempCL0(0),
256 fHtempCL1(0),
257 fHtempV0MvsFMD(0),
258 fHtempTKLvsV0M(0),
259 fHtempZEMvsZDC(0),
260 fOutputList(0),
261 fHOutCentV0M (0),
4fced115 262 fHOutCentV0M_CVHN(0),
263 fHOutCentV0M_CVLN(0),
84bbff84 264 fHOutCentV0M_CVHNinMB(0),
265 fHOutCentV0M_CVLNinMB(0),
9448ffd1 266 fHOutCentV0M_CCENT(0),
267 fHOutCentV0M_CSEMI(0),
268 fHOutCentV0M_CCENTinMB(0),
269 fHOutCentV0M_CSEMIinMB(0),
a540a9d3 270 fHOutCentFMD (0),
271 fHOutCentTRK (0),
272 fHOutCentTKL (0),
273 fHOutCentCL0 (0),
274 fHOutCentCL1 (0),
275 fHOutCentV0MvsFMD(0),
276 fHOutCentTKLvsV0M(0),
277 fHOutCentZEMvsZDC(0),
9138a60c 278 fHOutCentV0MvsCentCL1(0),
279 fHOutCentV0MvsCentTRK(0),
280 fHOutCentTRKvsCentCL1(0),
980d6ad3 281 fHOutCentV0MvsCentZDC(0),
a540a9d3 282 fHOutMultV0M(0),
a43ed687 283 fHOutMultV0O(0),
a540a9d3 284 fHOutMultFMD(0),
285 fHOutMultTRK(0),
286 fHOutMultTKL(0),
287 fHOutMultCL0(0),
288 fHOutMultCL1(0),
31200bdf 289 fHOutMultV0MvsZDN(0),
290 fHOutMultZEMvsZDN(0),
a540a9d3 291 fHOutMultV0MvsZDC(0),
292 fHOutMultZEMvsZDC(0),
39bbe018 293 fHOutMultZEMvsZDCw(0),
a540a9d3 294 fHOutMultV0MvsCL1(0),
295 fHOutMultV0MvsTRK(0),
296 fHOutMultTRKvsCL1(0),
a43ed687 297 fHOutMultV0MvsV0O(0),
298 fHOutMultV0OvsCL1(0),
299 fHOutMultV0OvsTRK(0),
04341115 300 fHOutCentV0Mqual1(0),
301 fHOutCentTRKqual1(0),
302 fHOutCentCL1qual1(0),
79d4544b 303 fHOutMultV0MvsCL1qual1(0),
304 fHOutMultV0MvsTRKqual1(0),
305 fHOutMultTRKvsCL1qual1(0),
04341115 306 fHOutCentV0Mqual2(0),
307 fHOutCentTRKqual2(0),
308 fHOutCentCL1qual2(0),
79d4544b 309 fHOutMultV0MvsCL1qual2(0),
310 fHOutMultV0MvsTRKqual2(0),
311 fHOutMultTRKvsCL1qual2(0),
a540a9d3 312 fHOutQuality(0),
9448ffd1 313 fHOutVertex(0),
314 fHOutVertexT0(0)
a540a9d3 315{
a43ed687 316 // Default constructor
a540a9d3 317 AliInfo("Centrality Selection enabled.");
318 DefineOutput(1, TList::Class());
a540a9d3 319 fUseScaling=kTRUE;
d015c169 320 fUseCleaning=kTRUE;
9448ffd1 321 fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO.,AliESDTZERO."
a43ed687 322 ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
a540a9d3 323}
324
325//________________________________________________________________________
326AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
327{
328 // Assignment operator
329 if (this!=&c) {
330 AliAnalysisTaskSE::operator=(c);
331 }
332 return *this;
333}
334
335//________________________________________________________________________
336AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
337 AliAnalysisTaskSE(ana),
a540a9d3 338 fAnalysisInput(ana.fDebug),
339 fIsMCInput(ana.fIsMCInput),
a121a512 340 fPass(ana.fPass),
a540a9d3 341 fCurrentRun(ana.fCurrentRun),
a540a9d3 342 fUseScaling(ana.fUseScaling),
d015c169 343 fUseCleaning(ana.fUseCleaning),
a43ed687 344 fV0MScaleFactor(ana.fV0MScaleFactor),
345 fSPDScaleFactor(ana.fSPDScaleFactor),
346 fTPCScaleFactor(ana.fTPCScaleFactor),
347 fV0MScaleFactorMC(ana.fV0MScaleFactorMC),
348 fV0MSPDOutlierPar0(ana.fV0MSPDOutlierPar0),
349 fV0MSPDOutlierPar1(ana.fV0MSPDOutlierPar1),
350 fV0MTPCOutlierPar0(ana.fV0MTPCOutlierPar0),
351 fV0MTPCOutlierPar1(ana.fV0MTPCOutlierPar1),
352 fV0MSPDSigmaOutlierPar0(ana.fV0MSPDSigmaOutlierPar0),
353 fV0MSPDSigmaOutlierPar1(ana.fV0MSPDSigmaOutlierPar1),
354 fV0MSPDSigmaOutlierPar2(ana.fV0MSPDSigmaOutlierPar2),
355 fV0MTPCSigmaOutlierPar0(ana.fV0MTPCSigmaOutlierPar0),
356 fV0MTPCSigmaOutlierPar1(ana.fV0MTPCSigmaOutlierPar1),
4fced115 357 fV0MTPCSigmaOutlierPar2(ana.fV0MTPCSigmaOutlierPar2),
a43ed687 358 fV0MZDCOutlierPar0(ana.fV0MZDCOutlierPar0),
359 fV0MZDCOutlierPar1(ana.fV0MZDCOutlierPar1),
360 fV0MZDCEcalOutlierPar0(ana.fV0MZDCEcalOutlierPar0),
361 fV0MZDCEcalOutlierPar1(ana.fV0MZDCEcalOutlierPar1),
a540a9d3 362 fTrackCuts(ana.fTrackCuts),
363 fZVCut(ana.fZVCut),
364 fOutliersCut(ana.fOutliersCut),
365 fQuality(ana.fQuality),
4fced115 366 fCVHN(ana.fCVHN),
367 fCVLN(ana.fCVLN),
0caaf699 368 fCVHNbit(ana.fCVHNbit),
369 fCVLNbit(ana.fCVLNbit),
9448ffd1 370 fCCENT(ana.fCCENT),
371 fCSEMI(ana.fCSEMI),
372 fCCENTbit(ana.fCCENTbit),
373 fCSEMIbit(ana.fCSEMIbit),
624cda23 374 fIsSelected(ana.fIsSelected),
a540a9d3 375 fCentV0M(ana.fCentV0M),
376 fCentFMD(ana.fCentFMD),
377 fCentTRK(ana.fCentTRK),
378 fCentTKL(ana.fCentTKL),
379 fCentCL0(ana.fCentCL0),
380 fCentCL1(ana.fCentCL1),
381 fCentV0MvsFMD(ana.fCentV0MvsFMD),
382 fCentTKLvsV0M(ana.fCentTKLvsV0M),
383 fCentZEMvsZDC(ana.fCentZEMvsZDC),
384 fHtempV0M(ana.fHtempV0M),
385 fHtempFMD(ana.fHtempFMD),
386 fHtempTRK(ana.fHtempTRK),
387 fHtempTKL(ana.fHtempTKL),
388 fHtempCL0(ana.fHtempCL0),
389 fHtempCL1(ana.fHtempCL1),
390 fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
391 fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
392 fHtempZEMvsZDC(ana.fHtempZEMvsZDC),
393 fOutputList(ana.fOutputList),
394 fHOutCentV0M (ana.fHOutCentV0M ),
4fced115 395 fHOutCentV0M_CVHN(ana.fHOutCentV0M_CVHN),
396 fHOutCentV0M_CVLN(ana.fHOutCentV0M_CVLN),
84bbff84 397 fHOutCentV0M_CVHNinMB(ana.fHOutCentV0M_CVHNinMB),
398 fHOutCentV0M_CVLNinMB(ana.fHOutCentV0M_CVLNinMB),
9448ffd1 399 fHOutCentV0M_CCENT(ana.fHOutCentV0M_CCENT),
400 fHOutCentV0M_CSEMI(ana.fHOutCentV0M_CSEMI),
401 fHOutCentV0M_CCENTinMB(ana.fHOutCentV0M_CCENTinMB),
402 fHOutCentV0M_CSEMIinMB(ana.fHOutCentV0M_CSEMIinMB),
a540a9d3 403 fHOutCentFMD (ana.fHOutCentFMD ),
404 fHOutCentTRK (ana.fHOutCentTRK ),
405 fHOutCentTKL (ana.fHOutCentTKL ),
406 fHOutCentCL0 (ana.fHOutCentCL0 ),
407 fHOutCentCL1 (ana.fHOutCentCL1 ),
408 fHOutCentV0MvsFMD(ana.fHOutCentV0MvsFMD),
409 fHOutCentTKLvsV0M(ana.fHOutCentTKLvsV0M),
410 fHOutCentZEMvsZDC(ana.fHOutCentZEMvsZDC),
9138a60c 411 fHOutCentV0MvsCentCL1(ana.fHOutCentV0MvsCentCL1),
412 fHOutCentV0MvsCentTRK(ana.fHOutCentV0MvsCentTRK),
413 fHOutCentTRKvsCentCL1(ana.fHOutCentTRKvsCentCL1),
980d6ad3 414 fHOutCentV0MvsCentZDC(ana.fHOutCentV0MvsCentZDC),
a540a9d3 415 fHOutMultV0M(ana.fHOutMultV0M),
a43ed687 416 fHOutMultV0O(ana.fHOutMultV0O),
a540a9d3 417 fHOutMultFMD(ana.fHOutMultFMD),
418 fHOutMultTRK(ana.fHOutMultTRK),
419 fHOutMultTKL(ana.fHOutMultTKL),
420 fHOutMultCL0(ana.fHOutMultCL0),
421 fHOutMultCL1(ana.fHOutMultCL1),
31200bdf 422 fHOutMultV0MvsZDN(ana.fHOutMultV0MvsZDN),
423 fHOutMultZEMvsZDN(ana.fHOutMultZEMvsZDN),
a540a9d3 424 fHOutMultV0MvsZDC(ana.fHOutMultV0MvsZDC),
425 fHOutMultZEMvsZDC(ana.fHOutMultZEMvsZDC),
39bbe018 426 fHOutMultZEMvsZDCw(ana.fHOutMultZEMvsZDCw),
a540a9d3 427 fHOutMultV0MvsCL1(ana.fHOutMultV0MvsCL1),
428 fHOutMultV0MvsTRK(ana.fHOutMultV0MvsTRK),
429 fHOutMultTRKvsCL1(ana.fHOutMultTRKvsCL1),
a43ed687 430 fHOutMultV0MvsV0O(ana.fHOutMultV0MvsV0O),
431 fHOutMultV0OvsCL1(ana.fHOutMultV0OvsCL1),
432 fHOutMultV0OvsTRK(ana.fHOutMultV0OvsTRK),
04341115 433 fHOutCentV0Mqual1(ana.fHOutCentV0Mqual1),
434 fHOutCentTRKqual1(ana.fHOutCentTRKqual1),
435 fHOutCentCL1qual1(ana.fHOutCentCL1qual1),
79d4544b 436 fHOutMultV0MvsCL1qual1(ana.fHOutMultV0MvsCL1qual1),
437 fHOutMultV0MvsTRKqual1(ana.fHOutMultV0MvsTRKqual1),
438 fHOutMultTRKvsCL1qual1(ana.fHOutMultTRKvsCL1qual1),
04341115 439 fHOutCentV0Mqual2(ana.fHOutCentV0Mqual2),
440 fHOutCentTRKqual2(ana.fHOutCentTRKqual2),
441 fHOutCentCL1qual2(ana.fHOutCentCL1qual2),
79d4544b 442 fHOutMultV0MvsCL1qual2(ana.fHOutMultV0MvsCL1qual2),
443 fHOutMultV0MvsTRKqual2(ana.fHOutMultV0MvsTRKqual2),
444 fHOutMultTRKvsCL1qual2(ana.fHOutMultTRKvsCL1qual2),
a540a9d3 445 fHOutQuality(ana.fHOutQuality),
9448ffd1 446 fHOutVertex(ana.fHOutVertex),
447 fHOutVertexT0(ana.fHOutVertexT0)
a540a9d3 448{
449 // Copy Constructor
7ee7a2df 450
a540a9d3 451}
a43ed687 452
a540a9d3 453//________________________________________________________________________
454AliCentralitySelectionTask::~AliCentralitySelectionTask()
455{
456 // Destructor
457 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList;
458 if (fTrackCuts) delete fTrackCuts;
459}
460
461//________________________________________________________________________
462void AliCentralitySelectionTask::UserCreateOutputObjects()
463{
464 // Create the output containers
465 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
466 AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
467
468 fOutputList = new TList();
469 fOutputList->SetOwner();
bab72d34 470 fHOutCentV0M = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",505,0,101);
4fced115 471 fHOutCentV0M_CVHN= new TH1F("fHOutCentV0M_CVHN","fHOutCentV0M_CVHN; Centrality V0",505,0,101);
472 fHOutCentV0M_CVLN= new TH1F("fHOutCentV0M_CVLN","fHOutCentV0M_CVLN; Centrality V0",505,0,101);
84bbff84 473 fHOutCentV0M_CVHNinMB= new TH1F("fHOutCentV0M_CVHNinMB","fHOutCentV0M_CVHN; Centrality V0",505,0,101);
474 fHOutCentV0M_CVLNinMB= new TH1F("fHOutCentV0M_CVLNinMB","fHOutCentV0M_CVLN; Centrality V0",505,0,101);
9448ffd1 475 fHOutCentV0M_CCENT= new TH1F("fHOutCentV0M_CCENT","fHOutCentV0M_CCENT; Centrality V0",505,0,101);
476 fHOutCentV0M_CSEMI= new TH1F("fHOutCentV0M_CSEMI","fHOutCentV0M_CSEMI; Centrality V0",505,0,101);
477 fHOutCentV0M_CCENTinMB= new TH1F("fHOutCentV0M_CCENTinMB","fHOutCentV0M_CCENT; Centrality V0",505,0,101);
478 fHOutCentV0M_CSEMIinMB= new TH1F("fHOutCentV0M_CSEMIinMB","fHOutCentV0M_CSEMI; Centrality V0",505,0,101);
bab72d34 479 fHOutCentFMD = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",505,0,101);
480 fHOutCentTRK = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",505,0,101);
481 fHOutCentTKL = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",505,0,101);
482 fHOutCentCL0 = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",505,0,101);
483 fHOutCentCL1 = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",505,0,101);
484 fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",505,0,101);
485 fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",505,0,101);
486 fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",505,0,101);
980d6ad3 487 fHOutCentV0MvsCentCL1= new TH2F("fHOutCentV0MvsCentCL1","fHOutCentV0MvsCentCL1; Cent V0; Cent SPD",505,0,101,505,0,101);
488 fHOutCentV0MvsCentTRK= new TH2F("fHOutCentV0MvsCentTRK","fHOutCentV0MvsCentTRK; Cent V0; Cent TPC",505,0,101,505,0,101);
489 fHOutCentTRKvsCentCL1= new TH2F("fHOutCentTRKvsCentCL1","fHOutCentTRKvsCentCL1; Cent TPC; Cent SPD",505,0,101,505,0,101);
490 fHOutCentV0MvsCentZDC= new TH2F("fHOutCentV0MvsCentZDC","fHOutCentV0MvsCentZDC; Cent V0; Cent ZDC",505,0,101,505,0,101);
a43ed687 491 fHOutMultV0M = new TH1F("fHOutMultV0M","fHOutMultV0M; Multiplicity V0",25000,0,30000);
14559332 492 fHOutMultV0O = new TH1F("fHOutMultV0O","fHOutMultV0O; Multiplicity V0",40000,0,40000);
a540a9d3 493 fHOutMultFMD = new TH1F("fHOutMultFMD","fHOutMultFMD; Multiplicity FMD",24000,0,24000);
494 fHOutMultTRK = new TH1F("fHOutMultTRK","fHOutMultTRK; Multiplicity TPC",4000,0,4000);
495 fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000);
496 fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000);
497 fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000);
a43ed687 498 fHOutMultV0MvsZDN = new TH2F("fHOutMultV0MvsZDN","fHOutMultV0MvsZDN; Multiplicity V0; Energy ZDC-N",500,0,30000,500,0,180000);
31200bdf 499 fHOutMultZEMvsZDN = new TH2F("fHOutMultZEMvsZDN","fHOutMultZEMvsZDN; Energy ZEM; Energy ZDC-N",500,0,2500,500,0,180000);
a43ed687 500 fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,30000,500,0,200000);
31200bdf 501 fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,200000);
39bbe018 502 fHOutMultZEMvsZDCw = new TH2F("fHOutMultZEMvsZDCw","fHOutMultZEMvsZDCw; Energy ZEM; Energy ZDC (weigthed with V0 percentile)",500,0,2500,500,0,200000);
a43ed687 503 fHOutMultV0MvsCL1 = new TH2F("fHOutMultV0MvsCL1","fHOutMultV0MvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,30000,700,0,7000);
504 fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,30000,400,0,4000);
a540a9d3 505 fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
14559332 506 fHOutMultV0MvsV0O = new TH2F("fHOutMultV0MvsV0O","fHOutMultV0MvsV0O; Multiplicity V0; Multiplicity V0 Online",500,0,30000,500,0,40000);
507 fHOutMultV0OvsCL1 = new TH2F("fHOutMultV0OvsCL1","fHOutMultV0OvsCL1; Multiplicity V0; Multiplicity SPD outer",500,0,40000,700,0,7000);
508 fHOutMultV0OvsTRK = new TH2F("fHOutMultV0OvsTRK","fHOutMultV0OvsTRK; Multiplicity V0; Multiplicity TPC",500,0,40000,400,0,4000);
a43ed687 509 fHOutMultV0MvsV0O = new TH2F("fHOutMultV0MvsV0O","fHOutMultV0MvsV0O; Multiplicity V0; Multiplicity V0 Online",500,0,30000,500,0,30000);
510 fHOutMultV0OvsCL1 = new TH2F("fHOutMultV0OvsCL1","fHOutMultV0OvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,30000,700,0,7000);
511 fHOutMultV0OvsTRK = new TH2F("fHOutMultV0OvsTRK","fHOutMultV0OvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,30000,400,0,4000);
a540a9d3 512
04341115 513 fHOutCentV0Mqual1 = new TH1F("fHOutCentV0M_qual1","fHOutCentV0M_qual1; Centrality V0",505,0,101);
514 fHOutCentTRKqual1 = new TH1F("fHOutCentTRK_qual1","fHOutCentTRK_qual1; Centrality TPC",505,0,101);
515 fHOutCentCL1qual1 = new TH1F("fHOutCentCL1_qual1","fHOutCentCL1_qual1; Centrality SPD outer",505,0,101);
79d4544b 516 fHOutMultV0MvsCL1qual1 = new TH2F("fHOutMultV0MvsCL1_qual1","fHOutMultV0MvsCL1_qual1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
517 fHOutMultV0MvsTRKqual1 = new TH2F("fHOutMultV0MvsTRK_qual1","fHOutMultV0MvsTRK_qual1; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
518 fHOutMultTRKvsCL1qual1 = new TH2F("fHOutMultTRKvsCL1_qual1","fHOutMultTRKvsCL1_qual1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
a540a9d3 519
04341115 520 fHOutCentV0Mqual2 = new TH1F("fHOutCentV0M_qual2","fHOutCentV0M_qual2; Centrality V0",505,0,101);
521 fHOutCentTRKqual2 = new TH1F("fHOutCentTRK_qual2","fHOutCentTRK_qual2; Centrality TPC",505,0,101);
522 fHOutCentCL1qual2 = new TH1F("fHOutCentCL1_qual2","fHOutCentCL1_qual2; Centrality SPD outer",505,0,101);
79d4544b 523 fHOutMultV0MvsCL1qual2 = new TH2F("fHOutMultV0MvsCL1_qual2","fHOutMultV0MvsCL1_qual2; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
524 fHOutMultV0MvsTRKqual2 = new TH2F("fHOutMultV0MvsTRK_qual2","fHOutMultV0MvsTRK_qual2; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
525 fHOutMultTRKvsCL1qual2 = new TH2F("fHOutMultTRKvsCL1_qual2","fHOutMultTRKvsCL1_qual2; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
a540a9d3 526
407bd85b 527 fHOutQuality = new TH1F("fHOutQuality", "fHOutQuality", 100,-0.5,99.5);
a540a9d3 528 fHOutVertex = new TH1F("fHOutVertex", "fHOutVertex", 100,-20,20);
9448ffd1 529 fHOutVertexT0 = new TH1F("fHOutVertexT0", "fHOutVertexT0", 100,-20,20);
a540a9d3 530
531 fOutputList->Add( fHOutCentV0M );
4fced115 532 fOutputList->Add( fHOutCentV0M_CVHN);
533 fOutputList->Add( fHOutCentV0M_CVLN);
84bbff84 534 fOutputList->Add( fHOutCentV0M_CVHNinMB);
535 fOutputList->Add( fHOutCentV0M_CVLNinMB);
9448ffd1 536 fOutputList->Add( fHOutCentV0M_CCENT);
537 fOutputList->Add( fHOutCentV0M_CSEMI);
538 fOutputList->Add( fHOutCentV0M_CCENTinMB);
539 fOutputList->Add( fHOutCentV0M_CSEMIinMB);
a540a9d3 540 fOutputList->Add( fHOutCentFMD );
541 fOutputList->Add( fHOutCentTRK );
542 fOutputList->Add( fHOutCentTKL );
543 fOutputList->Add( fHOutCentCL0 );
544 fOutputList->Add( fHOutCentCL1 );
545 fOutputList->Add( fHOutCentV0MvsFMD);
546 fOutputList->Add( fHOutCentTKLvsV0M);
547 fOutputList->Add( fHOutCentZEMvsZDC);
9138a60c 548 fOutputList->Add( fHOutCentV0MvsCentCL1);
549 fOutputList->Add( fHOutCentV0MvsCentTRK);
550 fOutputList->Add( fHOutCentTRKvsCentCL1);
980d6ad3 551 fOutputList->Add( fHOutCentV0MvsCentZDC);
a540a9d3 552 fOutputList->Add( fHOutMultV0M);
a43ed687 553 fOutputList->Add( fHOutMultV0O);
a540a9d3 554 fOutputList->Add( fHOutMultFMD);
555 fOutputList->Add( fHOutMultTRK);
556 fOutputList->Add( fHOutMultTKL);
557 fOutputList->Add( fHOutMultCL0);
558 fOutputList->Add( fHOutMultCL1);
31200bdf 559 fOutputList->Add( fHOutMultV0MvsZDN);
560 fOutputList->Add( fHOutMultZEMvsZDN);
a540a9d3 561 fOutputList->Add( fHOutMultV0MvsZDC);
562 fOutputList->Add( fHOutMultZEMvsZDC);
39bbe018 563 fOutputList->Add( fHOutMultZEMvsZDCw);
a540a9d3 564 fOutputList->Add( fHOutMultV0MvsCL1);
565 fOutputList->Add( fHOutMultV0MvsTRK);
566 fOutputList->Add( fHOutMultTRKvsCL1);
a43ed687 567 fOutputList->Add( fHOutMultV0MvsV0O);
568 fOutputList->Add( fHOutMultV0OvsCL1);
569 fOutputList->Add( fHOutMultV0OvsTRK);
04341115 570 fOutputList->Add( fHOutCentV0Mqual1 );
571 fOutputList->Add( fHOutCentTRKqual1 );
572 fOutputList->Add( fHOutCentCL1qual1 );
79d4544b 573 fOutputList->Add( fHOutMultV0MvsCL1qual1);
574 fOutputList->Add( fHOutMultV0MvsTRKqual1);
575 fOutputList->Add( fHOutMultTRKvsCL1qual1);
04341115 576 fOutputList->Add( fHOutCentV0Mqual2 );
577 fOutputList->Add( fHOutCentTRKqual2 );
578 fOutputList->Add( fHOutCentCL1qual2 );
79d4544b 579 fOutputList->Add( fHOutMultV0MvsCL1qual2);
580 fOutputList->Add( fHOutMultV0MvsTRKqual2);
581 fOutputList->Add( fHOutMultTRKvsCL1qual2);
a540a9d3 582 fOutputList->Add( fHOutQuality );
583 fOutputList->Add( fHOutVertex );
9448ffd1 584 fOutputList->Add( fHOutVertexT0 );
a540a9d3 585
586 fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
587
588 PostData(1, fOutputList);
589
afb1125b 590 if (fPass==0) AliFatal("Which pass are you analyzing? You should set it via taskCentrality->SetPass(N)");
a540a9d3 591}
592
593//________________________________________________________________________
594void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
595{
596 // Execute analysis for current event:
597 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
a43ed687 598
a540a9d3 599 Float_t zncEnergy = 0.; // ZNC Energy
600 Float_t zpcEnergy = 0.; // ZPC Energy
601 Float_t znaEnergy = 0.; // ZNA Energy
602 Float_t zpaEnergy = 0.; // ZPA Energy
603 Float_t zem1Energy = 0.; // ZEM1 Energy
604 Float_t zem2Energy = 0.; // ZEM2 Energy
cfead5a9 605 Bool_t zdcEnergyCal = kFALSE; // if zdc is calibrated (in pass2)
606
a540a9d3 607 Int_t nTracks = 0; // no. tracks
608 Int_t nTracklets = 0; // no. tracklets
609 Int_t nClusters[6] = {0}; // no. clusters on 6 ITS layers
610 Int_t nChips[2]; // no. chips on 2 SPD layers
611 Float_t spdCorr =0; // corrected spd2 multiplicity
612
613 Float_t multV0A = 0; // multiplicity from V0 reco side A
614 Float_t multV0C = 0; // multiplicity from V0 reco side C
a43ed687 615 Short_t multV0AOnline = 0; // multiplicity from V0 reco side A
616 Short_t multV0COnline = 0; // multiplicity from V0 reco side C
617 Float_t v0Corr = 0; // corrected V0 multiplicity (used for MC)
618
a540a9d3 619 Float_t multFMDA = 0; // multiplicity from FMD on detector A
620 Float_t multFMDC = 0; // multiplicity from FMD on detector C
621
a540a9d3 622 Float_t zvtx =0; // z-vertex SPD
407bd85b 623 Int_t zvtxNcont =0; // contributors to z-vertex SPD
136f0a9b 624
9448ffd1 625 Float_t zvtxT0 =0; // z-vertex T0
626
a43ed687 627
a540a9d3 628 AliCentrality *esdCent = 0;
629
630 if(fAnalysisInput.CompareTo("ESD")==0){
a43ed687 631
a540a9d3 632 AliVEvent* event = InputEvent();
633 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
634 if (!esd) {
a43ed687 635 AliError("No ESD Event");
636 return;
a540a9d3 637 }
a43ed687 638
cb15f505 639 LoadBranches();
a540a9d3 640
a43ed687 641 if (SetupRun(esd)<0) {
642 AliError("Centrality File not available for this run");
643 return;
a540a9d3 644 }
a43ed687 645
a540a9d3 646 esdCent = esd->GetCentrality();
647
648 // ***** V0 info
649 AliESDVZERO* esdV0 = esd->GetVZEROData();
650 multV0A=esdV0->GetMTotV0A();
651 multV0C=esdV0->GetMTotV0C();
a43ed687 652 v0Corr = multV0A+multV0C;
653
654 multV0AOnline=esdV0->GetTriggerChargeA();
655 multV0COnline=esdV0->GetTriggerChargeC();
a540a9d3 656
9448ffd1 657 // ***** T0 info
658 const AliESDTZERO* esdT0 = esd->GetESDTZERO();
659 if (!esdT0)
660 {
661 AliError("AliESDTZERO not available");
662 }
663 Int_t trig=esdT0->GetT0Trig();
664 Bool_t kT0BB = kFALSE;
665 if(trig&1) kT0BB=kTRUE;
666 zvtxT0=esdT0->GetT0zVertex();
667
a540a9d3 668
4fced115 669 // ***** Trigger info
624cda23 670 fIsSelected = ((esdV0->GetV0ADecision()==1) && (esdV0->GetV0CDecision()==1));
4fced115 671 TString trigStr(esd->GetFiredTriggerClasses());
9448ffd1 672
673 fCVHN=kFALSE; fCVLN=kFALSE; fCCENT=kFALSE; fCSEMI=kFALSE;
624cda23 674 if ( (trigStr.Contains("-B-")) && (trigStr.Contains("CVHN")) && (fIsSelected))
675 fCVHN=kTRUE;
676 if ( (trigStr.Contains("-B-")) && (trigStr.Contains("CVLN")) && (fIsSelected))
677 fCVLN=kTRUE;
9448ffd1 678 if ( (trigStr.Contains("-B-")) && (trigStr.Contains("CCENT")) && (fIsSelected))
679 fCCENT=kTRUE;
680 if ( (trigStr.Contains("-B-")) && (trigStr.Contains("CSEMI")) && (fIsSelected))
681 fCSEMI=kTRUE;
682
683 fCVHNbit=kFALSE; fCVLNbit=kFALSE; fCCENTbit=kFALSE; fCSEMIbit=kFALSE;
684 if (esdV0->GetTriggerBits() & (1<<8))
0caaf699 685 fCVHNbit=kTRUE;
686 if (esdV0->GetTriggerBits() & (1<<6))
687 fCVLNbit=kTRUE;
688
9448ffd1 689 if (kT0BB && fCVHNbit)
690 fCCENTbit=kTRUE;
691 if (kT0BB && fCVLNbit)
692 fCSEMIbit=kTRUE;
693
4fced115 694
a540a9d3 695 // ***** Vertex Info
696 const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
697 zvtx = vtxESD->GetZ();
407bd85b 698 zvtxNcont = vtxESD->GetNContributors();
a540a9d3 699
700 // ***** CB info (tracklets, clusters, chips)
701 //nTracks = event->GetNumberOfTracks();
702 nTracks = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1;
703
704 const AliMultiplicity *mult = esd->GetMultiplicity();
705
706 nTracklets = mult->GetNumberOfTracklets();
707
708 for(Int_t ilay=0; ilay<6; ilay++){
709 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
710 }
711
712 for(Int_t ilay=0; ilay<2; ilay++){
713 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
714 }
715
716 spdCorr = AliESDUtils::GetCorrSPD2(nClusters[1],zvtx);
717
718 // ***** FMD info
719 AliESDFMD *fmd = esd->GetFMDData();
720 Float_t totalMultA = 0;
721 Float_t totalMultC = 0;
722 const Float_t fFMDLowCut = 0.4;
a43ed687 723
a540a9d3 724 for(UShort_t det=1;det<=3;det++) {
725 Int_t nRings = (det==1 ? 1 : 2);
726 for (UShort_t ir = 0; ir < nRings; ir++) {
a43ed687 727 Char_t ring = (ir == 0 ? 'I' : 'O');
728 UShort_t nsec = (ir == 0 ? 20 : 40);
729 UShort_t nstr = (ir == 0 ? 512 : 256);
730 for(UShort_t sec =0; sec < nsec; sec++) {
731 for(UShort_t strip = 0; strip < nstr; strip++) {
a540a9d3 732
a43ed687 733 Float_t fmdMult = fmd->Multiplicity(det,ring,sec,strip);
734 if(fmdMult == 0 || fmdMult == AliESDFMD::kInvalidMult) continue;
a540a9d3 735
a43ed687 736 Float_t nParticles=0;
a540a9d3 737
a43ed687 738 if(fmdMult > fFMDLowCut) {
739 nParticles = 1.;
740 }
a540a9d3 741
a43ed687 742 if (det<3) totalMultA = totalMultA + nParticles;
743 else totalMultC = totalMultC + nParticles;
a540a9d3 744
a43ed687 745 }
746 }
a540a9d3 747 }
748 }
749 multFMDA = totalMultA;
750 multFMDC = totalMultC;
a43ed687 751
a540a9d3 752 // ***** ZDC info
753 AliESDZDC *esdZDC = esd->GetESDZDC();
cfead5a9 754 zdcEnergyCal = esdZDC->AliESDZDC::TestBit(AliESDZDC::kEnergyCalibratedSignal);
755 if (zdcEnergyCal) {
756 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
757 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
758 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
759 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
760 } else {
761 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.;
762 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.;
763 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.;
764 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.;
765 }
a540a9d3 766 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.;
767 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.;
a43ed687 768
a540a9d3 769 }
136f0a9b 770
a540a9d3 771 else if(fAnalysisInput.CompareTo("AOD")==0){
772 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
773 // to be implemented
774 printf(" AOD analysis not yet implemented!!!\n\n");
775 return;
776 }
777
d015c169 778 // ***** Scaling for MC
779 if (fIsMCInput) {
780 fUseScaling=kFALSE;
a43ed687 781 v0Corr = Short_t((multV0A+multV0C) * fV0MScaleFactorMC);
d015c169 782 }
a43ed687 783 // ***** Scaling for Data
a540a9d3 784 if (fUseScaling) {
a43ed687 785 v0Corr = Short_t(v0Corr / fV0MScaleFactor);
786 spdCorr = spdCorr / fSPDScaleFactor;
787 nTracks = Int_t(nTracks / fTPCScaleFactor);
a540a9d3 788 }
a540a9d3 789
790 // ***** Centrality Selection
791 if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
792 if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
793 if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
794 if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
795 if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
796 if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
a43ed687 797
a540a9d3 798 if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
799 if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
7ee7a2df 800 if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin(zem1Energy+zem2Energy,zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
a540a9d3 801
a43ed687 802
a540a9d3 803 // ***** Cleaning
d015c169 804 if (fUseCleaning) {
a43ed687 805 fQuality=0;
806
807 // ***** vertex
808 if (TMath::Abs(zvtx)>fZVCut || zvtxNcont<1) fQuality += 1;
809
810 // ***** outliers, skip in case of MC input
811 if (!fIsMCInput) {
812 // **** V0 vs SPD
813 if (IsOutlierV0MSPD(spdCorr, v0Corr, int(fCentV0M))) fQuality += 2;
814 // ***** V0 vs TPC
815 if (IsOutlierV0MTPC(nTracks, v0Corr, int(fCentV0M))) fQuality += 4;
816 // ***** V0 vs ZDC
817 if (IsOutlierV0MZDC((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
818 (zdcEnergyCal==kFALSE) ) fQuality += 8;
819 if (IsOutlierV0MZDCECal((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
820 (zdcEnergyCal==kTRUE) ) fQuality += 8;
821 }
d015c169 822 } else {
a43ed687 823 fQuality = 0;
d015c169 824 }
a540a9d3 825
a43ed687 826
a540a9d3 827 if (esdCent) {
a43ed687 828 esdCent->SetQuality(fQuality);
829 esdCent->SetCentralityV0M(fCentV0M);
830 esdCent->SetCentralityFMD(fCentFMD);
831 esdCent->SetCentralityTRK(fCentTRK);
832 esdCent->SetCentralityTKL(fCentTKL);
833 esdCent->SetCentralityCL0(fCentCL0);
834 esdCent->SetCentralityCL1(fCentCL1);
835 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
836 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
837 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
a540a9d3 838 }
839
4fced115 840 if (fCVHN)
9448ffd1 841 fHOutCentV0M_CVHN->Fill(fCentV0M);
4fced115 842 if (fCVLN)
9448ffd1 843 fHOutCentV0M_CVLN->Fill(fCentV0M);
844 if (fCCENT)
845 fHOutCentV0M_CCENT->Fill(fCentV0M);
846 if (fCSEMI)
847 fHOutCentV0M_CSEMI->Fill(fCentV0M);
848
4402d4dc 849
850 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
851 if (isSelected) { // fill the QA histograms only for MB events!
a540a9d3 852 fHOutQuality->Fill(fQuality);
853 fHOutVertex->Fill(zvtx);
9448ffd1 854 fHOutVertexT0->Fill(zvtxT0);
a43ed687 855
a540a9d3 856 if (fQuality==0) {
857 fHOutCentV0M->Fill(fCentV0M);
84bbff84 858
0caaf699 859 if (fCVHNbit)
84bbff84 860 fHOutCentV0M_CVHNinMB->Fill(fCentV0M);
0caaf699 861 if (fCVLNbit)
84bbff84 862 fHOutCentV0M_CVLNinMB->Fill(fCentV0M);
9448ffd1 863 if (fCCENTbit)
864 fHOutCentV0M_CCENTinMB->Fill(fCentV0M);
865 if (fCSEMIbit)
866 fHOutCentV0M_CSEMIinMB->Fill(fCentV0M);
867
84bbff84 868
a540a9d3 869 fHOutCentFMD->Fill(fCentFMD);
870 fHOutCentTRK->Fill(fCentTRK);
871 fHOutCentTKL->Fill(fCentTKL);
872 fHOutCentCL0->Fill(fCentCL0);
873 fHOutCentCL1->Fill(fCentCL1);
874 fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
875 fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
876 fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
9138a60c 877 fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentCL1);
878 fHOutCentV0MvsCentTRK->Fill(fCentV0M,fCentTRK);
879 fHOutCentTRKvsCentCL1->Fill(fCentTRK,fCentCL1);
39bbe018 880 fHOutCentV0MvsCentZDC->Fill(fCentV0M,fCentZEMvsZDC);
a43ed687 881 fHOutMultV0M->Fill(multV0A+multV0C);
882 fHOutMultV0O->Fill(multV0AOnline+multV0COnline);
883 fHOutMultFMD->Fill(multFMDA+multFMDC);
a540a9d3 884 fHOutMultTRK->Fill(nTracks);
885 fHOutMultTKL->Fill(nTracklets);
886 fHOutMultCL0->Fill(nClusters[0]);
887 fHOutMultCL1->Fill(spdCorr);
79d4544b 888 fHOutMultV0MvsZDN->Fill(v0Corr,(zncEnergy+znaEnergy));
889 fHOutMultZEMvsZDN->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy));
890 fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
891 fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
39bbe018 892 fHOutMultZEMvsZDCw->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy),fCentV0M);
79d4544b 893 fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr);
894 fHOutMultV0MvsTRK->Fill(v0Corr,nTracks);
a540a9d3 895 fHOutMultTRKvsCL1->Fill(nTracks,spdCorr);
a43ed687 896 fHOutMultV0MvsV0O->Fill(v0Corr,(multV0AOnline+multV0COnline));
897 fHOutMultV0OvsCL1->Fill((multV0AOnline+multV0COnline),spdCorr);
898 fHOutMultV0OvsTRK->Fill((multV0AOnline+multV0COnline),nTracks);
79d4544b 899 } else if (fQuality%2 == 0) {
04341115 900 fHOutCentV0Mqual1->Fill(fCentV0M);
901 fHOutCentTRKqual1->Fill(fCentTRK);
902 fHOutCentCL1qual1->Fill(fCentCL1);
79d4544b 903 fHOutMultV0MvsCL1qual1->Fill(v0Corr,spdCorr);
904 fHOutMultV0MvsTRKqual1->Fill(v0Corr,nTracks);
905 fHOutMultTRKvsCL1qual1->Fill(nTracks,spdCorr);
a540a9d3 906 } else {
04341115 907 fHOutCentV0Mqual2->Fill(fCentV0M);
908 fHOutCentTRKqual2->Fill(fCentTRK);
909 fHOutCentCL1qual2->Fill(fCentCL1);
79d4544b 910 fHOutMultV0MvsCL1qual2->Fill(v0Corr,spdCorr);
911 fHOutMultV0MvsTRKqual2->Fill(v0Corr,nTracks);
912 fHOutMultTRKvsCL1qual2->Fill(nTracks,spdCorr);
a540a9d3 913 }
4402d4dc 914 }
a540a9d3 915
916 PostData(1, fOutputList);
917}
a540a9d3 918//________________________________________________________________________
919void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
920{
921 // Terminate analysis
a540a9d3 922}
923//________________________________________________________________________
f690bf48 924Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* const esd)
a540a9d3 925{
926 // Setup files for run
927
928 if (!esd)
929 return -1;
930
931 // check if something to be done
932 if (fCurrentRun == esd->GetRunNumber())
933 return 0;
934 else
935 fCurrentRun = esd->GetRunNumber();
a43ed687 936
937 TString fileName =(Form("%s/COMMON/CENTRALITY/data/centrality.root", AliAnalysisManager::GetOADBPath()));
938 AliInfo(Form("Setup Centrality Selection for run %d with file %s\n",fCurrentRun,fileName.Data()));
939
940 AliOADBContainer *con = new AliOADBContainer("OADB");
941 con->InitFromFile(fileName,"Centrality");
942
943 AliOADBCentrality* centOADB = 0;
944 centOADB = (AliOADBCentrality*)(con->GetObject(fCurrentRun));
945 if (!centOADB) {
946 AliWarning(Form("Centrality OADB does not exist for run %d, using Default \n",fCurrentRun ));
947 centOADB = (AliOADBCentrality*)(con->GetDefaultObject("oadbDefault"));
948 }
949
950 // modes
951 fUseScaling = centOADB->UseScaling();
952 fUseCleaning = centOADB->UseCleaning();
953
954 // cuts
955 fZVCut = centOADB->ZVCut();
956 fOutliersCut = centOADB->OutliersCut();
957
958 // centrality histos
959 fHtempV0M = centOADB->V0hist();
960 fHtempTRK = centOADB->TPChist();
961 fHtempCL1 = centOADB->SPDhist();
962 fHtempZEMvsZDC = centOADB->ZEMvsZDChist();
a540a9d3 963
a43ed687 964 TString path = gSystem->ExpandPathName(fileName.Data());
965 if (!fHtempV0M) AliWarning(Form("Calibration for V0M does not exist in %s", path.Data()));
966 if (!fHtempTRK) AliWarning(Form("Calibration for TRK does not exist in %s", path.Data()));
967 if (!fHtempCL1) AliWarning(Form("Calibration for CL1 does not exist in %s", path.Data()));
968 if (!fHtempZEMvsZDC) AliWarning(Form("Calibration for ZEMvsZDC does not exist in %s", path.Data()));
969
970 // scale factors
971 fV0MScaleFactor = centOADB->V0MScaleFactor();
972 fSPDScaleFactor = centOADB->SPDScaleFactor();
973 fTPCScaleFactor = centOADB->TPCScaleFactor();
974 fV0MScaleFactorMC = centOADB->V0MScaleFactor();
975
976 // outliers parameters
977 fV0MSPDOutlierPar0 = centOADB->V0MSPDOutlierPar0();
978 fV0MSPDOutlierPar1 = centOADB->V0MSPDOutlierPar1();
979 fV0MTPCOutlierPar0 = centOADB->V0MTPCOutlierPar0();
980 fV0MTPCOutlierPar1 = centOADB->V0MTPCOutlierPar1();
981
982 fV0MSPDSigmaOutlierPar0 = centOADB->V0MSPDSigmaOutlierPar0();
983 fV0MSPDSigmaOutlierPar1 = centOADB->V0MSPDSigmaOutlierPar1();
984 fV0MSPDSigmaOutlierPar2 = centOADB->V0MSPDSigmaOutlierPar2();
985 fV0MTPCSigmaOutlierPar0 = centOADB->V0MTPCSigmaOutlierPar0();
986 fV0MTPCSigmaOutlierPar1 = centOADB->V0MTPCSigmaOutlierPar1();
987 fV0MTPCSigmaOutlierPar2 = centOADB->V0MTPCSigmaOutlierPar2();
988
989 fV0MZDCOutlierPar0 = centOADB->V0MZDCOutlierPar0();
990 fV0MZDCOutlierPar1 = centOADB->V0MZDCOutlierPar1();
991 fV0MZDCEcalOutlierPar0 = centOADB->V0MZDCEcalOutlierPar0();
992 fV0MZDCEcalOutlierPar1 = centOADB->V0MZDCEcalOutlierPar1();
993
994
995
a540a9d3 996 return 0;
997}
998
a43ed687 999
1000
a540a9d3 1001//________________________________________________________________________
f690bf48 1002Bool_t AliCentralitySelectionTask::IsOutlierV0MSPD(Float_t spd, Float_t v0, Int_t cent) const
a540a9d3 1003{
a43ed687 1004 // Clean outliers
1005 Float_t val = fV0MSPDOutlierPar0 + fV0MSPDOutlierPar1 * v0;
1006 Float_t spdSigma = fV0MSPDSigmaOutlierPar0 + fV0MSPDSigmaOutlierPar1*cent + fV0MSPDSigmaOutlierPar2*cent*cent;
1007 if ( TMath::Abs(spd-val) > fOutliersCut*spdSigma )
a540a9d3 1008 return kTRUE;
1009 else
1010 return kFALSE;
1011}
1012
1013//________________________________________________________________________
f690bf48 1014Bool_t AliCentralitySelectionTask::IsOutlierV0MTPC(Int_t tracks, Float_t v0, Int_t cent) const
a540a9d3 1015{
a43ed687 1016 // Clean outliers
1017 Float_t val = fV0MTPCOutlierPar0 + fV0MTPCOutlierPar1 * v0;
1018 Float_t tpcSigma = fV0MTPCSigmaOutlierPar0 + fV0MTPCSigmaOutlierPar1*cent + fV0MTPCSigmaOutlierPar2*cent*cent;
1019 if ( TMath::Abs(tracks-val) > fOutliersCut*tpcSigma )
a540a9d3 1020 return kTRUE;
1021 else
1022 return kFALSE;
1023}
1024
1025//________________________________________________________________________
6abef102 1026Bool_t AliCentralitySelectionTask::IsOutlierV0MZDC(Float_t zdc, Float_t v0) const
a540a9d3 1027{
a43ed687 1028 // Clean outliers
1029 Float_t val = fV0MZDCOutlierPar0 + fV0MZDCOutlierPar1 * v0;
6abef102 1030 if (zdc > val)
1031 return kTRUE;
1032 else
a43ed687 1033 return kFALSE;
a540a9d3 1034}
1035
9138a60c 1036//________________________________________________________________________
a43ed687 1037Bool_t AliCentralitySelectionTask::IsOutlierV0MZDCECal(Float_t zdc, Float_t v0) const
9138a60c 1038{
a43ed687 1039 // Clean outliers
1040 Float_t val = fV0MZDCEcalOutlierPar0 + fV0MZDCEcalOutlierPar1 * v0;
1041 if (zdc > val)
1042 return kTRUE;
1043 else
9138a60c 1044 return kFALSE;
1045}
1046
a540a9d3 1047