AliPhysics  vAN-20150924 (e816f45)
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros
AliAnalysisTaskSEDs.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 2007-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 // Analysis task to produce Ds candidates mass spectra //
21 // Origin: F.Prino, Torino, prino@to.infn.it //
22 // //
24 
25 #include <TClonesArray.h>
26 #include <TNtuple.h>
27 #include <TList.h>
28 #include <TString.h>
29 #include <TH1F.h>
30 #include <TMath.h>
31 #include <TDatabasePDG.h>
32 
33 #include "AliAnalysisManager.h"
34 #include "AliAODHandler.h"
35 #include "AliAODEvent.h"
36 #include "AliAODVertex.h"
37 #include "AliAODTrack.h"
38 #include "AliAODMCHeader.h"
39 #include "AliAODMCParticle.h"
41 #include "AliAnalysisVertexingHF.h"
42 #include "AliRDHFCutsDstoKKpi.h"
43 #include "AliAnalysisTaskSE.h"
45 #include "AliAnalysisTaskSEDs.h"
46 
50 
51 //________________________________________________________________________
53  AliAnalysisTaskSE(),
54  fOutput(0),
55  fHistNEvents(0),
56  fPtVsMass(0),
57  fPtVsMassPhi(0),
58  fPtVsMassK0st(0),
59  fYVsPt(0),
60  fYVsPtSig(0),
61  fNtupleDs(0),
62  fFillNtuple(0),
63  fReadMC(kFALSE),
64  fWriteOnlySignal(kFALSE),
65  fDoCutVarHistos(kTRUE),
66  fUseSelectionBit(kFALSE),
67  fNPtBins(0),
68  fListCuts(0),
69  fMassRange(0.8),
70  fMassBinSize(0.002),
71  fCounter(0),
72  fAnalysisCuts(0)
73 {
75 
76  for(Int_t i=0;i<3;i++){
77  fHistCentrality[i]=0;
79  }
80  for(Int_t i=0;i<4;i++) {
81  fChanHist[i]=0;
82  }
83  for(Int_t i=0;i<4*kMaxPtBins;i++){
84  fPtCandHist[i]=0;
85  fMassHist[i]=0;
86  fMassHistPhi[i]=0;
87  fMassHistK0st[i]=0;
88  fCosPHist[i]=0;
89  fDLenHist[i]=0;
90  fSumd02Hist[i]=0;
91  fSigVertHist[i]=0;
92  fPtMaxHist[i]=0;
93  fDCAHist[i]=0;
94  fPtProng0Hist[i]=0;
95  fPtProng1Hist[i]=0;
96  fPtProng2Hist[i]=0;
97  fDalitz[i]=0;
98  fDalitzPhi[i]=0;
99  fDalitzK0st[i]=0;
100  }
101  for(Int_t i=0;i<kMaxPtBins;i++){
102  fMassHistKK[i]=0;
103  fMassHistKpi[i]=0;
104  }
105  for(Int_t i=0;i<kMaxPtBins+1;i++){
106  fPtLimits[i]=0;
107  }
108 
109 }
110 
111 //________________________________________________________________________
112 AliAnalysisTaskSEDs::AliAnalysisTaskSEDs(const char *name,AliRDHFCutsDstoKKpi* analysiscuts,Int_t fillNtuple):
113  AliAnalysisTaskSE(name),
114  fOutput(0),
115  fHistNEvents(0),
116  fPtVsMass(0),
117  fPtVsMassPhi(0),
118  fPtVsMassK0st(0),
119  fYVsPt(0),
120  fYVsPtSig(0),
121  fNtupleDs(0),
122  fFillNtuple(fillNtuple),
123  fReadMC(kFALSE),
124  fWriteOnlySignal(kFALSE),
125  fDoCutVarHistos(kTRUE),
126  fUseSelectionBit(kFALSE),
127  fNPtBins(0),
128  fListCuts(0),
129  fMassRange(0.8),
130  fMassBinSize(0.002),
131  fCounter(0),
132  fAnalysisCuts(analysiscuts)
133 {
136 
137  for(Int_t i=0;i<3;i++){
138  fHistCentrality[i]=0;
139  fHistCentralityMult[i]=0;
140  }
141  for(Int_t i=0;i<4;i++) {
142  fChanHist[i]=0;
143  }
144  for(Int_t i=0;i<4*kMaxPtBins;i++){
145  fPtCandHist[i]=0;
146  fMassHist[i]=0;
147  fMassHistPhi[i]=0;
148  fMassHistK0st[i]=0;
149  fCosPHist[i]=0;
150  fDLenHist[i]=0;
151  fSumd02Hist[i]=0;
152  fSigVertHist[i]=0;
153  fPtMaxHist[i]=0;
154  fDCAHist[i]=0;
155  fPtProng0Hist[i]=0;
156  fPtProng1Hist[i]=0;
157  fPtProng2Hist[i]=0;
158  fDalitz[i]=0;
159  fDalitzPhi[i]=0;
160  fDalitzK0st[i]=0;
161  }
162  for(Int_t i=0;i<kMaxPtBins;i++){
163  fMassHistKK[i]=0;
164  fMassHistKpi[i]=0;
165  }
166  for(Int_t i=0;i<kMaxPtBins+1;i++){
167  fPtLimits[i]=0;
168  }
169 
171  Float_t *ptlim=fAnalysisCuts->GetPtBinLimits();
172  SetPtBins(nptbins,ptlim);
173 
174  DefineOutput(1,TList::Class()); //My private output
175 
176  DefineOutput(2,TList::Class());
177 
178  DefineOutput(3,AliNormalizationCounter::Class());
179 
180  if(fFillNtuple>0){
181  // Output slot #4 writes into a TNtuple container
182  DefineOutput(4,TNtuple::Class()); //My private output
183  }
184 
185 }
186 
187 //________________________________________________________________________
188 void AliAnalysisTaskSEDs::SetPtBins(Int_t n, Float_t* lim){
190  if(n>kMaxPtBins){
191  printf("Max. number of Pt bins = %d\n",kMaxPtBins);
193  fPtLimits[0]=0.;
194  fPtLimits[1]=1.;
195  fPtLimits[2]=3.;
196  fPtLimits[3]=5.;
197  fPtLimits[4]=10.;
198  for(Int_t i=5; i<kMaxPtBins+1; i++) fPtLimits[i]=99999999.;
199  }else{
200  fNPtBins=n;
201  for(Int_t i=0; i<fNPtBins+1; i++) fPtLimits[i]=lim[i];
202  for(Int_t i=fNPtBins+1; i<kMaxPtBins+1; i++) fPtLimits[i]=99999999.;
203  }
204  if(fDebug > 1){
205  printf("Number of Pt bins = %d\n",fNPtBins);
206  for(Int_t i=0; i<fNPtBins; i++) printf(" Bin%d = %8.2f-%8.2f\n",i,fPtLimits[i],fPtLimits[i+1]);
207  }
208 }
209 //________________________________________________________________________
211 {
212  // Destructor
213  if(fOutput && !fOutput->IsOwner()){
214  delete fHistNEvents;
215  for(Int_t i=0;i<4;i++){
216  delete fChanHist[i];
217  }
218  for(Int_t i=0;i<4*fNPtBins;i++){
219  delete fMassHist[i];
220  delete fMassHistPhi[i];
221  delete fMassHistK0st[i];
222  delete fCosPHist[i];
223  delete fDLenHist[i];
224  delete fSumd02Hist[i];
225  delete fSigVertHist[i];
226  delete fPtMaxHist[i];
227  delete fPtCandHist[i];
228  delete fDCAHist[i];
229  delete fPtProng0Hist[i];
230  delete fPtProng1Hist[i];
231  delete fPtProng2Hist[i];
232  delete fDalitz[i];
233  delete fDalitzPhi[i];
234  delete fDalitzK0st[i];
235  }
236  for(Int_t i=0;i<fNPtBins;i++){
237  delete fMassHistKK[i];
238  delete fMassHistKpi[i];
239  }
240  delete fPtVsMass;
241  delete fPtVsMassPhi;
242  delete fPtVsMassK0st;
243  delete fYVsPt;
244  delete fYVsPtSig;
245  for(Int_t i=0;i<3;i++){
246  delete fHistCentrality[i];
247  delete fHistCentralityMult[i];
248  }
249  }
250  delete fOutput;
251  delete fListCuts;
252  delete fNtupleDs;
253  delete fCounter;
254  delete fAnalysisCuts;
255 
256 }
257 
258 //________________________________________________________________________
260 {
262 
263  if(fDebug > 1) printf("AnalysisTaskSEDs::Init() \n");
264 
265  fListCuts=new TList();
266  fListCuts->SetOwner();
267  fListCuts->SetName("CutObjects");
268 
270  analysis->SetName("AnalysisCuts");
271 
272  fListCuts->Add(analysis);
273  PostData(2,fListCuts);
274  return;
275 }
276 
277 //________________________________________________________________________
279 {
281  //
282  if(fDebug > 1) printf("AnalysisTaskSEDs::UserCreateOutputObjects() \n");
283 
284  // Several histograms are more conveniently managed in a TList
285  fOutput = new TList();
286  fOutput->SetOwner();
287  fOutput->SetName("OutputHistos");
288 
289  fHistNEvents = new TH1F("hNEvents", "number of events ",11,-0.5,10.5);
290  fHistNEvents->GetXaxis()->SetBinLabel(1,"nEventsAnal");
291  fHistNEvents->GetXaxis()->SetBinLabel(2,"n. passing IsEvSelected");
292  fHistNEvents->GetXaxis()->SetBinLabel(3,"n. rejected due to trigger");
293  fHistNEvents->GetXaxis()->SetBinLabel(4,"n. rejected due to not reco vertex");
294  fHistNEvents->GetXaxis()->SetBinLabel(5,"n. rejected for contr vertex");
295  fHistNEvents->GetXaxis()->SetBinLabel(6,"n. rejected for vertex out of accept");
296  fHistNEvents->GetXaxis()->SetBinLabel(7,"n. rejected for pileup events");
297  fHistNEvents->GetXaxis()->SetBinLabel(8,"no. of out centrality events");
298  fHistNEvents->GetXaxis()->SetBinLabel(9,"no. of 3 prong candidates");
299  fHistNEvents->GetXaxis()->SetBinLabel(10,"no. of Ds after filtering cuts");
300  fHistNEvents->GetXaxis()->SetBinLabel(11,"no. of Ds after selection cuts");
301 
302  fHistNEvents->GetXaxis()->SetNdivisions(1,kFALSE);
303 
304  fHistNEvents->Sumw2();
305  fHistNEvents->SetMinimum(0);
306  fOutput->Add(fHistNEvents);
307 
308  fHistCentrality[0]=new TH1F("hCentr","centrality",10000,0.,100.);
309  fHistCentrality[1]=new TH1F("hCentr(selectedCent)","centrality(selectedCent)",10000,0.,100.);
310  fHistCentrality[2]=new TH1F("hCentr(OutofCent)","centrality(OutofCent)",10000,0.,100.);
311  fHistCentralityMult[0]=new TH2F("hCentrMult","centrality vs mult",100,0.5,30000.5,40,0.,100.);
312  fHistCentralityMult[1]=new TH2F("hCentrMult(selectedCent)","centrality vs mult(selectedCent)",100,0.5,30000.5,40,0.,100.);
313  fHistCentralityMult[2]=new TH2F("hCentrMult(OutofCent)","centrality vs mult(OutofCent)",100,0.5,30000.5,40,0.,100.);
314  for(Int_t i=0;i<3;i++){
315  fHistCentrality[i]->Sumw2();
316  fOutput->Add(fHistCentrality[i]);
317  fHistCentralityMult[i]->Sumw2();
318  fOutput->Add(fHistCentralityMult[i]);
319  }
320 
321  Double_t massDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
322 
323  Int_t nInvMassBins=(Int_t)(fMassRange/fMassBinSize+0.5);
324  if(nInvMassBins%2==1) nInvMassBins++;
325  // Double_t minMass=massDs-1.0*nInvMassBins*fMassBinSize;
326  Double_t minMass=massDs-0.5*nInvMassBins*fMassBinSize;
327  // Double_t maxMass=massDs+1.0*nInvMassBins*fMassBinSize;
328  Double_t maxMass=massDs+0.5*nInvMassBins*fMassBinSize;
329 
330  TString hisname;
331  TString htype;
332  Int_t index;
333  for(Int_t iType=0; iType<4; iType++){
334  for(Int_t i=0;i<fNPtBins;i++){
335  if(iType==0){
336  htype="All";
337  index=GetHistoIndex(i);
338  }else if(iType==1){
339  htype="Sig";
340  index=GetSignalHistoIndex(i);
341  }else if(iType==2){
342  htype="Bkg";
343  index=GetBackgroundHistoIndex(i);
344  }else{
345  htype="ReflSig";
346  index=GetReflSignalHistoIndex(i);
347  }
348  hisname.Form("hMass%sPt%d",htype.Data(),i);
349  fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
350  fMassHist[index]->Sumw2();
351  hisname.Form("hMass%sPt%dphi",htype.Data(),i);
352  fMassHistPhi[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
353  fMassHistPhi[index]->Sumw2();
354  hisname.Form("hMass%sPt%dk0st",htype.Data(),i);
355  fMassHistK0st[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
356  fMassHistK0st[index]->Sumw2();
357  hisname.Form("hCosP%sPt%d",htype.Data(),i);
358  fCosPHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
359  fCosPHist[index]->Sumw2();
360  hisname.Form("hDLen%sPt%d",htype.Data(),i);
361  fDLenHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.5);
362  fDLenHist[index]->Sumw2();
363  hisname.Form("hSumd02%sPt%d",htype.Data(),i);
364  fSumd02Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,1.);
365  fSumd02Hist[index]->Sumw2();
366  hisname.Form("hSigVert%sPt%d",htype.Data(),i);
367  fSigVertHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
368  fSigVertHist[index]->Sumw2();
369  hisname.Form("hPtMax%sPt%d",htype.Data(),i);
370  fPtMaxHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,20.);
371  fPtMaxHist[index]->Sumw2();
372  hisname.Form("hPtCand%sPt%d",htype.Data(),i);
373  fPtCandHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,20.);
374  fPtCandHist[index]->Sumw2();
375  hisname.Form("hDCA%sPt%d",htype.Data(),i);
376  fDCAHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
377  fDCAHist[index]->Sumw2();
378  hisname.Form("hPtProng0%sPt%d",htype.Data(),i);
379  fPtProng0Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.0,20.);
380  fPtProng0Hist[index]->Sumw2();
381  hisname.Form("hPtProng1%sPt%d",htype.Data(),i);
382  fPtProng1Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.0,20.);
383  fPtProng1Hist[index]->Sumw2();
384  hisname.Form("hPtProng2%sPt%d",htype.Data(),i);
385  fPtProng2Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.0,20.);
386  fPtProng2Hist[index]->Sumw2();
387  hisname.Form("hDalitz%sPt%d",htype.Data(),i);
388  fDalitz[index]=new TH2F(hisname.Data(),hisname.Data(),100,0.,2.,100,0.,2.);
389  fDalitz[index]->Sumw2();
390  hisname.Form("hDalitz%sPt%dphi",htype.Data(),i);
391  fDalitzPhi[index]=new TH2F(hisname.Data(),hisname.Data(),100,0.,2.,100,0.,2.);
392  fDalitzPhi[index]->Sumw2();
393  hisname.Form("hDalitz%sPt%dk0st",htype.Data(),i);
394  fDalitzK0st[index]=new TH2F(hisname.Data(),hisname.Data(),100,0.,2.,100,0.,2.);
395  fDalitzK0st[index]->Sumw2();
396  }
397  }
398 
399  for(Int_t i=0; i<4*fNPtBins; i++){
400  fOutput->Add(fMassHist[i]);
401  fOutput->Add(fMassHistPhi[i]);
402  fOutput->Add(fMassHistK0st[i]);
403  fOutput->Add(fPtCandHist[i]);
404  if(fDoCutVarHistos){
405  fOutput->Add(fCosPHist[i]);
406  fOutput->Add(fDLenHist[i]);
407  fOutput->Add(fSumd02Hist[i]);
408  fOutput->Add(fSigVertHist[i]);
409  fOutput->Add(fPtMaxHist[i]);
410  fOutput->Add(fDCAHist[i]);
411  fOutput->Add(fPtProng0Hist[i]);
412  fOutput->Add(fPtProng1Hist[i]);
413  fOutput->Add(fPtProng2Hist[i]);
414  fOutput->Add(fDalitz[i]);
415  fOutput->Add(fDalitzPhi[i]);
416  fOutput->Add(fDalitzK0st[i]);
417  }
418  }
419 
420  fChanHist[0] = new TH1F("hChanAll", "KKpi and piKK candidates",64,-0.5,63.5);
421  fChanHist[1] = new TH1F("hChanSig", "KKpi and piKK candidates",64,-0.5,63.5);
422  fChanHist[2] = new TH1F("hChanBkg", "KKpi and piKK candidates",64,-0.5,63.5);
423  fChanHist[3] = new TH1F("hChanReflSig", "KKpi and piKK candidates",64,-0.5,63.5);
424  for(Int_t i=0;i<4;i++){
425  fChanHist[i]->Sumw2();
426  fChanHist[i]->SetMinimum(0);
427  fOutput->Add(fChanHist[i]);
428  }
429 
430 
431  fPtVsMass=new TH2F("hPtVsMass","PtVsMass (prod. cuts)",nInvMassBins,minMass,maxMass,40,0.,20.);
432  fPtVsMassPhi=new TH2F("hPtVsMassPhi","PtVsMass (phi selection)",nInvMassBins,minMass,maxMass,200,0.,20.);
433  fPtVsMassK0st=new TH2F("hPtVsMassK0st","PtVsMass (K0* selection)",nInvMassBins,minMass,maxMass,200,0.,20.);
434  fYVsPt=new TH2F("hYVsPt","YvsPt (prod. cuts)",40,0.,20.,80,-2.,2.);
435  fYVsPtSig=new TH2F("hYVsPtSig","YvsPt (MC, only sig., prod. cuts)",40,0.,20.,80,-2.,2.);
436 
437  for(Int_t i=0;i<fNPtBins;i++){
438  hisname.Form("hMassKKPt%d",i);
439  fMassHistKK[i]=new TH1F(hisname.Data(),hisname.Data(),200,0.95,1.35);
440  fMassHistKK[i]->Sumw2();
441  fOutput->Add(fMassHistKK[i]);
442  hisname.Form("hMassKpiPt%d",i);
443  fMassHistKpi[i]=new TH1F(hisname.Data(),hisname.Data(),200,0.7,1.1);
444  fMassHistKpi[i]->Sumw2();
445  fOutput->Add(fMassHistKpi[i]);
446  }
447 
448  fOutput->Add(fPtVsMass);
449  fOutput->Add(fPtVsMassPhi);
450  fOutput->Add(fPtVsMassK0st);
451  fOutput->Add(fYVsPt);
452  fOutput->Add(fYVsPtSig);
453 
454  //Counter for Normalization
455  fCounter = new AliNormalizationCounter("NormalizationCounter");
456  fCounter->Init();
457 
458  PostData(1,fOutput);
459  PostData(3,fCounter);
460 
461  if(fFillNtuple>0){
462  OpenFile(4); // 4 is the slot number of the ntuple
463 
464  fNtupleDs = new TNtuple("fNtupleDs","Ds","labDs:retcode:pdgcode0:Pt0:Pt1:Pt2:PtRec:P0:P1:P2:PidTrackBit0:PidTrackBit1:PidTrackBit2:PointingAngle:PointingAngleXY:DecLeng:DecLengXY:NorDecLeng:NorDecLengXY:InvMassKKpi:InvMasspiKK:sigvert:d00:d01:d02:dca:d0square:InvMassPhiKKpi:InvMassPhipiKK:InvMassK0starKKpi:InvMassK0starpiKK:cosinePiDsFrameKKpi:cosinePiDsFramepiKK:cosineKPhiFrameKKpi:cosineKPhiFramepiKK:centrality:runNumber");
465 
466  }
467 
468 
469  return;
470 }
471 
472 //________________________________________________________________________
473 void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
474 {
477 
478  AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
479 
480  TClonesArray *array3Prong = 0;
481  if(!aod && AODEvent() && IsStandardAOD()) {
482  // In case there is an AOD handler writing a standard AOD, use the AOD
483  // event in memory rather than the input (ESD) event.
484  aod = dynamic_cast<AliAODEvent*> (AODEvent());
485  // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
486  // have to taken from the AOD event hold by the AliAODExtension
487  AliAODHandler* aodHandler = (AliAODHandler*)
488  ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
489  if(aodHandler->GetExtensions()) {
490  AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
491  AliAODEvent *aodFromExt = ext->GetAOD();
492  array3Prong=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong");
493  }
494  } else if(aod) {
495  array3Prong=(TClonesArray*)aod->GetList()->FindObject("Charm3Prong");
496  }
497 
498  if(!aod || !array3Prong) {
499  printf("AliAnalysisTaskSEDs::UserExec: Charm3Prong branch not found!\n");
500  return;
501  }
502 
503 
504  // fix for temporary bug in ESDfilter
505  // the AODs with null vertex pointer didn't pass the PhysSel
506  if(!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001) return;
507 
508 
509  fHistNEvents->Fill(0); // count event
510  // Post the data already here
511  PostData(1,fOutput);
512 
514 
515 
516  Bool_t isEvSel=fAnalysisCuts->IsEventSelected(aod);
517  Float_t ntracks=aod->GetNumberOfTracks();
518  Float_t evCentr=fAnalysisCuts->GetCentrality(aod);
519 
520  fHistCentrality[0]->Fill(evCentr);
521  fHistCentralityMult[0]->Fill(ntracks,evCentr);
528  fHistNEvents->Fill(7);
529  fHistCentrality[2]->Fill(evCentr);
530  fHistCentralityMult[2]->Fill(ntracks,evCentr);
531  }
532 
533  Float_t centrality=fAnalysisCuts->GetCentrality(aod);
534  Int_t runNumber=aod->GetRunNumber();
535 
536  if(!isEvSel)return;
537 
538  fHistNEvents->Fill(1);
539  fHistCentrality[1]->Fill(evCentr);
540  fHistCentralityMult[1]->Fill(ntracks,evCentr);
541 
542  TClonesArray *arrayMC=0;
543  AliAODMCHeader *mcHeader=0;
544 
545  // AOD primary vertex
546  AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
547  // vtx1->Print();
548 
549  // load MC particles
550  if(fReadMC){
551 
552  arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
553  if(!arrayMC) {
554  printf("AliAnalysisTaskSEDs::UserExec: MC particles branch not found!\n");
555  return;
556  }
557 
558  // load MC header
559  mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
560  if(!mcHeader) {
561  printf("AliAnalysisTaskSEDs::UserExec: MC header branch not found!\n");
562  return;
563  }
564  }
565 
566  Int_t n3Prong = array3Prong->GetEntriesFast();
567  if(fDebug>1) printf("Number of Ds->KKpi: %d\n",n3Prong);
568 
569 
570  Int_t pdgDstoKKpi[3]={321,321,211};
571  Int_t nSelected=0;
572  Int_t nFiltered=0;
573  for (Int_t i3Prong = 0; i3Prong < n3Prong; i3Prong++) {
574 
575  AliAODRecoDecayHF3Prong *d = (AliAODRecoDecayHF3Prong*)array3Prong->UncheckedAt(i3Prong);
576  fHistNEvents->Fill(8);
577 
579  continue;
580  }
581  nFiltered++;
582  fHistNEvents->Fill(9);
583 
584  Bool_t unsetvtx=kFALSE;
585  if(!d->GetOwnPrimaryVtx()){
586  d->SetOwnPrimaryVtx(vtx1);
587  unsetvtx=kTRUE;
588  }
589 
590  Bool_t recVtx=kFALSE;
591  AliAODVertex *origownvtx=0x0;
592 
593 
594  Double_t ptCand = d->Pt();
595  Int_t iPtBin=TMath::BinarySearch(fNPtBins,fPtLimits,(Float_t)ptCand);
596  Double_t rapid=d->YDs();
597  fYVsPt->Fill(ptCand,rapid);
598  Bool_t isFidAcc=fAnalysisCuts->IsInFiducialAcceptance(ptCand,rapid);
599  if(!isFidAcc) continue;
600 
601  Int_t retCodeAnalysisCuts=fAnalysisCuts->IsSelected(d,AliRDHFCuts::kAll,aod);
602  Int_t retCodeNoRes=retCodeAnalysisCuts;
603  Bool_t origRes=fAnalysisCuts->IsCutOnResonancesApplied();
604  if(origRes){
606  retCodeNoRes=fAnalysisCuts->IsSelected(d,AliRDHFCuts::kAll,aod);
608  }
609  if(retCodeNoRes&1){ //KKpi
610  Double_t massKK=d->InvMass2Prongs(0,1,321,321);
611  Double_t massKp=d->InvMass2Prongs(1,2,321,211);
612  fMassHistKK[iPtBin]->Fill(massKK);
613  fMassHistKpi[iPtBin]->Fill(massKp);
614  }
615  if(retCodeNoRes&2){ //piKK
616  Double_t massKK=d->InvMass2Prongs(1,2,321,321);
617  Double_t massKp=d->InvMass2Prongs(0,1,211,321);
618  fMassHistKK[iPtBin]->Fill(massKK);
619  fMassHistKpi[iPtBin]->Fill(massKp);
620  }
621 
622  if(retCodeAnalysisCuts<=0) continue;
623 
625  if(d->GetOwnPrimaryVtx()) origownvtx=new AliAODVertex(*d->GetOwnPrimaryVtx());
626  if(fAnalysisCuts->RecalcOwnPrimaryVtx(d,aod))recVtx=kTRUE;
627  else fAnalysisCuts->CleanOwnPrimaryVtx(d,aod,origownvtx);
628  }
629 
630 
631  fHistNEvents->Fill(10);
632  nSelected++;
633 
634  Int_t index=GetHistoIndex(iPtBin);
635  fPtCandHist[index]->Fill(ptCand);
636 
637  Int_t isKKpi=retCodeAnalysisCuts&1;
638  Int_t ispiKK=retCodeAnalysisCuts&2;
639  Int_t isPhiKKpi=retCodeAnalysisCuts&4;
640  Int_t isPhipiKK=retCodeAnalysisCuts&8;
641  Int_t isK0starKKpi=retCodeAnalysisCuts&16;
642  Int_t isK0starpiKK=retCodeAnalysisCuts&32;
643 
644  Double_t weightKKpi=1.;
645  Double_t weightpiKK=1.;
647  weightKKpi=fAnalysisCuts->GetWeightForKKpi();
648  weightpiKK=fAnalysisCuts->GetWeightForpiKK();
649  if(weightKKpi>1. || weightKKpi<0.) weightKKpi=0.;
650  if(weightpiKK>1. || weightpiKK<0.) weightpiKK=0.;
651  }
652 
653  fChanHist[0]->Fill(retCodeAnalysisCuts);
654 
655  Int_t indexMCKKpi=-1;
656  Int_t indexMCpiKK=-1;
657  Int_t labDs=-1;
658  Int_t pdgCode0=-999;
659  Int_t isMCSignal=-1;
660 
661  if(fReadMC){
662  labDs = d->MatchToMC(431,arrayMC,3,pdgDstoKKpi);
663  if(labDs>=0){
664  Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
665  AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(TMath::Abs(labDau0));
666  pdgCode0=TMath::Abs(p->GetPdgCode());
667 
668  if(isKKpi){
669  if(pdgCode0==321) {
670  indexMCKKpi=GetSignalHistoIndex(iPtBin);
671  fYVsPtSig->Fill(ptCand,rapid);
672  fChanHist[1]->Fill(retCodeAnalysisCuts);
673  isMCSignal=1;
674  }else{
675  indexMCKKpi=GetReflSignalHistoIndex(iPtBin);
676  fChanHist[3]->Fill(retCodeAnalysisCuts);
677  isMCSignal=0;
678  }
679  }
680  if(ispiKK){
681  if(pdgCode0==211) {
682  indexMCpiKK=GetSignalHistoIndex(iPtBin);
683  fYVsPtSig->Fill(ptCand,rapid);
684  fChanHist[1]->Fill(retCodeAnalysisCuts);
685  isMCSignal=1;
686  }else{
687  indexMCpiKK=GetReflSignalHistoIndex(iPtBin);
688  fChanHist[3]->Fill(retCodeAnalysisCuts);
689  isMCSignal=0;
690  }
691  }
692  }else{
693  indexMCpiKK=GetBackgroundHistoIndex(iPtBin);
694  indexMCKKpi=GetBackgroundHistoIndex(iPtBin);
695  fChanHist[2]->Fill(retCodeAnalysisCuts);
696  }
697  }
698 
699  if(isKKpi){
700  Double_t invMass=d->InvMassDsKKpi();
701  fMassHist[index]->Fill(invMass,weightKKpi);
702  fPtVsMass->Fill(invMass,ptCand,weightKKpi);
703  if(isPhiKKpi){
704  fMassHistPhi[index]->Fill(invMass,weightKKpi);
705  fPtVsMassPhi->Fill(invMass,ptCand,weightKKpi);
706  }
707  if(isK0starKKpi){
708  fMassHistK0st[index]->Fill(invMass,weightKKpi);
709  fPtVsMassK0st->Fill(invMass,ptCand,weightKKpi);
710  }
711  if(fReadMC && indexMCKKpi!=-1){
712  fMassHist[indexMCKKpi]->Fill(invMass,weightKKpi);
713  if(isPhiKKpi) fMassHistPhi[indexMCKKpi]->Fill(invMass,weightKKpi);
714  if(isK0starKKpi) fMassHistK0st[indexMCKKpi]->Fill(invMass,weightKKpi);
715  }
716  }
717  if(ispiKK){
718  Double_t invMass=d->InvMassDspiKK();
719  fMassHist[index]->Fill(invMass,weightpiKK);
720  fPtVsMass->Fill(invMass,ptCand,weightpiKK);
721  if(isPhipiKK){
722  fMassHistPhi[index]->Fill(invMass,weightpiKK);
723  fPtVsMassPhi->Fill(invMass,ptCand,weightpiKK);
724  }
725  if(isK0starpiKK){
726  fMassHistK0st[index]->Fill(invMass,weightpiKK);
727  fPtVsMassK0st->Fill(invMass,ptCand,weightpiKK);
728  }
729  if(fReadMC && indexMCpiKK!=-1){
730  fMassHist[indexMCpiKK]->Fill(invMass,weightpiKK);
731  if(isPhipiKK) fMassHistPhi[indexMCpiKK]->Fill(invMass,weightpiKK);
732  if(isK0starpiKK) fMassHistK0st[indexMCpiKK]->Fill(invMass,weightpiKK);
733  }
734  }
735 
736  if(fDoCutVarHistos){
737  Double_t dlen=d->DecayLength();
738  Double_t cosp=d->CosPointingAngle();
739  Double_t pt0=d->PtProng(0);
740  Double_t pt1=d->PtProng(1);
741  Double_t pt2=d->PtProng(2);
742  Double_t sigvert=d->GetSigmaVert();
743  Double_t sumD02=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
744  Double_t dca=d->GetDCA();
745  Double_t ptmax=0;
746  for(Int_t i=0;i<3;i++){
747  if(d->PtProng(i)>ptmax)ptmax=d->PtProng(i);
748  }
749  fCosPHist[index]->Fill(cosp);
750  fDLenHist[index]->Fill(dlen);
751  fSigVertHist[index]->Fill(sigvert);
752  fSumd02Hist[index]->Fill(sumD02);
753  fPtMaxHist[index]->Fill(ptmax);
754  fDCAHist[index]->Fill(dca);
755  fPtProng0Hist[index]->Fill(pt0);
756  fPtProng1Hist[index]->Fill(pt1);
757  fPtProng2Hist[index]->Fill(pt2);
758  if(isKKpi){
759  Double_t massKK=d->InvMass2Prongs(0,1,321,321);
760  Double_t massKp=d->InvMass2Prongs(1,2,321,211);
761  fDalitz[index]->Fill(massKK,massKp);
762  if(isPhiKKpi) fDalitzPhi[index]->Fill(massKK,massKp);
763  if(isK0starKKpi) fDalitzK0st[index]->Fill(massKK,massKp);
764  if(fReadMC && indexMCKKpi!=-1){
765  fDalitz[indexMCKKpi]->Fill(massKK,massKp);
766  if(isPhiKKpi) fDalitzPhi[indexMCKKpi]->Fill(massKK,massKp);
767  if(isK0starKKpi) fDalitzK0st[indexMCKKpi]->Fill(massKK,massKp);
768  fCosPHist[indexMCKKpi]->Fill(cosp);
769  fDLenHist[indexMCKKpi]->Fill(dlen);
770  fSigVertHist[indexMCKKpi]->Fill(sigvert);
771  fSumd02Hist[indexMCKKpi]->Fill(sumD02);
772  fPtMaxHist[indexMCKKpi]->Fill(ptmax);
773  fPtCandHist[indexMCKKpi]->Fill(ptCand);
774  fDCAHist[indexMCKKpi]->Fill(dca);
775  fPtProng0Hist[indexMCKKpi]->Fill(pt0);
776  fPtProng1Hist[indexMCKKpi]->Fill(pt1);
777  fPtProng2Hist[indexMCKKpi]->Fill(pt2);
778  }
779  }
780  if(ispiKK){
781  Double_t massKK=d->InvMass2Prongs(1,2,321,321);
782  Double_t massKp=d->InvMass2Prongs(0,1,211,321);
783  fDalitz[index]->Fill(massKK,massKp);
784  if(isPhipiKK) fDalitzPhi[index]->Fill(massKK,massKp);
785  if(isK0starpiKK) fDalitzK0st[index]->Fill(massKK,massKp);
786 
787 
788  if(fReadMC && indexMCpiKK!=-1){
789  fDalitz[indexMCpiKK]->Fill(massKK,massKp);
790  if(isPhipiKK) fDalitzPhi[indexMCpiKK]->Fill(massKK,massKp);
791  if(isK0starpiKK) fDalitzK0st[indexMCpiKK]->Fill(massKK,massKp);
792  fCosPHist[indexMCpiKK]->Fill(cosp);
793  fDLenHist[indexMCpiKK]->Fill(dlen);
794  fSigVertHist[indexMCpiKK]->Fill(sigvert);
795  fSumd02Hist[indexMCpiKK]->Fill(sumD02);
796  fPtMaxHist[indexMCpiKK]->Fill(ptmax);
797  fPtCandHist[indexMCpiKK]->Fill(ptCand);
798  fDCAHist[indexMCpiKK]->Fill(dca);
799  fPtProng0Hist[indexMCpiKK]->Fill(pt0);
800  fPtProng1Hist[indexMCpiKK]->Fill(pt1);
801  fPtProng2Hist[indexMCpiKK]->Fill(pt2);
802  }
803  }
804 
805 
806  }
807 
808  Float_t tmp[37];
809  if(fFillNtuple>0){
810 
811  if ((fFillNtuple==1 && (isPhiKKpi || isPhipiKK)) || (fFillNtuple==2 && (isK0starKKpi || isK0starpiKK)) || (fFillNtuple==3 && (isKKpi || ispiKK))){
812 
813  AliAODTrack *track0=(AliAODTrack*)d->GetDaughter(0);
814  AliAODTrack *track1=(AliAODTrack*)d->GetDaughter(1);
815  AliAODTrack *track2=(AliAODTrack*)d->GetDaughter(2);
816 
817  UInt_t BitMapPIDTrack0=fAnalysisCuts->GetPIDTrackTPCTOFBitMap(track0);
818  UInt_t BitMapPIDTrack1=fAnalysisCuts->GetPIDTrackTPCTOFBitMap(track1);
819  UInt_t BitMapPIDTrack2=fAnalysisCuts->GetPIDTrackTPCTOFBitMap(track2);
820 
821  tmp[0]=Float_t(labDs);
822  if(fReadMC && fWriteOnlySignal) tmp[0]=Float_t(isMCSignal);
823  tmp[1]=Float_t(retCodeAnalysisCuts);
824  tmp[2]=Float_t(pdgCode0);
825  tmp[3]=d->PtProng(0);
826  tmp[4]=d->PtProng(1);
827  tmp[5]=d->PtProng(2);
828  tmp[6]=d->Pt();
829  tmp[7]=d->PProng(0);
830  tmp[8]=d->PProng(1);
831  tmp[9]=d->PProng(2);
832  tmp[10]=Int_t(BitMapPIDTrack0);
833  tmp[11]=Int_t(BitMapPIDTrack1);
834  tmp[12]=Int_t(BitMapPIDTrack2);
835  tmp[13]=d->CosPointingAngle();
836  tmp[14]=d->CosPointingAngleXY();
837  tmp[15]=d->DecayLength();
838  tmp[16]=d->DecayLengthXY();
839  tmp[17]=d->NormalizedDecayLength();
840  tmp[18]=d->NormalizedDecayLengthXY();
841  tmp[19]=d->InvMassDsKKpi();
842  tmp[20]=d->InvMassDspiKK();
843  tmp[21]=d->GetSigmaVert();
844  tmp[22]=d->Getd0Prong(0);
845  tmp[23]=d->Getd0Prong(1);
846  tmp[24]=d->Getd0Prong(2);
847  tmp[25]=d->GetDCA();
848  tmp[26]=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
849  tmp[27]=d->InvMass2Prongs(0,1,321,321);
850  tmp[28]=d->InvMass2Prongs(1,2,321,321);
851  tmp[29]=d->InvMass2Prongs(1,2,321,211);
852  tmp[30]=d->InvMass2Prongs(0,1,211,321);
853  tmp[31]=d->CosPiDsLabFrameKKpi();
854  tmp[32]=d->CosPiDsLabFramepiKK();
855  tmp[33]=d->CosPiKPhiRFrameKKpi();
856  tmp[34]=d->CosPiKPhiRFramepiKK();
857  tmp[35]=(Float_t)(centrality);
858  tmp[36]=(Float_t)(runNumber);
859 
860  if(fReadMC && fWriteOnlySignal){
861  if(isMCSignal>=0) fNtupleDs->Fill(tmp);
862  }else{
863  fNtupleDs->Fill(tmp);
864  }
865  PostData(4,fNtupleDs);
866  }
867  }
868 
869  if(unsetvtx) d->UnsetOwnPrimaryVtx();
870  if(recVtx)fAnalysisCuts->CleanOwnPrimaryVtx(d,aod,origownvtx);
871  }
872 
873  fCounter->StoreCandidates(aod,nFiltered,kTRUE);
874  fCounter->StoreCandidates(aod,nSelected,kFALSE);
875 
876  PostData(1,fOutput);
877  PostData(3,fCounter);
878 
879  return;
880 }
881 
882 //_________________________________________________________________
883 
884 void AliAnalysisTaskSEDs::Terminate(Option_t */*option*/)
885 {
887  //
888  if(fDebug > 1) printf("AnalysisTaskSEDs: Terminate() \n");
889  fOutput = dynamic_cast<TList*> (GetOutputData(1));
890  if (!fOutput) {
891  printf("ERROR: fOutput not available\n");
892  return;
893  }
894  fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("hNEvents"));
895  if(fHistNEvents){
896  printf("Number of analyzed events = %d\n",(Int_t)fHistNEvents->GetBinContent(2));
897  }else{
898  printf("ERROR: fHistNEvents not available\n");
899  return;
900  }
901  return;
902 }
903 
Double_t NormalizedDecayLengthXY() const
Bool_t IsEventRejectedDueToCentrality() const
Definition: AliRDHFCuts.h:310
TH1F * fPtMaxHist[4 *kMaxPtBins]
! hist. for Pt Max (Prod Cuts)
Bool_t IsEventRejectedDueToZVertexOutsideFiducialRegion() const
Definition: AliRDHFCuts.h:304
Double_t NormalizedDecayLength() const
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Bool_t IsEventRejectedDueToNotRecoVertex() const
Definition: AliRDHFCuts.h:298
void StoreCandidates(AliVEvent *, Int_t nCand=0, Bool_t flagFilter=kTRUE)
TH1F * fPtProng1Hist[4 *kMaxPtBins]
! hist. for DCA (Prod Cuts)
void SetPtBins(Int_t n, Float_t *lim)
Bool_t HasSelectionBit(Int_t i) const
TH2F * fDalitzK0st[4 *kMaxPtBins]
! dalitz plot via K0* (sig,bkg,tot)
Double_t CosPiDsLabFrameKKpi() const
centrality
Int_t GetHistoIndex(Int_t iPtBin) const
Double_t fMassRange
limits for pt bins
Bool_t IsEventRejectedDueToVertexContributors() const
Definition: AliRDHFCuts.h:301
TH2F * fPtVsMass
! hist. of pt vs. mass (prod. cuts)
Double_t CosPointingAngleXY() const
TH1F * fPtProng0Hist[4 *kMaxPtBins]
! hist. for Pt Max (Prod Cuts)
TH2F * fYVsPtSig
! hist. of Y vs. Pt (MC, only sig, prod. cuts)
Int_t GetPidOption() const
virtual void UserCreateOutputObjects()
Implementation of interface methods.
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
TH1F * fSumd02Hist[4 *kMaxPtBins]
! hist. for sum d02 (Prod Cuts)
UInt_t GetPIDTrackTPCTOFBitMap(AliAODTrack *track) const
TH1F * fMassHistPhi[4 *kMaxPtBins]
! hist. of mass spectra via phi (sig,bkg,tot)
TNtuple * fNtupleDs
! output ntuple
TH1F * fHistCentrality[3]
!hist. for cent distr (all,sel ev, )
AliNormalizationCounter * fCounter
bin size for inv. mass histo
TH2F * fHistCentralityMult[3]
!hist. for cent distr vs mult (all,sel ev, )
const Double_t ptmax
TH1F * fHistNEvents
! hist. for No. of events
AliRDHFCutsDstoKKpi * fAnalysisCuts
TList * fOutput
! list send on output slot 0
Double_t CosPiKPhiRFrameKKpi() const
AliAODVertex * GetOwnPrimaryVtx() const
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t GetSigmaVert(const AliAODEvent *aod=0x0)
TH2F * fDalitzPhi[4 *kMaxPtBins]
! dalitz plot via phi (sig,bkg,tot)
Float_t GetCentrality(AliAODEvent *aodEvent)
Definition: AliRDHFCuts.h:242
Bool_t IsEventRejectedDueToPileup() const
Definition: AliRDHFCuts.h:307
TH1F * fMassHistKpi[kMaxPtBins]
! hist. of mass spectra of Kpi
Bool_t IsCutOnResonancesApplied() const
TH1F * fPtCandHist[4 *kMaxPtBins]
! hist. for Pt Max (Prod Cuts)
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
Double_t CosPiDsLabFramepiKK() const
Double_t DecayLengthXY() const
Bool_t GetIsPrimaryWithoutDaughters() const
Definition: AliRDHFCuts.h:261
Int_t GetSignalHistoIndex(Int_t iPtBin) const
Bool_t IsEventSelected(AliVEvent *event)
virtual void UserExec(Option_t *option)
Int_t GetReflSignalHistoIndex(Int_t iPtBin) const
virtual void Terminate(Option_t *option)
TH1F * fCosPHist[4 *kMaxPtBins]
! hist. of cos pointing angle (sig,bkg,tot)
Double_t minMass
void CleanOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod, AliAODVertex *origownvtx) const
Float_t * GetPtBinLimits() const
Definition: AliRDHFCuts.h:232
TH1F * fDLenHist[4 *kMaxPtBins]
! hist. of decay length (sig,bkg,tot)
Bool_t fUseSelectionBit
flag to create and fill histos with distributions of cut variables
Double_t GetWeightForpiKK() const
Double_t GetWeightForKKpi() const
TH1F * fChanHist[4]
! hist. with KKpi and piKK candidates (sig,bkg,tot)
TH1F * fMassHist[4 *kMaxPtBins]
! hist. of mass spectra (sig,bkg,tot)
Int_t GetNPtBins() const
Definition: AliRDHFCuts.h:233
TH1F * fDCAHist[4 *kMaxPtBins]
! hist. for DCA (Prod Cuts)
Bool_t IsEventRejectedDueToTrigger() const
Definition: AliRDHFCuts.h:295
Bool_t fDoCutVarHistos
flag to control ntuple writing in MC
Double_t maxMass
TH1F * fPtProng2Hist[4 *kMaxPtBins]
! hist. for DCA (Prod Cuts)
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999)
Double_t CosPointingAngle() const
TH2F * fDalitz[4 *kMaxPtBins]
! dalitz plot (sig,bkg,tot)
TH1F * fSigVertHist[4 *kMaxPtBins]
! hist. for sigVert (Prod Cuts)
Bool_t RecalcOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
Double_t DecayLength() const
TH2F * fPtVsMassPhi
! hist. of pt vs. mass (phi selection)
TH1F * fMassHistKK[kMaxPtBins]
! hist. of mass spectra of KK
Double_t CosPiKPhiRFramepiKK() const
Int_t nptbins
TH1F * fMassHistK0st[4 *kMaxPtBins]
! hist. of mass spectra via K0* (sig,bkg,tot)
TH2F * fYVsPt
! hist. of Y vs. Pt (prod. cuts)
TH2F * fPtVsMassK0st
! hist. of pt vs. mass (K0* selection)
TList * fListCuts
number of Pt bins
void ApplyCutOnResonances(Bool_t opt=kTRUE)
UChar_t fNPtBins
flag for useage of HasSelectionBit
Bool_t fWriteOnlySignal
flag for access to MC
Double_t fMassBinSize
range for mass histogram
Int_t GetBackgroundHistoIndex(Int_t iPtBin) const
Float_t fPtLimits[kMaxPtBins+1]