]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/AliAnalysisTaskSESelectHF4Prong.cxx
Analysis code for D0->4prong (Fabio)
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSESelectHF4Prong.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2008, 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 /////////////////////////////////////////////////////////////
17 //
18 // AliAnalysisTaskSE for the selection of heavy flavor
19 // decay candidates and creation a stand-alone AOD for 
20 // 4prong D0 decay.
21 //
22 // Author: A.Dainese, andrea.dainese@lnl.infn.it
23 //         F.Colamaria, fabio.colamaria@ba.infn.it
24 /////////////////////////////////////////////////////////////
25
26
27 #include "Riostream.h"
28 #include "TFile.h"
29 #include "TList.h"
30 #include "TH1F.h"
31 #include "TH2F.h"
32 #include "TClonesArray.h"
33 #include "TDatabasePDG.h"
34 #include "TROOT.h"
35 #include "TCanvas.h"
36 #include "TBits.h" 
37 #include "TNtuple.h"
38
39 #include "AliAnalysisDataSlot.h"
40 #include "AliAnalysisDataContainer.h"
41 #include "AliAnalysisManager.h"
42 #include "AliAODHandler.h"
43 #include "AliAODEvent.h"
44 #include "AliAODVertex.h"
45 #include "AliAODTrack.h"
46 #include "AliAODRecoDecayHF4Prong.h"
47 #include "AliAnalysisVertexingHF.h"
48 #include "AliAnalysisTaskSE.h"
49 #include "AliAnalysisTaskSESelectHF4Prong.h"
50 #include "AliAODPidHF.h"
51 #include "AliRDHFCuts.h"
52
53 ClassImp(AliAnalysisTaskSESelectHF4Prong)
54
55
56 //________________________________________________________________________
57 AliAnalysisTaskSESelectHF4Prong::AliAnalysisTaskSESelectHF4Prong():
58 AliAnalysisTaskSE(),
59 fVerticesHFTClArr(0),
60 fCharm4ProngTClArr(0),
61 fOutput(0),
62 fOutput2(0),
63 fOutput3(0),
64 fOutput4(0),
65 fOutput5(0),
66 fOutputC(0),
67 fhInvMassD0Sum_10Mev_Bin1(0),
68 fhInvMassD0barSum_10Mev_Bin1(0),
69 fhInvMassSumAll_10Mev_Bin1(0),
70 fhInvMassD0Sum_5Mev_Bin1(0),
71 fhInvMassD0barSum_5Mev_Bin1(0),
72 fhInvMassSumAll_5Mev_Bin1(0),
73 fhInvMassD0Sum_10Mev_Bin2(0),
74 fhInvMassD0barSum_10Mev_Bin2(0),
75 fhInvMassSumAll_10Mev_Bin2(0),
76 fhInvMassD0Sum_5Mev_Bin2(0),
77 fhInvMassD0barSum_5Mev_Bin2(0),
78 fhInvMassSumAll_5Mev_Bin2(0),
79 fhInvMassD0Sum_10Mev_Bin3(0),
80 fhInvMassD0barSum_10Mev_Bin3(0),
81 fhInvMassSumAll_10Mev_Bin3(0),
82 fhInvMassD0Sum_5Mev_Bin3(0),
83 fhInvMassD0barSum_5Mev_Bin3(0),
84 fhInvMassSumAll_5Mev_Bin3(0),
85 fhInvMassD0Sum_10Mev_Bin4(0),
86 fhInvMassD0barSum_10Mev_Bin4(0),
87 fhInvMassSumAll_10Mev_Bin4(0),
88 fhInvMassD0Sum_5Mev_Bin4(0),
89 fhInvMassD0barSum_5Mev_Bin4(0),
90 fhInvMassSumAll_5Mev_Bin4(0),
91 fhInvMassD0Sum_10Mev_Bin5(0),
92 fhInvMassD0barSum_10Mev_Bin5(0),
93 fhInvMassSumAll_10Mev_Bin5(0),
94 fhInvMassD0Sum_5Mev_Bin5(0),
95 fhInvMassD0barSum_5Mev_Bin5(0),
96 fhInvMassSumAll_5Mev_Bin5(0),
97 fhInvMassMultipleOnly_Bin1(0),
98 fhInvMassMultipleOnly_Bin2(0),
99 fhInvMassMultipleOnly_Bin3(0),
100 fhInvMassMultipleOnly_Bin4(0),
101 fhInvMassMultipleOnly_Bin5(0),
102 fScatterP4PID(0),
103 fPtVsY(0),
104 fPtVsYAll(0),
105 fEventCounter(0),
106 fCutDCA(0),
107 fCutDCA3(0),
108 fCutDCA2(0),
109 fCutDCA5(0),
110 fCutVertexDist2(0),
111 fCutVertexDist3(0),
112 fCutVertexDist4(0),
113 fCutCosinePoint(0),
114 fCutPt(0),
115 fCutY(0),
116 fPIDSel(0),
117 fPIDSel_Bin1(0),
118 fPIDSel_Bin2(0),
119 fPIDSel_Bin3(0),
120 fPIDSel_Bin4(0),
121 fPIDSel_Bin5(0),
122 fMultipleHyps(0),
123 fMultipleHypsType(0),
124 fPtSel(0),
125 fCuts(0),
126 fVHF(0)
127 {
128   // Default constructor
129 }
130
131 //________________________________________________________________________
132 AliAnalysisTaskSESelectHF4Prong::AliAnalysisTaskSESelectHF4Prong(const char *name,AliRDHFCutsD0toKpipipi* cuts):
133 AliAnalysisTaskSE(name),
134 fVerticesHFTClArr(0),
135 fCharm4ProngTClArr(0),
136 fOutput(0),
137 fOutput2(0),
138 fOutput3(0),
139 fOutput4(0),
140 fOutput5(0),
141 fOutputC(0),
142 fhInvMassD0Sum_10Mev_Bin1(0),
143 fhInvMassD0barSum_10Mev_Bin1(0),
144 fhInvMassSumAll_10Mev_Bin1(0),
145 fhInvMassD0Sum_5Mev_Bin1(0),
146 fhInvMassD0barSum_5Mev_Bin1(0),
147 fhInvMassSumAll_5Mev_Bin1(0),
148 fhInvMassD0Sum_10Mev_Bin2(0),
149 fhInvMassD0barSum_10Mev_Bin2(0),
150 fhInvMassSumAll_10Mev_Bin2(0),
151 fhInvMassD0Sum_5Mev_Bin2(0),
152 fhInvMassD0barSum_5Mev_Bin2(0),
153 fhInvMassSumAll_5Mev_Bin2(0),
154 fhInvMassD0Sum_10Mev_Bin3(0),
155 fhInvMassD0barSum_10Mev_Bin3(0),
156 fhInvMassSumAll_10Mev_Bin3(0),
157 fhInvMassD0Sum_5Mev_Bin3(0),
158 fhInvMassD0barSum_5Mev_Bin3(0),
159 fhInvMassSumAll_5Mev_Bin3(0),
160 fhInvMassD0Sum_10Mev_Bin4(0),
161 fhInvMassD0barSum_10Mev_Bin4(0),
162 fhInvMassSumAll_10Mev_Bin4(0),
163 fhInvMassD0Sum_5Mev_Bin4(0),
164 fhInvMassD0barSum_5Mev_Bin4(0),
165 fhInvMassSumAll_5Mev_Bin4(0),
166 fhInvMassD0Sum_10Mev_Bin5(0),
167 fhInvMassD0barSum_10Mev_Bin5(0),
168 fhInvMassSumAll_10Mev_Bin5(0),
169 fhInvMassD0Sum_5Mev_Bin5(0),
170 fhInvMassD0barSum_5Mev_Bin5(0),
171 fhInvMassSumAll_5Mev_Bin5(0),
172 fhInvMassMultipleOnly_Bin1(0),
173 fhInvMassMultipleOnly_Bin2(0),
174 fhInvMassMultipleOnly_Bin3(0),
175 fhInvMassMultipleOnly_Bin4(0),
176 fhInvMassMultipleOnly_Bin5(0),
177 fScatterP4PID(0),
178 fPtVsY(0),
179 fPtVsYAll(0),
180 fEventCounter(0),
181 fCutDCA(0),
182 fCutDCA3(0),
183 fCutDCA2(0),
184 fCutDCA5(0),
185 fCutVertexDist2(0),
186 fCutVertexDist3(0),
187 fCutVertexDist4(0),
188 fCutCosinePoint(0),
189 fCutPt(0),
190 fCutY(0),
191 fPIDSel(0),
192 fPIDSel_Bin1(0),
193 fPIDSel_Bin2(0),
194 fPIDSel_Bin3(0),
195 fPIDSel_Bin4(0),
196 fPIDSel_Bin5(0),
197 fMultipleHyps(0),
198 fMultipleHypsType(0),
199 fPtSel(0),
200 fCuts(0),
201 fVHF(0)
202 {
203   // Standard constructor
204    
205   fCuts=cuts;
206
207   // Input slot #0 works with an Ntuple
208 //  DefineInput(0, TTree::Class());
209
210   // Output slot #0 writes into a TTree container
211   // Output slots #1-6 writes into a TList container
212   DefineOutput(0, TTree::Class()); //default
213   DefineOutput(1, TList::Class()); //histos inv. mass bin1
214   DefineOutput(2, TList::Class()); //histos inv. mass bin2
215   DefineOutput(3, TList::Class()); //histos inv. mass bin3
216   DefineOutput(4, TList::Class()); //histos inv. mass bin4
217   DefineOutput(5, TList::Class()); //histos inv. mass bin5
218   DefineOutput(6, TList::Class()); //histos of cuts
219   DefineOutput(7, AliRDHFCutsD0toKpipipi::Class()); //cuts
220 }
221
222 //________________________________________________________________________
223 AliAnalysisTaskSESelectHF4Prong::~AliAnalysisTaskSESelectHF4Prong()
224 {
225   // Destructor
226
227   if (fOutput) {
228     delete fOutput;
229     fOutput = 0;
230   } 
231   if (fOutput2) {
232     delete fOutput2;
233     fOutput2 = 0;
234   }
235   if (fOutput3) {
236     delete fOutput3;
237     fOutput3 = 0;
238   } 
239   if (fOutput4) {
240     delete fOutput4;
241     fOutput4 = 0;
242   }
243   if (fOutput5) {
244     delete fOutput5;
245     fOutput5 = 0;
246   }
247   if (fOutputC) {
248     delete fOutputC;
249     fOutputC = 0;
250   }   
251   if (fCuts) {
252     delete fCuts;
253     fCuts = 0;
254   }
255   if (fVHF) {
256     delete fVHF;
257     fVHF = 0;
258   }
259
260 }  
261
262 //________________________________________________________________________
263 void AliAnalysisTaskSESelectHF4Prong::Init()
264 {
265   // Initialization
266
267   if(fDebug > 1) printf("AnalysisTaskSESelectHF4Prong::Init() \n");
268
269   return;
270 }
271
272 //________________________________________________________________________
273 void AliAnalysisTaskSESelectHF4Prong::UserCreateOutputObjects()
274 {
275   // Create the output container
276   //
277   if(fDebug > 1) printf("AnalysisTaskSESelectHF4Prong::UserCreateOutputObjects() \n");
278
279   fVerticesHFTClArr = new TClonesArray("AliAODVertex", 0);
280   fVerticesHFTClArr->SetName("VerticesHF");
281   AddAODBranch("TClonesArray", &fVerticesHFTClArr);
282
283   fCharm4ProngTClArr = new TClonesArray("AliAODRecoDecayHF4Prong", 0);
284   fCharm4ProngTClArr->SetName("Charm4Prong");
285   AddAODBranch("TClonesArray", &fCharm4ProngTClArr);
286
287   fOutput = new TList();
288   fOutput->SetOwner();
289
290   fOutput2 = new TList();
291   fOutput2->SetOwner();
292
293   fOutput3 = new TList();
294   fOutput3->SetOwner();
295
296   fOutput4 = new TList();
297   fOutput4->SetOwner();
298
299   fOutput5 = new TList();
300   fOutput5->SetOwner();
301
302   fOutputC = new TList();
303   fOutputC->SetOwner();
304
305   fhInvMassD0Sum_10Mev_Bin1 = new TH1F("fhInvMassD0Sum_10Mev_Bin1", "D0 invariant mass Bin1 (good hyp); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
306   fhInvMassD0Sum_10Mev_Bin1->Sumw2(); //Create structure to store sum of squares of weights
307   fhInvMassD0Sum_10Mev_Bin1->SetMinimum(0);
308   fOutput->Add(fhInvMassD0Sum_10Mev_Bin1);
309
310   fhInvMassD0barSum_10Mev_Bin1 = new TH1F("fhInvMassD0barSum_10Mev_Bin1", "D0bar invariant mass Bin1 (good hyp); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
311   fhInvMassD0barSum_10Mev_Bin1->Sumw2(); //Create structure to store sum of squares of weights
312   fhInvMassD0barSum_10Mev_Bin1->SetMinimum(0);
313   fOutput->Add(fhInvMassD0barSum_10Mev_Bin1);
314
315   fhInvMassSumAll_10Mev_Bin1 = new TH1F("fhInvMassSumAll_10Mev_Bin1", "D0/D0bar invariant mass Bin1 (good hyps); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
316   fhInvMassSumAll_10Mev_Bin1->Sumw2(); //Create structure to store sum of squares of weights
317   fhInvMassSumAll_10Mev_Bin1->SetMinimum(0);
318   fOutput->Add(fhInvMassSumAll_10Mev_Bin1);
319
320   fhInvMassD0Sum_5Mev_Bin1 = new TH1F("fhInvMassD0Sum_5Mev_Bin1", "D0 invariant mass Bin1 (good hyp); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
321   fhInvMassD0Sum_5Mev_Bin1->Sumw2(); //Create structure to store sum of squares of weights
322   fhInvMassD0Sum_5Mev_Bin1->SetMinimum(0);
323   fOutput->Add(fhInvMassD0Sum_5Mev_Bin1);
324
325   fhInvMassD0barSum_5Mev_Bin1 = new TH1F("fhInvMassD0barSum_5Mev_Bin1", "D0bar invariant mass Bin1 (good hyp); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
326   fhInvMassD0barSum_5Mev_Bin1->Sumw2(); //Create structure to store sum of squares of weights
327   fhInvMassD0barSum_5Mev_Bin1->SetMinimum(0);
328   fOutput->Add(fhInvMassD0barSum_5Mev_Bin1);
329
330   fhInvMassSumAll_5Mev_Bin1 = new TH1F("fhInvMassSumAll_5Mev_Bin1", "D0/D0bar invariant mass Bin1 (good hyps); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
331   fhInvMassSumAll_5Mev_Bin1->Sumw2(); //Create structure to store sum of squares of weights
332   fhInvMassSumAll_5Mev_Bin1->SetMinimum(0);
333   fOutput->Add(fhInvMassSumAll_5Mev_Bin1);
334
335   fhInvMassD0Sum_10Mev_Bin2 = new TH1F("fhInvMassD0Sum_10Mev_Bin2", "D0 invariant mass Bin2 (good hyp); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
336   fhInvMassD0Sum_10Mev_Bin2->Sumw2(); //Create structure to store sum of squares of weights
337   fhInvMassD0Sum_10Mev_Bin2->SetMinimum(0);
338   fOutput2->Add(fhInvMassD0Sum_10Mev_Bin2);
339
340   fhInvMassD0barSum_10Mev_Bin2 = new TH1F("fhInvMassD0barSum_10Mev_Bin2", "D0bar invariant mass Bin2 (good hyp); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
341   fhInvMassD0barSum_10Mev_Bin2->Sumw2(); //Create structure to store sum of squares of weights
342   fhInvMassD0barSum_10Mev_Bin2->SetMinimum(0);
343   fOutput2->Add(fhInvMassD0barSum_10Mev_Bin2);
344
345   fhInvMassSumAll_10Mev_Bin2 = new TH1F("fhInvMassSumAll_10Mev_Bin2", "D0/D0bar invariant mass Bin2 (good hyps); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
346   fhInvMassSumAll_10Mev_Bin2->Sumw2(); //Create structure to store sum of squares of weights
347   fhInvMassSumAll_10Mev_Bin2->SetMinimum(0);
348   fOutput2->Add(fhInvMassSumAll_10Mev_Bin2);
349
350   fhInvMassD0Sum_5Mev_Bin2 = new TH1F("fhInvMassD0Sum_5Mev_Bin2", "D0 invariant mass Bin2 (good hyp); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
351   fhInvMassD0Sum_5Mev_Bin2->Sumw2(); //Create structure to store sum of squares of weights
352   fhInvMassD0Sum_5Mev_Bin2->SetMinimum(0);
353   fOutput2->Add(fhInvMassD0Sum_5Mev_Bin2);
354
355   fhInvMassD0barSum_5Mev_Bin2 = new TH1F("fhInvMassD0barSum_5Mev_Bin2", "D0bar invariant mass Bin2 (good hyp); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
356   fhInvMassD0barSum_5Mev_Bin2->Sumw2(); //Create structure to store sum of squares of weights
357   fhInvMassD0barSum_5Mev_Bin2->SetMinimum(0);
358   fOutput2->Add(fhInvMassD0barSum_5Mev_Bin2);
359
360   fhInvMassSumAll_5Mev_Bin2 = new TH1F("fhInvMassSumAll_5Mev_Bin2", "D0/D0bar invariant mass Bin2 (good hyps); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
361   fhInvMassSumAll_5Mev_Bin2->Sumw2(); //Create structure to store sum of squares of weights
362   fhInvMassSumAll_5Mev_Bin2->SetMinimum(0);
363   fOutput2->Add(fhInvMassSumAll_5Mev_Bin2);
364
365   fhInvMassD0Sum_10Mev_Bin3 = new TH1F("fhInvMassD0Sum_10Mev_Bin3", "D0 invariant mass Bin3 (good hyp); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
366   fhInvMassD0Sum_10Mev_Bin3->Sumw2(); //Create structure to store sum of squares of weights
367   fhInvMassD0Sum_10Mev_Bin3->SetMinimum(0);
368   fOutput3->Add(fhInvMassD0Sum_10Mev_Bin3);
369
370   fhInvMassD0barSum_10Mev_Bin3 = new TH1F("fhInvMassD0barSum_10Mev_Bin3", "D0bar invariant mass Bin3 (good hyp); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
371   fhInvMassD0barSum_10Mev_Bin3->Sumw2(); //Create structure to store sum of squares of weights
372   fhInvMassD0barSum_10Mev_Bin3->SetMinimum(0);
373   fOutput3->Add(fhInvMassD0barSum_10Mev_Bin3);
374
375   fhInvMassSumAll_10Mev_Bin3 = new TH1F("fhInvMassSumAll_10Mev_Bin3", "D0/D0bar invariant mass Bin3 (good hyps); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
376   fhInvMassSumAll_10Mev_Bin3->Sumw2(); //Create structure to store sum of squares of weights
377   fhInvMassSumAll_10Mev_Bin3->SetMinimum(0);
378   fOutput3->Add(fhInvMassSumAll_10Mev_Bin3);
379
380   fhInvMassD0Sum_5Mev_Bin3 = new TH1F("fhInvMassD0Sum_5Mev_Bin3", "D0 invariant mass Bin3 (good hyp); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
381   fhInvMassD0Sum_5Mev_Bin3->Sumw2(); //Create structure to store sum of squares of weights
382   fhInvMassD0Sum_5Mev_Bin3->SetMinimum(0);
383   fOutput3->Add(fhInvMassD0Sum_5Mev_Bin3);
384
385   fhInvMassD0barSum_5Mev_Bin3 = new TH1F("fhInvMassD0barSum_5Mev_Bin3", "D0bar invariant mass Bin3 (good hyp); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
386   fhInvMassD0barSum_5Mev_Bin3->Sumw2(); //Create structure to store sum of squares of weights
387   fhInvMassD0barSum_5Mev_Bin3->SetMinimum(0);
388   fOutput3->Add(fhInvMassD0barSum_5Mev_Bin3);
389
390   fhInvMassSumAll_5Mev_Bin3 = new TH1F("fhInvMassSumAll_5Mev_Bin3", "D0/D0bar invariant mass Bin3 (good hyps); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
391   fhInvMassSumAll_5Mev_Bin3->Sumw2(); //Create structure to store sum of squares of weights
392   fhInvMassSumAll_5Mev_Bin3->SetMinimum(0);
393   fOutput3->Add(fhInvMassSumAll_5Mev_Bin3);
394
395   fhInvMassD0Sum_10Mev_Bin4 = new TH1F("fhInvMassD0Sum_10Mev_Bin4", "D0 invariant mass Bin4 (good hyp); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
396   fhInvMassD0Sum_10Mev_Bin4->Sumw2(); //Create structure to store sum of squares of weights
397   fhInvMassD0Sum_10Mev_Bin4->SetMinimum(0);
398   fOutput4->Add(fhInvMassD0Sum_10Mev_Bin4);
399
400   fhInvMassD0barSum_10Mev_Bin4 = new TH1F("fhInvMassD0barSum_10Mev_Bin4", "D0bar invariant mass Bin4 (good hyp); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
401   fhInvMassD0barSum_10Mev_Bin4->Sumw2(); //Create structure to store sum of squares of weights
402   fhInvMassD0barSum_10Mev_Bin4->SetMinimum(0);
403   fOutput4->Add(fhInvMassD0barSum_10Mev_Bin4);
404
405   fhInvMassSumAll_10Mev_Bin4 = new TH1F("fhInvMassSumAll_10Mev_Bin4", "D0/D0bar invariant mass Bin4 (good hyps); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
406   fhInvMassSumAll_10Mev_Bin4->Sumw2(); //Create structure to store sum of squares of weights
407   fhInvMassSumAll_10Mev_Bin4->SetMinimum(0);
408   fOutput4->Add(fhInvMassSumAll_10Mev_Bin4);
409
410   fhInvMassD0Sum_5Mev_Bin4 = new TH1F("fhInvMassD0Sum_5Mev_Bin4", "D0 invariant mass Bin4 (good hyp); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
411   fhInvMassD0Sum_5Mev_Bin4->Sumw2(); //Create structure to store sum of squares of weights
412   fhInvMassD0Sum_5Mev_Bin4->SetMinimum(0);
413   fOutput4->Add(fhInvMassD0Sum_5Mev_Bin4);
414
415   fhInvMassD0barSum_5Mev_Bin4 = new TH1F("fhInvMassD0barSum_5Mev_Bin4", "D0bar invariant mass Bin4 (good hyp); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
416   fhInvMassD0barSum_5Mev_Bin4->Sumw2(); //Create structure to store sum of squares of weights
417   fhInvMassD0barSum_5Mev_Bin4->SetMinimum(0);
418   fOutput4->Add(fhInvMassD0barSum_5Mev_Bin4);
419
420   fhInvMassSumAll_5Mev_Bin4 = new TH1F("fhInvMassSumAll_5Mev_Bin4", "D0/D0bar invariant mass Bin4 (good hyps); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
421   fhInvMassSumAll_5Mev_Bin4->Sumw2(); //Create structure to store sum of squares of weights
422   fhInvMassSumAll_5Mev_Bin4->SetMinimum(0);
423   fOutput4->Add(fhInvMassSumAll_5Mev_Bin4);
424
425   fhInvMassD0Sum_10Mev_Bin5 = new TH1F("fhInvMassD0Sum_10Mev_Bin5", "D0 invariant mass Bin5 (good hyp); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
426   fhInvMassD0Sum_10Mev_Bin5->Sumw2(); //Create structure to store sum of squares of weights
427   fhInvMassD0Sum_10Mev_Bin5->SetMinimum(0);
428   fOutput5->Add(fhInvMassD0Sum_10Mev_Bin5);
429
430   fhInvMassD0barSum_10Mev_Bin5 = new TH1F("fhInvMassD0barSum_10Mev_Bin5", "D0bar invariant mass Bin5 (good hyp); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
431   fhInvMassD0barSum_10Mev_Bin5->Sumw2(); //Create structure to store sum of squares of weights
432   fhInvMassD0barSum_10Mev_Bin5->SetMinimum(0);
433   fOutput5->Add(fhInvMassD0barSum_10Mev_Bin5);
434
435   fhInvMassSumAll_10Mev_Bin5 = new TH1F("fhInvMassSumAll_10Mev_Bin5", "D0/D0bar invariant mass Bin5 (good hyps); Inv. mass [GeV]; Entries/10 MeV",60,1.6,2.2);
436   fhInvMassSumAll_10Mev_Bin5->Sumw2(); //Create structure to store sum of squares of weights
437   fhInvMassSumAll_10Mev_Bin5->SetMinimum(0);
438   fOutput5->Add(fhInvMassSumAll_10Mev_Bin5);
439
440   fhInvMassD0Sum_5Mev_Bin5 = new TH1F("fhInvMassD0Sum_5Mev_Bin5", "D0 invariant mass Bin5 (good hyp); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
441   fhInvMassD0Sum_5Mev_Bin5->Sumw2(); //Create structure to store sum of squares of weights
442   fhInvMassD0Sum_5Mev_Bin5->SetMinimum(0);
443   fOutput5->Add(fhInvMassD0Sum_5Mev_Bin5);
444
445   fhInvMassD0barSum_5Mev_Bin5 = new TH1F("fhInvMassD0barSum_5Mev_Bin5", "D0bar invariant mass Bin5 (good hyp); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
446   fhInvMassD0barSum_5Mev_Bin5->Sumw2(); //Create structure to store sum of squares of weights
447   fhInvMassD0barSum_5Mev_Bin5->SetMinimum(0);
448   fOutput5->Add(fhInvMassD0barSum_5Mev_Bin5);
449
450   fhInvMassSumAll_5Mev_Bin5 = new TH1F("fhInvMassSumAll_5Mev_Bin5", "D0/D0bar invariant mass Bin5 (good hyps); Inv. mass [GeV]; Entries/5 MeV",120,1.6,2.2);
451   fhInvMassSumAll_5Mev_Bin5->Sumw2(); //Create structure to store sum of squares of weights
452   fhInvMassSumAll_5Mev_Bin5->SetMinimum(0);
453   fOutput5->Add(fhInvMassSumAll_5Mev_Bin5);
454
455   fhInvMassMultipleOnly_Bin1 = new TH1F("fhInvMassMultipleOnly_Bin1", "D0/D0bar invariant mass Bin1 (good hyps) - Multple hyps accepted only; Inv. mass [GeV]; Entries/10 MeV",120,1.6,2.2);
456   fhInvMassMultipleOnly_Bin1->Sumw2(); //Create structure to store sum of squares of weights
457   fhInvMassMultipleOnly_Bin1->SetMinimum(0);
458   fOutput->Add(fhInvMassMultipleOnly_Bin1);
459
460   fhInvMassMultipleOnly_Bin2 = new TH1F("fhInvMassMultipleOnly_Bin2", "D0/D0bar invariant mass Bin2 (good hyps) - Multple hyps accepted only; Inv. mass [GeV]; Entries/10 MeV",120,1.6,2.2);
461   fhInvMassMultipleOnly_Bin2->Sumw2(); //Create structure to store sum of squares of weights
462   fhInvMassMultipleOnly_Bin2->SetMinimum(0);
463   fOutput2->Add(fhInvMassMultipleOnly_Bin2);
464
465   fhInvMassMultipleOnly_Bin3 = new TH1F("fhInvMassMultipleOnly_Bin3", "D0/D0bar invariant mass Bin3 (good hyps) - Multple hyps accepted only; Inv. mass [GeV]; Entries/10 MeV",120,1.6,2.2);
466   fhInvMassMultipleOnly_Bin3->Sumw2(); //Create structure to store sum of squares of weights
467   fhInvMassMultipleOnly_Bin3->SetMinimum(0);
468   fOutput3->Add(fhInvMassMultipleOnly_Bin3);
469
470   fhInvMassMultipleOnly_Bin4 = new TH1F("fhInvMassMultipleOnly_Bin4", "D0/D0bar invariant mass Bin4 (good hyps) - Multple hyps accepted only; Inv. mass [GeV]; Entries/10 MeV",120,1.6,2.2);
471   fhInvMassMultipleOnly_Bin4->Sumw2(); //Create structure to store sum of squares of weights
472   fhInvMassMultipleOnly_Bin4->SetMinimum(0);
473   fOutput4->Add(fhInvMassMultipleOnly_Bin4);
474
475   fhInvMassMultipleOnly_Bin5 = new TH1F("fhInvMassMultipleOnly_Bin5", "D0/D0bar invariant mass Bin5 (good hyps) - Multple hyps accepted only; Inv. mass [GeV]; Entries/10 MeV",120,1.6,2.2);
476   fhInvMassMultipleOnly_Bin5->Sumw2(); //Create structure to store sum of squares of weights
477   fhInvMassMultipleOnly_Bin5->SetMinimum(0);
478   fOutput5->Add(fhInvMassMultipleOnly_Bin5);
479
480   fScatterP4PID = new TH2F("fScatterP4PID", "Transverse momentum of K vs l-s Pi (D0 + D0bar); Pt of K [GeV/c]; Pt of Pi [GeV/c]",500,0.,5.,500,0.,5.);
481   fScatterP4PID->SetMinimum(0);
482   fOutput->Add(fScatterP4PID);
483
484   fPtVsY = new TH2F("fPtVsY", "Pt vs Y PPR Sel. Candidates; Pt [GeV/c]; Y",250,0.,25.,300,-3.,3.);
485   fPtVsY->SetMinimum(0);
486   fOutputC->Add(fPtVsY);
487
488   fPtVsYAll = new TH2F("fPtVsYAll", "Pt vs Y All Candidates; Pt [GeV/c]; Y",250,0.,25.,300,-3.,3.);
489   fPtVsYAll->SetMinimum(0);
490   fOutputC->Add(fPtVsYAll);
491
492   fEventCounter = new TH1F("fEventCounter", "N° of total events; NA; Events",1,0.,1.);
493   fEventCounter->SetMinimum(0);
494   fOutputC->Add(fEventCounter);
495
496   fCutDCA = new TH1F("fCutDCA", "DCA of candidate (couple); DCA [cm]; Entries/micron",500,0.,0.05);
497   fCutDCA->SetMinimum(0);
498   fOutputC->Add(fCutDCA);
499
500   fCutDCA3 = new TH1F("fCutDCA3", "DCA of candidate (trips); DCA [cm]; Entries/micron",500,0.,0.05);
501   fCutDCA3->SetMinimum(0);
502   fOutputC->Add(fCutDCA3);
503
504   fCutDCA2 = new TH1F("fCutDCA2", "DCA of candidate (quads1); DCA [cm]; Entries/micron",500,0.,0.05);
505   fCutDCA2->SetMinimum(0);
506   fOutputC->Add(fCutDCA2);
507
508   fCutDCA5 = new TH1F("fCutDCA5", "DCA of candidate (quads2); DCA [cm]; Entries/micron",500,0.,0.05);
509   fCutDCA5->SetMinimum(0);
510   fOutputC->Add(fCutDCA5);
511
512   fCutVertexDist2 = new TH1F("fCutVertexDist2", "Distance Vtx doubl.-Primary Vtx; Distance [cm]; Entries/15 micron",500,0.,0.75);
513   fCutVertexDist2->SetMinimum(0);
514   fOutputC->Add(fCutVertexDist2);
515
516   fCutVertexDist3 = new TH1F("fCutVertexDist3", "Distance Vtx trips-Primary Vtx; Distance [cm]; Entries/10 micron",500,0.,0.5);
517   fCutVertexDist3->SetMinimum(0);
518   fOutputC->Add(fCutVertexDist3);
519
520   fCutVertexDist4 = new TH1F("fCutVertexDist4", "Distance Vtx quads-Primary Vtx; Distance [cm]; Entries/5 micron",500,0.,0.25);
521   fCutVertexDist4->SetMinimum(0);
522   fOutputC->Add(fCutVertexDist4);
523
524   fCutCosinePoint = new TH1F("fCutCosinePoint", "Cosine of angle of pointing; Cos(Thetapt.); Entries/10^(-3)",250,0.75,1.);
525   fCutCosinePoint->SetMinimum(0);
526   fOutputC->Add(fCutCosinePoint);
527
528   fCutPt = new TH1F("fCutPt", "Pt of candidate D0; Pt [GeV/c]; Entries/5 MeV",3000,0.,15.);
529   fCutPt->SetMinimum(0);
530   fOutputC->Add(fCutPt);
531
532   fCutY = new TH1F("fCutY", "Y of candidate D0; Pt [GeV/c]; Entries/5 MeV",900,-9.,9.);
533   fCutY->SetMinimum(0);
534   fOutputC->Add(fCutY);
535
536   fPIDSel = new TH1F("fPIDSel", "Ratio of D0 selected by PID for Correction",3,0.,3.);
537   fPIDSel->SetMinimum(0);
538   fPIDSel->GetXaxis()->SetBinLabel(1,"D0allhyp All");
539   fPIDSel->GetXaxis()->SetBinLabel(2,"D0allhyp PID");
540   fPIDSel->GetXaxis()->SetBinLabel(3,"D0allhyp PID (hypok)");
541
542   fPIDSel_Bin1 = new TH1F("fPIDSel_Bin1", "Ratio of D0 selected by PID for Correction",3,0.,3.);
543   fPIDSel_Bin1->SetMinimum(0);
544   fPIDSel_Bin1->GetXaxis()->SetBinLabel(1,"D0allhyp All");
545   fPIDSel_Bin1->GetXaxis()->SetBinLabel(2,"D0allhyp PID");
546   fPIDSel_Bin1->GetXaxis()->SetBinLabel(3,"D0allhyp PID (hypok)");
547
548   fPIDSel_Bin2 = new TH1F("fPIDSel_Bin1", "Ratio of D0 selected by PID for Correction",3,0.,3.);
549   fPIDSel_Bin2->SetMinimum(0);
550   fPIDSel_Bin2->GetXaxis()->SetBinLabel(1,"D0allhyp All");
551   fPIDSel_Bin2->GetXaxis()->SetBinLabel(2,"D0allhyp PID");
552   fPIDSel_Bin2->GetXaxis()->SetBinLabel(3,"D0allhyp PID (hypok)");
553
554   fPIDSel_Bin3 = new TH1F("fPIDSel_Bin1", "Ratio of D0 selected by PID for Correction",3,0.,3.);
555   fPIDSel_Bin3->SetMinimum(0);
556   fPIDSel_Bin3->GetXaxis()->SetBinLabel(1,"D0allhyp All");
557   fPIDSel_Bin3->GetXaxis()->SetBinLabel(2,"D0allhyp PID");
558   fPIDSel_Bin3->GetXaxis()->SetBinLabel(3,"D0allhyp PID (hypok)");
559
560   fPIDSel_Bin4 = new TH1F("fPIDSel_Bin1", "Ratio of D0 selected by PID for Correction",3,0.,3.);
561   fPIDSel_Bin4->SetMinimum(0);
562   fPIDSel_Bin4->GetXaxis()->SetBinLabel(1,"D0allhyp All");
563   fPIDSel_Bin4->GetXaxis()->SetBinLabel(2,"D0allhyp PID");
564   fPIDSel_Bin4->GetXaxis()->SetBinLabel(3,"D0allhyp PID (hypok)");
565
566   fPIDSel_Bin5 = new TH1F("fPIDSel_Bin1", "Ratio of D0 selected by PID for Correction",3,0.,3.);
567   fPIDSel_Bin5->SetMinimum(0);
568   fPIDSel_Bin5->GetXaxis()->SetBinLabel(1,"D0allhyp All");
569   fPIDSel_Bin5->GetXaxis()->SetBinLabel(2,"D0allhyp PID");
570   fPIDSel_Bin5->GetXaxis()->SetBinLabel(3,"D0allhyp PID (hypok)");
571
572   fMultipleHyps = new TH1F("fMultipleHyps", "N. of hyp. accepted for each candidate (accounted N. times)",8,0.,8.);
573   fMultipleHyps->SetMinimum(0);
574   fMultipleHyps->GetXaxis()->SetBinLabel(1,"1 (PPR)");
575   fMultipleHyps->GetXaxis()->SetBinLabel(2,"2 (PPR)");
576   fMultipleHyps->GetXaxis()->SetBinLabel(3,"3 (PPR)");
577   fMultipleHyps->GetXaxis()->SetBinLabel(4,"4 (PPR)");
578   fMultipleHyps->GetXaxis()->SetBinLabel(5,"1 (PPR+PID)");
579   fMultipleHyps->GetXaxis()->SetBinLabel(6,"2 (PPR+PID)");
580   fMultipleHyps->GetXaxis()->SetBinLabel(7,"3 (PPR+PID)");
581   fMultipleHyps->GetXaxis()->SetBinLabel(8,"4 (PPR+PID)");
582
583   fMultipleHypsType = new TH1F("fMultipleHypsType", "Type of hyp. accepted for each candidate",8,0.,8.);
584   fMultipleHypsType->SetMinimum(0);
585   fMultipleHypsType->GetXaxis()->SetBinLabel(1,"D0");
586   fMultipleHypsType->GetXaxis()->SetBinLabel(2,"D0bar");
587   fMultipleHypsType->GetXaxis()->SetBinLabel(3,"2D0");
588   fMultipleHypsType->GetXaxis()->SetBinLabel(4,"2D0bar");
589   fMultipleHypsType->GetXaxis()->SetBinLabel(5,"D0+D0bar");
590   fMultipleHypsType->GetXaxis()->SetBinLabel(6,"2D0+D0bar");
591   fMultipleHypsType->GetXaxis()->SetBinLabel(7,"D0+2D0bar");
592   fMultipleHypsType->GetXaxis()->SetBinLabel(8,"2D0+2D0bar");
593
594   fOutputC->Add(fMultipleHyps);
595   fOutputC->Add(fMultipleHypsType);
596
597   fOutputC->Add(fPIDSel);
598   fOutput->Add(fPIDSel_Bin1);
599   fOutput2->Add(fPIDSel_Bin2);
600   fOutput3->Add(fPIDSel_Bin3);
601   fOutput4->Add(fPIDSel_Bin4);
602   fOutput5->Add(fPIDSel_Bin5);
603
604   fPtSel = new TH1F("fPtSel", "Pt of candidates accepted; Pt [GeV/c]; Entries/10 MeV",2000,0.,20.);
605   fPtSel->SetMinimum(0);
606   fOutputC->Add(fPtSel);
607
608   return;
609 }
610
611 //________________________________________________________________________
612 void AliAnalysisTaskSESelectHF4Prong::UserExec(Option_t */*option*/)
613 {
614   // Execute analysis for current event:
615   // heavy flavor candidates selection and histograms
616   
617   AliAODEvent *aodIn = dynamic_cast<AliAODEvent*> (InputEvent());
618
619   TClonesArray *inputArrayCharm4Prong = 0;
620
621   if(!aodIn && AODEvent() && IsStandardAOD()) {
622     // In case there is an AOD handler writing a standard AOD, use the AOD 
623     // event in memory rather than the input (ESD) event.    
624     aodIn = dynamic_cast<AliAODEvent*> (AODEvent());
625     // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
626     // have to taken from the AOD event hold by the AliAODExtension
627     AliAODHandler* aodHandler = (AliAODHandler*) 
628       ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
629     if(aodHandler->GetExtensions()) {
630       AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
631       AliAODEvent *aodFromExt = ext->GetAOD();
632       // load D0 candidates                                                   
633       inputArrayCharm4Prong=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm4Prong");
634     }
635   } else {
636     // load D0 candidates                                                   
637     inputArrayCharm4Prong=(TClonesArray*)aodIn->GetList()->FindObject("Charm4Prong");
638   }
639
640   if(!inputArrayCharm4Prong) {
641     printf("AliAnalysisTaskSESelectHF4Prong::UserExec: D0to3Kpi branch not found!\n");
642     return;
643   }
644
645   //print event info
646 //  aodIn->GetHeader()->Print();
647   
648   //Event counter ++
649   fEventCounter->Fill(0);
650
651   // fix for temporary bug in ESDfilter 
652   // the AODs with null vertex pointer didn't pass the PhysSel
653   if(!aodIn->GetPrimaryVertex()) return;
654
655   // primary vertex
656   AliAODVertex *vtx1 = (AliAODVertex*)aodIn->GetPrimaryVertex();
657 //  vtx1->Print();
658
659   // make trkIDtoEntry register (temporary)
660   Int_t trkIDtoEntry[100000];
661   for(Int_t it=0;it<aodIn->GetNumberOfTracks();it++) {
662     AliAODTrack *track = aodIn->GetTrack(it);
663     trkIDtoEntry[track->GetID()]=it;
664   }
665
666   Int_t iOutVerticesHF=0,iOutCharm4Prong=0;
667   fVerticesHFTClArr->Delete();
668   iOutVerticesHF = fVerticesHFTClArr->GetEntriesFast();
669   TClonesArray &verticesHFRef = *fVerticesHFTClArr;
670   fCharm4ProngTClArr->Delete();
671   iOutCharm4Prong = fCharm4ProngTClArr->GetEntriesFast();
672   TClonesArray &aodCharm4ProngRef = *fCharm4ProngTClArr;
673
674   // loop over D0->K3pi candidates
675   Int_t nInCharm4Prong = inputArrayCharm4Prong->GetEntriesFast();
676   printf("Number of D0->K3pi: %d\n",nInCharm4Prong);
677
678   for (Int_t iCharm4Prong = 0; iCharm4Prong < nInCharm4Prong; iCharm4Prong++) {
679     AliAODRecoDecayHF4Prong *dIn = (AliAODRecoDecayHF4Prong*)inputArrayCharm4Prong->UncheckedAt(iCharm4Prong);
680     Bool_t unsetvtx=kFALSE;
681
682     if(!dIn->GetOwnPrimaryVtx()) {
683       dIn->SetOwnPrimaryVtx(vtx1); // needed to compute all variables
684       unsetvtx=kTRUE;
685     }
686    
687    //fill histos of cuts
688    Double_t dca = dIn->GetDCA();
689    Double_t dist2 = dIn->GetDist12toPrim();
690    Double_t dist3 = dIn->GetDist3toPrim();
691    Double_t dist4 = dIn->GetDist4toPrim();
692    Double_t cosine = dIn->CosPointingAngle();
693    Double_t ptPart = dIn->Pt();
694    Double_t yPart = dIn->YD0();
695    Double_t dcatrip = dIn->GetDCA(3);
696    Double_t dcaquad1 = dIn->GetDCA(2);
697    Double_t dcaquad2 = dIn->GetDCA(5);
698
699    Double_t ptBinH[6] = {2.5,4.5,6.0,8.0,12.0,25.0};  //bin i has pt between values i and i+1
700
701    fCutDCA->Fill(dca);
702    fCutDCA3->Fill(dcatrip);
703    fCutDCA2->Fill(dcaquad1);
704    fCutDCA5->Fill(dcaquad2);
705    fCutVertexDist2->Fill(dist2);
706    fCutVertexDist3->Fill(dist3);
707    fCutVertexDist4->Fill(dist4);
708    fCutCosinePoint->Fill(cosine);
709    fCutPt->Fill(ptPart);
710    fCutY->Fill(yPart);
711    fPtVsYAll->Fill(ptPart,yPart);
712
713    //flags initialization
714    fSelected = fCuts->IsSelected(dIn,AliRDHFCuts::kCandidate);
715    Int_t selD01 = fCuts->D01Selected(dIn,AliRDHFCuts::kCandidate);
716    Int_t selD02 = fCuts->D02Selected(dIn,AliRDHFCuts::kCandidate);  
717    Int_t selD0bar1 = fCuts->D0bar1Selected(dIn,AliRDHFCuts::kCandidate);
718    Int_t selD0bar2 = fCuts->D0bar2Selected(dIn,AliRDHFCuts::kCandidate);
719    Int_t flagAccLim = 1;
720
721    //Limited Acceptance
722    if(ptPart > 5.) {
723      if (TMath::Abs(yPart) > 0.8) flagAccLim = 0;
724    } 
725    else {
726      Double_t maxFiducialY = -0.2/15*ptPart*ptPart+1.9/15*ptPart+0.5; 
727      Double_t minFiducialY = 0.2/15*ptPart*ptPart-1.9/15*ptPart-0.5;            
728      if (yPart < minFiducialY || yPart > maxFiducialY) flagAccLim = 0;;
729    }
730
731    //number of CANDIDATES (regardless of hypotheses) passing PPR
732    if(fSelected==1||fSelected==2||fSelected==3) {
733       fPtVsY->Fill(ptPart,yPart);
734       fPIDSel->Fill(0);
735         if (ptPart >= ptBinH[0] && ptPart < ptBinH[1])      fPIDSel_Bin1->Fill(0);
736         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) fPIDSel_Bin2->Fill(0);
737         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) fPIDSel_Bin3->Fill(0);
738         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) fPIDSel_Bin4->Fill(0);
739         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5]) fPIDSel_Bin5->Fill(0);
740         }
741       
742
743    PostData(6,fOutputC);
744    
745    //selection
746    if((fSelected==1||fSelected==2||fSelected==3) && flagAccLim == 1) {  
747       // get daughter AOD tracks
748       AliAODTrack *trk0 = (AliAODTrack*)dIn->GetDaughter(0);
749       AliAODTrack *trk1 = (AliAODTrack*)dIn->GetDaughter(1);
750       AliAODTrack *trk2 = (AliAODTrack*)dIn->GetDaughter(2);
751       AliAODTrack *trk3 = (AliAODTrack*)dIn->GetDaughter(3);
752       if(!trk0 || !trk1 || !trk2 || !trk3) {
753         trk0=aodIn->GetTrack(trkIDtoEntry[dIn->GetProngID(0)]);
754         trk1=aodIn->GetTrack(trkIDtoEntry[dIn->GetProngID(1)]);
755         trk2=aodIn->GetTrack(trkIDtoEntry[dIn->GetProngID(2)]);
756         trk3=aodIn->GetTrack(trkIDtoEntry[dIn->GetProngID(3)]);
757       }
758       printf("pt of positive track #1: %f\n",trk0->Pt());
759       printf("pt of negative track #1: %f\n",trk1->Pt());
760       printf("pt of positive track #2: %f\n",trk2->Pt());
761       printf("pt of negative track #2: %f\n",trk3->Pt());
762       
763       dIn->InvMassD0(fmassD0);
764       dIn->InvMassD0bar(fmassD0bar);
765
766       //fill histos (combining selection form cuts & PID (with rho information))
767       Int_t hypD01 = 0, hypD02 = 0, hypD0bar1 = 0, hypD0bar2 = 0;
768       Int_t pid1 = 0, pid2 = 0, pidbar1 = 0, pidbar2 = 0;
769       Int_t pidSelection = fCuts->IsSelectedFromPID(dIn, &pid1, &pid2, &pidbar1, &pidbar2);
770
771    //number of CANDIDATES (regardless of hypotheses) passing PPR + PID - PAY ATTENTION: hypoth. for PID and PPR may not be the same!
772    if (pidSelection > 0) {
773         fPIDSel->Fill(1);
774         if (ptPart >= ptBinH[0] && ptPart < ptBinH[1])      fPIDSel_Bin1->Fill(1);
775         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) fPIDSel_Bin2->Fill(1);
776         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) fPIDSel_Bin3->Fill(1);
777         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) fPIDSel_Bin4->Fill(1);
778         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5]) fPIDSel_Bin5->Fill(1);
779       }
780    
781            //number of hypoteses accepted per candidate after PPR
782            if(selD01+selD02+selD0bar1+selD0bar2 == 1) fMultipleHyps->Fill(0);
783            if(selD01+selD02+selD0bar1+selD0bar2 == 2) fMultipleHyps->Fill(1);
784            if(selD01+selD02+selD0bar1+selD0bar2 == 3) fMultipleHyps->Fill(2);
785            if(selD01+selD02+selD0bar1+selD0bar2 == 4) fMultipleHyps->Fill(3);
786
787    //combine PPD + PID cuts
788    if (selD01 == 1 && pid1==1) hypD01 = 1;
789    if (selD02 == 1 && pid2==1) hypD02 = 1;
790    if (selD0bar1 == 1 && pidbar1==1) hypD0bar1 = 1;
791    if (selD0bar2 == 1 && pidbar2==1) hypD0bar2 = 1;
792
793    //number of CANDIDATES (regardless of hypotheses) passing PPR + PID - PAY ATTENTION: hypoth. for PID and PPR must match (at least one)!
794    if (hypD01 == 1 || hypD02 == 1 || hypD0bar1 == 1 || hypD0bar2 == 1) {
795         fPIDSel->Fill(2);
796         if (ptPart >= ptBinH[0] && ptPart < ptBinH[1])      fPIDSel_Bin1->Fill(2);
797         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) fPIDSel_Bin2->Fill(2);
798         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) fPIDSel_Bin3->Fill(2);
799         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) fPIDSel_Bin4->Fill(2);
800         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5]) fPIDSel_Bin5->Fill(2);
801       }
802
803            //number of hypoteses accepted per candidate after PPR and PID
804            if(hypD01+hypD02+hypD0bar1+hypD0bar2 == 1) fMultipleHyps->Fill(4);
805            if(hypD01+hypD02+hypD0bar1+hypD0bar2 == 2) fMultipleHyps->Fill(5);
806            if(hypD01+hypD02+hypD0bar1+hypD0bar2 == 3) fMultipleHyps->Fill(6);
807            if(hypD01+hypD02+hypD0bar1+hypD0bar2 == 4) fMultipleHyps->Fill(7);
808
809            //type of hypoteses accepted per candidate after PPR and PID
810            if(hypD01+hypD02 == 1 && hypD0bar1+hypD0bar2 == 0) fMultipleHypsType->Fill(0);
811            if(hypD01+hypD02 == 0 && hypD0bar1+hypD0bar2 == 1) fMultipleHypsType->Fill(1);
812            if(hypD01+hypD02 == 2 && hypD0bar1+hypD0bar2 == 0) fMultipleHypsType->Fill(2);
813            if(hypD01+hypD02 == 0 && hypD0bar1+hypD0bar2 == 2) fMultipleHypsType->Fill(3);
814            if(hypD01+hypD02 == 1 && hypD0bar1+hypD0bar2 == 1) fMultipleHypsType->Fill(4);
815            if(hypD01+hypD02 == 2 && hypD0bar1+hypD0bar2 == 1) fMultipleHypsType->Fill(5);
816            if(hypD01+hypD02 == 1 && hypD0bar1+hypD0bar2 == 2) fMultipleHypsType->Fill(6);
817            if(hypD01+hypD02 == 2 && hypD0bar1+hypD0bar2 == 2) fMultipleHypsType->Fill(7);
818
819
820 //
821 // This section is auxiliary: (multiple hypotheses histos)
822 //
823  if (hypD01+hypD02+hypD0bar1+hypD0bar2 == 2 || hypD01+hypD02+hypD0bar1+hypD0bar2 == 3 || hypD01+hypD02+hypD0bar1+hypD0bar2 == 4) 
824  {
825     
826    if (ptPart > ptBinH[0]) {
827       // D01 hyp.
828       if(hypD01==1) {
829         if (ptPart < ptBinH[1])                             fhInvMassMultipleOnly_Bin1->Fill(fmassD0[0]);
830         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) fhInvMassMultipleOnly_Bin2->Fill(fmassD0[0]);
831         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) fhInvMassMultipleOnly_Bin3->Fill(fmassD0[0]);
832         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) fhInvMassMultipleOnly_Bin4->Fill(fmassD0[0]);
833         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5]) fhInvMassMultipleOnly_Bin5->Fill(fmassD0[0]);
834        }
835       // D02 hyp.
836       if(hypD02==1) {
837         if (ptPart < ptBinH[1])                             fhInvMassMultipleOnly_Bin1->Fill(fmassD0[1]);
838         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) fhInvMassMultipleOnly_Bin2->Fill(fmassD0[1]);
839         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) fhInvMassMultipleOnly_Bin3->Fill(fmassD0[1]);
840         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) fhInvMassMultipleOnly_Bin4->Fill(fmassD0[1]);
841         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5]) fhInvMassMultipleOnly_Bin5->Fill(fmassD0[1]);
842        }
843       // D0bar1 hyp.
844       if(hypD0bar1==1) {
845         if (ptPart < ptBinH[1])                             fhInvMassMultipleOnly_Bin1->Fill(fmassD0bar[0]);
846         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) fhInvMassMultipleOnly_Bin2->Fill(fmassD0bar[0]);
847         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) fhInvMassMultipleOnly_Bin3->Fill(fmassD0bar[0]);
848         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) fhInvMassMultipleOnly_Bin4->Fill(fmassD0bar[0]);
849         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5]) fhInvMassMultipleOnly_Bin5->Fill(fmassD0bar[0]); 
850        } 
851       // D0bar2 hyp.
852       if(hypD0bar2==1) {
853         if (ptPart < ptBinH[1])                             fhInvMassMultipleOnly_Bin1->Fill(fmassD0bar[1]);
854         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) fhInvMassMultipleOnly_Bin2->Fill(fmassD0bar[1]);
855         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) fhInvMassMultipleOnly_Bin3->Fill(fmassD0bar[1]);
856         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) fhInvMassMultipleOnly_Bin4->Fill(fmassD0bar[1]);
857         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5]) fhInvMassMultipleOnly_Bin5->Fill(fmassD0bar[1]);
858        }
859      }
860
861    }
862 // 
863 //end of auxiliary section
864 //
865
866
867    //All histos are filled if Pt of candidate is greater than minimum of first bin (in this way: bin1+bin2+...binN = whole)
868    if (ptPart > ptBinH[0]) {
869     
870       // D01 hyp.
871       if(hypD01==1) {
872         fPtSel->Fill(ptPart);
873         fScatterP4PID->Fill(trk1->Pt(),trk3->Pt());
874         if (ptPart < ptBinH[1])                          {fhInvMassD0Sum_10Mev_Bin1->Fill(fmassD0[0]);
875                                                           fhInvMassD0Sum_5Mev_Bin1->Fill(fmassD0[0]);
876                                                           fhInvMassSumAll_10Mev_Bin1->Fill(fmassD0[0]);
877                                                           fhInvMassSumAll_5Mev_Bin1->Fill(fmassD0[0]);}
878         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) {fhInvMassD0Sum_10Mev_Bin2->Fill(fmassD0[0]);
879                                                              fhInvMassD0Sum_5Mev_Bin2->Fill(fmassD0[0]);
880                                                              fhInvMassSumAll_10Mev_Bin2->Fill(fmassD0[0]);
881                                                              fhInvMassSumAll_5Mev_Bin2->Fill(fmassD0[0]);}
882         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) {fhInvMassD0Sum_10Mev_Bin3->Fill(fmassD0[0]);
883                                                              fhInvMassD0Sum_5Mev_Bin3->Fill(fmassD0[0]);
884                                                              fhInvMassSumAll_10Mev_Bin3->Fill(fmassD0[0]);
885                                                              fhInvMassSumAll_5Mev_Bin3->Fill(fmassD0[0]);}
886         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) {fhInvMassD0Sum_10Mev_Bin4->Fill(fmassD0[0]);
887                                                              fhInvMassD0Sum_5Mev_Bin4->Fill(fmassD0[0]);
888                                                              fhInvMassSumAll_10Mev_Bin4->Fill(fmassD0[0]);
889                                                              fhInvMassSumAll_5Mev_Bin4->Fill(fmassD0[0]);}
890         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5])     {fhInvMassD0Sum_10Mev_Bin5->Fill(fmassD0[0]);
891                                                                 fhInvMassD0Sum_5Mev_Bin5->Fill(fmassD0[0]);
892                                                                 fhInvMassSumAll_10Mev_Bin5->Fill(fmassD0[0]);
893                                                                 fhInvMassSumAll_5Mev_Bin5->Fill(fmassD0[0]);} 
894      }
895       // D02 hyp.
896       if(hypD02==1) {
897         fPtSel->Fill(ptPart);
898         fScatterP4PID->Fill(trk3->Pt(),trk1->Pt());
899         if (ptPart < ptBinH[1])                          {fhInvMassD0Sum_10Mev_Bin1->Fill(fmassD0[1]);
900                                                           fhInvMassD0Sum_5Mev_Bin1->Fill(fmassD0[1]);
901                                                           fhInvMassSumAll_10Mev_Bin1->Fill(fmassD0[1]);
902                                                           fhInvMassSumAll_5Mev_Bin1->Fill(fmassD0[1]);}
903         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) {fhInvMassD0Sum_10Mev_Bin2->Fill(fmassD0[1]);
904                                                              fhInvMassD0Sum_5Mev_Bin2->Fill(fmassD0[1]);
905                                                              fhInvMassSumAll_10Mev_Bin2->Fill(fmassD0[1]);
906                                                              fhInvMassSumAll_5Mev_Bin2->Fill(fmassD0[1]);}
907         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) {fhInvMassD0Sum_10Mev_Bin3->Fill(fmassD0[1]);
908                                                              fhInvMassD0Sum_5Mev_Bin3->Fill(fmassD0[1]);
909                                                              fhInvMassSumAll_10Mev_Bin3->Fill(fmassD0[1]);
910                                                              fhInvMassSumAll_5Mev_Bin3->Fill(fmassD0[1]);}
911         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) {fhInvMassD0Sum_10Mev_Bin4->Fill(fmassD0[1]);
912                                                              fhInvMassD0Sum_5Mev_Bin4->Fill(fmassD0[1]);
913                                                              fhInvMassSumAll_10Mev_Bin4->Fill(fmassD0[1]);
914                                                              fhInvMassSumAll_5Mev_Bin4->Fill(fmassD0[1]);}
915         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5])     {fhInvMassD0Sum_10Mev_Bin5->Fill(fmassD0[1]);
916                                                                  fhInvMassD0Sum_5Mev_Bin5->Fill(fmassD0[1]);
917                                                                  fhInvMassSumAll_10Mev_Bin5->Fill(fmassD0[1]);
918                                                                  fhInvMassSumAll_5Mev_Bin5->Fill(fmassD0[1]);}
919      }
920       // D0bar1 hyp.
921       if(hypD0bar1==1) {
922         fPtSel->Fill(ptPart);
923         fScatterP4PID->Fill(trk0->Pt(),trk2->Pt());
924         if (ptPart < ptBinH[1])                          {fhInvMassD0barSum_10Mev_Bin1->Fill(fmassD0bar[0]);
925                                                           fhInvMassD0barSum_5Mev_Bin1->Fill(fmassD0bar[0]);
926                                                           fhInvMassSumAll_10Mev_Bin1->Fill(fmassD0bar[0]);
927                                                           fhInvMassSumAll_5Mev_Bin1->Fill(fmassD0bar[0]);}
928         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) {fhInvMassD0barSum_10Mev_Bin2->Fill(fmassD0bar[0]);
929                                                              fhInvMassD0barSum_5Mev_Bin2->Fill(fmassD0bar[0]);
930                                                              fhInvMassSumAll_10Mev_Bin2->Fill(fmassD0bar[0]);
931                                                              fhInvMassSumAll_5Mev_Bin2->Fill(fmassD0bar[0]);}
932         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) {fhInvMassD0barSum_10Mev_Bin3->Fill(fmassD0bar[0]);
933                                                              fhInvMassD0barSum_5Mev_Bin3->Fill(fmassD0bar[0]);
934                                                              fhInvMassSumAll_10Mev_Bin3->Fill(fmassD0bar[0]);
935                                                              fhInvMassSumAll_5Mev_Bin3->Fill(fmassD0bar[0]);}
936         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) {fhInvMassD0barSum_10Mev_Bin4->Fill(fmassD0bar[0]);
937                                                              fhInvMassD0barSum_5Mev_Bin4->Fill(fmassD0bar[0]);
938                                                              fhInvMassSumAll_10Mev_Bin4->Fill(fmassD0bar[0]);
939                                                              fhInvMassSumAll_5Mev_Bin4->Fill(fmassD0bar[0]);}
940         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5])     {fhInvMassD0barSum_10Mev_Bin5->Fill(fmassD0bar[0]);
941                                                                 fhInvMassD0barSum_5Mev_Bin5->Fill(fmassD0bar[0]);
942                                                                 fhInvMassSumAll_10Mev_Bin5->Fill(fmassD0bar[0]);
943                                                                 fhInvMassSumAll_5Mev_Bin5->Fill(fmassD0bar[0]);}   
944      } 
945       // D0bar2 hyp.
946       if(hypD0bar2==1) {
947         fPtSel->Fill(ptPart);
948         fScatterP4PID->Fill(trk2->Pt(),trk0->Pt());
949         if (ptPart < ptBinH[1])                          {fhInvMassD0barSum_10Mev_Bin1->Fill(fmassD0bar[1]);
950                                                           fhInvMassD0barSum_5Mev_Bin1->Fill(fmassD0bar[1]);
951                                                           fhInvMassSumAll_10Mev_Bin1->Fill(fmassD0bar[1]);
952                                                           fhInvMassSumAll_5Mev_Bin1->Fill(fmassD0bar[1]);}
953         else if (ptPart >= ptBinH[1] && ptPart < ptBinH[2]) {fhInvMassD0barSum_10Mev_Bin2->Fill(fmassD0bar[1]);
954                                                              fhInvMassD0barSum_5Mev_Bin2->Fill(fmassD0bar[1]);
955                                                              fhInvMassSumAll_10Mev_Bin2->Fill(fmassD0bar[1]);
956                                                              fhInvMassSumAll_5Mev_Bin2->Fill(fmassD0bar[1]);}
957         else if (ptPart >= ptBinH[2] && ptPart < ptBinH[3]) {fhInvMassD0barSum_10Mev_Bin3->Fill(fmassD0bar[1]);
958                                                              fhInvMassD0barSum_5Mev_Bin3->Fill(fmassD0bar[1]);
959                                                              fhInvMassSumAll_10Mev_Bin3->Fill(fmassD0bar[1]);
960                                                              fhInvMassSumAll_5Mev_Bin3->Fill(fmassD0bar[1]);}
961         else if (ptPart >= ptBinH[3] && ptPart < ptBinH[4]) {fhInvMassD0barSum_10Mev_Bin4->Fill(fmassD0bar[1]);
962                                                              fhInvMassD0barSum_5Mev_Bin4->Fill(fmassD0bar[1]);
963                                                              fhInvMassSumAll_10Mev_Bin4->Fill(fmassD0bar[1]);
964                                                              fhInvMassSumAll_5Mev_Bin4->Fill(fmassD0bar[1]);}
965         else if (ptPart >= ptBinH[4] && ptPart < ptBinH[5])     {fhInvMassD0barSum_10Mev_Bin5->Fill(fmassD0bar[1]);
966                                                                 fhInvMassD0barSum_5Mev_Bin5->Fill(fmassD0bar[1]);
967                                                                 fhInvMassSumAll_10Mev_Bin5->Fill(fmassD0bar[1]);
968                                                                 fhInvMassSumAll_5Mev_Bin5->Fill(fmassD0bar[1]);} 
969      }
970    }
971
972       PostData(1,fOutput);
973       PostData(2,fOutput2);
974       PostData(3,fOutput3);
975       PostData(4,fOutput4);
976       PostData(5,fOutput5);
977
978       // HERE ONE COULD RECALCULATE THE VERTEX USING THE KF PACKAGE
979
980       // clone candidate for output AOD
981       if(hypD01||hypD02||hypD0bar1||hypD0bar2) {
982       AliAODVertex *v = new(verticesHFRef[iOutVerticesHF++]) 
983         AliAODVertex(*(dIn->GetSecondaryVtx()));
984       AliAODRecoDecayHF4Prong *dOut=new(aodCharm4ProngRef[iOutCharm4Prong++]) 
985         AliAODRecoDecayHF4Prong(*dIn);
986       dOut->SetSecondaryVtx(v);
987       dOut->SetOwnPrimaryVtx((AliAODVertex*)((dIn->GetOwnPrimaryVtx())->Clone()));
988       v->SetParent(dOut); 
989       }
990     } //end of selection loop (starts with fSelected == 1, 2 or 3)
991     if(unsetvtx) dIn->UnsetOwnPrimaryVtx();
992   } // end loop on D0->K3pi
993
994   printf("Number of selected D0->K3pi: %d\n",iOutCharm4Prong);
995
996   return;
997 }
998
999 //________________________________________________________________________
1000 void AliAnalysisTaskSESelectHF4Prong::Terminate(Option_t */*option*/)
1001 {
1002   // Terminate analysis
1003   //
1004   if(fDebug > 1) printf("AnalysisTaskSESelectHF4Prong: Terminate() \n");
1005
1006   fOutput = dynamic_cast<TList*> (GetOutputData(1));
1007   if (!fOutput) {
1008     printf("ERROR: fOutput not available\n");
1009     return;
1010   }
1011   fOutput2 = dynamic_cast<TList*> (GetOutputData(2));
1012   if (!fOutput2) {
1013     printf("ERROR: fOutput not available\n");
1014     return;
1015   }
1016   fOutput3 = dynamic_cast<TList*> (GetOutputData(3));
1017   if (!fOutput3) {
1018     printf("ERROR: fOutput not available\n");
1019     return;
1020   }
1021   fOutput4 = dynamic_cast<TList*> (GetOutputData(4));
1022   if (!fOutput4) {
1023     printf("ERROR: fOutput not available\n");
1024     return;
1025   }
1026   if (!fOutput5) {
1027     printf("ERROR: fOutput not available\n");
1028     return;
1029   }
1030   fOutputC = dynamic_cast<TList*> (GetOutputData(5));
1031   if (!fOutputC) {
1032     printf("ERROR: fOutputC not available\n");
1033     return;
1034   }
1035
1036   fhInvMassD0Sum_10Mev_Bin1 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0Sum_10Mev_Bin1"));
1037   fhInvMassD0barSum_10Mev_Bin1 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0barSum_10Mev_Bin1"));
1038   fhInvMassSumAll_10Mev_Bin1 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassSumAll_10Mev_Bin1"));
1039   fhInvMassD0Sum_5Mev_Bin1 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0Sum_5Mev_Bin1"));
1040   fhInvMassD0barSum_5Mev_Bin1 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0barSum_5Mev_Bin1"));
1041   fhInvMassSumAll_5Mev_Bin1 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassSumAll_5Mev_Bin1"));
1042   fhInvMassD0Sum_10Mev_Bin2 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0Sum_10Mev_Bin2"));
1043   fhInvMassD0barSum_10Mev_Bin2 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0barSum_10Mev_Bin2"));
1044   fhInvMassSumAll_10Mev_Bin2 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassSumAll_10Mev_Bin2"));
1045   fhInvMassD0Sum_5Mev_Bin2 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0Sum_5Mev_Bin2"));
1046   fhInvMassD0barSum_5Mev_Bin2 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0barSum_5Mev_Bin2"));
1047   fhInvMassSumAll_5Mev_Bin2 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassSumAll_5Mev_Bin2"));
1048   fhInvMassD0Sum_10Mev_Bin3 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0Sum_10Mev_Bin3"));
1049   fhInvMassD0barSum_10Mev_Bin3 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0barSum_10Mev_Bin3"));
1050   fhInvMassSumAll_10Mev_Bin3 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassSumAll_10Mev_Bin3"));
1051   fhInvMassD0Sum_5Mev_Bin3 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0Sum_5Mev_Bin3"));
1052   fhInvMassD0barSum_5Mev_Bin3 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0barSum_5Mev_Bin3"));
1053   fhInvMassSumAll_5Mev_Bin3 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassSumAll_5Mev_Bin3"));
1054   fhInvMassD0Sum_10Mev_Bin4 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0Sum_10Mev_Bin4"));
1055   fhInvMassD0barSum_10Mev_Bin4 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0barSum_10Mev_Bin4"));
1056   fhInvMassSumAll_10Mev_Bin4 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassSumAll_10Mev_Bin4"));
1057   fhInvMassD0Sum_5Mev_Bin4 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0Sum_5Mev_Bin4"));
1058   fhInvMassD0barSum_5Mev_Bin4 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0barSum_5Mev_Bin4"));
1059   fhInvMassSumAll_5Mev_Bin4 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassSumAll_5Mev_Bin4"));
1060   fhInvMassD0Sum_10Mev_Bin5 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0Sum_10Mev_Bin5"));
1061   fhInvMassD0barSum_10Mev_Bin5 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0barSum_10Mev_Bin5"));
1062   fhInvMassSumAll_10Mev_Bin5 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassSumAll_10Mev_Bin5"));
1063   fhInvMassD0Sum_5Mev_Bin5 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0Sum_5Mev_Bin5"));
1064   fhInvMassD0barSum_5Mev_Bin5 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassD0barSum_5Mev_Bin5"));
1065   fhInvMassSumAll_5Mev_Bin5 = dynamic_cast<TH1F*>(fOutput->FindObject("fhInvMassSumAll_5Mev_Bin5"));
1066
1067   fScatterP4PID = dynamic_cast<TH2F*>(fOutput->FindObject("fScatterP4PID"));
1068   fPtVsY = dynamic_cast<TH2F*>(fOutputC->FindObject("fPtVsY"));
1069   fPtVsYAll = dynamic_cast<TH2F*>(fOutputC->FindObject("fPtVsYAll"));
1070
1071   fEventCounter = dynamic_cast<TH1F*>(fOutputC->FindObject("fEventCounter"));
1072
1073   fCutDCA = dynamic_cast<TH1F*>(fOutputC->FindObject("fCutDCA"));
1074   fCutDCA3 = dynamic_cast<TH1F*>(fOutputC->FindObject("fCutDCA3"));
1075   fCutDCA2 = dynamic_cast<TH1F*>(fOutputC->FindObject("fCutDCA2"));
1076   fCutDCA5 = dynamic_cast<TH1F*>(fOutputC->FindObject("fCutDCA5"));
1077   fCutVertexDist2 = dynamic_cast<TH1F*>(fOutputC->FindObject("fCutVertexDist2"));
1078   fCutVertexDist3 = dynamic_cast<TH1F*>(fOutputC->FindObject("fCutVertexDist3"));
1079   fCutVertexDist4 = dynamic_cast<TH1F*>(fOutputC->FindObject("fCutVertexDist4"));
1080   fCutCosinePoint = dynamic_cast<TH1F*>(fOutputC->FindObject("fCutCosinePoint"));
1081
1082   fCutPt = dynamic_cast<TH1F*>(fOutputC->FindObject("fCutPt"));
1083   fCutY = dynamic_cast<TH1F*>(fOutputC->FindObject("fCutY"));
1084   fPIDSel = dynamic_cast<TH1F*>(fOutputC->FindObject("fPIDSel"));
1085   fPIDSel_Bin1 = dynamic_cast<TH1F*>(fOutputC->FindObject("fPIDSel_Bin1"));
1086   fPIDSel_Bin2 = dynamic_cast<TH1F*>(fOutputC->FindObject("fPIDSel_Bin2"));
1087   fPIDSel_Bin3 = dynamic_cast<TH1F*>(fOutputC->FindObject("fPIDSel_Bin3"));
1088   fPIDSel_Bin4 = dynamic_cast<TH1F*>(fOutputC->FindObject("fPIDSel_Bin4"));
1089   fPIDSel_Bin5 = dynamic_cast<TH1F*>(fOutputC->FindObject("fPIDSel_Bin5"));
1090 }
1091