AliPhysics  608b256 (608b256)
AliAnalysisTaskCheckEvSel.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-2018, 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 
18 //*************************************************************************
19 // Class AliAnalysisTaskCheckEvSel
20 // Task to check event selection with D2H code
21 // Author: Francesco Prino
22 //*************************************************************************
23 
24 
25 #include <TList.h>
26 #include <TH1F.h>
27 #include <TH2F.h>
28 
29 #include "AliAnalysisManager.h"
30 #include "AliInputEventHandler.h"
31 #include "AliPIDResponse.h"
32 #include "AliAODHandler.h"
33 #include "AliAODEvent.h"
34 #include "AliVVertex.h"
35 #include "AliAODTrack.h"
36 #include "AliVertexingHFUtils.h"
38 #include "AliRDHFCutsD0toKpi.h"
40 
42 
43 
44 //________________________________________________________________________
47  fOutput(0x0),
48  fReadMC(kFALSE),
49  fSystem(0),
50  fCutOnzVertexSPD(0),
51  fAODProtection(1),
52  fHistNEvents(0x0),
53  fHistNEventsVsCent(0x0),
54  fHistNEventsVsCL1(0x0),
55  fHistWhyRej(0x0),
56  fHistNEventsVsWhyRej(0x0),
57  fHistNTrackletsBeforePileup(0x0),
58  fHistNTrackletsAfterPileup(0x0),
59  fHistNCL1BeforePileup(0x0),
60  fHistNCL1AfterPileup(0x0),
61  fHistCentrality(0x0),
62  fHistNTracksTPCoutVsV0Cent(0x0),
63  fHistNTracksFB4VsV0Cent(0x0),
64  fHistNTracksBC0VsV0Cent(0x0),
65  fHistNTrackletsVsV0Cent(0x0),
66  fHistNTracksTPCoutVsNTracklets(0x0),
67  fHistNTracksFB4VsNTracklets(0x0),
68  fHistNTracksBC0VsNTracksFB4(0x0),
69  fHistZVertexSPDBeforeCuts(0x0),
70  fHistZVertexSPDBeforeSPDCut(0x0),
71  fHistZVertexSPDAfterCuts(0x0),
72  fHistZVertexSPDBadTrackVert(0x0),
73  fNtupleZvtxDistVsWhyRej(0x0),
74  fEnableVertexNtuple(kFALSE),
75  fUseAliEventCuts(kFALSE),
76  fCounter(0),
77  fAnalysisCuts(0x0)
78 {
79  // default constructor
80  fAnalysisCuts=new AliRDHFCutsD0toKpi("EvSelCuts");
81  fAnalysisCuts->SetTriggerMask(AliVEvent::kMB | AliVEvent::kINT7);
82  fAnalysisCuts->SetTriggerClass("");
83  fAnalysisCuts->SetOptPileup(AliRDHFCuts::kNoPileupSelection);
84 }
85 //________________________________________________________________________
87  AliAnalysisTaskSE("EvSelTask"),
88  fOutput(0x0),
89  fReadMC(readMC),
90  fSystem(system),
91  fCutOnzVertexSPD(0),
92  fAODProtection(1),
93  fHistNEvents(0x0),
94  fHistNEventsVsCent(0x0),
95  fHistNEventsVsCL1(0x0),
96  fHistWhyRej(0x0),
97  fHistNEventsVsWhyRej(0x0),
98  fHistNTrackletsBeforePileup(0x0),
99  fHistNTrackletsAfterPileup(0x0),
100  fHistNCL1BeforePileup(0x0),
101  fHistNCL1AfterPileup(0x0),
102  fHistCentrality(0x0),
103  fHistNTracksTPCoutVsV0Cent(0x0),
104  fHistNTracksFB4VsV0Cent(0x0),
105  fHistNTracksBC0VsV0Cent(0x0),
106  fHistNTrackletsVsV0Cent(0x0),
107  fHistNTracksTPCoutVsNTracklets(0x0),
108  fHistNTracksFB4VsNTracklets(0x0),
109  fHistNTracksBC0VsNTracksFB4(0x0),
110  fHistZVertexSPDBeforeCuts(0x0),
111  fHistZVertexSPDBeforeSPDCut(0x0),
112  fHistZVertexSPDAfterCuts(0x0),
113  fHistZVertexSPDBadTrackVert(0x0),
114  fNtupleZvtxDistVsWhyRej(0x0),
115  fEnableVertexNtuple(kFALSE),
116  fUseAliEventCuts(kFALSE),
117  fCounter(0),
118  fAnalysisCuts(cuts)
119 {
120  // default constructor
121 
122  DefineOutput(1,TList::Class()); //My private output
123  DefineOutput(2,AliNormalizationCounter::Class());
125  // Output slot #3 writes into a TNtuple container
126  DefineOutput(3,TNtuple::Class()); //My private output
127  }
128 }
129 
130 //________________________________________________________________________
132 {
133  //
134  // Destructor
135  //
136  if(fOutput && !fOutput->IsOwner()){
137  delete fHistNEvents;
138  delete fHistNEventsVsCent;
139  delete fHistNEventsVsCL1;
140  delete fHistWhyRej;
141  delete fHistNEventsVsWhyRej;
144  delete fHistNCL1BeforePileup;
145  delete fHistNCL1AfterPileup;
146  delete fHistCentrality;
156  delete fHistZVertexSPDAfterCuts;
158  }
159  delete fOutput;
160  delete fCounter;
162 }
163 
164 //________________________________________________________________________
166 {
167  // Create the output container
168  //
169  if(fDebug > 1) printf("AnalysisTaskCheckEvSel::UserCreateOutputObjects() \n");
170 
171  Double_t maxMult=200.;
172  if(fSystem==1) maxMult=5000.;
173  else if(fSystem==2) maxMult=500.;
174 
175  fOutput = new TList();
176  fOutput->SetOwner();
177  fOutput->SetName("OutputHistos");
178 
179  fHistNEvents = new TH1F("hNEvents", "number of events ",20,-0.5,19.5);
180  ConfigureEvSelAxis(fHistNEvents->GetXaxis());
181  fHistNEvents->SetMinimum(0);
182  fOutput->Add(fHistNEvents);
183 
184  fHistNEventsVsCent = new TH2F("hNEventsVsCent", " ; ; Centrality ",20,-0.5,19.5,101,0.,101.);
187 
188  fHistNEventsVsCL1 = new TH2F("hNEventsVsCL1", " ; ; N_{CL1}",20,-0.5,19.5,200,-0.5,2*maxMult-0.5);
191 
192  fHistWhyRej = new TH1F("hWhyRej"," ; WhyRej",11,-0.5,10.5);
193  fOutput->Add(fHistWhyRej);
194  fHistNEventsVsWhyRej = new TH2F("hNEventsVsWhyRej", " ; ; WhyRej ",20,-0.5,19.5,11,-0.5,10.5);
197 
198  fHistNTrackletsBeforePileup = new TH1F("hNTrackletsBeforePileup"," ; N_{tracklets}",200,-0.5,maxMult-0.5);
199  fHistNTrackletsAfterPileup = new TH1F("hNTrackletsAfterPileup"," ; N_{tracklets}",200,-0.5,maxMult-0.5);
200  fHistNCL1BeforePileup = new TH1F("hNCL1BeforePileup"," ; N_{CL1}",200,-0.5,maxMult-0.5);
201  fHistNCL1AfterPileup = new TH1F("hNCL1AfterPileup"," ; N_{CL1}",200,-0.5,maxMult-0.5);
206 
207  fHistCentrality = new TH1F("hCentrality"," ; Centrality ; ",105,0.,105.);
208  fOutput->Add(fHistCentrality);
209 
210  fHistNTracksTPCoutVsV0Cent = new TH2F("hNTracksTPCoutVsV0Cent"," ; Centrality ; N_{tracks, TPCout}",105,0.,105.,200,-0.5,2*maxMult-0.5);
211  fHistNTracksFB4VsV0Cent = new TH2F("hNTracksFB4VsV0Cent"," ; Centrality ; N_{tracks, FiltBit4}",105,0.,105.,200,-0.5,maxMult-0.5);
212  fHistNTracksBC0VsV0Cent = new TH2F("hNTracksBC0VsV0Cent"," ; Centrality ; N_{tracks, TOFBC=0}",105,0.,105.,200,-0.5,maxMult-0.5);
213  fHistNTrackletsVsV0Cent = new TH2F("hNTrackletsVsV0Cent"," ; Centrality ; N_{tracklets}",105,0.,105.,200,-0.5,maxMult-0.5);
214  fHistNTracksTPCoutVsNTracklets = new TH2F("hNTracksTPCoutVsNTracklets"," ; N_{tracklets} ; N_{tracks, TPCout}",200,-0.5,maxMult-0.5,200,-0.5,2*maxMult-0.5);
215  fHistNTracksFB4VsNTracklets = new TH2F("hNTracksFB4VsNTracklets"," ; N_{tracklets} ; N_{tracks, FiltBit4}",200,-0.5,maxMult-0.5,200,-0.5,maxMult-0.5);
216  fHistNTracksBC0VsNTracksFB4 = new TH2F("hNTracksBC0VsNTracksFB4"," ; N_{tracks, FiltBit4}; N_{tracks, TOFBC=0}",200,-0.5,maxMult-0.5,200,-0.5,maxMult-0.5);
224 
225  fHistZVertexSPDBeforeCuts = new TH2F("hZVertexSPDBeforeCuts"," ; z_{SPDvertex} ; z_{TRKvertex}",400,-20.,20.,400,-20.,20.);
227  fHistZVertexSPDBeforeSPDCut = new TH2F("hZVertexSPDBeforeSPDCut"," ; z_{SPDvertex} ; z_{TRKvertex}",400,-20.,20.,400,-20.,20.);
229  fHistZVertexSPDAfterCuts = new TH2F("hZVertexSPDAfterCuts"," ; z_{SPDvertex} ; z_{TRKvertex}",400,-20.,20.,400,-20.,20.);
231  fHistZVertexSPDBadTrackVert =new TH2F("hZVertexSPDBadTrackVert"," ; z_{SPDvertex} ; z_{TRKvertex}",400,-20.,20.,400,-20.,20.);
233 
234  TString normName="NormalizationCounter";
235  AliAnalysisDataContainer *cont = GetOutputSlot(2)->GetContainer();
236  if(cont)normName=(TString)cont->GetName();
237  fCounter = new AliNormalizationCounter(normName.Data());
238  fCounter->Init();
239 
240  PostData(1,fOutput);
241 
242  if(fEnableVertexNtuple) {
243  OpenFile(3); // 3 is the slot number of the ntuple
244 
245  fNtupleZvtxDistVsWhyRej = new TNtuple("fNtupleZvtxDistVsWhyRej","fNtupleZvtxDistVsWhyRej","zSPDvertex:zTRKvertex:NcontributorszSPD:NcontributorszTRK:whyrejection:vtxtype");
246  }
247 }
248 
249 //________________________________________________________________________
253  ax->SetBinLabel(1,"nEvents read");
254  ax->SetBinLabel(2,"Rejected due to mismatch in trees");
255  ax->SetBinLabel(3,"nEvents with good AOD");
256  ax->SetBinLabel(4,"Rejected due to trigger");
257  ax->SetBinLabel(5,"Rejected due to phys sel");
258  ax->SetBinLabel(6,"Rejected due to bad centrality estimator");
259  ax->SetBinLabel(7,"Rejected due to centrality flattening");
260  ax->SetBinLabel(8,"Rejected due to centrality out of range");
261  ax->SetBinLabel(9,"Rejected due to not reco vertex");
262  ax->SetBinLabel(10,"Rejected for contr vertex");
263  ax->SetBinLabel(11,"Rejected for bad track vertex");
264  ax->SetBinLabel(12,"Rejected for vertex out of accept");
265  ax->SetBinLabel(13,"Rejected for pileup events");
266  ax->SetBinLabel(14,"Rejected due to centrality correlations");
267  ax->SetBinLabel(15,"Rejected due to mult vs. V0 cut");
268  ax->SetBinLabel(16,"Passing Phys sel + trigger");
269  ax->SetBinLabel(17,"Passing Phys sel + trigger + Pileup");
270  ax->SetBinLabel(18,"Passing Phys sel + trigger + Pileup + zVertex");
271  ax->SetBinLabel(19,"Passing Phys sel + trigger + Pileup + zVertex + Centrality");
272  ax->SetBinLabel(20,"Passing IsEventSelected");
273  ax->SetNdivisions(1,kFALSE);
274 }
275 //________________________________________________________________________
277  //Build the 3-track combinatorics (+-+ and -+-) for D+->Kpipi decays
278 
279  if(fDebug > 1) printf("AnalysisTaskCheckEvSel::UserExec() \n");
280  AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
281 
282  fHistNEvents->Fill(0); // count event
283 
284  if(fAODProtection>=0){
285  // Protection against different number of events in the AOD and deltaAOD
286  // In case of discrepancy the event is rejected.
287  Int_t matchingAODdeltaAODlevel = AliRDHFCuts::CheckMatchingAODdeltaAODevents();
288  if (matchingAODdeltaAODlevel<0 || (matchingAODdeltaAODlevel==0 && fAODProtection==1)) {
289  // AOD/deltaAOD trees have different number of entries || TProcessID do not match while it was required
290  fHistNEvents->Fill(1);
291  return;
292  }
293  }
294 
295  if(!aod && AODEvent() && IsStandardAOD()) {
296  // In case there is an AOD handler writing a standard AOD, use the AOD
297  // event in memory rather than the input (ESD) event.
298  aod = dynamic_cast<AliAODEvent*> (AODEvent());
299  }
300  if(!aod){
301  printf("AliAnalysisTaskCheckEvSel::UserExec: AOD not found!\n");
302  return;
303  }
304 
305  // fix for temporary bug in ESDfilter
306  // the AODs with null vertex pointer didn't pass the PhysSel
307  if(!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001) return;
308 
309 
310  // Post the data already here
311 
312  Bool_t isEvSel=fAnalysisCuts->IsEventSelected(aod);
316  if(fSystem==2) centr=fAnalysisCuts->GetCentrality(aod,AliRDHFCuts::kCentZNA);// p-Pb
317  const AliVVertex *vertex = aod->GetPrimaryVertex();
318  const AliVVertex *vertexSPD = aod->GetPrimaryVertexSPD();
320  Double_t ncl1 = aod->GetNumberOfITSClusters(1);
321  Double_t zvSPD=vertexSPD->GetZ();
322  Double_t zvTRK=vertex->GetZ();
323 
324  if(!isEvSel)fHistWhyRej->Fill(wrej);
325 
326  if(fEnableVertexNtuple) {
327  Float_t wrej4ntuple = (Float_t)wrej;
328  if(isEvSel) wrej4ntuple = -1;
329  Float_t vertextype=0;
330  if(vertex) {
331  TString vertextitle = vertex->GetTitle();
332  //Vtx tracks
333  if(vertextitle.Contains("VertexerTracks")) vertextype=3;
334  //vtx SPD
335  else if(vertextitle.Contains("Z")) vertextype=1;
336  else if(vertextitle.Contains("3D")) vertextype=2;
337  }
338 
339  Float_t vec4ntuple[6] = {(Float_t)zvSPD,(Float_t)zvTRK,(Float_t)vertexSPD->GetNContributors(),(Float_t)vertex->GetNContributors(),wrej4ntuple,vertextype};
340  fNtupleZvtxDistVsWhyRej->Fill(vec4ntuple);
341  PostData(3,fNtupleZvtxDistVsWhyRej);
342  }
343 
355 
356  fHistZVertexSPDBeforeCuts->Fill(zvSPD,zvTRK);
357 
362  vertexSPD->GetNContributors()>=1){
363  fHistZVertexSPDBeforeSPDCut->Fill(zvSPD,zvTRK);
364  Double_t dz = vertexSPD->GetZ()-vertex->GetZ();
365  Bool_t okSpdTrk=kTRUE;
366  if(fCutOnzVertexSPD==2 && TMath::Abs(dz)>0.5) okSpdTrk=kFALSE;
367  if(okSpdTrk && fCutOnzVertexSPD==3){
368  double covTrc[6],covSPD[6];
369  vertex->GetCovarianceMatrix(covTrc);
370  vertexSPD->GetCovarianceMatrix(covSPD);
371  double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
372  double errTrc = TMath::Sqrt(covTrc[5]);
373  double nsigTot = TMath::Abs(dz)/errTot, nsigTrc = TMath::Abs(dz)/errTrc;
374  if (TMath::Abs(dz)>0.2 || nsigTot>10 || nsigTrc>20) okSpdTrk=kFALSE;
375  }
376  if(!okSpdTrk) fHistZVertexSPDBadTrackVert->Fill(zvSPD,zvTRK);
377  }
378  if(isEvSel) fHistZVertexSPDAfterCuts->Fill(zvSPD,zvTRK);
379 
380  fHistNEvents->Fill(2);
381  fHistNEventsVsCent->Fill(2,centr);
382  fHistNEventsVsCL1->Fill(2,ncl1);
383 
384  Int_t binToFill=-1;
386  if(fAnalysisCuts->IsEventRejectedDueToTrigger()) binToFill=3;
388  }else{
390  if(wrej==3) binToFill=5;
391  else if(wrej==4) binToFill=6;
392  else binToFill=7;
393  }else{
398  }else{
400  else if(fAnalysisCuts->IsEventRejectedDueToPileup()) binToFill=12;
403  }
404  }
405  }
406  if(binToFill>0){
407  fHistNEvents->Fill(binToFill);
408  fHistNEventsVsCent->Fill(binToFill,centr);
409  fHistNEventsVsCL1->Fill(binToFill,ncl1);
410  }
412  fHistNEvents->Fill(15);
413  fHistNEventsVsCent->Fill(15,centr);
414  fHistNEventsVsCL1->Fill(15,ncl1);
415  fHistNEventsVsWhyRej->Fill(15,wrej);
417  fHistNEvents->Fill(16);
418  fHistNEventsVsCent->Fill(16,centr);
419  fHistNEventsVsCL1->Fill(16,ncl1);
420  fHistNEventsVsWhyRej->Fill(16,wrej);
422  fHistNEvents->Fill(17);
423  fHistNEventsVsCent->Fill(17,centr);
424  fHistNEventsVsCL1->Fill(17,ncl1);
425  fHistNEventsVsWhyRej->Fill(17,wrej);
427  fHistNEvents->Fill(18);
428  fHistNEventsVsCent->Fill(18,centr);
429  fHistNEventsVsCL1->Fill(18,ncl1);
430  fHistNEventsVsWhyRej->Fill(18,wrej);
431  }
432  }
433  }
434  }
435  if(isEvSel || (!isEvSel && wrej==1)){
436  fHistNTrackletsBeforePileup->Fill(ntrkl);
437  fHistNCL1BeforePileup->Fill(ncl1);
438  }
439  if(isEvSel){
440  fHistNEvents->Fill(19);
441  fHistNEventsVsCent->Fill(19,centr);
442  fHistNEventsVsCL1->Fill(19,ncl1);
443  fHistNEventsVsWhyRej->Fill(19,wrej);
444  fHistNTrackletsAfterPileup->Fill(ntrkl);
445  fHistNCL1AfterPileup->Fill(ncl1);
446  }
447 
449  // events not passing the centrality selection can be removed immediately. For the others we must count the generated D mesons
451 
452  if(isEvSel){
453 
454  Int_t ntracksTPCout=0;
455  Int_t ntracksFB4=0;
456  Int_t ntracksBC0=0;
457 
458  Double_t magField = aod->GetMagneticField();
459 
460  for(Int_t iTr=0; iTr<aod->GetNumberOfTracks(); iTr++){
461  AliAODTrack* track=dynamic_cast<AliAODTrack*>(aod->GetTrack(iTr));
462 
463  if(track->GetStatus() & AliESDtrack::kTPCout) ntracksTPCout++;
464  if(track->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)){
465  ntracksFB4++;
466  Int_t tofBC=track->GetTOFBunchCrossing(magField);
467  if(tofBC==0) ntracksBC0++;
468  }
469  }
470  fHistCentrality->Fill(centr);
471  fHistNTracksTPCoutVsV0Cent->Fill(centr,ntracksTPCout);
472  fHistNTracksFB4VsV0Cent->Fill(centr,ntracksFB4);
473  fHistNTracksBC0VsV0Cent->Fill(centr,ntracksBC0);
474  fHistNTrackletsVsV0Cent->Fill(centr,ntrkl);
475  fHistNTracksTPCoutVsNTracklets->Fill(ntracksTPCout,ntrkl);
476  fHistNTracksFB4VsNTracklets->Fill(ntracksFB4,ntrkl);
477  fHistNTracksBC0VsNTracksFB4->Fill(ntracksBC0,ntracksFB4);
478  }
479 
480  PostData(1,fOutput);
481  PostData(2,fCounter);
482 
483  return;
484 }
485 
486 //_________________________________________________________________
488 {
489  // Terminate analysis
490  //
491  if(fDebug > 1) printf("AliAnalysisTaskCheckEvSel: Terminate() \n");
492  fOutput = dynamic_cast<TList*> (GetOutputData(1));
493  if (!fOutput) {
494  printf("ERROR: fOutput not available\n");
495  return;
496  }
497  fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("hNEvents"));
498  if(fHistNEvents){
499  printf("Number of analyzed events = %d\n",(Int_t)fHistNEvents->GetBinContent(2));
500  }else{
501  printf("ERROR: fHistNEvents not available\n");
502  return;
503  }
504  return;
505 }
506 
Bool_t IsEventRejectedDueToCentrality() const
Definition: AliRDHFCuts.h:351
Bool_t IsEventRejectedDueToZVertexOutsideFiducialRegion() const
Definition: AliRDHFCuts.h:345
Bool_t IsEventRejectedDueToNotRecoVertex() const
Definition: AliRDHFCuts.h:336
double Double_t
Definition: External.C:58
TH2F * fHistNTracksTPCoutVsV0Cent
! Centrality-multiplicity correl
Definition: External.C:236
TH1F * fHistCentrality
! hist. of centrality distribution
AliNormalizationCounter * fCounter
flag to use AliEventCuts for selection
Int_t IsEventSelectedInCentrality(AliVEvent *event)
TH2F * fHistNTracksBC0VsNTracksFB4
! Centrality-multiplicity correl
static Int_t CheckMatchingAODdeltaAODevents()
Bool_t IsEventRejectedDueToVertexContributors() const
Definition: AliRDHFCuts.h:339
Bool_t IsEventSelectedWithAliEventCuts(AliVEvent *event)
Int_t GetWhyRejection() const
Definition: AliRDHFCuts.h:331
Bool_t IsEventRejectedDueToTRKV0CentralityCorrel() const
Definition: AliRDHFCuts.h:357
TH2F * fHistNTrackletsVsV0Cent
! Centrality-multiplicity correl
TH2F * fHistNEventsVsCent
! hist. for No. of events
virtual void Terminate(Option_t *option)
TList * fOutput
! list send on output slot 0
TH2F * fHistNTracksTPCoutVsNTracklets
! Centrality-multiplicity correl
static Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent *ev, Double_t mineta, Double_t maxeta)
TH2F * fHistZVertexSPDBadTrackVert
! z-vertex distr.
TH1F * fHistNEvents
! hist. for No. of events
TH2F * fHistNEventsVsWhyRej
! hist. for No. of events
int Int_t
Definition: External.C:63
float Float_t
Definition: External.C:68
TH2F * fHistZVertexSPDAfterCuts
! z-vertex distr.
TH1F * fHistWhyRej
! hist. for No. of events
Bool_t IsEventRejectedDueToBadTrackVertex() const
Definition: AliRDHFCuts.h:363
TH2F * fHistNTracksFB4VsV0Cent
! Centrality-multiplicity correl
virtual void UserExec(Option_t *option)
TNtuple * fNtupleZvtxDistVsWhyRej
! ntuple of ZvtxTRK vs. ZvtxSPD vs. Ncontributors vs. whyrej flag
Float_t GetCentrality(AliAODEvent *aodEvent)
Definition: AliRDHFCuts.h:272
Bool_t IsEventRejectedDueToPileup() const
Definition: AliRDHFCuts.h:348
Bool_t fUseAliEventCuts
flag to enable ntuple for primary vertex studies
TH1F * fHistNCL1BeforePileup
! hist. for No. of tracklets
TH2F * fHistNTracksBC0VsV0Cent
! Centrality-multiplicity correl
Bool_t IsEventRejectedDuePhysicsSelection() const
Definition: AliRDHFCuts.h:369
Int_t fAODProtection
cut on zSPD vertex to remove outliers in centrality vs. tracklets (0=no cut, 1= cut at 12 cm...
TH2F * fHistNTracksFB4VsNTracklets
! Centrality-multiplicity correl
Bool_t IsEventSelected(AliVEvent *event)
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999, Double_t spherocity=-99.)
TH1F * fHistNTrackletsBeforePileup
! hist. for No. of tracklets
TH2F * fHistZVertexSPDBeforeSPDCut
! z-vertex distr.
TH2F * fHistNEventsVsCL1
! hist. for No. of events
TH1F * fHistNTrackletsAfterPileup
! hist. for No. of tracklets
const char Option_t
Definition: External.C:48
Bool_t IsEventRejectedDueToTrigger() const
Definition: AliRDHFCuts.h:333
bool Bool_t
Definition: External.C:53
TH1F * fHistNCL1AfterPileup
! hist. for No. of tracklets
Int_t GetUseCentrality() const
Definition: AliRDHFCuts.h:294
Int_t fCutOnzVertexSPD
0=pp, 1=Pb-Pb, 2=p-Pb
Bool_t IsEventRejectedDueToCentralityFlattening() const
Definition: AliRDHFCuts.h:354
Bool_t IsEventRejectedDueToCentralityEstimCorrel() const
Definition: AliRDHFCuts.h:360
Double_t maxMult
TList * OpenFile(const char *fname)
Definition: DrawAnaELoss.C:65
TH2F * fHistZVertexSPDBeforeCuts
! z-vertex distr.