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