AliPhysics  4ffc478 (4ffc478)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskSEHFQA.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-2009, 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 /* $Id$ */
17 
19 //
20 // AliAnalysisTaskSE for HF quality assurance
21 //
22 // Author: Chiara Bianchin, chiara.bianchin@pd.infn.it
24 
25 #include <Riostream.h>
26 #include <TClonesArray.h>
27 #include <TCanvas.h>
28 #include <TList.h>
29 #include <TH1F.h>
30 #include <TH2F.h>
31 #include <TH3F.h>
32 #include <TProfile2D.h>
33 #include <TDatabasePDG.h>
34 
35 #include <AliAnalysisDataSlot.h>
36 #include <AliAnalysisDataContainer.h>
37 #include "AliAnalysisManager.h"
38 #include "AliESDtrack.h"
39 #include "AliESDVertex.h"
40 #include "AliVertexerTracks.h"
41 #include "AliPID.h"
42 #include "AliPIDResponse.h"
43 #include "AliTPCPIDResponse.h"
44 #include "AliAODHandler.h"
45 #include "AliAODEvent.h"
46 #include "AliAODVertex.h"
47 #include "AliAODTrack.h"
48 #include "AliAODMCParticle.h"
49 #include "AliAODMCHeader.h"
51 #include "AliAODRecoCascadeHF.h"
52 #include "AliAnalysisVertexingHF.h"
53 #include "AliAnalysisTaskSE.h"
54 #include "AliCounterCollection.h"
55 #include "AliRDHFCuts.h"
57 #include "AliRDHFCutsD0toKpipipi.h"
58 #include "AliRDHFCutsDstoKKpi.h"
60 #include "AliRDHFCutsD0toKpi.h"
61 #include "AliRDHFCutsLctopKpi.h"
62 #include "AliRDHFCutsLctoV0.h"
63 #include "AliVertexingHFUtils.h"
64 #include "AliInputEventHandler.h"
65 #include "AliMultSelection.h"
66 
67 #include "AliFlowEvent.h"
68 #include "AliFlowTrackCuts.h"
69 #include "AliFlowTrackSimple.h"
70 #include "AliFlowVector.h"
71 
72 #include "AliTRDTriggerAnalysis.h"
73 
74 #include "AliAnalysisTaskSEHFQA.h"
75 
76 using std::cout;
77 using std::endl;
78 
79 
83 
84 //____________________________________________________________________________
85 
87  , fOutputEntries(0x0)
88  , fOutputPID(0x0)
89  , fOutputTrack(0x0)
90  , fOutputCounters(0x0)
91  , fOutputCheckCentrality(0x0)
92  , fOutputEvSelection(0x0)
93  , fOutputFlowObs(0x0)
94  , fDecayChannel(AliAnalysisTaskSEHFQA::kD0toKpi)
95  , fCuts(0x0)
96  , fFlowEvent(0x0)
97  , fRFPcuts(0x0)
98  , fEstimator(AliRDHFCuts::kCentTRK)
99  , fReadMC(kFALSE)
100  , fSimpleMode(kFALSE)
101  , fUseSelectionBit(kTRUE)
102  , fOnOff()
103  , fFillDistrTrackEffChecks(kFALSE)
104  , fAODProtection(1)
105  , fHisNentries(0)
106  , fHisNentriesSelBit(0)
107  , fHisTOFflags(0)
108  , fHisTOFsig(0)
109  , fHisTOFstartTimeMask(0)
110  , fHisTOFstartTimeRes(0)
111  , fHisTOFstartTimeDistrib(0)
112  , fHisTOFtime(0)
113  , fHisTOFtimeKaonHyptime(0)
114  , fHisTOFtimeKaonHyptimeAC(0)
115  , fHisTOFsigmaKSigPid(0)
116  , fHisTOFsigmaPionSigPid(0)
117  , fHisTOFsigmaProtonSigPid(0)
118  , fHisTOFsigPid3sigPion(0)
119  , fHisTOFsigPid3sigKaon(0)
120  , fHisTOFsigPid3sigProton(0)
121  , fHisTPCsig(0)
122  , fHisTPCsigvsp(0)
123  , fHisTPCsigvspAC(0)
124  , fHisTPCsigmaK(0)
125  , fHisTPCsigmaPion(0)
126  , fHisTPCsigmaProton(0)
127  , fHisTPCsigNvsPtAllTracks(0)
128  , fHisTPCsigNvsPhiAllTracks(0)
129  , fHisTPCsigNvsEtaAllTracks(0)
130  , fHisTPCsigNvsPtDaughters(0)
131  , fHisTPCsigNvsPhiDaughters(0)
132  , fHisTPCsigNvsEtaDaughters(0)
133  , fHisTOFsigmaMCKSigPid(0)
134  , fHisTOFsigmaMCPionSigPid(0)
135  , fHisTOFsigmaMCProtonSigPid(0)
136  , fHisTPCsigmaMCK(0)
137  , fHisTPCsigmaMCPion(0)
138  , fHisTPCsigmaMCProton(0)
139  , fHisnClsITS(0)
140  , fHisnClsITSselTr(0)
141  , fHisnClsITSSA(0)
142  , fHisnLayerITS(0)
143  , fHisnLayerITSselTr(0)
144  , fHisnLayerITSsa(0)
145  , fHisnClsSPD(0)
146  , fHisptGoodTr(0)
147  , fHisptGoodTrFromDaugh(0)
148  , fHisptGoodTrFromDaugh_filt(0)
149  , fHisdistrGoodTr(0)
150  , fHisdistrSelTr(0)
151  , fHisd0dau(0)
152  , fHisd0dau_filt(0)
153  , fHisd0dauphi(0)
154  , fHisd0dauphi_filt(0)
155  , fHisd0zdau(0)
156  , fHisd0zdau_filt(0)
157  , fHisd0zdauphi(0)
158  , fHisd0zdauphi_filt(0)
159  , fHisd0TracksSPDin(0)
160  , fHisd0TracksSPDany(0)
161  , fHisd0TracksFilterBit4(0)
162  , fHisd0TracksTPCITSSPDany(0)
163  , fHisPtDaughters(0)
164  , fHisPhiDaughters(0)
165  , fHisEtaDaughters(0)
166  , fHisEtavsPhiDaughters(0)
167  , fHisNTPCclsvsPtDaughters(0)
168  , fHisNTPCclsvsPhiDaughters(0)
169  , fHisNTPCclsvsEtaDaughters(0)
170  , fHisNTPCCrossedRowsvsPtDaughters(0)
171  , fHisNTPCCrossedRowsvsPhiDaughters(0)
172  , fHisNTPCCrossedRowsvsEtaDaughters(0)
173  , fHisRatioCRowsOverFclsvsPtDaughters(0)
174  , fHisRatioCRowsOverFclsvsPhiDaughters(0)
175  , fHisRatioCRowsOverFclsvsEtaDaughters(0)
176  , fHisNITSclsvsPtDaughters(0)
177  , fHisNITSclsvsPhiDaughters(0)
178  , fHisNITSclsvsEtaDaughters(0)
179  , fHisSPDclsDaughters(0)
180  , fHisPtAllTracks(0)
181  , fHisPhiAllTracks(0)
182  , fHisEtaAllTracks(0)
183  , fHisEtavsPhiAllTracks(0)
184  , fHisNTPCclsvsPtAllTracks(0)
185  , fHisNTPCclsvsPhiAllTracks(0)
186  , fHisNTPCclsvsEtaAllTracks(0)
187  , fHisNTPCCrossedRowsvsPtAllTracks(0)
188  , fHisNTPCCrossedRowsvsPhiAllTracks(0)
189  , fHisNTPCCrossedRowsvsEtaAllTracks(0)
190  , fHisRatioCRowsOverFclsvsPtAllTracks(0)
191  , fHisRatioCRowsOverFclsvsPhiAllTracks(0)
192  , fHisRatioCRowsOverFclsvsEtaAllTracks(0)
193  , fHisNITSclsvsPtAllTracks(0)
194  , fHisNITSclsvsPhiAllTracks(0)
195  , fHisNITSclsvsEtaAllTracks(0)
196  , fHisSPDclsAllTracks(0)
197  , fHisdistrFakeTr(0)
198  , fHisd0f(0)
199  , fHisd0f_filt(0)
200  , fHisptFakeTr(0)
201  , fHisptFakeTrFromDaugh(0)
202  , fHisptFakeTrFromDaughFilt(0)
203  , fHisNtracklets(0)
204  , fHisNtracklets01(0)
205  , fHisNtracklets01AllEv(0)
206  , fHisMult(0)
207  , fHisMultFBit4(0)
208  , fHisMultComb05(0)
209  , fHisMultComb08(0)
210  , fHisNtrackletsIn(0)
211  , fHisMultIn(0)
212  , fHisNtrackletsOut(0)
213  , fHisMultOut(0)
214  , fHisMultvsPercentile(0)
215  , fHisntrklvsPercentile(0)
216  , fHisntrklvsPercentile01(0)
217  , fHisntrklvsPercentile01AllEv(0)
218  , fHisnTPCTracksvsPercentile(0)
219  , fHisnTPCITSTracksvsPercentile(0)
220  , fHisnTPCITS1SPDTracksvsPercentile(0)
221  , fHisStdEstimSignalPercentile(0)
222  , fHisStdEstimSignalNtrackletsIn(0)
223  , fHisStdEstimSignal(0)
224  , fHisStdPercentileSecondPercentile(0)
225  , fHisStdSignalSecondSignal(0)
226  , fHisStdPercentileOldFrwPercentile(0)
227  , fHisStdPercentileOldFrwPercentileDev(0)
228  , fHisxvtx(0)
229  , fHisyvtx(0)
230  , fHiszvtx(0)
231  , fHisxvtxSelEv(0)
232  , fHisyvtxSelEv(0)
233  , fHiszvtxSelEv(0)
234  , fHisWhichVert(0)
235  , fHisWhichVertSelEv(0)
236  , fHisTrigCent(0)
237  , fHisTrigMul(0)
238  , fHisTrigCentSel(0)
239  , fHisTrigMulSel(0)
240  , fHisWhyEvRejected(0)
241  , fHisFEvents(0)
242  , fHisTPCVZE_AngleQ(0)
243  , fHisCentVsMultRPS(0)
244 {
246  fOnOff[0]=kTRUE;
247  fOnOff[1]=kTRUE;
248  fOnOff[2]=kTRUE;
249  fOnOff[3]=kTRUE;
250  fOnOff[4]=kTRUE;
251 
252  for (Int_t iii=0; iii<3; iii++) {
253  fHisQ[iii]=0;
254  fHisAngleQ[iii]=0;
255  fHisPhiEta[iii]=0;
256  }
257 }
258 
259 //____________________________________________________________________________
261  AliAnalysisTaskSE(name)
262  , fOutputEntries(0x0)
263  , fOutputPID(0x0)
264  , fOutputTrack(0x0)
265  , fOutputCounters(0x0)
266  , fOutputCheckCentrality(0x0)
267  , fOutputEvSelection(0x0)
268  , fOutputFlowObs(0x0)
269  , fDecayChannel(ch)
270  , fCuts(0x0)
271  , fFlowEvent(0x0)
272  , fRFPcuts(0x0)
273  , fEstimator(AliRDHFCuts::kCentTRK)
274  , fReadMC(kFALSE)
275  , fSimpleMode(kFALSE)
276  , fUseSelectionBit(kTRUE)
277  , fOnOff()
278  , fFillDistrTrackEffChecks(kFALSE)
279  , fAODProtection(1)
280  , fHisNentries(0)
281  , fHisNentriesSelBit(0)
282  , fHisTOFflags(0)
283  , fHisTOFsig(0)
284  , fHisTOFstartTimeMask(0)
285  , fHisTOFstartTimeRes(0)
286  , fHisTOFstartTimeDistrib(0)
287  , fHisTOFtime(0)
288  , fHisTOFtimeKaonHyptime(0)
289  , fHisTOFtimeKaonHyptimeAC(0)
290  , fHisTOFsigmaKSigPid(0)
291  , fHisTOFsigmaPionSigPid(0)
292  , fHisTOFsigmaProtonSigPid(0)
293  , fHisTOFsigPid3sigPion(0)
294  , fHisTOFsigPid3sigKaon(0)
295  , fHisTOFsigPid3sigProton(0)
296  , fHisTPCsig(0)
297  , fHisTPCsigvsp(0)
298  , fHisTPCsigvspAC(0)
299  , fHisTPCsigmaK(0)
300  , fHisTPCsigmaPion(0)
301  , fHisTPCsigmaProton(0)
302  , fHisTPCsigNvsPtAllTracks(0)
303  , fHisTPCsigNvsPhiAllTracks(0)
304  , fHisTPCsigNvsEtaAllTracks(0)
305  , fHisTPCsigNvsPtDaughters(0)
306  , fHisTPCsigNvsPhiDaughters(0)
307  , fHisTPCsigNvsEtaDaughters(0)
308  , fHisTOFsigmaMCKSigPid(0)
309  , fHisTOFsigmaMCPionSigPid(0)
310  , fHisTOFsigmaMCProtonSigPid(0)
311  , fHisTPCsigmaMCK(0)
312  , fHisTPCsigmaMCPion(0)
313  , fHisTPCsigmaMCProton(0)
314  , fHisnClsITS(0)
315  , fHisnClsITSselTr(0)
316  , fHisnClsITSSA(0)
317  , fHisnLayerITS(0)
318  , fHisnLayerITSselTr(0)
319  , fHisnLayerITSsa(0)
320  , fHisnClsSPD(0)
321  , fHisptGoodTr(0)
322  , fHisptGoodTrFromDaugh(0)
323  , fHisptGoodTrFromDaugh_filt(0)
324  , fHisdistrGoodTr(0)
325  , fHisdistrSelTr(0)
326  , fHisd0dau(0)
327  , fHisd0dau_filt(0)
328  , fHisd0dauphi(0)
329  , fHisd0dauphi_filt(0)
330  , fHisd0zdau(0)
331  , fHisd0zdau_filt(0)
332  , fHisd0zdauphi(0)
333  , fHisd0zdauphi_filt(0)
334  , fHisd0TracksSPDin(0)
335  , fHisd0TracksSPDany(0)
336  , fHisd0TracksFilterBit4(0)
337  , fHisd0TracksTPCITSSPDany(0)
338  , fHisPtDaughters(0)
339  , fHisPhiDaughters(0)
340  , fHisEtaDaughters(0)
341  , fHisEtavsPhiDaughters(0)
342  , fHisNTPCclsvsPtDaughters(0)
343  , fHisNTPCclsvsPhiDaughters(0)
344  , fHisNTPCclsvsEtaDaughters(0)
345  , fHisNTPCCrossedRowsvsPtDaughters(0)
346  , fHisNTPCCrossedRowsvsPhiDaughters(0)
347  , fHisNTPCCrossedRowsvsEtaDaughters(0)
348  , fHisRatioCRowsOverFclsvsPtDaughters(0)
349  , fHisRatioCRowsOverFclsvsPhiDaughters(0)
350  , fHisRatioCRowsOverFclsvsEtaDaughters(0)
351  , fHisNITSclsvsPtDaughters(0)
352  , fHisNITSclsvsPhiDaughters(0)
353  , fHisNITSclsvsEtaDaughters(0)
354  , fHisSPDclsDaughters(0)
355  , fHisPtAllTracks(0)
356  , fHisPhiAllTracks(0)
357  , fHisEtaAllTracks(0)
358  , fHisEtavsPhiAllTracks(0)
359  , fHisNTPCclsvsPtAllTracks(0)
360  , fHisNTPCclsvsPhiAllTracks(0)
361  , fHisNTPCclsvsEtaAllTracks(0)
362  , fHisNTPCCrossedRowsvsPtAllTracks(0)
363  , fHisNTPCCrossedRowsvsPhiAllTracks(0)
364  , fHisNTPCCrossedRowsvsEtaAllTracks(0)
365  , fHisRatioCRowsOverFclsvsPtAllTracks(0)
366  , fHisRatioCRowsOverFclsvsPhiAllTracks(0)
367  , fHisRatioCRowsOverFclsvsEtaAllTracks(0)
368  , fHisNITSclsvsPtAllTracks(0)
369  , fHisNITSclsvsPhiAllTracks(0)
370  , fHisNITSclsvsEtaAllTracks(0)
371  , fHisSPDclsAllTracks(0)
372  , fHisdistrFakeTr(0)
373  , fHisd0f(0)
374  , fHisd0f_filt(0)
375  , fHisptFakeTr(0)
376  , fHisptFakeTrFromDaugh(0)
377  , fHisptFakeTrFromDaughFilt(0)
378  , fHisNtracklets(0)
379  , fHisNtracklets01(0)
380  , fHisNtracklets01AllEv(0)
381  , fHisMult(0)
382  , fHisMultFBit4(0)
383  , fHisMultComb05(0)
384  , fHisMultComb08(0)
385  , fHisNtrackletsIn(0)
386  , fHisMultIn(0)
387  , fHisNtrackletsOut(0)
388  , fHisMultOut(0)
389  , fHisMultvsPercentile(0)
390  , fHisntrklvsPercentile(0)
391  , fHisntrklvsPercentile01(0)
392  , fHisntrklvsPercentile01AllEv(0)
393  , fHisnTPCTracksvsPercentile(0)
394  , fHisnTPCITSTracksvsPercentile(0)
395  , fHisnTPCITS1SPDTracksvsPercentile(0)
396  , fHisStdEstimSignalPercentile(0)
397  , fHisStdEstimSignalNtrackletsIn(0)
398  , fHisStdEstimSignal(0)
399  , fHisStdPercentileSecondPercentile(0)
400  , fHisStdSignalSecondSignal(0)
401  , fHisStdPercentileOldFrwPercentile(0)
402  , fHisStdPercentileOldFrwPercentileDev(0)
403  , fHisxvtx(0)
404  , fHisyvtx(0)
405  , fHiszvtx(0)
406  , fHisxvtxSelEv(0)
407  , fHisyvtxSelEv(0)
408  , fHiszvtxSelEv(0)
409  , fHisWhichVert(0)
410  , fHisWhichVertSelEv(0)
411  , fHisTrigCent(0)
412  , fHisTrigMul(0)
413  , fHisTrigCentSel(0)
414  , fHisTrigMulSel(0)
415  , fHisWhyEvRejected(0)
416  , fHisFEvents(0)
417  , fHisTPCVZE_AngleQ(0)
418  , fHisCentVsMultRPS(0)
419 {
421 
422  //SetCutObject(cuts);
423  fCuts=cuts;
424 
425  fOnOff[0]=kTRUE;
426  fOnOff[1]=kTRUE;
427  fOnOff[2]=kTRUE;
428  fOnOff[3]=kTRUE;
429  fOnOff[4]=kTRUE;
430 
431  for (Int_t iii=0; iii<3; iii++) {
432  fHisQ[iii]=0;
433  fHisAngleQ[iii]=0;
434  fHisPhiEta[iii]=0;
435  }
436 
437  // Output slot #1 writes into a TList container (number of events)
438  DefineOutput(1,TList::Class());
439  // Output slot #2 writes into a TList container (PID)
440  if (fOnOff[1]) DefineOutput(2,TList::Class()); //My private output
441  // Output slot #3 writes into a TList container (Tracks)
442  if (fOnOff[0]) DefineOutput(3,TList::Class()); //My private output
443  // Output slot #4 writes into a AliRDHFCuts container (cuts)
444  switch(fDecayChannel){
445  case 0:
446  DefineOutput(4,AliRDHFCutsDplustoKpipi::Class()); //My private output
447  break;
448  case 1:
449  DefineOutput(4,AliRDHFCutsD0toKpi::Class()); //My private output
450  break;
451  case 2:
452  DefineOutput(4,AliRDHFCutsDStartoKpipi::Class()); //My private output
453  break;
454  case 3:
455  DefineOutput(4,AliRDHFCutsDstoKKpi::Class()); //My private output
456  break;
457  case 4:
458  DefineOutput(4,AliRDHFCutsD0toKpipipi::Class()); //My private output
459  break;
460  case 5:
461  DefineOutput(4,AliRDHFCutsLctopKpi::Class()); //My private output
462  break;
463  case kLambdactoV0:
464  DefineOutput(4,AliRDHFCutsLctoV0::Class()); //My private output
465  break;
466  }
467  if (fOnOff[2]) {
468  // Output slot #5 writes into a TList container (AliCounterCollection)
469  DefineOutput(5,TList::Class()); //My private output
470  // Output slot #6 writes into a TList container (TH1F)
471  DefineOutput(6,TList::Class()); //My private output
472  }
473 
474  if(fOnOff[3]) DefineOutput(7,TList::Class()); //My private output
475  if(fOnOff[4]) DefineOutput(8,TList::Class()); //My private output
476 
477 }
478 
479 //___________________________________________________________________________
481 {
483 
484  delete fOutputEntries;
485 
486  delete fOutputPID;
487 
488  delete fOutputTrack;
489 
490  delete fOutputCounters;
491 
492  delete fOutputCheckCentrality;
493 
494  delete fOutputEvSelection;
495 
496  if(fOnOff[4]) {
497  delete fOutputFlowObs;
498  delete fFlowEvent;
499  }
500 
501 }
502 
503 //___________________________________________________________________________
505 
507  if(fDebug > 1) printf("AnalysisTaskSEHFQA::Init() \n");
508  AliRDHFCuts *copycut = 0x0;
509 
510  switch(fDecayChannel){
511  case 0:
512  {
513  copycut=new AliRDHFCutsDplustoKpipi(*(static_cast<AliRDHFCutsDplustoKpipi*>(fCuts)));
514  }
515  break;
516  case 1:
517  {
518  copycut=new AliRDHFCutsD0toKpi(*(static_cast<AliRDHFCutsD0toKpi*>(fCuts)));
519  }
520  break;
521  case 2:
522  {
523  copycut=new AliRDHFCutsDStartoKpipi(*(static_cast<AliRDHFCutsDStartoKpipi*>(fCuts)));
524  }
525  break;
526  case 3:
527  {
528  copycut=new AliRDHFCutsDstoKKpi(*(static_cast<AliRDHFCutsDstoKKpi*>(fCuts)));
529  }
530  break;
531  case 4:
532  {
533  copycut=new AliRDHFCutsD0toKpipipi(*(static_cast<AliRDHFCutsD0toKpipipi*>(fCuts)));
534  }
535  break;
536  case 5:
537  {
538  copycut=new AliRDHFCutsLctopKpi(*(static_cast<AliRDHFCutsLctopKpi*>(fCuts)));
539  }
540  break;
541  case kLambdactoV0:
542  {
543  copycut=new AliRDHFCutsLctoV0(*(static_cast<AliRDHFCutsLctoV0*>(fCuts)));
544  }
545  break;
546  default:
547  AliFatal("Bad initialization for the decay channe - Exiting...");
548  break;
549  }
550 
551  const char* nameoutput=GetOutputSlot(4)->GetContainer()->GetName();
552  if (copycut){
553  copycut->SetName(nameoutput);
554 
555  // Post the data
556  PostData(4,copycut);
557  }else{
558  AliFatal("Failing initializing AliRDHFCuts object - Exiting...");
559  }
560 
561  return;
562 
563 }
564 
565 //___________________________________________________________________________
567 {
568 
570  if(fDebug > 1) printf("AnalysisTaskSEHFQA::UserCreateOutputObjects() \n");
571 
572  //count events
573  fOutputEntries=new TList();
574  fOutputEntries->SetOwner();
575  fOutputEntries->SetName(GetOutputSlot(1)->GetContainer()->GetName());
576 
577 
578  TString hnameEntries="hNentries";
579  fHisNentries=new TH1F(hnameEntries.Data(), "Counts the number of events", 15,-0.5,14.5);
580  fHisNentries->GetXaxis()->SetBinLabel(1,"nEventsRead");
581  fHisNentries->GetXaxis()->SetBinLabel(2,"nEvents Matched dAOD");
582  fHisNentries->GetXaxis()->SetBinLabel(3,"Mismatched dAOD (Event numbers)");
583  fHisNentries->GetXaxis()->SetBinLabel(4,"Mismatched dAOD (TProcessID)");
584  fHisNentries->GetXaxis()->SetBinLabel(5,"Mismatched Old New Centrality");
585  fHisNentries->GetXaxis()->SetBinLabel(6,"nEventsAnal");
586  fHisNentries->GetXaxis()->SetBinLabel(7,"Pile-up Rej");
587  fHisNentries->GetXaxis()->SetBinLabel(8,"No VertexingHF");
588  fHisNentries->GetXaxis()->SetBinLabel(9,"nCandidates(AnCuts)");
589  fHisNentries->GetXaxis()->SetBinLabel(10,"EventsWithGoodVtx");
590  fHisNentries->GetXaxis()->SetBinLabel(11,"N candidates");
591  if(fReadMC){
592  fHisNentries->GetXaxis()->SetBinLabel(12,"MC Cand from c");
593  fHisNentries->GetXaxis()->SetBinLabel(13,"MC Cand from b");
594  fHisNentries->GetXaxis()->SetBinLabel(14,"N fake Trks");
595  fHisNentries->GetXaxis()->SetBinLabel(15,"N true Trks");
596  }
597 
598  fHisNentries->GetXaxis()->SetNdivisions(1,kFALSE);
599 
600  hnameEntries="HasSelBit";
601  fHisNentriesSelBit=new TH2F(hnameEntries.Data(), "Counts the number of events with SelectionBit", 5,0.,5.,100,0.,30.);
602  fHisNentriesSelBit->GetXaxis()->SetBinLabel(1,"Dplus");
603  fHisNentriesSelBit->GetXaxis()->SetBinLabel(2,"Ds");
604  fHisNentriesSelBit->GetXaxis()->SetBinLabel(3,"LcKpi");
605  fHisNentriesSelBit->GetXaxis()->SetBinLabel(4,"D0toKpi");
606  fHisNentriesSelBit->GetXaxis()->SetBinLabel(5,"Dstar");
607 
610 
611 
612  //PID
613  if(fOnOff[1]){
614  fOutputPID=new TList();
615  fOutputPID->SetOwner();
616  fOutputPID->SetName(GetOutputSlot(2)->GetContainer()->GetName());
617 
618  //TOF pid
619  fHisTOFflags=new TH1F("hTOFflags","TOF flags",7,-0.5,6.5);
620  fHisTOFflags->SetMinimum(0.);
621  fHisTOFflags->GetXaxis()->SetBinLabel(1,"All Tracks");
622  fHisTOFflags->GetXaxis()->SetBinLabel(2,"kTPCout");
623  fHisTOFflags->GetXaxis()->SetBinLabel(3,"kTOFout");
624  fHisTOFflags->GetXaxis()->SetBinLabel(4,"kTIME");
625  fHisTOFflags->GetXaxis()->SetBinLabel(5,"kTOFpid");
626  fHisTOFflags->GetXaxis()->SetBinLabel(6,"kTOFmismatch");
627  fHisTOFflags->GetXaxis()->SetBinLabel(7,"kDetPidOK");
628 
629  TString hname="hTOFsig";
630  fHisTOFsig=new TH1F(hname.Data(),"Distribution of TOF signal;TOF time [ps];Entries", 100, -2.e3,40.e3);
631 
632  hname="hTOFstartTimeMask";
633  fHisTOFstartTimeMask=new TH1F(hname.Data(),"TOF start time mask; Mask ;Entries", 8, -0.5,7.5);
634  fHisTOFstartTimeMask->GetXaxis()->SetBinLabel(1,"FILL");
635  fHisTOFstartTimeMask->GetXaxis()->SetBinLabel(2,"TOF");
636  fHisTOFstartTimeMask->GetXaxis()->SetBinLabel(3,"T0A");
637  fHisTOFstartTimeMask->GetXaxis()->SetBinLabel(4,"TOF.and.T0A");
638  fHisTOFstartTimeMask->GetXaxis()->SetBinLabel(5,"T0C");
639  fHisTOFstartTimeMask->GetXaxis()->SetBinLabel(6,"TOF.and.T0C");
640  fHisTOFstartTimeMask->GetXaxis()->SetBinLabel(7,"T0AC");
641  fHisTOFstartTimeMask->GetXaxis()->SetBinLabel(8,"TOF.and.T0AC");
642 
643  hname="hTOFstartTimeRes";
644  fHisTOFstartTimeRes=new TH1F(hname.Data(),"TOF start time resolution; Resolution (ps) ;Entries", 100, 0.,300.);
645 
646  hname="hTOFstartTimeDistrib";
647  fHisTOFstartTimeDistrib=new TH1F(hname.Data(),"TOF start time distribution; Start time ;Entries", 400, -1000.,1000.);
648 
649  hname="hTOFtime";
650  fHisTOFtime=new TH1F(hname.Data(),"Distribution of TOF time Kaon;TOF time(Kaon) [ps];Entries", 1000, 0.,50000.);
651 
652  hname="hTOFtimeKaonHyptime";
653  fHisTOFtimeKaonHyptime=new TH2F(hname.Data(),"TOFtime - timeHypothesisForKaon;p[GeV/c];TOFtime - timeHypothesisForKaon [ps]",500,0.,10.,1000,-20000.,20000.);
654 
655  hname="hTOFtimeKaonHyptimeAC";
656  fHisTOFtimeKaonHyptimeAC=new TH2F(hname.Data(),"TOFtime - timeHypothesisForKaon;p[GeV/c];TOFtime - timeHypothesisForKaon [ps]",500,0.,10.,1000,-20000.,20000.);
657 
658  hname="hTOFsigmaKSigPid";
659  fHisTOFsigmaKSigPid=new TH2F(hname.Data(),"(TOFsignal-timeK)/tofSigPid;p[GeV/c];(TOFsignal-timeK)/tofSigPid",500,0.,10.,400,-20,20);
660 
661  hname="hTOFsigmaPionSigPid";
662  fHisTOFsigmaPionSigPid=new TH2F(hname.Data(),"(TOFsignal-time#pi)/tofSigPid;p[GeV/c];(TOFsignal-time#pi)/tofSigPid",500,0.,10.,400,-20,20);
663 
664  hname="hTOFsigmaProtonSigPid";
665  fHisTOFsigmaProtonSigPid=new TH2F(hname.Data(),"(TOFsignal-timep)/tofSigPid;p[GeV/c];(TOFsignal-time p)/tofSigPid",500,0.,10.,400,-20,20);
666 
667  hname="hTOFsigPid3sigPion";
668  fHisTOFsigPid3sigPion=new TH1F(hname.Data(),"TOF PID resolution (#pi) [ps]",500,0.,1000.);
669 
670  hname="hTOFsigPid3sigKaon";
671  fHisTOFsigPid3sigKaon=new TH1F(hname.Data(),"TOF PID resolution (K) [ps]",500,0.,1000.);
672 
673  hname="hTOFsigPid3sigProton";
674  fHisTOFsigPid3sigProton=new TH1F(hname.Data(),"TOF PID resolution (p) [ps]",500,0.,1000.);
675 
676 
677  //TPC pid
678  hname="hTPCsig";
679  fHisTPCsig=new TH1F(hname.Data(),"Distribution of TPC signal;TPC sig;Entries", 100, 35.,100.);
680 
681  hname="hTPCsigvsp";
682  fHisTPCsigvsp=new TH2F(hname.Data(),"TPCsig vs p;TPC p[GeV/c];TPCsig",500,0.,10.,1000,35.,100.);
683 
684  hname="hTPCsigvspAC";
685  fHisTPCsigvspAC=new TH2F(hname.Data(),"TPCsig vs p;TPCp[GeV/c];TPCsig",500,0.,10.,1000,35.,100.);
686 
687  hname="hTPCsigmaK";
688  fHisTPCsigmaK=new TH2F(hname.Data(),"TPC Sigma for K as a function of momentum;p[GeV/c];Sigma Kaon",500,0.,10.,400,-20,20);
689 
690  hname="hTPCsigmaPion";
691  fHisTPCsigmaPion=new TH2F(hname.Data(),"TPC Sigma for #pi as a function of momentum;p[GeV/c];Sigma #pi",500,0.,10.,400,-20,20);
692 
693  hname="hTPCsigmaProton";
694  fHisTPCsigmaProton=new TH2F(hname.Data(),"TPC Sigma for proton as a function of momentum;p[GeV/c];Sigma Proton",500,0.,10.,400,-20,20);
695 
696 
697  fOutputPID->Add(fHisTOFflags);
698  fOutputPID->Add(fHisTOFsig);
699  fOutputPID->Add(fHisTPCsig);
703  fOutputPID->Add(fHisTOFtime);
717 
719 
720  hname="hTPCsigNvsPtAllTracks";
721  fHisTPCsigNvsPtAllTracks=new TH2F(hname.Data(),"Distribution of n. points used for TPC dE/dx vs. p_{T};p_{T} [GeV/c]; n. points", 200, 0.,20.,161,-0.5,160.5);
722 
723  hname="hTPCsigNvsPhiAllTracks";
724  fHisTPCsigNvsPhiAllTracks=new TH2F(hname.Data(),"Distribution of n. points used for TPC dE/dx vs. #phi;#phi [rad]; n. points", 100, 0.,2*TMath::Pi(),161,-0.5,160.5);
725 
726  hname="hTPCsigNvsEtaAllTracks";
727  fHisTPCsigNvsEtaAllTracks=new TH2F(hname.Data(),"Distribution of n. points used for TPC dE/dx vs. #eta;eta; n. points", 80,-2.,2.,161,-0.5,160.5);
728 
729  hname="hTPCsigNvsPtDaughters";
730  fHisTPCsigNvsPtDaughters=new TH2F(hname.Data(),"Distribution of n. points used for TPC dE/dx vs. p_{T};p_{T} [GeV/c]; n. points", 200, 0.,20.,161,-0.5,160.5);
731 
732  hname="hTPCsigNvsPhiDaughters";
733  fHisTPCsigNvsPhiDaughters=new TH2F(hname.Data(),"Distribution of n. points used for TPC dE/dx vs. #phi;#phi [rad]; n. points", 100, 0.,2*TMath::Pi(),161,-0.5,160.5);
734 
735  hname="hTPCsigNvsEtaDaughters";
736  fHisTPCsigNvsEtaDaughters=new TH2F(hname.Data(),"Distribution of n. points used for TPC dE/dx vs. #eta;eta; n. points", 80,-2.,2.,161,-0.5,160.5);
737 
744  }
745 
746 
747  if(fReadMC){
748  //TOF
749  hname="hTOFsigmaMCKSigPid";
750  fHisTOFsigmaMCKSigPid=new TH2F(hname.Data(),"(TOFsignal-timeK)/tofSigPid;p[GeV/c];(TOFsignal-timeK)/tofSigPid",500,0.,10.,400,-20,20);
751 
752  hname="hTOFsigmaMCPionSigPid";
753  fHisTOFsigmaMCPionSigPid=new TH2F(hname.Data(),"(TOFsignal-time#pi)/tofSigPid;p[GeV/c];(TOFsignal-time#pi)/tofSigPid",500,0.,10.,400,-20,20);
754 
755  hname="hTOFsigmaMCProtonSigPid";
756  fHisTOFsigmaMCProtonSigPid=new TH2F(hname.Data(),"(TOFsignal-timep)/tofSigPid;p[GeV/c];(TOFsignal-time p)/tofSigPid",500,0.,10.,400,-20,20);
757 
758  //TPC
759  hname="hTPCsigmaMCK";
760  fHisTPCsigmaMCK=new TH2F(hname.Data(),"TPC Sigma for K as a function of momentum;p[GeV/c];Sigma Kaon",500,0.,10.,400,-20,20);
761 
762  hname="hTPCsigmaMCPion";
763  fHisTPCsigmaMCPion=new TH2F(hname.Data(),"TPC Sigma for #pi as a function of momentum;p[GeV/c];Sigma #pi",500,0.,10.,400,-20,20);
764 
765  hname="hTPCsigmaMCProton";
766  fHisTPCsigmaMCProton=new TH2F(hname.Data(),"TPC Sigma for proton as a function of momentum;p[GeV/c];Sigma Proton",500,0.,10.,400,-20,20);
767 
774 
775  }
776  }
777 
778  //quality of the tracks
779  if(fOnOff[0]){
780  fOutputTrack=new TList();
781  fOutputTrack->SetOwner();
782  fOutputTrack->SetName(GetOutputSlot(3)->GetContainer()->GetName());
783 
784  TString hname="hnClsITS";
785  fHisnClsITS=new TH1F(hname.Data(),"Distribution of number of ITS clusters;nITScls;Entries",7,-0.5,6.5);
786 
787  hname="hnClsITSselTr";
788  fHisnClsITSselTr=new TH1F(hname.Data(),"Distribution of number of ITS clusters selected tracks;nITScls;Entries",7,-0.5,6.5);
789 
790  hname="hnClsITS-SA";
791  fHisnClsITSSA=new TH1F(hname.Data(),"Distribution of number of ITS clusters(ITS-SA);nITScls;Entries",7,-0.5,6.5);
792 
793 
794  hname="hnLayerITS";
795  fHisnLayerITS=new TH1F(hname.Data(),"Number of tracks with point in layer;ITS layer;",7,-1.5,5.5);
796  fHisnLayerITS->GetXaxis()->SetBinLabel(1,"n tracks");
797  fHisnLayerITS->GetXaxis()->SetBinLabel(2,"SPDin");
798  fHisnLayerITS->GetXaxis()->SetBinLabel(3,"SPDout");
799  fHisnLayerITS->GetXaxis()->SetBinLabel(4,"SDDin");
800  fHisnLayerITS->GetXaxis()->SetBinLabel(5,"SDDout");
801  fHisnLayerITS->GetXaxis()->SetBinLabel(6,"SSDin");
802  fHisnLayerITS->GetXaxis()->SetBinLabel(7,"SSDout");
803 
804  hname="hnLayerITSselTr";
805  fHisnLayerITSselTr=new TH1F(hname.Data(),"Number of selected tracks with point in layer;ITS layer;",7,-1.5,5.5);
806  fHisnLayerITSselTr->GetXaxis()->SetBinLabel(1,"n tracks");
807  fHisnLayerITSselTr->GetXaxis()->SetBinLabel(2,"SPDin");
808  fHisnLayerITSselTr->GetXaxis()->SetBinLabel(3,"SPDout");
809  fHisnLayerITSselTr->GetXaxis()->SetBinLabel(4,"SDDin");
810  fHisnLayerITSselTr->GetXaxis()->SetBinLabel(5,"SDDout");
811  fHisnLayerITSselTr->GetXaxis()->SetBinLabel(6,"SSDin");
812  fHisnLayerITSselTr->GetXaxis()->SetBinLabel(7,"SSDout");
813 
814  hname="hnLayerITSsa";
815  fHisnLayerITSsa=new TH1F(hname.Data(),"Number of ITSsa tracks with point in layer;ITS layer;",7,-1.5,5.5);
816  fHisnLayerITSsa->GetXaxis()->SetBinLabel(1,"n tracks");
817  fHisnLayerITSsa->GetXaxis()->SetBinLabel(2,"SPDin");
818  fHisnLayerITSsa->GetXaxis()->SetBinLabel(3,"SPDout");
819  fHisnLayerITSsa->GetXaxis()->SetBinLabel(4,"SDDin");
820  fHisnLayerITSsa->GetXaxis()->SetBinLabel(5,"SDDout");
821  fHisnLayerITSsa->GetXaxis()->SetBinLabel(6,"SSDin");
822  fHisnLayerITSsa->GetXaxis()->SetBinLabel(7,"SSDout");
823 
824  hname="hnClsSPD";
825  fHisnClsSPD=new TH1F(hname.Data(),"Distribution of number of SPD clusters;nSPDcls;Entries",3,-0.5,2.5);
826 
827  hname="hptGoodTr";
828  fHisptGoodTr=new TH1F(hname.Data(),"Pt distribution of 'good' tracks;p_{t}[GeV];Entries/0.05 GeV/c",400,0.,20.);
829  fHisptGoodTr->SetTitleOffset(1.3,"Y");
830 
831  if(!fSimpleMode){
832  hname="hptGoodTrFromDaugh";
833  fHisptGoodTrFromDaugh=new TH1F(hname.Data(),"Pt distribution of 'good' candidate's daughters;p_{t}[GeV];Entries/0.05 GeV/c",400,0.,20.);
834  fHisptGoodTrFromDaugh->SetTitleOffset(1.3,"Y");
836  hname="hptGoodTrFromDaugh_filt";
837  fHisptGoodTrFromDaugh_filt=new TH1F(hname.Data(),"Pt distribution of 'good' candidate's daughters, cuts level;p_{t}[GeV];Entries/0.05 GeV/c",400,0.,20.);
838  fHisptGoodTrFromDaugh_filt->SetTitleOffset(1.3,"Y");
840  }
841 
842  hname="hdistrGoodTr";
843  fHisdistrGoodTr=new TH1F(hname.Data(),"Distribution of number of 'good' candidate's daughters per event;no.good-tracks/ev;Entries",4000,-0.5,3999.5);
844  fHisdistrGoodTr->SetTitleOffset(1.3,"Y");
845 
846  hname="hdistrSelTr";
847  fHisdistrSelTr=new TH1F(hname.Data(),"Distribution of number of Selected tracks per event;no.good-tracks/ev;Entries",4000,-0.5,3999.5);
848  fHisdistrSelTr->SetTitleOffset(1.3,"Y");
849 
850  hname="hd0dau";
851  fHisd0dau=new TH1F(hname.Data(),"Impact parameter (rphi) distribution of D daughter tracks;d_{0rphi}[cm];Entries/10^{3} cm",200,-0.1,0.1);
852 
853  hname="hd0dau_filt";
854  fHisd0dau_filt=new TH1F(hname.Data(),"Impact parameter (rphi) distribution of D daughter tracks, cut level;d_{0rphi}[cm];Entries/10^{3} cm",200,-0.1,0.1);
855 
856  hname="hd0dauphi";
857  fHisd0dauphi=new TH2F(hname.Data(), "Impact parameter (rphi) distribution of D daughter tracks versus #phi; #phi [rad]; d_{0rphi} [cm]",400,0,6.3,200,-0.1,0.1);
858 
859  hname="hd0dauphi_filt";
860  fHisd0dauphi_filt=new TH2F(hname.Data(), "Impact parameter (rphi) distribution of D daughter tracks versus #phi, cut level; #phi [rad]; d_{0rphi} [cm]",400,0,6.3,200,-0.1,0.1);
861 
862  hname="hd0zdau";
863  fHisd0zdau=new TH1F(hname.Data(),"Impact parameter (z) distribution of D daughter tracks;d_{0z}[cm];Entries/10^{3} cm",200,-0.1,0.1);
864 
865  hname="hd0zdau_filt";
866  fHisd0zdau_filt=new TH1F(hname.Data(),"Impact parameter (z) distribution of D daughter tracks, cut level;d_{0z}[cm];Entries/10^{3} cm",200,-0.1,0.1);
867 
868 
869  hname="hd0zdauphi";
870  fHisd0zdauphi=new TH2F(hname.Data(), "Impact parameter (z) distribution of D daughter tracks versus #phi; #phi [rad]; d_{0z} [cm]",400,0,6.3,200,-0.1,0.1);
871 
872  hname="hd0zdauphi_filt";
873  fHisd0zdauphi_filt=new TH2F(hname.Data(), "Impact parameter (z) distribution of D daughter tracks versus #phi, filtering level; #phi [rad]; d_{0z} [cm]",400,0,6.3,200,-0.1,0.1);
874 
875  hname="hd0TracksSPDin";
876  fHisd0TracksSPDin=new TH1F(hname.Data(),"Impact parameter (rphi) distribution of AOD tracks kITSrefit, SPDinner; d_{0rphi}[cm];Entries",200,-0.5,0.5);
877 
878  hname="hd0TracksSPDany";
879  fHisd0TracksSPDany=new TH1F(hname.Data(),"Impact parameter (rphi) distribution of AOD tracks kITSrefit, SPDany; d_{0rphi}[cm];Entries",200,-0.5,0.5);
880 
881  hname="hd0TracksFilterBit4";
882  fHisd0TracksFilterBit4=new TH1F(hname.Data(),"Impact parameter (rphi) distribution of AOD tracks FilterBit4; d_{0rphi}[cm];Entries",200,-0.5,0.5);
883 
884  hname="hd0TracksTPCITSSPDany";
885  fHisd0TracksTPCITSSPDany=new TH1F(hname.Data(),"Impact parameter (rphi) distribution of AOD tracks TPC+ITScuts+SPDany; d_{0rphi}[cm];Entries",200,-0.5,0.5);
886 
887 
889  hname="hPtDaughters";
890  fHisPtDaughters=new TH1F(hname.Data(),"p_{T} distributions of the daughter tracks;p_{T} [GeV/c];Entries",200,0.,20.);
891 
892  hname="hPhiDaughters";
893  fHisPhiDaughters=new TH1F(hname.Data(),"#phi distribution of the daughter tracks;#phi [rad];Entries",100,0.,2*(TMath::Pi()));
894 
895  hname="hEtaDaughters";
896  fHisEtaDaughters=new TH1F(hname.Data(),"#eta distribution of the daughter tracks;#eta;Entries",80,-2.,2.);
897 
898  hname="hEtavsPhiDaughters";
899  fHisEtavsPhiDaughters=new TH2F(hname.Data(),"#eta vs #phi distribution of the daughter tracks;#phi;#eta",100,0.,2*(TMath::Pi()),80,-2.,2.);
900 
901  hname="hNTPCclsvsPtDaughters";
902  fHisNTPCclsvsPtDaughters=new TH2F(hname.Data(),"N TPC clusters vs p_{T} distribution of the daughter tracks;p_{T} [GeV/c];N TPC cls",200,0.,20.,85,-0.5,169.5);
903 
904  hname="hNTPCclsvsPhiDaughters";
905  fHisNTPCclsvsPhiDaughters=new TH2F(hname.Data(),"N TPC clusters vs #phi distribution of the daughter tracks;#phi [rad];N TPC cls",100,0.,2*(TMath::Pi()),85,-0.5,169.5);
906 
907  hname="hNTPCclsvsEtaDaughters";
908  fHisNTPCclsvsEtaDaughters=new TH2F(hname.Data(),"N TPC clusters vs #eta distribution of the daughter tracks;#eta;N TPC cls",80,-2.,2.,85,-0.5,169.5);
909 
910  hname="hNTPCCrossedRowsvsPtDaughters";
911  fHisNTPCCrossedRowsvsPtDaughters=new TH2F(hname.Data(),"N TPC crossed rows vs p_{T} distribution of the daughter tracks;p_{T} [GeV/c];N TPC cros. rows",200,0.,20.,100,-0.5,199.5);
912 
913  hname="hNTPCCrossedRowsvsPhiDaughters";
914  fHisNTPCCrossedRowsvsPhiDaughters=new TH2F(hname.Data(),"N TPC crossed rows vs #phi distribution of the daughter tracks;#phi [rad];N TPC cros. rows",100,0.,2*(TMath::Pi()),100,-0.5,199.5);
915 
916  hname="hNTPCCrossedRowsvsEtaDaughters";
917  fHisNTPCCrossedRowsvsEtaDaughters=new TH2F(hname.Data(),"N TPC crossed rows vs #eta distribution of the daughter tracks;#eta;N TPC cros. rows",80,-2.,2.,100,-0.5,199.5);
918 
919  hname="hRatioCRowsOverFclsvsPtDaughters";
920  fHisRatioCRowsOverFclsvsPtDaughters=new TH2F(hname.Data(),"CrossedRows/FindableClusters vs p_{T} distribution of the daughter tracks;p_{T} [GeV/c];CRows/FCls",200,0.,20,100,0.,1.);
921 
922  hname="hRatioCRowsOverFclsvsPhiDaughters";
923  fHisRatioCRowsOverFclsvsPhiDaughters=new TH2F(hname.Data(),"CrossedRows/FindableClusters vs #phi distribution of the daughter tracks;#phi [rad];CRows/FCls",100,0.,2*(TMath::Pi()),100,0.,1.);
924 
925  hname="hRatioCRowsOverFclsvsEtaDaughters";
926  fHisRatioCRowsOverFclsvsEtaDaughters=new TH2F(hname.Data(),"CrossedRows/FindableClusters vs #eta distribution of the daughter tracks;#eta;CRows/FCls",80,-2.,2.,100,0.,1.);
927 
928  hname="hNITSclsvsPtDaughters";
929  fHisNITSclsvsPtDaughters=new TH2F(hname.Data(),"N ITS clusters vs p_{T} distribution of the daughter tracks;p_{T} [GeV/c];N ITS cls",200,0.,20,7,-0.5,6.5);
930 
931  hname="hNITSclsvsPhiDaughters";
932  fHisNITSclsvsPhiDaughters=new TH2F(hname.Data(),"N ITS clusters vs #phi distribution of the daughter tracks;#phi [rad];N ITS cls",100,0.,2*(TMath::Pi()),7,-0.5,6.5);
933 
934  hname="hNITSclsvsEtaDaughters";
935  fHisNITSclsvsEtaDaughters=new TH2F(hname.Data(),"N ITS clusters vs #eta distribution of the daughter tracks;#eta;N ITS cls",80,-2.,2.,7,-0.5,6.5);
936 
937  hname="hSPDclsDaughters";
938  fHisSPDclsDaughters = new TH1F(hname.Data(),"N SPD points distribution;;Entries",4,-0.5,3.5);
939  fHisSPDclsDaughters->GetXaxis()->SetBinLabel(1, "no SPD");
940  fHisSPDclsDaughters->GetXaxis()->SetBinLabel(2, "kOnlyFirst");
941  fHisSPDclsDaughters->GetXaxis()->SetBinLabel(3, "kOnlySecond");
942  fHisSPDclsDaughters->GetXaxis()->SetBinLabel(4, "kBoth");
943 
944  hname="hPtAllTracks";
945  fHisPtAllTracks=new TH1F(hname.Data(),"p_{T} distributions of the AOD tracks (ID>0);p_{T} [GeV/c];Entries",200,0.,20.);
946 
947  hname="hPhiAllTracks";
948  fHisPhiAllTracks=new TH1F(hname.Data(),"#phi distribution of the AOD tracks (ID>0);#phi [rad];Entries",100,0.,2*(TMath::Pi()));
949 
950  hname="hEtaAllTracks";
951  fHisEtaAllTracks=new TH1F(hname.Data(),"#eta distribution of the AOD tracks (ID>0);#eta;Entries",80,-2.,2.);
952 
953  hname="hEtavsPhiAllTracks";
954  fHisEtavsPhiAllTracks=new TH2F(hname.Data(),"#eta vs #phi distribution of the AOD tracks (ID>0);#phi;#eta",100,0.,2*(TMath::Pi()),80,-2.,2.);
955 
956  hname="hNTPCclsvsPtAllTracks";
957  fHisNTPCclsvsPtAllTracks=new TH2F(hname.Data(),"N TPC clusters vs p_{T} distribution of the AOD tracks (ID>0);p_{T} [GeV/c];N TPC cls",200,0.,20,85,-0.5,169.5);
958 
959  hname="hNTPCclsvsPhiAllTracks";
960  fHisNTPCclsvsPhiAllTracks=new TH2F(hname.Data(),"N TPC clusters vs #phi distribution of the AOD tracks (ID>0);#phi [rad];N TPC cls",100,0.,2*(TMath::Pi()),85,-0.5,169.5);
961 
962  hname="hNTPCclsvsEtaAllTracks";
963  fHisNTPCclsvsEtaAllTracks=new TH2F(hname.Data(),"N TPC clusters vs #eta distribution of the AOD tracks (ID>0);#eta;N TPC cls",80,-2.,2.,85,-0.5,169.5);
964 
965  hname="hNTPCCrossedRowsvsPtAllTracks";
966  fHisNTPCCrossedRowsvsPtAllTracks=new TH2F(hname.Data(),"N TPC crossed rows vs p_{T} distribution of the AOD tracks;p_{T} [GeV/c];N TPC cros. rows",200,0.,20.,100,-0.5,199.5);
967 
968  hname="hNTPCCrossedRowsvsPhiAllTracks";
969  fHisNTPCCrossedRowsvsPhiAllTracks=new TH2F(hname.Data(),"N TPC crossed rows vs #phi distribution of the AOD tracks;#phi [rad];N TPC cros. rows",100,0.,2*(TMath::Pi()),100,-0.5,199.5);
970 
971  hname="hNTPCCrossedRowsvsEtaAllTracks";
972  fHisNTPCCrossedRowsvsEtaAllTracks=new TH2F(hname.Data(),"N TPC crossed rows vs #eta distribution of the AOD tracks;#eta;N TPC cros. rows",80,-2.,2.,100,-0.5,199.5);
973 
974  hname="hRatioCRowsOverFclsvsPtAllTracks";
975  fHisRatioCRowsOverFclsvsPtAllTracks=new TH2F(hname.Data(),"CrossedRows/FindableClusters vs p_{T} distribution of the AOD tracks (ID>0);p_{T} [GeV/c];CRows/FCls",200,0.,20,100,0.,1.);
976 
977  hname="hRatioCRowsOverFclsvsPhiAllTracks";
978  fHisRatioCRowsOverFclsvsPhiAllTracks=new TH2F(hname.Data(),"CrossedRows/FindableClusters vs #phi distribution of the AOD tracks (ID>0);#phi [rad];CRows/FCls",100,0.,2*(TMath::Pi()),100,0.,1.);
979 
980  hname="hRatioCRowsOverFclsvsEtaAllTracks";
981  fHisRatioCRowsOverFclsvsEtaAllTracks=new TH2F(hname.Data(),"CrossedRows/FindableClusters vs #eta distribution of the AOD tracks (ID>0);#eta;CRows/FCls",80,-2.,2.,100,0.,1.);
982 
983  hname="hNITSclsvsPtAllTracks";
984  fHisNITSclsvsPtAllTracks=new TH2F(hname.Data(),"N ITS clusters vs p_{T} distribution of the AOD tracks (ID>0);p_{T} [GeV/c];N ITS cls",200,0.,20,7,-0.5,6.5);
985 
986  hname="hNITSclsvsPhiAllTracks";
987  fHisNITSclsvsPhiAllTracks=new TH2F(hname.Data(),"N ITS clusters vs #phi distribution of the AOD tracks (ID>0);#phi [rad];N ITS cls",100,0.,2*(TMath::Pi()),7,-0.5,6.5);
988 
989  hname="hNITSclsvsEtaAllTracks";
990  fHisNITSclsvsEtaAllTracks=new TH2F(hname.Data(),"N ITS clusters vs #eta distribution of the AOD tracks (ID>0);#eta;N ITS cls",80,-2.,2.,7,-0.5,6.5);
991 
992  hname="hSPDclsAllTracks";
993  fHisSPDclsAllTracks = new TH1F(hname.Data(),"N SPD points distribution AOD tracks (ID>0);;Entries",4,-0.5,3.5);
994  fHisSPDclsAllTracks->GetXaxis()->SetBinLabel(1, "no SPD");
995  fHisSPDclsAllTracks->GetXaxis()->SetBinLabel(2, "kOnlyFirst");
996  fHisSPDclsAllTracks->GetXaxis()->SetBinLabel(3, "kOnlySecond");
997  fHisSPDclsAllTracks->GetXaxis()->SetBinLabel(4, "kBoth");
998 
999 
1034 
1035  }
1036 
1037  fOutputTrack->Add(fHisnClsITS);
1043  fOutputTrack->Add(fHisnClsSPD);
1044  fOutputTrack->Add(fHisptGoodTr);
1051  fOutputTrack->Add(fHisd0dau);
1052  fOutputTrack->Add(fHisd0dauphi);
1053  fOutputTrack->Add(fHisd0zdau);
1059 
1060 
1061  if(fReadMC){
1062  hname="hdistrFakeTr";
1063  fHisdistrFakeTr=new TH1F(hname.Data(),"Distribution of number of fake tracks per event;no.fake-tracks/ev;Entries",4000,-0.5,3999.5);
1064  fHisdistrFakeTr->SetTitleOffset(1.3,"Y");
1065 
1066  hname="hd0f";
1067  fHisd0f=new TH1F(hname.Data(),"Impact parameter distribution of fake tracks;d_{0}[cm];Entries/10^{3} cm",200,-0.1,0.1);
1068 
1069  hname="hd0f_filt";
1070  fHisd0f_filt=new TH1F(hname.Data(),"Impact parameter distribution of fake tracks, cut level;d_{0}[cm];Entries/10^{3} cm",200,-0.1,0.1);
1071 
1072 
1073  hname="hptFakeTr";
1074  fHisptFakeTr=new TH1F(hname.Data(),"Pt distribution of fake tracks;p_{t}[GeV];Entries/0.05 GeV/c",400,0.,20.);
1075  fHisptFakeTr->SetTitleOffset(1.3,"Y");
1076  if(!fSimpleMode){
1077  hname="hptFakeTrFromDaugh";
1078  fHisptFakeTrFromDaugh=new TH1F(hname.Data(),"Pt distribution of fake tracks from daughters;p_{t}[GeV];Entries/0.05 GeV/c",400,0.,20.);
1079  fHisptFakeTrFromDaugh->SetTitleOffset(1.3,"Y");
1081 
1082  hname="hptFakeTrFromDaugh_filt";
1083  fHisptFakeTrFromDaughFilt=new TH1F(hname.Data(),"Pt distribution of fake tracks from daughters, cut level;p_{t}[GeV];Entries/0.05 GeV/c",400,0.,20.);
1084  fHisptFakeTrFromDaughFilt->SetTitleOffset(1.3,"Y");
1086  }
1087 
1088  fOutputTrack->Add(fHisptFakeTr);
1090  fOutputTrack->Add(fHisd0f);
1091  fOutputTrack->Add(fHisd0f_filt);
1092  }
1093  }
1094 
1095 
1096  if(fOnOff[2] && fCuts->GetUseCentrality()){
1097 
1098  //Centrality (Counters)
1099  fOutputCounters=new TList();
1100  fOutputCounters->SetOwner();
1101  fOutputCounters->SetName(GetOutputSlot(5)->GetContainer()->GetName());
1102 
1103  AliCounterCollection *stdEstimator=new AliCounterCollection("stdEstimator");
1104  stdEstimator->AddRubric("run",500000);
1105  stdEstimator->AddRubric("centralityclass","-10_0/0_10/10_20/20_30/30_40/40_50/50_60/60_70/70_80/80_90/90_100/-990_-980");
1106  stdEstimator->Init();
1107  AliCounterCollection *secondEstimator=new AliCounterCollection("secondEstimator");
1108  secondEstimator->AddRubric("run",500000);
1109  secondEstimator->AddRubric("centralityclass","-10_0/0_10/10_20/20_30/30_40/40_50/50_60/60_70/70_80/80_90/90_100/-990_-980");
1110  secondEstimator->Init();
1111 
1112  fOutputCounters->Add(stdEstimator);
1113  fOutputCounters->Add(secondEstimator);
1114 
1115  //Centrality (Checks)
1117  fOutputCheckCentrality->SetOwner();
1118  fOutputCheckCentrality->SetName(GetOutputSlot(6)->GetContainer()->GetName());
1119 
1120  TString hname="hNtrackletsIn";
1121  fHisNtrackletsIn=new TH1F(hname.Data(),"Number of tracklets in Centrality range;ntracklets;Entries",5000,-0.5,4999.5);
1122 
1123  hname="hMultIn";
1124  fHisMultIn=new TH1F(hname.Data(),"Multiplicity;multiplicity in Centrality range;Entries",10000,-0.5,9999.5);
1125 
1126  hname="hNtrackletsOut";
1127  fHisNtrackletsOut=new TH1F(hname.Data(),"Number of tracklets out of Centrality range;ntracklets;Entries",5000,-0.5,4999.5);
1128 
1129  hname="hMultOut";
1130  fHisMultOut=new TH1F(hname.Data(),"Multiplicity out of Centrality range;multiplicity;Entries",10000,-0.5,9999.5);
1131 
1132  hname="hMultvsPercentile";
1133  fHisMultvsPercentile=new TH2F(hname.Data(),"Multiplicity vs Percentile;multiplicity;percentile",10000,-0.5,9999.5,240,-10.,110);
1134 
1135  hname="hntrklvsPercentile";
1136  fHisntrklvsPercentile=new TH2F(hname.Data(),"N tracklets vs Percentile;ntracklets;percentile",5000,-0.5,4999.5,240,-10.,110);
1137 
1138  hname="hntrklvsPercentile01";
1139  fHisntrklvsPercentile01=new TH2F(hname.Data(),"N tracklets vs Percentile |#eta|<1;ntracklets;percentile",5000,-0.5,4999.5,240,-10.,110);
1140 
1141  hname="hntrklvsPercentile01AllEv";
1142  fHisntrklvsPercentile01AllEv=new TH2F(hname.Data(),"N tracklets vs Percentile |#eta|<1 - All Events;ntracklets;percentile",5000,-0.5,4999.5,240,-10.,110);
1143 
1144  hname="hnTPCTracksvsPercentile";
1145  fHisnTPCTracksvsPercentile=new TH2F(hname.Data(),"N TPC tracks vs Percentile;nTPCTracks;percentile",5000,-0.5,9999.5,240,-10.,110);
1146 
1147  hname="hnTPCITSTracksvsPercentile";
1148  fHisnTPCITSTracksvsPercentile=new TH2F(hname.Data(),"N TPC+ITS tracks vs Percentile;nTPCITSTracks;percentile",5000,-0.5,9999.5,240,-10.,110);
1149 
1150  hname="hnTPCITS1SPDTracksvsPercentile";
1151  fHisnTPCITS1SPDTracksvsPercentile=new TH2F(hname.Data(),"N TPC+ITS+1SPD tracks vs Percentile;nTPCITS1SPDTracks;percentile",5000,-0.5,9999.5,240,-10.,110);
1152 
1153  hname="hStdEstimSignalPercentile";
1154  fHisStdEstimSignalPercentile = new TH2F(hname.Data(),"Std estimator signal vs Percentile;Std estimator signal;percentile",1000,-0.5,9999.5,120,-10.,110);
1155 
1156  hname="hStdEstimSignalNtrackletsIn";
1157  fHisStdEstimSignalNtrackletsIn = new TH2F(hname.Data(),"Std estimator signal vs Number of tracklets in the CC;Std estimator signal;number of tracklets",1000,-0.5,9999.5,5000,-0.5,4999.5);
1158 
1159  hname="hStdEstimSignal";
1160  fHisStdEstimSignal = new TH1F(hname.Data(),"Std estimator signal",700,0,1400);
1161 
1162  hname="hStdPercentileSecondPercentile";
1163  fHisStdPercentileSecondPercentile = new TH2F(hname.Data(),"Std estimator Percentile Vs Second Estimator Percentile;Std estimator percentile;Second estimator percentile",120,-10.,110,120,-10.,110);
1164 
1165  hname="hStdSignalSecondSignal";
1166  fHisStdSignalSecondSignal = new TH2F(hname.Data(),"Std estimator signal Vs Second Estimator signal;Std estimator;Second estimator",1000,-0.5,9999.5,1000,-0.5,9999.5);
1167 
1168  hname="hStdPercentileOldFrwPercentile";
1169  fHisStdPercentileOldFrwPercentile = new TH2F(hname.Data(),"Std estimator Percentile Vs Old Framework estimator Percentile;Std estimator percentile;Old framework estimator percentile",120,-10.,110,120,-10.,110);
1170 
1171  hname="hStdPercentileOldFrwPercentileDev";
1172  fHisStdPercentileOldFrwPercentileDev = new TH1F(hname.Data(),"Std estimator Percentile Vs Old Framework estimator Percentile deviation",5,-0.5,4.5);
1173  fHisStdPercentileOldFrwPercentileDev->GetXaxis()->SetBinLabel(1, "nEvts with >1% difference");
1174  fHisStdPercentileOldFrwPercentileDev->GetXaxis()->SetBinLabel(2, "nEvts with >0.5% difference");
1175  fHisStdPercentileOldFrwPercentileDev->GetXaxis()->SetBinLabel(3, "nEvts default <20, new >20");
1176  fHisStdPercentileOldFrwPercentileDev->GetXaxis()->SetBinLabel(4, "nEvts default >20, new <20");
1177  fHisStdPercentileOldFrwPercentileDev->GetXaxis()->SetBinLabel(5, "nEvts rejected due to centrality mismatch");
1178 
1179 
1198 
1199  PostData(6,fOutputCheckCentrality);
1200 
1201  } else{
1202  if(fOnOff[0]){
1203  TString hname="hNtracklets";
1204  fHisNtracklets=new TH1F(hname.Data(),"Number of tracklets;ntracklets;Entries",5000,-0.5,4999.5);
1205  hname="hNtracklets01";
1206  fHisNtracklets01=new TH1F(hname.Data(),"Number of tracklets |#eta|<1;ntracklets;Entries",5000,-0.5,4999.5);
1207  hname="hNtracklets01AllEv";
1208  fHisNtracklets01AllEv=new TH1F(hname.Data(),"Number of tracklets |#eta|<1 - All events;ntracklets;Entries",5000,-0.5,4999.5);
1209  hname="hMult";
1210  fHisMult=new TH1F(hname.Data(),"Multiplicity;multiplicity;Entries",10000,-0.5,9999.5);
1211  hname="hMultFBit4";
1212  fHisMultFBit4=new TH1F(hname.Data(),"Multiplicity (global+tracklet) with filter bit 4;multiplicity;Entries",10000,-0.5,9999.5);
1213  hname="hMultComb05";
1214  fHisMultComb05=new TH1F(hname.Data(),"Multiplicity (global+tracklet) in |#eta|<0.5;multiplicity;Entries",10000,-0.5,9999.5);
1215  hname="hMultComb08";
1216  fHisMultComb08=new TH1F(hname.Data(),"Multiplicity (global+tracklet) in |#eta|<0.8;multiplicity;Entries",10000,-0.5,9999.5);
1217 
1221  fOutputTrack->Add(fHisMult);
1225  }
1226  }
1227 
1228  //event selection (z vertex for the moment)
1229  if(fOnOff[3]){
1230  fOutputEvSelection=new TList();
1231  fOutputEvSelection->SetOwner();
1232  fOutputEvSelection->SetName(GetOutputSlot(7)->GetContainer()->GetName());
1233  AliCounterCollection *evselection=new AliCounterCollection("evselection");
1234  evselection->AddRubric("run",500000);
1235  evselection->AddRubric("evnonsel","zvtx");
1236  evselection->Init();
1237 
1238  fHisxvtx=new TH1F("hxvtx", "Distribution of x_{VTX};x_{VTX} [cm];Entries",800,-1,1);
1239  fHisyvtx=new TH1F("hyvtx", "Distribution of y_{VTX};y_{VTX} [cm];Entries",800,-1,1);
1240  fHiszvtx=new TH1F("hzvtx", "Distribution of z_{VTX};z_{VTX} [cm];Entries",800,-30,30);
1241  fHisxvtxSelEv=new TH1F("hxvtxSelEv", "Distribution of x_{VTX} Selected Ev;x_{VTX} [cm];Entries",800,-1,1);
1242  fHisyvtxSelEv=new TH1F("hyvtxSelEv", "Distribution of y_{VTX} Selected Ev;y_{VTX} [cm];Entries",800,-1,1);
1243  fHiszvtxSelEv=new TH1F("hzvtxSelEv", "Distribution of z_{VTX} Selected Ev;z_{VTX} [cm];Entries",800,-30,30);
1244  fHisWhichVert=new TH1F("hWhichVert","Vertex Type",4,-1.5,2.5);
1245  fHisWhichVert->GetXaxis()->SetBinLabel(1,"Not found");
1246  fHisWhichVert->GetXaxis()->SetBinLabel(2,"Track");
1247  fHisWhichVert->GetXaxis()->SetBinLabel(3,"SPD-3D");
1248  fHisWhichVert->GetXaxis()->SetBinLabel(4,"SPD-z");
1249  fHisWhichVertSelEv=new TH1F("hWhichVertSelEv","Vertex Type",4,-1.5,2.5);
1250  fHisWhichVertSelEv->GetXaxis()->SetBinLabel(1,"Not found");
1251  fHisWhichVertSelEv->GetXaxis()->SetBinLabel(2,"Track");
1252  fHisWhichVertSelEv->GetXaxis()->SetBinLabel(3,"SPD-3D");
1253  fHisWhichVertSelEv->GetXaxis()->SetBinLabel(4,"SPD-z");
1254 
1255  fHisTrigCent=new TH2F("hTrigCent","Centrality vs. Trigger types",24,-1.5,22.5,12,-10,110);
1256  fHisTrigCent->GetXaxis()->SetBinLabel(1,"All");
1257  fHisTrigCent->GetXaxis()->SetBinLabel(2,"kAny");
1258  fHisTrigCent->GetXaxis()->SetBinLabel(3,"kMB");
1259  fHisTrigCent->GetXaxis()->SetBinLabel(4,"kINT7");
1260  fHisTrigCent->GetXaxis()->SetBinLabel(5,"kINT8");
1261  fHisTrigCent->GetXaxis()->SetBinLabel(6,"kCINT5");
1262  fHisTrigCent->GetXaxis()->SetBinLabel(7,"kCent");
1263  fHisTrigCent->GetXaxis()->SetBinLabel(8,"kSemiCent");
1264  fHisTrigCent->GetXaxis()->SetBinLabel(9,"kEMC1");
1265  fHisTrigCent->GetXaxis()->SetBinLabel(10,"kEMC7");
1266  fHisTrigCent->GetXaxis()->SetBinLabel(11,"kEMC8");
1267  fHisTrigCent->GetXaxis()->SetBinLabel(12,"kEMCJET7");
1268  fHisTrigCent->GetXaxis()->SetBinLabel(13,"kEMCGAMMA7");
1269  fHisTrigCent->GetXaxis()->SetBinLabel(14,"kEMCJET8");
1270  fHisTrigCent->GetXaxis()->SetBinLabel(15,"kEMCGAMMA8");
1271  fHisTrigCent->GetXaxis()->SetBinLabel(16,"Muons");
1272  fHisTrigCent->GetXaxis()->SetBinLabel(17,"PHOS");
1273  fHisTrigCent->GetXaxis()->SetBinLabel(18,"TRD");
1274  fHisTrigCent->GetXaxis()->SetBinLabel(19,"TRDHJT");
1275  fHisTrigCent->GetXaxis()->SetBinLabel(20,"TRDHSE");
1276  fHisTrigCent->GetXaxis()->SetBinLabel(21,"HighMult");
1277  fHisTrigCent->GetXaxis()->SetBinLabel(22,"SPI7");
1278  fHisTrigCent->GetXaxis()->SetBinLabel(23,"SPI8");
1279  fHisTrigCent->GetXaxis()->SetBinLabel(24,"Others");
1280 
1281  fHisTrigMul=new TH2F("hTrigMul","Multiplicity vs. Trigger types",24,-1.5,22.5,1000,0.,10000.);
1282  fHisTrigMul->GetXaxis()->SetBinLabel(1,"All");
1283  fHisTrigMul->GetXaxis()->SetBinLabel(2,"kAny");
1284  fHisTrigMul->GetXaxis()->SetBinLabel(3,"kMB");
1285  fHisTrigMul->GetXaxis()->SetBinLabel(4,"kINT7");
1286  fHisTrigMul->GetXaxis()->SetBinLabel(5,"kINT8");
1287  fHisTrigMul->GetXaxis()->SetBinLabel(6,"kCINT5");
1288  fHisTrigMul->GetXaxis()->SetBinLabel(7,"kCent");
1289  fHisTrigMul->GetXaxis()->SetBinLabel(8,"kSemiCent");
1290  fHisTrigMul->GetXaxis()->SetBinLabel(9,"kEMC1");
1291  fHisTrigMul->GetXaxis()->SetBinLabel(10,"kEMC7");
1292  fHisTrigMul->GetXaxis()->SetBinLabel(11,"kEMC8");
1293  fHisTrigMul->GetXaxis()->SetBinLabel(12,"kEMCJET7");
1294  fHisTrigMul->GetXaxis()->SetBinLabel(13,"kEMCGAMMA7");
1295  fHisTrigMul->GetXaxis()->SetBinLabel(14,"kEMCJET8");
1296  fHisTrigMul->GetXaxis()->SetBinLabel(15,"kEMCGAMMA8");
1297  fHisTrigMul->GetXaxis()->SetBinLabel(16,"Muons");
1298  fHisTrigMul->GetXaxis()->SetBinLabel(17,"PHOS");
1299  fHisTrigMul->GetXaxis()->SetBinLabel(18,"TRD");
1300  fHisTrigMul->GetXaxis()->SetBinLabel(19,"TRDHJT");
1301  fHisTrigMul->GetXaxis()->SetBinLabel(20,"TRDHSE");
1302  fHisTrigMul->GetXaxis()->SetBinLabel(21,"HighMult");
1303  fHisTrigMul->GetXaxis()->SetBinLabel(22,"SPI7");
1304  fHisTrigMul->GetXaxis()->SetBinLabel(23,"SPI8");
1305  fHisTrigMul->GetXaxis()->SetBinLabel(24,"Others");
1306 
1307  fHisTrigCentSel=new TH2F("hTrigCentSel","Trigger types",24,-1.5,22.5,12,-10,110);
1308  fHisTrigCentSel->GetXaxis()->SetBinLabel(1,"All");
1309  fHisTrigCentSel->GetXaxis()->SetBinLabel(2,"kAny");
1310  fHisTrigCentSel->GetXaxis()->SetBinLabel(3,"kMB");
1311  fHisTrigCentSel->GetXaxis()->SetBinLabel(4,"kINT7");
1312  fHisTrigCentSel->GetXaxis()->SetBinLabel(5,"kINT8");
1313  fHisTrigCentSel->GetXaxis()->SetBinLabel(6,"kCINT5");
1314  fHisTrigCentSel->GetXaxis()->SetBinLabel(7,"kCent");
1315  fHisTrigCentSel->GetXaxis()->SetBinLabel(8,"kSemiCent");
1316  fHisTrigCentSel->GetXaxis()->SetBinLabel(9,"kEMC1");
1317  fHisTrigCentSel->GetXaxis()->SetBinLabel(10,"kEMC7");
1318  fHisTrigCentSel->GetXaxis()->SetBinLabel(11,"kEMC8");
1319  fHisTrigCentSel->GetXaxis()->SetBinLabel(12,"kEMCJET7");
1320  fHisTrigCentSel->GetXaxis()->SetBinLabel(13,"kEMCGAMMA7");
1321  fHisTrigCentSel->GetXaxis()->SetBinLabel(14,"kEMCJET8");
1322  fHisTrigCentSel->GetXaxis()->SetBinLabel(15,"kEMCGAMMA8");
1323  fHisTrigCentSel->GetXaxis()->SetBinLabel(16,"Muons");
1324  fHisTrigCentSel->GetXaxis()->SetBinLabel(17,"PHOS");
1325  fHisTrigCentSel->GetXaxis()->SetBinLabel(18,"TRD");
1326  fHisTrigCentSel->GetXaxis()->SetBinLabel(19,"TRDHJT");
1327  fHisTrigCentSel->GetXaxis()->SetBinLabel(20,"TRDHSE");
1328  fHisTrigCentSel->GetXaxis()->SetBinLabel(21,"HighMult");
1329  fHisTrigCentSel->GetXaxis()->SetBinLabel(22,"SPI7");
1330  fHisTrigCentSel->GetXaxis()->SetBinLabel(23,"SPI8");
1331  fHisTrigCentSel->GetXaxis()->SetBinLabel(24,"Others");
1332 
1333  fHisTrigMulSel=new TH2F("hTrigMulSel","Multiplicity after selection vs. Trigger types",24,-1.5,22.5,1000,0.,10000.);
1334  fHisTrigMulSel->GetXaxis()->SetBinLabel(1,"All");
1335  fHisTrigMulSel->GetXaxis()->SetBinLabel(2,"kAny");
1336  fHisTrigMulSel->GetXaxis()->SetBinLabel(3,"kMB");
1337  fHisTrigMulSel->GetXaxis()->SetBinLabel(4,"kINT7");
1338  fHisTrigMulSel->GetXaxis()->SetBinLabel(5,"kINT8");
1339  fHisTrigMulSel->GetXaxis()->SetBinLabel(6,"kCINT5");
1340  fHisTrigMulSel->GetXaxis()->SetBinLabel(7,"kCent");
1341  fHisTrigMulSel->GetXaxis()->SetBinLabel(8,"kSemiCent");
1342  fHisTrigMulSel->GetXaxis()->SetBinLabel(9,"kEMC1");
1343  fHisTrigMulSel->GetXaxis()->SetBinLabel(10,"kEMC7");
1344  fHisTrigMulSel->GetXaxis()->SetBinLabel(11,"kEMC8");
1345  fHisTrigMulSel->GetXaxis()->SetBinLabel(12,"kEMCJET7");
1346  fHisTrigMulSel->GetXaxis()->SetBinLabel(13,"kEMCGAMMA7");
1347  fHisTrigMulSel->GetXaxis()->SetBinLabel(14,"kEMCJET8");
1348  fHisTrigMulSel->GetXaxis()->SetBinLabel(15,"kEMCGAMMA8");
1349  fHisTrigMulSel->GetXaxis()->SetBinLabel(16,"Muons");
1350  fHisTrigMulSel->GetXaxis()->SetBinLabel(17,"PHOS");
1351  fHisTrigMulSel->GetXaxis()->SetBinLabel(18,"TRD");
1352  fHisTrigMulSel->GetXaxis()->SetBinLabel(19,"TRDHJT");
1353  fHisTrigMulSel->GetXaxis()->SetBinLabel(20,"TRDHSE");
1354  fHisTrigMulSel->GetXaxis()->SetBinLabel(21,"HighMult");
1355  fHisTrigMulSel->GetXaxis()->SetBinLabel(22,"SPI7");
1356  fHisTrigMulSel->GetXaxis()->SetBinLabel(23,"SPI8");
1357  fHisTrigMulSel->GetXaxis()->SetBinLabel(24,"Others");
1358 
1359  AliCounterCollection *trigCounter=new AliCounterCollection("trigCounter");
1360  trigCounter->AddRubric("run",500000);
1361  trigCounter->AddRubric("triggerType","All/Any/MB/Cent/SemiCent/EMCAL/MUON/NoPhysSelMUON/NoPhysSelEvNot7/NoPhysSelCMUP1/NoPhysSelMB/NoPhysSelCent/NoPhysSelSemiCent/CINT7/INT8");
1362  trigCounter->Init();
1363 
1364  AliCounterCollection *trigCounter2=new AliCounterCollection("trigCounter2");
1365  trigCounter2->AddRubric("run",500000);
1366  trigCounter2->AddRubric("triggerType","All/Any/MB/CINT7/INT8/NoPhysSelEvNot7/NoPhysSelMB/HighMult/SPI7/SPI8/EMC1/EMC7/EMC8/EMCJET7/EMCJET8/EMCGAMMA/TRD/TRDHJT/TRDHSE");
1367  trigCounter2->Init();
1368 
1369  fHisWhyEvRejected=new TH1F("hWhyEvRejected", "Why Event rejected",7,-1.5,5.5);
1370 
1371  fHisWhyEvRejected->GetXaxis()->SetBinLabel(1,"N events");
1372  fHisWhyEvRejected->GetXaxis()->SetBinLabel(2,"pileup");
1373  fHisWhyEvRejected->GetXaxis()->SetBinLabel(3,"centrality");
1374  fHisWhyEvRejected->GetXaxis()->SetBinLabel(4,"Vertex not found");
1375  fHisWhyEvRejected->GetXaxis()->SetBinLabel(5,"trigger");
1376  fHisWhyEvRejected->GetXaxis()->SetBinLabel(6,"z vertex out of 10 cm");
1377  fHisWhyEvRejected->GetXaxis()->SetBinLabel(7,"physics sel");
1378 
1379 
1380  fOutputEvSelection->Add(evselection);
1393  fOutputEvSelection->Add(trigCounter);
1394  fOutputEvSelection->Add(trigCounter2);
1396 
1397  }
1398  if(fOnOff[4]){ // FLOW OBSERVABLES
1399  fOutputFlowObs=new TList();
1400  fOutputFlowObs->SetOwner();
1401  fOutputFlowObs->SetName(GetOutputSlot(8)->GetContainer()->GetName());
1402 
1403  fFlowEvent = new AliFlowEvent(3000);
1404  fRFPcuts = new AliFlowTrackCuts("rfpCuts");
1405 
1406  fHisFEvents = new TH2F("hFlowEvents","FlowEvent Selection",7,0,7,7,-10,60);
1407  fHisFEvents->GetXaxis()->SetBinLabel(1,"REACHED");
1408  fHisFEvents->GetXaxis()->SetBinLabel(2,"TRIGGERED");
1409  fHisFEvents->GetXaxis()->SetBinLabel(3,"kMB");
1410  fHisFEvents->GetXaxis()->SetBinLabel(4,"kCent");
1411  fHisFEvents->GetXaxis()->SetBinLabel(5,"kSemiC");
1412  fHisFEvents->GetXaxis()->SetBinLabel(6,"Triggered + vtx cut");
1413  fHisFEvents->GetXaxis()->SetBinLabel(7,"UnexpectedBehaviour");
1415 
1416  TString ref[3] = {"FB1","FB128","VZE"};
1417  Int_t etabin[3] = {40,40,20};
1418  Int_t etamax[3] = { 1, 1, 5};
1419  for(Int_t i=0; i<3; ++i) {
1420  fHisQ[i]= new TProfile2D( Form("h%s_Q",ref[i].Data()),
1421  Form("Q_{2} components for %s",ref[i].Data()),
1422  4,0,4,12,0,60,"s");
1423  fHisQ[i]->GetXaxis()->SetBinLabel(1,"Qx^{-}");
1424  fHisQ[i]->GetXaxis()->SetBinLabel(2,"Qy^{-}");
1425  fHisQ[i]->GetXaxis()->SetBinLabel(3,"Qx^{+}");
1426  fHisQ[i]->GetXaxis()->SetBinLabel(4,"Qy^{+}");
1427  fHisQ[i]->GetYaxis()->SetTitle("Centrality");
1428  fOutputFlowObs->Add(fHisQ[i]);
1429 
1430  fHisAngleQ[i] = new TH2F( Form("h%s_AngleQ",ref[i].Data()),
1431  Form("#Psi_{2} for %s",ref[i].Data()),
1432  72,0,TMath::Pi(),12,0,60);
1433  fHisAngleQ[i]->GetXaxis()->SetTitle( Form("#Psi_{2}^{%s}",ref[i].Data()) );
1434  fHisAngleQ[i]->GetYaxis()->SetTitle("Centrality");
1435  fOutputFlowObs->Add(fHisAngleQ[i]);
1436 
1437  fHisPhiEta[i] = new TH3F( Form("h%s_PhiEta",ref[i].Data()),
1438  Form("Eta vs Phi for %s",ref[i].Data()),
1439  144,0,TMath::TwoPi(),etabin[i],-1.0*etamax[i],+1.0*etamax[i],12,0,60);
1440  fHisPhiEta[i]->GetXaxis()->SetTitle("Phi");
1441  fHisPhiEta[i]->GetYaxis()->SetTitle("Eta");
1442  fHisPhiEta[i]->GetZaxis()->SetTitle("Centrality");
1443  fOutputFlowObs->Add(fHisPhiEta[i]);
1444 
1445  }
1446  fHisTPCVZE_AngleQ = new TH3F("hTPCVZE_AngleQ","#Psi_{2}^{VZERO} vs #Psi_{2}^{TPC}", 72,0,TMath::Pi(),72,0,TMath::Pi(),12,0,60);
1447  fHisTPCVZE_AngleQ->GetXaxis()->SetTitle("#Psi_{2}^{TPC}");
1448  fHisTPCVZE_AngleQ->GetYaxis()->SetTitle("#Psi_{2}^{VZE}");
1449  fHisTPCVZE_AngleQ->GetZaxis()->SetTitle("Centrality");
1451 
1452  fHisCentVsMultRPS = new TH2F("hCentVsMultRPS", " Centrality Vs. Multiplicity RPs",5000, 0, 5000.,12,0,60 );
1453  fHisCentVsMultRPS->GetXaxis()->SetTitle("Multiplicity RPs");
1454  fHisCentVsMultRPS->GetYaxis()->SetTitle("Centrality");
1456  }
1457 
1458  // Post the data
1459  PostData(1,fOutputEntries);
1460 
1461  if(fOnOff[1]) PostData(2,fOutputPID);
1462  if(fOnOff[0]) PostData(3,fOutputTrack);
1463  PostData(4,fCuts);
1464  if(fOnOff[2]) PostData(5,fOutputCounters);
1465  if(fOnOff[3]) PostData(7,fOutputEvSelection);
1466  if(fOnOff[4]) PostData(8,fOutputFlowObs);
1467 
1468  if(!fOnOff[0] && !fOnOff[1] && !fOnOff[2]) AliError("Nothing will be filled!");
1469 }
1470 
1471 //___________________________________________________________________________
1473 {
1475 
1476  AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
1477  if(fDebug>2) printf("Analysing decay %d\n",fDecayChannel);
1478  // Post the data already here
1479  PostData(1,fOutputEntries);
1480  if(fOnOff[1]) PostData(2,fOutputPID);
1481  if(fOnOff[0]) PostData(3,fOutputTrack);
1482  PostData(4,fCuts);
1483  if(fOnOff[2]) {
1484  PostData(5,fOutputCounters);
1485  if(fCuts->GetUseCentrality()) PostData(6,fOutputCheckCentrality);
1486  }
1487 
1488 
1489  fHisNentries->Fill(0);
1490  if(fAODProtection>=0){
1491  // Protection against different number of events in the AOD and deltaAOD
1492  // In case of discrepancy the event is rejected.
1493  Int_t matchingAODdeltaAODlevel = AliRDHFCuts::CheckMatchingAODdeltaAODevents();
1494  if (matchingAODdeltaAODlevel==-1) fHisNentries->Fill(2);
1495  if (matchingAODdeltaAODlevel==0) fHisNentries->Fill(3);
1496  if (matchingAODdeltaAODlevel<0 || (matchingAODdeltaAODlevel==0 && fAODProtection==1)) {
1497  // AOD/deltaAOD trees have different number of entries || TProcessID do not match while it was required
1498  return;
1499  }
1500  fHisNentries->Fill(1);
1501  }
1502 
1504 
1505 
1506  TClonesArray *arrayProng =0;
1507 
1508  // Load all the branches of the DeltaAOD - needed for SelectionBit counting
1509  TClonesArray *arrayProngD0toKpi =0;
1510  TClonesArray *arrayProng3Prong =0;
1511  TClonesArray *arrayProng4Prong =0;
1512  TClonesArray *arrayProngDstar =0;
1513  TClonesArray *arrayProngCascades =0;
1514 
1515  Int_t pdg=0;
1516  Int_t *pdgdaughters=0x0;
1518 
1519  if(!aod && AODEvent() && IsStandardAOD()) {
1520  // In case there is an AOD handler writing a standard AOD, use the AOD
1521  // event in memory rather than the input (ESD) event.
1522  aod = dynamic_cast<AliAODEvent*> (AODEvent());
1523  // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
1524  // have to taken from the AOD event hold by the AliAODExtension
1525  AliAODHandler* aodHandler = (AliAODHandler*)
1526  ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
1527  if(aodHandler->GetExtensions()) {
1528 
1529  AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
1530  AliAODEvent *aodFromExt = ext->GetAOD();
1531 
1532  arrayProng3Prong =(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong");
1533  arrayProng4Prong =(TClonesArray*)aodFromExt->GetList()->FindObject("Charm4Prong");
1534  arrayProngD0toKpi =(TClonesArray*)aodFromExt->GetList()->FindObject("D0toKpi");
1535  arrayProngDstar =(TClonesArray*)aodFromExt->GetList()->FindObject("Dstar");
1536  arrayProngCascades=(TClonesArray*)aodFromExt->GetList()->FindObject("CascadesHF");
1537 
1538  switch(fDecayChannel){
1539 
1540  case 0:
1541  arrayProng=arrayProng3Prong;
1542  pdg=411;
1543  if(fReadMC){
1544  pdgdaughters =new Int_t[3];
1545  pdgdaughters[0]=211;//pi
1546  pdgdaughters[1]=321;//K
1547  pdgdaughters[2]=211;//pi
1548  }
1549  break;
1550  case 1:
1551  arrayProng=arrayProngD0toKpi;
1552  pdg=421;
1553  if(fReadMC){
1554  pdgdaughters =new Int_t[2];
1555  pdgdaughters[0]=211;//pi
1556  pdgdaughters[1]=321;//K
1557  }
1558  break;
1559  case 2:
1560  arrayProng=arrayProngDstar;
1561  pdg=413;
1562  if(fReadMC){
1563  pdgdaughters =new Int_t[3];
1564  pdgdaughters[1]=211;//pi
1565  pdgdaughters[0]=321;//K
1566  pdgdaughters[2]=211;//pi (soft?)
1567  }
1568  break;
1569  case 3:
1570  arrayProng=arrayProng3Prong;
1571  pdg=431;
1572  if(fReadMC){
1573  pdgdaughters =new Int_t[3];
1574  pdgdaughters[0]=321;//K
1575  pdgdaughters[1]=321;//K
1576  pdgdaughters[2]=211;//pi
1577  }
1578  break;
1579  case 4:
1580  arrayProng=arrayProng4Prong;
1581  pdg=421;
1582  if(fReadMC){
1583  pdgdaughters =new Int_t[4];
1584  pdgdaughters[0]=321;
1585  pdgdaughters[1]=211;
1586  pdgdaughters[2]=211;
1587  pdgdaughters[3]=211;
1588  }
1589  break;
1590  case 5:
1591  arrayProng=arrayProng3Prong;
1592  pdg=4122;
1593  if(fReadMC){
1594  pdgdaughters =new Int_t[3];
1595  pdgdaughters[0]=2212;//p
1596  pdgdaughters[1]=321;//K
1597  pdgdaughters[2]=211;//pi
1598  }
1599  break;
1600  case kLambdactoV0:
1601  arrayProng=arrayProngCascades;
1602  pdg=4122;
1603  if(fReadMC){
1604  pdgdaughters =new Int_t[3];
1605  pdgdaughters[0]=2212;//p
1606  pdgdaughters[1]=211;//pi
1607  pdgdaughters[2]=211;//pi
1608  }
1609  break;
1610  }
1611  }
1612  } else if(aod) {
1613 
1614  arrayProng3Prong =(TClonesArray*)aod->GetList()->FindObject("Charm3Prong");
1615  arrayProng4Prong =(TClonesArray*)aod->GetList()->FindObject("Charm4Prong");
1616  arrayProngD0toKpi =(TClonesArray*)aod->GetList()->FindObject("D0toKpi");
1617  arrayProngDstar =(TClonesArray*)aod->GetList()->FindObject("Dstar");
1618  arrayProngCascades=(TClonesArray*)aod->GetList()->FindObject("CascadesHF");
1619 
1620  switch(fDecayChannel){
1621 
1622  case 0:
1623  arrayProng=arrayProng3Prong;
1624  pdg=411;
1625  if(fReadMC){
1626  pdgdaughters =new Int_t[3];
1627  pdgdaughters[0]=211;//pi
1628  pdgdaughters[1]=321;//K
1629  pdgdaughters[2]=211;//pi
1630  }
1631  break;
1632  case 1:
1633  arrayProng=arrayProngD0toKpi;
1634  pdg=421;
1635  if(fReadMC){
1636  pdgdaughters =new Int_t[2];
1637  pdgdaughters[0]=211;//pi
1638  pdgdaughters[1]=321;//K
1639  }
1640  break;
1641  case 2:
1642  arrayProng=arrayProngDstar;
1643  pdg=413;
1644  if(fReadMC){
1645  pdgdaughters =new Int_t[3];
1646  pdgdaughters[1]=211;//pi
1647  pdgdaughters[0]=321;//K
1648  pdgdaughters[2]=211;//pi (soft?)
1649  }
1650  break;
1651  case 3:
1652  arrayProng=arrayProng3Prong;
1653  pdg=431;
1654  if(fReadMC){
1655  pdgdaughters =new Int_t[3];
1656  pdgdaughters[0]=321;//K
1657  pdgdaughters[1]=321;//K
1658  pdgdaughters[2]=211;//pi
1659  }
1660  break;
1661  case 4:
1662  arrayProng=arrayProng4Prong;
1663  pdg=421;
1664  if(fReadMC){
1665  pdgdaughters =new Int_t[4];
1666  pdgdaughters[0]=321;
1667  pdgdaughters[1]=211;
1668  pdgdaughters[2]=211;
1669  pdgdaughters[3]=211;
1670  }
1671  break;
1672  case 5:
1673  arrayProng=arrayProng3Prong;
1674  pdg=4122;
1675  if(fReadMC){
1676  pdgdaughters =new Int_t[3];
1677  pdgdaughters[0]=2212;//p
1678  pdgdaughters[1]=321;//K
1679  pdgdaughters[2]=211;//pi
1680  }
1681  break;
1682  case kLambdactoV0:
1683  arrayProng=arrayProngCascades;
1684  pdg=4122;
1685  if(fReadMC){
1686  pdgdaughters =new Int_t[3];
1687  pdgdaughters[0]=2212;//p
1688  pdgdaughters[1]=211;//pi
1689  pdgdaughters[2]=211;//pi
1690  }
1691  break;
1692  }
1693  }
1694  Bool_t isSimpleMode=fSimpleMode;
1695  if(!arrayProng) {
1696  AliInfo("Branch not found! The output will contain only track related histograms\n");
1697  isSimpleMode=kTRUE;
1698  fHisNentries->Fill(7);
1699  }
1700 
1701  TClonesArray *mcArray = 0;
1702  AliAODMCHeader *mcHeader = 0;
1703 
1704  if(!aod) {
1705  delete [] pdgdaughters;
1706  return;
1707  }
1708 
1709  //check if MC
1710  if(fReadMC) {
1711  // load MC particles
1712  mcArray = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
1713  if(!mcArray) {
1714  printf("AliAnalysisTaskSEHFQA::UserExec: MC particles branch not found!\n");
1715  delete [] pdgdaughters;
1716  return;
1717  }
1718 
1719  // load MC header
1720  mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1721  if(!mcHeader) {
1722  printf("AliAnalysisTaskSEHFQA::UserExec: MC header branch not found!\n");
1723  delete [] pdgdaughters;
1724  return;
1725  }
1726  }
1727 
1728 
1729  UInt_t evSelMask=((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1731  AliAODHeader * header = dynamic_cast<AliAODHeader*>(aod->GetHeader());
1732  if(!header) AliFatal("Not a standard AOD");
1733 
1734  Double_t multiplicity=header->GetRefMultiplicity();
1735  Int_t runNumber = aod->GetRunNumber();
1736  TString trigClass=aod->GetFiredTriggerClasses();
1737  Int_t nAODtracks=aod->GetNumberOfTracks();
1738  Int_t nSelTracksTPCOnly=0;
1739  Int_t nSelTracksTPCITS=0;
1740  Int_t nSelTracksTPCITS1SPD=0;
1741  Int_t ntracksFBit4=0;
1742 
1743  AliTRDTriggerAnalysis trdSelection;
1744  trdSelection.CalcTriggers(aod);
1745 
1746  if(fReadMC) {
1747  if(aod->GetTriggerMask()==0 &&
1748  (runNumber>=195344 && runNumber<=195677)){
1749  AliDebug(3,"Event rejected because of null trigger mask");
1750  delete [] pdgdaughters;
1751  return;
1752  }
1753  }
1754 
1755  for (Int_t k=0;k<nAODtracks;k++){
1756  AliAODTrack* track=dynamic_cast<AliAODTrack*>(aod->GetTrack(k));
1757  if(!track) AliFatal("Not a standard AOD");
1758  if(track->GetID()<0) continue;
1759  Int_t nclsTot=0,nclsSPD=0;
1760  for(Int_t l=0;l<6;l++) {
1761  if(TESTBIT(track->GetITSClusterMap(),l)) {
1762  nclsTot++; if(l<2) nclsSPD++;
1763  }
1764  }
1765  UShort_t nTPCClus=track->GetTPCClusterMap().CountBits();
1766  if(TMath::Abs(track->Eta())<0.8 && nTPCClus>=70 && track->GetStatus()&AliESDtrack::kTPCrefit){
1767  if(track->TestFilterBit(1)) nSelTracksTPCOnly++;
1768  if(track->GetStatus()&AliESDtrack::kITSrefit){
1769  nSelTracksTPCITS++;
1770  if(nclsSPD>0) nSelTracksTPCITS1SPD++;
1771  }
1772  }
1773  if(track->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)){
1774  ntracksFBit4++;
1775  }
1776  }
1777 
1778  if(fOnOff[4]) {
1779  FillFlowObs(aod);
1780  PostData(8,fOutputFlowObs);
1781  }
1782  if(fOnOff[3]){
1783  AliCounterCollection* trigCount=(AliCounterCollection*)fOutputEvSelection->FindObject("trigCounter");
1784  AliCounterCollection* trigCount2=(AliCounterCollection*)fOutputEvSelection->FindObject("trigCounter2");
1785 
1786  fHisTrigCent->Fill(-1.,centrality);
1787  fHisTrigMul->Fill(-1.,multiplicity);
1788  trigCount->Count(Form("triggerType:All/Run:%d",runNumber));
1789  trigCount2->Count(Form("triggerType:All/Run:%d",runNumber));
1790  if(evSelMask==0){
1791  if(aod->GetEventType()!=7 || trigClass.Contains("BEAMB")){
1792  trigCount->Count(Form("triggerType:NoPhysSelEvNot7/Run:%d",runNumber));
1793  trigCount2->Count(Form("triggerType:NoPhysSelEvNot7/Run:%d",runNumber));
1794  }else if(trigClass.Contains("CMUP1")){
1795  trigCount->Count(Form("triggerType:NoPhysSelCMUP1/Run:%d",runNumber));
1796  }else if(trigClass.Contains("MUON")){
1797  trigCount->Count(Form("triggerType:NoPhysSelMUON/Run:%d",runNumber));
1798  }else if(trigClass.Contains("CPBI2_B1-B") || trigClass.Contains(" CPBI2WU_B1-B")){
1799  trigCount->Count(Form("triggerType:NoPhysSelMB/Run:%d",runNumber));
1800  trigCount2->Count(Form("triggerType:NoPhysSelMB/Run:%d",runNumber));
1801  }else if(trigClass.Contains("CCENT") || trigClass.Contains("CVHN")){
1802  trigCount->Count(Form("triggerType:NoPhysSelCent/Run:%d",runNumber));
1803  }else if(trigClass.Contains("CSEMI") || trigClass.Contains("CVLN")){
1804  trigCount->Count(Form("triggerType:NoPhysSelSemiCent/Run:%d",runNumber));
1805  }
1806  }
1807  if(evSelMask & AliVEvent::kAny){
1808  fHisTrigCent->Fill(0.,centrality);
1809  fHisTrigMul->Fill(0.,multiplicity);
1810  trigCount->Count(Form("triggerType:Any/Run:%d",runNumber));
1811  trigCount2->Count(Form("triggerType:Any/Run:%d",runNumber));
1812  }
1813  if(evSelMask & AliVEvent::kMB){
1814  fHisTrigCent->Fill(1.,centrality);
1815  fHisTrigMul->Fill(1.,multiplicity);
1816  trigCount->Count(Form("triggerType:MB/Run:%d",runNumber));
1817  trigCount2->Count(Form("triggerType:MB/Run:%d",runNumber));
1818  }
1819  if(evSelMask & AliVEvent::kINT7){
1820  fHisTrigCent->Fill(2.,centrality);
1821  fHisTrigMul->Fill(2.,multiplicity);
1822  trigCount->Count(Form("triggerType:CINT7/Run:%d",runNumber));
1823  trigCount2->Count(Form("triggerType:CINT7/Run:%d",runNumber));
1824  }
1825  if(evSelMask & AliVEvent::kINT8){
1826  fHisTrigCent->Fill(3.,centrality);
1827  fHisTrigMul->Fill(3.,multiplicity);
1828  trigCount->Count(Form("triggerType:INT8/Run:%d",runNumber));
1829  trigCount2->Count(Form("triggerType:INT8/Run:%d",runNumber));
1830  }
1831  if(evSelMask & AliVEvent::kCINT5){
1832  fHisTrigCent->Fill(4.,centrality);
1833  fHisTrigMul->Fill(4.,multiplicity);
1834  }
1835  if(evSelMask & AliVEvent::kCentral){
1836  fHisTrigCent->Fill(5.,centrality);
1837  fHisTrigMul->Fill(5.,multiplicity);
1838  trigCount->Count(Form("triggerType:Cent/Run:%d",runNumber));
1839  }
1840  if(evSelMask & AliVEvent::kSemiCentral){
1841  fHisTrigCent->Fill(6.,centrality);
1842  fHisTrigMul->Fill(6.,multiplicity);
1843  trigCount->Count(Form("triggerType:SemiCent/Run:%d",runNumber));
1844  }
1845 
1846  if(evSelMask & AliVEvent::kEMC1){
1847  fHisTrigCent->Fill(7.,centrality);
1848  fHisTrigMul->Fill(7.,multiplicity);
1849  trigCount->Count(Form("triggerType:EMCAL/Run:%d",runNumber));
1850  trigCount2->Count(Form("triggerType:EMC1/Run:%d",runNumber));
1851  }
1852  if((evSelMask & AliVEvent::kEMC7) && trigClass.Contains("CEMC7")){
1853  fHisTrigCent->Fill(8.,centrality);
1854  fHisTrigMul->Fill(8.,multiplicity);
1855  trigCount->Count(Form("triggerType:EMCAL/Run:%d",runNumber));
1856  trigCount2->Count(Form("triggerType:EMC7/Run:%d",runNumber));
1857  }
1858  if((evSelMask & AliVEvent::kEMC8) && trigClass.Contains("CEMC8")){
1859  fHisTrigCent->Fill(9.,centrality);
1860  fHisTrigMul->Fill(9.,multiplicity);
1861  trigCount->Count(Form("triggerType:EMCAL/Run:%d",runNumber));
1862  trigCount2->Count(Form("triggerType:EMC8/Run:%d",runNumber));
1863  }
1864  if(evSelMask & AliVEvent::kEMCEJE){
1865  trigCount->Count(Form("triggerType:EMCAL/Run:%d",runNumber));
1866  if(trigClass.Contains("CEMC7EJE")) {
1867  trigCount2->Count(Form("triggerType:EMCJET7/Run:%d",runNumber));
1868  fHisTrigCent->Fill(10.,centrality);
1869  fHisTrigMul->Fill(10.,multiplicity);
1870 
1871  }
1872  else if(trigClass.Contains("CEMC8EJE")) {
1873  trigCount2->Count(Form("triggerType:EMCJET8/Run:%d",runNumber));
1874  fHisTrigCent->Fill(12.,centrality);
1875  fHisTrigMul->Fill(12.,multiplicity);
1876  }
1877  }
1878  if(evSelMask & AliVEvent::kEMCEGA){
1879  if(trigClass.Contains("CEMC7EGA")) {
1880  fHisTrigCent->Fill(11.,centrality);
1881  fHisTrigMul->Fill(11.,multiplicity);
1882  } else if (trigClass.Contains("CEMC8EGA")){
1883  fHisTrigCent->Fill(13.,centrality);
1884  fHisTrigMul->Fill(13.,multiplicity);
1885 
1886  }
1887  trigCount->Count(Form("triggerType:EMCAL/Run:%d",runNumber));
1888  trigCount2->Count(Form("triggerType:EMCGAMMA/Run:%d",runNumber));
1889  }
1890  if(evSelMask & (((AliVEvent::kCMUS5 | AliVEvent::kMUSH7) | (AliVEvent::kMUL7 | AliVEvent::kMUU7)) | (AliVEvent::kMUS7 | AliVEvent::kMUON))){
1891  fHisTrigCent->Fill(14.,centrality);
1892  fHisTrigMul->Fill(14.,multiplicity);
1893  trigCount->Count(Form("triggerType:MUON/Run:%d",runNumber));
1894  }
1895  if(evSelMask & (AliVEvent::kPHI1 | AliVEvent::kPHI7)){
1896  fHisTrigCent->Fill(15.,centrality);
1897  fHisTrigMul->Fill(15.,multiplicity);
1898  }
1899  if(evSelMask & (AliVEvent::kTRD)){
1900  fHisTrigCent->Fill(16.,centrality);
1901  fHisTrigMul->Fill(16.,multiplicity);
1902  trigCount2->Count(Form("triggerType:TRD/Run:%d",runNumber));
1903  }
1904  if((evSelMask & AliVEvent::kTRD) && trdSelection.IsFired(AliTRDTriggerAnalysis::kHJT)){
1905  fHisTrigCent->Fill(17.,centrality);
1906  fHisTrigMul->Fill(17.,multiplicity);
1907  trigCount2->Count(Form("triggerType:TRDHJT/Run:%d",runNumber));
1908  }
1909  if((evSelMask & AliVEvent::kTRD) && trdSelection.IsFired(AliTRDTriggerAnalysis::kHSE)){
1910  fHisTrigCent->Fill(18.,centrality);
1911  fHisTrigMul->Fill(18.,multiplicity);
1912  trigCount2->Count(Form("triggerType:TRDHSE/Run:%d",runNumber));
1913  }
1914  if(evSelMask & (AliVEvent::kHighMult)){
1915  fHisTrigCent->Fill(19.,centrality);
1916  fHisTrigMul->Fill(19.,multiplicity);
1917  trigCount2->Count(Form("triggerType:HighMult/Run:%d",runNumber));
1918  }
1919  if(evSelMask & AliVEvent::kSPI7){
1920  if(trigClass.Contains("CSPI7")) {
1921  fHisTrigCent->Fill(20.,centrality);
1922  fHisTrigMul->Fill(20.,multiplicity);
1923  trigCount2->Count(Form("triggerType:SPI7/Run:%d",runNumber));
1924  }
1925  }
1926  if(evSelMask & AliVEvent::kSPI){
1927  if(trigClass.Contains("CSPI8")) {
1928  fHisTrigCent->Fill(21.,centrality);
1929  fHisTrigMul->Fill(21.,multiplicity);
1930  trigCount2->Count(Form("triggerType:SPI8/Run:%d",runNumber));
1931  }
1932  }
1933  if(evSelMask & (AliVEvent::kDG5 | AliVEvent::kZED)){
1934  fHisTrigCent->Fill(22.,centrality);
1935  fHisTrigMul->Fill(22.,multiplicity);
1936  }
1937  }
1938 
1939 
1940  // fix for temporary bug in ESDfilter
1941  // the AODs with null vertex pointer didn't pass the PhysSel
1942  Double_t magField = aod->GetMagneticField();
1943  if(!aod->GetPrimaryVertex() || TMath::Abs(magField)<0.001) {
1944  delete [] pdgdaughters;
1945  return;
1946  }
1947 
1948  // count event
1949  fHisNentries->Fill(5);
1950  //count events with good vertex
1951  // AOD primary vertex
1952  AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
1953  Double_t pos[3],cov[6];
1954  vtx1->GetXYZ(pos);
1955  vtx1->GetCovarianceMatrix(cov);
1956  const AliESDVertex vESD(pos,cov,100.,100);
1957 
1958  TString primTitle = vtx1->GetTitle();
1959  if(primTitle.Contains("VertexerTracks") && vtx1->GetNContributors()>0) fHisNentries->Fill(9);
1960 
1961  // trigger class for PbPb C0SMH-B-NOPF-ALLNOTRD, C0SMH-B-NOPF-ALL
1962  //TString trigclass=aod->GetFiredTriggerClasses();
1963  //if(trigclass.Contains("C0SMH-B-NOPF-ALLNOTRD") || trigclass.Contains("C0SMH-B-NOPF-ALL")) fHisNentries->Fill(9); //tmp
1964 
1965 
1966 
1967 
1968  Bool_t evSelbyCentrality=kTRUE,evSelected=kTRUE,evSelByVertex=kTRUE,evselByPileup=kTRUE,evSelByPS=kTRUE;
1969 
1970  if(fOnOff[3]){
1971  fHisWhyEvRejected->Fill(-1);
1972  }
1973 
1974  //select event
1975  if(!fCuts->IsEventSelected(aod)) {
1976  evSelected=kFALSE;
1978  fHisWhyEvRejected->Fill(0);
1979  evselByPileup=kFALSE;
1980  }// rejected for pileup
1982  fHisWhyEvRejected->Fill(1);
1983  evSelbyCentrality=kFALSE; //rejected by centrality
1984  }
1987  evSelByVertex=kFALSE;
1988  fHisWhyEvRejected->Fill(2);
1989  }
1991  fHisWhyEvRejected->Fill(3);
1992  }
1994  evSelByVertex=kFALSE;
1995  if(fOnOff[3]) ((AliCounterCollection*)fOutputEvSelection->FindObject("evselection"))->Count(Form("evnonsel:zvtx/Run:%d",runNumber));
1996  fHisWhyEvRejected->Fill(4);
1997  }
1999  evSelByPS=kFALSE;
2000  fHisWhyEvRejected->Fill(5);
2001  }
2002  }
2003  if(evSelected && fOnOff[3]){
2004  fHisTrigCentSel->Fill(-1.,centrality);
2005  fHisTrigMulSel->Fill(-1.,multiplicity);
2006  if(evSelMask & AliVEvent::kAny) {
2007  fHisTrigCentSel->Fill(0.,centrality);
2008  fHisTrigMulSel->Fill(0.,multiplicity);}
2009  if(evSelMask & AliVEvent::kMB) {
2010  fHisTrigCentSel->Fill(1.,centrality);
2011  fHisTrigMulSel->Fill(1.,multiplicity);}
2012  if(evSelMask & AliVEvent::kINT7){
2013  fHisTrigCentSel->Fill(2.,centrality);
2014  fHisTrigMulSel->Fill(2.,multiplicity);}
2015  if(evSelMask & AliVEvent::kINT8){
2016  fHisTrigCentSel->Fill(3.,centrality);
2017  fHisTrigMulSel->Fill(3.,multiplicity);}
2018  if(evSelMask & AliVEvent::kCINT5){
2019  fHisTrigCentSel->Fill(4.,centrality);
2020  fHisTrigMulSel->Fill(4.,multiplicity);}
2021  if(evSelMask & AliVEvent::kCentral){
2022  fHisTrigCentSel->Fill(5.,centrality);
2023  fHisTrigMulSel->Fill(5.,multiplicity);}
2024  if(evSelMask & AliVEvent::kSemiCentral){
2025  fHisTrigCentSel->Fill(6.,centrality);
2026  fHisTrigMulSel->Fill(6.,multiplicity);}
2027  if(evSelMask & AliVEvent::kEMC1){
2028  fHisTrigCentSel->Fill(7.,centrality);
2029  fHisTrigMulSel->Fill(7.,multiplicity);
2030  }
2031  if((evSelMask & AliVEvent::kEMC7) && trigClass.Contains("CEMC7")){
2032  fHisTrigCentSel->Fill(8.,centrality);
2033  fHisTrigMulSel->Fill(8.,multiplicity);
2034  }
2035  if((evSelMask & AliVEvent::kEMC8) && trigClass.Contains("CEMC8")){
2036  fHisTrigCentSel->Fill(9.,centrality);
2037  fHisTrigMulSel->Fill(9.,multiplicity);
2038  }
2039  if((evSelMask & AliVEvent::kEMCEJE) && trigClass.Contains("CEMC7EJE")){
2040  fHisTrigCentSel->Fill(10.,centrality);
2041  fHisTrigMulSel->Fill(10.,multiplicity);
2042  }
2043  if((evSelMask & AliVEvent::kEMCEGA) && trigClass.Contains("CEMC7EGA")){
2044  fHisTrigCentSel->Fill(11.,centrality);
2045  fHisTrigMulSel->Fill(11.,multiplicity);
2046  }
2047  if((evSelMask & AliVEvent::kEMCEJE) && trigClass.Contains("CEMC8EJE")){
2048  fHisTrigCentSel->Fill(12.,centrality);
2049  fHisTrigMulSel->Fill(12.,multiplicity);
2050  }
2051  if((evSelMask & AliVEvent::kEMCEGA) && trigClass.Contains("CEMC8EGA")){
2052  fHisTrigCentSel->Fill(13.,centrality);
2053  fHisTrigMulSel->Fill(13.,multiplicity);
2054  }
2055  if(evSelMask & (((AliVEvent::kCMUS5 | AliVEvent::kMUSH7) | (AliVEvent::kMUL7 | AliVEvent::kMUU7)) | (AliVEvent::kMUS7 | AliVEvent::kMUON))){
2056  fHisTrigCentSel->Fill(14.,centrality);
2057  fHisTrigMulSel->Fill(14.,multiplicity);}
2058  if(evSelMask & (AliVEvent::kPHI1 | AliVEvent::kPHI7)){
2059  fHisTrigCentSel->Fill(15.,centrality);
2060  fHisTrigMulSel->Fill(15.,multiplicity);}
2061  if(evSelMask & (AliVEvent::kTRD)){
2062  fHisTrigCentSel->Fill(16.,centrality);
2063  fHisTrigMulSel->Fill(16.,multiplicity);
2064  }
2065  if((evSelMask & AliVEvent::kTRD) && trdSelection.IsFired(AliTRDTriggerAnalysis::kHJT)){
2066  fHisTrigCentSel->Fill(17.,centrality);
2067  fHisTrigMulSel->Fill(17.,multiplicity);
2068  }
2069  if((evSelMask & AliVEvent::kTRD) && trdSelection.IsFired(AliTRDTriggerAnalysis::kHSE)){
2070  fHisTrigCentSel->Fill(18.,centrality);
2071  fHisTrigMulSel->Fill(18.,multiplicity);
2072  }
2073  if(evSelMask & (AliVEvent::kHighMult)){
2074  fHisTrigCentSel->Fill(19.,centrality);
2075  fHisTrigMulSel->Fill(19.,multiplicity);}
2076  if(evSelMask & AliVEvent::kSPI7){
2077  if(trigClass.Contains("CSPI7")) {
2078  fHisTrigCentSel->Fill(20.,centrality);
2079  fHisTrigMulSel->Fill(20.,multiplicity);
2080  }
2081  }
2082  if(evSelMask & AliVEvent::kSPI){
2083  if(trigClass.Contains("CSPI8")) {
2084  fHisTrigCentSel->Fill(21.,centrality);
2085  fHisTrigMulSel->Fill(21.,multiplicity);
2086  }
2087  }
2088  if(evSelMask & (AliVEvent::kDG5 | AliVEvent::kZED)){
2089  fHisTrigCentSel->Fill(22.,centrality);
2090  fHisTrigMulSel->Fill(22.,multiplicity);}
2091  }
2092 
2093  if(evSelected || (!evSelbyCentrality && evSelByVertex && evselByPileup && evSelByPS)){ //events selected or not selected because of centrality
2094  if(fOnOff[2] && fCuts->GetUseCentrality()){
2095 
2096  Float_t stdCentf=fCuts->GetCentrality(aod);
2097  Int_t stdCent = (Int_t)(stdCentf+0.5);
2098  Float_t secondCentf =fCuts->GetCentrality(aod,fEstimator);
2099  Int_t secondCent = (Int_t)(secondCentf+0.5);
2100  Int_t mincent=stdCent-stdCent%10;
2101  Float_t stdSignal = 0.;
2102  Float_t secondSignal = 0.;
2103  AliAODVZERO *vzeroAOD = (AliAODVZERO*)aod->GetVZEROData();
2104  AliAODZDC *zdcAOD = (AliAODZDC*)aod->GetZDCData();
2105  const Double_t *towerZNASignal = zdcAOD->GetZNATowerEnergy();
2106  switch(fCuts->GetUseCentrality())
2107  {
2108  case AliRDHFCuts::kCentV0M:
2109  stdSignal = vzeroAOD->GetMTotV0A() + vzeroAOD->GetMTotV0C();
2110  break;
2111  case AliRDHFCuts::kCentV0A:
2112  stdSignal = vzeroAOD->GetMTotV0A();
2113  break;
2114  case AliRDHFCuts::kCentZNA:
2115  stdSignal = towerZNASignal[0];
2116  break;
2117  default:
2118  stdSignal = 0.;
2119  break;
2120  }
2121  switch(fEstimator)
2122  {
2123  case AliRDHFCuts::kCentV0M:
2124  secondSignal = vzeroAOD->GetMTotV0A() + vzeroAOD->GetMTotV0C();
2125  break;
2126  case AliRDHFCuts::kCentV0A:
2127  secondSignal = vzeroAOD->GetMTotV0A();
2128  break;
2129  case AliRDHFCuts::kCentZNA:
2130  secondSignal = towerZNASignal[0];
2131  break;
2132  default:
2133  secondSignal = 0.;
2134  break;
2135  }
2136  //AliCentrality *aodcent = aod->GetCentrality();
2137  // Float_t spdCentf = aodcent->GetCentralityPercentile("CL1");
2138  if(stdCentf==-1) {
2139  mincent=-10;
2140  stdCent=-1;
2141  }
2142  if(mincent==100)mincent--;
2143  ((AliCounterCollection*)fOutputCounters->FindObject("stdEstimator"))->Count(Form("centralityclass:%d_%d/Run:%d",mincent,mincent+10,runNumber));
2144 
2145  mincent=secondCent-secondCent%10;
2146  if(secondCentf==-1) {
2147  mincent=-10;
2148  secondCent=-1;
2149  }
2150  if(mincent==100)mincent--;
2151  ((AliCounterCollection*)fOutputCounters->FindObject("secondEstimator"))->Count(Form("centralityclass:%d_%d/Run:%d",mincent,mincent+10,runNumber));
2152 
2153  if(stdCent<fCuts->GetMinCentrality() || stdCent>fCuts->GetMaxCentrality()){
2154  fHisNtrackletsOut->Fill(aod->GetTracklets()->GetNumberOfTracklets());
2155  fHisMultOut->Fill(header->GetRefMultiplicity());
2156  }else{
2157  fHisNtrackletsIn->Fill(aod->GetTracklets()->GetNumberOfTracklets());
2158  fHisMultIn->Fill(header->GetRefMultiplicity());
2159  }
2160  fHisMultvsPercentile->Fill(header->GetRefMultiplicity(),stdCentf);
2161  fHisntrklvsPercentile->Fill(aod->GetTracklets()->GetNumberOfTracklets(),stdCentf);
2163  fHisnTPCTracksvsPercentile->Fill(nSelTracksTPCOnly,stdCentf);
2164  fHisnTPCITSTracksvsPercentile->Fill(nSelTracksTPCITS,stdCentf);
2165  fHisnTPCITS1SPDTracksvsPercentile->Fill(nSelTracksTPCITS1SPD,stdCentf);
2166  fHisStdEstimSignalPercentile->Fill(stdSignal,stdCentf);
2167  fHisStdEstimSignal->Fill(stdSignal);
2168  fHisStdEstimSignalNtrackletsIn->Fill(stdSignal,aod->GetTracklets()->GetNumberOfTracklets());
2169  fHisStdPercentileSecondPercentile->Fill(stdCentf,secondCentf);
2170  fHisStdSignalSecondSignal->Fill(stdSignal,secondSignal);
2171 
2172  if( (fCuts->GetMultSelectionObjectName()).CompareTo("MultSelection")!=0 ){
2173  AliMultSelection *multSelectionOld = (AliMultSelection*) aod -> FindListObject("MultSelection");
2174  Float_t oldFrmwCent = multSelectionOld ? multSelectionOld->GetMultiplicityPercentile("V0M") : -1;
2175  // Printf(" HFQA task: new centrality %3.3f vs old centrality %3.2f \n",stdCentf,oldFrmwCent);
2176  fHisStdPercentileOldFrwPercentile->Fill(stdCentf,oldFrmwCent);
2177  //
2178  Double_t differenceCent = TMath::Abs( stdCentf - oldFrmwCent );
2179  if(differenceCent>1) fHisStdPercentileOldFrwPercentileDev->Fill(0.);
2180  if(differenceCent>0.5) fHisStdPercentileOldFrwPercentileDev->Fill(1.);
2181  if( (stdCentf<20) && (oldFrmwCent>20) ) fHisStdPercentileOldFrwPercentileDev->Fill(2.);
2182  if( (stdCentf>20) && (oldFrmwCent<20) ) fHisStdPercentileOldFrwPercentileDev->Fill(3.);
2184  }
2185 
2186  PostData(6,fOutputCheckCentrality);
2187 
2188  } else{
2189  if(fOnOff[0]){
2190  fHisNtracklets->Fill(aod->GetTracklets()->GetNumberOfTracklets());
2192  fHisMult->Fill(header->GetRefMultiplicity());
2193  fHisMultFBit4->Fill(ntracksFBit4);
2194  fHisMultComb05->Fill(header->GetRefMultiplicityComb05());
2195  fHisMultComb08->Fill(header->GetRefMultiplicityComb08());
2196  }
2197  }
2198  }
2199 
2200  if(evSelected || (!evSelbyCentrality && evSelByVertex && evselByPileup && evSelByPS) || (!evSelByVertex && evselByPileup && evSelByPS)){ //events selected or not selected because of centrality
2201  if(fOnOff[2] && fCuts->GetUseCentrality()){
2203  }else{
2204  if(fOnOff[0]){
2206  }
2207  }
2208  }
2209 
2210  if(fOnOff[3]){
2211  const AliVVertex *vertex = aod->GetPrimaryVertex();
2212  Double_t xvtx=vertex->GetX();
2213  Double_t yvtx=vertex->GetY();
2214  Double_t zvtx=vertex->GetZ();
2215  Int_t vtxTyp=0;
2216  if(vertex->GetNContributors()<=0) vtxTyp=-1;
2217  TString title=vertex->GetTitle();
2218  if(title.Contains("Z")) vtxTyp=2;
2219  if(title.Contains("3D")) vtxTyp=1;
2220  fHisxvtx->Fill(xvtx);
2221  fHisyvtx->Fill(yvtx);
2222  fHiszvtx->Fill(zvtx);
2223  fHisWhichVert->Fill(vtxTyp);
2224  if(evSelected){
2225  fHisxvtxSelEv->Fill(xvtx);
2226  fHisyvtxSelEv->Fill(yvtx);
2227  fHiszvtxSelEv->Fill(zvtx);
2228  fHisWhichVertSelEv->Fill(vtxTyp);
2229  }
2230  }
2231 
2232  if(!evSelected) {
2233  delete [] pdgdaughters;
2234  return; //discard all events not selected (vtx and/or centrality)
2235  }
2236 
2237 
2238  AliAODPidHF* pidHF=fCuts->GetPidHF();
2239  if(!pidHF) {
2240  delete [] pdgdaughters;
2241  return;
2242  }
2243  //load all the branches, re-fill the candidates and fill the SelectionBit histo
2244 
2245  Int_t nCand3Prong = arrayProng3Prong->GetEntriesFast();
2246  Int_t nCandD0toKpi = arrayProngD0toKpi->GetEntriesFast();
2247  Int_t nCandDstar = arrayProngDstar->GetEntriesFast();
2248  Int_t nCandCasc=0;
2249  Int_t n4Prong=0;
2250  if(arrayProngCascades)nCandCasc = arrayProngCascades->GetEntriesFast();
2251  if(arrayProng4Prong)n4Prong = arrayProng4Prong->GetEntriesFast();
2252  // D+, Ds and Lc
2253  AliAODRecoDecayHF *d;
2254  for (Int_t iCand = 0; iCand < nCand3Prong; iCand++) {
2255  d = (AliAODRecoDecayHF*)arrayProng3Prong->UncheckedAt(iCand);
2256  if(!vHF->FillRecoCand(aod,(AliAODRecoDecayHF3Prong*)d))continue;
2257 
2258  if(fUseSelectionBit && !isSimpleMode){
2259  Double_t ptCand_selBit = d->Pt();
2260  if(fUseSelectionBit && d->GetSelectionMap()) {
2261  if(d->HasSelectionBit(AliRDHFCuts::kDplusCuts)) fHisNentriesSelBit->Fill(0.0,ptCand_selBit);
2262  if(d->HasSelectionBit(AliRDHFCuts::kDsCuts)) fHisNentriesSelBit->Fill(1.0,ptCand_selBit);
2263  if(d->HasSelectionBit(AliRDHFCuts::kLcCuts)) fHisNentriesSelBit->Fill(2.0,ptCand_selBit);
2264  }
2265  }
2266  }
2267  // D0kpi
2268  for (Int_t iCand = 0; iCand < nCandD0toKpi; iCand++) {
2269  d = (AliAODRecoDecayHF*)arrayProngD0toKpi->UncheckedAt(iCand);
2270  if(!vHF->FillRecoCand(aod,(AliAODRecoDecayHF2Prong*)d))continue;
2271  if(fUseSelectionBit && !isSimpleMode){
2272  Double_t ptCand_selBit = d->Pt();
2273  if(fUseSelectionBit && d->GetSelectionMap()) {
2274  if(d->HasSelectionBit(AliRDHFCuts::kD0toKpiCuts)) fHisNentriesSelBit->Fill(3.0,ptCand_selBit);
2275  }
2276  }
2277  }
2278  // Dstar
2279  for (Int_t iCand = 0; iCand < nCandDstar; iCand++) {
2280  d = (AliAODRecoDecayHF*)arrayProngDstar->UncheckedAt(iCand);
2281  if(!vHF->FillRecoCasc(aod,((AliAODRecoCascadeHF*)d),kTRUE))continue;
2282  if(fUseSelectionBit && !isSimpleMode){
2283  Double_t ptCand_selBit = d->Pt();
2284  if(fUseSelectionBit && d->GetSelectionMap()) {
2285  if(d->HasSelectionBit(AliRDHFCuts::kDstarCuts)) fHisNentriesSelBit->Fill(4.0,ptCand_selBit);
2286  }
2287  }
2288  }
2289 // //Cascade
2290  if(arrayProngCascades){
2291  for (Int_t iCand = 0; iCand < nCandCasc; iCand++) {
2292  d=(AliAODRecoDecayHF*)arrayProngCascades->UncheckedAt(iCand);
2293  if(!vHF->FillRecoCasc(aod,((AliAODRecoCascadeHF*)d),kFALSE))continue;
2294  }
2295  }
2296  //end refill
2297 
2298  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
2299  AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
2300  AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
2301 
2302  //AliPIDResponse* respF=pidHF->GetPidResponse();
2303  AliTPCPIDResponse* tpcres=new AliTPCPIDResponse();
2304  Bool_t oldPID=pidHF->GetOldPid();
2305  if(oldPID){
2306  Double_t alephParameters[5];
2307  pidHF->GetTPCBetheBlochParams(alephParameters);
2308  tpcres->SetBetheBlochParameters(alephParameters[0],alephParameters[1],alephParameters[2],alephParameters[3],alephParameters[4]);
2309  }
2310 
2311 
2312  Int_t ntracks=0;
2313  Int_t isGoodTrack=0, isFakeTrack=0, isSelTrack=0;
2314 
2315  if(aod) ntracks=aod->GetNumberOfTracks();
2316 
2317  if(fOnOff[0] || fOnOff[1]){
2318  //loop on tracks in the event
2319  for (Int_t k=0;k<ntracks;k++){
2320  AliAODTrack* track=dynamic_cast<AliAODTrack*>(aod->GetTrack(k));
2321  if(!track) AliFatal("Not a standard AOD");
2322  // Track selection cuts
2323  if(track->GetID()<0) continue;
2324  Double_t d0z0[2],covd0z0[3];
2325  if(!track->PropagateToDCA(vtx1,magField,99999.,d0z0,covd0z0)) continue;
2326  if(track->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)){
2327  fHisd0TracksFilterBit4->Fill(d0z0[0]);
2328  }
2329  ULong_t trStatus=track->GetStatus();
2330  if(trStatus&AliESDtrack::kITSrefit){
2331  if(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)){
2332  fHisd0TracksSPDany->Fill(d0z0[0]);
2333  if(track->HasPointOnITSLayer(0)){
2334  fHisd0TracksSPDin->Fill(d0z0[0]);
2335  }
2336  }
2337  }
2338 
2339  Bool_t selTrack=kTRUE;
2340  if (!((trStatus & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) ||
2341  !((trStatus & AliVTrack::kITSrefit) == AliVTrack::kITSrefit)){
2342  selTrack=kFALSE;
2343  }
2344  if(!track->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)){ // BIT(4) standard cuts with very loose DCA
2345  selTrack=kFALSE;
2346  }
2347  if(TMath::Abs(track->Eta())>0.9){
2348  selTrack=kFALSE;
2349  }
2350  Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
2351  Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;
2352  if (track->GetTPCNclsF()>0) {
2353  ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC/track->GetTPCNclsF();
2354  }
2355 
2356  Bool_t selTrackNoSPD=selTrack;
2357  if(selTrack){
2358  if(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)){
2359  fHisd0TracksTPCITSSPDany->Fill(d0z0[0]);
2360  }
2361  }
2362 
2363  AliAODPid *pid = track->GetDetPid();
2364  if(!pid && fDebug>1) cout<<"No AliAODPid found"<<endl;
2365 
2366  if(pid && fOnOff[1]){
2367  Double_t times[AliPID::kSPECIES];
2368  pid->GetIntegratedTimes(times);
2369 
2370  Double_t tofRes[AliPID::kSPECIES];
2371  pid->GetTOFpidResolution(tofRes);
2372 
2373  //check TOF
2374  fHisTOFflags->Fill(0.);
2375  if (trStatus&AliESDtrack::kTPCout) fHisTOFflags->Fill(1.);
2376  if (trStatus&AliESDtrack::kTOFout) fHisTOFflags->Fill(2.);
2377  if (trStatus&AliESDtrack::kTIME) fHisTOFflags->Fill(3.);
2378  if (trStatus&AliESDtrack::kTOFpid) fHisTOFflags->Fill(4.);
2379  if (trStatus&AliESDtrack::kTOFmismatch) fHisTOFflags->Fill(5.);
2380 
2381  Bool_t isTOFok=kFALSE;
2382  if(pidResp){
2383  Double_t prob[AliPID::kSPECIES];
2384  if(pidResp->ComputeTOFProbability(track,AliPID::kSPECIES,prob)==AliPIDResponse::kDetPidOk){
2385  isTOFok=kTRUE;
2386  fHisTOFflags->Fill(6.);
2387  }
2388  }
2389 
2390  if(selTrack && isTOFok){
2391  Double_t tofTime=pid->GetTOFsignal();
2392  AliTOFHeader* tofH=(AliTOFHeader*)aod->GetTOFHeader();
2393  if (tofH && (TMath::Abs(tofRes[0]) <= 1.E-16) ) { // new AOD
2394  // with new AOD we need to retrieve startTime, subtract it and retrieve correctly TOF PID resolutions *PA*
2395  AliTOFPIDResponse tofResp=pidResp->GetTOFResponse();
2396  Double_t startTime = tofResp.GetStartTime(track->P());
2397  Float_t startTimeRes = tofResp.GetStartTimeRes(track->P());
2398  Int_t startTimeMask = tofResp.GetStartTimeMask(track->P());
2399  fHisTOFstartTimeDistrib->Fill(startTime);
2400  fHisTOFstartTimeMask->Fill(startTimeMask);
2401  fHisTOFstartTimeRes->Fill(startTimeRes);
2402  tofTime-=startTime;
2403  for (Int_t type=0;type<AliPID::kSPECIES;type++) tofRes[type]=tofResp.GetExpectedSigma(track->P(),times[type],AliPID::ParticleMassZ(type));
2404  }
2405  fHisTOFtime->Fill(times[AliPID::kProton]);
2406  fHisTOFtimeKaonHyptime->Fill(track->P(),tofTime-times[3]); //3 is kaon
2407  fHisTOFsig->Fill(tofTime);
2408  if (pid->GetTOFsignal()< 0) fHisTOFsig->Fill(-1);
2409 
2410  Double_t nsigma[3]={-10,-10,-10};
2411  nsigma[0]=pidResp->NumberOfSigmasTOF(track,AliPID::kPion);
2412  nsigma[1]=pidResp->NumberOfSigmasTOF(track,AliPID::kKaon);
2413  nsigma[2]=pidResp->NumberOfSigmasTOF(track,AliPID::kProton);
2414 
2415  fHisTOFsigmaKSigPid->Fill(track->P(),nsigma[1]);
2416  fHisTOFsigmaPionSigPid->Fill(track->P(),nsigma[0]);
2417  fHisTOFsigmaProtonSigPid->Fill(track->P(),nsigma[2]);
2418  if(fReadMC){
2419  Int_t label=track->GetLabel();
2420  if(label<=0) continue;
2421  AliMCParticle* mcpart=(AliMCParticle*)mcArray->At(label);
2422  if(mcpart){
2423  Int_t abspdgcode=TMath::Abs(mcpart->PdgCode());
2424  if(abspdgcode==211) fHisTOFsigmaMCPionSigPid->Fill(track->P(),nsigma[0]);
2425  if(abspdgcode==321) fHisTOFsigmaMCKSigPid->Fill(track->P(),nsigma[1]);
2426  if(abspdgcode==2212) fHisTOFsigmaMCProtonSigPid->Fill(track->P(),nsigma[2]);
2427 
2428  }
2429  }
2430 
2431  for (Int_t iS=2; iS<5; iS++){ //we plot TOF Pid resolution for 3-sigma identified particles
2432  if ( TMath::Abs(nsigma[iS-2])<3.){
2433  switch (iS) {
2434  case AliPID::kPion:
2435  fHisTOFsigPid3sigPion->Fill(tofRes[iS]);
2436  break;
2437  case AliPID::kKaon:
2438  fHisTOFsigPid3sigKaon->Fill(tofRes[iS]);
2439  break;
2440  case AliPID::kProton:
2441  fHisTOFsigPid3sigProton->Fill(tofRes[iS]);
2442  break;
2443  default:
2444  break;
2445  }
2446  }
2447  }
2448  }//if TOF status
2449  //}
2450 
2451  if(pidHF && pidHF->CheckStatus(track,"TPC") && selTrack){
2452 
2453  Double_t TPCp=pid->GetTPCmomentum();
2454  Double_t TPCsignal=pid->GetTPCsignal();
2455  UShort_t TPCsignalN=pid->GetTPCsignalN();
2456  fHisTPCsig->Fill(TPCsignal);
2457  fHisTPCsigvsp->Fill(TPCp,TPCsignal);
2458  //if (pidHF->IsKaonRaw(track, "TOF"))
2459  Double_t nsigma[3]={-10,-10,-10};
2460  pidHF->GetnSigmaTPC(track,(Int_t)AliPID::kPion,nsigma[0]);
2461  pidHF->GetnSigmaTPC(track,(Int_t)AliPID::kKaon,nsigma[1]);
2462  pidHF->GetnSigmaTPC(track,(Int_t)AliPID::kProton,nsigma[2]);
2463 
2464  fHisTPCsigmaK->Fill(TPCp,nsigma[1]);
2465 
2466  fHisTPCsigmaPion->Fill(TPCp,nsigma[0]);
2467  fHisTPCsigmaProton->Fill(TPCp,nsigma[2]);
2468 
2469  if(fReadMC){
2470  Int_t label=track->GetLabel();
2471  if(label<=0) continue;
2472  AliMCParticle* mcpart=(AliMCParticle*)mcArray->At(label);
2473  if(mcpart){
2474  Int_t abspdgcode=TMath::Abs(mcpart->PdgCode());
2475  if(abspdgcode==211) fHisTPCsigmaMCPion->Fill(track->P(),nsigma[0]);
2476  if(abspdgcode==321) fHisTPCsigmaMCK->Fill(track->P(),nsigma[1]);
2477  if(abspdgcode==2212) fHisTPCsigmaMCProton->Fill(track->P(),nsigma[2]);
2478 
2479  }
2480 
2481  }
2482  if(fFillDistrTrackEffChecks && track->GetStatus()&AliESDtrack::kITSrefit && track->GetStatus()&AliESDtrack::kTPCrefit){
2483  fHisTPCsigNvsPtAllTracks->Fill(track->Pt(),(Float_t)TPCsignalN);
2484  fHisTPCsigNvsPhiAllTracks->Fill(track->Phi(),(Float_t)TPCsignalN);
2485  fHisTPCsigNvsEtaAllTracks->Fill(track->Eta(),(Float_t)TPCsignalN);
2486  }
2487 
2488  }//if TPC status
2489  } //end PID histograms
2490 
2491  Int_t nclsTot=0,nclsSPD=0;
2492 
2493  //check clusters of the tracks
2494  if(fOnOff[0]){
2495 
2496  fHisnLayerITS->Fill(-1);
2497  if(selTrackNoSPD) fHisnLayerITSselTr->Fill(-1);
2498  for(Int_t l=0;l<6;l++) {
2499  if(TESTBIT(track->GetITSClusterMap(),l)) {
2500  fHisnLayerITS->Fill(l);
2501  if(selTrackNoSPD) fHisnLayerITSselTr->Fill(l);
2502  nclsTot++; if(l<2) nclsSPD++;
2503  }
2504  }
2505  fHisnClsITS->Fill(nclsTot);
2506  fHisnClsSPD->Fill(nclsSPD);
2507 
2508  if(fFillDistrTrackEffChecks && track->GetStatus()&AliESDtrack::kITSrefit && track->GetStatus()&AliESDtrack::kTPCrefit){
2509 
2510  fHisPtAllTracks->Fill(track->Pt());
2511  fHisPhiAllTracks->Fill(track->Phi());
2512  fHisEtaAllTracks->Fill(track->Eta());
2513  fHisEtavsPhiAllTracks->Fill(track->Phi(),track->Eta());
2514  fHisNTPCclsvsPtAllTracks->Fill(track->Pt(),track->GetTPCNcls());
2515  fHisNTPCclsvsPhiAllTracks->Fill(track->Phi(),track->GetTPCNcls());
2516  fHisNTPCclsvsEtaAllTracks->Fill(track->Eta(),track->GetTPCNcls());
2517 
2518  fHisNTPCCrossedRowsvsPtAllTracks->Fill(track->Pt(),nCrossedRowsTPC);
2519  fHisNTPCCrossedRowsvsPhiAllTracks->Fill(track->Phi(),nCrossedRowsTPC);
2520  fHisNTPCCrossedRowsvsEtaAllTracks->Fill(track->Eta(),nCrossedRowsTPC);
2521 
2522  fHisRatioCRowsOverFclsvsPtAllTracks->Fill(track->Pt(),ratioCrossedRowsOverFindableClustersTPC);
2523  fHisRatioCRowsOverFclsvsPhiAllTracks->Fill(track->Phi(),ratioCrossedRowsOverFindableClustersTPC);
2524  fHisRatioCRowsOverFclsvsEtaAllTracks->Fill(track->Eta(),ratioCrossedRowsOverFindableClustersTPC);
2525 
2526  if(!(track->HasPointOnITSLayer(0)) && !(track->HasPointOnITSLayer(1))){ //no SPD points
2527  fHisSPDclsAllTracks->Fill(0);
2528  }
2529  if(track->HasPointOnITSLayer(0) && !(track->HasPointOnITSLayer(1))){ //kOnlyFirst
2530  fHisSPDclsAllTracks->Fill(1);
2531  }
2532  if(!(track->HasPointOnITSLayer(0)) && track->HasPointOnITSLayer(1)){ //kOnlySecond
2533  fHisSPDclsAllTracks->Fill(2);
2534  }
2535  if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1)){ //kBoth
2536  fHisSPDclsAllTracks->Fill(3);
2537  }
2538  fHisNITSclsvsPtAllTracks->Fill(track->Pt(), nclsTot);
2539  fHisNITSclsvsPhiAllTracks->Fill(track->Phi(), nclsTot);
2540  fHisNITSclsvsEtaAllTracks->Fill(track->Eta(), nclsTot);
2541 
2542  }
2543 
2544  if(track->Pt()>0.3 &&
2545  TMath::Abs(track->Eta())<0.8 &&
2546  track->GetStatus()&AliESDtrack::kITSrefit &&
2547  track->GetStatus()&AliESDtrack::kTPCrefit &&
2548  nclsSPD>0){
2549  fHisnClsITSselTr->Fill(nclsTot);
2550  }
2551  if(!(track->GetStatus()&AliESDtrack::kTPCin) && track->GetStatus()&AliESDtrack::kITSrefit && !(track->GetStatus()&AliESDtrack::kITSpureSA)){//tracks retrieved in the ITS and not reconstructed in the TPC
2552  fHisnClsITSSA->Fill(nclsTot);
2553  fHisnLayerITSsa->Fill(-1);
2554  for(Int_t l=0;l<6;l++) {
2555  if(TESTBIT(track->GetITSClusterMap(),l)) {
2556  fHisnLayerITSsa->Fill(l);
2557  }
2558  }
2559  }
2560  Int_t label=0;
2561  if(fReadMC){
2562  label=track->GetLabel();
2563  if (label<0) fHisNentries->Fill(13);
2564  else fHisNentries->Fill(14);
2565  }
2566 
2567 
2568  if (track->Pt()>0.3 &&
2569  track->GetStatus()&AliESDtrack::kTPCrefit &&
2570  track->GetStatus()&AliESDtrack::kITSrefit &&
2571  /*nclsTot>3 &&*/
2572  nclsSPD>0) {//count good tracks
2573 
2574 
2575  if(fReadMC && label<0) {
2576  fHisptFakeTr->Fill(track->Pt());
2577  isFakeTrack++;
2578  } else {
2579  fHisptGoodTr->Fill(track->Pt());
2580  isGoodTrack++;
2581  }
2582 
2583  if(fCuts->IsDaughterSelected(track,&vESD,fCuts->GetTrackCuts(),aod)){
2584  isSelTrack++;
2585  }//select tracks for our analyses
2586 
2587  }
2588  } //fill track histos
2589  } //end loop on tracks
2590 
2591  //fill once per event
2592  if(fOnOff[0]){
2593  if (fReadMC) fHisdistrFakeTr->Fill(isFakeTrack);
2594  fHisdistrGoodTr->Fill(isGoodTrack);
2595  fHisdistrSelTr->Fill(isSelTrack);
2596  }
2597 
2598  if(!isSimpleMode){
2599  // loop over candidates
2600  Int_t nCand = arrayProng->GetEntriesFast();
2601  Int_t ndaugh=3;
2604 
2605  for (Int_t iCand = 0; iCand < nCand; iCand++) {
2606  AliAODRecoDecayHF *d = (AliAODRecoDecayHF*)arrayProng->UncheckedAt(iCand);
2607  if(d->GetIsFilled()<1) continue;//0 = not refilled. or refill failed. 1 = standard dAODs. 2 = succesfully refilled
2608  if(fUseSelectionBit && d->GetSelectionMap()) {
2609  if(fDecayChannel==AliAnalysisTaskSEHFQA::kD0toKpi && !d->HasSelectionBit(AliRDHFCuts::kD0toKpiCuts)) continue; //skip the D0 from Dstar
2611  }
2612  if(fDecayChannel==AliAnalysisTaskSEHFQA::kLambdactoV0 && !((dynamic_cast<AliAODRecoCascadeHF*>(d))->CheckCascadeFlags())) continue;
2613 
2614  if(fReadMC){
2615 
2616  Int_t labD = -1;
2617  if (fDecayChannel==AliAnalysisTaskSEHFQA::kLambdactoV0 && (dynamic_cast<AliAODRecoCascadeHF*>(d))->Getv0()) {
2618 
2619  Int_t pdgDgLctoV0bachelor[2]={2212,310};
2620  Int_t pdgDgV0toDaughters[2]={211,211};
2621  Int_t mcLabelK0S = (dynamic_cast<AliAODRecoCascadeHF*>(d))->MatchToMC(pdg,pdgDgLctoV0bachelor[1],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE); // Lc->K0S+p and cc
2622  pdgDgLctoV0bachelor[1]=3122, pdgDgLctoV0bachelor[0]=211;
2623  pdgDgV0toDaughters[0]=2212, pdgDgV0toDaughters[1]=211;
2624  Int_t mcLabelLambda = (dynamic_cast<AliAODRecoCascadeHF*>(d))->MatchToMC(pdg,pdgDgLctoV0bachelor[1],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE); // Lc->Lambda+pi and cc
2625  if (mcLabelK0S!=-1 || mcLabelLambda!=-1) AliInfo(Form("mcLabelK0S=%d - mcLabelLambda=%d",mcLabelK0S,mcLabelLambda));
2626 
2627  if (mcLabelK0S!=-1 && mcLabelLambda!=-1)
2628  AliInfo("Strange: current Lc->V0+bachelor candidate has two MC different labels!");
2629  else if (mcLabelK0S>-1 && mcLabelLambda==-1)
2630  labD = mcLabelK0S;
2631  else if (mcLabelLambda>-1 && mcLabelK0S==-1)
2632  labD = mcLabelLambda;
2633  }
2634  else
2635  labD = d->MatchToMC(pdg,mcArray,ndaugh,pdgdaughters);
2636 
2637  if(labD>=0){
2638  AliAODMCParticle *partD = (AliAODMCParticle*)mcArray->At(labD);
2639  Int_t label=partD->GetMother();
2640  AliAODMCParticle *mot = (AliAODMCParticle*)mcArray->At(label);
2641  while(label>=0){//get first mother
2642  mot = (AliAODMCParticle*)mcArray->At(label);
2643  label=mot->GetMother();
2644  }
2645  if(mot){
2646  Int_t pdgMotCode = mot->GetPdgCode();
2647 
2648  if(TMath::Abs(pdgMotCode)==4) fHisNentries->Fill(11); //from primary charm
2649  if(TMath::Abs(pdgMotCode)==5) fHisNentries->Fill(12); //from beauty
2650  }
2651  }
2652  }//end MC
2653  fHisNentries->Fill(10);//count the candidates (data and MC)
2654 
2655  for(Int_t id=0;id<ndaugh;id++){
2656  //other histograms to be filled when the cut object is given
2657  AliAODTrack* track=0;
2658 
2659  if (fDecayChannel==AliAnalysisTaskSEHFQA::kLambdactoV0 && (dynamic_cast<AliAODRecoCascadeHF*>(d))->Getv0()) {
2660  if (id==0)
2661  track=(AliAODTrack*)(dynamic_cast<AliAODRecoCascadeHF*>(d))->GetBachelor();
2662  else if (id==1)
2663  track=(AliAODTrack*)(dynamic_cast<AliAODRecoCascadeHF*>(d))->Getv0PositiveTrack();
2664  else if (id==2)
2665  track=(AliAODTrack*)(dynamic_cast<AliAODRecoCascadeHF*>(d))->Getv0NegativeTrack();
2666  }
2667  else
2668  track=(AliAODTrack*)d->GetDaughter(id);
2669 
2670 
2671  // filtering cut level
2672 
2673  if (fCuts->IsInFiducialAcceptance(d->Pt(),d->Y(pdg)) && fCuts->IsSelected(d,AliRDHFCuts::kAll,aod)) {
2674 
2675  Int_t label=0;
2676  if(fReadMC)label=track->GetLabel();
2677  if(fOnOff[0]){
2678 
2679  if(fReadMC && label<0) {
2680  isFakeTrack++;
2681  fHisptFakeTrFromDaughFilt->Fill(track->Pt());
2682 
2683  fHisd0f_filt->Fill(d->Getd0Prong(id));
2684  } else {
2685  fHisptGoodTrFromDaugh_filt->Fill(track->Pt());
2686  fHisd0dau_filt->Fill(d->Getd0Prong(id));
2687  Double_t phidaughter = d->PhiProng(id);
2688  if(phidaughter<0) phidaughter=2.0*TMath::Pi()+phidaughter;
2689  fHisd0dauphi_filt->Fill(phidaughter, d->Getd0Prong(id));
2690  Double_t d0rphiz[2],covd0[3];
2691  Bool_t isDCA=track->PropagateToDCA(vtx1,magField,9999.,d0rphiz,covd0);
2692  if(isDCA){
2693  fHisd0zdau_filt->Fill(d0rphiz[1]);
2694  fHisd0zdauphi_filt->Fill(phidaughter,d0rphiz[1]);
2695  }
2696  }
2697  }
2698  }
2699 
2700 
2701 
2702  //track quality
2703 
2704  if (fCuts->IsInFiducialAcceptance(d->Pt(),d->Y(pdg)) && fCuts->IsSelected(d,AliRDHFCuts::kTracks,aod)) {
2705 
2706  Int_t label=0;
2707  if(fReadMC)label=track->GetLabel();
2708  if(fOnOff[0]){
2709 
2710  if(fReadMC && label<0) {
2711  isFakeTrack++;
2712  fHisptFakeTrFromDaugh->Fill(track->Pt());
2713 
2714  fHisd0f->Fill(d->Getd0Prong(id));
2715  } else {
2716  fHisptGoodTrFromDaugh->Fill(track->Pt());
2717  fHisd0dau->Fill(d->Getd0Prong(id));
2718  Double_t phidaughter = d->PhiProng(id);
2719  if(phidaughter<0) phidaughter=2.0*TMath::Pi()+phidaughter;
2720  fHisd0dauphi->Fill(phidaughter, d->Getd0Prong(id));
2721  Double_t d0rphiz[2],covd0[3];
2722  Bool_t isDCA=track->PropagateToDCA(vtx1,magField,9999.,d0rphiz,covd0);
2723  if(isDCA){
2724  fHisd0zdau->Fill(d0rphiz[1]);
2725  fHisd0zdauphi->Fill(phidaughter,d0rphiz[1]);
2726  }
2727  }
2728  }
2729 
2730 
2732  Int_t nITScls = 0;
2733  Double_t nTPCCrossedRows = track->GetTPCClusterInfo(2,1);
2734  Double_t ratioCrossedRowsOverFcls = 1.0;
2735  if(track->GetTPCNclsF()>0){
2736  ratioCrossedRowsOverFcls = (nTPCCrossedRows)/(track->GetTPCNclsF());
2737  }
2738  for(Int_t l=0;l<6;l++) {
2739  if(TESTBIT(track->GetITSClusterMap(),l)) {
2740  nITScls++;
2741  }
2742  }
2743 
2744  fHisPtDaughters->Fill(track->Pt());
2745  fHisPhiDaughters->Fill(track->Phi());
2746  fHisEtaDaughters->Fill(track->Eta());
2747  fHisEtavsPhiDaughters->Fill(track->Phi(),track->Eta());
2748 
2749  fHisNTPCclsvsPtDaughters->Fill(track->Pt(),track->GetTPCNcls());
2750  fHisNTPCclsvsPhiDaughters->Fill(track->Phi(),track->GetTPCNcls());
2751  fHisNTPCclsvsEtaDaughters->Fill(track->Eta(),track->GetTPCNcls());
2752 
2753  fHisNTPCCrossedRowsvsPtDaughters->Fill(track->Pt(),nTPCCrossedRows);
2754  fHisNTPCCrossedRowsvsPhiDaughters->Fill(track->Phi(),nTPCCrossedRows);
2755  fHisNTPCCrossedRowsvsEtaDaughters->Fill(track->Eta(),nTPCCrossedRows);
2756 
2757  fHisRatioCRowsOverFclsvsPtDaughters->Fill(track->Pt(),ratioCrossedRowsOverFcls);
2758  fHisRatioCRowsOverFclsvsPhiDaughters->Fill(track->Phi(),ratioCrossedRowsOverFcls);
2759  fHisRatioCRowsOverFclsvsEtaDaughters->Fill(track->Eta(),ratioCrossedRowsOverFcls);
2760 
2761  fHisNITSclsvsPtDaughters->Fill(track->Pt(), nITScls);
2762  fHisNITSclsvsPhiDaughters->Fill(track->Phi(), nITScls);
2763  fHisNITSclsvsEtaDaughters->Fill(track->Eta(), nITScls);
2764  if(!(track->HasPointOnITSLayer(0)) && !(track->HasPointOnITSLayer(1))){ //no SPD points
2765  fHisSPDclsDaughters->Fill(0);
2766  }
2767  if(track->HasPointOnITSLayer(0) && !(track->HasPointOnITSLayer(1))){ //kOnlyFirst
2768  fHisSPDclsDaughters->Fill(1);
2769  }
2770  if(!(track->HasPointOnITSLayer(0)) && track->HasPointOnITSLayer(1)){ //kOnlySecond
2771  fHisSPDclsDaughters->Fill(2);
2772  }
2773  if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1)){ //kBoth
2774  fHisSPDclsDaughters->Fill(3);
2775  }
2776 
2777 
2778  if(fOnOff[1]){
2779  AliAODPid *pid = track->GetDetPid();
2780  if(pid){
2781  if(pidHF && pidHF->CheckStatus(track,"TPC")){
2782  fHisTPCsigNvsPtDaughters->Fill(track->Pt(),pid->GetTPCsignalN());
2783  fHisTPCsigNvsPhiDaughters->Fill(track->Phi(),pid->GetTPCsignalN());
2784  fHisTPCsigNvsEtaDaughters->Fill(track->Eta(),pid->GetTPCsignalN());
2785  }
2786  }
2787  }
2788  }
2789 
2790 
2791  if (fCuts->IsSelected(d,AliRDHFCuts::kAll,aod) && fOnOff[1]){
2792  fHisNentries->Fill(8); //candidates passing analysis cuts
2793 
2794  AliAODPid *pid = track->GetDetPid();
2795  if(pid){
2796  Double_t times[5];
2797  pid->GetIntegratedTimes(times);
2798  if(pidHF && pidHF->CheckStatus(track,"TOF")){
2799  Double_t tofTime=pid->GetTOFsignal();
2800  AliTOFHeader* tofH=(AliTOFHeader*)aod->GetTOFHeader();
2801  Double_t tofRes[AliPID::kSPECIES];
2802  pid->GetTOFpidResolution(tofRes);
2803  if (tofH && (TMath::Abs(tofRes[0]) <= 1.E-16) ) { // new AOD
2804  AliTOFPIDResponse tofResp=pidHF->GetPidResponse()->GetTOFResponse();
2805  Double_t startTime=tofResp.GetStartTime(track->P());
2806  tofTime-=startTime;
2807  }
2808  fHisTOFtimeKaonHyptimeAC->Fill(track->P(),tofTime-times[AliPID::kKaon]);
2809  }
2810  if(pidHF && pidHF->CheckStatus(track,"TPC")) fHisTPCsigvspAC->Fill(pid->GetTPCmomentum(),pid->GetTPCsignal());
2811  }
2812 
2813  } //end analysis cuts
2814  } //end acceptance and track cuts
2815  } //end loop on tracks in the candidate
2816  } //end loop on candidates
2817 
2818  }
2819  } //end if on pid or track histograms
2820  delete vHF;
2821  delete tpcres;
2822  delete [] pdgdaughters;
2823  PostData(1,fOutputEntries);
2824  if(fOnOff[1]) PostData(2,fOutputPID);
2825  if(fOnOff[0]) PostData(3,fOutputTrack);
2826  PostData(4,fCuts);
2827  if(fOnOff[2]) PostData(5,fOutputCounters);
2828  //Post data 6 done in case of centrality on
2829 }
2830 
2831 //____________________________________________________________________________
2834  Double_t cc;
2835  cc = fCuts->GetCentrality(aod);
2836  fHisFEvents->Fill(0., cc);
2837 
2838  UInt_t mask=((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
2839  UInt_t trigger=AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
2840  if(mask & trigger) {
2841  fHisFEvents->Fill(1.,cc); // fired
2842  if (mask & AliVEvent::kMB) fHisFEvents->Fill(2.,cc);
2843  if (mask & AliVEvent::kCentral) fHisFEvents->Fill(3.,cc);
2844  if (mask & AliVEvent::kSemiCentral) fHisFEvents->Fill(4.,cc);
2845  Bool_t rejected=false;
2846  if(cc<0 || cc>60) rejected=true;
2847  const AliVVertex *vertex = aod->GetPrimaryVertex();
2848  Double_t zvtx=vertex->GetZ();
2849  if(TMath::Abs(zvtx)>fCuts->GetMaxVtxZ()) rejected=true;
2850  if(rejected) return; //not interesting for flow QA
2851  } else {
2852  return;
2853  }
2854 
2855  // event accepted
2856  fHisFEvents->Fill(5.,cc);
2858  fRFPcuts->SetPtRange(0.2,5.);
2859  fRFPcuts->SetEtaRange(-0.8,0.8);
2864  fRFPcuts->SetEvent(aod);
2865 
2866  // "FB1" (i=0), "FB128" (i=1), "VZE" (i=2)
2867  Double_t psi[3];
2868  for(Int_t i=0; i!=3; ++i) {
2869  if(i==0) { // switching to bit 1
2872  } else { // switching to bit 128
2874  fRFPcuts->SetAODfilterBit(128);
2875  }
2876  if(i>1) {
2878  fRFPcuts->SetEtaRange(-5,+5);
2879  fRFPcuts->SetPhiMin(0);
2880  fRFPcuts->SetPhiMax(TMath::TwoPi());
2881  }
2883  fFlowEvent->TagSubeventsInEta(-5,0,0,+5);
2884  // getting informationt
2885  AliFlowVector vQ, vQaQb[2];
2886  fFlowEvent->Get2Qsub(vQaQb,2);
2887  vQ = vQaQb[0]+vQaQb[1];
2888  Double_t dMa=vQaQb[0].GetMult();
2889  Double_t dMb=vQaQb[1].GetMult();
2890  if( dMa<2 || dMb<2 ) {
2891  fHisFEvents->Fill(6.,cc); //???
2892  continue;
2893  }
2894  psi[i] = vQ.Phi()/2;
2895  // publishing
2896  fHisQ[i]->Fill(0,cc,vQaQb[0].X()/dMa,dMa); // Qx-
2897  fHisQ[i]->Fill(1,cc,vQaQb[0].Y()/dMa,dMa); // Qy-
2898  fHisQ[i]->Fill(2,cc,vQaQb[1].X()/dMb,dMb); // Qx+
2899  fHisQ[i]->Fill(3,cc,vQaQb[1].Y()/dMb,dMb); // Qy+
2900  fHisAngleQ[i]->Fill(psi[i],cc); // Psi
2901  AliFlowTrackSimple *track;
2902  for(Int_t t=0; t!=fFlowEvent->NumberOfTracks(); ++t) {
2903  track = (AliFlowTrackSimple*) fFlowEvent->GetTrack(t);
2904  if(!track) continue;
2905  if(!track->InRPSelection()) continue;
2906  fHisPhiEta[i]->Fill(track->Phi(),track->Eta(),cc,track->Weight()); //PhiEta
2907  }
2908 
2909  //histo filled only for TPCFB1
2910  if (i==0) {
2912  }
2913  }
2914  // TPC vs VZERO
2915  fHisTPCVZE_AngleQ->Fill(psi[0],psi[2],cc);
2916 }
2917 
2918 //____________________________________________________________________________
2921 
2922  fOutputEntries = dynamic_cast<TList*> (GetOutputData(1));
2923  if (!fOutputEntries && fOnOff[1]) {
2924  printf("ERROR: %s not available\n",GetOutputSlot(1)->GetContainer()->GetName());
2925  return;
2926  }
2927 
2928  fOutputPID = dynamic_cast<TList*> (GetOutputData(2));
2929  if (!fOutputPID && fOnOff[1]) {
2930  printf("ERROR: %s not available\n",GetOutputSlot(2)->GetContainer()->GetName());
2931  return;
2932  }
2933 
2934  fOutputTrack = dynamic_cast<TList*> (GetOutputData(3));
2935  if (!fOutputTrack && fOnOff[0]) {
2936  printf("ERROR: %s not available\n",GetOutputSlot(3)->GetContainer()->GetName());
2937  return;
2938  }
2939 
2940 }
2941 
2942 
2943 
Bool_t fOnOff[5]
flag to use or not the selection bit
Float_t GetMaxCentrality() const
Definition: AliRDHFCuts.h:267
TH2F * fHisTPCsigNvsEtaAllTracks
! Histo. of output slot #2 (fOutputPID)
Bool_t IsEventRejectedDueToCentrality() const
Definition: AliRDHFCuts.h:316
TH1F * fHisd0dau_filt
! Histo. of output slot #3 (fOutputTrack)
Int_t pdg
TH1F * fHisd0zdau
! Histo. of output slot #3 (fOutputTrack)
Bool_t IsEventRejectedDueToZVertexOutsideFiducialRegion() const
Definition: AliRDHFCuts.h:310
TH2F * fHisNTPCCrossedRowsvsPhiDaughters
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisRatioCRowsOverFclsvsPtDaughters
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisRatioCRowsOverFclsvsEtaDaughters
! Histo. of output slot #3 (fOutputTrack)
const Color_t cc[]
Definition: DrawKs.C:1
TH2F * fHisRatioCRowsOverFclsvsEtaAllTracks
! Histo. of output slot #3 (fOutputTrack)
Bool_t IsEventRejectedDueToNotRecoVertex() const
Definition: AliRDHFCuts.h:304
TH2F * fHisNentriesSelBit
! Histo. of output slot #1 (fOutputEntries)
TH1F * fHisNtracklets
! Histo. of output slot #3 (fOutputTrack)
double Double_t
Definition: External.C:58
void SetMaxChi2PerClusterTPC(Float_t a)
TH1F * fHisMultComb08
! Histo. of output slot #3 (fOutputTrack)
Definition: External.C:260
TH2F * fHisTPCsigmaMCPion
! Histo. of output slot #2 (fOutputPID)
TH1F * fHisd0TracksSPDin
! Histo. of output slot #3 (fOutputTrack)
TList * fOutputCounters
! list sent on output slot 5
TH1F * fHisNtrackletsIn
! Histo. of output slot #6 (fOutputCheckCentrality)
Definition: External.C:236
TH2F * fHisRatioCRowsOverFclsvsPtAllTracks
! Histo. of output slot #3 (fOutputTrack)
Bool_t fUseSelectionBit
if true, don't do candidates (much faster in PbPb)
const char * title
Definition: MakeQAPdf.C:26
TH1F * fHisTOFstartTimeRes
! Histo. of output slot #2 (fOutputPID)
TH2F * fHisntrklvsPercentile01AllEv
! Histo. of output slot #6 (fOutputCheckCentrality)
TH1F * fHisPhiAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisMultComb05
! Histo. of output slot #3 (fOutputTrack)
virtual void UserCreateOutputObjects()
Implementation of interface methods.
TH2F * fHisnTPCITS1SPDTracksvsPercentile
! Histo. of output slot #6 (fOutputCheckCentrality)
Bool_t HasSelectionBit(Int_t i) const
TH2F * fHisTPCsigmaProton
! Histo. of output slot #2 (fOutputPID)
Int_t GetNumberOfRPs() const
TH2F * fHisNTPCclsvsPtDaughters
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisTPCsigNvsPhiAllTracks
! Histo. of output slot #2 (fOutputPID)
Int_t GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &sigma) const
TH2F * fHisStdEstimSignalNtrackletsIn
! Histo. of output slot #6 (fOutputCheckCentrality)
TH1F * fHisPtAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisdistrFakeTr
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisTPCsigNvsPhiDaughters
! Histo. of output slot #2 (fOutputPID)
TH2F * fHisStdSignalSecondSignal
! Histo. of output slot #6 (fOutputCheckCentrality)
TH2F * fHisAngleQ[3]
! Histo. of output slot #8 (fOutputFlowObs)
centrality
static Int_t CheckMatchingAODdeltaAODevents()
Double_t GetMult() const
Definition: AliFlowVector.h:46
TH2F * fHisNTPCCrossedRowsvsPhiAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisRatioCRowsOverFclsvsPhiAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisptGoodTr
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisnClsITS
! Histo. of output slot #3 (fOutputTrack)
Bool_t IsEventRejectedDueToVertexContributors() const
Definition: AliRDHFCuts.h:307
TList * fOutputEvSelection
! list sent on output slot 7
TH1F * fHisdistrGoodTr
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisNTPCclsvsEtaDaughters
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisd0TracksSPDany
! Histo. of output slot #3 (fOutputTrack)
AliFlowEvent * fFlowEvent
! to handle the reusage of the flowEvent object
TString GetMultSelectionObjectName() const
Definition: AliRDHFCuts.h:268
void SetPhiMin(Double_t min)
TH1F * fHisEtaAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHiszvtx
! Histo. of output slot #7 (fOutputEvSelection)
Bool_t FillRecoCand(AliVEvent *event, AliAODRecoDecayHF3Prong *rd3)
TH1F * fHisNentries
! Histo. of output slot #1 (fOutputEntries)
TH2F * fHisTPCsigmaK
! Histo. of output slot #2 (fOutputPID)
TH2F * fHisEtavsPhiDaughters
! Histo. of output slot #3 (fOutputTrack)
void SetParamType(trackParameterType paramType)
ULong_t GetSelectionMap() const
TH1F * fHisyvtx
! Histo. of output slot #7 (fOutputEvSelection)
TH2F * fHisntrklvsPercentile01
! Histo. of output slot #6 (fOutputCheckCentrality)
TH2F * fHisnTPCITSTracksvsPercentile
! Histo. of output slot #6 (fOutputCheckCentrality)
Double_t GetMaxVtxZ() const
Definition: AliRDHFCuts.h:242
TH1F * fHisMultFBit4
! Histo. of output slot #3 (fOutputTrack)
void SetAODfilterBit(UInt_t a)
TH2F * fHisCentVsMultRPS
! Histo. of output slot #8 (fOutputFlowObs)
TH1F * fHisEtaDaughters
! Histo. of output slot #3 (fOutputTrack)
Bool_t InRPSelection() const
Bool_t FillRecoCasc(AliVEvent *event, AliAODRecoCascadeHF *rc, Bool_t isDStar, Bool_t recoSecVtx=kFALSE)
TH2F * fHisEtavsPhiAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisd0zdau_filt
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisTPCsigvsp
! Histo. of output slot #2 (fOutputPID)
Bool_t GetOldPid()
Definition: AliAODPidHF.h:157
AliAODPidHF * GetPidHF() const
Definition: AliRDHFCuts.h:232
AliFlowTrack * GetTrack(Int_t i)
TH1F * fHisNtracklets01
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisptFakeTr
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisStdEstimSignalPercentile
! Histo. of output slot #6 (fOutputCheckCentrality)
TH1F * fHisxvtxSelEv
! Histo. of output slot #7 (fOutputEvSelection)
TH2F * fHisNTPCCrossedRowsvsEtaDaughters
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisTOFsigmaMCProtonSigPid
! Histo. of output slot #2 (fOutputPID)
Class for cuts on AOD reconstructed D+->Kpipi.
AliRDHFCuts::ECentrality fEstimator
void SetPtRange(Float_t r1, Float_t r2)
TH2F * fHisTrigCentSel
! Histo. of output slot #7 (fOutputEvSelection)
Double_t Phi() const
TH1F * fHisd0f_filt
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisNTPCCrossedRowsvsPtAllTracks
! Histo. of output slot #3 (fOutputTrack)
static Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent *ev, Double_t mineta, Double_t maxeta)
TH2F * fHisd0dauphi_filt
! Histo. of output slot #3 (fOutputTrack)
void Fill(AliFlowTrackCuts *rpCuts, AliFlowTrackCuts *poiCuts)
void SetMinimalTPCdedx(Double_t d=10.)
int Int_t
Definition: External.C:63
TH1F * fHisTOFtime
! Histo. of output slot #2 (fOutputPID)
unsigned int UInt_t
Definition: External.C:33
Int_t GetIsFilled() const
float Float_t
Definition: External.C:68
TProfile2D * fHisQ[3]
! Histo. of output slot #8 (fOutputFlowObs)
void GetTPCBetheBlochParams(Double_t alephParameters[5]) const
TH2F * fHisNITSclsvsEtaAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisStdPercentileOldFrwPercentileDev
! Histo. of output slot #6 (fOutputCheckCentrality)
TH2F * fHisTOFsigmaPionSigPid
! Histo. of output slot #2 (fOutputPID)
TH1F * fHisptFakeTrFromDaugh
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisStdPercentileOldFrwPercentile
! Histo. of output slot #6 (fOutputCheckCentrality)
TH2F * fHisTrigCent
! Histo. of output slot #7 (fOutputEvSelection)
TH2F * fHisNITSclsvsPtDaughters
! Histo. of output slot #3 (fOutputTrack)
TList * fOutputPID
! list sent on output slot 2
Bool_t CheckStatus(AliAODTrack *track, TString detectors) const
TList * fOutputCheckCentrality
! list sent on output slot 6
TList * fOutputEntries
! list sent on output slot 1
TH2F * fHisNTPCCrossedRowsvsPtDaughters
! Histo. of output slot #3 (fOutputTrack)
virtual void UserExec(Option_t *option)
TH1F * fHisPtDaughters
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisTOFsigPid3sigKaon
! Histo. of output slot #2 (fOutputPID)
AliESDtrackCuts * GetTrackCuts() const
Definition: AliRDHFCuts.h:247
TH1F * fHisxvtx
! Histo. of output slot #7 (fOutputEvSelection)
TH1F * fHisnClsSPD
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisdistrSelTr
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisNITSclsvsPhiDaughters
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisTOFsigPid3sigPion
! Histo. of output slot #2 (fOutputPID)
TH1F * fHisMult
! Histo. of output slot #3 (fOutputTrack)
Float_t GetCentrality(AliAODEvent *aodEvent)
Definition: AliRDHFCuts.h:243
Bool_t IsEventRejectedDueToPileup() const
Definition: AliRDHFCuts.h:313
TH2F * fHisTPCsigmaMCProton
! Histo. of output slot #2 (fOutputPID)
TH1F * fHiszvtxSelEv
! Histo. of output slot #7 (fOutputEvSelection)
Double_t nsigma
unsigned long ULong_t
Definition: External.C:38
TH2F * fHisTOFsigmaMCKSigPid
! Histo. of output slot #2 (fOutputPID)
TH1F * fHisTOFsig
! Histo. of output slot #2 (fOutputPID)
TH2F * fHisTrigMulSel
! Histo. of output slot #7 (fOutputEvSelection)
TH2F * fHisTPCsigmaMCK
! Histo. of output slot #2 (fOutputPID)
TH2F * fHisNTPCclsvsEtaAllTracks
! Histo. of output slot #3 (fOutputTrack)
AliPIDResponse * GetPidResponse() const
Definition: AliAODPidHF.h:160
TH1F * fHisnLayerITSselTr
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisd0dauphi
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisWhichVert
! Histo. of output slot #7 (fOutputEvSelection)
TH1F * fHisTOFstartTimeMask
! Histo. of output slot #2 (fOutputPID)
TH2F * fHisFEvents
! Histo. of output slot #8 (fOutputFlowObs)
TH1F * fHisnClsITSSA
! Histo. of output slot #3 (fOutputTrack)
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
TH2F * fHisd0zdauphi_filt
! Histo. of output slot #3 (fOutputTrack)
Bool_t IsEventRejectedDuePhysicsSelection() const
Definition: AliRDHFCuts.h:328
TH2F * fHisNTPCclsvsPhiDaughters
! Histo. of output slot #3 (fOutputTrack)
TList * fOutputFlowObs
! list sent on output slot 8
TH2F * fHisTrigMul
! Histo. of output slot #7 (fOutputEvSelection)
TH1F * fHisTOFsigPid3sigProton
! Histo. of output slot #2 (fOutputPID)
Bool_t fSimpleMode
flag to read MC
TH2F * fHisNITSclsvsPtAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisnLayerITS
! Histo. of output slot #3 (fOutputTrack)
Bool_t IsEventRejectedDueToMismatchOldNewCentrality() const
Definition: AliRDHFCuts.h:325
TH2F * fHisntrklvsPercentile
! Histo. of output slot #6 (fOutputCheckCentrality)
void SetAcceptKinkDaughters(Bool_t a)
TH1F * fHisTOFstartTimeDistrib
! Histo. of output slot #2 (fOutputPID)
AliFlowTrackCuts * fRFPcuts
! reference flow particle cuts
TH2F * fHisStdPercentileSecondPercentile
! Histo. of output slot #6 (fOutputCheckCentrality)
Bool_t IsEventSelected(AliVEvent *event)
void SetEvent(AliVEvent *event, AliMCEvent *mcEvent=NULL)
TH2F * fHisNITSclsvsPhiAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisNTPCclsvsPhiAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisTOFtimeKaonHyptimeAC
! Histo. of output slot #2 (fOutputPID)
TH1F * fHisptGoodTrFromDaugh
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisd0TracksTPCITSSPDany
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisWhyEvRejected
! Histo. of output slot #7 (fOutputEvSelection)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
TH2F * fHisTOFsigmaKSigPid
! Histo. of output slot #2 (fOutputPID)
TH1F * fHisyvtxSelEv
! Histo. of output slot #7 (fOutputEvSelection)
TH1F * fHisMultIn
! Histo. of output slot #6 (fOutputCheckCentrality)
TH1F * fHisptGoodTrFromDaugh_filt
! Histo. of output slot #3 (fOutputTrack)
void SetMinNClustersTPC(Int_t a)
TList * fOutputTrack
! list sent on output slot 3
const Double_t etamax
Double_t Weight() const
TH3F * fHisPhiEta[3]
! Histo. of output slot #8 (fOutputFlowObs)
Bool_t IsSelected(TObject *obj)
Definition: AliRDHFCuts.h:276
TH1F * fHisTOFflags
! Histo. of output slot #2 (fOutputPID)
void TagSubeventsInEta(Double_t etaMinA, Double_t etaMaxA, Double_t etaMinB, Double_t etaMaxB)
void SetPhiMax(Double_t max)
unsigned short UShort_t
Definition: External.C:28
TH1F * fHisnLayerITSsa
! Histo. of output slot #3 (fOutputTrack)
TH3F * fHisTPCVZE_AngleQ
! Histo. of output slot #8 (fOutputFlowObs)
void SetMinChi2PerClusterTPC(Float_t a)
const char Option_t
Definition: External.C:48
TH2F * fHisTOFsigmaProtonSigPid
! Histo. of output slot #2 (fOutputPID)
TH1F * fHisMultOut
! Histo. of output slot #6 (fOutputCheckCentrality)
TH2F * fHisnTPCTracksvsPercentile
! Histo. of output slot #6 (fOutputCheckCentrality)
TH1F * fHisStdEstimSignal
! Histo. of output slot #6 (fOutputCheckCentrality)
TH2F * fHisRatioCRowsOverFclsvsPhiDaughters
! Histo. of output slot #3 (fOutputTrack)
Bool_t IsEventRejectedDueToTrigger() const
Definition: AliRDHFCuts.h:301
TH2F * fHisNTPCclsvsPtAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisd0zdauphi
! Histo. of output slot #3 (fOutputTrack)
Double_t Eta() const
virtual void Get2Qsub(AliFlowVector *Qarray, Int_t n=2, TList *weightsList=0x0, Bool_t usePhiWeights=0x0, Bool_t usePtWeights=0x0, Bool_t useEtaWeights=0x0)
bool Bool_t
Definition: External.C:53
TH2F * fHisMultvsPercentile
! Histo. of output slot #6 (fOutputCheckCentrality)
virtual void Terminate(Option_t *option)
TH1F * fHisTPCsig
! Histo. of output slot #2 (fOutputPID)
TH1F * fHisd0dau
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisSPDclsDaughters
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisTOFtimeKaonHyptime
! Histo. of output slot #2 (fOutputPID)
TH2F * fHisTPCsigmaPion
! Histo. of output slot #2 (fOutputPID)
void FillFlowObs(AliAODEvent *aod)
virtual Bool_t IsInFiducialAcceptance(Double_t, Double_t) const
Definition: AliRDHFCuts.h:296
Int_t GetUseCentrality() const
Definition: AliRDHFCuts.h:265
TH1F * fHisNtrackletsOut
! Histo. of output slot #6 (fOutputCheckCentrality)
TH2F * fHisTPCsigNvsPtDaughters
! Histo. of output slot #2 (fOutputPID)
TH2F * fHisTPCsigvspAC
! Histo. of output slot #2 (fOutputPID)
TH1F * fHisd0TracksFilterBit4
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisWhichVertSelEv
! Histo. of output slot #7 (fOutputEvSelection)
TH1F * fHisPhiDaughters
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisNtracklets01AllEv
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisnClsITSselTr
! Histo. of output slot #3 (fOutputTrack)
TH1F * fHisptFakeTrFromDaughFilt
! Histo. of output slot #3 (fOutputTrack)
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts, const AliAODEvent *aod=0x0) const
TH2F * fHisNTPCCrossedRowsvsEtaAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisTPCsigNvsPtAllTracks
! Histo. of output slot #2 (fOutputPID)
TH2F * fHisTOFsigmaMCPionSigPid
! Histo. of output slot #2 (fOutputPID)
TH2F * fHisTPCsigNvsEtaDaughters
! Histo. of output slot #2 (fOutputPID)
TH1F * fHisd0f
! Histo. of output slot #3 (fOutputTrack)
Bool_t fFillDistrTrackEffChecks
on-off the QA on tracks (0), PID (1), centrality (2), event selection – default is {kTRUE...
TH1F * fHisSPDclsAllTracks
! Histo. of output slot #3 (fOutputTrack)
TH2F * fHisNITSclsvsEtaDaughters
! Histo. of output slot #3 (fOutputTrack)
void SetEtaRange(Float_t r1, Float_t r2)
Int_t NumberOfTracks() const