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