766d0b5bf372c3d8731e708292a09af3368a3f3f
[u/mrichter/AliRoot.git] / ANALYSIS / AliCentralitySelectionTask.cxx
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 "AliGenDPMjetEventHeader.h"
72 #include "AliGenCocktailEventHeader.h"
73 #include "AliPhysicsSelectionTask.h"
74 #include "AliPhysicsSelection.h"
75 #include "AliBackgroundSelection.h"
76 #include "AliESDUtils.h"
77
78 ClassImp(AliCentralitySelectionTask)
79
80
81 //________________________________________________________________________
82 AliCentralitySelectionTask::AliCentralitySelectionTask():
83 AliAnalysisTaskSE(),
84   fAnalysisInput("ESD"),
85   fIsMCInput(kFALSE),
86   fCurrentRun(-1),
87   fUseScaling(0),
88   fUseCleaning(0),
89   fFillHistos(0),
90   fV0MScaleFactor(0),
91   fSPDScaleFactor(0),
92   fTPCScaleFactor(0),
93   fV0MScaleFactorMC(0),
94   fV0MSPDOutlierPar0(0),  
95   fV0MSPDOutlierPar1(0),  
96   fV0MTPCOutlierPar0(0),  
97   fV0MTPCOutlierPar1(0),  
98   fV0MSPDSigmaOutlierPar0(0),  
99   fV0MSPDSigmaOutlierPar1(0),  
100   fV0MSPDSigmaOutlierPar2(0),  
101   fV0MTPCSigmaOutlierPar0(0),  
102   fV0MTPCSigmaOutlierPar1(0),  
103   fV0MTPCSigmaOutlierPar2(0),   
104   fV0MZDCOutlierPar0(0),            
105   fV0MZDCOutlierPar1(0),            
106   fV0MZDCEcalOutlierPar0(0),   
107   fV0MZDCEcalOutlierPar1(0),   
108   fTrackCuts(0),
109   fEsdTrackCuts(0),
110   fEsdTrackCutsExtra1(0),
111   fEsdTrackCutsExtra2(0),
112   fZVCut(10),
113   fOutliersCut(5),
114   fQuality(999),
115   fIsSelected(0),
116   fMSL(0),
117   fMSH(0),
118   fMUL(0),
119   fMLL(0),
120   fEJE(0),
121   fEGA(0),
122   fPHS(0),
123   fMB(0),
124   fCVHN(0),
125   fCVLN(0),
126   fCVHNbit(0),
127   fCVLNbit(0),
128   fCCENT(0),
129   fCSEMI(0),
130   fCCENTbit(0),
131   fCSEMIbit(0),
132   fCentV0M(0),
133   fCentV0A(0),
134   fCentV0C(0),
135   fCentFMD(0),
136   fCentTRK(0),
137   fCentTKL(0),
138   fCentCL0(0),
139   fCentCL1(0),
140   fCentCND(0),
141   fCentZNA(0),
142   fCentNPA(0),
143   fCentV0MvsFMD(0),
144   fCentTKLvsV0M(0),
145   fCentZEMvsZDC(0),
146   fCentV0Mtrue(0),
147   fCentV0Atrue(0),
148   fCentV0Ctrue(0),
149   fCentFMDtrue(0),
150   fCentTRKtrue(0),
151   fCentTKLtrue(0),
152   fCentCL0true(0),
153   fCentCL1true(0),
154   fCentCNDtrue(0),
155   fCentZNAtrue(0),
156   fHtempV0M(0),
157   fHtempV0A(0),
158   fHtempV0C(0),
159   fHtempFMD(0),
160   fHtempTRK(0),
161   fHtempTKL(0),
162   fHtempCL0(0),
163   fHtempCL1(0),
164   fHtempCND(0),
165   fHtempZNA(0),
166   fHtempV0MvsFMD(0),
167   fHtempTKLvsV0M(0),
168   fHtempZEMvsZDC(0),
169   fHtempNPA(0),
170   fHtempV0Mtrue(0),
171   fHtempV0Atrue(0),
172   fHtempV0Ctrue(0),
173   fHtempFMDtrue(0),
174   fHtempTRKtrue(0),
175   fHtempTKLtrue(0),
176   fHtempCL0true(0),
177   fHtempCL1true(0),
178   fHtempCNDtrue(0),
179   fHtempZNAtrue(0),
180   fOutputList(0),
181   fHOutCentV0M(0),
182   fHOutCentV0A(0),
183   fHOutCentV0C(0),
184   fHOutCentV0MCVHN(0),
185   fHOutCentV0MCVLN(0),
186   fHOutCentV0MCVHNinMB(0),
187   fHOutCentV0MCVLNinMB(0),
188   fHOutCentV0MCCENT(0),
189   fHOutCentV0MCSEMI(0),
190   fHOutCentV0MCCENTinMB(0),
191   fHOutCentV0MCSEMIinMB(0),
192   fHOutCentV0MMSL(0),
193   fHOutCentV0MMSH(0),
194   fHOutCentV0MMUL(0),
195   fHOutCentV0MMLL(0),
196   fHOutCentV0MEJE(0),
197   fHOutCentV0MEGA(0),
198   fHOutCentV0MPHS(0),
199   fHOutCentV0MMSLinMB(0),
200   fHOutCentV0MMSHinMB(0),
201   fHOutCentV0MMULinMB(0),
202   fHOutCentV0MMLLinMB(0),
203   fHOutCentV0MEJEinMB(0),
204   fHOutCentV0MEGAinMB(0),
205   fHOutCentV0MPHSinMB(0),
206   fHOutCentFMD(0),
207   fHOutCentTRK(0),
208   fHOutCentTKL(0),
209   fHOutCentCL0(0),
210   fHOutCentCL1(0),
211   fHOutCentCND(0),
212   fHOutCentNPA(0),
213   fHOutCentZNA(0),
214   fHOutCentV0MvsFMD(0),
215   fHOutCentTKLvsV0M(0),
216   fHOutCentZEMvsZDC(0),
217   fHOutCentV0MvsCentCL1(0),
218   fHOutCentV0MvsCentTRK(0),
219   fHOutCentTRKvsCentCL1(0),
220   fHOutCentV0MvsCentZDC(0),
221   fHOutCentV0AvsCentV0C(0),
222   fHOutCentV0AvsCentTRK(0),
223   fHOutCentV0AvsCentCND(0),
224   fHOutCentV0AvsCentCL1(0),
225   fHOutCentV0CvsCentTRK(0),
226   fHOutCentV0CvsCentCND(0),
227   fHOutCentV0CvsCentCL1(0),
228   fHOutCentNPAvsCentV0A(0),
229   fHOutCentNPAvsCentV0C(0),
230   fHOutCentNPAvsCentTRK(0),
231   fHOutCentNPAvsCentCND(0),
232   fHOutCentNPAvsCentCL1(0),
233   fHOutCentZNAvsCentV0A(0),
234   fHOutCentZNAvsCentV0C(0),
235   fHOutCentZNAvsCentTRK(0),
236   fHOutCentZNAvsCentCND(0),
237   fHOutCentZNAvsCentCL1(0),
238   fHOutMultV0AC(0),
239   fHOutMultV0M(0),
240   fHOutMultV0A(0),
241   fHOutMultV0C(0),
242   fHOutMultV0Mnc(0),
243   fHOutMultV0Anc(0),
244   fHOutMultV0Cnc(0),
245   fHOutMultV0O(0),
246   fHOutMultV0Cells(0),
247   fHOutMultFMD(0),
248   fHOutMultTRK(0),
249   fHOutMultTKL(0),
250   fHOutMultCL0(0),
251   fHOutMultCL1(0),
252   fHOutMultCND(0),
253   fHOutMultNPA(0),
254   fHOutMultZNA(0),
255   fHOutMultV0MvsZDN(0),
256   fHOutMultZEMvsZDN(0),
257   fHOutMultV0MvsZDC(0),
258   fHOutMultZEMvsZDC(0),
259   fHOutMultZEMvsZDCw(0),
260   fHOutMultV0MvsCL1(0),
261   fHOutMultV0MvsTRK(0),
262   fHOutMultTRKvsCL1(0),
263   fHOutMultV0MvsV0O(0),
264   fHOutMultV0OvsCL1(0),
265   fHOutMultV0OvsTRK(0),
266   fHOutMultCL1vsTKL(0),
267   fHOutCentV0Mqual1(0),
268   fHOutCentTRKqual1(0),
269   fHOutCentCL1qual1(0),
270   fHOutMultV0MvsCL1qual1(0),
271   fHOutMultV0MvsTRKqual1(0),
272   fHOutMultTRKvsCL1qual1(0),
273   fHOutCentV0Mqual2(0),
274   fHOutCentTRKqual2(0),
275   fHOutCentCL1qual2(0),
276   fHOutMultV0MvsCL1qual2(0),
277   fHOutMultV0MvsTRKqual2(0),
278   fHOutMultTRKvsCL1qual2(0),
279   fHOutQuality(0),
280   fHOutVertex(0),
281   fHOutVertexT0(0)
282 {   
283   // Default constructor
284   AliInfo("Centrality Selection enabled.");
285
286   fUseScaling=kTRUE;
287   fUseCleaning=kTRUE;
288   fFillHistos=kFALSE;
289   fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO.,AliESDTZERO."
290     ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
291 }   
292
293 //________________________________________________________________________
294 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
295   AliAnalysisTaskSE(name),
296   fAnalysisInput("ESD"),
297   fIsMCInput(kFALSE),
298   fCurrentRun(-1),
299   fUseScaling(0),
300   fUseCleaning(0),
301   fFillHistos(0),
302   fV0MScaleFactor(0),
303   fSPDScaleFactor(0),
304   fTPCScaleFactor(0),
305   fV0MScaleFactorMC(0),
306   fV0MSPDOutlierPar0(0),  
307   fV0MSPDOutlierPar1(0),  
308   fV0MTPCOutlierPar0(0),  
309   fV0MTPCOutlierPar1(0),  
310   fV0MSPDSigmaOutlierPar0(0),  
311   fV0MSPDSigmaOutlierPar1(0),  
312   fV0MSPDSigmaOutlierPar2(0),  
313   fV0MTPCSigmaOutlierPar0(0),  
314   fV0MTPCSigmaOutlierPar1(0),  
315   fV0MTPCSigmaOutlierPar2(0),   
316   fV0MZDCOutlierPar0(0),            
317   fV0MZDCOutlierPar1(0),            
318   fV0MZDCEcalOutlierPar0(0),   
319   fV0MZDCEcalOutlierPar1(0),   
320   fTrackCuts(0),
321   fEsdTrackCuts(0),
322   fEsdTrackCutsExtra1(0),
323   fEsdTrackCutsExtra2(0),
324   fZVCut(10),
325   fOutliersCut(5),
326   fQuality(999),
327   fIsSelected(0),
328   fMSL(0),
329   fMSH(0),
330   fMUL(0),
331   fMLL(0),
332   fEJE(0),
333   fEGA(0),
334   fPHS(0),
335   fMB(0),
336   fCVHN(0),
337   fCVLN(0),
338   fCVHNbit(0),
339   fCVLNbit(0),
340   fCCENT(0),
341   fCSEMI(0),
342   fCCENTbit(0),
343   fCSEMIbit(0),
344   fCentV0M(0),
345   fCentV0A(0),
346   fCentV0C(0),
347   fCentFMD(0),
348   fCentTRK(0),
349   fCentTKL(0),
350   fCentCL0(0),
351   fCentCL1(0),
352   fCentCND(0),
353   fCentZNA(0),
354   fCentNPA(0),
355   fCentV0MvsFMD(0),
356   fCentTKLvsV0M(0),
357   fCentZEMvsZDC(0),
358   fCentV0Mtrue(0),
359   fCentV0Atrue(0),
360   fCentV0Ctrue(0),
361   fCentFMDtrue(0),
362   fCentTRKtrue(0),
363   fCentTKLtrue(0),
364   fCentCL0true(0),
365   fCentCL1true(0),
366   fCentCNDtrue(0),
367   fCentZNAtrue(0),
368   fHtempV0M(0),
369   fHtempV0A(0),
370   fHtempV0C(0),
371   fHtempFMD(0),
372   fHtempTRK(0),
373   fHtempTKL(0),
374   fHtempCL0(0),
375   fHtempCL1(0),
376   fHtempCND(0),
377   fHtempZNA(0),
378   fHtempV0MvsFMD(0),
379   fHtempTKLvsV0M(0),
380   fHtempZEMvsZDC(0),
381   fHtempNPA(0),
382   fHtempV0Mtrue(0),
383   fHtempV0Atrue(0),
384   fHtempV0Ctrue(0),
385   fHtempFMDtrue(0),
386   fHtempTRKtrue(0),
387   fHtempTKLtrue(0),
388   fHtempCL0true(0),
389   fHtempCL1true(0),
390   fHtempCNDtrue(0),
391   fHtempZNAtrue(0),
392   fOutputList(0),
393   fHOutCentV0M(0),
394   fHOutCentV0A(0),
395   fHOutCentV0C(0),
396   fHOutCentV0MCVHN(0),
397   fHOutCentV0MCVLN(0),
398   fHOutCentV0MCVHNinMB(0),
399   fHOutCentV0MCVLNinMB(0),
400   fHOutCentV0MCCENT(0),
401   fHOutCentV0MCSEMI(0),
402   fHOutCentV0MCCENTinMB(0),
403   fHOutCentV0MCSEMIinMB(0),
404   fHOutCentV0MMSL(0),
405   fHOutCentV0MMSH(0),
406   fHOutCentV0MMUL(0),
407   fHOutCentV0MMLL(0),
408   fHOutCentV0MEJE(0),
409   fHOutCentV0MEGA(0),
410   fHOutCentV0MPHS(0),
411   fHOutCentV0MMSLinMB(0),
412   fHOutCentV0MMSHinMB(0),
413   fHOutCentV0MMULinMB(0),
414   fHOutCentV0MMLLinMB(0),
415   fHOutCentV0MEJEinMB(0),
416   fHOutCentV0MEGAinMB(0),
417   fHOutCentV0MPHSinMB(0),
418   fHOutCentFMD(0),
419   fHOutCentTRK(0),
420   fHOutCentTKL(0),
421   fHOutCentCL0(0),
422   fHOutCentCL1(0),
423   fHOutCentCND(0),
424   fHOutCentNPA(0),
425   fHOutCentZNA(0),
426   fHOutCentV0MvsFMD(0),
427   fHOutCentTKLvsV0M(0),
428   fHOutCentZEMvsZDC(0),
429   fHOutCentV0MvsCentCL1(0),
430   fHOutCentV0MvsCentTRK(0),
431   fHOutCentTRKvsCentCL1(0),
432   fHOutCentV0MvsCentZDC(0),
433   fHOutCentV0AvsCentV0C(0),
434   fHOutCentV0AvsCentTRK(0),
435   fHOutCentV0AvsCentCND(0),
436   fHOutCentV0AvsCentCL1(0),
437   fHOutCentV0CvsCentTRK(0),
438   fHOutCentV0CvsCentCND(0),
439   fHOutCentV0CvsCentCL1(0),
440   fHOutCentNPAvsCentV0A(0),
441   fHOutCentNPAvsCentV0C(0),
442   fHOutCentNPAvsCentTRK(0),
443   fHOutCentNPAvsCentCND(0),
444   fHOutCentNPAvsCentCL1(0),
445   fHOutCentZNAvsCentV0A(0),
446   fHOutCentZNAvsCentV0C(0),
447   fHOutCentZNAvsCentTRK(0),
448   fHOutCentZNAvsCentCND(0),
449   fHOutCentZNAvsCentCL1(0),
450   fHOutMultV0AC(0),
451   fHOutMultV0M(0),
452   fHOutMultV0A(0),
453   fHOutMultV0C(0),
454   fHOutMultV0Mnc(0),
455   fHOutMultV0Anc(0),
456   fHOutMultV0Cnc(0),
457   fHOutMultV0O(0),
458   fHOutMultV0Cells(0),
459   fHOutMultFMD(0),
460   fHOutMultTRK(0),
461   fHOutMultTKL(0),
462   fHOutMultCL0(0),
463   fHOutMultCL1(0),
464   fHOutMultCND(0),
465   fHOutMultNPA(0),
466   fHOutMultZNA(0),
467   fHOutMultV0MvsZDN(0),
468   fHOutMultZEMvsZDN(0),
469   fHOutMultV0MvsZDC(0),
470   fHOutMultZEMvsZDC(0),
471   fHOutMultZEMvsZDCw(0),
472   fHOutMultV0MvsCL1(0),
473   fHOutMultV0MvsTRK(0),
474   fHOutMultTRKvsCL1(0),
475   fHOutMultV0MvsV0O(0),
476   fHOutMultV0OvsCL1(0),
477   fHOutMultV0OvsTRK(0),
478   fHOutMultCL1vsTKL(0),
479   fHOutCentV0Mqual1(0),
480   fHOutCentTRKqual1(0),
481   fHOutCentCL1qual1(0),
482   fHOutMultV0MvsCL1qual1(0),
483   fHOutMultV0MvsTRKqual1(0),
484   fHOutMultTRKvsCL1qual1(0),
485   fHOutCentV0Mqual2(0),
486   fHOutCentTRKqual2(0),
487   fHOutCentCL1qual2(0),
488   fHOutMultV0MvsCL1qual2(0),
489   fHOutMultV0MvsTRKqual2(0),
490   fHOutMultTRKvsCL1qual2(0),
491   fHOutQuality(0),
492   fHOutVertex(0),
493   fHOutVertexT0(0)
494 {
495   // Default constructor
496   AliInfo("Centrality Selection enabled.");
497   //DefineOutput(1, TList::Class());
498   fUseScaling=kTRUE;
499   fUseCleaning=kTRUE;
500   fFillHistos=kFALSE;
501   fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO.,AliESDTZERO."
502     ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
503 }
504
505 //________________________________________________________________________
506 AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
507 {
508   // Assignment operator
509   if (this!=&c) {
510     AliAnalysisTaskSE::operator=(c);
511   }
512   return *this;
513 }
514
515 //________________________________________________________________________
516 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
517   AliAnalysisTaskSE(ana),
518   fAnalysisInput(ana.fAnalysisInput),
519   fIsMCInput(ana.fIsMCInput),
520   fCurrentRun(ana.fCurrentRun),
521   fUseScaling(ana.fUseScaling),
522   fUseCleaning(ana.fUseCleaning),
523   fFillHistos(ana.fFillHistos),
524   fV0MScaleFactor(ana.fV0MScaleFactor),
525   fSPDScaleFactor(ana.fSPDScaleFactor),
526   fTPCScaleFactor(ana.fTPCScaleFactor),
527   fV0MScaleFactorMC(ana.fV0MScaleFactorMC),
528   fV0MSPDOutlierPar0(ana.fV0MSPDOutlierPar0),  
529   fV0MSPDOutlierPar1(ana.fV0MSPDOutlierPar1),  
530   fV0MTPCOutlierPar0(ana.fV0MTPCOutlierPar0),  
531   fV0MTPCOutlierPar1(ana.fV0MTPCOutlierPar1),  
532   fV0MSPDSigmaOutlierPar0(ana.fV0MSPDSigmaOutlierPar0),  
533   fV0MSPDSigmaOutlierPar1(ana.fV0MSPDSigmaOutlierPar1),  
534   fV0MSPDSigmaOutlierPar2(ana.fV0MSPDSigmaOutlierPar2),  
535   fV0MTPCSigmaOutlierPar0(ana.fV0MTPCSigmaOutlierPar0),  
536   fV0MTPCSigmaOutlierPar1(ana.fV0MTPCSigmaOutlierPar1),  
537   fV0MTPCSigmaOutlierPar2(ana.fV0MTPCSigmaOutlierPar2), 
538   fV0MZDCOutlierPar0(ana.fV0MZDCOutlierPar0),       
539   fV0MZDCOutlierPar1(ana.fV0MZDCOutlierPar1),       
540   fV0MZDCEcalOutlierPar0(ana.fV0MZDCEcalOutlierPar0),   
541   fV0MZDCEcalOutlierPar1(ana.fV0MZDCEcalOutlierPar1),   
542   fTrackCuts(ana.fTrackCuts),
543   fEsdTrackCuts(ana.fEsdTrackCuts),
544   fEsdTrackCutsExtra1(ana.fEsdTrackCutsExtra1),
545   fEsdTrackCutsExtra2(ana.fEsdTrackCutsExtra2),
546   fZVCut(ana.fZVCut),
547   fOutliersCut(ana.fOutliersCut),
548   fQuality(ana.fQuality),
549   fIsSelected(ana.fIsSelected),
550   fMSL(ana.fMSL),
551   fMSH(ana.fMSH),
552   fMUL(ana.fMUL),
553   fMLL(ana.fMLL),
554   fEJE(ana.fEJE),
555   fEGA(ana.fEGA),
556   fPHS(ana.fPHS),
557   fMB(ana.fMB),
558   fCVHN(ana.fCVHN),
559   fCVLN(ana.fCVLN),
560   fCVHNbit(ana.fCVHNbit),
561   fCVLNbit(ana.fCVLNbit),
562   fCCENT(ana.fCCENT),
563   fCSEMI(ana.fCSEMI),
564   fCCENTbit(ana.fCCENTbit),
565   fCSEMIbit(ana.fCSEMIbit),
566   fCentV0M(ana.fCentV0M),
567   fCentV0A(ana.fCentV0A),
568   fCentV0C(ana.fCentV0C),
569   fCentFMD(ana.fCentFMD),
570   fCentTRK(ana.fCentTRK),
571   fCentTKL(ana.fCentTKL),
572   fCentCL0(ana.fCentCL0),
573   fCentCL1(ana.fCentCL1),
574   fCentCND(ana.fCentCND),
575   fCentZNA(ana.fCentZNA),
576   fCentNPA(ana.fCentNPA),
577   fCentV0MvsFMD(ana.fCentV0MvsFMD),
578   fCentTKLvsV0M(ana.fCentTKLvsV0M),
579   fCentZEMvsZDC(ana.fCentZEMvsZDC),
580   fCentV0Mtrue(ana.fCentV0Mtrue),
581   fCentV0Atrue(ana.fCentV0Atrue),
582   fCentV0Ctrue(ana.fCentV0Ctrue),
583   fCentFMDtrue(ana.fCentFMDtrue),
584   fCentTRKtrue(ana.fCentTRKtrue),
585   fCentTKLtrue(ana.fCentTKLtrue),
586   fCentCL0true(ana.fCentCL0true),
587   fCentCL1true(ana.fCentCL1true),
588   fCentCNDtrue(ana.fCentCNDtrue),
589   fCentZNAtrue(ana.fCentZNAtrue),
590   fHtempV0M(ana.fHtempV0M),
591   fHtempV0A(ana.fHtempV0A),
592   fHtempV0C(ana.fHtempV0C),
593   fHtempFMD(ana.fHtempFMD),
594   fHtempTRK(ana.fHtempTRK),
595   fHtempTKL(ana.fHtempTKL),
596   fHtempCL0(ana.fHtempCL0),
597   fHtempCL1(ana.fHtempCL1),
598   fHtempCND(ana.fHtempCND),
599   fHtempZNA(ana.fHtempZNA),
600   fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
601   fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
602   fHtempZEMvsZDC(ana.fHtempZEMvsZDC),
603   fHtempNPA(ana.fHtempNPA),
604   fHtempV0Mtrue(ana.fHtempV0Mtrue),
605   fHtempV0Atrue(ana.fHtempV0Atrue),
606   fHtempV0Ctrue(ana.fHtempV0Ctrue),
607   fHtempFMDtrue(ana.fHtempFMDtrue),
608   fHtempTRKtrue(ana.fHtempTRKtrue),
609   fHtempTKLtrue(ana.fHtempTKLtrue),
610   fHtempCL0true(ana.fHtempCL0true),
611   fHtempCL1true(ana.fHtempCL1true),
612   fHtempCNDtrue(ana.fHtempCNDtrue),
613   fHtempZNAtrue(ana.fHtempZNAtrue),
614   fOutputList(ana.fOutputList),
615   fHOutCentV0M(ana.fHOutCentV0M),
616   fHOutCentV0A(ana.fHOutCentV0A),
617   fHOutCentV0C(ana.fHOutCentV0C),
618   fHOutCentV0MCVHN(ana.fHOutCentV0MCVHN),
619   fHOutCentV0MCVLN(ana.fHOutCentV0MCVLN),
620   fHOutCentV0MCVHNinMB(ana.fHOutCentV0MCVHNinMB),
621   fHOutCentV0MCVLNinMB(ana.fHOutCentV0MCVLNinMB),
622   fHOutCentV0MCCENT(ana.fHOutCentV0MCCENT),
623   fHOutCentV0MCSEMI(ana.fHOutCentV0MCSEMI),
624   fHOutCentV0MCCENTinMB(ana.fHOutCentV0MCCENTinMB),
625   fHOutCentV0MCSEMIinMB(ana.fHOutCentV0MCSEMIinMB),
626   fHOutCentV0MMSL(ana.fHOutCentV0MMSL),
627   fHOutCentV0MMSH(ana.fHOutCentV0MMSH),
628   fHOutCentV0MMUL(ana.fHOutCentV0MMUL),
629   fHOutCentV0MMLL(ana.fHOutCentV0MMLL),
630   fHOutCentV0MEJE(ana.fHOutCentV0MEJE),
631   fHOutCentV0MEGA(ana.fHOutCentV0MEGA),
632   fHOutCentV0MPHS(ana.fHOutCentV0MPHS),
633   fHOutCentV0MMSLinMB(ana.fHOutCentV0MMSLinMB),
634   fHOutCentV0MMSHinMB(ana.fHOutCentV0MMSHinMB),
635   fHOutCentV0MMULinMB(ana.fHOutCentV0MMULinMB),
636   fHOutCentV0MMLLinMB(ana.fHOutCentV0MMLLinMB),
637   fHOutCentV0MEJEinMB(ana.fHOutCentV0MEJEinMB),
638   fHOutCentV0MEGAinMB(ana.fHOutCentV0MEGAinMB),
639   fHOutCentV0MPHSinMB(ana.fHOutCentV0MPHSinMB),
640   fHOutCentFMD(ana.fHOutCentFMD),
641   fHOutCentTRK(ana.fHOutCentTRK),
642   fHOutCentTKL(ana.fHOutCentTKL),
643   fHOutCentCL0(ana.fHOutCentCL0),
644   fHOutCentCL1(ana.fHOutCentCL1),
645   fHOutCentCND(ana.fHOutCentCND),
646   fHOutCentNPA(ana.fHOutCentNPA),
647   fHOutCentZNA(ana.fHOutCentZNA),
648   fHOutCentV0MvsFMD(ana.fHOutCentV0MvsFMD),
649   fHOutCentTKLvsV0M(ana.fHOutCentTKLvsV0M),
650   fHOutCentZEMvsZDC(ana.fHOutCentZEMvsZDC),
651   fHOutCentV0MvsCentCL1(ana.fHOutCentV0MvsCentCL1),
652   fHOutCentV0MvsCentTRK(ana.fHOutCentV0MvsCentTRK),
653   fHOutCentTRKvsCentCL1(ana.fHOutCentTRKvsCentCL1),
654   fHOutCentV0MvsCentZDC(ana.fHOutCentV0MvsCentZDC),
655   fHOutCentV0AvsCentV0C(ana.fHOutCentV0AvsCentV0C),
656   fHOutCentV0AvsCentTRK(ana.fHOutCentV0AvsCentTRK),
657   fHOutCentV0AvsCentCND(ana.fHOutCentV0AvsCentCND),
658   fHOutCentV0AvsCentCL1(ana.fHOutCentV0AvsCentCL1),
659   fHOutCentV0CvsCentTRK(ana.fHOutCentV0CvsCentTRK),
660   fHOutCentV0CvsCentCND(ana.fHOutCentV0CvsCentCND),
661   fHOutCentV0CvsCentCL1(ana.fHOutCentV0CvsCentCL1),
662   fHOutCentNPAvsCentV0A(ana.fHOutCentNPAvsCentV0A),
663   fHOutCentNPAvsCentV0C(ana.fHOutCentNPAvsCentV0C),
664   fHOutCentNPAvsCentTRK(ana.fHOutCentNPAvsCentTRK),
665   fHOutCentNPAvsCentCND(ana.fHOutCentNPAvsCentCND),
666   fHOutCentNPAvsCentCL1(ana.fHOutCentNPAvsCentCL1),
667   fHOutCentZNAvsCentV0A(ana.fHOutCentZNAvsCentV0A),
668   fHOutCentZNAvsCentV0C(ana.fHOutCentZNAvsCentV0C),
669   fHOutCentZNAvsCentTRK(ana.fHOutCentZNAvsCentTRK),
670   fHOutCentZNAvsCentCND(ana.fHOutCentZNAvsCentCND),
671   fHOutCentZNAvsCentCL1(ana.fHOutCentZNAvsCentCL1),
672   fHOutMultV0AC(ana.fHOutMultV0AC),
673   fHOutMultV0M(ana.fHOutMultV0M),
674   fHOutMultV0A(ana.fHOutMultV0A),
675   fHOutMultV0C(ana.fHOutMultV0C),
676   fHOutMultV0Mnc(ana.fHOutMultV0Mnc),
677   fHOutMultV0Anc(ana.fHOutMultV0Anc),
678   fHOutMultV0Cnc(ana.fHOutMultV0Cnc),
679   fHOutMultV0O(ana.fHOutMultV0O),
680   fHOutMultV0Cells(ana.fHOutMultV0Cells),
681   fHOutMultFMD(ana.fHOutMultFMD),
682   fHOutMultTRK(ana.fHOutMultTRK),
683   fHOutMultTKL(ana.fHOutMultTKL),
684   fHOutMultCL0(ana.fHOutMultCL0),
685   fHOutMultCL1(ana.fHOutMultCL1),
686   fHOutMultCND(ana.fHOutMultCND),
687   fHOutMultNPA(ana.fHOutMultNPA),
688   fHOutMultZNA(ana.fHOutMultZNA),
689   fHOutMultV0MvsZDN(ana.fHOutMultV0MvsZDN),
690   fHOutMultZEMvsZDN(ana.fHOutMultZEMvsZDN),
691   fHOutMultV0MvsZDC(ana.fHOutMultV0MvsZDC),
692   fHOutMultZEMvsZDC(ana.fHOutMultZEMvsZDC),
693   fHOutMultZEMvsZDCw(ana.fHOutMultZEMvsZDCw),
694   fHOutMultV0MvsCL1(ana.fHOutMultV0MvsCL1),
695   fHOutMultV0MvsTRK(ana.fHOutMultV0MvsTRK),
696   fHOutMultTRKvsCL1(ana.fHOutMultTRKvsCL1),
697   fHOutMultV0MvsV0O(ana.fHOutMultV0MvsV0O),
698   fHOutMultV0OvsCL1(ana.fHOutMultV0OvsCL1),
699   fHOutMultV0OvsTRK(ana.fHOutMultV0OvsTRK),
700   fHOutMultCL1vsTKL(ana.fHOutMultCL1vsTKL),
701   fHOutCentV0Mqual1(ana.fHOutCentV0Mqual1),
702   fHOutCentTRKqual1(ana.fHOutCentTRKqual1),
703   fHOutCentCL1qual1(ana.fHOutCentCL1qual1),
704   fHOutMultV0MvsCL1qual1(ana.fHOutMultV0MvsCL1qual1),
705   fHOutMultV0MvsTRKqual1(ana.fHOutMultV0MvsTRKqual1),
706   fHOutMultTRKvsCL1qual1(ana.fHOutMultTRKvsCL1qual1),
707   fHOutCentV0Mqual2(ana.fHOutCentV0Mqual2),
708   fHOutCentTRKqual2(ana.fHOutCentTRKqual2),
709   fHOutCentCL1qual2(ana.fHOutCentCL1qual2),
710   fHOutMultV0MvsCL1qual2(ana.fHOutMultV0MvsCL1qual2),
711   fHOutMultV0MvsTRKqual2(ana.fHOutMultV0MvsTRKqual2),
712   fHOutMultTRKvsCL1qual2(ana.fHOutMultTRKvsCL1qual2),
713   fHOutQuality(ana.fHOutQuality),
714   fHOutVertex(ana.fHOutVertex),
715   fHOutVertexT0(ana.fHOutVertexT0)
716 {
717   // Copy Constructor   
718
719 }
720
721 //________________________________________________________________________
722 AliCentralitySelectionTask::~AliCentralitySelectionTask()
723 {
724   // Destructor  
725   if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList;
726   if (fTrackCuts) delete fTrackCuts;
727   if (fEsdTrackCuts) delete fEsdTrackCuts;
728   if (fEsdTrackCutsExtra1) delete fEsdTrackCutsExtra1;
729   if (fEsdTrackCutsExtra2) delete fEsdTrackCutsExtra2;
730 }  
731
732 //________________________________________________________________________
733 void AliCentralitySelectionTask::UserCreateOutputObjects()
734 {  
735   // Create the output containers
736   if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
737   AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
738
739   if (fFillHistos) {    
740     fOutputList = new TList();
741     fOutputList->SetOwner();
742     fHOutCentV0M     = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",505,0,101);
743     fHOutCentV0A    = new TH1F("fHOutCentV0A","fHOutCentV0A; Centrality V0A",505,0,101);
744     fHOutCentV0C    = new TH1F("fHOutCentV0C","fHOutCentV0C; Centrality V0C",505,0,101);
745     fHOutCentV0MCVHN= new TH1F("fHOutCentV0M_CVHN","fHOutCentV0M_CVHN; Centrality V0",505,0,101);
746     fHOutCentV0MCVLN= new TH1F("fHOutCentV0M_CVLN","fHOutCentV0M_CVLN; Centrality V0",505,0,101);
747     fHOutCentV0MCVHNinMB= new TH1F("fHOutCentV0M_CVHNinMB","fHOutCentV0M_CVHN; Centrality V0",505,0,101);
748     fHOutCentV0MCVLNinMB= new TH1F("fHOutCentV0M_CVLNinMB","fHOutCentV0M_CVLN; Centrality V0",505,0,101);
749     fHOutCentV0MCCENT= new TH1F("fHOutCentV0M_CCENT","fHOutCentV0M_CCENT; Centrality V0",505,0,101);
750     fHOutCentV0MCSEMI= new TH1F("fHOutCentV0M_CSEMI","fHOutCentV0M_CSEMI; Centrality V0",505,0,101);
751     fHOutCentV0MCCENTinMB= new TH1F("fHOutCentV0M_CCENTinMB","fHOutCentV0M_CCENT; Centrality V0",505,0,101);
752     fHOutCentV0MCSEMIinMB= new TH1F("fHOutCentV0M_CSEMIinMB","fHOutCentV0M_CSEMI; Centrality V0",505,0,101);
753     fHOutCentV0MMSL= new TH1F("fHOutCentV0M_MSL","fHOutCentV0M_MSL; Centrality V0",505,0,101);
754     fHOutCentV0MMSH= new TH1F("fHOutCentV0M_MSH","fHOutCentV0M_MSH; Centrality V0",505,0,101);
755     fHOutCentV0MMUL= new TH1F("fHOutCentV0M_MUL","fHOutCentV0M_MUL; Centrality V0",505,0,101);
756     fHOutCentV0MMLL= new TH1F("fHOutCentV0M_MLL","fHOutCentV0M_MLL; Centrality V0",505,0,101);
757     fHOutCentV0MEJE= new TH1F("fHOutCentV0M_EJE","fHOutCentV0M_EJE; Centrality V0",505,0,101);
758     fHOutCentV0MEGA= new TH1F("fHOutCentV0M_EGA","fHOutCentV0M_EGA; Centrality V0",505,0,101);
759     fHOutCentV0MPHS= new TH1F("fHOutCentV0M_PHS","fHOutCentV0M_PHS; Centrality V0",505,0,101);
760     fHOutCentV0MMSLinMB= new TH1F("fHOutCentV0M_MSLinMB","fHOutCentV0M_MSLinMB; Centrality V0",505,0,101);
761     fHOutCentV0MMSHinMB= new TH1F("fHOutCentV0M_MSHinMB","fHOutCentV0M_MSHinMB; Centrality V0",505,0,101);
762     fHOutCentV0MMULinMB= new TH1F("fHOutCentV0M_MULinMB","fHOutCentV0M_MULinMB; Centrality V0",505,0,101);
763     fHOutCentV0MMLLinMB= new TH1F("fHOutCentV0M_MLLinMB","fHOutCentV0M_MLLinMB; Centrality V0",505,0,101);
764     fHOutCentV0MEJEinMB= new TH1F("fHOutCentV0M_EJEinMB","fHOutCentV0M_EJEinMB; Centrality V0",505,0,101);
765     fHOutCentV0MEGAinMB= new TH1F("fHOutCentV0M_EGAinMB","fHOutCentV0M_EGAinMB; Centrality V0",505,0,101);
766     fHOutCentV0MPHSinMB= new TH1F("fHOutCentV0M_PHSinMB","fHOutCentV0M_PHSinMB; Centrality V0",505,0,101);
767     fHOutCentFMD     = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",505,0,101);
768     fHOutCentTRK     = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",505,0,101);
769     fHOutCentTKL     = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",505,0,101);
770     fHOutCentCL0     = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",505,0,101);
771     fHOutCentCL1     = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",505,0,101);
772     fHOutCentCND     = new TH1F("fHOutCentCND","fHOutCentCND; Centrality candle",505,0,101);
773     fHOutCentNPA     = new TH1F("fHOutCentNPA","fHOutCentNPA; Centrality Npart",505,0,101);
774     fHOutCentZNA     = new TH1F("fHOutCentZNA","fHOutCentZNA; Centrality ZNA",505,0,101);
775     fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",505,0,101);
776     fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",505,0,101);
777     fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",505,0,101);
778     fHOutCentV0MvsCentCL1= new TH2F("fHOutCentV0MvsCentCL1","fHOutCentV0MvsCentCL1; Cent V0; Cent SPD",505,0,101,505,0,101);
779     fHOutCentV0MvsCentTRK= new TH2F("fHOutCentV0MvsCentTRK","fHOutCentV0MvsCentTRK; Cent V0; Cent TPC",505,0,101,505,0,101);
780     fHOutCentTRKvsCentCL1= new TH2F("fHOutCentTRKvsCentCL1","fHOutCentTRKvsCentCL1; Cent TPC; Cent SPD",505,0,101,505,0,101);
781     fHOutCentV0MvsCentZDC= new TH2F("fHOutCentV0MvsCentZDC","fHOutCentV0MvsCentZDC; Cent V0; Cent ZDC",505,0,101,505,0,101);
782     fHOutCentV0AvsCentV0C= new TH2F("fHOutCentV0AvsCentV0C","fHOutCentV0AvsCentV0C; Cent V0A; Cent V0C;", 505,0,101,505,0,101);
783     fHOutCentV0AvsCentTRK= new TH2F("fHOutCentV0AvsCentTRK","fHOutCentV0AvsCentTRK; Cent V0A; Cent TRK;", 505,0,101,505,0,101);
784     fHOutCentV0AvsCentCND= new TH2F("fHOutCentV0AvsCentCND","fHOutCentV0AvsCentCND; Cent V0A; Cent CND;", 505,0,101,505,0,101);
785     fHOutCentV0AvsCentCL1= new TH2F("fHOutCentV0AvsCentCL1","fHOutCentV0AvsCentCL1; Cent V0A; Cent CL1;", 505,0,101,505,0,101);
786     fHOutCentV0CvsCentTRK= new TH2F("fHOutCentV0CvsCentTRK","fHOutCentV0CvsCentTRK; Cent V0C; Cent TRK;", 505,0,101,505,0,101);
787     fHOutCentV0CvsCentCND= new TH2F("fHOutCentV0CvsCentCND","fHOutCentV0CvsCentCND; Cent V0C; Cent CND;", 505,0,101,505,0,101);
788     fHOutCentV0CvsCentCL1= new TH2F("fHOutCentV0CvsCentCL1","fHOutCentV0CvsCentCL1; Cent V0C; Cent CL1;", 505,0,101,505,0,101);
789     fHOutCentNPAvsCentV0A= new TH2F("fHOutCentNPAvsCentV0A","fHOutCentNPAvsCentV0A; Cent NPA; Cent V0A;", 505,0,101,505,0,101);
790     fHOutCentNPAvsCentV0C= new TH2F("fHOutCentNPAvsCentV0C","fHOutCentNPAvsCentV0C; Cent NPA; Cent V0C;", 505,0,101,505,0,101);
791     fHOutCentNPAvsCentTRK= new TH2F("fHOutCentNPAvsCentTRK","fHOutCentNPAvsCentTRK; Cent NPA; Cent TRK;", 505,0,101,505,0,101);
792     fHOutCentNPAvsCentCND= new TH2F("fHOutCentNPAvsCentCND","fHOutCentNPAvsCentCND; Cent NPA; Cent CND;", 505,0,101,505,0,101);
793     fHOutCentNPAvsCentCL1= new TH2F("fHOutCentNPAvsCentCL1","fHOutCentNPAvsCentCL1; Cent NPA; Cent CL1;", 505,0,101,505,0,101);
794     fHOutCentZNAvsCentV0A= new TH2F("fHOutCentZNAvsCentV0A","fHOutCentZNAvsCentV0A; Cent ZNA; Cent V0A;", 505,0,101,505,0,101);
795     fHOutCentZNAvsCentV0C= new TH2F("fHOutCentZNAvsCentV0C","fHOutCentZNAvsCentV0C; Cent ZNA; Cent V0C;", 505,0,101,505,0,101);
796     fHOutCentZNAvsCentTRK= new TH2F("fHOutCentZNAvsCentTRK","fHOutCentZNAvsCentTRK; Cent ZNA; Cent TRK;", 505,0,101,505,0,101);
797     fHOutCentZNAvsCentCND= new TH2F("fHOutCentZNAvsCentCND","fHOutCentZNAvsCentCND; Cent ZNA; Cent CND;", 505,0,101,505,0,101);
798     fHOutCentZNAvsCentCL1= new TH2F("fHOutCentZNAvsCentCL1","fHOutCentZNAvsCentCL1; Cent ZNA; Cent CL1;", 505,0,101,505,0,101);
799
800     fHOutMultV0AC = new TH2F("fHOutMultV0AC","fHOutMultV0AC; Multiplicity V0A; Multiplicity V0C",1000,0,1000,1000,0,1000);
801     fHOutMultV0M  = new TH1F("fHOutMultV0M","fHOutMultV0M; Multiplicity V0",25000,0,25000);
802     fHOutMultV0A  = new TH1F("fHOutMultV0A","fHOutMultV0A; Multiplicity V0",25000,0,25000);
803     fHOutMultV0C  = new TH1F("fHOutMultV0C","fHOutMultV0C; Multiplicity V0",25000,0,25000);
804     fHOutMultV0Mnc= new TH1F("fHOutMultV0Mnc","fHOutMultV0Mnc; Multiplicity V0",25000,0,25000);
805     fHOutMultV0Anc= new TH1F("fHOutMultV0Anc","fHOutMultV0Anc; Multiplicity V0",25000,0,25000);
806     fHOutMultV0Cnc= new TH1F("fHOutMultV0Cnc","fHOutMultV0Cnc; Multiplicity V0",25000,0,25000);
807     fHOutMultV0O  = new TH1F("fHOutMultV0O","fHOutMultV0O; Multiplicity V0",40000,0,40000);
808     fHOutMultV0Cells = new TH2F("fHOutMultV0Cells","fHOutMultV0Cells",33,-0.5,32.5,33,-0.5,32.5); 
809     fHOutMultFMD = new TH1F("fHOutMultFMD","fHOutMultFMD; Multiplicity FMD",24000,0,24000);
810     fHOutMultTRK = new TH1F("fHOutMultTRK","fHOutMultTRK; Multiplicity TPC",4000,0,4000);
811     fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000);
812     fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000);
813     fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000);
814     fHOutMultCND = new TH1F("fHOutMultCND","fHOutMultCND; Multiplicity candle",4000,0,4000);
815     fHOutMultNPA = new TH1F("fHOutMultNPA","fHOutMultNPA; Nparticipants",450,0,450);
816     fHOutMultZNA = new TH1F("fHOutMultZNA","fHOutMultZNA; ZNA Energy",500,0,2000);
817
818     fHOutMultV0MvsZDN = new TH2F("fHOutMultV0MvsZDN","fHOutMultV0MvsZDN; Multiplicity V0; Energy ZDC-N",500,0,30000,500,0,180000);
819     fHOutMultZEMvsZDN = new TH2F("fHOutMultZEMvsZDN","fHOutMultZEMvsZDN; Energy ZEM; Energy ZDC-N",500,0,2500,500,0,180000);
820     fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,30000,500,0,200000);
821     fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,200000);
822     fHOutMultZEMvsZDCw = new TH2F("fHOutMultZEMvsZDCw","fHOutMultZEMvsZDCw; Energy ZEM; Energy ZDC (weigthed with V0 percentile)",500,0,2500,500,0,200000);
823     fHOutMultV0MvsCL1 = new TH2F("fHOutMultV0MvsCL1","fHOutMultV0MvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,30000,700,0,7000);
824     fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,30000,400,0,4000);
825     fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
826     fHOutMultV0MvsV0O = new TH2F("fHOutMultV0MvsV0O","fHOutMultV0MvsV0O; Multiplicity V0; Multiplicity V0 Online",500,0,30000,500,0,40000);
827     fHOutMultV0OvsCL1 = new TH2F("fHOutMultV0OvsCL1","fHOutMultV0OvsCL1; Multiplicity V0; Multiplicity SPD outer",500,0,40000,700,0,7000);
828     fHOutMultV0OvsTRK = new TH2F("fHOutMultV0OvsTRK","fHOutMultV0OvsTRK; Multiplicity V0; Multiplicity TPC",500,0,40000,400,0,4000);
829     fHOutMultV0MvsV0O = new TH2F("fHOutMultV0MvsV0O","fHOutMultV0MvsV0O; Multiplicity V0; Multiplicity V0 Online",500,0,30000,500,0,30000);
830     fHOutMultV0OvsCL1 = new TH2F("fHOutMultV0OvsCL1","fHOutMultV0OvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,30000,700,0,7000);
831     fHOutMultV0OvsTRK = new TH2F("fHOutMultV0OvsTRK","fHOutMultV0OvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,30000,400,0,4000);
832     fHOutMultCL1vsTKL = new TH2F ("fHOutMultCL1vsTKL","fHOutMultCL1vsTKL; Multiplicity SPD outer; Multiplicity tracklets",700,0,7000,700,0,7000);
833     
834     fHOutCentV0Mqual1 = new TH1F("fHOutCentV0M_qual1","fHOutCentV0M_qual1; Centrality V0",505,0,101);
835     fHOutCentTRKqual1 = new TH1F("fHOutCentTRK_qual1","fHOutCentTRK_qual1; Centrality TPC",505,0,101);
836     fHOutCentCL1qual1 = new TH1F("fHOutCentCL1_qual1","fHOutCentCL1_qual1; Centrality SPD outer",505,0,101);
837     fHOutMultV0MvsCL1qual1 = new TH2F("fHOutMultV0MvsCL1_qual1","fHOutMultV0MvsCL1_qual1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
838     fHOutMultV0MvsTRKqual1 = new TH2F("fHOutMultV0MvsTRK_qual1","fHOutMultV0MvsTRK_qual1; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
839     fHOutMultTRKvsCL1qual1 = new TH2F("fHOutMultTRKvsCL1_qual1","fHOutMultTRKvsCL1_qual1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
840     
841     fHOutCentV0Mqual2 = new TH1F("fHOutCentV0M_qual2","fHOutCentV0M_qual2; Centrality V0",505,0,101);
842     fHOutCentTRKqual2 = new TH1F("fHOutCentTRK_qual2","fHOutCentTRK_qual2; Centrality TPC",505,0,101);
843     fHOutCentCL1qual2 = new TH1F("fHOutCentCL1_qual2","fHOutCentCL1_qual2; Centrality SPD outer",505,0,101);
844     fHOutMultV0MvsCL1qual2 = new TH2F("fHOutMultV0MvsCL1_qual2","fHOutMultV0MvsCL1_qual2; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
845     fHOutMultV0MvsTRKqual2 = new TH2F("fHOutMultV0MvsTRK_qual2","fHOutMultV0MvsTRK_qual2; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
846     fHOutMultTRKvsCL1qual2 = new TH2F("fHOutMultTRKvsCL1_qual2","fHOutMultTRKvsCL1_qual2; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
847     
848     fHOutQuality = new TH1F("fHOutQuality", "fHOutQuality", 100,-0.5,99.5);
849     fHOutVertex  = new TH1F("fHOutVertex", "fHOutVertex", 100,-20,20);
850     fHOutVertexT0  = new TH1F("fHOutVertexT0", "fHOutVertexT0", 100,-20,20);
851   
852     fOutputList->Add(fHOutCentV0M);
853     fOutputList->Add(fHOutCentV0A);
854     fOutputList->Add(fHOutCentV0C);
855     fOutputList->Add(fHOutCentV0MCVHN);
856     fOutputList->Add(fHOutCentV0MCVLN);
857     fOutputList->Add(fHOutCentV0MCVHNinMB);
858     fOutputList->Add(fHOutCentV0MCVLNinMB);
859     fOutputList->Add(fHOutCentV0MCCENT);
860     fOutputList->Add(fHOutCentV0MCSEMI);
861     fOutputList->Add(fHOutCentV0MCCENTinMB);
862     fOutputList->Add(fHOutCentV0MCSEMIinMB);
863     fOutputList->Add(fHOutCentV0MMSL);
864     fOutputList->Add(fHOutCentV0MMSH);
865     fOutputList->Add(fHOutCentV0MMUL);
866     fOutputList->Add(fHOutCentV0MMLL);
867     fOutputList->Add(fHOutCentV0MEJE);
868     fOutputList->Add(fHOutCentV0MEGA);
869     fOutputList->Add(fHOutCentV0MPHS);
870     fOutputList->Add(fHOutCentV0MMSLinMB);
871     fOutputList->Add(fHOutCentV0MMSHinMB);
872     fOutputList->Add(fHOutCentV0MMULinMB);
873     fOutputList->Add(fHOutCentV0MMLLinMB);
874     fOutputList->Add(fHOutCentV0MEJEinMB);
875     fOutputList->Add(fHOutCentV0MEGAinMB);
876     fOutputList->Add(fHOutCentV0MPHSinMB);
877     fOutputList->Add(fHOutCentFMD);
878     fOutputList->Add(fHOutCentTRK);
879     fOutputList->Add(fHOutCentTKL);
880     fOutputList->Add(fHOutCentCL0);
881     fOutputList->Add(fHOutCentCL1);
882     fOutputList->Add(fHOutCentCND);
883     fOutputList->Add(fHOutCentNPA);
884     fOutputList->Add(fHOutCentZNA);
885     fOutputList->Add(fHOutCentV0MvsFMD);
886     fOutputList->Add(fHOutCentTKLvsV0M);
887     fOutputList->Add(fHOutCentZEMvsZDC);
888     fOutputList->Add(fHOutCentV0MvsCentCL1);
889     fOutputList->Add(fHOutCentV0MvsCentTRK);
890     fOutputList->Add(fHOutCentTRKvsCentCL1);
891     fOutputList->Add(fHOutCentV0MvsCentZDC);
892     fOutputList->Add(fHOutCentV0AvsCentV0C);
893     fOutputList->Add(fHOutCentV0AvsCentTRK);
894     fOutputList->Add(fHOutCentV0AvsCentCND);
895     fOutputList->Add(fHOutCentV0AvsCentCL1);
896     fOutputList->Add(fHOutCentV0CvsCentTRK);
897     fOutputList->Add(fHOutCentV0CvsCentCND);
898     fOutputList->Add(fHOutCentV0CvsCentCL1);
899     fOutputList->Add(fHOutCentNPAvsCentV0A);
900     fOutputList->Add(fHOutCentNPAvsCentV0C);
901     fOutputList->Add(fHOutCentNPAvsCentTRK);
902     fOutputList->Add(fHOutCentNPAvsCentCND);
903     fOutputList->Add(fHOutCentNPAvsCentCL1);
904     fOutputList->Add(fHOutCentZNAvsCentV0A);
905     fOutputList->Add(fHOutCentZNAvsCentV0C);
906     fOutputList->Add(fHOutCentZNAvsCentTRK);
907     fOutputList->Add(fHOutCentZNAvsCentCND);
908     fOutputList->Add(fHOutCentZNAvsCentCL1);
909
910     fOutputList->Add(fHOutMultV0AC); 
911     fOutputList->Add(fHOutMultV0M); 
912     fOutputList->Add(fHOutMultV0A); 
913     fOutputList->Add(fHOutMultV0C); 
914     fOutputList->Add(fHOutMultV0Mnc); 
915     fOutputList->Add(fHOutMultV0Anc); 
916     fOutputList->Add(fHOutMultV0Cnc); 
917     fOutputList->Add(fHOutMultV0O);
918     fOutputList->Add(fHOutMultV0Cells) ;   
919     fOutputList->Add(fHOutMultFMD); 
920     fOutputList->Add(fHOutMultTRK); 
921     fOutputList->Add(fHOutMultTKL); 
922     fOutputList->Add(fHOutMultCL0); 
923     fOutputList->Add(fHOutMultCL1); 
924     fOutputList->Add(fHOutMultCND); 
925     fOutputList->Add(fHOutMultNPA); 
926     fOutputList->Add(fHOutMultZNA); 
927     fOutputList->Add(fHOutMultV0MvsZDN);
928     fOutputList->Add(fHOutMultZEMvsZDN);
929     fOutputList->Add(fHOutMultV0MvsZDC);
930     fOutputList->Add(fHOutMultZEMvsZDC);
931     fOutputList->Add(fHOutMultZEMvsZDCw);
932     fOutputList->Add(fHOutMultV0MvsCL1);
933     fOutputList->Add(fHOutMultV0MvsTRK);
934     fOutputList->Add(fHOutMultTRKvsCL1);
935     fOutputList->Add(fHOutMultV0MvsV0O);
936     fOutputList->Add(fHOutMultV0OvsCL1);
937     fOutputList->Add(fHOutMultV0OvsTRK);
938     fOutputList->Add(fHOutMultCL1vsTKL);
939     fOutputList->Add(fHOutCentV0Mqual1);
940     fOutputList->Add(fHOutCentTRKqual1);
941     fOutputList->Add(fHOutCentCL1qual1);                   
942     fOutputList->Add(fHOutMultV0MvsCL1qual1);
943     fOutputList->Add(fHOutMultV0MvsTRKqual1);
944     fOutputList->Add(fHOutMultTRKvsCL1qual1);
945     fOutputList->Add(fHOutCentV0Mqual2);
946     fOutputList->Add(fHOutCentTRKqual2);
947     fOutputList->Add(fHOutCentCL1qual2);
948     fOutputList->Add(fHOutMultV0MvsCL1qual2);
949     fOutputList->Add(fHOutMultV0MvsTRKqual2);
950     fOutputList->Add(fHOutMultTRKvsCL1qual2);
951     fOutputList->Add(fHOutQuality);
952     fOutputList->Add(fHOutVertex);
953     fOutputList->Add(fHOutVertexT0);
954   
955     PostData(1, fOutputList); 
956   }
957   
958   fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
959   fEsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
960   fEsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kOff);
961   // Add SPD requirement
962   fEsdTrackCutsExtra1 = new AliESDtrackCuts("SPD", "Require 1 cluster in SPD");
963   fEsdTrackCutsExtra1->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
964   // Add SDD requirement
965   fEsdTrackCutsExtra2 = new AliESDtrackCuts("SDD", "Require 1 cluster in first layer SDD");
966   fEsdTrackCutsExtra2->SetClusterRequirementITS(AliESDtrackCuts::kSDD,AliESDtrackCuts::kFirst);  
967 }
968
969 //________________________________________________________________________
970 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
971
972   // Execute analysis for current event:
973   if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
974
975   Int_t    runType = 0;             // 0:PbPb, 1:pPb or Pbp 
976
977   Float_t  zncEnergy = 0.;          //  ZNC Energy
978   Float_t  zpcEnergy = 0.;          //  ZPC Energy
979   Float_t  znaEnergy = 0.;          //  ZNA Energy
980   Float_t  zpaEnergy = 0.;          //  ZPA Energy
981   Float_t  zem1Energy = 0.;         //  ZEM1 Energy
982   Float_t  zem2Energy = 0.;         //  ZEM2 Energy
983   Bool_t   zdcEnergyCal = kFALSE;   // if zdc is calibrated (in pass2)
984   Double_t znaTower = 0.;           // common PMT of ZNA 
985   Bool_t   znaFired = kFALSE;
986
987   Int_t    nTracks = 0;             //  no. tracks
988   Int_t    nTracklets = 0;          //  no. tracklets
989   Int_t    nClusters[6] = {0};      //  no. clusters on 6 ITS layers
990   Int_t    nChips[2] = {0,0};       //  no. chips on 2 SPD layers
991   Float_t  spdCorr =0;              //  corrected spd2 multiplicity
992   Int_t    multCND = 0;             //  no. tracks (candle condition)
993
994   Float_t  multV0A  = 0;            //  multiplicity from V0 reco side A
995   Float_t  multV0C  = 0;            //  multiplicity from V0 reco side C
996   Float_t  multV0ACorr  = 0;            //  multiplicity from V0 reco side A
997   Float_t  multV0CCorr  = 0;            //  multiplicity from V0 reco side C
998   Short_t  multV0AOnline  = 0;      //  multiplicity from V0 reco side A
999   Short_t  multV0COnline  = 0;      //  multiplicity from V0 reco side C
1000   Float_t  v0Corr = 0;              // corrected V0 multiplicity (used for MC)
1001   Int_t nV0A = 0;
1002   Int_t nV0C = 0;
1003
1004   Float_t  multFMDA = 0;            //  multiplicity from FMD on detector A
1005   Float_t  multFMDC = 0;            //  multiplicity from FMD on detector C
1006
1007   Float_t zvtx =0;                  // z-vertex SPD
1008   Int_t zvtxNcont =0;               // contributors to z-vertex SPD
1009
1010   Float_t zvtxT0 =0;                // z-vertex T0
1011
1012   Int_t Npart =0;                   // N. of participants (true MC)
1013
1014   AliCentrality *esdCent = 0;
1015
1016   AliVEvent *event = InputEvent();
1017   AliESDEvent *esd = dynamic_cast<AliESDEvent*>(event);
1018   AliAODEvent *aod =  dynamic_cast<AliAODEvent*>(event);
1019   if(fAnalysisInput.CompareTo("ESD")==0){
1020     if (!esd) {
1021       AliError("No ESD Event");
1022       return;
1023     }
1024   } else if(fAnalysisInput.CompareTo("AOD")==0){
1025     if (!aod) {
1026       AliError("No AOD Event");
1027       return;
1028     }
1029   }
1030   LoadBranches();
1031
1032   if (SetupRun(event)<0) {
1033     AliError("Centrality File not available for this run");
1034     return;
1035   }
1036
1037   if (esd) {
1038     if (strcmp(esd->GetESDRun()->GetBeamType(), "A-A") == 0) runType=0;
1039     else runType=1;  
1040   } else {
1041     Int_t runNumber = event->GetRunNumber();
1042     if ((runNumber >= 136851 && runNumber <= 139517) ||  // LHC10h
1043         (runNumber >= 166529 && runNumber <= 170593))    // LHC11h
1044       runType=0;
1045   }
1046
1047   esdCent = event->GetCentrality();
1048
1049   // ***** Vertex Info
1050   if (esd) {
1051     const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
1052     zvtx        = vtxESD->GetZ(); 
1053     zvtxNcont   = vtxESD->GetNContributors();
1054   } else {
1055     const AliAODVertex* spdVtx = aod->GetPrimaryVertexSPD();
1056     zvtx        = spdVtx->GetZ(); 
1057     zvtxNcont   = spdVtx->GetNContributors();
1058   }
1059
1060     // ***** V0 info    
1061   AliVVZERO* esdV0 = event->GetVZEROData();
1062   if (!esdV0) {
1063     AliError("AliVVZERO not available");
1064     return;
1065   }
1066
1067   multV0A=esdV0->GetMTotV0A();
1068   multV0C=esdV0->GetMTotV0C();
1069
1070   multV0ACorr = AliESDUtils::GetCorrV0A(multV0A,zvtx);    
1071   multV0CCorr = AliESDUtils::GetCorrV0C(multV0C,zvtx);    
1072
1073   v0Corr = multV0A+multV0C; // Todo: C.L. not clear why here we do not use the sum of the corrected values?
1074
1075   multV0AOnline=esdV0->GetTriggerChargeA(); 
1076   multV0COnline=esdV0->GetTriggerChargeC(); 
1077
1078   // Count V0 flags
1079   for(Int_t i = 0; i < 32; ++i) {
1080     if (esdV0->GetBBFlag(i)) nV0C++;
1081     if (esdV0->GetBBFlag(i+32)) nV0A++;
1082   }
1083     
1084   Bool_t kT0BB = kFALSE;    
1085   if (esd) {
1086     // ***** T0 info    
1087     const AliESDTZERO* esdT0 = esd->GetESDTZERO();
1088     if (!esdT0)
1089       {
1090         AliError("AliESDTZERO not available");
1091         return;
1092       }
1093     Int_t trig=esdT0->GetT0Trig();
1094     if(trig&1) kT0BB=kTRUE;
1095     zvtxT0=esdT0->GetT0zVertex();
1096   } else {
1097     const AliAODTZERO* esdT0 = aod->GetTZEROData();
1098     if (!esdT0)
1099       {
1100         AliError("AliAODTZERO not available");
1101         return;
1102       }
1103     Int_t trig=1;//esdT0->GetT0Trig(); //* Todo: C.L. This info is not in AOD? */
1104     if(trig&1) kT0BB=kTRUE;
1105     zvtxT0=esdT0->GetT0zVertex();
1106   }
1107
1108   // ***** Trigger info    
1109   fIsSelected = ((esdV0->GetV0ADecision()==1) && (esdV0->GetV0CDecision()==1));
1110   TString trigStr;
1111   if (esd)
1112     trigStr = esd->GetFiredTriggerClasses();
1113   else
1114     trigStr = aod->GetFiredTriggerClasses();
1115     
1116   fMB=kFALSE;
1117   fCVHN=kFALSE; fCVLN=kFALSE; fCCENT=kFALSE; fCSEMI=kFALSE; 
1118   fMSL=kFALSE;  fMSH=kFALSE;  fMUL=kFALSE;   fMLL=kFALSE;
1119   fEJE=kFALSE;  fEGA=kFALSE;  fPHS=kFALSE;
1120
1121   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI")) && (fIsSelected)) 
1122     fMB=kTRUE;
1123   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CVHN")) && (fIsSelected)) 
1124     fCVHN=kTRUE;
1125   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CVLN")) && (fIsSelected))
1126     fCVLN=kTRUE;
1127   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CCENT")) && (fIsSelected)) 
1128     fCCENT=kTRUE;
1129   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CSEMI")) && (fIsSelected))
1130     fCSEMI=kTRUE;
1131     
1132   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1MSL")) && (fIsSelected))
1133     fMSL=kTRUE;
1134   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1MSH")) && (fIsSelected))
1135     fMSH=kTRUE;
1136   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1MUL")) && (fIsSelected))
1137     fMUL=kTRUE;
1138   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1MLL")) && (fIsSelected))
1139     fMLL=kTRUE;
1140   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1EJE")) && (fIsSelected))
1141     fEJE=kTRUE;
1142   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1EGA")) && (fIsSelected))
1143     fEGA=kTRUE;
1144   if ( (trigStr.Contains("-B-")) &&  (trigStr.Contains("CPBI1PHS")) && (fIsSelected))
1145     fPHS=kTRUE;
1146   
1147   fCVHNbit=kFALSE;    fCVLNbit=kFALSE;       fCCENTbit=kFALSE;    fCSEMIbit=kFALSE; 
1148   if (esdV0->GetTriggerBits() & (1<<8)) 
1149     fCVHNbit=kTRUE;
1150   if (esdV0->GetTriggerBits() & (1<<6)) 
1151     fCVLNbit=kTRUE;
1152     
1153   if (kT0BB && fCVHNbit)
1154     fCCENTbit=kTRUE;
1155   if (kT0BB && fCVLNbit)
1156     fCSEMIbit=kTRUE;
1157
1158   if (esd) {  
1159     // ***** CB info (tracklets, clusters, chips)
1160     //nTracks    = event->GetNumberOfTracks();     
1161     nTracks    = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1;
1162   } else {
1163     AliAODHeader *h = aod->GetHeader();
1164     nTracks    = h!=0 ? (Short_t)h->GetTPConlyRefMultiplicity():-1;
1165   }
1166
1167   if (esd) {
1168     Short_t nTrTPCcandle = 0;
1169     for (Int_t iTracks = 0; iTracks < esd->GetNumberOfTracks(); iTracks++) {
1170
1171       AliESDtrack* track = esd->GetTrack(iTracks);
1172       if (!track) continue;
1173       
1174       if (! fEsdTrackCuts->IsSelected(track) )continue;
1175       
1176       if (fEsdTrackCutsExtra1 && fEsdTrackCutsExtra2 &&
1177           !fEsdTrackCutsExtra1->IsSelected(track) &&
1178           !fEsdTrackCutsExtra2->IsSelected(track)) continue;
1179       
1180       if (track->Pt() > 0.4 && TMath::Abs(track->Eta()) < 0.9)  nTrTPCcandle++;
1181     } 
1182     multCND = nTrTPCcandle;
1183   } else {
1184     Short_t nTrTPCcandle = 0;
1185     for (Int_t iTracks = 0; iTracks < aod->GetNumberOfTracks(); iTracks++) {
1186
1187       AliAODTrack* track = aod->GetTrack(iTracks);
1188
1189       if (!track) continue;
1190       if (!track->TestFilterBit(1<<5) && 
1191           !track->TestFilterBit(1<<6)) continue;
1192
1193       if (track->Pt() > 0.4 && TMath::Abs(track->Eta()) < 0.9)  nTrTPCcandle++;
1194     }
1195     multCND = nTrTPCcandle;
1196   }
1197
1198   if (esd) {
1199     const AliMultiplicity *mult = esd->GetMultiplicity();
1200     nTracklets = mult->GetNumberOfTracklets();
1201
1202     for(Int_t ilay=0; ilay<6; ilay++){
1203       nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
1204     }
1205
1206     for(Int_t ilay=0; ilay<2; ilay++){
1207       nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
1208     }
1209   } else {
1210     AliAODTracklets *mult = aod->GetTracklets();
1211     nTracklets = mult->GetNumberOfTracklets();
1212     AliAODHeader *h = aod->GetHeader();
1213     for(Int_t ilay=0; ilay<6; ilay++){
1214       nClusters[ilay] = h->GetNumberOfITSClusters(ilay);
1215     }
1216   }
1217   spdCorr = AliESDUtils::GetCorrSPD2(nClusters[1],zvtx);
1218   
1219   if (esd) {
1220     // ***** FMD info
1221     AliESDFMD *fmd = esd->GetFMDData();
1222     Float_t totalMultA = 0;
1223     Float_t totalMultC = 0;
1224     const Float_t fFMDLowCut = 0.4;
1225   
1226     for(UShort_t det=1;det<=3;det++) {
1227       Int_t nRings = (det==1 ? 1 : 2);
1228       for (UShort_t ir = 0; ir < nRings; ir++) {          
1229         Char_t   ring = (ir == 0 ? 'I' : 'O');
1230         UShort_t nsec = (ir == 0 ? 20  : 40);
1231         UShort_t nstr = (ir == 0 ? 512 : 256);
1232         for(UShort_t sec =0; sec < nsec;  sec++)  {
1233           for(UShort_t strip = 0; strip < nstr; strip++) {
1234             
1235             Float_t fmdMult = fmd->Multiplicity(det,ring,sec,strip);
1236             if(fmdMult == 0 || fmdMult == AliESDFMD::kInvalidMult) continue;
1237             
1238             Float_t nParticles=0;
1239             
1240             if(fmdMult > fFMDLowCut) {
1241               nParticles = 1.;
1242             }
1243             
1244             if (det<3) totalMultA = totalMultA + nParticles;
1245             else totalMultC = totalMultC + nParticles;
1246             
1247           }
1248         }
1249       }
1250     }
1251     multFMDA = totalMultA;
1252     multFMDC = totalMultC;
1253   }
1254
1255   if (esd) {
1256     // ***** ZDC info
1257     AliESDZDC *esdZDC = esd->GetESDZDC();
1258     zdcEnergyCal = esdZDC->AliESDZDC::TestBit(AliESDZDC::kEnergyCalibratedSignal);
1259     if (zdcEnergyCal) {      
1260       zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
1261       zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
1262       znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
1263       zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
1264     } else {
1265       zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.;
1266       zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.;
1267       znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.;
1268       zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.;
1269     }
1270     zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.;
1271     zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.;
1272
1273     const Double_t *ZNAtower = esdZDC->GetZN2TowerEnergy(); 
1274     znaTower = ZNAtower[0];
1275
1276     for (Int_t j = 0; j < 4; ++j) {
1277       if (esdZDC->GetZDCTDCData(12,j) != 0) {
1278         znaFired = kTRUE;
1279       }
1280     } 
1281   } else {
1282     AliAODHeader *h = aod->GetHeader();
1283     zncEnergy = (Float_t) (h->GetZDCN1Energy());
1284     zpcEnergy = (Float_t) (h->GetZDCP1Energy());
1285     znaEnergy = (Float_t) (h->GetZDCN2Energy());
1286     zpaEnergy = (Float_t) (h->GetZDCP2Energy());
1287     zem1Energy = (Float_t) (h->GetZDCEMEnergy(0))/8.; //Todo: C.L. Should we devide here by 8? It is done in the ESD case!
1288     zem2Energy = (Float_t) (h->GetZDCEMEnergy(1))/8.;
1289
1290     AliAODZDC *aodZDC = aod->GetZDCData();
1291     const Double_t *ZNAtower = aodZDC->GetZNATowerEnergy(); 
1292     znaTower = ZNAtower[0];
1293
1294     znaFired = kFALSE; // trick because info is not stored in AOD
1295     if (esdCent->GetCentralityPercentile("ZNA") != 101)
1296       znaFired = kTRUE;
1297   }
1298
1299   if (esd) {
1300     // ***** MC info
1301     AliAnalysisManager* anMan = AliAnalysisManager::GetAnalysisManager();
1302     AliMCEventHandler* eventHandler = (AliMCEventHandler*)anMan->GetMCtruthEventHandler();
1303     AliStack*    stack=0;
1304     AliMCEvent*  mcEvent=0;
1305     if (fIsMCInput && eventHandler && (mcEvent=eventHandler->MCEvent()) && (stack=mcEvent->Stack())) {
1306       AliGenHijingEventHeader* hHijing=0;
1307       AliGenDPMjetEventHeader* dpmHeader=0;
1308       
1309       AliGenEventHeader* mcGenH = mcEvent->GenEventHeader();
1310       if (mcGenH->InheritsFrom(AliGenHijingEventHeader::Class())) 
1311         hHijing = (AliGenHijingEventHeader*)mcGenH;      
1312       else if (mcGenH->InheritsFrom(AliGenCocktailEventHeader::Class())) {
1313         TList* headers = ((AliGenCocktailEventHeader*)mcGenH)->GetHeaders();
1314         hHijing = dynamic_cast<AliGenHijingEventHeader*>(headers->FindObject("Hijing"));
1315         if (!hHijing) hHijing = dynamic_cast<AliGenHijingEventHeader*>(headers->FindObject("Hijing pPb_0"));
1316       }
1317       else if (mcGenH->InheritsFrom(AliGenDPMjetEventHeader::Class())) {
1318         dpmHeader = (AliGenDPMjetEventHeader*)mcGenH;
1319       }
1320       if(hHijing)   Npart = hHijing->ProjectileParticipants()+hHijing->TargetParticipants();
1321       if(dpmHeader) Npart = dpmHeader->ProjectileParticipants()+ dpmHeader->TargetParticipants();
1322     }
1323   } 
1324
1325   // ***** Scaling for MC
1326   if (fIsMCInput) {
1327     fUseScaling=kFALSE;
1328     v0Corr  = Short_t((multV0A+multV0C)  * fV0MScaleFactorMC);
1329     multV0A  = multV0A * fV0MScaleFactorMC;
1330     multV0C  = multV0C * fV0MScaleFactorMC;
1331   }
1332   // ***** Scaling for Data 
1333   if (fUseScaling) {
1334     v0Corr  = Short_t(v0Corr /   fV0MScaleFactor);
1335     spdCorr = spdCorr / fSPDScaleFactor;
1336     nTracks = Int_t(nTracks /   fTPCScaleFactor);
1337   }
1338
1339   // ***** Centrality Selection
1340   if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
1341   if(fHtempV0A) fCentV0A = fHtempV0A->GetBinContent(fHtempV0A->FindBin((multV0ACorr)));
1342   if(fHtempV0C) fCentV0C = fHtempV0C->GetBinContent(fHtempV0C->FindBin((multV0CCorr)));
1343   if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
1344   if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
1345   if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
1346   if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
1347   if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
1348   if(fHtempCND) fCentCND = fHtempCND->GetBinContent(fHtempCND->FindBin(multCND));
1349   if(fHtempZNA) {
1350     if(znaFired) fCentZNA = fHtempZNA->GetBinContent(fHtempZNA->FindBin(znaTower));
1351     else fCentZNA = 101;
1352   }
1353   if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
1354   if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
1355   if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin(zem1Energy+zem2Energy,zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
1356
1357   if(fHtempNPA) fCentNPA = fHtempNPA->GetBinContent(fHtempNPA->FindBin(Npart));
1358   if(fHtempV0Mtrue) fCentV0Mtrue = fHtempV0Mtrue->GetBinContent(fHtempV0Mtrue->FindBin((multV0ACorr+multV0CCorr)));
1359   if(fHtempV0Atrue) fCentV0Atrue = fHtempV0Atrue->GetBinContent(fHtempV0Atrue->FindBin((multV0ACorr)));
1360   if(fHtempV0Ctrue) fCentV0Ctrue = fHtempV0Ctrue->GetBinContent(fHtempV0Ctrue->FindBin((multV0CCorr)));
1361   if(fHtempFMDtrue) fCentFMDtrue = fHtempFMDtrue->GetBinContent(fHtempFMDtrue->FindBin((multFMDA+multFMDC)));
1362   if(fHtempTRKtrue) fCentTRKtrue = fHtempTRKtrue->GetBinContent(fHtempTRKtrue->FindBin(nTracks));
1363   if(fHtempTKLtrue) fCentTKLtrue = fHtempTKLtrue->GetBinContent(fHtempTKLtrue->FindBin(nTracklets));
1364   if(fHtempCL0true) fCentCL0true = fHtempCL0true->GetBinContent(fHtempCL0true->FindBin(nClusters[0]));
1365   if(fHtempCL1true) fCentCL1true = fHtempCL1true->GetBinContent(fHtempCL1true->FindBin(spdCorr));
1366   if(fHtempCNDtrue) fCentCNDtrue = fHtempCNDtrue->GetBinContent(fHtempCNDtrue->FindBin(multCND));
1367   if(fHtempZNAtrue) fCentZNAtrue = fHtempZNAtrue->GetBinContent(fHtempZNAtrue->FindBin(znaTower));
1368    
1369
1370   // ***** Cleaning
1371   if (fUseCleaning) {
1372     fQuality=0;
1373     
1374     // ***** vertex
1375     if (TMath::Abs(zvtx)>fZVCut || zvtxNcont<1) fQuality += 1;   
1376
1377     // ***** outliers, skip in case of MC input
1378     if (!fIsMCInput) {
1379       // **** V0 vs SPD
1380       if (IsOutlierV0MSPD(spdCorr, v0Corr, int(fCentV0M))) fQuality  += 2;
1381       // ***** V0 vs TPC
1382       if (IsOutlierV0MTPC(nTracks, v0Corr, int(fCentV0M))) fQuality  += 4;
1383       // ***** V0 vs ZDC
1384       if (IsOutlierV0MZDC((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
1385           (zdcEnergyCal==kFALSE) ) fQuality  += 8;
1386       if (IsOutlierV0MZDCECal((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
1387           (zdcEnergyCal==kTRUE) ) fQuality  += 8;
1388     }
1389   } else {
1390     fQuality = 0;
1391   }
1392
1393       
1394   if (esdCent) {
1395     if (aod&&(fDebug>1)) {
1396       Double_t v0m = esdCent->GetCentralityPercentile("V0M");
1397       Double_t cl1 = esdCent->GetCentralityPercentile("CL1");
1398       Double_t trk = esdCent->GetCentralityPercentile("TRK");
1399       Double_t cnd = esdCent->GetCentralityPercentile("CND");
1400       Double_t zna = esdCent->GetCentralityPercentile("ZNA");
1401       printf("AOD: v0m %.2f %.2f (%.2f) cl1 %.2f %.2f (%.2f) trk %.2f %.2f (%.2f) cnd %.2f %.2f (%.2f) zna %.2f %.2f (%.2f)\n", 
1402              v0m, fCentV0M, fCentV0M!=0?v0m/fCentV0M:1, cl1, fCentCL1, fCentCL1!=0?cl1/fCentCL1:1, trk, fCentTRK, 
1403              fCentTRK!=0?trk/fCentTRK:1, cnd, fCentCND, fCentCND!=0?cnd/fCentCND:1, zna, fCentZNA, fCentZNA!=0?zna/fCentZNA:1);
1404     }
1405     esdCent->SetQuality(fQuality);
1406     esdCent->SetCentralityV0M(fCentV0M);
1407     esdCent->SetCentralityV0A(fCentV0A);
1408     esdCent->SetCentralityV0C(fCentV0C);
1409     esdCent->SetCentralityFMD(fCentFMD);
1410     esdCent->SetCentralityTRK(fCentTRK);
1411     esdCent->SetCentralityTKL(fCentTKL);
1412     esdCent->SetCentralityCL0(fCentCL0);
1413     esdCent->SetCentralityCL1(fCentCL1);
1414     esdCent->SetCentralityCND(fCentCND);
1415     esdCent->SetCentralityNPA(fCentNPA);
1416     esdCent->SetCentralityZNA(fCentZNA);
1417     esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
1418     esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
1419     esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
1420   }
1421
1422   // filling QA histograms
1423   if (fFillHistos) {    
1424
1425     if (fIsMCInput) { // fill histo with true centrality for simulations
1426       fCentV0M = fCentV0Mtrue;        
1427       fCentV0A = fCentV0Atrue;        
1428       fCentV0C = fCentV0Ctrue;        
1429       fCentFMD = fCentFMDtrue;        
1430       fCentTRK = fCentTRKtrue;        
1431       fCentTKL = fCentTKLtrue;        
1432       fCentCL0 = fCentCL0true;        
1433       fCentCL1 = fCentCL1true;        
1434       fCentCND = fCentCNDtrue;        
1435       fCentZNA = fCentZNAtrue;        
1436     }
1437
1438
1439     if ((fMB) && (abs(zvtx)<10))        fHOutMultCL1vsTKL->Fill(spdCorr,nTracklets);
1440
1441     if (fCVHN)   fHOutCentV0MCVHN->Fill(fCentV0M);
1442     if (fCVLN)   fHOutCentV0MCVLN->Fill(fCentV0M);
1443     if (fCCENT)  fHOutCentV0MCCENT->Fill(fCentV0M);
1444     if (fCSEMI)  fHOutCentV0MCSEMI->Fill(fCentV0M);
1445     if (fMSL) fHOutCentV0MMSL->Fill(fCentV0M);
1446     if (fMSH) fHOutCentV0MMSH->Fill(fCentV0M);
1447     if (fMUL) fHOutCentV0MMUL->Fill(fCentV0M);
1448     if (fMLL) fHOutCentV0MMLL->Fill(fCentV0M);
1449     if (fEJE) fHOutCentV0MEJE->Fill(fCentV0M);
1450     if (fEGA) fHOutCentV0MEGA->Fill(fCentV0M);
1451     if (fPHS) fHOutCentV0MPHS->Fill(fCentV0M);
1452
1453     if (((((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB) && (runType==0)) ||
1454         ((((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kINT7) && (runType==1))) { // fill the QA histograms only for MB events!
1455       
1456       fHOutQuality->Fill(fQuality);
1457       fHOutVertex->Fill(zvtx);
1458       fHOutVertexT0->Fill(zvtxT0);
1459       
1460       if (fQuality==0) {  
1461         fHOutCentV0M->Fill(fCentV0M);
1462         fHOutCentV0A->Fill(fCentV0A);
1463         fHOutCentV0C->Fill(fCentV0C);
1464         
1465         if (fCVHNbit)  fHOutCentV0MCVHNinMB->Fill(fCentV0M);
1466         if (fCVLNbit)  fHOutCentV0MCVLNinMB->Fill(fCentV0M);
1467         if (fCCENTbit) fHOutCentV0MCCENTinMB->Fill(fCentV0M);
1468         if (fCSEMIbit) fHOutCentV0MCSEMIinMB->Fill(fCentV0M);
1469         if (fMSL) fHOutCentV0MMSLinMB->Fill(fCentV0M);
1470         if (fMSH) fHOutCentV0MMSHinMB->Fill(fCentV0M);
1471         if (fMUL) fHOutCentV0MMULinMB->Fill(fCentV0M);
1472         if (fMLL) fHOutCentV0MMLLinMB->Fill(fCentV0M);
1473         if (fEJE) fHOutCentV0MEJEinMB->Fill(fCentV0M);
1474         if (fEGA) fHOutCentV0MEGAinMB->Fill(fCentV0M);
1475         if (fPHS) fHOutCentV0MPHSinMB->Fill(fCentV0M);
1476         
1477         fHOutCentFMD->Fill(fCentFMD);
1478         fHOutCentTRK->Fill(fCentTRK);
1479         fHOutCentTKL->Fill(fCentTKL);
1480         fHOutCentCL0->Fill(fCentCL0);
1481         fHOutCentCL1->Fill(fCentCL1);
1482         fHOutCentCND->Fill(fCentCND);
1483         fHOutCentNPA->Fill(fCentNPA);
1484         fHOutCentZNA->Fill(fCentZNA);
1485         fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
1486         fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
1487         fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
1488         fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentCL1);
1489         fHOutCentV0MvsCentTRK->Fill(fCentV0M,fCentTRK);
1490         fHOutCentTRKvsCentCL1->Fill(fCentTRK,fCentCL1);
1491         fHOutCentV0MvsCentZDC->Fill(fCentV0M,fCentZEMvsZDC);
1492         fHOutCentV0AvsCentV0C->Fill(fCentV0A,fCentV0C);
1493         fHOutCentV0AvsCentTRK->Fill(fCentV0A,fCentTRK);
1494         fHOutCentV0AvsCentCND->Fill(fCentV0A,fCentCND);
1495         fHOutCentV0AvsCentCL1->Fill(fCentV0A,fCentCL1);
1496         fHOutCentV0CvsCentTRK->Fill(fCentV0C,fCentTRK);
1497         fHOutCentV0CvsCentCND->Fill(fCentV0C,fCentCND);
1498         fHOutCentV0CvsCentCL1->Fill(fCentV0C,fCentCL1);
1499         fHOutCentNPAvsCentV0A->Fill(fCentNPA,fCentV0A);
1500         fHOutCentNPAvsCentV0C->Fill(fCentNPA,fCentV0C);
1501         fHOutCentNPAvsCentTRK->Fill(fCentNPA,fCentTRK);
1502         fHOutCentNPAvsCentCND->Fill(fCentNPA,fCentCND);
1503         fHOutCentNPAvsCentCL1->Fill(fCentNPA,fCentCL1);
1504         fHOutCentZNAvsCentV0A->Fill(fCentZNA,fCentV0A);
1505         fHOutCentZNAvsCentV0C->Fill(fCentZNA,fCentV0C);
1506         fHOutCentZNAvsCentTRK->Fill(fCentZNA,fCentTRK);
1507         fHOutCentZNAvsCentCND->Fill(fCentZNA,fCentCND);
1508         fHOutCentZNAvsCentCL1->Fill(fCentZNA,fCentCL1);
1509
1510         fHOutMultV0AC->Fill(multV0A,multV0C);
1511         fHOutMultV0M->Fill(multV0ACorr+multV0CCorr);
1512         fHOutMultV0A->Fill(multV0ACorr);
1513         fHOutMultV0C->Fill(multV0CCorr);
1514         fHOutMultV0Mnc->Fill(multV0A+multV0C);
1515         fHOutMultV0Anc->Fill(multV0A);
1516         fHOutMultV0Cnc->Fill(multV0C);
1517         fHOutMultV0O->Fill(multV0AOnline+multV0COnline);
1518         fHOutMultV0Cells->Fill(nV0A,nV0C); 
1519         fHOutMultFMD->Fill(multFMDA+multFMDC);
1520         fHOutMultTRK->Fill(nTracks);
1521         fHOutMultTKL->Fill(nTracklets);
1522         fHOutMultCL0->Fill(nClusters[0]);
1523         fHOutMultCL1->Fill(spdCorr);
1524         fHOutMultCND->Fill(multCND);
1525         fHOutMultNPA->Fill(Npart);
1526         fHOutMultZNA->Fill(znaTower);
1527
1528         fHOutMultV0MvsZDN->Fill(v0Corr,(zncEnergy+znaEnergy));
1529         fHOutMultZEMvsZDN->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy));
1530         fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
1531         fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
1532         fHOutMultZEMvsZDCw->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy),fCentV0M);
1533         fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr);
1534         fHOutMultV0MvsTRK->Fill(v0Corr,nTracks);
1535         fHOutMultTRKvsCL1->Fill(nTracks,spdCorr);
1536         fHOutMultV0MvsV0O->Fill(v0Corr,(multV0AOnline+multV0COnline));
1537         fHOutMultV0OvsCL1->Fill((multV0AOnline+multV0COnline),spdCorr);
1538         fHOutMultV0OvsTRK->Fill((multV0AOnline+multV0COnline),nTracks);
1539       } else if (fQuality%2 == 0) {
1540         fHOutCentV0Mqual1->Fill(fCentV0M);
1541         fHOutCentTRKqual1->Fill(fCentTRK);
1542         fHOutCentCL1qual1->Fill(fCentCL1);
1543         fHOutMultV0MvsCL1qual1->Fill(v0Corr,spdCorr);
1544         fHOutMultV0MvsTRKqual1->Fill(v0Corr,nTracks);
1545         fHOutMultTRKvsCL1qual1->Fill(nTracks,spdCorr);
1546       } else {
1547         fHOutCentV0Mqual2->Fill(fCentV0M);
1548         fHOutCentTRKqual2->Fill(fCentTRK);
1549         fHOutCentCL1qual2->Fill(fCentCL1);
1550         fHOutMultV0MvsCL1qual2->Fill(v0Corr,spdCorr);
1551         fHOutMultV0MvsTRKqual2->Fill(v0Corr,nTracks);
1552         fHOutMultTRKvsCL1qual2->Fill(nTracks,spdCorr);
1553       }
1554     }
1555     PostData(1, fOutputList); 
1556   }
1557 }
1558 //________________________________________________________________________
1559 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
1560 {
1561   // Terminate analysis
1562 }
1563 //________________________________________________________________________
1564 Int_t AliCentralitySelectionTask::SetupRun(const AliVEvent* const esd)
1565 {
1566   // Setup files for run
1567
1568   if (!esd)
1569     return -1;
1570
1571   // check if something to be done
1572   if (fCurrentRun == esd->GetRunNumber())
1573     return 0;
1574   else
1575     fCurrentRun = esd->GetRunNumber();
1576
1577   TString fileName =(Form("%s/COMMON/CENTRALITY/data/centrality.root", AliAnalysisManager::GetOADBPath()));
1578   AliInfo(Form("Setup Centrality Selection for run %d with file %s\n",fCurrentRun,fileName.Data()));
1579
1580   AliOADBContainer *con = new AliOADBContainer("OADB");
1581   con->InitFromFile(fileName,"Centrality");
1582
1583   AliOADBCentrality*  centOADB = 0;
1584   centOADB = (AliOADBCentrality*)(con->GetObject(fCurrentRun));
1585   if (!centOADB) {
1586     AliWarning(Form("Centrality OADB does not exist for run %d, using Default \n",fCurrentRun ));
1587     centOADB  = (AliOADBCentrality*)(con->GetDefaultObject("oadbDefault"));
1588   }
1589
1590   Bool_t isHijing=kFALSE;
1591   Bool_t isDpmjet=kFALSE;
1592   AliAnalysisManager* anMan = AliAnalysisManager::GetAnalysisManager();
1593   AliMCEventHandler* eventHandler = (AliMCEventHandler*)anMan->GetMCtruthEventHandler();
1594   AliMCEvent*  mcEvent=0;
1595   if (fIsMCInput && eventHandler && (mcEvent=eventHandler->MCEvent()) ) {     
1596     AliGenEventHeader* mcGenH = mcEvent->GenEventHeader();
1597     if (mcGenH->InheritsFrom(AliGenHijingEventHeader::Class())) isHijing=kTRUE;
1598     else if (mcGenH->InheritsFrom(AliGenCocktailEventHeader::Class())) isHijing=kTRUE;
1599     else if (mcGenH->InheritsFrom(AliGenDPMjetEventHeader::Class())) isDpmjet=kTRUE;
1600   }
1601
1602
1603   // modes
1604   fUseScaling   = centOADB->UseScaling();
1605   fUseCleaning  = centOADB->UseCleaning();
1606
1607   // cuts
1608   fZVCut        = centOADB->ZVCut();
1609   fOutliersCut  = centOADB->OutliersCut(); 
1610
1611   // centrality histos
1612   fHtempV0M       = centOADB->V0hist(); 
1613   fHtempV0A       = centOADB->V0Ahist(); 
1614   fHtempV0C       = centOADB->V0Chist(); 
1615   fHtempTRK       = centOADB->TPChist();
1616   fHtempCL1       = centOADB->SPDhist();
1617   fHtempCND       = centOADB->CNDhist();
1618   fHtempFMD       = centOADB->FMDhist();
1619   fHtempZNA       = centOADB->ZNAhist();
1620   fHtempZEMvsZDC  = centOADB->ZEMvsZDChist();
1621
1622   if (isHijing) {       
1623     fHtempNPA           = centOADB->NPAhist();
1624     fHtempV0Mtrue       = centOADB->V0histtrue(); 
1625     fHtempV0Atrue       = centOADB->V0Ahisttrue(); 
1626     fHtempV0Ctrue       = centOADB->V0Chisttrue(); 
1627     fHtempTRKtrue       = centOADB->TPChisttrue();
1628     fHtempCL1true       = centOADB->SPDhisttrue();
1629     fHtempCNDtrue       = centOADB->CNDhisttrue();
1630     fHtempFMDtrue       = centOADB->FMDhisttrue();
1631     fHtempZNAtrue       = centOADB->ZNAhisttrue();
1632   }   else if (isDpmjet)   {
1633     fHtempNPA           = centOADB->NPAhistDPM();
1634     fHtempV0Mtrue       = centOADB->V0histtrueDPM(); 
1635     fHtempV0Atrue       = centOADB->V0AhisttrueDPM(); 
1636     fHtempV0Ctrue       = centOADB->V0ChisttrueDPM(); 
1637     fHtempTRKtrue       = centOADB->TPChisttrueDPM();
1638     fHtempCL1true       = centOADB->SPDhisttrueDPM();
1639     fHtempCNDtrue       = centOADB->CNDhisttrueDPM();
1640     fHtempFMDtrue       = centOADB->FMDhisttrueDPM();
1641     fHtempZNAtrue       = centOADB->ZNAhisttrueDPM();
1642   }
1643
1644   TString path = gSystem->ExpandPathName(fileName.Data());
1645   if (!fHtempV0M) AliWarning(Form("Calibration for V0M does not exist in %s", path.Data()));
1646   if (!fHtempV0A) AliWarning(Form("Calibration for V0A does not exist in %s", path.Data()));
1647   if (!fHtempV0C) AliWarning(Form("Calibration for V0C does not exist in %s", path.Data()));
1648   if (!fHtempTRK) AliWarning(Form("Calibration for TRK does not exist in %s", path.Data()));
1649   if (!fHtempCL1) AliWarning(Form("Calibration for CL1 does not exist in %s", path.Data()));
1650   if (!fHtempCND) AliWarning(Form("Calibration for CND does not exist in %s", path.Data()));
1651   if (!fHtempZNA) AliWarning(Form("Calibration for ZNA does not exist in %s", path.Data()));
1652   if (!fHtempFMD) AliWarning(Form("Calibration for FMD does not exist in %s", path.Data()));
1653   if (!fHtempZEMvsZDC) AliWarning(Form("Calibration for ZEMvsZDC does not exist in %s", path.Data()));
1654   if (!fHtempNPA) AliWarning(Form("Calibration for NPA does not exist in %s", path.Data()));
1655
1656   if (!fHtempV0Mtrue) AliWarning(Form("Calibration for V0Mtrue does not exist in %s", path.Data()));
1657   if (!fHtempV0Atrue) AliWarning(Form("Calibration for V0Atrue does not exist in %s", path.Data()));
1658   if (!fHtempV0Ctrue) AliWarning(Form("Calibration for V0Ctrue does not exist in %s", path.Data()));
1659   if (!fHtempTRKtrue) AliWarning(Form("Calibration for TRKtrue does not exist in %s", path.Data()));
1660   if (!fHtempCL1true) AliWarning(Form("Calibration for CL1true does not exist in %s", path.Data()));
1661   if (!fHtempCNDtrue) AliWarning(Form("Calibration for CNDtrue does not exist in %s", path.Data()));
1662   if (!fHtempZNAtrue) AliWarning(Form("Calibration for ZNAtrue does not exist in %s", path.Data()));
1663   if (!fHtempFMDtrue) AliWarning(Form("Calibration for FMDtrue does not exist in %s", path.Data()));
1664
1665   // scale factors
1666   fV0MScaleFactor    = centOADB->V0MScaleFactor();
1667   fSPDScaleFactor    = centOADB->SPDScaleFactor();
1668   fTPCScaleFactor    = centOADB->TPCScaleFactor();
1669   fV0MScaleFactorMC  = centOADB->V0MScaleFactorMC();
1670
1671   // outliers parameters
1672   fV0MSPDOutlierPar0 = centOADB->V0MSPDOutlierPar0();      
1673   fV0MSPDOutlierPar1 = centOADB->V0MSPDOutlierPar1();     
1674   fV0MTPCOutlierPar0 = centOADB->V0MTPCOutlierPar0();      
1675   fV0MTPCOutlierPar1 = centOADB->V0MTPCOutlierPar1();     
1676                                                    
1677   fV0MSPDSigmaOutlierPar0 = centOADB->V0MSPDSigmaOutlierPar0(); 
1678   fV0MSPDSigmaOutlierPar1 = centOADB->V0MSPDSigmaOutlierPar1(); 
1679   fV0MSPDSigmaOutlierPar2 = centOADB->V0MSPDSigmaOutlierPar2();
1680   fV0MTPCSigmaOutlierPar0 = centOADB->V0MTPCSigmaOutlierPar0(); 
1681   fV0MTPCSigmaOutlierPar1 = centOADB->V0MTPCSigmaOutlierPar1(); 
1682   fV0MTPCSigmaOutlierPar2 = centOADB->V0MTPCSigmaOutlierPar2(); 
1683                             
1684   fV0MZDCOutlierPar0 =      centOADB->V0MZDCOutlierPar0();      
1685   fV0MZDCOutlierPar1 =      centOADB->V0MZDCOutlierPar1();      
1686   fV0MZDCEcalOutlierPar0 =  centOADB->V0MZDCEcalOutlierPar0();  
1687   fV0MZDCEcalOutlierPar1 =  centOADB->V0MZDCEcalOutlierPar1();  
1688
1689   return 0;
1690 }
1691
1692
1693
1694 //________________________________________________________________________
1695 Bool_t AliCentralitySelectionTask::IsOutlierV0MSPD(Float_t spd, Float_t v0, Int_t cent) const
1696 {
1697   // Clean outliers
1698   Float_t val = fV0MSPDOutlierPar0 +  fV0MSPDOutlierPar1 * v0;
1699   Float_t spdSigma = fV0MSPDSigmaOutlierPar0 + fV0MSPDSigmaOutlierPar1*cent + fV0MSPDSigmaOutlierPar2*cent*cent;
1700   if ( TMath::Abs(spd-val) > fOutliersCut*spdSigma ) 
1701     return kTRUE;
1702   else 
1703     return kFALSE;
1704 }
1705
1706 //________________________________________________________________________
1707 Bool_t AliCentralitySelectionTask::IsOutlierV0MTPC(Int_t tracks, Float_t v0, Int_t cent) const
1708 {
1709   // Clean outliers
1710   Float_t val = fV0MTPCOutlierPar0 +  fV0MTPCOutlierPar1 * v0;
1711   Float_t tpcSigma = fV0MTPCSigmaOutlierPar0 + fV0MTPCSigmaOutlierPar1*cent + fV0MTPCSigmaOutlierPar2*cent*cent;
1712   if ( TMath::Abs(tracks-val) > fOutliersCut*tpcSigma ) 
1713     return kTRUE;
1714   else 
1715     return kFALSE;
1716 }
1717
1718 //________________________________________________________________________
1719 Bool_t AliCentralitySelectionTask::IsOutlierV0MZDC(Float_t zdc, Float_t v0) const
1720 {
1721   // Clean outliers
1722   Float_t val = fV0MZDCOutlierPar0 + fV0MZDCOutlierPar1 * v0;
1723   if (zdc >  val) 
1724     return kTRUE;
1725   else 
1726   return kFALSE;
1727 }
1728
1729 //________________________________________________________________________
1730 Bool_t AliCentralitySelectionTask::IsOutlierV0MZDCECal(Float_t zdc, Float_t v0) const
1731 {
1732   // Clean outliers
1733   Float_t val = fV0MZDCEcalOutlierPar0 + fV0MZDCEcalOutlierPar1 * v0;
1734   if (zdc >  val) 
1735     return kTRUE;
1736   else 
1737     return kFALSE;
1738 }