AliPhysics  1168478 (1168478)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 <THnSparse.h>
32 #include <TDatabasePDG.h>
33 #include <Riostream.h>
34 
35 #include "AliAnalysisManager.h"
36 #include "AliAODHandler.h"
37 #include "AliAODEvent.h"
38 #include "AliAODVertex.h"
39 #include "AliAODTrack.h"
40 #include "AliAODMCHeader.h"
41 #include "AliAODMCParticle.h"
42 #include "AliAODRecoDecay.h"
44 #include "AliAnalysisVertexingHF.h"
45 #include "AliRDHFCutsDstoKKpi.h"
46 #include "AliAnalysisTaskSE.h"
48 #include "AliAnalysisTaskSEDs.h"
49 #include "AliVertexingHFUtils.h"
50 
54 
55 //________________________________________________________________________
58  fOutput(0),
59  fHistNEvents(0),
60  fHistoPtWeight(0x0),
61  fPtVsMass(0),
62  fPtVsMassPhi(0),
63  fPtVsMassK0st(0),
64  fYVsPt(0),
65  fYVsPtSig(0),
66  fHistAllV0multNTPCout(0),
67  fHistSelV0multNTPCout(0),
68  fCosPHist3D(0x0),
69  fCosPxyHist3D(0x0),
70  fDLenHist3D(0x0),
71  fDLenxyHist3D(0x0),
72  fNDLenxyHist3D(0x0),
73  fSigVertHist3D(0x0),
74  fDCAHist3D(0x0),
75  fNormIPHist3D(0x0),
76  fCosPiDsHist3D(0x0),
77  fCosPiKPhiHist3D(0x0),
78  fPtProng0Hist3D(0x0),
79  fPtProng1Hist3D(0x0),
80  fPtProng2Hist3D(0x0),
81  fNtupleDs(0),
82  fFillNtuple(0),
83  fSystem(0),
84  fReadMC(kFALSE),
85  fWriteOnlySignal(kFALSE),
86  fDoCutVarHistos(kTRUE),
87  fUseSelectionBit(kFALSE),
88  fFillSparse(kTRUE),
89  fFillSparseDplus(kFALSE),
90  fFillImpParSparse(kFALSE),
91  fDoRotBkg(kFALSE),
92  fDoBkgPhiSB(kFALSE),
93  fDoCutV0multTPCout(kFALSE),
94  fUseWeight(kFALSE),
95  fUseTrkl(kFALSE),
96  fAODProtection(1),
97  fNPtBins(0),
98  fListCuts(0),
99  fMassRange(0.8),
100  fMassBinSize(0.002),
101  fminMass(1.6),
102  fmaxMass(2.5),
103  fMaxDeltaPhiMass4Rot(0.010),
104  fCounter(0),
105  fAnalysisCuts(0),
106  fnSparse(0),
107  fnSparseIP(0),
108  fImpParSparse(0x0),
109  fImpParSparseMC(0x0)
110 {
112 
113  for(Int_t i=0;i<3;i++){
114  fHistCentrality[i]=0;
115  fHistCentralityMult[i]=0;
116  }
117  for(Int_t i=0;i<4;i++) {
118  fChanHist[i]=0;
119  }
120  for(Int_t i=0;i<4*kMaxPtBins;i++){
121  fPtCandHist[i]=0;
122  fMassHist[i]=0;
123  fMassHistPhi[i]=0;
124  fMassHistK0st[i]=0;
125  fCosPHist[i]=0;
126  fDLenHist[i]=0;
127  fSumd02Hist[i]=0;
128  fSigVertHist[i]=0;
129  fPtMaxHist[i]=0;
130  fDCAHist[i]=0;
131  fPtProng0Hist[i]=0;
132  fPtProng1Hist[i]=0;
133  fPtProng2Hist[i]=0;
134  fDalitz[i]=0;
135  fDalitzPhi[i]=0;
136  fDalitzK0st[i]=0;
137  }
138  for(Int_t i=0;i<kMaxPtBins;i++){
139  fMassHistKK[i]=0;
140  fMassHistKpi[i]=0;
141  fMassRotBkgHistPhi[i]=0;
142  fMassLSBkgHistPhi[i]=0;
143  fMassRSBkgHistPhi[i]=0;
144  }
145  for(Int_t i=0;i<kMaxPtBins+1;i++){
146  fPtLimits[i]=0;
147  }
148  for (Int_t i=0; i<4; i++) {
149  fnSparseMC[i]=0;
150  fnSparseMCDplus[i]=0;
151  }
152 }
153 
154 //________________________________________________________________________
155 AliAnalysisTaskSEDs::AliAnalysisTaskSEDs(const char *name,AliRDHFCutsDstoKKpi* analysiscuts,Int_t fillNtuple):
156  AliAnalysisTaskSE(name),
157  fOutput(0),
158  fHistNEvents(0),
159  fHistoPtWeight(0x0),
160  fPtVsMass(0),
161  fPtVsMassPhi(0),
162  fPtVsMassK0st(0),
163  fYVsPt(0),
164  fYVsPtSig(0),
165  fHistAllV0multNTPCout(0),
166  fHistSelV0multNTPCout(0),
167  fCosPHist3D(0x0),
168  fCosPxyHist3D(0x0),
169  fDLenHist3D(0x0),
170  fDLenxyHist3D(0x0),
171  fNDLenxyHist3D(0x0),
172  fSigVertHist3D(0x0),
173  fDCAHist3D(0x0),
174  fNormIPHist3D(0x0),
175  fCosPiDsHist3D(0x0),
176  fCosPiKPhiHist3D(0x0),
177  fPtProng0Hist3D(0x0),
178  fPtProng1Hist3D(0x0),
179  fPtProng2Hist3D(0x0),
180  fNtupleDs(0),
181  fFillNtuple(fillNtuple),
182  fSystem(0),
183  fReadMC(kFALSE),
184  fWriteOnlySignal(kFALSE),
185  fDoCutVarHistos(kTRUE),
186  fUseSelectionBit(kFALSE),
187  fFillSparse(kTRUE),
188  fFillSparseDplus(kFALSE),
189  fFillImpParSparse(kFALSE),
190  fDoRotBkg(kTRUE),
191  fDoBkgPhiSB(kTRUE),
192  fDoCutV0multTPCout(kFALSE),
193  fUseWeight(kFALSE),
194  fUseTrkl(kFALSE),
195  fAODProtection(1),
196  fNPtBins(0),
197  fListCuts(0),
198  fMassRange(0.8),
199  fMassBinSize(0.002),
200  fminMass(1.6),
201  fmaxMass(2.5),
202  fMaxDeltaPhiMass4Rot(0.010),
203  fCounter(0),
204  fAnalysisCuts(analysiscuts),
205  fnSparse(0),
206  fnSparseIP(0),
207  fImpParSparse(0x0),
208  fImpParSparseMC(0x0)
209 {
212 
213  for(Int_t i=0;i<3;i++){
214  fHistCentrality[i]=0;
215  fHistCentralityMult[i]=0;
216  }
217  for(Int_t i=0;i<4;i++) {
218  fChanHist[i]=0;
219  }
220  for(Int_t i=0;i<4*kMaxPtBins;i++){
221  fPtCandHist[i]=0;
222  fMassHist[i]=0;
223  fMassHistPhi[i]=0;
224  fMassHistK0st[i]=0;
225  fCosPHist[i]=0;
226  fDLenHist[i]=0;
227  fSumd02Hist[i]=0;
228  fSigVertHist[i]=0;
229  fPtMaxHist[i]=0;
230  fDCAHist[i]=0;
231  fPtProng0Hist[i]=0;
232  fPtProng1Hist[i]=0;
233  fPtProng2Hist[i]=0;
234  fDalitz[i]=0;
235  fDalitzPhi[i]=0;
236  fDalitzK0st[i]=0;
237  }
238  for(Int_t i=0;i<kMaxPtBins;i++){
239  fMassHistKK[i]=0;
240  fMassHistKpi[i]=0;
241  fMassRotBkgHistPhi[i]=0;
242  fMassLSBkgHistPhi[i]=0;
243  fMassRSBkgHistPhi[i]=0;
244  }
245  for(Int_t i=0;i<kMaxPtBins+1;i++){
246  fPtLimits[i]=0;
247  }
248 
249  for (Int_t i=0; i<4; i++) {
250  fnSparseMC[i]=0;
251  fnSparseMCDplus[i]=0;
252  }
253 
256  SetPtBins(nptbins,ptlim);
257 
258  DefineOutput(1,TList::Class()); //My private output
259 
260  DefineOutput(2,TList::Class());
261 
262  DefineOutput(3,AliNormalizationCounter::Class());
263 
264  if(fFillNtuple>0){
265  // Output slot #4 writes into a TNtuple container
266  DefineOutput(4,TNtuple::Class()); //My private output
267  }
268 
269 }
270 
271 //________________________________________________________________________
274  if(n>kMaxPtBins){
275  printf("Max. number of Pt bins = %d\n",kMaxPtBins);
277  fPtLimits[0]=0.;
278  fPtLimits[1]=1.;
279  fPtLimits[2]=3.;
280  fPtLimits[3]=5.;
281  fPtLimits[4]=10.;
282  for(Int_t i=5; i<kMaxPtBins+1; i++) fPtLimits[i]=99999999.;
283  }else{
284  fNPtBins=n;
285  for(Int_t i=0; i<fNPtBins+1; i++) fPtLimits[i]=lim[i];
286  for(Int_t i=fNPtBins+1; i<kMaxPtBins+1; i++) fPtLimits[i]=99999999.;
287  }
288  if(fDebug > 1){
289  printf("Number of Pt bins = %d\n",fNPtBins);
290  for(Int_t i=0; i<fNPtBins; i++) printf(" Bin%d = %8.2f-%8.2f\n",i,fPtLimits[i],fPtLimits[i+1]);
291  }
292 }
293 //________________________________________________________________________
295 {
296  // Destructor
297  if(fOutput && !fOutput->IsOwner()){
298  delete fHistNEvents;
299  delete fHistAllV0multNTPCout;
300  delete fHistSelV0multNTPCout;
301  delete fCosPHist3D;
302  delete fCosPxyHist3D;
303  delete fDLenHist3D;
304  delete fDLenxyHist3D;
305  delete fNDLenxyHist3D;
306  delete fSigVertHist3D;
307  delete fDCAHist3D;
308  delete fNormIPHist3D;
309  delete fCosPiDsHist3D;
310  delete fCosPiKPhiHist3D;
311  delete fPtProng0Hist3D;
312  delete fPtProng1Hist3D;
313  delete fPtProng2Hist3D;
314 
315  for(Int_t i=0;i<4;i++){
316  delete fChanHist[i];
317  }
318  for(Int_t i=0;i<4*fNPtBins;i++){
319  delete fMassHist[i];
320  delete fMassHistPhi[i];
321  delete fMassHistK0st[i];
322  delete fCosPHist[i];
323  delete fDLenHist[i];
324  delete fSumd02Hist[i];
325  delete fSigVertHist[i];
326  delete fPtMaxHist[i];
327  delete fPtCandHist[i];
328  delete fDCAHist[i];
329  delete fPtProng0Hist[i];
330  delete fPtProng1Hist[i];
331  delete fPtProng2Hist[i];
332  delete fDalitz[i];
333  delete fDalitzPhi[i];
334  delete fDalitzK0st[i];
335  }
336  for(Int_t i=0;i<fNPtBins;i++){
337  delete fMassHistKK[i];
338  delete fMassHistKpi[i];
339  delete fMassRotBkgHistPhi[i];
340  delete fMassLSBkgHistPhi[i];
341  delete fMassRSBkgHistPhi[i];
342  }
343  delete fPtVsMass;
344  delete fPtVsMassPhi;
345  delete fPtVsMassK0st;
346  delete fYVsPt;
347  delete fYVsPtSig;
348  for(Int_t i=0;i<3;i++){
349  delete fHistCentrality[i];
350  delete fHistCentralityMult[i];
351  }
352 
353  delete fnSparse;
354  delete fnSparseIP;
355  if(fFillImpParSparse) {
356  delete fImpParSparse;
357  delete fImpParSparseMC;
358  }
359  for (Int_t i=0; i<4; i++) {
360  delete fnSparseMC[i];
361  if(fFillSparseDplus)delete fnSparseMCDplus[i];
362  }
363  }
364  if(fHistoPtWeight) delete fHistoPtWeight;
365  delete fOutput;
366  delete fListCuts;
367  delete fNtupleDs;
368  delete fCounter;
369  delete fAnalysisCuts;
370 
371 }
372 
373 //________________________________________________________________________
375 {
377 
378  if(fDebug > 1) printf("AnalysisTaskSEDs::Init() \n");
379 
380  fListCuts=new TList();
381  fListCuts->SetOwner();
382  fListCuts->SetName("CutObjects");
383 
385  analysis->SetName("AnalysisCuts");
386 
387  fListCuts->Add(analysis);
388  PostData(2,fListCuts);
389  return;
390 }
391 
392 //________________________________________________________________________
394 {
396  //
397  if(fDebug > 1) printf("AnalysisTaskSEDs::UserCreateOutputObjects() \n");
398 
399  // Several histograms are more conveniently managed in a TList
400  fOutput = new TList();
401  fOutput->SetOwner();
402  fOutput->SetName("OutputHistos");
403 
404  fHistNEvents = new TH1F("hNEvents", "number of events ",15,-0.5,14.5);
405  fHistNEvents->GetXaxis()->SetBinLabel(1,"nEventsRead");
406  fHistNEvents->GetXaxis()->SetBinLabel(2,"nEvents Matched dAOD");
407  fHistNEvents->GetXaxis()->SetBinLabel(3,"nEvents Mismatched dAOD");
408  fHistNEvents->GetXaxis()->SetBinLabel(4,"nEventsAnal");
409  fHistNEvents->GetXaxis()->SetBinLabel(5,"n. passing IsEvSelected");
410  fHistNEvents->GetXaxis()->SetBinLabel(6,"n. rejected due to trigger");
411  fHistNEvents->GetXaxis()->SetBinLabel(7,"n. rejected due to not reco vertex");
412  fHistNEvents->GetXaxis()->SetBinLabel(8,"n. rejected for contr vertex");
413  fHistNEvents->GetXaxis()->SetBinLabel(9,"n. rejected for vertex out of accept");
414  fHistNEvents->GetXaxis()->SetBinLabel(10,"n. rejected for pileup events");
415  fHistNEvents->GetXaxis()->SetBinLabel(11,"no. of out centrality events");
416  fHistNEvents->GetXaxis()->SetBinLabel(12,"no. of 3 prong candidates");
417  fHistNEvents->GetXaxis()->SetBinLabel(13,"no. of Ds after filtering cuts");
418  fHistNEvents->GetXaxis()->SetBinLabel(14,"no. of Ds after selection cuts");
419  fHistNEvents->GetXaxis()->SetBinLabel(15,"no. of not on-the-fly rec Ds");
420 
421  fHistNEvents->GetXaxis()->SetNdivisions(1,kFALSE);
422 
423  fHistNEvents->SetMinimum(0);
424  fOutput->Add(fHistNEvents);
425 
426  fHistCentrality[0]=new TH1F("hCentr","centrality",10000,0.,100.);
427  fHistCentrality[1]=new TH1F("hCentr(selectedCent)","centrality(selectedCent)",10000,0.,100.);
428  fHistCentrality[2]=new TH1F("hCentr(OutofCent)","centrality(OutofCent)",10000,0.,100.);
429  fHistCentralityMult[0]=new TH2F("hCentrMult","centrality vs mult",100,0.5,30000.5,40,0.,100.);
430  fHistCentralityMult[1]=new TH2F("hCentrMult(selectedCent)","centrality vs mult(selectedCent)",100,0.5,30000.5,40,0.,100.);
431  fHistCentralityMult[2]=new TH2F("hCentrMult(OutofCent)","centrality vs mult(OutofCent)",100,0.5,30000.5,40,0.,100.);
432  for(Int_t i=0;i<3;i++){
433  fOutput->Add(fHistCentrality[i]);
434  fOutput->Add(fHistCentralityMult[i]);
435  }
436  if(fDoCutV0multTPCout) {
437  fHistAllV0multNTPCout = new TH2F("HistAllV0multNTPCout", "V0mult vs # TPCout (all) ;V0mult ;# TPCout", 1000, 0., 40000, 1000, 0, 30000);
438  fHistSelV0multNTPCout = new TH2F("HistSelV0multNTPCout", "V0mult vs # TPCout (sel) ;V0mult ;# TPCout", 1000, 0., 40000, 1000, 0, 30000);
441  }
442 
443  Double_t massDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
444 
445  Int_t nInvMassBins=(Int_t)(fMassRange/fMassBinSize+0.5);
446  if(nInvMassBins%2==1) nInvMassBins++;
447  // Double_t minMass=massDs-1.0*nInvMassBins*fMassBinSize;
448  Double_t minMass=massDs-0.5*nInvMassBins*fMassBinSize;
449  // Double_t maxMass=massDs+1.0*nInvMassBins*fMassBinSize;
450  Double_t maxMass=massDs+0.5*nInvMassBins*fMassBinSize;
451  fminMass = minMass;
452  fmaxMass = maxMass;
453 
454  TString hisname;
455  TString htype;
456  Int_t index;
457  for(Int_t iType=0; iType<4; iType++){
458  for(Int_t i=0;i<fNPtBins;i++){
459  if(iType==0){
460  htype="All";
461  index=GetHistoIndex(i);
462  }else if(iType==1){
463  htype="Sig";
464  index=GetSignalHistoIndex(i);
465  }else if(iType==2){
466  htype="Bkg";
467  index=GetBackgroundHistoIndex(i);
468  }else{
469  htype="ReflSig";
470  index=GetReflSignalHistoIndex(i);
471  }
472  hisname.Form("hMass%sPt%d",htype.Data(),i);
473  fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
474  fMassHist[index]->Sumw2();
475  hisname.Form("hMass%sPt%dphi",htype.Data(),i);
476  fMassHistPhi[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
477  fMassHistPhi[index]->Sumw2();
478  hisname.Form("hMass%sPt%dk0st",htype.Data(),i);
479  fMassHistK0st[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
480  fMassHistK0st[index]->Sumw2();
481  hisname.Form("hCosP%sPt%d",htype.Data(),i);
482  fCosPHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
483  hisname.Form("hCosPxy%sPt%d",htype.Data(),i);
484  fCosPxyHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
485  hisname.Form("hDLen%sPt%d",htype.Data(),i);
486  fDLenHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.5);
487  hisname.Form("hDLenxy%sPt%d",htype.Data(),i);
488  fDLenxyHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.5);
489  hisname.Form("hNDLenxy%sPt%d",htype.Data(),i);
490  fNDLenxyHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,11.);
491  hisname.Form("hSumd02%sPt%d",htype.Data(),i);
492  fSumd02Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,1.);
493  hisname.Form("hSigVert%sPt%d",htype.Data(),i);
494  fSigVertHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
495  hisname.Form("hPtMax%sPt%d",htype.Data(),i);
496  fPtMaxHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,20.);
497  hisname.Form("hPtCand%sPt%d",htype.Data(),i);
498  fPtCandHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,20.);
499  hisname.Form("hDCA%sPt%d",htype.Data(),i);
500  fDCAHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
501  hisname.Form("hNormIP%sPt%d",htype.Data(),i);
502  fNormIPHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,6.);
503  hisname.Form("hCosPiDs%sPt%d",htype.Data(),i);
504  fCosPiDsHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
505  hisname.Form("hCosPiKPhi%sPt%d",htype.Data(),i);
506  fCosPiKPhiHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.5);
507  hisname.Form("hPtProng0%sPt%d",htype.Data(),i);
508  fPtProng0Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.0,20.);
509  hisname.Form("hPtProng1%sPt%d",htype.Data(),i);
510  fPtProng1Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.0,20.);
511  hisname.Form("hPtProng2%sPt%d",htype.Data(),i);
512  fPtProng2Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.0,20.);
513  hisname.Form("hDalitz%sPt%d",htype.Data(),i);
514  fDalitz[index]=new TH2F(hisname.Data(),hisname.Data(),100,0.,2.,100,0.,2.);
515  hisname.Form("hDalitz%sPt%dphi",htype.Data(),i);
516  fDalitzPhi[index]=new TH2F(hisname.Data(),hisname.Data(),100,0.,2.,100,0.,2.);
517  hisname.Form("hDalitz%sPt%dk0st",htype.Data(),i);
518  fDalitzK0st[index]=new TH2F(hisname.Data(),hisname.Data(),100,0.,2.,100,0.,2.);
519  }
520  }
521 
522  for(Int_t i=0; i<4*fNPtBins; i++){
523  fOutput->Add(fMassHist[i]);
524  fOutput->Add(fMassHistPhi[i]);
525  fOutput->Add(fMassHistK0st[i]);
526  fOutput->Add(fPtCandHist[i]);
527  if(fDoCutVarHistos){
528  fOutput->Add(fCosPHist[i]);
529  fOutput->Add(fCosPxyHist[i]);
530  fOutput->Add(fDLenHist[i]);
531  fOutput->Add(fDLenxyHist[i]);
532  fOutput->Add(fNDLenxyHist[i]);
533  fOutput->Add(fSumd02Hist[i]);
534  fOutput->Add(fSigVertHist[i]);
535  fOutput->Add(fPtMaxHist[i]);
536  fOutput->Add(fDCAHist[i]);
537  fOutput->Add(fNormIPHist[i]);
538  fOutput->Add(fCosPiDsHist[i]);
539  fOutput->Add(fCosPiKPhiHist[i]);
540  fOutput->Add(fPtProng0Hist[i]);
541  fOutput->Add(fPtProng1Hist[i]);
542  fOutput->Add(fPtProng2Hist[i]);
543  fOutput->Add(fDalitz[i]);
544  fOutput->Add(fDalitzPhi[i]);
545  fOutput->Add(fDalitzK0st[i]);
546  }
547  }
548 
549  fChanHist[0] = new TH1F("hChanAll", "KKpi and piKK candidates",64,-0.5,63.5);
550  fChanHist[1] = new TH1F("hChanSig", "KKpi and piKK candidates",64,-0.5,63.5);
551  fChanHist[2] = new TH1F("hChanBkg", "KKpi and piKK candidates",64,-0.5,63.5);
552  fChanHist[3] = new TH1F("hChanReflSig", "KKpi and piKK candidates",64,-0.5,63.5);
553  for(Int_t i=0;i<4;i++){
554  fChanHist[i]->SetMinimum(0);
555  fOutput->Add(fChanHist[i]);
556  }
557 
558  fCosPHist3D = new TH3F("fCosPHist3D","CosP vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.5,1.);
559  fCosPxyHist3D = new TH3F("fCosPxyHist3D","CosPxy vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.5,1.);
560  fDLenHist3D = new TH3F("fDLenHist3D","DLen vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,0.5);
561  fDLenxyHist3D = new TH3F("fDLenxyHist3D","DLenxy vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,0.5);
562  fNDLenxyHist3D = new TH3F("fNDLenxyHist3D","NDLenxy vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,11.);
563  fSigVertHist3D = new TH3F("fSigVertHist3D","SigVert vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,0.1);
564  fDCAHist3D = new TH3F("fDCAHist3D","DCA vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,0.1);
565  fNormIPHist3D = new TH3F("fNormIPHist3D","nIP vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,6.);
566  fCosPiDsHist3D = new TH3F("fCosPiDsHist3D","CosPiDs vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.5,1.);
567  fCosPiKPhiHist3D = new TH3F("fCosPiKPhiHist3D","CosPiKPhi vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,0.5);
568  fPtProng0Hist3D = new TH3F("fPtProng0Hist3D","Pt prong0 vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.0,20.);
569  fPtProng1Hist3D = new TH3F("fPtProng1Hist3D","Pt prong1 vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.0,20.);
570  fPtProng2Hist3D = new TH3F("fPtProng2Hist3D","Pt prong2 vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.0,20.);
571 
572  if(!fReadMC && fDoCutVarHistos) {
573  fOutput->Add(fCosPHist3D);
574  fOutput->Add(fCosPxyHist3D);
575  fOutput->Add(fDLenHist3D);
576  fOutput->Add(fDLenxyHist3D);
577  fOutput->Add(fNDLenxyHist3D);
578  fOutput->Add(fSigVertHist3D);
579  fOutput->Add(fDCAHist3D);
580  fOutput->Add(fNormIPHist3D);
581  fOutput->Add(fCosPiDsHist3D);
583  fOutput->Add(fPtProng0Hist3D);
584  fOutput->Add(fPtProng1Hist3D);
585  fOutput->Add(fPtProng2Hist3D);
586  }
587 
588  fPtVsMass=new TH2F("hPtVsMass","PtVsMass (prod. cuts)",nInvMassBins,minMass,maxMass,40,0.,20.);
589  fPtVsMassPhi=new TH2F("hPtVsMassPhi","PtVsMass (phi selection)",nInvMassBins,minMass,maxMass,200,0.,20.);
590  fPtVsMassK0st=new TH2F("hPtVsMassK0st","PtVsMass (K0* selection)",nInvMassBins,minMass,maxMass,200,0.,20.);
591  fYVsPt=new TH2F("hYVsPt","YvsPt (prod. cuts)",40,0.,20.,80,-2.,2.);
592  fYVsPtSig=new TH2F("hYVsPtSig","YvsPt (MC, only sig., prod. cuts)",40,0.,20.,80,-2.,2.);
593 
594  for(Int_t i=0;i<fNPtBins;i++){
595  hisname.Form("hMassKKPt%d",i);
596  fMassHistKK[i]=new TH1F(hisname.Data(),hisname.Data(),200,0.95,1.35);
597  fMassHistKK[i]->Sumw2();
598  fOutput->Add(fMassHistKK[i]);
599  hisname.Form("hMassKpiPt%d",i);
600  fMassHistKpi[i]=new TH1F(hisname.Data(),hisname.Data(),200,0.7,1.1);
601  fMassHistKpi[i]->Sumw2();
602  fOutput->Add(fMassHistKpi[i]);
603  if(fDoRotBkg) {
604  hisname.Form("hMassAllPt%dphi_RotBkg",i);
605  fMassRotBkgHistPhi[i]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
606  fMassRotBkgHistPhi[i]->Sumw2();
607  fOutput->Add(fMassRotBkgHistPhi[i]);
608  }
609  if(fDoBkgPhiSB) {
610  hisname.Form("fMassLSBkgHistPhiPt%d",i);
611  fMassLSBkgHistPhi[i]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
612  fMassLSBkgHistPhi[i]->Sumw2();
613  fOutput->Add(fMassLSBkgHistPhi[i]);
614  hisname.Form("fMassRSBkgHistPhiPt%d",i);
615  fMassRSBkgHistPhi[i]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
616  fMassRSBkgHistPhi[i]->Sumw2();
617  fOutput->Add(fMassRSBkgHistPhi[i]);
618  }
619  }
620 
621  fOutput->Add(fPtVsMass);
622  fOutput->Add(fPtVsMassPhi);
623  fOutput->Add(fPtVsMassK0st);
624  fOutput->Add(fYVsPt);
625  fOutput->Add(fYVsPtSig);
626 
627  nInvMassBins=(Int_t)(0.7/fMassBinSize+0.5);
628  minMass=massDs-0.5*nInvMassBins*fMassBinSize;
629  maxMass=massDs+0.5*nInvMassBins*fMassBinSize;
630 
631  Int_t nTrklBins = 1;
632  if(fUseTrkl) nTrklBins = 300;
633 
634  Int_t nBinsReco[knVarForSparse] = {nInvMassBins, 20, 30, 14, 14, 20, 10, 10, 14, 6, 6, 12, nTrklBins};
635  Double_t xminReco[knVarForSparse] = {minMass, 0., 0., 0., 0., 0., 90., 90., 0., 7., 0., 0., 1.};
636  Double_t xmaxReco[knVarForSparse] = {maxMass, 20., 15, 70., 70., 10., 100., 100., 70., 10., 3., 6., 301.};
637  TString axis[knVarForSparse] = {"invMassDsAllPhi","p_{T}","#Delta Mass(KK)","dlen","dlen_{xy}","normdl_{xy}","cosP","cosP_{xy}","sigVert","cosPiDs","|cosPiKPhi^{3}|","normIP","N tracklets"};
638  if(fSystem == 1) { //pPb,PbPb
639  nInvMassBins=(Int_t)(0.45/fMassBinSize+0.5);
640  minMass=massDs-0.5*nInvMassBins*fMassBinSize;
641  maxMass=massDs+0.5*nInvMassBins*fMassBinSize;
642  nBinsReco[0] = nInvMassBins; //Ds mass
643  xminReco[0] = minMass;
644  xmaxReco[0] = maxMass;
645 
646  nBinsReco[1] = 16; //pt
647  xminReco[1] = 0.;
648  xmaxReco[1] = 16.;
649 
650  nBinsReco[2] = 12; //#Delta Mass(KK)
651  xmaxReco[2] = 12.;
652 
653  nBinsReco[3] = 7; //dlen
654  nBinsReco[4] = 7; //dlenxy
655  nBinsReco[5] = 10; //ndlenxy
656 
657  nBinsReco[6] = 6; //cosP
658  xminReco[6] = 97.;
659  xmaxReco[6] = 100.;
660 
661  nBinsReco[7] = 6; //cosPxy
662  xminReco[7] = 97.;
663  xmaxReco[7] = 100.;
664  }
665 
666  Int_t nBinsAcc[knVarForSparseAcc] = {20, 20};
667  Double_t xminAcc[knVarForSparseAcc] = {0., -10.};
668  Double_t xmaxAcc[knVarForSparseAcc] = {20, 10.};
669 
670  Int_t nBinsIP[knVarForSparseIP] = { 20, 400, 400, 400, 400, 3};
671  Double_t xminIP[knVarForSparseIP] = { 0., -10., -10., -10., -10., 0.};
672  Double_t xmaxIP[knVarForSparseIP] = {20., 10., 10., 10., 10., 3.};
673  TString axisIP[knVarForSparseIP] = {"motherPt","maxNormImp","IP0","IP1","IP2","candType"};
674 
675  if(fFillSparse) {
676 
677  if(fReadMC) {
678  TString label[knVarForSparseAcc] = {"fromC","fromB"};
679  for (Int_t i=0; i<2; i++) {
680  fnSparseMC[i] = new THnSparseF(Form("fnSparseAcc_%s",label[i].Data()),Form("MC nSparse (Acc.Step)- %s",label[i].Data()),
681  knVarForSparseAcc, nBinsAcc, xminAcc, xmaxAcc);
682  fnSparseMC[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
683  fnSparseMC[i]->GetAxis(1)->SetTitle("y");
684  fOutput->Add(fnSparseMC[i]);
685 
686  //Dplus
687  if(fFillSparseDplus) {
688  fnSparseMCDplus[i] = new THnSparseF(Form("fnSparseAccDplus_%s",label[i].Data()),Form("MC nSparse D^{+} (Acc.Step)- %s",label[i].Data()),
689  knVarForSparseAcc, nBinsAcc, xminAcc, xmaxAcc);
690  fnSparseMCDplus[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
691  fnSparseMCDplus[i]->GetAxis(1)->SetTitle("y");
692  fOutput->Add(fnSparseMCDplus[i]);
693  }
694  }
695  for (Int_t i=2; i<4; i++) {
696  fnSparseMC[i] = new THnSparseF(Form("fnSparseReco_%s",label[i-2].Data()),Form("MC nSparse (Reco Step)- %s",label[i-2].Data()),
697  knVarForSparse, nBinsReco, xminReco, xmaxReco);
698  for (Int_t j=0; j<knVarForSparse; j++) {
699  fnSparseMC[i]->GetAxis(j)->SetTitle(Form("%s",axis[j].Data()));
700  }
701  fOutput->Add(fnSparseMC[i]);
702 
703  //Dplus
704  if(fFillSparseDplus) {
705  fnSparseMCDplus[i] = new THnSparseF(Form("fnSparseRecoDplus_%s",label[i-2].Data()),Form("MC nSparse D^{+} (Reco Step)- %s",label[i-2].Data()),
706  knVarForSparse, nBinsReco, xminReco, xmaxReco);
707  for (Int_t j=0; j<knVarForSparse; j++) {
708  fnSparseMCDplus[i]->GetAxis(j)->SetTitle(Form("%s",axis[j].Data()));
709  }
710  fOutput->Add(fnSparseMCDplus[i]);
711  }
712  }
713 
714  fnSparseIP = new THnSparseF("fnSparseIP","nSparseIP", knVarForSparseIP, nBinsIP, xminIP, xmaxIP);
715  for (Int_t j=0; j<knVarForSparseIP; j++) {
716  fnSparseIP->GetAxis(j)->SetTitle(Form("%s",axisIP[j].Data()));
717  }
718  fnSparseIP->GetAxis(5)->SetTitle("candType (0.5=bkg; 1.5=prompt; 2.5=FD)");
719  fOutput->Add(fnSparseIP);
720  }
721  else {
722  fnSparse = new THnSparseF("fnSparse","nSparse", knVarForSparse, nBinsReco, xminReco, xmaxReco);
723  for (Int_t j=0; j<knVarForSparse; j++) {
724  fnSparse->GetAxis(j)->SetTitle(Form("%s",axis[j].Data()));
725  }
726  fOutput->Add(fnSparse);
727  }
728  }
729 
730  if(fFillImpParSparse) {
731  Int_t nBinsImpPar[3] = { 20, 200, 350};
732  Double_t xminImpPar[3] = { 0., 0., 1.6};
733  Double_t xmaxImpPar[3] = {20., 1000., 2.3};
734  TString axisImpPar[3] = {"Pt","imp.par. (#mum)","invMassDsAllPhi"};
735  if(!fReadMC) {
736  fImpParSparse = new THnSparseF("fImpParSparse","ImpParSparse", 3, nBinsImpPar, xminImpPar, xmaxImpPar);
737  for (Int_t j=0; j<3; j++) {
738  fImpParSparse->GetAxis(j)->SetTitle(Form("%s",axisImpPar[j].Data()));
739  }
740  fOutput->Add(fImpParSparse);
741  }
742  else {
743  nBinsImpPar[2] = 3;
744  xminImpPar[2] = 0.;
745  xmaxImpPar[2] = 3.;
746  axisImpPar[2] = "candType (0.5=bkg; 1.5=prompt; 2.5=FD)";
747  fImpParSparseMC = new THnSparseF("fImpParSparseMC","ImpParSparseMC", 3, nBinsImpPar, xminImpPar, xmaxImpPar);
748  for (Int_t j=0; j<3; j++) {
749  fImpParSparseMC->GetAxis(j)->SetTitle(Form("%s",axisImpPar[j].Data()));
750  }
751  fOutput->Add(fImpParSparseMC);
752  }
753  }
754 
755  //Counter for Normalization
756  fCounter = new AliNormalizationCounter("NormalizationCounter");
757  fCounter->Init();
758 
759  PostData(1,fOutput);
760  PostData(3,fCounter);
761 
762  if(fFillNtuple>0){
763  OpenFile(4); // 4 is the slot number of the ntuple
764 
765  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");
766 
767  }
768 
769 
770  return;
771 }
772 
773 //________________________________________________________________________
775 {
778 
779  AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
780 
781  fHistNEvents->Fill(0); // all events
782  if(fAODProtection>=0){
783  // Protection against different number of events in the AOD and deltaAOD
784  // In case of discrepancy the event is rejected.
785  Int_t matchingAODdeltaAODlevel = AliRDHFCuts::CheckMatchingAODdeltaAODevents();
786  if (matchingAODdeltaAODlevel<0 || (matchingAODdeltaAODlevel==0 && fAODProtection==1)) {
787  // AOD/deltaAOD trees have different number of entries || TProcessID do not match while it was required
788  fHistNEvents->Fill(2);
789  return;
790  }
791  fHistNEvents->Fill(1);
792  }
793 
794  TClonesArray *array3Prong = 0;
795  if(!aod && AODEvent() && IsStandardAOD()) {
796  // In case there is an AOD handler writing a standard AOD, use the AOD
797  // event in memory rather than the input (ESD) event.
798  aod = dynamic_cast<AliAODEvent*> (AODEvent());
799  // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
800  // have to taken from the AOD event hold by the AliAODExtension
801  AliAODHandler* aodHandler = (AliAODHandler*)
802  ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
803  if(aodHandler->GetExtensions()) {
804  AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
805  AliAODEvent *aodFromExt = ext->GetAOD();
806  array3Prong=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong");
807  }
808  } else if(aod) {
809  array3Prong=(TClonesArray*)aod->GetList()->FindObject("Charm3Prong");
810  }
811 
812  if(!aod || !array3Prong) {
813  printf("AliAnalysisTaskSEDs::UserExec: Charm3Prong branch not found!\n");
814  return;
815  }
816 
817 
818  // fix for temporary bug in ESDfilter
819  // the AODs with null vertex pointer didn't pass the PhysSel
820  if(!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001) return;
821 
822 
823 
824  fHistNEvents->Fill(3); // count event
825  // Post the data already here
826  PostData(1,fOutput);
827 
829 
830 
831  Bool_t isEvSel=fAnalysisCuts->IsEventSelected(aod);
832  Float_t ntracks=aod->GetNumberOfTracks();
833  Float_t evCentr=fAnalysisCuts->GetCentrality(aod);
834 
835  fHistCentrality[0]->Fill(evCentr);
836  fHistCentralityMult[0]->Fill(ntracks,evCentr);
843  fHistNEvents->Fill(10);
844  fHistCentrality[2]->Fill(evCentr);
845  fHistCentralityMult[2]->Fill(ntracks,evCentr);
846  }
847 
849  Int_t runNumber=aod->GetRunNumber();
850 
851 
852 
853  TClonesArray *arrayMC=0;
854  AliAODMCHeader *mcHeader=0;
855 
856  // AOD primary vertex
857  AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
858  // vtx1->Print();
859 
860  // load MC particles
861  if(fReadMC){
862 
863  arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
864  if(!arrayMC) {
865  printf("AliAnalysisTaskSEDs::UserExec: MC particles branch not found!\n");
866  return;
867  }
868 
869  // load MC header
870  mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
871  if(!mcHeader) {
872  printf("AliAnalysisTaskSEDs::UserExec: MC header branch not found!\n");
873  return;
874  }
875  }
876 
877 
878  if(fReadMC && fFillSparse){
879  if(aod->GetTriggerMask()==0 && (runNumber>=195344 && runNumber<=195677))
880  // protection for events with empty trigger mask in p-Pb
881  return;
883  // events not passing the centrality selection can be removed immediately.
884  return;
885  Double_t zMCVertex = mcHeader->GetVtxZ();
886  if (TMath::Abs(zMCVertex) > fAnalysisCuts->GetMaxVtxZ())
887  return;
888  FillMCGenAccHistos(arrayMC, mcHeader);
889  }
890 
891  if(!isEvSel)return;
892 
893  fHistNEvents->Fill(4);
894  fHistCentrality[1]->Fill(evCentr);
895  fHistCentralityMult[1]->Fill(ntracks,evCentr);
896 
897  if(fDoCutV0multTPCout) {
898  //cut on V0mult. vs #tracks kTPCout
899  Float_t V0mult=0.;
900  AliAODVZERO *aodVZERO = (AliAODVZERO*)aod->GetVZEROData();
901  if(aodVZERO) {
902  for(int ich=0; ich<64;ich++) V0mult += aodVZERO->GetMultiplicity(ich);
903  }
904  Int_t nTPCout=0;
905  for (Int_t i=0;i<aod->GetNumberOfTracks();++i) {
906  AliVTrack *track = aod->GetTrack(i);
907  if (!track) continue;
908  if((track->GetStatus() & AliVTrack::kTPCout)) nTPCout++;
909  }
910  fHistAllV0multNTPCout->Fill(V0mult,nTPCout);
911  if(nTPCout > (0.32*V0mult+750)) return;
912  else fHistSelV0multNTPCout->Fill(V0mult,nTPCout);
913  }
914 
915  Int_t n3Prong = array3Prong->GetEntriesFast();
916  if(fDebug>1) printf("Number of Ds->KKpi: %d\n",n3Prong);
917 
918  Int_t pdgDstoKKpi[3]={321,321,211};
919  Int_t nSelected=0;
920  Int_t nFiltered=0;
921  Double_t massPhi=TDatabasePDG::Instance()->GetParticle(333)->Mass();
922 
923  // vHF object is needed to call the method that refills the missing info of the candidates
924  // if they have been deleted in dAOD reconstruction phase
925  // in order to reduce the size of the file
927 
928  for (Int_t i3Prong = 0; i3Prong < n3Prong; i3Prong++) {
929 
930 
931  AliAODRecoDecayHF3Prong *d = (AliAODRecoDecayHF3Prong*)array3Prong->UncheckedAt(i3Prong);
932  fHistNEvents->Fill(11);
933 
935  continue;
936  }
937  nFiltered++;
938  fHistNEvents->Fill(12);
939 
940  if(!(vHF->FillRecoCand(aod,d))) {
941  fHistNEvents->Fill(14); //monitor how often this fails
942  continue;
943  }
944 
945  Bool_t unsetvtx=kFALSE;
946  if(!d->GetOwnPrimaryVtx()){
947  d->SetOwnPrimaryVtx(vtx1);
948  unsetvtx=kTRUE;
949  // NOTE: the ow primary vertex should be unset, otherwise there is a memory leak
950  // Pay attention if you use continue inside this loop!!!
951  }
952 
953  Bool_t recVtx=kFALSE;
954  AliAODVertex *origownvtx=0x0;
955 
956  Double_t ptCand = d->Pt();
957  Int_t iPtBin=TMath::BinarySearch(fNPtBins,fPtLimits,(Float_t)ptCand);
958  Double_t rapid=d->YDs();
959  fYVsPt->Fill(ptCand,rapid);
960  Bool_t isFidAcc=fAnalysisCuts->IsInFiducialAcceptance(ptCand,rapid);
961 
962  if(isFidAcc){
963 
964  Int_t retCodeAnalysisCuts=fAnalysisCuts->IsSelected(d,AliRDHFCuts::kAll,aod);
965  Int_t retCodeNoRes=retCodeAnalysisCuts;
967  if(origRes){
969  retCodeNoRes=fAnalysisCuts->IsSelected(d,AliRDHFCuts::kAll,aod);
971  }
972  Double_t massKK = 0.;
973 
974  if(retCodeNoRes&1){ //KKpi
975  massKK=d->InvMass2Prongs(0,1,321,321);
976  Double_t massKp=d->InvMass2Prongs(1,2,321,211);
977  fMassHistKK[iPtBin]->Fill(massKK);
978  fMassHistKpi[iPtBin]->Fill(massKp);
979  }
980  if(retCodeNoRes&2){ //piKK
981  massKK=d->InvMass2Prongs(1,2,321,321);
982  Double_t massKp=d->InvMass2Prongs(0,1,211,321);
983  fMassHistKK[iPtBin]->Fill(massKK);
984  fMassHistKpi[iPtBin]->Fill(massKp);
985  }
986 
987  Int_t isKKpi=retCodeAnalysisCuts&1;
988  Int_t ispiKK=retCodeAnalysisCuts&2;
989  Int_t isPhiKKpi=retCodeAnalysisCuts&4;
990  Int_t isPhipiKK=retCodeAnalysisCuts&8;
991  Int_t isK0starKKpi=retCodeAnalysisCuts&16;
992  Int_t isK0starpiKK=retCodeAnalysisCuts&32;
993 
994  if(retCodeAnalysisCuts>0){
996  if(d->GetOwnPrimaryVtx()) origownvtx=new AliAODVertex(*d->GetOwnPrimaryVtx());
997  if(fAnalysisCuts->RecalcOwnPrimaryVtx(d,aod))recVtx=kTRUE;
998  else fAnalysisCuts->CleanOwnPrimaryVtx(d,aod,origownvtx);
999  }
1000 
1001 
1002  fHistNEvents->Fill(13);
1003  nSelected++;
1004 
1005  Int_t index=GetHistoIndex(iPtBin);
1006  fPtCandHist[index]->Fill(ptCand);
1007 
1008 
1009  Double_t weightKKpi=1.;
1010  Double_t weightpiKK=1.;
1012  weightKKpi=fAnalysisCuts->GetWeightForKKpi();
1013  weightpiKK=fAnalysisCuts->GetWeightForpiKK();
1014  if(weightKKpi>1. || weightKKpi<0.) weightKKpi=0.;
1015  if(weightpiKK>1. || weightpiKK<0.) weightpiKK=0.;
1016  }
1017 
1018  fChanHist[0]->Fill(retCodeAnalysisCuts);
1019 
1020 
1021  Double_t invMass = 0.;
1022  Int_t indexMCKKpi=-1;
1023  Int_t indexMCpiKK=-1;
1024  Int_t labDs=-1;
1025  Int_t labDplus=-1;
1026  Int_t pdgCode0=-999;
1027  Int_t isMCSignal=-1;
1028 
1029 
1030  if(fReadMC){
1031 
1032  labDs = d->MatchToMC(431,arrayMC,3,pdgDstoKKpi);
1033  labDplus = d->MatchToMC(411,arrayMC,3,pdgDstoKKpi);
1034  if(labDs>=0){
1035  Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
1036  AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(TMath::Abs(labDau0));
1037  pdgCode0=TMath::Abs(p->GetPdgCode());
1038 
1039  if(isKKpi){
1040  if(pdgCode0==321) {
1041  indexMCKKpi=GetSignalHistoIndex(iPtBin);
1042  fYVsPtSig->Fill(ptCand,rapid);
1043  fChanHist[1]->Fill(retCodeAnalysisCuts);
1044  isMCSignal=1;
1045  }else{
1046  indexMCKKpi=GetReflSignalHistoIndex(iPtBin);
1047  fChanHist[3]->Fill(retCodeAnalysisCuts);
1048  isMCSignal=0;
1049  }
1050  }
1051  if(ispiKK){
1052  if(pdgCode0==211) {
1053  indexMCpiKK=GetSignalHistoIndex(iPtBin);
1054  fYVsPtSig->Fill(ptCand,rapid);
1055  fChanHist[1]->Fill(retCodeAnalysisCuts);
1056  isMCSignal=1;
1057  }else{
1058  indexMCpiKK=GetReflSignalHistoIndex(iPtBin);
1059  fChanHist[3]->Fill(retCodeAnalysisCuts);
1060  isMCSignal=0;
1061  }
1062  }
1063  }else{
1064  indexMCpiKK=GetBackgroundHistoIndex(iPtBin);
1065  indexMCKKpi=GetBackgroundHistoIndex(iPtBin);
1066  fChanHist[2]->Fill(retCodeAnalysisCuts);
1067  if(labDplus>=0) {
1068  Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
1069  AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(TMath::Abs(labDau0));
1070  pdgCode0=TMath::Abs(p->GetPdgCode());
1071  }
1072  }
1073  }
1074 
1075  Double_t candType = 0.5; //for bkg
1076  Double_t massPhi=TDatabasePDG::Instance()->GetParticle(333)->Mass();
1077 
1078  if(isKKpi){
1079  if(fDoRotBkg && TMath::Abs(massKK-massPhi)<=fMaxDeltaPhiMass4Rot)GenerateRotBkg(d,1,iPtBin);
1080 
1081  invMass=d->InvMassDsKKpi();
1082  fMassHist[index]->Fill(invMass,weightKKpi);
1083  fPtVsMass->Fill(invMass,ptCand,weightKKpi);
1084 
1085  if(fDoBkgPhiSB && 0.010<TMath::Abs(massKK-massPhi)<0.030) {
1086  if(massKK<massPhi)fMassLSBkgHistPhi[iPtBin]->Fill(invMass);
1087  else fMassRSBkgHistPhi[iPtBin]->Fill(invMass);
1088  }
1089 
1090  if(isPhiKKpi){
1091  fMassHistPhi[index]->Fill(invMass,weightKKpi);
1092  fPtVsMassPhi->Fill(invMass,ptCand,weightKKpi);
1093  }
1094  if(isK0starKKpi){
1095  fMassHistK0st[index]->Fill(invMass,weightKKpi);
1096  fPtVsMassK0st->Fill(invMass,ptCand,weightKKpi);
1097  }
1098  if(fReadMC && indexMCKKpi!=-1){
1099  fMassHist[indexMCKKpi]->Fill(invMass,weightKKpi);
1100  if(isPhiKKpi) {
1101  fMassHistPhi[indexMCKKpi]->Fill(invMass,weightKKpi);
1102  if(fFillSparse) {
1103  if(indexMCKKpi==GetSignalHistoIndex(iPtBin) || labDplus >= 0) {
1104  AliAODMCParticle *partDs;
1105  if(indexMCKKpi==GetSignalHistoIndex(iPtBin)) partDs = (AliAODMCParticle*)arrayMC->At(labDs);
1106  if(labDplus >= 0) partDs = (AliAODMCParticle*)arrayMC->At(labDplus);
1107  Int_t orig = AliVertexingHFUtils::CheckOrigin(arrayMC,partDs,kTRUE);
1108  if(orig==4) {
1109  candType = 1.5;
1110  }
1111  if(orig==5) {
1112  candType = 2.5;
1113  }
1114  }
1115  }
1116  }
1117  if(isK0starKKpi) fMassHistK0st[indexMCKKpi]->Fill(invMass,weightKKpi);
1118  }
1119  if(isPhiKKpi && fFillImpParSparse) {
1120  Double_t impParxy = d->ImpParXY()*10000.;
1121  if(!fReadMC) {
1122  Double_t array4ImpPar[3] = {ptCand,impParxy,invMass};
1123  fImpParSparse->Fill(array4ImpPar);
1124  }
1125  else {
1126  Double_t array4ImpPar[3] = {ptCand,impParxy,candType};
1127  fImpParSparseMC->Fill(array4ImpPar);
1128  }
1129  }
1130  }
1131  if(ispiKK){
1132  if(fDoRotBkg && TMath::Abs(massKK-massPhi)<=fMaxDeltaPhiMass4Rot)GenerateRotBkg(d,2,iPtBin);
1133 
1134  invMass=d->InvMassDspiKK();
1135  fMassHist[index]->Fill(invMass,weightpiKK);
1136  fPtVsMass->Fill(invMass,ptCand,weightpiKK);
1137 
1138  if(fDoBkgPhiSB && 0.010<TMath::Abs(massKK-massPhi)<0.030) {
1139  if(massKK<massPhi)fMassLSBkgHistPhi[iPtBin]->Fill(invMass);
1140  else fMassRSBkgHistPhi[iPtBin]->Fill(invMass);
1141  }
1142 
1143  if(isPhipiKK){
1144  fMassHistPhi[index]->Fill(invMass,weightpiKK);
1145  fPtVsMassPhi->Fill(invMass,ptCand,weightpiKK);
1146  }
1147  if(isK0starpiKK){
1148  fMassHistK0st[index]->Fill(invMass,weightpiKK);
1149  fPtVsMassK0st->Fill(invMass,ptCand,weightpiKK);
1150  }
1151  if(fReadMC && indexMCpiKK!=-1){
1152  fMassHist[indexMCpiKK]->Fill(invMass,weightpiKK);
1153  if(isPhipiKK) {
1154  fMassHistPhi[indexMCpiKK]->Fill(invMass,weightpiKK);
1155  if(fFillSparse) {
1156  if(indexMCpiKK==GetSignalHistoIndex(iPtBin) || labDplus >= 0) {
1157  AliAODMCParticle *partDs;
1158  if(indexMCpiKK==GetSignalHistoIndex(iPtBin)) partDs = (AliAODMCParticle*)arrayMC->At(labDs);
1159  if(labDplus >= 0) partDs = (AliAODMCParticle*)arrayMC->At(labDplus);
1160  Int_t orig = AliVertexingHFUtils::CheckOrigin(arrayMC,partDs,kTRUE);
1161  if(orig==4) {
1162  candType = 1.5;
1163  }
1164  if(orig==5) {
1165  candType = 2.5;
1166  }
1167  }
1168  }
1169  }
1170  if(isK0starpiKK) fMassHistK0st[indexMCpiKK]->Fill(invMass,weightpiKK);
1171  }
1172  if(isPhipiKK && fFillImpParSparse) {
1173  Double_t impParxy = d->ImpParXY()*10000.;
1174  if(!fReadMC) {
1175  Double_t array4ImpPar[3] = {ptCand,impParxy,invMass};
1176  fImpParSparse->Fill(array4ImpPar);
1177  }
1178  else {
1179  Double_t array4ImpPar[3] = {ptCand,impParxy,candType};
1180  fImpParSparseMC->Fill(array4ImpPar);
1181  }
1182  }
1183  }
1184 
1185 
1187 
1188  const Int_t nProng = 3;
1189  Double_t deltaMassKK=999.;
1190  Double_t dlen=d->DecayLength();
1191  Double_t dlenxy=d->DecayLengthXY();
1192  Double_t normdl=d->NormalizedDecayLength();
1193  Double_t normdlxy=d->NormalizedDecayLengthXY();
1194  Double_t cosp=d->CosPointingAngle();
1195  Double_t cospxy=d->CosPointingAngleXY();
1196  Double_t pt0=d->PtProng(0);
1197  Double_t pt1=d->PtProng(1);
1198  Double_t pt2=d->PtProng(2);
1199  Double_t sigvert=d->GetSigmaVert();
1200  Double_t cosPiDs=-99.;
1201  Double_t cosPiKPhi=-99.;
1202  Double_t normIP; //to store the maximum topomatic var. among the 3 prongs
1203  Double_t normIPprong[nProng]; //to store IP of k,k,pi
1205 
1206  Double_t ptWeight = 1.;
1207  if(fFillSparse) {
1208  if (fUseWeight && fHistoPtWeight){
1209  AliDebug(2,"Using Histogram as Pt weight function");
1210  ptWeight = GetPtWeightFromHistogram(ptCand);
1211  }
1212  if(isPhiKKpi) {
1213  Double_t tmpNormIP[nProng];
1214 
1215  invMass = d->InvMassDsKKpi();
1216  massKK = d->InvMass2Prongs(0,1,321,321);
1217  deltaMassKK = TMath::Abs(massKK-massPhi);
1218  cosPiDs = d->CosPiDsLabFrameKKpi();
1219  cosPiKPhi = d->CosPiKPhiRFrameKKpi();
1220  cosPiKPhi = TMath::Abs(cosPiKPhi*cosPiKPhi*cosPiKPhi);
1221 
1222  for(Int_t ip=0; ip<nProng; ip++) {
1223  Double_t diffIP, errdiffIP;
1224  d->Getd0MeasMinusExpProng(ip,aod->GetMagneticField(),diffIP,errdiffIP);
1225  tmpNormIP[ip] = diffIP/errdiffIP;
1226  if(ip==0) normIP = tmpNormIP[ip];
1227  else if(TMath::Abs(tmpNormIP[ip])>TMath::Abs(normIP)) normIP = tmpNormIP[ip];
1228  }
1229  normIPprong[0] = tmpNormIP[0];
1230  normIPprong[1] = tmpNormIP[1];
1231  normIPprong[2] = tmpNormIP[2];
1232 
1233  Double_t var4nSparse[knVarForSparse] = {invMass,ptCand,deltaMassKK*1000,dlen*1000,dlenxy*1000,normdlxy,cosp*100,cospxy*100,
1234  sigvert*1000,cosPiDs*10,cosPiKPhi*10,TMath::Abs(normIP),nTracklets};
1235 
1236  if(!fReadMC) {
1237  fnSparse->Fill(var4nSparse);
1238  }
1239  else {
1240  if(indexMCKKpi==GetSignalHistoIndex(iPtBin)) {
1241  if(candType==1.5) fnSparseMC[2]->Fill(var4nSparse,ptWeight);
1242  if(candType==2.5) fnSparseMC[3]->Fill(var4nSparse,ptWeight);
1243  }
1244  else if(fFillSparseDplus && labDplus>=0 && pdgCode0==321) {
1245  if(candType==1.5) fnSparseMCDplus[2]->Fill(var4nSparse,ptWeight);
1246  if(candType==2.5) fnSparseMCDplus[3]->Fill(var4nSparse,ptWeight);
1247  }
1248  }
1249  }
1250  if(isPhipiKK) {
1251  Double_t tmpNormIP[nProng];
1252 
1253  invMass = d->InvMassDspiKK();
1254  massKK = d->InvMass2Prongs(1,2,321,321);
1255  deltaMassKK = TMath::Abs(massKK-massPhi);
1256  cosPiDs = d->CosPiDsLabFramepiKK();
1257  cosPiKPhi = d->CosPiKPhiRFramepiKK();
1258  cosPiKPhi = TMath::Abs(cosPiKPhi*cosPiKPhi*cosPiKPhi);
1259 
1260  for(Int_t ip=0; ip<nProng; ip++) {
1261  Double_t diffIP, errdiffIP;
1262  d->Getd0MeasMinusExpProng(ip,aod->GetMagneticField(),diffIP,errdiffIP);
1263  tmpNormIP[ip] = diffIP/errdiffIP;
1264  if(ip==0) normIP = tmpNormIP[ip];
1265  else if(TMath::Abs(tmpNormIP[ip])>TMath::Abs(normIP)) normIP = tmpNormIP[ip];
1266  }
1267 
1268  normIPprong[0] = tmpNormIP[2];
1269  normIPprong[1] = tmpNormIP[1];
1270  normIPprong[2] = tmpNormIP[0];
1271 
1272  Double_t var4nSparse[knVarForSparse] = {invMass,ptCand,deltaMassKK*1000,dlen*1000,dlenxy*1000,normdlxy,cosp*100,cospxy*100,
1273  sigvert*1000,cosPiDs*10,cosPiKPhi*10,TMath::Abs(normIP),nTracklets};
1274 
1275  if(!fReadMC) {
1276  fnSparse->Fill(var4nSparse);
1277  }
1278  else {
1279  if(indexMCpiKK==GetSignalHistoIndex(iPtBin)) {
1280  if(candType==1.5) fnSparseMC[2]->Fill(var4nSparse,ptWeight);
1281  if(candType==2.5) fnSparseMC[3]->Fill(var4nSparse,ptWeight);
1282  }
1283  else if(fFillSparseDplus && labDplus>=0 && pdgCode0==211) {
1284  if(candType==1.5) fnSparseMCDplus[2]->Fill(var4nSparse,ptWeight);
1285  if(candType==2.5) fnSparseMCDplus[3]->Fill(var4nSparse,ptWeight);
1286  }
1287  }
1288  }
1289 
1290  if(fReadMC && (isPhiKKpi || isPhiKKpi)) {
1291  Double_t var[6] = {ptCand,normIP,normIPprong[0],normIPprong[1],normIPprong[2],candType};
1292  fnSparseIP->Fill(var);
1293  }
1294  }
1296 
1297  if(fDoCutVarHistos){
1298  Double_t sumD02=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
1299  Double_t dca=d->GetDCA();
1300  Double_t ptmax=0;
1301 
1302  for(Int_t i=0;i<3;i++){
1303  if(d->PtProng(i)>ptmax)ptmax=d->PtProng(i);
1304  }
1305  fCosPHist[index]->Fill(cosp);
1306  fCosPxyHist[index]->Fill(cospxy);
1307  fDLenHist[index]->Fill(dlen);
1308  fDLenxyHist[index]->Fill(dlenxy);
1309  fNDLenxyHist[index]->Fill(normdlxy);
1310  fSigVertHist[index]->Fill(sigvert);
1311  fSumd02Hist[index]->Fill(sumD02);
1312  fPtMaxHist[index]->Fill(ptmax);
1313  fDCAHist[index]->Fill(dca);
1314  fNormIPHist[index]->Fill(normIP);
1315  fCosPiDsHist[index]->Fill(cosPiDs);
1316  fCosPiKPhiHist[index]->Fill(cosPiKPhi);
1317  fPtProng0Hist[index]->Fill(pt0);
1318  fPtProng1Hist[index]->Fill(pt1);
1319  fPtProng2Hist[index]->Fill(pt2);
1320  if(!fReadMC) {
1321  fCosPHist3D->Fill(invMass,ptCand,cosp);
1322  fCosPxyHist3D->Fill(invMass,ptCand,cospxy);
1323  fDLenHist3D->Fill(invMass,ptCand,dlen);
1324  fDLenxyHist3D->Fill(invMass,ptCand,dlenxy);
1325  fNDLenxyHist3D->Fill(invMass,ptCand,normdlxy);
1326  fSigVertHist3D->Fill(invMass,ptCand,sigvert);
1327  fDCAHist3D->Fill(invMass,ptCand,dca);
1328  fNormIPHist3D->Fill(invMass,ptCand,normIP);
1329  fCosPiDsHist3D->Fill(invMass,ptCand,cosPiDs);
1330  fCosPiKPhiHist3D->Fill(invMass,ptCand,cosPiKPhi);
1331  fPtProng0Hist3D->Fill(invMass,ptCand,pt0);
1332  fPtProng1Hist3D->Fill(invMass,ptCand,pt1);
1333  fPtProng2Hist3D->Fill(invMass,ptCand,pt2);
1334  }
1335  if(isKKpi){
1336  Double_t massKK=d->InvMass2Prongs(0,1,321,321);
1337  Double_t massKp=d->InvMass2Prongs(1,2,321,211);
1338  fDalitz[index]->Fill(massKK,massKp);
1339  if(isPhiKKpi) fDalitzPhi[index]->Fill(massKK,massKp);
1340  if(isK0starKKpi) fDalitzK0st[index]->Fill(massKK,massKp);
1341  if(fReadMC && indexMCKKpi!=-1){
1342  fDalitz[indexMCKKpi]->Fill(massKK,massKp);
1343  if(isPhiKKpi) fDalitzPhi[indexMCKKpi]->Fill(massKK,massKp);
1344  if(isK0starKKpi) fDalitzK0st[indexMCKKpi]->Fill(massKK,massKp);
1345  fCosPHist[indexMCKKpi]->Fill(cosp);
1346  fCosPxyHist[indexMCKKpi]->Fill(cospxy);
1347  fDLenHist[indexMCKKpi]->Fill(dlen);
1348  fDLenxyHist[indexMCKKpi]->Fill(dlenxy);
1349  fNDLenxyHist[indexMCKKpi]->Fill(normdlxy);
1350  fSigVertHist[indexMCKKpi]->Fill(sigvert);
1351  fSumd02Hist[indexMCKKpi]->Fill(sumD02);
1352  fPtMaxHist[indexMCKKpi]->Fill(ptmax);
1353  fPtCandHist[indexMCKKpi]->Fill(ptCand);
1354  fDCAHist[indexMCKKpi]->Fill(dca);
1355  fNormIPHist[indexMCKKpi]->Fill(normIP);
1356  fCosPiDsHist[indexMCKKpi]->Fill(cosPiDs);
1357  fCosPiKPhiHist[indexMCKKpi]->Fill(cosPiKPhi);
1358  fPtProng0Hist[indexMCKKpi]->Fill(pt0);
1359  fPtProng1Hist[indexMCKKpi]->Fill(pt1);
1360  fPtProng2Hist[indexMCKKpi]->Fill(pt2);
1361  }
1362  }
1363  if(ispiKK){
1364  Double_t massKK=d->InvMass2Prongs(1,2,321,321);
1365  Double_t massKp=d->InvMass2Prongs(0,1,211,321);
1366  fDalitz[index]->Fill(massKK,massKp);
1367  if(isPhipiKK) fDalitzPhi[index]->Fill(massKK,massKp);
1368  if(isK0starpiKK) fDalitzK0st[index]->Fill(massKK,massKp);
1369 
1370 
1371  if(fReadMC && indexMCpiKK!=-1){
1372  fDalitz[indexMCpiKK]->Fill(massKK,massKp);
1373  if(isPhipiKK) fDalitzPhi[indexMCpiKK]->Fill(massKK,massKp);
1374  if(isK0starpiKK) fDalitzK0st[indexMCpiKK]->Fill(massKK,massKp);
1375  fCosPHist[indexMCpiKK]->Fill(cosp);
1376  fCosPxyHist[indexMCpiKK]->Fill(cospxy);
1377  fDLenHist[indexMCpiKK]->Fill(dlen);
1378  fDLenxyHist[indexMCpiKK]->Fill(dlenxy);
1379  fNDLenxyHist[indexMCpiKK]->Fill(normdlxy);
1380  fSigVertHist[indexMCpiKK]->Fill(sigvert);
1381  fSumd02Hist[indexMCpiKK]->Fill(sumD02);
1382  fPtMaxHist[indexMCpiKK]->Fill(ptmax);
1383  fPtCandHist[indexMCpiKK]->Fill(ptCand);
1384  fDCAHist[indexMCpiKK]->Fill(dca);
1385  fNormIPHist[indexMCpiKK]->Fill(normIP);
1386  fCosPiDsHist[indexMCpiKK]->Fill(cosPiDs);
1387  fCosPiKPhiHist[indexMCpiKK]->Fill(cosPiKPhi);
1388  fPtProng0Hist[indexMCpiKK]->Fill(pt0);
1389  fPtProng1Hist[indexMCpiKK]->Fill(pt1);
1390  fPtProng2Hist[indexMCpiKK]->Fill(pt2);
1391  }
1392  }
1393  }
1394 
1395  Float_t tmp[37];
1396  if(fFillNtuple>0){
1397 
1398  if ((fFillNtuple==1 && (isPhiKKpi || isPhipiKK)) || (fFillNtuple==2 && (isK0starKKpi || isK0starpiKK)) || (fFillNtuple==3 && (isKKpi || ispiKK))){
1399 
1400  AliAODTrack *track0=(AliAODTrack*)d->GetDaughter(0);
1401  AliAODTrack *track1=(AliAODTrack*)d->GetDaughter(1);
1402  AliAODTrack *track2=(AliAODTrack*)d->GetDaughter(2);
1403 
1404  UInt_t bitMapPIDTrack0=fAnalysisCuts->GetPIDTrackTPCTOFBitMap(track0);
1405  UInt_t bitMapPIDTrack1=fAnalysisCuts->GetPIDTrackTPCTOFBitMap(track1);
1406  UInt_t bitMapPIDTrack2=fAnalysisCuts->GetPIDTrackTPCTOFBitMap(track2);
1407 
1408  tmp[0]=Float_t(labDs);
1409  if(fReadMC && fWriteOnlySignal) tmp[0]=Float_t(isMCSignal);
1410  tmp[1]=Float_t(retCodeAnalysisCuts);
1411  tmp[2]=Float_t(pdgCode0);
1412  tmp[3]=d->PtProng(0);
1413  tmp[4]=d->PtProng(1);
1414  tmp[5]=d->PtProng(2);
1415  tmp[6]=d->Pt();
1416  tmp[7]=d->PProng(0);
1417  tmp[8]=d->PProng(1);
1418  tmp[9]=d->PProng(2);
1419  tmp[10]=Int_t(bitMapPIDTrack0);
1420  tmp[11]=Int_t(bitMapPIDTrack1);
1421  tmp[12]=Int_t(bitMapPIDTrack2);
1422  tmp[13]=d->CosPointingAngle();
1423  tmp[14]=d->CosPointingAngleXY();
1424  tmp[15]=d->DecayLength();
1425  tmp[16]=d->DecayLengthXY();
1426  tmp[17]=d->NormalizedDecayLength();
1427  tmp[18]=d->NormalizedDecayLengthXY();
1428  tmp[19]=d->InvMassDsKKpi();
1429  tmp[20]=d->InvMassDspiKK();
1430  tmp[21]=d->GetSigmaVert();
1431  tmp[22]=d->Getd0Prong(0);
1432  tmp[23]=d->Getd0Prong(1);
1433  tmp[24]=d->Getd0Prong(2);
1434  tmp[25]=d->GetDCA();
1435  tmp[26]=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
1436  tmp[27]=d->InvMass2Prongs(0,1,321,321);
1437  tmp[28]=d->InvMass2Prongs(1,2,321,321);
1438  tmp[29]=d->InvMass2Prongs(1,2,321,211);
1439  tmp[30]=d->InvMass2Prongs(0,1,211,321);
1440  tmp[31]=d->CosPiDsLabFrameKKpi();
1441  tmp[32]=d->CosPiDsLabFramepiKK();
1442  tmp[33]=d->CosPiKPhiRFrameKKpi();
1443  tmp[34]=d->CosPiKPhiRFramepiKK();
1444  tmp[35]=(Float_t)(centrality);
1445  tmp[36]=(Float_t)(runNumber);
1446 
1447  if(fReadMC && fWriteOnlySignal){
1448  if(isMCSignal>=0) fNtupleDs->Fill(tmp);
1449  }else{
1450  fNtupleDs->Fill(tmp);
1451  }
1452  PostData(4,fNtupleDs);
1453  }
1454  }
1455  } //if(retCodeAnalysisCuts
1456  } // if(isFidAcc)
1457 
1458  if(unsetvtx) d->UnsetOwnPrimaryVtx();
1459  if(recVtx)fAnalysisCuts->CleanOwnPrimaryVtx(d,aod,origownvtx);
1460  }
1461 
1462  fCounter->StoreCandidates(aod,nFiltered,kTRUE);
1463  fCounter->StoreCandidates(aod,nSelected,kFALSE);
1464 
1465  delete vHF;
1466 
1467  PostData(1,fOutput);
1468  PostData(3,fCounter);
1469 
1470  return;
1471 }
1472 
1473 //_________________________________________________________________
1474 
1476 {
1478  //
1479  if(fDebug > 1) printf("AnalysisTaskSEDs: Terminate() \n");
1480  fOutput = dynamic_cast<TList*> (GetOutputData(1));
1481  if (!fOutput) {
1482  printf("ERROR: fOutput not available\n");
1483  return;
1484  }
1485  fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("hNEvents"));
1486  if(fHistNEvents){
1487  printf("Number of analyzed events = %d\n",(Int_t)fHistNEvents->GetBinContent(2));
1488  }else{
1489  printf("ERROR: fHistNEvents not available\n");
1490  return;
1491  }
1492  return;
1493 }
1494 
1495 //_________________________________________________________________
1496 void AliAnalysisTaskSEDs::FillMCGenAccHistos(TClonesArray *arrayMC, AliAODMCHeader *mcHeader){
1498 
1499  Int_t nProng = 3;
1500  Double_t zMCVertex = mcHeader->GetVtxZ(); //vertex MC
1501  if(TMath::Abs(zMCVertex) <= fAnalysisCuts->GetMaxVtxZ()) {
1502  for(Int_t iPart=0; iPart<arrayMC->GetEntriesFast(); iPart++){
1503 
1504  AliAODMCParticle* mcPart = dynamic_cast<AliAODMCParticle*>(arrayMC->At(iPart));
1505 
1506  if(TMath::Abs(mcPart->GetPdgCode()) == 431) {
1507  Int_t orig = AliVertexingHFUtils::CheckOrigin(arrayMC,mcPart,kTRUE);//Prompt = 4, FeedDown = 5
1508 
1509  Int_t deca = 0;
1510  Bool_t isGoodDecay = kFALSE;
1511  Int_t labDau[3] = {-1,-1,-1};
1512  Bool_t isFidAcc = kFALSE;
1513  Bool_t isDaugInAcc = kFALSE;
1514 
1515  deca = AliVertexingHFUtils::CheckDsDecay(arrayMC,mcPart,labDau);
1516  if(deca == 1) isGoodDecay=kTRUE; // == 1 -> Phi pi -> kkpi
1517 
1518  if(labDau[0]==-1) continue; //protection against unfilled array of labels
1519 
1520  if(isGoodDecay) {
1521  Double_t pt = mcPart->Pt();
1522  Double_t rapid = mcPart->Y();
1523  isFidAcc = fAnalysisCuts->IsInFiducialAcceptance(pt,rapid);
1524  isDaugInAcc = CheckDaugAcc(arrayMC,nProng,labDau);
1525 
1526  if(isFidAcc) {
1527  Double_t var4nSparseAcc[2] = {pt,rapid*10};
1528  if(isDaugInAcc) {
1529  Double_t ptWeight = 1.;
1530  if (fUseWeight && fHistoPtWeight){
1531  AliDebug(2,"Using Histogram as Pt weight function");
1532  ptWeight = GetPtWeightFromHistogram(pt);
1533  }
1534  if(orig==4) fnSparseMC[0]->Fill(var4nSparseAcc,ptWeight);
1535  if(orig==5) fnSparseMC[1]->Fill(var4nSparseAcc,ptWeight);
1536  }
1537  }
1538  }
1539  }
1540 
1541  if(fFillSparseDplus && TMath::Abs(mcPart->GetPdgCode()) == 411) {
1542  Int_t orig = AliVertexingHFUtils::CheckOrigin(arrayMC,mcPart,kTRUE);//Prompt = 4, FeedDown = 5
1543 
1544  Int_t deca = 0;
1545  Bool_t isGoodDecay = kFALSE;
1546  Int_t labDau[3] = {-1,-1,-1};
1547  Bool_t isFidAcc = kFALSE;
1548  Bool_t isDaugInAcc = kFALSE;
1549 
1550  deca = AliVertexingHFUtils::CheckDplusKKpiDecay(arrayMC,mcPart,labDau);
1551  if(deca == 1) isGoodDecay=kTRUE; // == 1 -> Phi pi -> kkpi
1552 
1553  if(labDau[0]==-1) continue; //protection against unfilled array of labels
1554 
1555  if(isGoodDecay) {
1556  Double_t pt = mcPart->Pt();
1557  Double_t rapid = mcPart->Y();
1558  isFidAcc = fAnalysisCuts->IsInFiducialAcceptance(pt,rapid);
1559  isDaugInAcc = CheckDaugAcc(arrayMC,nProng,labDau);
1560 
1561  if(isFidAcc) {
1562  Double_t var4nSparseAcc[2] = {pt,rapid*10};
1563  if(isDaugInAcc) {
1564  Double_t ptWeight = 1.;
1565  if (fUseWeight && fHistoPtWeight){
1566  AliDebug(2,"Using Histogram as Pt weight function");
1567  ptWeight = GetPtWeightFromHistogram(pt);
1568  }
1569  if(orig==4) fnSparseMCDplus[0]->Fill(var4nSparseAcc,ptWeight);
1570  if(orig==5) fnSparseMCDplus[1]->Fill(var4nSparseAcc,ptWeight);
1571  }
1572  }
1573  }
1574  }
1575  }
1576  }
1577 }
1578 //_________________________________________________________________
1579 Bool_t AliAnalysisTaskSEDs::CheckDaugAcc(TClonesArray* arrayMC,Int_t nProng, Int_t *labDau){
1581 
1582  for (Int_t iProng = 0; iProng<nProng; iProng++){
1583  AliAODMCParticle* mcPartDaughter=dynamic_cast<AliAODMCParticle*>(arrayMC->At(labDau[iProng]));
1584  if(!mcPartDaughter) {
1585  return kFALSE;
1586  }
1587  Double_t eta = mcPartDaughter->Eta();
1588  Double_t pt = mcPartDaughter->Pt();
1589  if (TMath::Abs(eta) > 0.9 || pt < 0.1) {
1590  return kFALSE;
1591  }
1592  }
1593  return kTRUE;
1594 }
1595 
1596 //_________________________________________________________________
1597 
1599 
1600  const Int_t nprongs = 3;
1601  Double_t PxProng[nprongs], PyProng[nprongs], PtProng[nprongs], PzProng[nprongs], P2Prong[nprongs], mProng[nprongs];
1602  Double_t Px, Py, Pz, P2;
1603  UInt_t pdg[3]={321,321,211};
1604  int idPion = 2;
1605  if(dec==2) {
1606  pdg[0]=211;
1607  pdg[2]=321;
1608  idPion = 0;
1609  }
1610 
1611  for (Int_t ip=0; ip<nprongs; ip++) {
1612  PxProng[ip] = d->PxProng(ip);
1613  PyProng[ip] = d->PxProng(ip);
1614  PtProng[ip] = d->PtProng(ip);
1615  PzProng[ip] = d->PzProng(ip);
1616  P2Prong[ip] = d->P2Prong(ip);
1617  mProng[ip] = TDatabasePDG::Instance()->GetParticle(pdg[ip])->Mass();
1618  }
1619 
1620  for(Int_t i=0; i<9; i++) { //9 rotations implemented for the pion track around Pi
1621  Px = 0.;
1622  Py = 0.;
1623  Pz = 0.;
1624 
1625  Double_t phirot=TMath::Pi()*(5/6.+1/27.*i);
1626 
1627  PxProng[idPion] = PxProng[idPion]*TMath::Cos(phirot)-PyProng[idPion]*TMath::Sin(phirot);
1628  PyProng[idPion] = PxProng[idPion]*TMath::Sin(phirot)+PyProng[idPion]*TMath::Cos(phirot);
1629 
1630  for (Int_t j=0; j<nprongs; j++) {
1631  Px += PxProng[j];
1632  Py += PyProng[j];
1633  Pz += PzProng[j];
1634  }
1635  P2 = Px*Px + Py*Py + Pz*Pz;
1636 
1637  Double_t energysum = 0.;
1638  for(Int_t j=0; j<nprongs; j++) {
1639  energysum += TMath::Sqrt(mProng[j]*mProng[j]+P2Prong[j]);
1640  }
1641  Double_t mass = TMath::Sqrt(energysum*energysum-P2);
1642  if(fminMass<=mass<fmaxMass) fMassRotBkgHistPhi[iPtBin]->Fill(mass);
1643  }
1644 }
1645 //_________________________________________________________________________
1647  // weight function from the ratio of the LHC16i2a MC
1648  // 1.5-14 GeV/c using data and 1-1.5, 14-50 GeV/c using FONLL calculations
1649 
1650  if(fHistoPtWeight) delete fHistoPtWeight;
1651  fHistoPtWeight = new TH1F("histoWeight","histoWeight",500,0.,50.);
1652  fHistoPtWeight->Sumw2();
1653  Float_t binc[500]={ 1.695705, 1.743693, 1.790289, 1.835410, 1.878981, 1.920938, 1.961223, 1.999787, 2.036589, 2.071597, 2.104784, 2.136132, 2.165629, 2.193270, 2.219057, 2.174545, 2.064698, 1.959489, 1.858770, 1.762396, 1.670224, 1.582115, 1.497931, 1.417541, 1.340814, 1.267622, 1.197842, 1.131352, 1.068033, 1.007770, 0.950450, 0.895963, 0.844202, 0.795062, 0.748441, 0.704241, 0.662363, 0.622715, 0.585204, 0.549742, 0.516242, 0.484620, 0.454795, 0.426686, 0.400217, 0.375314, 0.351903, 0.329915, 0.309281, 0.289936, 0.271816, 0.254860, 0.239007, 0.224201, 0.210386, 0.197508, 0.185516, 0.174360, 0.163992, 0.154366, 0.145438, 0.137166, 0.129508, 0.122426, 0.115882, 0.109840, 0.104266, 0.099128, 0.094395, 0.090036, 0.086023, 0.082331, 0.078933, 0.075805, 0.072925, 0.070271, 0.067823, 0.065562, 0.063471, 0.061532, 0.059730, 0.058051, 0.056481, 0.055007, 0.053619, 0.052306, 0.051059, 0.049867, 0.048725, 0.047624, 0.046558, 0.045522, 0.044511, 0.043521, 0.042548, 0.041590, 0.040643, 0.039706, 0.038778, 0.037857, 0.036944, 0.036039, 0.035141, 0.034251, 0.033370, 0.032500, 0.031641, 0.030796, 0.029966, 0.029153, 0.028359, 0.027587, 0.026837, 0.026113, 0.025416, 0.024748, 0.024111, 0.023507, 0.022937, 0.022402, 0.021904, 0.021443, 0.021020, 0.020634, 0.020286, 0.019974, 0.019698, 0.019455, 0.019244, 0.019062, 0.018905, 0.018770, 0.018652, 0.018545, 0.018444, 0.018342, 0.018231, 0.018102, 0.017947, 0.017755, 0.017536, 0.017327, 0.017120, 0.016915, 0.016713, 0.016514, 0.016317, 0.016122, 0.015929, 0.015739, 0.015551, 0.015366, 0.015182, 0.015001, 0.014822, 0.014645, 0.014470, 0.014297, 0.014127, 0.013958, 0.013791, 0.013627, 0.013464, 0.013303, 0.013145, 0.012988, 0.012833, 0.012679, 0.012528, 0.012378, 0.012231, 0.012085, 0.011940, 0.011798, 0.011657, 0.011518, 0.011380, 0.011244, 0.011110, 0.010978, 0.010846, 0.010717, 0.010589, 0.010463, 0.010338, 0.010214, 0.010092, 0.009972, 0.009853, 0.009735, 0.009619, 0.009504, 0.009391, 0.009279, 0.009168, 0.009058, 0.008950, 0.008843, 0.008738, 0.008633, 0.008530, 0.008429, 0.008328, 0.008229, 0.008130, 0.008033, 0.007937, 0.007843, 0.007749, 0.007656, 0.007565, 0.007475, 0.007385, 0.007297, 0.007210, 0.007124, 0.007039, 0.006955, 0.006872, 0.006790, 0.006709, 0.006629, 0.006550, 0.006471, 0.006394, 0.006318, 0.006242, 0.006168, 0.006094, 0.006022, 0.005950, 0.005879, 0.005808, 0.005739, 0.005671, 0.005603, 0.005536, 0.005470, 0.005405, 0.005340, 0.005276, 0.005213, 0.005151, 0.005090, 0.005029, 0.004969, 0.004909, 0.004851, 0.004793, 0.004736, 0.004679, 0.004623, 0.004568, 0.004514, 0.004460, 0.004406, 0.004354, 0.004302, 0.004251, 0.004200, 0.004150, 0.004100, 0.004051, 0.004003, 0.003955, 0.003908, 0.003861, 0.003815, 0.003770, 0.003725, 0.003680, 0.003636, 0.003593, 0.003550, 0.003507, 0.003466, 0.003424, 0.003383, 0.003343, 0.003303, 0.003264, 0.003225, 0.003186, 0.003148, 0.003110, 0.003073, 0.003037, 0.003000, 0.002965, 0.002929, 0.002894, 0.002860, 0.002826, 0.002792, 0.002758, 0.002726, 0.002693, 0.002661, 0.002629, 0.002598, 0.002567, 0.002536, 0.002506, 0.002476, 0.002446, 0.002417, 0.002388, 0.002360, 0.002332, 0.002304, 0.002276, 0.002249, 0.002222, 0.002196, 0.002169, 0.002144, 0.002118, 0.002093, 0.002068, 0.002043, 0.002019, 0.001995, 0.001971, 0.001947, 0.001924, 0.001901, 0.001878, 0.001856, 0.001834, 0.001812, 0.001790, 0.001769, 0.001748, 0.001727, 0.001706, 0.001686, 0.001666, 0.001646, 0.001626, 0.001607, 0.001588, 0.001569, 0.001550, 0.001531, 0.001513, 0.001495, 0.001477, 0.001460, 0.001442, 0.001425, 0.001408, 0.001391, 0.001374, 0.001358, 0.001342, 0.001326, 0.001310, 0.001294, 0.001279, 0.001264, 0.001249, 0.001234, 0.001219, 0.001204, 0.001190, 0.001176, 0.001162, 0.001148, 0.001134, 0.001121, 0.001107, 0.001094, 0.001081, 0.001068, 0.001055, 0.001043, 0.001030, 0.001018, 0.001006, 0.000994, 0.000982, 0.000970, 0.000959, 0.000947, 0.000936, 0.000925, 0.000914, 0.000903, 0.000892, 0.000881, 0.000871, 0.000860, 0.000850, 0.000840, 0.000830, 0.000820, 0.000810, 0.000801, 0.000791, 0.000782, 0.000772, 0.000763, 0.000754, 0.000745, 0.000736, 0.000727, 0.000719, 0.000710, 0.000702, 0.000693, 0.000685, 0.000677, 0.000669, 0.000661, 0.000653, 0.000645, 0.000637, 0.000630, 0.000622, 0.000615, 0.000607, 0.000600, 0.000593, 0.000586, 0.000579, 0.000572, 0.000565, 0.000558, 0.000552, 0.000545, 0.000539, 0.000532, 0.000526, 0.000520, 0.000513, 0.000507, 0.000501, 0.000495, 0.000489, 0.000483, 0.000478, 0.000472, 0.000466, 0.000461, 0.000455, 0.000450, 0.000444, 0.000439, 0.000434, 0.000429, 0.000424, 0.000419, 0.000414, 0.000409, 0.000404, 0.000399, 0.000394, 0.000389, 0.000385, 0.000380, 0.000376, 0.000371, 0.000367, 0.000362, 0.000358, 0.000354, 0.000350, 0.000345, 0.000341, 0.000337, 0.000333, 0.000329, 0.000325, 0.000321, 0.000318, 0.000314, 0.000310, 0.000306, 0.000303, 0.000299, 0.000295, 0.000292, 0.000288, 0.000285, 0.000282, 0.000278, 0.000275, 0.000272, 0.000268, 0.000265, 0.000262, 0.000259, 0.000256, 0.000253, 0.000250, 0.000247, 0.000244, 0.000241, 0.000238, 0.000235};
1654  for(Int_t i=0; i<500; i++){
1655  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1656  }
1657  //SetWeightHistogram();
1658  fUseWeight=kTRUE;
1659 }
1660 
1661 //_________________________________________________________________________
1663  // weight function from the ratio of the LHC16i2a+b+c MC
1664  // and FONLL calculations for pp data
1665 
1666  if(fHistoPtWeight) delete fHistoPtWeight;
1667  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1668  fHistoPtWeight->Sumw2();
1669  Float_t binc[400]={1.118416, 1.003458, 0.935514, 0.907222, 0.904359, 0.913668, 0.933906, 0.963898, 0.996388, 1.031708, 1.066404, 1.099683, 1.125805, 1.145181, 1.165910, 1.181905, 1.193425, 1.203891, 1.204726, 1.209411, 1.209943, 1.204763, 1.205291, 1.198912, 1.197390, 1.182005, 1.184194, 1.175994, 1.167881, 1.158348, 1.147190, 1.139833, 1.126940, 1.123322, 1.108389, 1.102199, 1.089464, 1.075874, 1.061964, 1.051429, 1.038113, 1.026668, 1.011441, 0.998567, 0.987658, 0.972434, 0.950068, 0.940758, 0.916880, 0.911931, 0.894512, 0.878691, 0.860589, 0.848025, 0.830774, 0.819399, 0.801134, 0.775276, 0.766382, 0.750495, 0.736935, 0.717529, 0.702637, 0.689152, 0.671334, 0.652030, 0.635696, 0.621365, 0.608362, 0.599019, 0.576024, 0.562136, 0.550938, 0.533587, 0.516410, 0.509744, 0.501655, 0.487402, 0.476469, 0.463762, 0.445979, 0.438088, 0.422214, 0.417467, 0.404357, 0.391450, 0.379996, 0.371201, 0.361497, 0.352912, 0.343189, 0.329183, 0.327662, 0.310783, 0.304525, 0.301007, 0.293306, 0.278332, 0.274419, 0.267361, 0.261459, 0.255514, 0.249293, 0.241129, 0.237600, 0.231343, 0.221982, 0.216872, 0.211094, 0.206954, 0.202333, 0.196572, 0.193274, 0.188240, 0.181817, 0.178364, 0.173614, 0.167135, 0.166055, 0.163423, 0.156557, 0.155821, 0.151985, 0.144909, 0.145062, 0.139720, 0.138873, 0.131892, 0.129969, 0.126509, 0.126978, 0.120451, 0.117661, 0.116300, 0.115604, 0.112215, 0.109237, 0.107720, 0.106419, 0.102050, 0.102777, 0.097406, 0.098447, 0.095964, 0.093868, 0.092430, 0.089329, 0.088249, 0.085881, 0.084417, 0.085498, 0.082444, 0.079151, 0.079565, 0.077811, 0.077293, 0.075218, 0.072445, 0.073054, 0.071545, 0.070279, 0.068046, 0.067854, 0.068092, 0.065378, 0.064405, 0.062060, 0.063391, 0.061718, 0.059616, 0.058913, 0.058895, 0.058311, 0.056320, 0.056527, 0.055349, 0.053701, 0.054735, 0.052264, 0.051277, 0.051554, 0.050545, 0.048995, 0.049507, 0.048466, 0.048156, 0.046809, 0.047600, 0.046078, 0.044801, 0.044113, 0.043700, 0.043530, 0.043396, 0.042556, 0.041048, 0.041657, 0.040394, 0.041314, 0.040720, 0.039656, 0.038478, 0.039276, 0.038777, 0.037730, 0.036918, 0.036466, 0.035827, 0.035285, 0.035963, 0.034371, 0.034757, 0.033205, 0.033666, 0.033266, 0.032583, 0.033570, 0.032102, 0.032107, 0.031464, 0.032160, 0.030091, 0.030564, 0.029464, 0.029613, 0.029626, 0.029512, 0.029324, 0.028607, 0.027628, 0.027251, 0.027072, 0.027077, 0.026724, 0.026961, 0.026303, 0.026237, 0.025454, 0.025133, 0.025365, 0.026014, 0.024807, 0.023901, 0.023459, 0.023405, 0.023654, 0.023981, 0.023675, 0.022493, 0.022781, 0.021801, 0.021704, 0.022372, 0.021189, 0.020681, 0.020779, 0.021324, 0.020558, 0.020901, 0.020586, 0.020808, 0.019276, 0.019516, 0.019706, 0.018935, 0.018632, 0.018516, 0.019187, 0.018916, 0.018039, 0.018208, 0.018045, 0.017628, 0.017916, 0.017711, 0.017838, 0.017222, 0.016565, 0.015733, 0.016264, 0.015826, 0.016090, 0.016622, 0.015802, 0.016621, 0.015441, 0.015309, 0.014860, 0.014935, 0.014968, 0.014443, 0.014485, 0.015136, 0.014078, 0.014414, 0.013908, 0.014071, 0.014078, 0.013766, 0.013436, 0.013507, 0.013480, 0.013224, 0.013041, 0.013935, 0.012885, 0.012453, 0.012528, 0.012492, 0.012225, 0.012542, 0.012706, 0.012136, 0.011902, 0.011560, 0.011448, 0.011861, 0.011271, 0.011831, 0.011159, 0.011171, 0.010966, 0.011311, 0.011002, 0.011130, 0.010995, 0.010450, 0.010663, 0.010678, 0.010492, 0.009861, 0.010507, 0.009916, 0.010121, 0.010029, 0.010046, 0.009370, 0.009647, 0.010104, 0.009282, 0.009830, 0.009403, 0.009148, 0.009172, 0.008893, 0.009158, 0.009019, 0.008780, 0.008579, 0.009063, 0.008634, 0.008988, 0.008265, 0.008581, 0.008575, 0.008690, 0.008181, 0.008352, 0.008150, 0.008430, 0.008256, 0.008119, 0.008453, 0.008447, 0.008021, 0.007938, 0.008025, 0.007718, 0.008127, 0.007651, 0.007590, 0.007316, 0.007839, 0.007504, 0.007341, 0.007527, 0.007263, 0.007668, 0.007306, 0.007271, 0.006910, 0.007257, 0.007260, 0.006810, 0.006967, 0.006887, 0.006867, 0.007202, 0.006829, 0.006370, 0.006710, 0.006417, 0.006361, 0.006800, 0.006410, 0.006323, 0.006790, 0.006322, 0.006673, 0.006547};
1670  for(Int_t i=0; i<400; i++){
1671  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1672  }
1673  //SetWeightHistogram();
1674  fUseWeight=kTRUE;
1675 }
1676 
1677 //_________________________________________________________________________
1679  // weight function from the ratio of the LHC16i2a+b+c MC
1680  // and FONLL calculations for pp data
1681  // corrected by the BAMPS Raa calculation for 30-50% CC
1682  if(fHistoPtWeight) delete fHistoPtWeight;
1683  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1684  fHistoPtWeight->Sumw2();
1685  Float_t binc[400]={2.166180, 1.866117, 1.667595, 1.547176, 1.486661, 1.457891, 1.426949, 1.399055, 1.383278, 1.349383, 1.317009, 1.282321, 1.234257, 1.181136, 1.136655, 1.087523, 1.037912, 0.993256, 0.944746, 0.900948, 0.865869, 0.827193, 0.794424, 0.757723, 0.733020, 0.700164, 0.682189, 0.659872, 0.637918, 0.615749, 0.593020, 0.574402, 0.556158, 0.542663, 0.525494, 0.516038, 0.503629, 0.490980, 0.479143, 0.469005, 0.457749, 0.447668, 0.436803, 0.427073, 0.418282, 0.407867, 0.395093, 0.387861, 0.374742, 0.369462, 0.360146, 0.351991, 0.342990, 0.336259, 0.327730, 0.322382, 0.314602, 0.303874, 0.299820, 0.293049, 0.287539, 0.280329, 0.274866, 0.269939, 0.263299, 0.256057, 0.249215, 0.242170, 0.235704, 0.230709, 0.220529, 0.213921, 0.208394, 0.202424, 0.196700, 0.194943, 0.192620, 0.187894, 0.184411, 0.180204, 0.172915, 0.169077, 0.162201, 0.159636, 0.153904, 0.148296, 0.143282, 0.139306, 0.135561, 0.132342, 0.128696, 0.123444, 0.122873, 0.116544, 0.114197, 0.112878, 0.110018, 0.104547, 0.103222, 0.100707, 0.098622, 0.096513, 0.094295, 0.091334, 0.090122, 0.087870, 0.084894, 0.083729, 0.082265, 0.081404, 0.080323, 0.078750, 0.078132, 0.076781, 0.074823, 0.074050, 0.072614, 0.070093, 0.069828, 0.068907, 0.066189, 0.066054, 0.064600, 0.061757, 0.061986, 0.059862, 0.059656, 0.056807, 0.055956, 0.054386, 0.054507, 0.051629, 0.050358, 0.049702, 0.049331, 0.047814, 0.046476, 0.045762, 0.045142, 0.043224, 0.043484, 0.041282, 0.041794, 0.040809, 0.039985, 0.039439, 0.038181, 0.037782, 0.036831, 0.036264, 0.036790, 0.035535, 0.034173, 0.034409, 0.033659, 0.033308, 0.032290, 0.030981, 0.031121, 0.030361, 0.029708, 0.028653, 0.028461, 0.028449, 0.027208, 0.026697, 0.025623, 0.026069, 0.025279, 0.024332, 0.024341, 0.024629, 0.024677, 0.024117, 0.024490, 0.024257, 0.023804, 0.024537, 0.023692, 0.023502, 0.023888, 0.023673, 0.023193, 0.023684, 0.023429, 0.023521, 0.023014, 0.023346, 0.022544, 0.021866, 0.021477, 0.021224, 0.021089, 0.020972, 0.020515, 0.019739, 0.019982, 0.019328, 0.019719, 0.019387, 0.018833, 0.018227, 0.018558, 0.018276, 0.017738, 0.017460, 0.017365, 0.017178, 0.017033, 0.017478, 0.016817, 0.017119, 0.016463, 0.016802, 0.016711, 0.016475, 0.017083, 0.016441, 0.016548, 0.016320, 0.016786, 0.015804, 0.016153, 0.015668, 0.015843, 0.015810, 0.015651, 0.015454, 0.014981, 0.014376, 0.014089, 0.013906, 0.013818, 0.013549, 0.013580, 0.013160, 0.013040, 0.012566, 0.012324, 0.012353, 0.012582, 0.011915, 0.011401, 0.011112, 0.011008, 0.011046, 0.011119, 0.010954, 0.010439, 0.010604, 0.010179, 0.010163, 0.010507, 0.009981, 0.009771, 0.009846, 0.010134, 0.009798, 0.009991, 0.009869, 0.010005, 0.009295, 0.009438, 0.009557, 0.009210, 0.009088, 0.009057, 0.009412, 0.009306, 0.008899, 0.009009, 0.008952, 0.008764, 0.008926, 0.008842, 0.008924, 0.008634, 0.008322, 0.007920, 0.008205, 0.008000, 0.008151, 0.008438, 0.008037, 0.008472, 0.007886, 0.007835, 0.007621, 0.007675, 0.007707, 0.007452, 0.007489, 0.007841, 0.007308, 0.007497, 0.007248, 0.007348, 0.007367, 0.007227, 0.007097, 0.007179, 0.007209, 0.007115, 0.007059, 0.007588, 0.007058, 0.006862, 0.006945, 0.006965, 0.006856, 0.007075, 0.007209, 0.006925, 0.006830, 0.006672, 0.006645, 0.006923, 0.006615, 0.006982, 0.006622, 0.006666, 0.006579, 0.006823, 0.006673, 0.006786, 0.006740, 0.006440, 0.006606, 0.006650, 0.006568, 0.006206, 0.006646, 0.006305, 0.006468, 0.006442, 0.006486, 0.006080, 0.006291, 0.006622, 0.006113, 0.006506, 0.006254, 0.006114, 0.006161, 0.006002, 0.006211, 0.006146, 0.006012, 0.005902, 0.006264, 0.005996, 0.006271, 0.005793, 0.006043, 0.006067, 0.006177, 0.005842, 0.005991, 0.005872, 0.006102, 0.006003, 0.005930, 0.006201, 0.006224, 0.005937, 0.005901, 0.005992, 0.005788, 0.006121, 0.005787, 0.005766, 0.005582, 0.006006, 0.005774, 0.005672, 0.005841, 0.005660, 0.006000, 0.005741, 0.005737, 0.005475, 0.005773, 0.005799, 0.005462, 0.005610, 0.005569, 0.005574, 0.005871, 0.005589, 0.005234, 0.005535, 0.005314, 0.005288, 0.005676, 0.005371, 0.005319, 0.005734, 0.005360, 0.005679, 0.005593};
1686  for(Int_t i=0; i<400; i++){
1687  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1688  }
1689  fUseWeight=kTRUE;
1690 }
1691 
1692 //_________________________________________________________________________
1694  // weight function from the ratio of the LHC16i2a+b+c MC
1695  // and FONLL calculations for pp data
1696  // corrected by the TAMU Raa calculation for 0-10% CC (not available in 30-50% CC)
1697  if(fHistoPtWeight) delete fHistoPtWeight;
1698  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1699  fHistoPtWeight->Sumw2();
1700  Float_t binc[400]={1.179906, 1.091249, 1.047774, 1.045579, 1.071679, 1.112413, 1.167414, 1.236240, 1.310301, 1.390289, 1.471711, 1.553389, 1.626886, 1.692115, 1.760647, 1.813658, 1.850817, 1.886699, 1.907671, 1.934832, 1.955433, 1.966727, 1.987262, 1.996316, 2.013326, 1.973926, 1.931144, 1.871654, 1.812942, 1.752718, 1.690846, 1.635303, 1.572611, 1.523510, 1.459790, 1.402510, 1.331908, 1.261575, 1.192241, 1.127915, 1.061798, 0.998830, 0.933514, 0.871774, 0.812936, 0.762844, 0.719340, 0.686587, 0.644108, 0.615714, 0.579512, 0.545254, 0.510508, 0.479884, 0.447423, 0.426154, 0.408934, 0.388264, 0.376424, 0.361389, 0.347757, 0.331685, 0.318029, 0.305285, 0.290922, 0.278523, 0.269807, 0.262025, 0.254878, 0.249325, 0.238179, 0.230899, 0.224792, 0.216253, 0.207879, 0.204465, 0.201153, 0.195373, 0.190926, 0.185773, 0.178589, 0.175371, 0.168959, 0.167004, 0.161705, 0.156809, 0.152788, 0.149806, 0.146429, 0.143478, 0.140037, 0.134813, 0.134679, 0.128205, 0.126078, 0.125038, 0.122214, 0.116329, 0.115044, 0.112427, 0.110279, 0.108098, 0.105784, 0.102628, 0.101429, 0.099101, 0.095464, 0.093631, 0.091491, 0.090045, 0.088374, 0.086188, 0.085067, 0.083168, 0.080636, 0.079414, 0.077610, 0.075013, 0.074825, 0.073932, 0.071106, 0.071050, 0.069574, 0.066593, 0.066924, 0.064876, 0.065064, 0.062345, 0.061980, 0.060859, 0.061616, 0.058952, 0.058079, 0.057894, 0.058031, 0.056604, 0.055180, 0.054490, 0.053909, 0.051768, 0.052210, 0.049552, 0.050152, 0.048955, 0.047953, 0.047224, 0.045588, 0.044985, 0.043728, 0.042934, 0.043434, 0.041834, 0.040118, 0.040281, 0.039348, 0.038987, 0.037793, 0.036258, 0.036420, 0.035528, 0.034761, 0.033524, 0.033296, 0.033280, 0.031825, 0.031351, 0.030329, 0.031103, 0.030401, 0.029481, 0.029247, 0.029352, 0.029174, 0.028286, 0.028500, 0.028017, 0.027293, 0.027932, 0.026779, 0.026379, 0.026628, 0.026211, 0.025508, 0.025877, 0.025433, 0.025328, 0.024636, 0.025069, 0.024282, 0.023625, 0.023278, 0.023074, 0.023000, 0.022943, 0.022514, 0.021767, 0.022180, 0.021594, 0.022175, 0.021944, 0.021456, 0.020901, 0.021419, 0.021230, 0.020738, 0.020322, 0.020055, 0.019686, 0.019371, 0.019725, 0.018835, 0.019029, 0.018163, 0.018398, 0.018163, 0.017719, 0.018126, 0.017208, 0.017086, 0.016622, 0.016865, 0.015663, 0.015791, 0.015108, 0.015069, 0.015033, 0.015006, 0.014940, 0.014604, 0.014133, 0.013968, 0.013904, 0.013934, 0.013780, 0.013930, 0.013727, 0.013940, 0.013763, 0.013826, 0.014192, 0.014801, 0.014347, 0.014048, 0.014009, 0.014197, 0.014571, 0.014999, 0.015030, 0.014491, 0.014891, 0.014456, 0.014596, 0.015256, 0.014648, 0.014492, 0.014756, 0.015344, 0.014986, 0.015433, 0.015394, 0.015756, 0.014778, 0.015145, 0.015478, 0.015051, 0.014986, 0.015067, 0.015793, 0.015748, 0.015188, 0.015502, 0.015533, 0.015340, 0.015759, 0.015745, 0.016026, 0.015635, 0.015194, 0.014579, 0.015225, 0.014963, 0.015365, 0.016030, 0.015387, 0.016341, 0.015327, 0.015340, 0.015030, 0.015246, 0.015420, 0.015015, 0.015195, 0.016021, 0.015034, 0.015528, 0.015114, 0.015423, 0.015564, 0.015348, 0.015107, 0.015314, 0.015411, 0.015243, 0.015154, 0.016324, 0.015215, 0.014823, 0.015030, 0.015104, 0.014896, 0.015400, 0.015721, 0.015131, 0.014951, 0.014630, 0.014597, 0.015235, 0.014583, 0.015418, 0.014648, 0.014769, 0.014601, 0.015167, 0.014857, 0.015134, 0.015053, 0.014405, 0.014800, 0.014921, 0.014760, 0.013966, 0.014979, 0.014230, 0.014620, 0.014581, 0.014701, 0.013799, 0.014299, 0.015071, 0.013931, 0.014846, 0.014290, 0.013988, 0.014113, 0.013767, 0.014263, 0.014131, 0.013840, 0.013604, 0.014456, 0.013853, 0.014505, 0.013416, 0.014010, 0.014081, 0.014352, 0.013589, 0.013952, 0.013690, 0.014241, 0.014024, 0.013868, 0.014517, 0.014587, 0.013927, 0.013857, 0.014084, 0.013619, 0.014417, 0.013644, 0.013607, 0.013185, 0.014200, 0.013665, 0.013437, 0.013849, 0.013431, 0.014252, 0.013648, 0.013652, 0.013039, 0.013761, 0.013836, 0.013043, 0.013408, 0.013319, 0.013344, 0.014065, 0.013400, 0.012560, 0.013294, 0.012773, 0.012721, 0.013663, 0.012939, 0.012823, 0.013835, 0.012942, 0.013723, 0.013525};
1701  for(Int_t i=0; i<400; i++){
1702  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1703  }
1704  fUseWeight=kTRUE;
1705 }
1706 
1707 //_________________________________________________________________________
1709 {
1710  //
1711  // Using an histogram as weight function
1712  // weight = 0 in the range outside the function
1713  //
1714  Double_t weight = 0.0;
1715  Int_t histoNbins = fHistoPtWeight->GetNbinsX();
1716  Int_t bin2 = fHistoPtWeight->FindBin(pt);
1717  if( (bin2>0) && (bin2<=histoNbins) ) {
1718  Int_t bin1=bin2-1;
1719  Int_t bin3=bin2+1;
1720  if(bin2==1) bin1=bin2+2;
1721  if(bin2==histoNbins) bin3=bin2-2;
1722  Float_t x_1=fHistoPtWeight->GetXaxis()->GetBinCenter(bin1);
1723  Float_t x_2=fHistoPtWeight->GetXaxis()->GetBinCenter(bin2);
1724  Float_t x_3=fHistoPtWeight->GetXaxis()->GetBinCenter(bin3);
1725  Float_t y_1=fHistoPtWeight->GetBinContent(bin1);
1726  Float_t y_2=fHistoPtWeight->GetBinContent(bin2);
1727  Float_t y_3=fHistoPtWeight->GetBinContent(bin3);
1728  Double_t a=( (y_3-y_2)*(x_1-x_2) - (y_1-y_2)*(x_3-x_2) )/( (x_3*x_3-x_2*x_2)*(x_1-x_2) - (x_1*x_1-x_2*x_2)*(x_3-x_2) );
1729  Double_t b=((y_1-y_2)-a*(x_1*x_1-x_2*x_2))/(x_1-x_2);
1730  Double_t c=y_3-a*(x_3*x_3)-b*x_3;
1731  weight = a*pt*pt+b*pt+c;
1732  }
1733  return weight;
1734 }
1735 
1736 
1737 
1738 
1739 
1740 
1741 
Double_t NormalizedDecayLengthXY() const
Bool_t IsEventRejectedDueToCentrality() const
Definition: AliRDHFCuts.h:321
Int_t pdg
THnSparseF * fnSparseMCDplus[4]
TH1F * fPtMaxHist[4 *kMaxPtBins]
! hist. for Pt Max (Prod Cuts)
Bool_t IsEventRejectedDueToZVertexOutsideFiducialRegion() const
Definition: AliRDHFCuts.h:315
Double_t NormalizedDecayLength() const
THnSparseF * fnSparseMC[4]
!<!THnSparse for topomatic variable
Bool_t IsEventRejectedDueToNotRecoVertex() const
Definition: AliRDHFCuts.h:309
double Double_t
Definition: External.C:58
Definition: External.C:260
void StoreCandidates(AliVEvent *, Int_t nCand=0, Bool_t flagFilter=kTRUE)
Definition: External.C:236
void Getd0MeasMinusExpProng(Int_t ip, Double_t magf, Double_t &d0diff, Double_t &errd0diff) const
TH1F * fPtProng1Hist[4 *kMaxPtBins]
! hist. for DCA (Prod Cuts)
TH3F * fCosPxyHist3D
! cosPxy vs Ds mass vs pt
TH1F * fDLenxyHist[4 *kMaxPtBins]
! hist. of norm decay length XY (sig,bkg,tot)
TH1F * fNormIPHist[4 *kMaxPtBins]
! hist. for topomatic variable
TH3F * fPtProng1Hist3D
! Pt prong1 vs Ds mass vs pt
void SetPtBins(Int_t n, Float_t *lim)
Int_t IsEventSelectedInCentrality(AliVEvent *event)
Bool_t HasSelectionBit(Int_t i) const
TH1F * fNDLenxyHist[4 *kMaxPtBins]
! hist. of decay length XY (sig,bkg,tot)
TH2F * fDalitzK0st[4 *kMaxPtBins]
! dalitz plot via K0* (sig,bkg,tot)
static Int_t CheckDsDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
Bool_t fFillSparseDplus
flag for usage of THnSparse
Double_t mass
Double_t CosPiDsLabFrameKKpi() const
Double_t ImpParXY() const
centrality
Int_t GetHistoIndex(Int_t iPtBin) const
static Int_t CheckMatchingAODdeltaAODevents()
THnSparseF * fImpParSparse
!<!THnSparse for MC for D+->kkpi
TH3F * fSigVertHist3D
! SigVert vs Ds mass vs pt
Double_t fMassRange
limits for pt bins
Bool_t IsEventRejectedDueToVertexContributors() const
Definition: AliRDHFCuts.h:312
TH2F * fPtVsMass
! hist. of pt vs. mass (prod. cuts)
TCanvas * c
Definition: TestFitELoss.C:172
Double_t CosPointingAngleXY() const
TH1F * fPtProng0Hist[4 *kMaxPtBins]
! hist. for Pt Max (Prod Cuts)
Bool_t FillRecoCand(AliVEvent *event, AliAODRecoDecayHF3Prong *rd3)
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
static Int_t CheckOrigin(TClonesArray *arrayMC, AliAODMCParticle *mcPart, Bool_t searchUpToQuark=kTRUE)
Functions to check the decay tree.
Bool_t fFillSparse
flag for usage of HasSelectionBit
Double_t GetMaxVtxZ() const
Definition: AliRDHFCuts.h:247
TH1F * fSumd02Hist[4 *kMaxPtBins]
! hist. for sum d02 (Prod Cuts)
TH3F * fCosPiKPhiHist3D
! cosPiKPhi vs Ds mass vs pt
UInt_t GetPIDTrackTPCTOFBitMap(AliAODTrack *track) const
TH1F * fMassHistPhi[4 *kMaxPtBins]
! hist. of mass spectra via phi (sig,bkg,tot)
TH1F * fCosPiKPhiHist[4 *kMaxPtBins]
! hist. for CosPiKPhi
Bool_t fDoBkgPhiSB
flag to create rotational bkg (rotating pi track)
THnSparseF * fnSparse
Cuts for Analysis.
TNtuple * fNtupleDs
! output ntuple
THnSparseF * fImpParSparseMC
!<!THnSparse for imp. par. on data
TH1F * fMassRotBkgHistPhi[kMaxPtBins]
! hist. of bkg generated from rot. of the pion
void GenerateRotBkg(AliAODRecoDecayHF3Prong *d, Int_t dec, Int_t iPtBin)
Bool_t fDoRotBkg
flag for usage of sparse for imp. parameter
TH3F * fPtProng0Hist3D
! Pt prong0 vs Ds mass vs pt
TH1F * fHistCentrality[3]
!hist. for cent distr (all,sel ev, )
void SetPtWeightsFromFONLL5anddataoverLHC16i2a()
static Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent *ev, Double_t mineta, Double_t maxeta)
TH3F * fDCAHist3D
! DCA vs Ds mass vs pt
int Int_t
Definition: External.C:63
TH3F * fCosPHist3D
! cosP vs Ds mass vs pt
AliNormalizationCounter * fCounter
flag to set mass window of phi meson (when using pion rotation to create bkg)
unsigned int UInt_t
Definition: External.C:33
float Float_t
Definition: External.C:68
TH2F * fHistCentralityMult[3]
!hist. for cent distr vs mult (all,sel ev, )
const Double_t ptmax
TH1F * fHistNEvents
! hist. for No. of events
static Int_t CheckDplusKKpiDecay(AliMCEvent *mcEvent, Int_t label, Int_t *arrayDauLab)
Double_t GetPtWeightFromHistogram(Double_t pt)
AliRDHFCutsDstoKKpi * fAnalysisCuts
TList * fOutput
! list send on output slot 0
TH2F * fHistAllV0multNTPCout
! histo for V0mult vs #tracks TPCout (all)
Double_t CosPiKPhiRFrameKKpi() const
Bool_t fUseTrkl
flag to decide whether to use pt-weights != 1 when filling the container or not
TH1F * fCosPxyHist[4 *kMaxPtBins]
! hist. of cosXY pointing angle (sig,bkg,tot)
void SetPtWeightsFromFONLL5andTAMUoverLHC16i2abc()
AliAODVertex * GetOwnPrimaryVtx() const
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t GetSigmaVert(const AliAODEvent *aod=0x0)
THnSparseF * fnSparseIP
!<!THnSparse for candidates on data
TH3F * fPtProng2Hist3D
! Pt prong2 vs Ds mass vs pt
Bool_t CheckDaugAcc(TClonesArray *arrayMC, Int_t nProng, Int_t *labDau)
TH2F * fDalitzPhi[4 *kMaxPtBins]
! dalitz plot via phi (sig,bkg,tot)
TH2F * fHistSelV0multNTPCout
! histo for V0mult vs #tracks TPCout (sel)
Float_t GetCentrality(AliAODEvent *aodEvent)
Definition: AliRDHFCuts.h:248
Bool_t IsEventRejectedDueToPileup() const
Definition: AliRDHFCuts.h:318
TH3F * fDLenHist3D
! Dlen vs Ds mass vs pt
TH1F * fMassHistKpi[kMaxPtBins]
! hist. of mass spectra of Kpi
TH1F * fMassRSBkgHistPhi[kMaxPtBins]
! hist. of bkg generated from right phi sideband + pion
TH3F * fNormIPHist3D
! nIP vs Ds mass vs pt
Bool_t IsCutOnResonancesApplied() const
TH1F * fPtCandHist[4 *kMaxPtBins]
! hist. for Pt Max (Prod Cuts)
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)
void FillMCGenAccHistos(TClonesArray *arrayMC, AliAODMCHeader *mcHeader)
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
Double_t CosPiDsLabFramepiKK() const
Bool_t fReadMC
0 = pp, 1 = pPb,PbPb
Double_t DecayLengthXY() const
Int_t fAODProtection
flag to fill sparse with Ntracklets
Bool_t GetIsPrimaryWithoutDaughters() const
Definition: AliRDHFCuts.h:268
TH1F * fCosPiDsHist[4 *kMaxPtBins]
! hist. for CosPiDs
Int_t GetSignalHistoIndex(Int_t iPtBin) const
Bool_t IsEventSelected(AliVEvent *event)
TH1F * fMassLSBkgHistPhi[kMaxPtBins]
! hist. of bkg generated from left phi sideband + pion
virtual void UserExec(Option_t *option)
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999, Double_t spherocity=-99.)
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)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
TH3F * fDLenxyHist3D
! Dlenxy vs Ds mass vs pt
Bool_t fFillImpParSparse
flag for usage of THnSparse
Double_t minMass
Bool_t fDoCutV0multTPCout
flag to create bkg from phi sidebands
void CleanOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod, AliAODVertex *origownvtx) const
Float_t * GetPtBinLimits() const
Definition: AliRDHFCuts.h:238
Bool_t fUseWeight
flag to activate cut on V0mult vs #tracks TPCout
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
const char Option_t
Definition: External.C:48
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:239
TH1F * fDCAHist[4 *kMaxPtBins]
! hist. for DCA (Prod Cuts)
Bool_t IsEventRejectedDueToTrigger() const
Definition: AliRDHFCuts.h:306
Bool_t fDoCutVarHistos
flag to control ntuple writing in MC
Double_t maxMass
TH1F * fPtProng2Hist[4 *kMaxPtBins]
! hist. for DCA (Prod Cuts)
bool Bool_t
Definition: External.C:53
Double_t CosPointingAngle() const
void SetPtWeightsFromFONLL5andBAMPSoverLHC16i2abc()
TH2F * fDalitz[4 *kMaxPtBins]
! dalitz plot (sig,bkg,tot)
Int_t GetUseCentrality() const
Definition: AliRDHFCuts.h:270
TH1F * fSigVertHist[4 *kMaxPtBins]
! hist. for sigVert (Prod Cuts)
Bool_t RecalcOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
Double_t DecayLength() const
TH3F * fNDLenxyHist3D
! NDlenxy vs Ds mass vs pt
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)
TList * OpenFile(const char *fname)
Definition: DrawAnaELoss.C:65
UChar_t fNPtBins
-1: no protection, 0: check AOD/dAOD nEvents only, 1: check AOD/dAOD nEvents + TProcessID names ...
Bool_t fWriteOnlySignal
flag for access to MC
TH3F * fCosPiDsHist3D
! cosPiDs vs Ds mass vs pt
Double_t fMassBinSize
range for mass histogram
Double_t fminMass
bin size for inv. mass histo
Int_t GetBackgroundHistoIndex(Int_t iPtBin) const
Float_t fPtLimits[kMaxPtBins+1]