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