1 /**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //*****************************************************
17 // Class AliCentralitySelectionTask
18 // Class to analyze determine centrality
19 // author: Alberica Toia
20 //*****************************************************
22 #include "AliCentralitySelectionTask.h"
31 #include <TObjString.h>
35 #include <TDirectory.h>
39 #include "AliAnalysisManager.h"
40 #include "AliHeader.h"
41 #include "AliVEvent.h"
43 #include "AliESDEvent.h"
44 #include "AliESDHeader.h"
45 #include "AliESDInputHandler.h"
46 #include "AliESDZDC.h"
47 #include "AliESDFMD.h"
48 #include "AliESDVZERO.h"
49 #include "AliESDtrackCuts.h"
50 #include "AliESDVertex.h"
51 #include "AliCentrality.h"
52 #include "AliOADBCentrality.h"
53 #include "AliOADBContainer.h"
54 #include "AliMultiplicity.h"
55 #include "AliAODHandler.h"
56 #include "AliAODHeader.h"
57 #include "AliAODEvent.h"
58 #include "AliAODVertex.h"
59 #include "AliAODVZERO.h"
60 #include "AliAODTracklets.h"
61 #include "AliAODMCHeader.h"
62 #include "AliMCEventHandler.h"
63 #include "AliMCEvent.h"
64 #include "AliAODMCParticle.h"
65 #include "AliMCParticle.h"
67 #include "AliAnalysisTaskSE.h"
68 #include "AliGenEventHeader.h"
69 #include "AliGenHijingEventHeader.h"
70 #include "AliPhysicsSelectionTask.h"
71 #include "AliPhysicsSelection.h"
72 #include "AliBackgroundSelection.h"
73 #include "AliESDUtils.h"
75 ClassImp(AliCentralitySelectionTask)
78 //________________________________________________________________________
79 AliCentralitySelectionTask::AliCentralitySelectionTask():
81 fAnalysisInput("ESD"),
91 fV0MSPDOutlierPar0(0),
92 fV0MSPDOutlierPar1(0),
93 fV0MTPCOutlierPar0(0),
94 fV0MTPCOutlierPar1(0),
95 fV0MSPDSigmaOutlierPar0(0),
96 fV0MSPDSigmaOutlierPar1(0),
97 fV0MSPDSigmaOutlierPar2(0),
98 fV0MTPCSigmaOutlierPar0(0),
99 fV0MTPCSigmaOutlierPar1(0),
100 fV0MTPCSigmaOutlierPar2(0),
101 fV0MZDCOutlierPar0(0),
102 fV0MZDCOutlierPar1(0),
103 fV0MZDCEcalOutlierPar0(0),
104 fV0MZDCEcalOutlierPar1(0),
134 fHOutCentV0M_CVHN(0),
135 fHOutCentV0M_CVLN(0),
136 fHOutCentV0M_CVHNinMB(0),
137 fHOutCentV0M_CVLNinMB(0),
143 fHOutCentV0MvsFMD(0),
144 fHOutCentTKLvsV0M(0),
145 fHOutCentZEMvsZDC(0),
146 fHOutCentV0MvsCentCL1(0),
147 fHOutCentV0MvsCentTRK(0),
148 fHOutCentTRKvsCentCL1(0),
149 fHOutCentV0MvsCentZDC(0),
157 fHOutMultV0MvsZDN(0),
158 fHOutMultZEMvsZDN(0),
159 fHOutMultV0MvsZDC(0),
160 fHOutMultZEMvsZDC(0),
161 fHOutMultZEMvsZDCw(0),
162 fHOutMultV0MvsCL1(0),
163 fHOutMultV0MvsTRK(0),
164 fHOutMultTRKvsCL1(0),
165 fHOutMultV0MvsV0O(0),
166 fHOutMultV0OvsCL1(0),
167 fHOutMultV0OvsTRK(0),
168 fHOutCentV0Mqual1(0),
169 fHOutCentTRKqual1(0),
170 fHOutCentCL1qual1(0),
171 fHOutMultV0MvsCL1qual1(0),
172 fHOutMultV0MvsTRKqual1(0),
173 fHOutMultTRKvsCL1qual1(0),
174 fHOutCentV0Mqual2(0),
175 fHOutCentTRKqual2(0),
176 fHOutCentCL1qual2(0),
177 fHOutMultV0MvsCL1qual2(0),
178 fHOutMultV0MvsTRKqual2(0),
179 fHOutMultTRKvsCL1qual2(0),
183 // Default constructor
184 AliInfo("Centrality Selection enabled.");
188 fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO."
189 ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
192 //________________________________________________________________________
193 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
194 AliAnalysisTaskSE(name),
195 fAnalysisInput("ESD"),
204 fV0MScaleFactorMC(0),
205 fV0MSPDOutlierPar0(0),
206 fV0MSPDOutlierPar1(0),
207 fV0MTPCOutlierPar0(0),
208 fV0MTPCOutlierPar1(0),
209 fV0MSPDSigmaOutlierPar0(0),
210 fV0MSPDSigmaOutlierPar1(0),
211 fV0MSPDSigmaOutlierPar2(0),
212 fV0MTPCSigmaOutlierPar0(0),
213 fV0MTPCSigmaOutlierPar1(0),
214 fV0MTPCSigmaOutlierPar2(0),
215 fV0MZDCOutlierPar0(0),
216 fV0MZDCOutlierPar1(0),
217 fV0MZDCEcalOutlierPar0(0),
218 fV0MZDCEcalOutlierPar1(0),
248 fHOutCentV0M_CVHN(0),
249 fHOutCentV0M_CVLN(0),
250 fHOutCentV0M_CVHNinMB(0),
251 fHOutCentV0M_CVLNinMB(0),
257 fHOutCentV0MvsFMD(0),
258 fHOutCentTKLvsV0M(0),
259 fHOutCentZEMvsZDC(0),
260 fHOutCentV0MvsCentCL1(0),
261 fHOutCentV0MvsCentTRK(0),
262 fHOutCentTRKvsCentCL1(0),
263 fHOutCentV0MvsCentZDC(0),
271 fHOutMultV0MvsZDN(0),
272 fHOutMultZEMvsZDN(0),
273 fHOutMultV0MvsZDC(0),
274 fHOutMultZEMvsZDC(0),
275 fHOutMultZEMvsZDCw(0),
276 fHOutMultV0MvsCL1(0),
277 fHOutMultV0MvsTRK(0),
278 fHOutMultTRKvsCL1(0),
279 fHOutMultV0MvsV0O(0),
280 fHOutMultV0OvsCL1(0),
281 fHOutMultV0OvsTRK(0),
282 fHOutCentV0Mqual1(0),
283 fHOutCentTRKqual1(0),
284 fHOutCentCL1qual1(0),
285 fHOutMultV0MvsCL1qual1(0),
286 fHOutMultV0MvsTRKqual1(0),
287 fHOutMultTRKvsCL1qual1(0),
288 fHOutCentV0Mqual2(0),
289 fHOutCentTRKqual2(0),
290 fHOutCentCL1qual2(0),
291 fHOutMultV0MvsCL1qual2(0),
292 fHOutMultV0MvsTRKqual2(0),
293 fHOutMultTRKvsCL1qual2(0),
297 // Default constructor
298 AliInfo("Centrality Selection enabled.");
299 DefineOutput(1, TList::Class());
302 fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO."
303 ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
306 //________________________________________________________________________
307 AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
309 // Assignment operator
311 AliAnalysisTaskSE::operator=(c);
316 //________________________________________________________________________
317 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
318 AliAnalysisTaskSE(ana),
319 fAnalysisInput(ana.fDebug),
320 fIsMCInput(ana.fIsMCInput),
322 fCurrentRun(ana.fCurrentRun),
323 fUseScaling(ana.fUseScaling),
324 fUseCleaning(ana.fUseCleaning),
325 fV0MScaleFactor(ana.fV0MScaleFactor),
326 fSPDScaleFactor(ana.fSPDScaleFactor),
327 fTPCScaleFactor(ana.fTPCScaleFactor),
328 fV0MScaleFactorMC(ana.fV0MScaleFactorMC),
329 fV0MSPDOutlierPar0(ana.fV0MSPDOutlierPar0),
330 fV0MSPDOutlierPar1(ana.fV0MSPDOutlierPar1),
331 fV0MTPCOutlierPar0(ana.fV0MTPCOutlierPar0),
332 fV0MTPCOutlierPar1(ana.fV0MTPCOutlierPar1),
333 fV0MSPDSigmaOutlierPar0(ana.fV0MSPDSigmaOutlierPar0),
334 fV0MSPDSigmaOutlierPar1(ana.fV0MSPDSigmaOutlierPar1),
335 fV0MSPDSigmaOutlierPar2(ana.fV0MSPDSigmaOutlierPar2),
336 fV0MTPCSigmaOutlierPar0(ana.fV0MTPCSigmaOutlierPar0),
337 fV0MTPCSigmaOutlierPar1(ana.fV0MTPCSigmaOutlierPar1),
338 fV0MTPCSigmaOutlierPar2(ana.fV0MTPCSigmaOutlierPar2),
339 fV0MZDCOutlierPar0(ana.fV0MZDCOutlierPar0),
340 fV0MZDCOutlierPar1(ana.fV0MZDCOutlierPar1),
341 fV0MZDCEcalOutlierPar0(ana.fV0MZDCEcalOutlierPar0),
342 fV0MZDCEcalOutlierPar1(ana.fV0MZDCEcalOutlierPar1),
343 fTrackCuts(ana.fTrackCuts),
345 fOutliersCut(ana.fOutliersCut),
346 fQuality(ana.fQuality),
349 fCVHNbit(ana.fCVHNbit),
350 fCVLNbit(ana.fCVLNbit),
351 fIsSelected(ana.fIsSelected),
352 fCentV0M(ana.fCentV0M),
353 fCentFMD(ana.fCentFMD),
354 fCentTRK(ana.fCentTRK),
355 fCentTKL(ana.fCentTKL),
356 fCentCL0(ana.fCentCL0),
357 fCentCL1(ana.fCentCL1),
358 fCentV0MvsFMD(ana.fCentV0MvsFMD),
359 fCentTKLvsV0M(ana.fCentTKLvsV0M),
360 fCentZEMvsZDC(ana.fCentZEMvsZDC),
361 fHtempV0M(ana.fHtempV0M),
362 fHtempFMD(ana.fHtempFMD),
363 fHtempTRK(ana.fHtempTRK),
364 fHtempTKL(ana.fHtempTKL),
365 fHtempCL0(ana.fHtempCL0),
366 fHtempCL1(ana.fHtempCL1),
367 fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
368 fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
369 fHtempZEMvsZDC(ana.fHtempZEMvsZDC),
370 fOutputList(ana.fOutputList),
371 fHOutCentV0M (ana.fHOutCentV0M ),
372 fHOutCentV0M_CVHN(ana.fHOutCentV0M_CVHN),
373 fHOutCentV0M_CVLN(ana.fHOutCentV0M_CVLN),
374 fHOutCentV0M_CVHNinMB(ana.fHOutCentV0M_CVHNinMB),
375 fHOutCentV0M_CVLNinMB(ana.fHOutCentV0M_CVLNinMB),
376 fHOutCentFMD (ana.fHOutCentFMD ),
377 fHOutCentTRK (ana.fHOutCentTRK ),
378 fHOutCentTKL (ana.fHOutCentTKL ),
379 fHOutCentCL0 (ana.fHOutCentCL0 ),
380 fHOutCentCL1 (ana.fHOutCentCL1 ),
381 fHOutCentV0MvsFMD(ana.fHOutCentV0MvsFMD),
382 fHOutCentTKLvsV0M(ana.fHOutCentTKLvsV0M),
383 fHOutCentZEMvsZDC(ana.fHOutCentZEMvsZDC),
384 fHOutCentV0MvsCentCL1(ana.fHOutCentV0MvsCentCL1),
385 fHOutCentV0MvsCentTRK(ana.fHOutCentV0MvsCentTRK),
386 fHOutCentTRKvsCentCL1(ana.fHOutCentTRKvsCentCL1),
387 fHOutCentV0MvsCentZDC(ana.fHOutCentV0MvsCentZDC),
388 fHOutMultV0M(ana.fHOutMultV0M),
389 fHOutMultV0O(ana.fHOutMultV0O),
390 fHOutMultFMD(ana.fHOutMultFMD),
391 fHOutMultTRK(ana.fHOutMultTRK),
392 fHOutMultTKL(ana.fHOutMultTKL),
393 fHOutMultCL0(ana.fHOutMultCL0),
394 fHOutMultCL1(ana.fHOutMultCL1),
395 fHOutMultV0MvsZDN(ana.fHOutMultV0MvsZDN),
396 fHOutMultZEMvsZDN(ana.fHOutMultZEMvsZDN),
397 fHOutMultV0MvsZDC(ana.fHOutMultV0MvsZDC),
398 fHOutMultZEMvsZDC(ana.fHOutMultZEMvsZDC),
399 fHOutMultZEMvsZDCw(ana.fHOutMultZEMvsZDCw),
400 fHOutMultV0MvsCL1(ana.fHOutMultV0MvsCL1),
401 fHOutMultV0MvsTRK(ana.fHOutMultV0MvsTRK),
402 fHOutMultTRKvsCL1(ana.fHOutMultTRKvsCL1),
403 fHOutMultV0MvsV0O(ana.fHOutMultV0MvsV0O),
404 fHOutMultV0OvsCL1(ana.fHOutMultV0OvsCL1),
405 fHOutMultV0OvsTRK(ana.fHOutMultV0OvsTRK),
406 fHOutCentV0Mqual1(ana.fHOutCentV0Mqual1),
407 fHOutCentTRKqual1(ana.fHOutCentTRKqual1),
408 fHOutCentCL1qual1(ana.fHOutCentCL1qual1),
409 fHOutMultV0MvsCL1qual1(ana.fHOutMultV0MvsCL1qual1),
410 fHOutMultV0MvsTRKqual1(ana.fHOutMultV0MvsTRKqual1),
411 fHOutMultTRKvsCL1qual1(ana.fHOutMultTRKvsCL1qual1),
412 fHOutCentV0Mqual2(ana.fHOutCentV0Mqual2),
413 fHOutCentTRKqual2(ana.fHOutCentTRKqual2),
414 fHOutCentCL1qual2(ana.fHOutCentCL1qual2),
415 fHOutMultV0MvsCL1qual2(ana.fHOutMultV0MvsCL1qual2),
416 fHOutMultV0MvsTRKqual2(ana.fHOutMultV0MvsTRKqual2),
417 fHOutMultTRKvsCL1qual2(ana.fHOutMultTRKvsCL1qual2),
418 fHOutQuality(ana.fHOutQuality),
419 fHOutVertex(ana.fHOutVertex)
425 //________________________________________________________________________
426 AliCentralitySelectionTask::~AliCentralitySelectionTask()
429 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList;
430 if (fTrackCuts) delete fTrackCuts;
433 //________________________________________________________________________
434 void AliCentralitySelectionTask::UserCreateOutputObjects()
436 // Create the output containers
437 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
438 AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
440 fOutputList = new TList();
441 fOutputList->SetOwner();
442 fHOutCentV0M = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",505,0,101);
443 fHOutCentV0M_CVHN= new TH1F("fHOutCentV0M_CVHN","fHOutCentV0M_CVHN; Centrality V0",505,0,101);
444 fHOutCentV0M_CVLN= new TH1F("fHOutCentV0M_CVLN","fHOutCentV0M_CVLN; Centrality V0",505,0,101);
445 fHOutCentV0M_CVHNinMB= new TH1F("fHOutCentV0M_CVHNinMB","fHOutCentV0M_CVHN; Centrality V0",505,0,101);
446 fHOutCentV0M_CVLNinMB= new TH1F("fHOutCentV0M_CVLNinMB","fHOutCentV0M_CVLN; Centrality V0",505,0,101);
447 fHOutCentFMD = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",505,0,101);
448 fHOutCentTRK = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",505,0,101);
449 fHOutCentTKL = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",505,0,101);
450 fHOutCentCL0 = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",505,0,101);
451 fHOutCentCL1 = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",505,0,101);
452 fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",505,0,101);
453 fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",505,0,101);
454 fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",505,0,101);
455 fHOutCentV0MvsCentCL1= new TH2F("fHOutCentV0MvsCentCL1","fHOutCentV0MvsCentCL1; Cent V0; Cent SPD",505,0,101,505,0,101);
456 fHOutCentV0MvsCentTRK= new TH2F("fHOutCentV0MvsCentTRK","fHOutCentV0MvsCentTRK; Cent V0; Cent TPC",505,0,101,505,0,101);
457 fHOutCentTRKvsCentCL1= new TH2F("fHOutCentTRKvsCentCL1","fHOutCentTRKvsCentCL1; Cent TPC; Cent SPD",505,0,101,505,0,101);
458 fHOutCentV0MvsCentZDC= new TH2F("fHOutCentV0MvsCentZDC","fHOutCentV0MvsCentZDC; Cent V0; Cent ZDC",505,0,101,505,0,101);
459 fHOutMultV0M = new TH1F("fHOutMultV0M","fHOutMultV0M; Multiplicity V0",25000,0,30000);
460 fHOutMultV0O = new TH1F("fHOutMultV0O","fHOutMultV0O; Multiplicity V0",40000,0,40000);
461 fHOutMultFMD = new TH1F("fHOutMultFMD","fHOutMultFMD; Multiplicity FMD",24000,0,24000);
462 fHOutMultTRK = new TH1F("fHOutMultTRK","fHOutMultTRK; Multiplicity TPC",4000,0,4000);
463 fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000);
464 fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000);
465 fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000);
466 fHOutMultV0MvsZDN = new TH2F("fHOutMultV0MvsZDN","fHOutMultV0MvsZDN; Multiplicity V0; Energy ZDC-N",500,0,30000,500,0,180000);
467 fHOutMultZEMvsZDN = new TH2F("fHOutMultZEMvsZDN","fHOutMultZEMvsZDN; Energy ZEM; Energy ZDC-N",500,0,2500,500,0,180000);
468 fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,30000,500,0,200000);
469 fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,200000);
470 fHOutMultZEMvsZDCw = new TH2F("fHOutMultZEMvsZDCw","fHOutMultZEMvsZDCw; Energy ZEM; Energy ZDC (weigthed with V0 percentile)",500,0,2500,500,0,200000);
471 fHOutMultV0MvsCL1 = new TH2F("fHOutMultV0MvsCL1","fHOutMultV0MvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,30000,700,0,7000);
472 fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,30000,400,0,4000);
473 fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
474 fHOutMultV0MvsV0O = new TH2F("fHOutMultV0MvsV0O","fHOutMultV0MvsV0O; Multiplicity V0; Multiplicity V0 Online",500,0,30000,500,0,40000);
475 fHOutMultV0OvsCL1 = new TH2F("fHOutMultV0OvsCL1","fHOutMultV0OvsCL1; Multiplicity V0; Multiplicity SPD outer",500,0,40000,700,0,7000);
476 fHOutMultV0OvsTRK = new TH2F("fHOutMultV0OvsTRK","fHOutMultV0OvsTRK; Multiplicity V0; Multiplicity TPC",500,0,40000,400,0,4000);
477 fHOutMultV0MvsV0O = new TH2F("fHOutMultV0MvsV0O","fHOutMultV0MvsV0O; Multiplicity V0; Multiplicity V0 Online",500,0,30000,500,0,30000);
478 fHOutMultV0OvsCL1 = new TH2F("fHOutMultV0OvsCL1","fHOutMultV0OvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,30000,700,0,7000);
479 fHOutMultV0OvsTRK = new TH2F("fHOutMultV0OvsTRK","fHOutMultV0OvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,30000,400,0,4000);
481 fHOutCentV0Mqual1 = new TH1F("fHOutCentV0M_qual1","fHOutCentV0M_qual1; Centrality V0",505,0,101);
482 fHOutCentTRKqual1 = new TH1F("fHOutCentTRK_qual1","fHOutCentTRK_qual1; Centrality TPC",505,0,101);
483 fHOutCentCL1qual1 = new TH1F("fHOutCentCL1_qual1","fHOutCentCL1_qual1; Centrality SPD outer",505,0,101);
484 fHOutMultV0MvsCL1qual1 = new TH2F("fHOutMultV0MvsCL1_qual1","fHOutMultV0MvsCL1_qual1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
485 fHOutMultV0MvsTRKqual1 = new TH2F("fHOutMultV0MvsTRK_qual1","fHOutMultV0MvsTRK_qual1; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
486 fHOutMultTRKvsCL1qual1 = new TH2F("fHOutMultTRKvsCL1_qual1","fHOutMultTRKvsCL1_qual1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
488 fHOutCentV0Mqual2 = new TH1F("fHOutCentV0M_qual2","fHOutCentV0M_qual2; Centrality V0",505,0,101);
489 fHOutCentTRKqual2 = new TH1F("fHOutCentTRK_qual2","fHOutCentTRK_qual2; Centrality TPC",505,0,101);
490 fHOutCentCL1qual2 = new TH1F("fHOutCentCL1_qual2","fHOutCentCL1_qual2; Centrality SPD outer",505,0,101);
491 fHOutMultV0MvsCL1qual2 = new TH2F("fHOutMultV0MvsCL1_qual2","fHOutMultV0MvsCL1_qual2; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
492 fHOutMultV0MvsTRKqual2 = new TH2F("fHOutMultV0MvsTRK_qual2","fHOutMultV0MvsTRK_qual2; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
493 fHOutMultTRKvsCL1qual2 = new TH2F("fHOutMultTRKvsCL1_qual2","fHOutMultTRKvsCL1_qual2; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
495 fHOutQuality = new TH1F("fHOutQuality", "fHOutQuality", 100,-0.5,99.5);
496 fHOutVertex = new TH1F("fHOutVertex", "fHOutVertex", 100,-20,20);
498 fOutputList->Add( fHOutCentV0M );
499 fOutputList->Add( fHOutCentV0M_CVHN);
500 fOutputList->Add( fHOutCentV0M_CVLN);
501 fOutputList->Add( fHOutCentV0M_CVHNinMB);
502 fOutputList->Add( fHOutCentV0M_CVLNinMB);
503 fOutputList->Add( fHOutCentFMD );
504 fOutputList->Add( fHOutCentTRK );
505 fOutputList->Add( fHOutCentTKL );
506 fOutputList->Add( fHOutCentCL0 );
507 fOutputList->Add( fHOutCentCL1 );
508 fOutputList->Add( fHOutCentV0MvsFMD);
509 fOutputList->Add( fHOutCentTKLvsV0M);
510 fOutputList->Add( fHOutCentZEMvsZDC);
511 fOutputList->Add( fHOutCentV0MvsCentCL1);
512 fOutputList->Add( fHOutCentV0MvsCentTRK);
513 fOutputList->Add( fHOutCentTRKvsCentCL1);
514 fOutputList->Add( fHOutCentV0MvsCentZDC);
515 fOutputList->Add( fHOutMultV0M);
516 fOutputList->Add( fHOutMultV0O);
517 fOutputList->Add( fHOutMultFMD);
518 fOutputList->Add( fHOutMultTRK);
519 fOutputList->Add( fHOutMultTKL);
520 fOutputList->Add( fHOutMultCL0);
521 fOutputList->Add( fHOutMultCL1);
522 fOutputList->Add( fHOutMultV0MvsZDN);
523 fOutputList->Add( fHOutMultZEMvsZDN);
524 fOutputList->Add( fHOutMultV0MvsZDC);
525 fOutputList->Add( fHOutMultZEMvsZDC);
526 fOutputList->Add( fHOutMultZEMvsZDCw);
527 fOutputList->Add( fHOutMultV0MvsCL1);
528 fOutputList->Add( fHOutMultV0MvsTRK);
529 fOutputList->Add( fHOutMultTRKvsCL1);
530 fOutputList->Add( fHOutMultV0MvsV0O);
531 fOutputList->Add( fHOutMultV0OvsCL1);
532 fOutputList->Add( fHOutMultV0OvsTRK);
533 fOutputList->Add( fHOutCentV0Mqual1 );
534 fOutputList->Add( fHOutCentTRKqual1 );
535 fOutputList->Add( fHOutCentCL1qual1 );
536 fOutputList->Add( fHOutMultV0MvsCL1qual1);
537 fOutputList->Add( fHOutMultV0MvsTRKqual1);
538 fOutputList->Add( fHOutMultTRKvsCL1qual1);
539 fOutputList->Add( fHOutCentV0Mqual2 );
540 fOutputList->Add( fHOutCentTRKqual2 );
541 fOutputList->Add( fHOutCentCL1qual2 );
542 fOutputList->Add( fHOutMultV0MvsCL1qual2);
543 fOutputList->Add( fHOutMultV0MvsTRKqual2);
544 fOutputList->Add( fHOutMultTRKvsCL1qual2);
545 fOutputList->Add( fHOutQuality );
546 fOutputList->Add( fHOutVertex );
549 fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
551 PostData(1, fOutputList);
553 if (fPass==0) AliFatal("Which pass are you analyzing? You should set it via taskCentrality->SetPass(N)");
556 //________________________________________________________________________
557 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
559 // Execute analysis for current event:
560 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
562 Float_t zncEnergy = 0.; // ZNC Energy
563 Float_t zpcEnergy = 0.; // ZPC Energy
564 Float_t znaEnergy = 0.; // ZNA Energy
565 Float_t zpaEnergy = 0.; // ZPA Energy
566 Float_t zem1Energy = 0.; // ZEM1 Energy
567 Float_t zem2Energy = 0.; // ZEM2 Energy
568 Bool_t zdcEnergyCal = kFALSE; // if zdc is calibrated (in pass2)
570 Int_t nTracks = 0; // no. tracks
571 Int_t nTracklets = 0; // no. tracklets
572 Int_t nClusters[6] = {0}; // no. clusters on 6 ITS layers
573 Int_t nChips[2]; // no. chips on 2 SPD layers
574 Float_t spdCorr =0; // corrected spd2 multiplicity
576 Float_t multV0A = 0; // multiplicity from V0 reco side A
577 Float_t multV0C = 0; // multiplicity from V0 reco side C
578 Short_t multV0AOnline = 0; // multiplicity from V0 reco side A
579 Short_t multV0COnline = 0; // multiplicity from V0 reco side C
580 Float_t v0Corr = 0; // corrected V0 multiplicity (used for MC)
582 Float_t multFMDA = 0; // multiplicity from FMD on detector A
583 Float_t multFMDC = 0; // multiplicity from FMD on detector C
585 Float_t zvtx =0; // z-vertex SPD
586 Int_t zvtxNcont =0; // contributors to z-vertex SPD
589 AliCentrality *esdCent = 0;
591 if(fAnalysisInput.CompareTo("ESD")==0){
593 AliVEvent* event = InputEvent();
594 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
596 AliError("No ESD Event");
602 if (SetupRun(esd)<0) {
603 AliError("Centrality File not available for this run");
607 esdCent = esd->GetCentrality();
610 AliESDVZERO* esdV0 = esd->GetVZEROData();
611 multV0A=esdV0->GetMTotV0A();
612 multV0C=esdV0->GetMTotV0C();
613 v0Corr = multV0A+multV0C;
615 multV0AOnline=esdV0->GetTriggerChargeA();
616 multV0COnline=esdV0->GetTriggerChargeC();
619 // ***** Trigger info
620 fIsSelected = ((esdV0->GetV0ADecision()==1) && (esdV0->GetV0CDecision()==1));
621 TString trigStr(esd->GetFiredTriggerClasses());
622 fCVHN=kFALSE; fCVLN=kFALSE;
623 if ( (trigStr.Contains("-B-")) && (trigStr.Contains("CVHN")) && (fIsSelected))
625 if ( (trigStr.Contains("-B-")) && (trigStr.Contains("CVLN")) && (fIsSelected))
627 fCVHNbit=kFALSE; fCVLNbit=kFALSE;
628 if (esdV0->GetTriggerBits() & (1<<8))
630 if (esdV0->GetTriggerBits() & (1<<6))
635 const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
636 zvtx = vtxESD->GetZ();
637 zvtxNcont = vtxESD->GetNContributors();
639 // ***** CB info (tracklets, clusters, chips)
640 //nTracks = event->GetNumberOfTracks();
641 nTracks = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1;
643 const AliMultiplicity *mult = esd->GetMultiplicity();
645 nTracklets = mult->GetNumberOfTracklets();
647 for(Int_t ilay=0; ilay<6; ilay++){
648 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
651 for(Int_t ilay=0; ilay<2; ilay++){
652 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
655 spdCorr = AliESDUtils::GetCorrSPD2(nClusters[1],zvtx);
658 AliESDFMD *fmd = esd->GetFMDData();
659 Float_t totalMultA = 0;
660 Float_t totalMultC = 0;
661 const Float_t fFMDLowCut = 0.4;
663 for(UShort_t det=1;det<=3;det++) {
664 Int_t nRings = (det==1 ? 1 : 2);
665 for (UShort_t ir = 0; ir < nRings; ir++) {
666 Char_t ring = (ir == 0 ? 'I' : 'O');
667 UShort_t nsec = (ir == 0 ? 20 : 40);
668 UShort_t nstr = (ir == 0 ? 512 : 256);
669 for(UShort_t sec =0; sec < nsec; sec++) {
670 for(UShort_t strip = 0; strip < nstr; strip++) {
672 Float_t fmdMult = fmd->Multiplicity(det,ring,sec,strip);
673 if(fmdMult == 0 || fmdMult == AliESDFMD::kInvalidMult) continue;
675 Float_t nParticles=0;
677 if(fmdMult > fFMDLowCut) {
681 if (det<3) totalMultA = totalMultA + nParticles;
682 else totalMultC = totalMultC + nParticles;
688 multFMDA = totalMultA;
689 multFMDC = totalMultC;
692 AliESDZDC *esdZDC = esd->GetESDZDC();
693 zdcEnergyCal = esdZDC->AliESDZDC::TestBit(AliESDZDC::kEnergyCalibratedSignal);
695 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
696 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
697 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
698 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
700 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.;
701 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.;
702 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.;
703 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.;
705 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.;
706 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.;
710 else if(fAnalysisInput.CompareTo("AOD")==0){
711 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
713 printf(" AOD analysis not yet implemented!!!\n\n");
717 // ***** Scaling for MC
720 v0Corr = Short_t((multV0A+multV0C) * fV0MScaleFactorMC);
722 // ***** Scaling for Data
724 v0Corr = Short_t(v0Corr / fV0MScaleFactor);
725 spdCorr = spdCorr / fSPDScaleFactor;
726 nTracks = Int_t(nTracks / fTPCScaleFactor);
729 // ***** Centrality Selection
730 if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
731 if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
732 if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
733 if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
734 if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
735 if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
737 if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
738 if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
739 if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin(zem1Energy+zem2Energy,zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
747 if (TMath::Abs(zvtx)>fZVCut || zvtxNcont<1) fQuality += 1;
749 // ***** outliers, skip in case of MC input
752 if (IsOutlierV0MSPD(spdCorr, v0Corr, int(fCentV0M))) fQuality += 2;
754 if (IsOutlierV0MTPC(nTracks, v0Corr, int(fCentV0M))) fQuality += 4;
756 if (IsOutlierV0MZDC((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
757 (zdcEnergyCal==kFALSE) ) fQuality += 8;
758 if (IsOutlierV0MZDCECal((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
759 (zdcEnergyCal==kTRUE) ) fQuality += 8;
767 esdCent->SetQuality(fQuality);
768 esdCent->SetCentralityV0M(fCentV0M);
769 esdCent->SetCentralityFMD(fCentFMD);
770 esdCent->SetCentralityTRK(fCentTRK);
771 esdCent->SetCentralityTKL(fCentTKL);
772 esdCent->SetCentralityCL0(fCentCL0);
773 esdCent->SetCentralityCL1(fCentCL1);
774 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
775 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
776 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
780 fHOutCentV0M_CVHN->Fill(fCentV0M);
782 fHOutCentV0M_CVLN->Fill(fCentV0M);
784 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
785 if (isSelected) { // fill the QA histograms only for MB events!
786 fHOutQuality->Fill(fQuality);
787 fHOutVertex->Fill(zvtx);
790 fHOutCentV0M->Fill(fCentV0M);
793 fHOutCentV0M_CVHNinMB->Fill(fCentV0M);
795 fHOutCentV0M_CVLNinMB->Fill(fCentV0M);
797 fHOutCentFMD->Fill(fCentFMD);
798 fHOutCentTRK->Fill(fCentTRK);
799 fHOutCentTKL->Fill(fCentTKL);
800 fHOutCentCL0->Fill(fCentCL0);
801 fHOutCentCL1->Fill(fCentCL1);
802 fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
803 fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
804 fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
805 fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentCL1);
806 fHOutCentV0MvsCentTRK->Fill(fCentV0M,fCentTRK);
807 fHOutCentTRKvsCentCL1->Fill(fCentTRK,fCentCL1);
808 fHOutCentV0MvsCentZDC->Fill(fCentV0M,fCentZEMvsZDC);
809 fHOutMultV0M->Fill(multV0A+multV0C);
810 fHOutMultV0O->Fill(multV0AOnline+multV0COnline);
811 fHOutMultFMD->Fill(multFMDA+multFMDC);
812 fHOutMultTRK->Fill(nTracks);
813 fHOutMultTKL->Fill(nTracklets);
814 fHOutMultCL0->Fill(nClusters[0]);
815 fHOutMultCL1->Fill(spdCorr);
816 fHOutMultV0MvsZDN->Fill(v0Corr,(zncEnergy+znaEnergy));
817 fHOutMultZEMvsZDN->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy));
818 fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
819 fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
820 fHOutMultZEMvsZDCw->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy),fCentV0M);
821 fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr);
822 fHOutMultV0MvsTRK->Fill(v0Corr,nTracks);
823 fHOutMultTRKvsCL1->Fill(nTracks,spdCorr);
824 fHOutMultV0MvsV0O->Fill(v0Corr,(multV0AOnline+multV0COnline));
825 fHOutMultV0OvsCL1->Fill((multV0AOnline+multV0COnline),spdCorr);
826 fHOutMultV0OvsTRK->Fill((multV0AOnline+multV0COnline),nTracks);
827 } else if (fQuality%2 == 0) {
828 fHOutCentV0Mqual1->Fill(fCentV0M);
829 fHOutCentTRKqual1->Fill(fCentTRK);
830 fHOutCentCL1qual1->Fill(fCentCL1);
831 fHOutMultV0MvsCL1qual1->Fill(v0Corr,spdCorr);
832 fHOutMultV0MvsTRKqual1->Fill(v0Corr,nTracks);
833 fHOutMultTRKvsCL1qual1->Fill(nTracks,spdCorr);
835 fHOutCentV0Mqual2->Fill(fCentV0M);
836 fHOutCentTRKqual2->Fill(fCentTRK);
837 fHOutCentCL1qual2->Fill(fCentCL1);
838 fHOutMultV0MvsCL1qual2->Fill(v0Corr,spdCorr);
839 fHOutMultV0MvsTRKqual2->Fill(v0Corr,nTracks);
840 fHOutMultTRKvsCL1qual2->Fill(nTracks,spdCorr);
844 PostData(1, fOutputList);
846 //________________________________________________________________________
847 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
849 // Terminate analysis
851 //________________________________________________________________________
852 Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* const esd)
854 // Setup files for run
859 // check if something to be done
860 if (fCurrentRun == esd->GetRunNumber())
863 fCurrentRun = esd->GetRunNumber();
865 TString fileName =(Form("%s/COMMON/CENTRALITY/data/centrality.root", AliAnalysisManager::GetOADBPath()));
866 AliInfo(Form("Setup Centrality Selection for run %d with file %s\n",fCurrentRun,fileName.Data()));
868 AliOADBContainer *con = new AliOADBContainer("OADB");
869 con->InitFromFile(fileName,"Centrality");
871 AliOADBCentrality* centOADB = 0;
872 centOADB = (AliOADBCentrality*)(con->GetObject(fCurrentRun));
874 AliWarning(Form("Centrality OADB does not exist for run %d, using Default \n",fCurrentRun ));
875 centOADB = (AliOADBCentrality*)(con->GetDefaultObject("oadbDefault"));
879 fUseScaling = centOADB->UseScaling();
880 fUseCleaning = centOADB->UseCleaning();
883 fZVCut = centOADB->ZVCut();
884 fOutliersCut = centOADB->OutliersCut();
887 fHtempV0M = centOADB->V0hist();
888 fHtempTRK = centOADB->TPChist();
889 fHtempCL1 = centOADB->SPDhist();
890 fHtempZEMvsZDC = centOADB->ZEMvsZDChist();
892 TString path = gSystem->ExpandPathName(fileName.Data());
893 if (!fHtempV0M) AliWarning(Form("Calibration for V0M does not exist in %s", path.Data()));
894 if (!fHtempTRK) AliWarning(Form("Calibration for TRK does not exist in %s", path.Data()));
895 if (!fHtempCL1) AliWarning(Form("Calibration for CL1 does not exist in %s", path.Data()));
896 if (!fHtempZEMvsZDC) AliWarning(Form("Calibration for ZEMvsZDC does not exist in %s", path.Data()));
899 fV0MScaleFactor = centOADB->V0MScaleFactor();
900 fSPDScaleFactor = centOADB->SPDScaleFactor();
901 fTPCScaleFactor = centOADB->TPCScaleFactor();
902 fV0MScaleFactorMC = centOADB->V0MScaleFactor();
904 // outliers parameters
905 fV0MSPDOutlierPar0 = centOADB->V0MSPDOutlierPar0();
906 fV0MSPDOutlierPar1 = centOADB->V0MSPDOutlierPar1();
907 fV0MTPCOutlierPar0 = centOADB->V0MTPCOutlierPar0();
908 fV0MTPCOutlierPar1 = centOADB->V0MTPCOutlierPar1();
910 fV0MSPDSigmaOutlierPar0 = centOADB->V0MSPDSigmaOutlierPar0();
911 fV0MSPDSigmaOutlierPar1 = centOADB->V0MSPDSigmaOutlierPar1();
912 fV0MSPDSigmaOutlierPar2 = centOADB->V0MSPDSigmaOutlierPar2();
913 fV0MTPCSigmaOutlierPar0 = centOADB->V0MTPCSigmaOutlierPar0();
914 fV0MTPCSigmaOutlierPar1 = centOADB->V0MTPCSigmaOutlierPar1();
915 fV0MTPCSigmaOutlierPar2 = centOADB->V0MTPCSigmaOutlierPar2();
917 fV0MZDCOutlierPar0 = centOADB->V0MZDCOutlierPar0();
918 fV0MZDCOutlierPar1 = centOADB->V0MZDCOutlierPar1();
919 fV0MZDCEcalOutlierPar0 = centOADB->V0MZDCEcalOutlierPar0();
920 fV0MZDCEcalOutlierPar1 = centOADB->V0MZDCEcalOutlierPar1();
929 //________________________________________________________________________
930 Bool_t AliCentralitySelectionTask::IsOutlierV0MSPD(Float_t spd, Float_t v0, Int_t cent) const
933 Float_t val = fV0MSPDOutlierPar0 + fV0MSPDOutlierPar1 * v0;
934 Float_t spdSigma = fV0MSPDSigmaOutlierPar0 + fV0MSPDSigmaOutlierPar1*cent + fV0MSPDSigmaOutlierPar2*cent*cent;
935 if ( TMath::Abs(spd-val) > fOutliersCut*spdSigma )
941 //________________________________________________________________________
942 Bool_t AliCentralitySelectionTask::IsOutlierV0MTPC(Int_t tracks, Float_t v0, Int_t cent) const
945 Float_t val = fV0MTPCOutlierPar0 + fV0MTPCOutlierPar1 * v0;
946 Float_t tpcSigma = fV0MTPCSigmaOutlierPar0 + fV0MTPCSigmaOutlierPar1*cent + fV0MTPCSigmaOutlierPar2*cent*cent;
947 if ( TMath::Abs(tracks-val) > fOutliersCut*tpcSigma )
953 //________________________________________________________________________
954 Bool_t AliCentralitySelectionTask::IsOutlierV0MZDC(Float_t zdc, Float_t v0) const
957 Float_t val = fV0MZDCOutlierPar0 + fV0MZDCOutlierPar1 * v0;
964 //________________________________________________________________________
965 Bool_t AliCentralitySelectionTask::IsOutlierV0MZDCECal(Float_t zdc, Float_t v0) const
968 Float_t val = fV0MZDCEcalOutlierPar0 + fV0MZDCEcalOutlierPar1 * v0;