AliPhysics  6f1d526 (6f1d526)
 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  fAODProtection(1),
96  fNPtBins(0),
97  fListCuts(0),
98  fMassRange(0.8),
99  fMassBinSize(0.002),
100  fminMass(1.6),
101  fmaxMass(2.5),
102  fMaxDeltaPhiMass4Rot(0.010),
103  fCounter(0),
104  fAnalysisCuts(0),
105  fnSparse(0),
106  fnSparseIP(0),
107  fImpParSparse(0x0),
108  fImpParSparseMC(0x0)
109 {
111 
112  for(Int_t i=0;i<3;i++){
113  fHistCentrality[i]=0;
114  fHistCentralityMult[i]=0;
115  }
116  for(Int_t i=0;i<4;i++) {
117  fChanHist[i]=0;
118  }
119  for(Int_t i=0;i<4*kMaxPtBins;i++){
120  fPtCandHist[i]=0;
121  fMassHist[i]=0;
122  fMassHistPhi[i]=0;
123  fMassHistK0st[i]=0;
124  fCosPHist[i]=0;
125  fDLenHist[i]=0;
126  fSumd02Hist[i]=0;
127  fSigVertHist[i]=0;
128  fPtMaxHist[i]=0;
129  fDCAHist[i]=0;
130  fPtProng0Hist[i]=0;
131  fPtProng1Hist[i]=0;
132  fPtProng2Hist[i]=0;
133  fDalitz[i]=0;
134  fDalitzPhi[i]=0;
135  fDalitzK0st[i]=0;
136  }
137  for(Int_t i=0;i<kMaxPtBins;i++){
138  fMassHistKK[i]=0;
139  fMassHistKpi[i]=0;
140  fMassRotBkgHistPhi[i]=0;
141  fMassLSBkgHistPhi[i]=0;
142  fMassRSBkgHistPhi[i]=0;
143  }
144  for(Int_t i=0;i<kMaxPtBins+1;i++){
145  fPtLimits[i]=0;
146  }
147  for (Int_t i=0; i<4; i++) {
148  fnSparseMC[i]=0;
149  fnSparseMCDplus[i]=0;
150  }
151 }
152 
153 //________________________________________________________________________
154 AliAnalysisTaskSEDs::AliAnalysisTaskSEDs(const char *name,AliRDHFCutsDstoKKpi* analysiscuts,Int_t fillNtuple):
155  AliAnalysisTaskSE(name),
156  fOutput(0),
157  fHistNEvents(0),
158  fHistoPtWeight(0x0),
159  fPtVsMass(0),
160  fPtVsMassPhi(0),
161  fPtVsMassK0st(0),
162  fYVsPt(0),
163  fYVsPtSig(0),
164  fHistAllV0multNTPCout(0),
165  fHistSelV0multNTPCout(0),
166  fCosPHist3D(0x0),
167  fCosPxyHist3D(0x0),
168  fDLenHist3D(0x0),
169  fDLenxyHist3D(0x0),
170  fNDLenxyHist3D(0x0),
171  fSigVertHist3D(0x0),
172  fDCAHist3D(0x0),
173  fNormIPHist3D(0x0),
174  fCosPiDsHist3D(0x0),
175  fCosPiKPhiHist3D(0x0),
176  fPtProng0Hist3D(0x0),
177  fPtProng1Hist3D(0x0),
178  fPtProng2Hist3D(0x0),
179  fNtupleDs(0),
180  fFillNtuple(fillNtuple),
181  fSystem(0),
182  fReadMC(kFALSE),
183  fWriteOnlySignal(kFALSE),
184  fDoCutVarHistos(kTRUE),
185  fUseSelectionBit(kFALSE),
186  fFillSparse(kTRUE),
187  fFillSparseDplus(kFALSE),
188  fFillImpParSparse(kFALSE),
189  fDoRotBkg(kTRUE),
190  fDoBkgPhiSB(kTRUE),
191  fDoCutV0multTPCout(kFALSE),
192  fUseWeight(kFALSE),
193  fAODProtection(1),
194  fNPtBins(0),
195  fListCuts(0),
196  fMassRange(0.8),
197  fMassBinSize(0.002),
198  fminMass(1.6),
199  fmaxMass(2.5),
200  fMaxDeltaPhiMass4Rot(0.010),
201  fCounter(0),
202  fAnalysisCuts(analysiscuts),
203  fnSparse(0),
204  fnSparseIP(0),
205  fImpParSparse(0x0),
206  fImpParSparseMC(0x0)
207 {
210 
211  for(Int_t i=0;i<3;i++){
212  fHistCentrality[i]=0;
213  fHistCentralityMult[i]=0;
214  }
215  for(Int_t i=0;i<4;i++) {
216  fChanHist[i]=0;
217  }
218  for(Int_t i=0;i<4*kMaxPtBins;i++){
219  fPtCandHist[i]=0;
220  fMassHist[i]=0;
221  fMassHistPhi[i]=0;
222  fMassHistK0st[i]=0;
223  fCosPHist[i]=0;
224  fDLenHist[i]=0;
225  fSumd02Hist[i]=0;
226  fSigVertHist[i]=0;
227  fPtMaxHist[i]=0;
228  fDCAHist[i]=0;
229  fPtProng0Hist[i]=0;
230  fPtProng1Hist[i]=0;
231  fPtProng2Hist[i]=0;
232  fDalitz[i]=0;
233  fDalitzPhi[i]=0;
234  fDalitzK0st[i]=0;
235  }
236  for(Int_t i=0;i<kMaxPtBins;i++){
237  fMassHistKK[i]=0;
238  fMassHistKpi[i]=0;
239  fMassRotBkgHistPhi[i]=0;
240  fMassLSBkgHistPhi[i]=0;
241  fMassRSBkgHistPhi[i]=0;
242  }
243  for(Int_t i=0;i<kMaxPtBins+1;i++){
244  fPtLimits[i]=0;
245  }
246 
247  for (Int_t i=0; i<4; i++) {
248  fnSparseMC[i]=0;
249  fnSparseMCDplus[i]=0;
250  }
251 
254  SetPtBins(nptbins,ptlim);
255 
256  DefineOutput(1,TList::Class()); //My private output
257 
258  DefineOutput(2,TList::Class());
259 
260  DefineOutput(3,AliNormalizationCounter::Class());
261 
262  if(fFillNtuple>0){
263  // Output slot #4 writes into a TNtuple container
264  DefineOutput(4,TNtuple::Class()); //My private output
265  }
266 
267 }
268 
269 //________________________________________________________________________
272  if(n>kMaxPtBins){
273  printf("Max. number of Pt bins = %d\n",kMaxPtBins);
275  fPtLimits[0]=0.;
276  fPtLimits[1]=1.;
277  fPtLimits[2]=3.;
278  fPtLimits[3]=5.;
279  fPtLimits[4]=10.;
280  for(Int_t i=5; i<kMaxPtBins+1; i++) fPtLimits[i]=99999999.;
281  }else{
282  fNPtBins=n;
283  for(Int_t i=0; i<fNPtBins+1; i++) fPtLimits[i]=lim[i];
284  for(Int_t i=fNPtBins+1; i<kMaxPtBins+1; i++) fPtLimits[i]=99999999.;
285  }
286  if(fDebug > 1){
287  printf("Number of Pt bins = %d\n",fNPtBins);
288  for(Int_t i=0; i<fNPtBins; i++) printf(" Bin%d = %8.2f-%8.2f\n",i,fPtLimits[i],fPtLimits[i+1]);
289  }
290 }
291 //________________________________________________________________________
293 {
294  // Destructor
295  if(fOutput && !fOutput->IsOwner()){
296  delete fHistNEvents;
297  delete fHistoPtWeight;
298  delete fHistAllV0multNTPCout;
299  delete fHistSelV0multNTPCout;
300  delete fCosPHist3D;
301  delete fCosPxyHist3D;
302  delete fDLenHist3D;
303  delete fDLenxyHist3D;
304  delete fNDLenxyHist3D;
305  delete fSigVertHist3D;
306  delete fDCAHist3D;
307  delete fNormIPHist3D;
308  delete fCosPiDsHist3D;
309  delete fCosPiKPhiHist3D;
310  delete fPtProng0Hist3D;
311  delete fPtProng1Hist3D;
312  delete fPtProng2Hist3D;
313 
314  for(Int_t i=0;i<4;i++){
315  delete fChanHist[i];
316  }
317  for(Int_t i=0;i<4*fNPtBins;i++){
318  delete fMassHist[i];
319  delete fMassHistPhi[i];
320  delete fMassHistK0st[i];
321  delete fCosPHist[i];
322  delete fDLenHist[i];
323  delete fSumd02Hist[i];
324  delete fSigVertHist[i];
325  delete fPtMaxHist[i];
326  delete fPtCandHist[i];
327  delete fDCAHist[i];
328  delete fPtProng0Hist[i];
329  delete fPtProng1Hist[i];
330  delete fPtProng2Hist[i];
331  delete fDalitz[i];
332  delete fDalitzPhi[i];
333  delete fDalitzK0st[i];
334  }
335  for(Int_t i=0;i<fNPtBins;i++){
336  delete fMassHistKK[i];
337  delete fMassHistKpi[i];
338  delete fMassRotBkgHistPhi[i];
339  delete fMassLSBkgHistPhi[i];
340  delete fMassRSBkgHistPhi[i];
341  }
342  delete fPtVsMass;
343  delete fPtVsMassPhi;
344  delete fPtVsMassK0st;
345  delete fYVsPt;
346  delete fYVsPtSig;
347  for(Int_t i=0;i<3;i++){
348  delete fHistCentrality[i];
349  delete fHistCentralityMult[i];
350  }
351 
352  delete fnSparse;
353  delete fnSparseIP;
354  if(fFillImpParSparse) {
355  delete fImpParSparse;
356  delete fImpParSparseMC;
357  }
358  for (Int_t i=0; i<4; i++) {
359  delete fnSparseMC[i];
360  if(fFillSparseDplus)delete fnSparseMCDplus[i];
361  }
362  }
363  delete fOutput;
364  delete fListCuts;
365  delete fNtupleDs;
366  delete fCounter;
367  delete fAnalysisCuts;
368 
369 }
370 
371 //________________________________________________________________________
373 {
375 
376  if(fDebug > 1) printf("AnalysisTaskSEDs::Init() \n");
377 
378  fListCuts=new TList();
379  fListCuts->SetOwner();
380  fListCuts->SetName("CutObjects");
381 
383  analysis->SetName("AnalysisCuts");
384 
385  fListCuts->Add(analysis);
386  PostData(2,fListCuts);
387  return;
388 }
389 
390 //________________________________________________________________________
392 {
394  //
395  if(fDebug > 1) printf("AnalysisTaskSEDs::UserCreateOutputObjects() \n");
396 
397  // Several histograms are more conveniently managed in a TList
398  fOutput = new TList();
399  fOutput->SetOwner();
400  fOutput->SetName("OutputHistos");
401 
402  fHistNEvents = new TH1F("hNEvents", "number of events ",15,-0.5,14.5);
403  fHistNEvents->GetXaxis()->SetBinLabel(1,"nEventsRead");
404  fHistNEvents->GetXaxis()->SetBinLabel(2,"nEvents Matched dAOD");
405  fHistNEvents->GetXaxis()->SetBinLabel(3,"nEvents Mismatched dAOD");
406  fHistNEvents->GetXaxis()->SetBinLabel(4,"nEventsAnal");
407  fHistNEvents->GetXaxis()->SetBinLabel(5,"n. passing IsEvSelected");
408  fHistNEvents->GetXaxis()->SetBinLabel(6,"n. rejected due to trigger");
409  fHistNEvents->GetXaxis()->SetBinLabel(7,"n. rejected due to not reco vertex");
410  fHistNEvents->GetXaxis()->SetBinLabel(8,"n. rejected for contr vertex");
411  fHistNEvents->GetXaxis()->SetBinLabel(9,"n. rejected for vertex out of accept");
412  fHistNEvents->GetXaxis()->SetBinLabel(10,"n. rejected for pileup events");
413  fHistNEvents->GetXaxis()->SetBinLabel(11,"no. of out centrality events");
414  fHistNEvents->GetXaxis()->SetBinLabel(12,"no. of 3 prong candidates");
415  fHistNEvents->GetXaxis()->SetBinLabel(13,"no. of Ds after filtering cuts");
416  fHistNEvents->GetXaxis()->SetBinLabel(14,"no. of Ds after selection cuts");
417  fHistNEvents->GetXaxis()->SetBinLabel(15,"no. of not on-the-fly rec Ds");
418 
419  fHistNEvents->GetXaxis()->SetNdivisions(1,kFALSE);
420 
421  fHistNEvents->Sumw2();
422  fHistNEvents->SetMinimum(0);
423  fOutput->Add(fHistNEvents);
424 
425  if(fHistoPtWeight) {
426  fHistoPtWeight->Sumw2();
427  fOutput->Add(fHistoPtWeight);
428  }
429 
430  fHistCentrality[0]=new TH1F("hCentr","centrality",10000,0.,100.);
431  fHistCentrality[1]=new TH1F("hCentr(selectedCent)","centrality(selectedCent)",10000,0.,100.);
432  fHistCentrality[2]=new TH1F("hCentr(OutofCent)","centrality(OutofCent)",10000,0.,100.);
433  fHistCentralityMult[0]=new TH2F("hCentrMult","centrality vs mult",100,0.5,30000.5,40,0.,100.);
434  fHistCentralityMult[1]=new TH2F("hCentrMult(selectedCent)","centrality vs mult(selectedCent)",100,0.5,30000.5,40,0.,100.);
435  fHistCentralityMult[2]=new TH2F("hCentrMult(OutofCent)","centrality vs mult(OutofCent)",100,0.5,30000.5,40,0.,100.);
436  for(Int_t i=0;i<3;i++){
437  fHistCentrality[i]->Sumw2();
438  fOutput->Add(fHistCentrality[i]);
439  fHistCentralityMult[i]->Sumw2();
440  fOutput->Add(fHistCentralityMult[i]);
441  }
442  if(fDoCutV0multTPCout) {
443  fHistAllV0multNTPCout = new TH2F("HistAllV0multNTPCout", "V0mult vs # TPCout (all) ;V0mult ;# TPCout", 1000, 0., 40000, 1000, 0, 30000);
444  fHistSelV0multNTPCout = new TH2F("HistSelV0multNTPCout", "V0mult vs # TPCout (sel) ;V0mult ;# TPCout", 1000, 0., 40000, 1000, 0, 30000);
445  fHistAllV0multNTPCout->Sumw2();
446  fHistSelV0multNTPCout->Sumw2();
449  }
450 
451  Double_t massDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
452 
453  Int_t nInvMassBins=(Int_t)(fMassRange/fMassBinSize+0.5);
454  if(nInvMassBins%2==1) nInvMassBins++;
455  // Double_t minMass=massDs-1.0*nInvMassBins*fMassBinSize;
456  Double_t minMass=massDs-0.5*nInvMassBins*fMassBinSize;
457  // Double_t maxMass=massDs+1.0*nInvMassBins*fMassBinSize;
458  Double_t maxMass=massDs+0.5*nInvMassBins*fMassBinSize;
459  fminMass = minMass;
460  fmaxMass = maxMass;
461 
462  TString hisname;
463  TString htype;
464  Int_t index;
465  for(Int_t iType=0; iType<4; iType++){
466  for(Int_t i=0;i<fNPtBins;i++){
467  if(iType==0){
468  htype="All";
469  index=GetHistoIndex(i);
470  }else if(iType==1){
471  htype="Sig";
472  index=GetSignalHistoIndex(i);
473  }else if(iType==2){
474  htype="Bkg";
475  index=GetBackgroundHistoIndex(i);
476  }else{
477  htype="ReflSig";
478  index=GetReflSignalHistoIndex(i);
479  }
480  hisname.Form("hMass%sPt%d",htype.Data(),i);
481  fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
482  fMassHist[index]->Sumw2();
483  hisname.Form("hMass%sPt%dphi",htype.Data(),i);
484  fMassHistPhi[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
485  fMassHistPhi[index]->Sumw2();
486  hisname.Form("hMass%sPt%dk0st",htype.Data(),i);
487  fMassHistK0st[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
488  fMassHistK0st[index]->Sumw2();
489  hisname.Form("hCosP%sPt%d",htype.Data(),i);
490  fCosPHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
491  fCosPHist[index]->Sumw2();
492  hisname.Form("hCosPxy%sPt%d",htype.Data(),i);
493  fCosPxyHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
494  fCosPxyHist[index]->Sumw2();
495  hisname.Form("hDLen%sPt%d",htype.Data(),i);
496  fDLenHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.5);
497  fDLenHist[index]->Sumw2();
498  hisname.Form("hDLenxy%sPt%d",htype.Data(),i);
499  fDLenxyHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.5);
500  fDLenxyHist[index]->Sumw2();
501  hisname.Form("hNDLenxy%sPt%d",htype.Data(),i);
502  fNDLenxyHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,11.);
503  fNDLenxyHist[index]->Sumw2();
504  hisname.Form("hSumd02%sPt%d",htype.Data(),i);
505  fSumd02Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,1.);
506  fSumd02Hist[index]->Sumw2();
507  hisname.Form("hSigVert%sPt%d",htype.Data(),i);
508  fSigVertHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
509  fSigVertHist[index]->Sumw2();
510  hisname.Form("hPtMax%sPt%d",htype.Data(),i);
511  fPtMaxHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,20.);
512  fPtMaxHist[index]->Sumw2();
513  hisname.Form("hPtCand%sPt%d",htype.Data(),i);
514  fPtCandHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,20.);
515  fPtCandHist[index]->Sumw2();
516  hisname.Form("hDCA%sPt%d",htype.Data(),i);
517  fDCAHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
518  fDCAHist[index]->Sumw2();
519  hisname.Form("hNormIP%sPt%d",htype.Data(),i);
520  fNormIPHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,6.);
521  fNormIPHist[index]->Sumw2();
522  hisname.Form("hCosPiDs%sPt%d",htype.Data(),i);
523  fCosPiDsHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
524  fCosPiDsHist[index]->Sumw2();
525  hisname.Form("hCosPiKPhi%sPt%d",htype.Data(),i);
526  fCosPiKPhiHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.5);
527  fCosPiKPhiHist[index]->Sumw2();
528  hisname.Form("hPtProng0%sPt%d",htype.Data(),i);
529  fPtProng0Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.0,20.);
530  fPtProng0Hist[index]->Sumw2();
531  hisname.Form("hPtProng1%sPt%d",htype.Data(),i);
532  fPtProng1Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.0,20.);
533  fPtProng1Hist[index]->Sumw2();
534  hisname.Form("hPtProng2%sPt%d",htype.Data(),i);
535  fPtProng2Hist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.0,20.);
536  fPtProng2Hist[index]->Sumw2();
537  hisname.Form("hDalitz%sPt%d",htype.Data(),i);
538  fDalitz[index]=new TH2F(hisname.Data(),hisname.Data(),100,0.,2.,100,0.,2.);
539  fDalitz[index]->Sumw2();
540  hisname.Form("hDalitz%sPt%dphi",htype.Data(),i);
541  fDalitzPhi[index]=new TH2F(hisname.Data(),hisname.Data(),100,0.,2.,100,0.,2.);
542  fDalitzPhi[index]->Sumw2();
543  hisname.Form("hDalitz%sPt%dk0st",htype.Data(),i);
544  fDalitzK0st[index]=new TH2F(hisname.Data(),hisname.Data(),100,0.,2.,100,0.,2.);
545  fDalitzK0st[index]->Sumw2();
546  }
547  }
548 
549  for(Int_t i=0; i<4*fNPtBins; i++){
550  fOutput->Add(fMassHist[i]);
551  fOutput->Add(fMassHistPhi[i]);
552  fOutput->Add(fMassHistK0st[i]);
553  fOutput->Add(fPtCandHist[i]);
554  if(fDoCutVarHistos){
555  fOutput->Add(fCosPHist[i]);
556  fOutput->Add(fCosPxyHist[i]);
557  fOutput->Add(fDLenHist[i]);
558  fOutput->Add(fDLenxyHist[i]);
559  fOutput->Add(fNDLenxyHist[i]);
560  fOutput->Add(fSumd02Hist[i]);
561  fOutput->Add(fSigVertHist[i]);
562  fOutput->Add(fPtMaxHist[i]);
563  fOutput->Add(fDCAHist[i]);
564  fOutput->Add(fNormIPHist[i]);
565  fOutput->Add(fCosPiDsHist[i]);
566  fOutput->Add(fCosPiKPhiHist[i]);
567  fOutput->Add(fPtProng0Hist[i]);
568  fOutput->Add(fPtProng1Hist[i]);
569  fOutput->Add(fPtProng2Hist[i]);
570  fOutput->Add(fDalitz[i]);
571  fOutput->Add(fDalitzPhi[i]);
572  fOutput->Add(fDalitzK0st[i]);
573  }
574  }
575 
576  fChanHist[0] = new TH1F("hChanAll", "KKpi and piKK candidates",64,-0.5,63.5);
577  fChanHist[1] = new TH1F("hChanSig", "KKpi and piKK candidates",64,-0.5,63.5);
578  fChanHist[2] = new TH1F("hChanBkg", "KKpi and piKK candidates",64,-0.5,63.5);
579  fChanHist[3] = new TH1F("hChanReflSig", "KKpi and piKK candidates",64,-0.5,63.5);
580  for(Int_t i=0;i<4;i++){
581  fChanHist[i]->Sumw2();
582  fChanHist[i]->SetMinimum(0);
583  fOutput->Add(fChanHist[i]);
584  }
585 
586  fCosPHist3D = new TH3F("fCosPHist3D","CosP vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.5,1.);
587  fCosPxyHist3D = new TH3F("fCosPxyHist3D","CosPxy vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.5,1.);
588  fDLenHist3D = new TH3F("fDLenHist3D","DLen vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,0.5);
589  fDLenxyHist3D = new TH3F("fDLenxyHist3D","DLenxy vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,0.5);
590  fNDLenxyHist3D = new TH3F("fNDLenxyHist3D","NDLenxy vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,11.);
591  fSigVertHist3D = new TH3F("fSigVertHist3D","SigVert vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,0.1);
592  fDCAHist3D = new TH3F("fDCAHist3D","DCA vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,0.1);
593  fNormIPHist3D = new TH3F("fNormIPHist3D","nIP vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,6.);
594  fCosPiDsHist3D = new TH3F("fCosPiDsHist3D","CosPiDs vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.5,1.);
595  fCosPiKPhiHist3D = new TH3F("fCosPiKPhiHist3D","CosPiKPhi vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.,0.5);
596  fPtProng0Hist3D = new TH3F("fPtProng0Hist3D","Pt prong0 vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.0,20.);
597  fPtProng1Hist3D = new TH3F("fPtProng1Hist3D","Pt prong1 vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.0,20.);
598  fPtProng2Hist3D = new TH3F("fPtProng2Hist3D","Pt prong2 vs Ds mass",nInvMassBins,minMass,maxMass,20,0.,20.,100,0.0,20.);
599 
600  if(!fReadMC && fDoCutVarHistos) {
601  fOutput->Add(fCosPHist3D);
602  fOutput->Add(fCosPxyHist3D);
603  fOutput->Add(fDLenHist3D);
604  fOutput->Add(fDLenxyHist3D);
605  fOutput->Add(fNDLenxyHist3D);
606  fOutput->Add(fSigVertHist3D);
607  fOutput->Add(fDCAHist3D);
608  fOutput->Add(fNormIPHist3D);
609  fOutput->Add(fCosPiDsHist3D);
611  fOutput->Add(fPtProng0Hist3D);
612  fOutput->Add(fPtProng1Hist3D);
613  fOutput->Add(fPtProng2Hist3D);
614  }
615 
616  fPtVsMass=new TH2F("hPtVsMass","PtVsMass (prod. cuts)",nInvMassBins,minMass,maxMass,40,0.,20.);
617  fPtVsMassPhi=new TH2F("hPtVsMassPhi","PtVsMass (phi selection)",nInvMassBins,minMass,maxMass,200,0.,20.);
618  fPtVsMassK0st=new TH2F("hPtVsMassK0st","PtVsMass (K0* selection)",nInvMassBins,minMass,maxMass,200,0.,20.);
619  fYVsPt=new TH2F("hYVsPt","YvsPt (prod. cuts)",40,0.,20.,80,-2.,2.);
620  fYVsPtSig=new TH2F("hYVsPtSig","YvsPt (MC, only sig., prod. cuts)",40,0.,20.,80,-2.,2.);
621 
622  for(Int_t i=0;i<fNPtBins;i++){
623  hisname.Form("hMassKKPt%d",i);
624  fMassHistKK[i]=new TH1F(hisname.Data(),hisname.Data(),200,0.95,1.35);
625  fMassHistKK[i]->Sumw2();
626  fOutput->Add(fMassHistKK[i]);
627  hisname.Form("hMassKpiPt%d",i);
628  fMassHistKpi[i]=new TH1F(hisname.Data(),hisname.Data(),200,0.7,1.1);
629  fMassHistKpi[i]->Sumw2();
630  fOutput->Add(fMassHistKpi[i]);
631  if(fDoRotBkg) {
632  hisname.Form("hMassAllPt%dphi_RotBkg",i);
633  fMassRotBkgHistPhi[i]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
634  fMassRotBkgHistPhi[i]->Sumw2();
635  fOutput->Add(fMassRotBkgHistPhi[i]);
636  }
637  if(fDoBkgPhiSB) {
638  hisname.Form("fMassLSBkgHistPhiPt%d",i);
639  fMassLSBkgHistPhi[i]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
640  fMassLSBkgHistPhi[i]->Sumw2();
641  fOutput->Add(fMassLSBkgHistPhi[i]);
642  hisname.Form("fMassRSBkgHistPhiPt%d",i);
643  fMassRSBkgHistPhi[i]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
644  fMassRSBkgHistPhi[i]->Sumw2();
645  fOutput->Add(fMassRSBkgHistPhi[i]);
646  }
647  }
648 
649  fOutput->Add(fPtVsMass);
650  fOutput->Add(fPtVsMassPhi);
651  fOutput->Add(fPtVsMassK0st);
652  fOutput->Add(fYVsPt);
653  fOutput->Add(fYVsPtSig);
654 
655  nInvMassBins=(Int_t)(0.7/fMassBinSize+0.5);
656  minMass=massDs-0.5*nInvMassBins*fMassBinSize;
657  maxMass=massDs+0.5*nInvMassBins*fMassBinSize;
658 
659  Int_t nBinsReco[knVarForSparse] = {nInvMassBins, 20, 30, 14, 14, 20, 10, 10, 14, 6, 6, 12};
660  Double_t xminReco[knVarForSparse] = {minMass, 0., 0., 0., 0., 0., 90., 90., 0., 7., 0., 0.};
661  Double_t xmaxReco[knVarForSparse] = {maxMass, 20., 15, 70., 70., 10., 100., 100., 70., 10., 3., 6.};
662  TString axis[knVarForSparse] = {"invMassDsAllPhi","p_{T}","#Delta Mass(KK)","dlen","dlen_{xy}","normdl_{xy}","cosP","cosP_{xy}","sigVert","cosPiDs","|cosPiKPhi^{3}|","normIP"};
663  if(fSystem == 1) { //pPb,PbPb
664  nInvMassBins=(Int_t)(0.45/fMassBinSize+0.5);
665  minMass=massDs-0.5*nInvMassBins*fMassBinSize;
666  maxMass=massDs+0.5*nInvMassBins*fMassBinSize;
667  nBinsReco[0] = nInvMassBins; //Ds mass
668  xminReco[0] = minMass;
669  xmaxReco[0] = maxMass;
670 
671  nBinsReco[1] = 16; //pt
672  xminReco[1] = 0.;
673  xmaxReco[1] = 16.;
674 
675  nBinsReco[2] = 12; //#Delta Mass(KK)
676  xmaxReco[2] = 12.;
677 
678  nBinsReco[3] = 7; //dlen
679  nBinsReco[4] = 7; //dlenxy
680  nBinsReco[5] = 10; //ndlenxy
681 
682  nBinsReco[6] = 6; //cosP
683  xminReco[6] = 97.;
684  xmaxReco[6] = 100.;
685 
686  nBinsReco[7] = 6; //cosPxy
687  xminReco[7] = 97.;
688  xmaxReco[7] = 100.;
689  }
690 
691  Int_t nBinsAcc[knVarForSparseAcc] = {20, 20};
692  Double_t xminAcc[knVarForSparseAcc] = {0., -10.};
693  Double_t xmaxAcc[knVarForSparseAcc] = {20, 10.};
694 
695  Int_t nBinsIP[knVarForSparseIP] = { 20, 400, 400, 400, 400, 3};
696  Double_t xminIP[knVarForSparseIP] = { 0., -10., -10., -10., -10., 0.};
697  Double_t xmaxIP[knVarForSparseIP] = {20., 10., 10., 10., 10., 3.};
698  TString axisIP[knVarForSparseIP] = {"motherPt","maxNormImp","IP0","IP1","IP2","candType"};
699 
700  if(fFillSparse) {
701 
702  if(fReadMC) {
703  TString label[knVarForSparseAcc] = {"fromC","fromB"};
704  for (Int_t i=0; i<2; i++) {
705  fnSparseMC[i] = new THnSparseF(Form("fnSparseAcc_%s",label[i].Data()),Form("MC nSparse (Acc.Step)- %s",label[i].Data()),
706  knVarForSparseAcc, nBinsAcc, xminAcc, xmaxAcc);
707  fnSparseMC[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
708  fnSparseMC[i]->GetAxis(1)->SetTitle("y");
709  fOutput->Add(fnSparseMC[i]);
710 
711  //Dplus
712  if(fFillSparseDplus) {
713  fnSparseMCDplus[i] = new THnSparseF(Form("fnSparseAccDplus_%s",label[i].Data()),Form("MC nSparse D^{+} (Acc.Step)- %s",label[i].Data()),
714  knVarForSparseAcc, nBinsAcc, xminAcc, xmaxAcc);
715  fnSparseMCDplus[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
716  fnSparseMCDplus[i]->GetAxis(1)->SetTitle("y");
717  fOutput->Add(fnSparseMCDplus[i]);
718  }
719  }
720  for (Int_t i=2; i<4; i++) {
721  fnSparseMC[i] = new THnSparseF(Form("fnSparseReco_%s",label[i-2].Data()),Form("MC nSparse (Reco Step)- %s",label[i-2].Data()),
722  knVarForSparse, nBinsReco, xminReco, xmaxReco);
723  for (Int_t j=0; j<knVarForSparse; j++) {
724  fnSparseMC[i]->GetAxis(j)->SetTitle(Form("%s",axis[j].Data()));
725  }
726  fOutput->Add(fnSparseMC[i]);
727 
728  //Dplus
729  if(fFillSparseDplus) {
730  fnSparseMCDplus[i] = new THnSparseF(Form("fnSparseRecoDplus_%s",label[i-2].Data()),Form("MC nSparse D^{+} (Reco Step)- %s",label[i-2].Data()),
731  knVarForSparse, nBinsReco, xminReco, xmaxReco);
732  for (Int_t j=0; j<knVarForSparse; j++) {
733  fnSparseMCDplus[i]->GetAxis(j)->SetTitle(Form("%s",axis[j].Data()));
734  }
735  fOutput->Add(fnSparseMCDplus[i]);
736  }
737  }
738 
739  fnSparseIP = new THnSparseF("fnSparseIP","nSparseIP", knVarForSparseIP, nBinsIP, xminIP, xmaxIP);
740  for (Int_t j=0; j<knVarForSparseIP; j++) {
741  fnSparseIP->GetAxis(j)->SetTitle(Form("%s",axisIP[j].Data()));
742  }
743  fnSparseIP->GetAxis(5)->SetTitle("candType (0.5=bkg; 1.5=prompt; 2.5=FD)");
744  fOutput->Add(fnSparseIP);
745  }
746  else {
747  fnSparse = new THnSparseF("fnSparse","nSparse", knVarForSparse, nBinsReco, xminReco, xmaxReco);
748  for (Int_t j=0; j<knVarForSparse; j++) {
749  fnSparse->GetAxis(j)->SetTitle(Form("%s",axis[j].Data()));
750  }
751  fOutput->Add(fnSparse);
752  }
753  }
754 
755  if(fFillImpParSparse) {
756  Int_t nBinsImpPar[3] = { 20, 200, 350};
757  Double_t xminImpPar[3] = { 0., 0., 1.6};
758  Double_t xmaxImpPar[3] = {20., 1000., 2.3};
759  TString axisImpPar[3] = {"Pt","imp.par. (#mum)","invMassDsAllPhi"};
760  if(!fReadMC) {
761  fImpParSparse = new THnSparseF("fImpParSparse","ImpParSparse", 3, nBinsImpPar, xminImpPar, xmaxImpPar);
762  for (Int_t j=0; j<3; j++) {
763  fImpParSparse->GetAxis(j)->SetTitle(Form("%s",axisImpPar[j].Data()));
764  }
765  fOutput->Add(fImpParSparse);
766  }
767  else {
768  nBinsImpPar[2] = 3;
769  xminImpPar[2] = 0.;
770  xmaxImpPar[2] = 3.;
771  axisImpPar[2] = "candType (0.5=bkg; 1.5=prompt; 2.5=FD)";
772  fImpParSparseMC = new THnSparseF("fImpParSparseMC","ImpParSparseMC", 3, nBinsImpPar, xminImpPar, xmaxImpPar);
773  for (Int_t j=0; j<3; j++) {
774  fImpParSparseMC->GetAxis(j)->SetTitle(Form("%s",axisImpPar[j].Data()));
775  }
776  fOutput->Add(fImpParSparseMC);
777  }
778  }
779 
780  //Counter for Normalization
781  fCounter = new AliNormalizationCounter("NormalizationCounter");
782  fCounter->Init();
783 
784  PostData(1,fOutput);
785  PostData(3,fCounter);
786 
787  if(fFillNtuple>0){
788  OpenFile(4); // 4 is the slot number of the ntuple
789 
790  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");
791 
792  }
793 
794 
795  return;
796 }
797 
798 //________________________________________________________________________
800 {
803 
804  AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
805 
806  fHistNEvents->Fill(0); // all events
807  if(fAODProtection>=0){
808  // Protection against different number of events in the AOD and deltaAOD
809  // In case of discrepancy the event is rejected.
810  Int_t matchingAODdeltaAODlevel = AliRDHFCuts::CheckMatchingAODdeltaAODevents();
811  if (matchingAODdeltaAODlevel<0 || (matchingAODdeltaAODlevel==0 && fAODProtection==1)) {
812  // AOD/deltaAOD trees have different number of entries || TProcessID do not match while it was required
813  fHistNEvents->Fill(2);
814  return;
815  }
816  fHistNEvents->Fill(1);
817  }
818 
819  TClonesArray *array3Prong = 0;
820  if(!aod && AODEvent() && IsStandardAOD()) {
821  // In case there is an AOD handler writing a standard AOD, use the AOD
822  // event in memory rather than the input (ESD) event.
823  aod = dynamic_cast<AliAODEvent*> (AODEvent());
824  // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
825  // have to taken from the AOD event hold by the AliAODExtension
826  AliAODHandler* aodHandler = (AliAODHandler*)
827  ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
828  if(aodHandler->GetExtensions()) {
829  AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
830  AliAODEvent *aodFromExt = ext->GetAOD();
831  array3Prong=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong");
832  }
833  } else if(aod) {
834  array3Prong=(TClonesArray*)aod->GetList()->FindObject("Charm3Prong");
835  }
836 
837  if(!aod || !array3Prong) {
838  printf("AliAnalysisTaskSEDs::UserExec: Charm3Prong branch not found!\n");
839  return;
840  }
841 
842 
843  // fix for temporary bug in ESDfilter
844  // the AODs with null vertex pointer didn't pass the PhysSel
845  if(!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001) return;
846 
847 
848  fHistNEvents->Fill(3); // count event
849  // Post the data already here
850  PostData(1,fOutput);
851 
853 
854 
855  Bool_t isEvSel=fAnalysisCuts->IsEventSelected(aod);
856  Float_t ntracks=aod->GetNumberOfTracks();
857  Float_t evCentr=fAnalysisCuts->GetCentrality(aod);
858 
859  fHistCentrality[0]->Fill(evCentr);
860  fHistCentralityMult[0]->Fill(ntracks,evCentr);
867  fHistNEvents->Fill(10);
868  fHistCentrality[2]->Fill(evCentr);
869  fHistCentralityMult[2]->Fill(ntracks,evCentr);
870  }
871 
873  Int_t runNumber=aod->GetRunNumber();
874 
875 
876 
877  TClonesArray *arrayMC=0;
878  AliAODMCHeader *mcHeader=0;
879 
880  // AOD primary vertex
881  AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
882  // vtx1->Print();
883 
884  // load MC particles
885  if(fReadMC){
886 
887  arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
888  if(!arrayMC) {
889  printf("AliAnalysisTaskSEDs::UserExec: MC particles branch not found!\n");
890  return;
891  }
892 
893  // load MC header
894  mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
895  if(!mcHeader) {
896  printf("AliAnalysisTaskSEDs::UserExec: MC header branch not found!\n");
897  return;
898  }
899  }
900 
901 
902  if(fReadMC && fFillSparse){
903  if(aod->GetTriggerMask()==0 && (runNumber>=195344 && runNumber<=195677))
904  // protection for events with empty trigger mask in p-Pb
905  return;
907  // events not passing the centrality selection can be removed immediately.
908  return;
909  Double_t zMCVertex = mcHeader->GetVtxZ();
910  if (TMath::Abs(zMCVertex) > fAnalysisCuts->GetMaxVtxZ())
911  return;
912  FillMCGenAccHistos(arrayMC, mcHeader);
913  }
914 
915  if(!isEvSel)return;
916  fHistNEvents->Fill(4);
917  fHistCentrality[1]->Fill(evCentr);
918  fHistCentralityMult[1]->Fill(ntracks,evCentr);
919 
920  if(fDoCutV0multTPCout) {
921  //cut on V0mult. vs #tracks kTPCout
922  Float_t V0mult=0.;
923  AliAODVZERO *aodVZERO = (AliAODVZERO*)aod->GetVZEROData();
924  if(aodVZERO) {
925  for(int ich=0; ich<64;ich++) V0mult += aodVZERO->GetMultiplicity(ich);
926  }
927  Int_t nTPCout=0;
928  for (Int_t i=0;i<aod->GetNumberOfTracks();++i) {
929  AliVTrack *track = aod->GetTrack(i);
930  if (!track) continue;
931  if((track->GetStatus() & AliVTrack::kTPCout)) nTPCout++;
932  }
933  fHistAllV0multNTPCout->Fill(V0mult,nTPCout);
934  if(nTPCout > (0.32*V0mult+750)) return;
935  else fHistSelV0multNTPCout->Fill(V0mult,nTPCout);
936  }
937 
938  Int_t n3Prong = array3Prong->GetEntriesFast();
939  if(fDebug>1) printf("Number of Ds->KKpi: %d\n",n3Prong);
940 
941 
942  Int_t pdgDstoKKpi[3]={321,321,211};
943  Int_t nSelected=0;
944  Int_t nFiltered=0;
945  Double_t massPhi=TDatabasePDG::Instance()->GetParticle(333)->Mass();
946 
947  // vHF object is needed to call the method that refills the missing info of the candidates
948  // if they have been deleted in dAOD reconstruction phase
949  // in order to reduce the size of the file
951 
952  for (Int_t i3Prong = 0; i3Prong < n3Prong; i3Prong++) {
953 
954 
955  AliAODRecoDecayHF3Prong *d = (AliAODRecoDecayHF3Prong*)array3Prong->UncheckedAt(i3Prong);
956  fHistNEvents->Fill(11);
957 
959  continue;
960  }
961  nFiltered++;
962  fHistNEvents->Fill(12);
963 
964  if(!(vHF->FillRecoCand(aod,d))) {
965  fHistNEvents->Fill(14); //monitor how often this fails
966  continue;
967  }
968 
969  Bool_t unsetvtx=kFALSE;
970  if(!d->GetOwnPrimaryVtx()){
971  d->SetOwnPrimaryVtx(vtx1);
972  unsetvtx=kTRUE;
973  // NOTE: the ow primary vertex should be unset, otherwise there is a memory leak
974  // Pay attention if you use continue inside this loop!!!
975  }
976 
977  Bool_t recVtx=kFALSE;
978  AliAODVertex *origownvtx=0x0;
979 
980  Double_t ptCand = d->Pt();
981  Int_t iPtBin=TMath::BinarySearch(fNPtBins,fPtLimits,(Float_t)ptCand);
982  Double_t rapid=d->YDs();
983  fYVsPt->Fill(ptCand,rapid);
984  Bool_t isFidAcc=fAnalysisCuts->IsInFiducialAcceptance(ptCand,rapid);
985 
986  if(isFidAcc){
987 
988  Int_t retCodeAnalysisCuts=fAnalysisCuts->IsSelected(d,AliRDHFCuts::kAll,aod);
989  Int_t retCodeNoRes=retCodeAnalysisCuts;
991  if(origRes){
993  retCodeNoRes=fAnalysisCuts->IsSelected(d,AliRDHFCuts::kAll,aod);
995  }
996  Double_t massKK = 0.;
997 
998  if(retCodeNoRes&1){ //KKpi
999  massKK=d->InvMass2Prongs(0,1,321,321);
1000  Double_t massKp=d->InvMass2Prongs(1,2,321,211);
1001  fMassHistKK[iPtBin]->Fill(massKK);
1002  fMassHistKpi[iPtBin]->Fill(massKp);
1003  }
1004  if(retCodeNoRes&2){ //piKK
1005  massKK=d->InvMass2Prongs(1,2,321,321);
1006  Double_t massKp=d->InvMass2Prongs(0,1,211,321);
1007  fMassHistKK[iPtBin]->Fill(massKK);
1008  fMassHistKpi[iPtBin]->Fill(massKp);
1009  }
1010 
1011  Int_t isKKpi=retCodeAnalysisCuts&1;
1012  Int_t ispiKK=retCodeAnalysisCuts&2;
1013  Int_t isPhiKKpi=retCodeAnalysisCuts&4;
1014  Int_t isPhipiKK=retCodeAnalysisCuts&8;
1015  Int_t isK0starKKpi=retCodeAnalysisCuts&16;
1016  Int_t isK0starpiKK=retCodeAnalysisCuts&32;
1017 
1018  if(retCodeAnalysisCuts>0){
1020  if(d->GetOwnPrimaryVtx()) origownvtx=new AliAODVertex(*d->GetOwnPrimaryVtx());
1021  if(fAnalysisCuts->RecalcOwnPrimaryVtx(d,aod))recVtx=kTRUE;
1022  else fAnalysisCuts->CleanOwnPrimaryVtx(d,aod,origownvtx);
1023  }
1024 
1025 
1026  fHistNEvents->Fill(13);
1027  nSelected++;
1028 
1029  Int_t index=GetHistoIndex(iPtBin);
1030  fPtCandHist[index]->Fill(ptCand);
1031 
1032 
1033  Double_t weightKKpi=1.;
1034  Double_t weightpiKK=1.;
1036  weightKKpi=fAnalysisCuts->GetWeightForKKpi();
1037  weightpiKK=fAnalysisCuts->GetWeightForpiKK();
1038  if(weightKKpi>1. || weightKKpi<0.) weightKKpi=0.;
1039  if(weightpiKK>1. || weightpiKK<0.) weightpiKK=0.;
1040  }
1041 
1042  fChanHist[0]->Fill(retCodeAnalysisCuts);
1043 
1044 
1045  Double_t invMass = 0.;
1046  Int_t indexMCKKpi=-1;
1047  Int_t indexMCpiKK=-1;
1048  Int_t labDs=-1;
1049  Int_t labDplus=-1;
1050  Int_t pdgCode0=-999;
1051  Int_t isMCSignal=-1;
1052 
1053 
1054  if(fReadMC){
1055 
1056  labDs = d->MatchToMC(431,arrayMC,3,pdgDstoKKpi);
1057  labDplus = d->MatchToMC(411,arrayMC,3,pdgDstoKKpi);
1058  if(labDs>=0){
1059  Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
1060  AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(TMath::Abs(labDau0));
1061  pdgCode0=TMath::Abs(p->GetPdgCode());
1062 
1063  if(isKKpi){
1064  if(pdgCode0==321) {
1065  indexMCKKpi=GetSignalHistoIndex(iPtBin);
1066  fYVsPtSig->Fill(ptCand,rapid);
1067  fChanHist[1]->Fill(retCodeAnalysisCuts);
1068  isMCSignal=1;
1069  }else{
1070  indexMCKKpi=GetReflSignalHistoIndex(iPtBin);
1071  fChanHist[3]->Fill(retCodeAnalysisCuts);
1072  isMCSignal=0;
1073  }
1074  }
1075  if(ispiKK){
1076  if(pdgCode0==211) {
1077  indexMCpiKK=GetSignalHistoIndex(iPtBin);
1078  fYVsPtSig->Fill(ptCand,rapid);
1079  fChanHist[1]->Fill(retCodeAnalysisCuts);
1080  isMCSignal=1;
1081  }else{
1082  indexMCpiKK=GetReflSignalHistoIndex(iPtBin);
1083  fChanHist[3]->Fill(retCodeAnalysisCuts);
1084  isMCSignal=0;
1085  }
1086  }
1087  }else{
1088  indexMCpiKK=GetBackgroundHistoIndex(iPtBin);
1089  indexMCKKpi=GetBackgroundHistoIndex(iPtBin);
1090  fChanHist[2]->Fill(retCodeAnalysisCuts);
1091  if(labDplus>=0) {
1092  Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
1093  AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(TMath::Abs(labDau0));
1094  pdgCode0=TMath::Abs(p->GetPdgCode());
1095  }
1096  }
1097  }
1098 
1099  Double_t candType = 0.5; //for bkg
1100  Double_t massPhi=TDatabasePDG::Instance()->GetParticle(333)->Mass();
1101 
1102  if(isKKpi){
1103  if(fDoRotBkg && TMath::Abs(massKK-massPhi)<=fMaxDeltaPhiMass4Rot)GenerateRotBkg(d,1,iPtBin);
1104 
1105  invMass=d->InvMassDsKKpi();
1106  fMassHist[index]->Fill(invMass,weightKKpi);
1107  fPtVsMass->Fill(invMass,ptCand,weightKKpi);
1108 
1109  if(fDoBkgPhiSB && 0.010<TMath::Abs(massKK-massPhi)<0.030) {
1110  if(massKK<massPhi)fMassLSBkgHistPhi[iPtBin]->Fill(invMass);
1111  else fMassRSBkgHistPhi[iPtBin]->Fill(invMass);
1112  }
1113 
1114  if(isPhiKKpi){
1115  fMassHistPhi[index]->Fill(invMass,weightKKpi);
1116  fPtVsMassPhi->Fill(invMass,ptCand,weightKKpi);
1117  }
1118  if(isK0starKKpi){
1119  fMassHistK0st[index]->Fill(invMass,weightKKpi);
1120  fPtVsMassK0st->Fill(invMass,ptCand,weightKKpi);
1121  }
1122  if(fReadMC && indexMCKKpi!=-1){
1123  fMassHist[indexMCKKpi]->Fill(invMass,weightKKpi);
1124  if(isPhiKKpi) {
1125  fMassHistPhi[indexMCKKpi]->Fill(invMass,weightKKpi);
1126  if(fFillSparse) {
1127  if(indexMCKKpi==GetSignalHistoIndex(iPtBin) || labDplus >= 0) {
1128  AliAODMCParticle *partDs;
1129  if(indexMCKKpi==GetSignalHistoIndex(iPtBin)) partDs = (AliAODMCParticle*)arrayMC->At(labDs);
1130  if(labDplus >= 0) partDs = (AliAODMCParticle*)arrayMC->At(labDplus);
1131  Int_t orig = AliVertexingHFUtils::CheckOrigin(arrayMC,partDs,kTRUE);
1132  if(orig==4) {
1133  candType = 1.5;
1134  }
1135  if(orig==5) {
1136  candType = 2.5;
1137  }
1138  }
1139  }
1140  }
1141  if(isK0starKKpi) fMassHistK0st[indexMCKKpi]->Fill(invMass,weightKKpi);
1142  }
1143  if(isPhiKKpi && fFillImpParSparse) {
1144  Double_t impParxy = d->ImpParXY()*10000.;
1145  if(!fReadMC) {
1146  Double_t array4ImpPar[3] = {ptCand,impParxy,invMass};
1147  fImpParSparse->Fill(array4ImpPar);
1148  }
1149  else {
1150  Double_t array4ImpPar[3] = {ptCand,impParxy,candType};
1151  fImpParSparseMC->Fill(array4ImpPar);
1152  }
1153  }
1154  }
1155  if(ispiKK){
1156  if(fDoRotBkg && TMath::Abs(massKK-massPhi)<=fMaxDeltaPhiMass4Rot)GenerateRotBkg(d,2,iPtBin);
1157 
1158  invMass=d->InvMassDspiKK();
1159  fMassHist[index]->Fill(invMass,weightpiKK);
1160  fPtVsMass->Fill(invMass,ptCand,weightpiKK);
1161 
1162  if(fDoBkgPhiSB && 0.010<TMath::Abs(massKK-massPhi)<0.030) {
1163  if(massKK<massPhi)fMassLSBkgHistPhi[iPtBin]->Fill(invMass);
1164  else fMassRSBkgHistPhi[iPtBin]->Fill(invMass);
1165  }
1166 
1167  if(isPhipiKK){
1168  fMassHistPhi[index]->Fill(invMass,weightpiKK);
1169  fPtVsMassPhi->Fill(invMass,ptCand,weightpiKK);
1170  }
1171  if(isK0starpiKK){
1172  fMassHistK0st[index]->Fill(invMass,weightpiKK);
1173  fPtVsMassK0st->Fill(invMass,ptCand,weightpiKK);
1174  }
1175  if(fReadMC && indexMCpiKK!=-1){
1176  fMassHist[indexMCpiKK]->Fill(invMass,weightpiKK);
1177  if(isPhipiKK) {
1178  fMassHistPhi[indexMCpiKK]->Fill(invMass,weightpiKK);
1179  if(fFillSparse) {
1180  if(indexMCpiKK==GetSignalHistoIndex(iPtBin) || labDplus >= 0) {
1181  AliAODMCParticle *partDs;
1182  if(indexMCpiKK==GetSignalHistoIndex(iPtBin)) partDs = (AliAODMCParticle*)arrayMC->At(labDs);
1183  if(labDplus >= 0) partDs = (AliAODMCParticle*)arrayMC->At(labDplus);
1184  Int_t orig = AliVertexingHFUtils::CheckOrigin(arrayMC,partDs,kTRUE);
1185  if(orig==4) {
1186  candType = 1.5;
1187  }
1188  if(orig==5) {
1189  candType = 2.5;
1190  }
1191  }
1192  }
1193  }
1194  if(isK0starpiKK) fMassHistK0st[indexMCpiKK]->Fill(invMass,weightpiKK);
1195  }
1196  if(isPhipiKK && fFillImpParSparse) {
1197  Double_t impParxy = d->ImpParXY()*10000.;
1198  if(!fReadMC) {
1199  Double_t array4ImpPar[3] = {ptCand,impParxy,invMass};
1200  fImpParSparse->Fill(array4ImpPar);
1201  }
1202  else {
1203  Double_t array4ImpPar[3] = {ptCand,impParxy,candType};
1204  fImpParSparseMC->Fill(array4ImpPar);
1205  }
1206  }
1207  }
1208 
1209 
1211 
1212  const Int_t nProng = 3;
1213  Double_t deltaMassKK=999.;
1214  Double_t dlen=d->DecayLength();
1215  Double_t dlenxy=d->DecayLengthXY();
1216  Double_t normdl=d->NormalizedDecayLength();
1217  Double_t normdlxy=d->NormalizedDecayLengthXY();
1218  Double_t cosp=d->CosPointingAngle();
1219  Double_t cospxy=d->CosPointingAngleXY();
1220  Double_t pt0=d->PtProng(0);
1221  Double_t pt1=d->PtProng(1);
1222  Double_t pt2=d->PtProng(2);
1223  Double_t sigvert=d->GetSigmaVert();
1224  Double_t cosPiDs=-99.;
1225  Double_t cosPiKPhi=-99.;
1226  Double_t normIP; //to store the maximum topomatic var. among the 3 prongs
1227  Double_t normIPprong[nProng]; //to store IP of k,k,pi
1228 
1229  Double_t ptWeight = 1.;
1230  if(fFillSparse) {
1231  if (fUseWeight && fHistoPtWeight){
1232  AliDebug(2,"Using Histogram as Pt weight function");
1233  ptWeight = GetPtWeightFromHistogram(ptCand);
1234  }
1235  if(isPhiKKpi) {
1236  Double_t tmpNormIP[nProng];
1237 
1238  invMass = d->InvMassDsKKpi();
1239  massKK = d->InvMass2Prongs(0,1,321,321);
1240  deltaMassKK = TMath::Abs(massKK-massPhi);
1241  cosPiDs = d->CosPiDsLabFrameKKpi();
1242  cosPiKPhi = d->CosPiKPhiRFrameKKpi();
1243  cosPiKPhi = TMath::Abs(cosPiKPhi*cosPiKPhi*cosPiKPhi);
1244 
1245  for(Int_t ip=0; ip<nProng; ip++) {
1246  Double_t diffIP, errdiffIP;
1247  d->Getd0MeasMinusExpProng(ip,aod->GetMagneticField(),diffIP,errdiffIP);
1248  tmpNormIP[ip] = diffIP/errdiffIP;
1249  if(ip==0) normIP = tmpNormIP[ip];
1250  else if(TMath::Abs(tmpNormIP[ip])>TMath::Abs(normIP)) normIP = tmpNormIP[ip];
1251  }
1252  normIPprong[0] = tmpNormIP[0];
1253  normIPprong[1] = tmpNormIP[1];
1254  normIPprong[2] = tmpNormIP[2];
1255 
1256  Double_t var4nSparse[knVarForSparse] = {invMass,ptCand,deltaMassKK*1000,dlen*1000,dlenxy*1000,normdlxy,cosp*100,cospxy*100,
1257  sigvert*1000,cosPiDs*10,cosPiKPhi*10,TMath::Abs(normIP)};
1258 
1259  if(!fReadMC) {
1260  fnSparse->Fill(var4nSparse);
1261  }
1262  else {
1263  if(indexMCKKpi==GetSignalHistoIndex(iPtBin)) {
1264  if(candType==1.5) fnSparseMC[2]->Fill(var4nSparse,ptWeight);
1265  if(candType==2.5) fnSparseMC[3]->Fill(var4nSparse,ptWeight);
1266  }
1267  else if(fFillSparseDplus && labDplus>=0 && pdgCode0==321) {
1268  if(candType==1.5) fnSparseMCDplus[2]->Fill(var4nSparse,ptWeight);
1269  if(candType==2.5) fnSparseMCDplus[3]->Fill(var4nSparse,ptWeight);
1270  }
1271  }
1272  }
1273  if(isPhipiKK) {
1274  Double_t tmpNormIP[nProng];
1275 
1276  invMass = d->InvMassDspiKK();
1277  massKK = d->InvMass2Prongs(1,2,321,321);
1278  deltaMassKK = TMath::Abs(massKK-massPhi);
1279  cosPiDs = d->CosPiDsLabFramepiKK();
1280  cosPiKPhi = d->CosPiKPhiRFramepiKK();
1281  cosPiKPhi = TMath::Abs(cosPiKPhi*cosPiKPhi*cosPiKPhi);
1282 
1283  for(Int_t ip=0; ip<nProng; ip++) {
1284  Double_t diffIP, errdiffIP;
1285  d->Getd0MeasMinusExpProng(ip,aod->GetMagneticField(),diffIP,errdiffIP);
1286  tmpNormIP[ip] = diffIP/errdiffIP;
1287  if(ip==0) normIP = tmpNormIP[ip];
1288  else if(TMath::Abs(tmpNormIP[ip])>TMath::Abs(normIP)) normIP = tmpNormIP[ip];
1289  }
1290 
1291  normIPprong[0] = tmpNormIP[2];
1292  normIPprong[1] = tmpNormIP[1];
1293  normIPprong[2] = tmpNormIP[0];
1294 
1295  Double_t var4nSparse[knVarForSparse] = {invMass,ptCand,deltaMassKK*1000,dlen*1000,dlenxy*1000,normdlxy,cosp*100,cospxy*100,
1296  sigvert*1000,cosPiDs*10,cosPiKPhi*10,TMath::Abs(normIP)};
1297 
1298  if(!fReadMC) {
1299  fnSparse->Fill(var4nSparse);
1300  }
1301  else {
1302  if(indexMCpiKK==GetSignalHistoIndex(iPtBin)) {
1303  if(candType==1.5) fnSparseMC[2]->Fill(var4nSparse,ptWeight);
1304  if(candType==2.5) fnSparseMC[3]->Fill(var4nSparse,ptWeight);
1305  }
1306  else if(fFillSparseDplus && labDplus>=0 && pdgCode0==211) {
1307  if(candType==1.5) fnSparseMCDplus[2]->Fill(var4nSparse,ptWeight);
1308  if(candType==2.5) fnSparseMCDplus[3]->Fill(var4nSparse,ptWeight);
1309  }
1310  }
1311  }
1312 
1313  if(fReadMC && (isPhiKKpi || isPhiKKpi)) {
1314  Double_t var[6] = {ptCand,normIP,normIPprong[0],normIPprong[1],normIPprong[2],candType};
1315  fnSparseIP->Fill(var);
1316  }
1317  }
1319 
1320  if(fDoCutVarHistos){
1321  Double_t sumD02=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
1322  Double_t dca=d->GetDCA();
1323  Double_t ptmax=0;
1324 
1325  for(Int_t i=0;i<3;i++){
1326  if(d->PtProng(i)>ptmax)ptmax=d->PtProng(i);
1327  }
1328  fCosPHist[index]->Fill(cosp);
1329  fCosPxyHist[index]->Fill(cospxy);
1330  fDLenHist[index]->Fill(dlen);
1331  fDLenxyHist[index]->Fill(dlenxy);
1332  fNDLenxyHist[index]->Fill(normdlxy);
1333  fSigVertHist[index]->Fill(sigvert);
1334  fSumd02Hist[index]->Fill(sumD02);
1335  fPtMaxHist[index]->Fill(ptmax);
1336  fDCAHist[index]->Fill(dca);
1337  fNormIPHist[index]->Fill(normIP);
1338  fCosPiDsHist[index]->Fill(cosPiDs);
1339  fCosPiKPhiHist[index]->Fill(cosPiKPhi);
1340  fPtProng0Hist[index]->Fill(pt0);
1341  fPtProng1Hist[index]->Fill(pt1);
1342  fPtProng2Hist[index]->Fill(pt2);
1343  if(!fReadMC) {
1344  fCosPHist3D->Fill(invMass,ptCand,cosp);
1345  fCosPxyHist3D->Fill(invMass,ptCand,cospxy);
1346  fDLenHist3D->Fill(invMass,ptCand,dlen);
1347  fDLenxyHist3D->Fill(invMass,ptCand,dlenxy);
1348  fNDLenxyHist3D->Fill(invMass,ptCand,normdlxy);
1349  fSigVertHist3D->Fill(invMass,ptCand,sigvert);
1350  fDCAHist3D->Fill(invMass,ptCand,dca);
1351  fNormIPHist3D->Fill(invMass,ptCand,normIP);
1352  fCosPiDsHist3D->Fill(invMass,ptCand,cosPiDs);
1353  fCosPiKPhiHist3D->Fill(invMass,ptCand,cosPiKPhi);
1354  fPtProng0Hist3D->Fill(invMass,ptCand,pt0);
1355  fPtProng1Hist3D->Fill(invMass,ptCand,pt1);
1356  fPtProng2Hist3D->Fill(invMass,ptCand,pt2);
1357  }
1358  if(isKKpi){
1359  Double_t massKK=d->InvMass2Prongs(0,1,321,321);
1360  Double_t massKp=d->InvMass2Prongs(1,2,321,211);
1361  fDalitz[index]->Fill(massKK,massKp);
1362  if(isPhiKKpi) fDalitzPhi[index]->Fill(massKK,massKp);
1363  if(isK0starKKpi) fDalitzK0st[index]->Fill(massKK,massKp);
1364  if(fReadMC && indexMCKKpi!=-1){
1365  fDalitz[indexMCKKpi]->Fill(massKK,massKp);
1366  if(isPhiKKpi) fDalitzPhi[indexMCKKpi]->Fill(massKK,massKp);
1367  if(isK0starKKpi) fDalitzK0st[indexMCKKpi]->Fill(massKK,massKp);
1368  fCosPHist[indexMCKKpi]->Fill(cosp);
1369  fCosPxyHist[indexMCKKpi]->Fill(cospxy);
1370  fDLenHist[indexMCKKpi]->Fill(dlen);
1371  fDLenxyHist[indexMCKKpi]->Fill(dlenxy);
1372  fNDLenxyHist[indexMCKKpi]->Fill(normdlxy);
1373  fSigVertHist[indexMCKKpi]->Fill(sigvert);
1374  fSumd02Hist[indexMCKKpi]->Fill(sumD02);
1375  fPtMaxHist[indexMCKKpi]->Fill(ptmax);
1376  fPtCandHist[indexMCKKpi]->Fill(ptCand);
1377  fDCAHist[indexMCKKpi]->Fill(dca);
1378  fNormIPHist[indexMCKKpi]->Fill(normIP);
1379  fCosPiDsHist[indexMCKKpi]->Fill(cosPiDs);
1380  fCosPiKPhiHist[indexMCKKpi]->Fill(cosPiKPhi);
1381  fPtProng0Hist[indexMCKKpi]->Fill(pt0);
1382  fPtProng1Hist[indexMCKKpi]->Fill(pt1);
1383  fPtProng2Hist[indexMCKKpi]->Fill(pt2);
1384  }
1385  }
1386  if(ispiKK){
1387  Double_t massKK=d->InvMass2Prongs(1,2,321,321);
1388  Double_t massKp=d->InvMass2Prongs(0,1,211,321);
1389  fDalitz[index]->Fill(massKK,massKp);
1390  if(isPhipiKK) fDalitzPhi[index]->Fill(massKK,massKp);
1391  if(isK0starpiKK) fDalitzK0st[index]->Fill(massKK,massKp);
1392 
1393 
1394  if(fReadMC && indexMCpiKK!=-1){
1395  fDalitz[indexMCpiKK]->Fill(massKK,massKp);
1396  if(isPhipiKK) fDalitzPhi[indexMCpiKK]->Fill(massKK,massKp);
1397  if(isK0starpiKK) fDalitzK0st[indexMCpiKK]->Fill(massKK,massKp);
1398  fCosPHist[indexMCpiKK]->Fill(cosp);
1399  fCosPxyHist[indexMCpiKK]->Fill(cospxy);
1400  fDLenHist[indexMCpiKK]->Fill(dlen);
1401  fDLenxyHist[indexMCpiKK]->Fill(dlenxy);
1402  fNDLenxyHist[indexMCpiKK]->Fill(normdlxy);
1403  fSigVertHist[indexMCpiKK]->Fill(sigvert);
1404  fSumd02Hist[indexMCpiKK]->Fill(sumD02);
1405  fPtMaxHist[indexMCpiKK]->Fill(ptmax);
1406  fPtCandHist[indexMCpiKK]->Fill(ptCand);
1407  fDCAHist[indexMCpiKK]->Fill(dca);
1408  fNormIPHist[indexMCpiKK]->Fill(normIP);
1409  fCosPiDsHist[indexMCpiKK]->Fill(cosPiDs);
1410  fCosPiKPhiHist[indexMCpiKK]->Fill(cosPiKPhi);
1411  fPtProng0Hist[indexMCpiKK]->Fill(pt0);
1412  fPtProng1Hist[indexMCpiKK]->Fill(pt1);
1413  fPtProng2Hist[indexMCpiKK]->Fill(pt2);
1414  }
1415  }
1416  }
1417 
1418  Float_t tmp[37];
1419  if(fFillNtuple>0){
1420 
1421  if ((fFillNtuple==1 && (isPhiKKpi || isPhipiKK)) || (fFillNtuple==2 && (isK0starKKpi || isK0starpiKK)) || (fFillNtuple==3 && (isKKpi || ispiKK))){
1422 
1423  AliAODTrack *track0=(AliAODTrack*)d->GetDaughter(0);
1424  AliAODTrack *track1=(AliAODTrack*)d->GetDaughter(1);
1425  AliAODTrack *track2=(AliAODTrack*)d->GetDaughter(2);
1426 
1427  UInt_t bitMapPIDTrack0=fAnalysisCuts->GetPIDTrackTPCTOFBitMap(track0);
1428  UInt_t bitMapPIDTrack1=fAnalysisCuts->GetPIDTrackTPCTOFBitMap(track1);
1429  UInt_t bitMapPIDTrack2=fAnalysisCuts->GetPIDTrackTPCTOFBitMap(track2);
1430 
1431  tmp[0]=Float_t(labDs);
1432  if(fReadMC && fWriteOnlySignal) tmp[0]=Float_t(isMCSignal);
1433  tmp[1]=Float_t(retCodeAnalysisCuts);
1434  tmp[2]=Float_t(pdgCode0);
1435  tmp[3]=d->PtProng(0);
1436  tmp[4]=d->PtProng(1);
1437  tmp[5]=d->PtProng(2);
1438  tmp[6]=d->Pt();
1439  tmp[7]=d->PProng(0);
1440  tmp[8]=d->PProng(1);
1441  tmp[9]=d->PProng(2);
1442  tmp[10]=Int_t(bitMapPIDTrack0);
1443  tmp[11]=Int_t(bitMapPIDTrack1);
1444  tmp[12]=Int_t(bitMapPIDTrack2);
1445  tmp[13]=d->CosPointingAngle();
1446  tmp[14]=d->CosPointingAngleXY();
1447  tmp[15]=d->DecayLength();
1448  tmp[16]=d->DecayLengthXY();
1449  tmp[17]=d->NormalizedDecayLength();
1450  tmp[18]=d->NormalizedDecayLengthXY();
1451  tmp[19]=d->InvMassDsKKpi();
1452  tmp[20]=d->InvMassDspiKK();
1453  tmp[21]=d->GetSigmaVert();
1454  tmp[22]=d->Getd0Prong(0);
1455  tmp[23]=d->Getd0Prong(1);
1456  tmp[24]=d->Getd0Prong(2);
1457  tmp[25]=d->GetDCA();
1458  tmp[26]=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
1459  tmp[27]=d->InvMass2Prongs(0,1,321,321);
1460  tmp[28]=d->InvMass2Prongs(1,2,321,321);
1461  tmp[29]=d->InvMass2Prongs(1,2,321,211);
1462  tmp[30]=d->InvMass2Prongs(0,1,211,321);
1463  tmp[31]=d->CosPiDsLabFrameKKpi();
1464  tmp[32]=d->CosPiDsLabFramepiKK();
1465  tmp[33]=d->CosPiKPhiRFrameKKpi();
1466  tmp[34]=d->CosPiKPhiRFramepiKK();
1467  tmp[35]=(Float_t)(centrality);
1468  tmp[36]=(Float_t)(runNumber);
1469 
1470  if(fReadMC && fWriteOnlySignal){
1471  if(isMCSignal>=0) fNtupleDs->Fill(tmp);
1472  }else{
1473  fNtupleDs->Fill(tmp);
1474  }
1475  PostData(4,fNtupleDs);
1476  }
1477  }
1478  } //if(retCodeAnalysisCuts
1479  } // if(isFidAcc)
1480 
1481  if(unsetvtx) d->UnsetOwnPrimaryVtx();
1482  if(recVtx)fAnalysisCuts->CleanOwnPrimaryVtx(d,aod,origownvtx);
1483  }
1484 
1485  fCounter->StoreCandidates(aod,nFiltered,kTRUE);
1486  fCounter->StoreCandidates(aod,nSelected,kFALSE);
1487 
1488  delete vHF;
1489 
1490  PostData(1,fOutput);
1491  PostData(3,fCounter);
1492 
1493  return;
1494 }
1495 
1496 //_________________________________________________________________
1497 
1499 {
1501  //
1502  if(fDebug > 1) printf("AnalysisTaskSEDs: Terminate() \n");
1503  fOutput = dynamic_cast<TList*> (GetOutputData(1));
1504  if (!fOutput) {
1505  printf("ERROR: fOutput not available\n");
1506  return;
1507  }
1508  fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("hNEvents"));
1509  if(fHistNEvents){
1510  printf("Number of analyzed events = %d\n",(Int_t)fHistNEvents->GetBinContent(2));
1511  }else{
1512  printf("ERROR: fHistNEvents not available\n");
1513  return;
1514  }
1515  return;
1516 }
1517 
1518 //_________________________________________________________________
1519 void AliAnalysisTaskSEDs::FillMCGenAccHistos(TClonesArray *arrayMC, AliAODMCHeader *mcHeader){
1521 
1522  Int_t nProng = 3;
1523  Double_t zMCVertex = mcHeader->GetVtxZ(); //vertex MC
1524  if(TMath::Abs(zMCVertex) <= fAnalysisCuts->GetMaxVtxZ()) {
1525  for(Int_t iPart=0; iPart<arrayMC->GetEntriesFast(); iPart++){
1526 
1527  AliAODMCParticle* mcPart = dynamic_cast<AliAODMCParticle*>(arrayMC->At(iPart));
1528 
1529  if(TMath::Abs(mcPart->GetPdgCode()) == 431) {
1530  Int_t orig = AliVertexingHFUtils::CheckOrigin(arrayMC,mcPart,kTRUE);//Prompt = 4, FeedDown = 5
1531 
1532  Int_t deca = 0;
1533  Bool_t isGoodDecay = kFALSE;
1534  Int_t labDau[3] = {-1,-1,-1};
1535  Bool_t isFidAcc = kFALSE;
1536  Bool_t isDaugInAcc = kFALSE;
1537 
1538  deca = AliVertexingHFUtils::CheckDsDecay(arrayMC,mcPart,labDau);
1539  if(deca == 1) isGoodDecay=kTRUE; // == 1 -> Phi pi -> kkpi
1540 
1541  if(labDau[0]==-1) continue; //protection against unfilled array of labels
1542 
1543  if(isGoodDecay) {
1544  Double_t pt = mcPart->Pt();
1545  Double_t rapid = mcPart->Y();
1546  isFidAcc = fAnalysisCuts->IsInFiducialAcceptance(pt,rapid);
1547  isDaugInAcc = CheckDaugAcc(arrayMC,nProng,labDau);
1548 
1549  Double_t ptWeight = 1.;
1550  if (fUseWeight && fHistoPtWeight){
1551  AliDebug(2,"Using Histogram as Pt weight function");
1552  ptWeight = GetPtWeightFromHistogram(pt);
1553  }
1554 
1555  if(isFidAcc) {
1556  Double_t var4nSparseAcc[2] = {pt,rapid*10};
1557  if(isDaugInAcc) {
1558  if(orig==4) fnSparseMC[0]->Fill(var4nSparseAcc,ptWeight);
1559  if(orig==5) fnSparseMC[1]->Fill(var4nSparseAcc,ptWeight);
1560  }
1561  }
1562  }
1563  }
1564 
1565  if(fFillSparseDplus && TMath::Abs(mcPart->GetPdgCode()) == 411) {
1566  Int_t orig = AliVertexingHFUtils::CheckOrigin(arrayMC,mcPart,kTRUE);//Prompt = 4, FeedDown = 5
1567 
1568  Int_t deca = 0;
1569  Bool_t isGoodDecay = kFALSE;
1570  Int_t labDau[3] = {-1,-1,-1};
1571  Bool_t isFidAcc = kFALSE;
1572  Bool_t isDaugInAcc = kFALSE;
1573 
1574  deca = AliVertexingHFUtils::CheckDplusKKpiDecay(arrayMC,mcPart,labDau);
1575  if(deca == 1) isGoodDecay=kTRUE; // == 1 -> Phi pi -> kkpi
1576 
1577  if(labDau[0]==-1) continue; //protection against unfilled array of labels
1578 
1579  if(isGoodDecay) {
1580  Double_t pt = mcPart->Pt();
1581  Double_t rapid = mcPart->Y();
1582  isFidAcc = fAnalysisCuts->IsInFiducialAcceptance(pt,rapid);
1583  isDaugInAcc = CheckDaugAcc(arrayMC,nProng,labDau);
1584 
1585  Double_t ptWeight = 1.;
1586  if (fUseWeight && fHistoPtWeight){
1587  AliDebug(2,"Using Histogram as Pt weight function");
1588  ptWeight = GetPtWeightFromHistogram(pt);
1589  }
1590 
1591  if(isFidAcc) {
1592  Double_t var4nSparseAcc[2] = {pt,rapid*10};
1593  if(isDaugInAcc) {
1594  if(orig==4) fnSparseMCDplus[0]->Fill(var4nSparseAcc,ptWeight);
1595  if(orig==5) fnSparseMCDplus[1]->Fill(var4nSparseAcc,ptWeight);
1596  }
1597  }
1598  }
1599  }
1600  }
1601  }
1602 }
1603 //_________________________________________________________________
1604 Bool_t AliAnalysisTaskSEDs::CheckDaugAcc(TClonesArray* arrayMC,Int_t nProng, Int_t *labDau){
1606 
1607  for (Int_t iProng = 0; iProng<nProng; iProng++){
1608  AliAODMCParticle* mcPartDaughter=dynamic_cast<AliAODMCParticle*>(arrayMC->At(labDau[iProng]));
1609  if(!mcPartDaughter) {
1610  return kFALSE;
1611  }
1612  Double_t eta = mcPartDaughter->Eta();
1613  Double_t pt = mcPartDaughter->Pt();
1614  if (TMath::Abs(eta) > 0.9 || pt < 0.1) {
1615  return kFALSE;
1616  }
1617  }
1618  return kTRUE;
1619 }
1620 
1621 //_________________________________________________________________
1622 
1624 
1625  const Int_t nprongs = 3;
1626  Double_t PxProng[nprongs], PyProng[nprongs], PtProng[nprongs], PzProng[nprongs], P2Prong[nprongs], mProng[nprongs];
1627  Double_t Px, Py, Pz, P2;
1628  UInt_t pdg[3]={321,321,211};
1629  int idPion = 2;
1630  if(dec==2) {
1631  pdg[0]=211;
1632  pdg[2]=321;
1633  idPion = 0;
1634  }
1635 
1636  for (Int_t ip=0; ip<nprongs; ip++) {
1637  PxProng[ip] = d->PxProng(ip);
1638  PyProng[ip] = d->PxProng(ip);
1639  PtProng[ip] = d->PtProng(ip);
1640  PzProng[ip] = d->PzProng(ip);
1641  P2Prong[ip] = d->P2Prong(ip);
1642  mProng[ip] = TDatabasePDG::Instance()->GetParticle(pdg[ip])->Mass();
1643  }
1644 
1645  for(Int_t i=0; i<9; i++) { //9 rotations implemented for the pion track around Pi
1646  Px = 0.;
1647  Py = 0.;
1648  Pz = 0.;
1649 
1650  Double_t phirot=TMath::Pi()*(5/6.+1/27.*i);
1651 
1652  PxProng[idPion] = PxProng[idPion]*TMath::Cos(phirot)-PyProng[idPion]*TMath::Sin(phirot);
1653  PyProng[idPion] = PxProng[idPion]*TMath::Sin(phirot)+PyProng[idPion]*TMath::Cos(phirot);
1654 
1655  for (Int_t j=0; j<nprongs; j++) {
1656  Px += PxProng[j];
1657  Py += PyProng[j];
1658  Pz += PzProng[j];
1659  }
1660  P2 = Px*Px + Py*Py + Pz*Pz;
1661 
1662  Double_t energysum = 0.;
1663  for(Int_t j=0; j<nprongs; j++) {
1664  energysum += TMath::Sqrt(mProng[j]*mProng[j]+P2Prong[j]);
1665  }
1666  Double_t mass = TMath::Sqrt(energysum*energysum-P2);
1667  if(fminMass<=mass<fmaxMass) fMassRotBkgHistPhi[iPtBin]->Fill(mass);
1668  }
1669 }
1670 //_________________________________________________________________________
1672  // weight function from the ratio of the LHC16i2a MC
1673  // 1.5-14 GeV/c using data and 1-1.5, 14-50 GeV/c using FONLL calculations
1674 
1675  if(fHistoPtWeight) delete fHistoPtWeight;
1676  fHistoPtWeight = new TH1F("histoWeight","histoWeight",500,0.,50.);
1677  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};
1678  for(Int_t i=0; i<500; i++){
1679  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1680  }
1681  //SetWeightHistogram();
1682  fUseWeight=kTRUE;
1683 }
1684 
1685 //_________________________________________________________________________
1687  // weight function from the ratio of the LHC16i2a+b+c MC
1688  // and FONLL calculations for pp data
1689 
1690  if(fHistoPtWeight) delete fHistoPtWeight;
1691  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1692  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};
1693  for(Int_t i=0; i<400; i++){
1694  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1695  }
1696  //SetWeightHistogram();
1697  fUseWeight=kTRUE;
1698 }
1699 
1700 //_________________________________________________________________________
1702  // weight function from the ratio of the LHC16i2a+b+c MC
1703  // and FONLL calculations for pp data
1704  // corrected by the BAMPS Raa calculation for 30-50% CC
1705  if(fHistoPtWeight) delete fHistoPtWeight;
1706  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1707  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};
1708  for(Int_t i=0; i<400; i++){
1709  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1710  }
1711  fUseWeight=kTRUE;
1712 }
1713 
1714 //_________________________________________________________________________
1716  // weight function from the ratio of the LHC16i2a+b+c MC
1717  // and FONLL calculations for pp data
1718  // corrected by the TAMU Raa calculation for 0-10% CC (not available in 30-50% CC)
1719  if(fHistoPtWeight) delete fHistoPtWeight;
1720  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1721  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};
1722  for(Int_t i=0; i<400; i++){
1723  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1724  }
1725  fUseWeight=kTRUE;
1726 }
1727 
1728 //_________________________________________________________________________
1730 {
1731  //
1732  // Using an histogram as weight function
1733  // weight = 0 in the range outside the function
1734  //
1735  Double_t weight = 0.0;
1736  Int_t histoNbins = fHistoPtWeight->GetNbinsX();
1737  Int_t bin2 = fHistoPtWeight->FindBin(pt);
1738  if( (bin2>0) && (bin2<=histoNbins) ) {
1739  Int_t bin1=bin2-1;
1740  Int_t bin3=bin2+1;
1741  if(bin2==1) bin1=bin2+2;
1742  if(bin2==histoNbins) bin3=bin2-2;
1743  Float_t x_1=fHistoPtWeight->GetXaxis()->GetBinCenter(bin1);
1744  Float_t x_2=fHistoPtWeight->GetXaxis()->GetBinCenter(bin2);
1745  Float_t x_3=fHistoPtWeight->GetXaxis()->GetBinCenter(bin3);
1746  Float_t y_1=fHistoPtWeight->GetBinContent(bin1);
1747  Float_t y_2=fHistoPtWeight->GetBinContent(bin2);
1748  Float_t y_3=fHistoPtWeight->GetBinContent(bin3);
1749  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) );
1750  Double_t b=((y_1-y_2)-a*(x_1*x_1-x_2*x_2))/(x_1-x_2);
1751  Double_t c=y_3-a*(x_3*x_3)-b*x_3;
1752  weight = a*pt*pt+b*pt+c;
1753  }
1754  return weight;
1755 }
1756 
1757 
1758 
1759 
1760 
1761 
1762 
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
TH1F * fHistoPtWeight
! user-defined histogram to calculate the Pt weights
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)
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()
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
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 decide whether to use pt-weights != 1 when filling the container or not
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]