1 /**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 /////////////////////////////////////////////////////////////
18 // AliAnalysisTaskSE for the selection of heavy flavor
19 // decay candidates and creation a stand-alone AOD for
22 // Author: A.Dainese, andrea.dainese@lnl.infn.it
23 // F.Colamaria, fabio.colamaria@ba.infn.it
24 /////////////////////////////////////////////////////////////
27 #include "Riostream.h"
32 #include "TClonesArray.h"
33 #include "TDatabasePDG.h"
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"
53 ClassImp(AliAnalysisTaskSESelectHF4Prong)
56 //________________________________________________________________________
57 AliAnalysisTaskSESelectHF4Prong::AliAnalysisTaskSESelectHF4Prong():
60 fCharm4ProngTClArr(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),
123 fMultipleHypsType(0),
128 // Default constructor
131 //________________________________________________________________________
132 AliAnalysisTaskSESelectHF4Prong::AliAnalysisTaskSESelectHF4Prong(const char *name,AliRDHFCutsD0toKpipipi* cuts):
133 AliAnalysisTaskSE(name),
134 fVerticesHFTClArr(0),
135 fCharm4ProngTClArr(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),
198 fMultipleHypsType(0),
203 // Standard constructor
207 // Input slot #0 works with an Ntuple
208 // DefineInput(0, TTree::Class());
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
222 //________________________________________________________________________
223 AliAnalysisTaskSESelectHF4Prong::~AliAnalysisTaskSESelectHF4Prong()
262 //________________________________________________________________________
263 void AliAnalysisTaskSESelectHF4Prong::Init()
267 if(fDebug > 1) printf("AnalysisTaskSESelectHF4Prong::Init() \n");
272 //________________________________________________________________________
273 void AliAnalysisTaskSESelectHF4Prong::UserCreateOutputObjects()
275 // Create the output container
277 if(fDebug > 1) printf("AnalysisTaskSESelectHF4Prong::UserCreateOutputObjects() \n");
279 fVerticesHFTClArr = new TClonesArray("AliAODVertex", 0);
280 fVerticesHFTClArr->SetName("VerticesHF");
281 AddAODBranch("TClonesArray", &fVerticesHFTClArr);
283 fCharm4ProngTClArr = new TClonesArray("AliAODRecoDecayHF4Prong", 0);
284 fCharm4ProngTClArr->SetName("Charm4Prong");
285 AddAODBranch("TClonesArray", &fCharm4ProngTClArr);
287 fOutput = new TList();
290 fOutput2 = new TList();
291 fOutput2->SetOwner();
293 fOutput3 = new TList();
294 fOutput3->SetOwner();
296 fOutput4 = new TList();
297 fOutput4->SetOwner();
299 fOutput5 = new TList();
300 fOutput5->SetOwner();
302 fOutputC = new TList();
303 fOutputC->SetOwner();
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
492 fEventCounter = new TH1F("fEventCounter", "N° of total events; NA; Events",1,0.,1.);
493 fEventCounter->SetMinimum(0);
494 fOutputC->Add(fEventCounter);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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)");
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)");
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)");
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)");
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)");
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)");
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)");
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");
594 fOutputC->Add(fMultipleHyps);
595 fOutputC->Add(fMultipleHypsType);
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);
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);
611 //________________________________________________________________________
612 void AliAnalysisTaskSESelectHF4Prong::UserExec(Option_t */*option*/)
614 // Execute analysis for current event:
615 // heavy flavor candidates selection and histograms
617 AliAODEvent *aodIn = dynamic_cast<AliAODEvent*> (InputEvent());
619 TClonesArray *inputArrayCharm4Prong = 0;
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");
636 // load D0 candidates
637 inputArrayCharm4Prong=(TClonesArray*)aodIn->GetList()->FindObject("Charm4Prong");
640 if(!inputArrayCharm4Prong) {
641 printf("AliAnalysisTaskSESelectHF4Prong::UserExec: D0to3Kpi branch not found!\n");
646 // aodIn->GetHeader()->Print();
649 fEventCounter->Fill(0);
651 // fix for temporary bug in ESDfilter
652 // the AODs with null vertex pointer didn't pass the PhysSel
653 if(!aodIn->GetPrimaryVertex()) return;
656 AliAODVertex *vtx1 = (AliAODVertex*)aodIn->GetPrimaryVertex();
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;
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;
674 // loop over D0->K3pi candidates
675 Int_t nInCharm4Prong = inputArrayCharm4Prong->GetEntriesFast();
676 printf("Number of D0->K3pi: %d\n",nInCharm4Prong);
678 for (Int_t iCharm4Prong = 0; iCharm4Prong < nInCharm4Prong; iCharm4Prong++) {
679 AliAODRecoDecayHF4Prong *dIn = (AliAODRecoDecayHF4Prong*)inputArrayCharm4Prong->UncheckedAt(iCharm4Prong);
680 Bool_t unsetvtx=kFALSE;
682 if(!dIn->GetOwnPrimaryVtx()) {
683 dIn->SetOwnPrimaryVtx(vtx1); // needed to compute all variables
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);
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
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);
711 fPtVsYAll->Fill(ptPart,yPart);
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;
723 if (TMath::Abs(yPart) > 0.8) flagAccLim = 0;
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;;
731 //number of CANDIDATES (regardless of hypotheses) passing PPR
732 if(fSelected==1||fSelected==2||fSelected==3) {
733 fPtVsY->Fill(ptPart,yPart);
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);
743 PostData(6,fOutputC);
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)]);
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());
763 dIn->InvMassD0(fmassD0);
764 dIn->InvMassD0bar(fmassD0bar);
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);
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) {
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);
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);
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;
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) {
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);
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);
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);
821 // This section is auxiliary: (multiple hypotheses histos)
823 if (hypD01+hypD02+hypD0bar1+hypD0bar2 == 2 || hypD01+hypD02+hypD0bar1+hypD0bar2 == 3 || hypD01+hypD02+hypD0bar1+hypD0bar2 == 4)
826 if (ptPart > ptBinH[0]) {
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]);
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]);
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]);
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]);
863 //end of auxiliary section
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]) {
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]);}
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]);}
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]);}
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]);}
973 PostData(2,fOutput2);
974 PostData(3,fOutput3);
975 PostData(4,fOutput4);
976 PostData(5,fOutput5);
978 // HERE ONE COULD RECALCULATE THE VERTEX USING THE KF PACKAGE
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()));
990 } //end of selection loop (starts with fSelected == 1, 2 or 3)
991 if(unsetvtx) dIn->UnsetOwnPrimaryVtx();
992 } // end loop on D0->K3pi
994 printf("Number of selected D0->K3pi: %d\n",iOutCharm4Prong);
999 //________________________________________________________________________
1000 void AliAnalysisTaskSESelectHF4Prong::Terminate(Option_t */*option*/)
1002 // Terminate analysis
1004 if(fDebug > 1) printf("AnalysisTaskSESelectHF4Prong: Terminate() \n");
1006 fOutput = dynamic_cast<TList*> (GetOutputData(1));
1008 printf("ERROR: fOutput not available\n");
1011 fOutput2 = dynamic_cast<TList*> (GetOutputData(2));
1013 printf("ERROR: fOutput not available\n");
1016 fOutput3 = dynamic_cast<TList*> (GetOutputData(3));
1018 printf("ERROR: fOutput not available\n");
1021 fOutput4 = dynamic_cast<TList*> (GetOutputData(4));
1023 printf("ERROR: fOutput not available\n");
1027 printf("ERROR: fOutput not available\n");
1030 fOutputC = dynamic_cast<TList*> (GetOutputData(5));
1032 printf("ERROR: fOutputC not available\n");
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"));
1067 fScatterP4PID = dynamic_cast<TH2F*>(fOutput->FindObject("fScatterP4PID"));
1068 fPtVsY = dynamic_cast<TH2F*>(fOutputC->FindObject("fPtVsY"));
1069 fPtVsYAll = dynamic_cast<TH2F*>(fOutputC->FindObject("fPtVsYAll"));
1071 fEventCounter = dynamic_cast<TH1F*>(fOutputC->FindObject("fEventCounter"));
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"));
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"));