AliPhysics  59e0e03 (59e0e03)
AliAnalysisTaskSEB0toDStarPi.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
7  * Permission to use, copy, modify and distribute this software and its *
8  * documentation strictly for non-commercial purposes is hereby granted *
9  * without fee, provided that the above copyright notice appears in all *
10  * copies and that both the copyright notice and this permission notice *
11  * appeuear in the supporting documentation. The authors make no claims *
12  * about the suitability of this software for any purpose. It is *
13  * provided "as is" without express or implied warranty. *
14  **************************************************************************/
15 
16 /* $Id$ */
17 
18 //
19 //
20 // Base class for (B0 -> DStar pi -> D0 pi pi -> K pi pi pi) Analysis
21 //
22 //
23 // Cuts are centralized in AliRDHFCutsB0toDStarPi
24 // Like sign background is imlemented in the macro
25 //
26 //-----------------------------------------------------------------------
27 //
28 // Author Lennart van Doremalen
29 // Utrecht University - l.v.r.vandoremalen@uu.nl
30 //
31 // Several AliPhysics classes have been used as a basis for this code
32 //
33 //-----------------------------------------------------------------------
34 
35 #include <TSystem.h>
36 #include <TChain.h>
37 #include <TParticle.h>
38 #include <TH1I.h>
39 #include "TROOT.h"
40 #include <TDatabasePDG.h>
41 #include <AliAnalysisDataSlot.h>
42 #include <AliAnalysisDataContainer.h>
43 #include "AliRDHFCutsB0toDStarPi.h"
44 #include "AliStack.h"
45 #include "AliMCEvent.h"
46 #include "AliAnalysisManager.h"
47 #include "AliAODMCHeader.h"
48 #include "AliAODHandler.h"
49 #include "AliLog.h"
50 #include "AliVertex.h"
51 #include "AliVVertex.h"
52 #include "AliESDVertex.h"
53 #include "AliAODVertex.h"
54 #include "AliVertexerTracks.h"
55 #include "AliExternalTrackParam.h"
56 #include "AliNeutralTrackParam.h"
57 #include "AliAODRecoDecay.h"
58 #include "AliAODRecoDecayHF.h"
60 #include "AliAnalysisVertexingHF.h"
61 #include "AliVertexingHFUtils.h"
62 #include "AliESDtrack.h"
63 #include "AliAODMCParticle.h"
64 #include "AliAODEvent.h"
66 #include "AliAODInputHandler.h"
67 #include <vector>
68 #include <TMatrix.h>
69 #include <TVector3.h>
70 #include <TArrayI.h>
71 #include <bitset>
72 #include <TH3F.h>
73 
74 // #include "TObjectTable.h"
75 
79 
80 //__________________________________________________________________________
83  fListCuts(0),
84  fEvents(0),
85  fUseMCInfo(kFALSE),
86  fOutput(0),
87  fOutputD0FirstDaughter(0),
88  fOutputD0SecondDaughter(0),
89  fOutputDStarPion(0),
90  fOutputB0Pion(0),
91  fOutputD0(0),
92  fOutputDStar(0),
93  fOutputB0(0),
94  fOutputD0_D0Pt(0),
95  fOutputD0_DStarPt(0),
96  fOutputDStar_DStarPt(0),
97  fOutputB0MC(0),
98  fCuts(0),
99  fQuickSignalAnalysis(0),
100  fGetCutInfo(0),
101  fCEvents(0),
102  fDStarPionTracks(0x0),
103  fB0PionTracks(0x0),
104  fD0Tracks(0x0),
105  fShowMask(0),
106  fShowRejection(0),
107  fnPtBins(0),
108  fnPtBinsD0forD0ptbin(0),
109  fnPtBinsD0forDStarptbin(0),
110  fnPtBinsDStarforDStarptbin(0),
111  fnPtBinLimits(0),
112  fnPtBinsD0forD0ptbinLimits(0),
113  fnPtBinsD0forDStarptbinLimits(0),
114  fnPtBinsDStarforDStarptbinLimits(0),
115  fPtBinLimits(0x0),
116  fPtBinLimitsD0forD0ptbin(0x0),
117  fPtBinLimitsD0forDStarptbin(0x0),
118  fPtBinLimitsDStarforDStarptbin(0x0),
119  fDaughterHistogramArray(),
120  fDaughterHistogramArray2D(),
121  fDaughterHistogramArrayExtra(),
122  fMotherHistogramArray(),
123  fMotherHistogramArray2D(),
124  fMotherHistogramArrayExtra(),
125  fMotherHistogramArray3D(),
126  fUse3DHistograms(0),
127  fUpgradeSetting(0),
128  fHistMassWindow(0.125),
129  fDegreePerRotation(0),
130  fNumberOfRotations(0),
131  fCheckBackground(0)
132 {
133  //
135  //
136 
137 }
138 //___________________________________________________________________________
140  AliAnalysisTaskSE(name),
141  fListCuts(0),
142  fEvents(0),
143  fUseMCInfo(kFALSE),
144  fOutput(0),
147  fOutputDStarPion(0),
148  fOutputB0Pion(0),
149  fOutputD0(0),
150  fOutputDStar(0),
151  fOutputB0(0),
152  fOutputD0_D0Pt(0),
155  fOutputB0MC(0),
156  fCuts(0),
158  fGetCutInfo(0),
159  fCEvents(0),
160  fDStarPionTracks(0x0),
161  fB0PionTracks(0x0),
162  fD0Tracks(0x0),
163  fShowMask(0),
164  fShowRejection(0),
165  fnPtBins(0),
169  fnPtBinLimits(0),
173  fPtBinLimits(0x0),
184  fUse3DHistograms(0),
185  fUpgradeSetting(0),
186  fHistMassWindow(0.125),
190 {
191  //
193  //
194 
195  Info("AliAnalysisTaskSEB0toDStarPi","Calling Constructor");
196 
197  fCuts = cuts;
198 
199  DefineInput(0,TChain::Class());
200  DefineOutput(1,TList::Class()); // counters
201  DefineOutput(2,TList::Class()); // cut file
202  DefineOutput(3,TList::Class()); // D0 pion output
203  DefineOutput(4,TList::Class()); // D0 kaon output
204  DefineOutput(5,TList::Class()); // DStar pion output
205  DefineOutput(6,TList::Class()); // B0 pion output
206  DefineOutput(7,TList::Class()); // D0 output
207  DefineOutput(8,TList::Class()); // DStar output
208  DefineOutput(9,TList::Class()); // B0 output
209  DefineOutput(10,TList::Class()); // B0 output
210  DefineOutput(11,TList::Class()); // B0 output
211  DefineOutput(12,TList::Class()); // B0 output
212  DefineOutput(13,TList::Class()); // B0MC output
213 
214 }
215 
216 //___________________________________________________________________________
218  //
220  //
221  Info("~AliAnalysisTaskSEB0toDStarPi","Calling Destructor");
222 
223  delete fOutput;
224  delete fOutputD0FirstDaughter;
226  delete fOutputDStarPion;
227  delete fOutputB0Pion;
228  delete fOutputD0;
229  delete fOutputDStar;
230  delete fOutputB0;
231  delete fOutputD0_D0Pt;
232  delete fOutputD0_DStarPt;
233  delete fOutputDStar_DStarPt;
234  delete fOutputB0MC;
235  delete fCuts;
236  delete fCEvents;
237  delete fD0Tracks;
238  delete fDStarPionTracks;
239  delete fB0PionTracks;
240  delete fListCuts;
241 }
242 //_________________________________________________
244  //
246  //
247 
248  if(fDebug > 1) printf("AliAnalysisTaskSEB0toDStarPi::Init() \n");
249 
250  return;
251 }
252 //_________________________________________________
254 
255  //==================================================================================
256  // USER EXECUTION FUNCTION - start
257  //==================================================================================
258  //
259  // This is the main function for the heavy flavour analysis.
260  //
261  //==================================================================================
262 
263  if (!fInputEvent) {
264  Error("UserExec","NO EVENT FOUND!");
265  return;
266  }
267 
268  if(fEvents%50==0){
269  std::cout << "\r" << "Analysing event number: " << fEvents << std::endl;
270  }
271 
272  fEvents++;
273 
274  // Show trigger mask
275  if(fShowMask)
276  {
277  std::bitset<32> maskEV(((AliAODInputHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected());
278  std::cout << "Event mask: " << maskEV << std::endl;
279  std::cout << "Trigger mask: " << std::bitset<32>(fCuts->GetTriggerMask()) << std::endl;
280  }
281 
282  //==================================================================================
283  // EVENT INITIALIZATION - start
284  //==================================================================================
285 
286 
287  AliAODEvent * aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent);
288  TClonesArray * D0TracksFromFriendFile = 0;
289  fCEvents->Fill(1);
290 
291  if(!aodEvent && AODEvent() && IsStandardAOD())
292  {
293  // In case there is an AOD handler writing a standard AOD, use the AOD
294  // event in memory rather than the input (ESD) event.
295  aodEvent = dynamic_cast<AliAODEvent*> (AODEvent());
296  // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
297  // have to taken from the AOD event hold by the AliAODExtension
298  AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
299  if(aodHandler->GetExtensions())
300  {
301  AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
302  AliAODEvent *aodFromExt = ext->GetAOD();
303  D0TracksFromFriendFile=(TClonesArray*)aodFromExt->GetList()->FindObject("D0toKpi");
304  }
305  }
306  else
307  {
308  D0TracksFromFriendFile=(TClonesArray*)aodEvent->GetList()->FindObject("D0toKpi");
309  }
310 
311  // fix for temporary bug in ESDfilter
312  // the AODs with null vertex pointer didn't pass the PhysSel
313  if(!aodEvent->GetPrimaryVertex() || TMath::Abs(aodEvent->GetMagneticField())<0.001) return;
314  fCEvents->Fill(2);
315 
316 
317  // trigger class for PbPb C0SMH-B-NOPF-ALLNOTRD
318  TString trigclass=aodEvent->GetFiredTriggerClasses();
319  if(trigclass.Contains("C0SMH-B-NOPF-ALLNOTRD")||trigclass.Contains("C0SMH-B-NOPF-ALL")) fCEvents->Fill(5);
320 
321  if(!fCuts->IsEventSelected(aodEvent))
322  {
323  if(fShowRejection) std::cout << "Event rejected by code: " << fCuts->GetWhyRejection() << std::endl;
324  if(fCuts->GetWhyRejection()==6) // rejected for Z vertex
325  {
326  fCEvents->Fill(6);
327  return;
328  }
329  }
330 
331  Bool_t isEvSel=fCuts->IsEventSelected(aodEvent);
332  if(!isEvSel) return;
333  fCEvents->Fill(3);
334 
335  //get the magnetic field
336  Double_t bz = (Double_t)aodEvent->GetMagneticField();
337 
338  // AOD primary vertex
339  AliAODVertex *primaryVertex = (AliAODVertex*)aodEvent->GetPrimaryVertex();
340  if(!primaryVertex) return;
341  if(primaryVertex->GetNContributors()<1) return;
342  fCEvents->Fill(4);
343 
344  if(!D0TracksFromFriendFile)
345  {
346  AliInfo("Could not find array of HF vertices, skipping the event");
347  return;
348  }
349  else AliDebug(2, Form("Found %d vertices",D0TracksFromFriendFile->GetEntriesFast()));
350 
351  AliAODMCHeader *mcHeader = 0;
352  if(fUseMCInfo)
353  {
354  mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
355  if(!mcHeader) {
356  printf(" MC header branch not found!\n");
357  return;
358  }
359  }
360 
361 
362  //==================================================================================
363  // EVENT INITIALIZATION - end
364  //==================================================================================
365  // B0 MC SIGNAL IDENTIFICATION - start
366  //==================================================================================
367 
368  // We create an array that contains all the monte carlo particles in the event
369  TClonesArray *mcTrackArray = nullptr;
370  if(fUseMCInfo) mcTrackArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
371  if(fUseMCInfo && !mcTrackArray) return;
372 
373  // We create an array to save the MC labels of true signal tracks
374  TMatrix * B0toDStarPiLabelMatrix = new TMatrix(0,7);
375 
376  // We fill the array with all B0->DStarPi tracks
377  if(fUseMCInfo) {
378  B0toDStarPiSignalTracksInMC(mcTrackArray,aodEvent,B0toDStarPiLabelMatrix,fOutputB0MC);
379  }
380  //==================================================================================
381  // B0 MC SIGNAL IDENTIFICATION - end
382  //==================================================================================
383  // PARTICLE SELECTION LOOP - start
384  //==================================================================================
385  //
386  // Here we select and reconstruct the particles for the B0->D*Pion decay.
387  //
388  //==================================================================================
389 
390  DStarPionSelection(aodEvent,primaryVertex,bz,mcTrackArray,B0toDStarPiLabelMatrix,mcHeader);
391  B0PionSelection(aodEvent,primaryVertex,bz,mcTrackArray,B0toDStarPiLabelMatrix,mcHeader);
392  D0Selection(aodEvent,primaryVertex,bz,mcTrackArray,B0toDStarPiLabelMatrix,D0TracksFromFriendFile,mcHeader);
393 
394  DStarAndB0Selection(aodEvent,primaryVertex,bz,mcTrackArray,B0toDStarPiLabelMatrix,D0TracksFromFriendFile,mcHeader);
395 
396  // Clear arrays and memory management:
397  fD0Tracks->erase(fD0Tracks->begin(),fD0Tracks->end());
398  fB0PionTracks->erase(fB0PionTracks->begin(),fB0PionTracks->end());
399  fDStarPionTracks->erase(fDStarPionTracks->begin(),fDStarPionTracks->end());
400 
401  delete B0toDStarPiLabelMatrix; B0toDStarPiLabelMatrix = nullptr;
402 
403  //==================================================================================
404  // PARTICLE SELECTION LOOP - end
405  //==================================================================================
406 
407  PostData(1,fOutput);
408  PostData(3,fOutputD0FirstDaughter);
409  PostData(4,fOutputD0SecondDaughter);
410  PostData(5,fOutputDStarPion);
411  PostData(6,fOutputB0Pion);
412  PostData(7,fOutputD0);
413  PostData(8,fOutputDStar);
414  PostData(9,fOutputB0);
415  PostData(10,fOutputD0_D0Pt);
416  PostData(11,fOutputD0_DStarPt);
417  PostData(12,fOutputDStar_DStarPt);
418  PostData(13,fOutputB0MC);
419 
420 
421  //==================================================================================
422  // USER EXECUTION FUNCTION - end
423  //==================================================================================
424  return;
425 }
426 //________________________________________ terminate ___________________________
431 
432  // Info("Terminate","");
433  AliAnalysisTaskSE::Terminate();
434  fOutput = dynamic_cast<TList*> (GetOutputData(1));
435  if (!fOutput) {
436  printf("ERROR: fOutput not available\n");
437  return;
438  }
439 
440  fCEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fCEvents"));
441 
442  fListCuts = dynamic_cast<TList*> (GetOutputData(2));
443  if (!fListCuts) {
444  printf("ERROR: fListCuts not available\n");
445  return;
446  }
447  fOutputD0FirstDaughter = dynamic_cast<TList*> (GetOutputData(3));
448  if (!fOutputD0FirstDaughter) {
449  printf("ERROR: fOutputD0FirstDaughter not available\n");
450  return;
451  }
452  fOutputD0SecondDaughter = dynamic_cast<TList*> (GetOutputData(4));
454  printf("ERROR: fOutputD0SecondDaughter not available\n");
455  return;
456  }
457  fOutputDStarPion = dynamic_cast<TList*> (GetOutputData(5));
458  if (!fOutputDStarPion) {
459  printf("ERROR: fOutputDStarPion not available\n");
460  return;
461  }
462  fOutputB0Pion = dynamic_cast<TList*> (GetOutputData(6));
463  if (!fOutputB0Pion) {
464  printf("ERROR: fOutputB0Pion not available\n");
465  return;
466  }
467  fOutputD0 = dynamic_cast<TList*> (GetOutputData(7));
468  if (!fOutputD0) {
469  printf("ERROR: fOutputD0 not available\n");
470  return;
471  }
472  fOutputDStar = dynamic_cast<TList*> (GetOutputData(8));
473  if (!fOutputDStar) {
474  printf("ERROR: fOutputDStar not available\n");
475  return;
476  }
477  fOutputB0 = dynamic_cast<TList*> (GetOutputData(9));
478  if (!fOutputB0) {
479  printf("ERROR: fOutputB0 not available\n");
480  return;
481  }
482  fOutputD0_D0Pt = dynamic_cast<TList*> (GetOutputData(10));
483  if (!fOutputD0_D0Pt) {
484  printf("ERROR: fOutputD0_D0Pt not available\n");
485  return;
486  }
487  fOutputD0_DStarPt = dynamic_cast<TList*> (GetOutputData(11));
488  if (!fOutputD0_DStarPt) {
489  printf("ERROR: fOutputD0_DStarPt not available\n");
490  return;
491  }
492  fOutputDStar_DStarPt = dynamic_cast<TList*> (GetOutputData(12));
493  if (!fOutputDStar_DStarPt) {
494  printf("ERROR: fOutputDStar_DStarPt not available\n");
495  return;
496  }
497  fOutputB0MC = dynamic_cast<TList*> (GetOutputData(13));
498  if (!fOutputB0MC) {
499  printf("ERROR: fOutputB0MC not available\n");
500  return;
501  }
502  return;
503 }
504 
505 //___________________________________________________________________________
508  Info("UserCreateOutputObjects","CreateOutputObjects of task %s\n", GetName());
509 
510  //slot #1
511  //OpenFile(1);
512  fOutput = new TList();
513  fOutput->SetOwner();
514  fOutput->SetName("chist0");
515 
517  fOutputD0FirstDaughter->SetOwner();
518  fOutputD0FirstDaughter->SetName("listD0FirstDaughter");
519 
521  fOutputD0SecondDaughter->SetOwner();
522  fOutputD0SecondDaughter->SetName("listD0SecondDaughter");
523 
524  fOutputDStarPion = new TList();
525  fOutputDStarPion->SetOwner();
526  fOutputDStarPion->SetName("listDStarPion");
527 
528  fOutputB0Pion = new TList();
529  fOutputB0Pion->SetOwner();
530  fOutputB0Pion->SetName("listB0Pion");
531 
532  fOutputD0 = new TList();
533  fOutputD0->SetOwner();
534  fOutputD0->SetName("listD0");
535 
536  fOutputDStar = new TList();
537  fOutputDStar->SetOwner();
538  fOutputDStar->SetName("listDStar");
539 
540  fOutputB0 = new TList();
541  fOutputB0->SetOwner();
542  fOutputB0->SetName("listB0");
543 
544  fOutputD0_D0Pt = new TList();
545  fOutputD0_D0Pt->SetOwner();
546  fOutputD0_D0Pt->SetName("listD0_D0Pt");
547 
548  fOutputD0_DStarPt = new TList();
549  fOutputD0_DStarPt->SetOwner();
550  fOutputD0_DStarPt->SetName("listD0_DStarPt");
551 
552  fOutputDStar_DStarPt = new TList();
553  fOutputDStar_DStarPt->SetOwner();
554  fOutputDStar_DStarPt->SetName("listDStar_DStarPt");
555 
556  fOutputB0MC = new TList();
557  fOutputB0MC->SetOwner();
558  fOutputB0MC->SetName("listB0MC");
559 
560  // we prepare vectors that will save the positions of the daughter tracks in the track list during the reconstruction
561  fDStarPionTracks = new std::vector<Int_t>;
562  fB0PionTracks = new std::vector<Int_t>;
563  fD0Tracks = new std::vector<Int_t>;
564 
565  // we get information on the pt bins
570 
571  fnPtBinLimits = fnPtBins + 1;
575 
580 
581  std::cout << "Nr. of B0 meson bins: " << fCuts->GetNPtBins() << " limits: " << std::endl;
582  for (int i = 0; i < fnPtBinLimits; ++i)
583  {
584  std::cout << fPtBinLimits[i] << " " << std::endl;
585  }
586  std::cout << std::endl;
587  std::cout << "Nr. of D0 meson bins: " << fCuts->GetNPtBinsD0forD0ptbin() << " limits: " << std::endl;
588  for (int i = 0; i < fnPtBinsD0forD0ptbinLimits; ++i)
589  {
590  std::cout << fPtBinLimitsD0forD0ptbin[i] << " " << std::endl;
591  }
592  std::cout << std::endl;
593  std::cout << "Nr. of D0-D* meson bins: " << fCuts->GetNPtBinsD0forDStarptbin() << " limits: " << std::endl;
594  for (int i = 0; i < fnPtBinsD0forDStarptbinLimits; ++i)
595  {
596  std::cout << fPtBinLimitsD0forDStarptbin[i] << " " << std::endl;
597  }
598  std::cout << std::endl;
599  std::cout << "Nr. of D* meson bins: " << fCuts->GetNPtBinsDStarforDStarptbin() << " limits: " << std::endl;
600  for (int i = 0; i < fnPtBinsDStarforDStarptbinLimits; ++i)
601  {
602  std::cout << fPtBinLimitsDStarforDStarptbin[i] << " " << std::endl;
603  }
604  std::cout << std::endl;
605 
606  fListCuts=new TList();
607  fListCuts->SetOwner();
608  fListCuts->SetName("Cuts");
610  // Post the data
611  fListCuts->Add(copyfCuts);
612 
613 
614  // we create an array of pointers for the histograms. This method is more CPU efficient than looking up each histogram by name.
615  // Automatic option is not implemented/complete, the arrays are set manualy in the header file. The array is large enough to accommodate 1 GeV/c pt bins.
616 
617  // const Int_t numberOfDaughters = 4;
618  // const Int_t numberOfDaughterHistogramSets = 5;
619  // const Int_t numberOfDaughterHistograms = 15;
620  // const Int_t numberOfDaughterHistograms2D = 6;
621 
622  // Int_t maxHistogramSets = 6 + 2*fnPtBins;
623  // if(2*fnPtBinsD0forD0ptbin > maxHistogramSets) maxHistogramSets = 2*fnPtBinsD0forD0ptbin;
624  // if(2*fnPtBinsD0forDStarptbin > maxHistogramSets) maxHistogramSets = 2*fnPtBinsD0forDStarptbin;
625  // if(2*fnPtBinsDStarforDStarptbin > maxHistogramSets) maxHistogramSets = 2*fnPtBinsDStarforDStarptbin;
626 
627  // const Int_t numberOfOutputs = 6;
628  // const Int_t numberOfMotherHistogramSets = maxHistogramSets;
629  // const Int_t numberOfMotherHistograms = 46;
630  // const Int_t numberOfMotherHistograms2D = 7;
631 
632  // fDaughterHistogramArray = new Int_t*[numberOfDaughters][numberOfDaughterHistogramSets][numberOfDaughterHistograms];
633  // fDaughterHistogramArrayExtra = new Int_t*[numberOfDaughters][numberOfDaughterHistograms2D];
634  // fMotherHistogramArray = new Int_t*[numberOfOutputs][numberOfMotherHistogramSets][numberOfMotherHistograms];
635  // fMotherHistogramArray2D = new Int_t*[numberOfOutputs][numberOfMotherHistograms2D];
636 
637  // define histograms
639 
640  PostData(1,fOutput);
641  PostData(2,fListCuts);
642  PostData(3,fOutputD0FirstDaughter);
643  PostData(4,fOutputD0SecondDaughter);
644  PostData(5,fOutputDStarPion);
645  PostData(6,fOutputB0Pion);
646  PostData(7,fOutputD0);
647  PostData(8,fOutputDStar);
648  PostData(9,fOutputB0);
649  PostData(10,fOutputD0_D0Pt);
650  PostData(11,fOutputD0_DStarPt);
651  PostData(12,fOutputDStar_DStarPt);
652  PostData(13,fOutputB0MC);
653 
654  return;
655 }
656 //___________________________________ histograms _______________________________________
659 
660 
661  fCEvents = new TH1F("fCEvents","conter",13,0,13);
662  fCEvents->SetStats(kTRUE);
663  fCEvents->GetXaxis()->SetTitle("1");
664  fCEvents->GetYaxis()->SetTitle("counts");
665  fCEvents->GetXaxis()->SetBinLabel(2,"no. of events");
666  fCEvents->GetXaxis()->SetBinLabel(3,"good prim vtx and B field");
667  fCEvents->GetXaxis()->SetBinLabel(4,"no event selected");
668  fCEvents->GetXaxis()->SetBinLabel(5,"no vtx contributors");
669  fCEvents->GetXaxis()->SetBinLabel(6,"trigger for PbPb");
670  fCEvents->GetXaxis()->SetBinLabel(7,"no z vtx");
671  fCEvents->GetXaxis()->SetBinLabel(12,"no. of D0 fail to be rec");
672  fOutput->Add(fCEvents);
673 
674  //====================================================
675 
676  TString name_mc_B0_pt ="mc_B0_pt";
677  TH1F* hist_mc_B0_pt = new TH1F(name_mc_B0_pt.Data(),"Pt monte carlo B0 in B0->D*#pi; p_{T} [GeV/c]; Entries",400,0,20);
678  hist_mc_B0_pt->Sumw2();
679  hist_mc_B0_pt->SetLineColor(6);
680  hist_mc_B0_pt->SetMarkerStyle(20);
681  hist_mc_B0_pt->SetMarkerSize(0.6);
682  hist_mc_B0_pt->SetMarkerColor(6);
683  TH1F* histogram_mc_B0_pt = (TH1F*)hist_mc_B0_pt->Clone();
684  fOutputB0MC->Add(histogram_mc_B0_pt);
685 
686  TString name_mc_B0_pion_pt ="mc_B0_pion_pt";
687  TH1F* hist_mc_B0_pion_pt = new TH1F(name_mc_B0_pion_pt.Data(),"Pt monte carlo pion of B0 in B0->D*#pi; p_{T} [GeV/c]; Entries",400,0,20);
688  hist_mc_B0_pion_pt->Sumw2();
689  hist_mc_B0_pion_pt->SetLineColor(6);
690  hist_mc_B0_pion_pt->SetMarkerStyle(20);
691  hist_mc_B0_pion_pt->SetMarkerSize(0.6);
692  hist_mc_B0_pion_pt->SetMarkerColor(6);
693  TH1F* histogram_mc_B0_pion_pt = (TH1F*)hist_mc_B0_pion_pt->Clone();
694  fOutputB0MC->Add(histogram_mc_B0_pion_pt);
695 
696  TString name_mc_DStar_pt ="mc_DStar_pt";
697  TH1F* hist_mc_DStar_pt = new TH1F(name_mc_DStar_pt.Data(),"Pt monte carlo DStar in B0->D*#pi; p_{T} [GeV/c]; Entries",400,0,20);
698  hist_mc_DStar_pt->Sumw2();
699  hist_mc_DStar_pt->SetLineColor(6);
700  hist_mc_DStar_pt->SetMarkerStyle(20);
701  hist_mc_DStar_pt->SetMarkerSize(0.6);
702  hist_mc_DStar_pt->SetMarkerColor(6);
703  TH1F* histogram_mc_DStar_pt = (TH1F*)hist_mc_DStar_pt->Clone();
704  fOutputB0MC->Add(histogram_mc_DStar_pt);
705 
706  TString name_mc_DStar_pion_pt ="mc_DStar_pion_pt";
707  TH1F* hist_mc_DStar_pion_pt = new TH1F(name_mc_DStar_pion_pt.Data(),"Pt monte carlo pion of DStar in B0->D*#pi; p_{T} [GeV/c]; Entries",400,0,20);
708  hist_mc_DStar_pion_pt->Sumw2();
709  hist_mc_DStar_pion_pt->SetLineColor(6);
710  hist_mc_DStar_pion_pt->SetMarkerStyle(20);
711  hist_mc_DStar_pion_pt->SetMarkerSize(0.6);
712  hist_mc_DStar_pion_pt->SetMarkerColor(6);
713  TH1F* histogram_mc_DStar_pion_pt = (TH1F*)hist_mc_DStar_pion_pt->Clone();
714  fOutputB0MC->Add(histogram_mc_DStar_pion_pt);
715 
716  TString name_mc_D0_pt ="mc_D0_pt";
717  TH1F* hist_mc_D0_pt = new TH1F(name_mc_D0_pt.Data(),"Pt monte carlo D0 in B0->D*#pi; p_{T} [GeV/c]; Entries",400,0,20);
718  hist_mc_D0_pt->Sumw2();
719  hist_mc_D0_pt->SetLineColor(6);
720  hist_mc_D0_pt->SetMarkerStyle(20);
721  hist_mc_D0_pt->SetMarkerSize(0.6);
722  hist_mc_D0_pt->SetMarkerColor(6);
723  TH1F* histogram_mc_D0_pt = (TH1F*)hist_mc_D0_pt->Clone();
724  fOutputB0MC->Add(histogram_mc_D0_pt);
725 
726  TString name_mc_D0_pion_pt ="mc_D0_pion_pt";
727  TH1F* hist_mc_D0_pion_pt = new TH1F(name_mc_D0_pion_pt.Data(),"Pt monte carlo pion of D0 in B0->D*#pi; p_{T} [GeV/c]; Entries",400,0,20);
728  hist_mc_D0_pion_pt->Sumw2();
729  hist_mc_D0_pion_pt->SetLineColor(6);
730  hist_mc_D0_pion_pt->SetMarkerStyle(20);
731  hist_mc_D0_pion_pt->SetMarkerSize(0.6);
732  hist_mc_D0_pion_pt->SetMarkerColor(6);
733  TH1F* histogram_mc_D0_pion_pt = (TH1F*)hist_mc_D0_pion_pt->Clone();
734  fOutputB0MC->Add(histogram_mc_D0_pion_pt);
735 
736  TString name_mc_D0_kaon_pt ="mc_D0_kaon_pt";
737  TH1F* hist_mc_D0_kaon_pt = new TH1F(name_mc_D0_kaon_pt.Data(),"Pt monte carlo kaon of D0 in B0->D*#pi; p_{T} [GeV/c]; Entries",400,0,20);
738  hist_mc_D0_kaon_pt->Sumw2();
739  hist_mc_D0_kaon_pt->SetLineColor(6);
740  hist_mc_D0_kaon_pt->SetMarkerStyle(20);
741  hist_mc_D0_kaon_pt->SetMarkerSize(0.6);
742  hist_mc_D0_kaon_pt->SetMarkerColor(6);
743  TH1F* histogram_mc_D0_kaon_pt = (TH1F*)hist_mc_D0_kaon_pt->Clone();
744  fOutputB0MC->Add(histogram_mc_D0_kaon_pt);
745 
746  TString name_mc_B0_rapidity_true ="mc_B0_rapidity_true";
747  TH1F* hist_mc_B0_rapidity_true = new TH1F(name_mc_B0_rapidity_true.Data(),"rapidity_true monte carlo B0 in B0->D*#pi; Y; Entries",5000,-20,20);
748  hist_mc_B0_rapidity_true->Sumw2();
749  hist_mc_B0_rapidity_true->SetLineColor(6);
750  hist_mc_B0_rapidity_true->SetMarkerStyle(20);
751  hist_mc_B0_rapidity_true->SetMarkerSize(0.6);
752  hist_mc_B0_rapidity_true->SetMarkerColor(6);
753  TH1F* histogram_mc_B0_rapidity_true = (TH1F*)hist_mc_B0_rapidity_true->Clone();
754  fOutputB0MC->Add(histogram_mc_B0_rapidity_true);
755 
756  TString name_mc_B0_pion_rapidity_true ="mc_B0_pion_rapidity_true";
757  TH1F* hist_mc_B0_pion_rapidity_true = new TH1F(name_mc_B0_pion_rapidity_true.Data(),"rapidity_true monte carlo pion of B0 in B0->D*#pi; Y; Entries",5000,-20,20);
758  hist_mc_B0_pion_rapidity_true->Sumw2();
759  hist_mc_B0_pion_rapidity_true->SetLineColor(6);
760  hist_mc_B0_pion_rapidity_true->SetMarkerStyle(20);
761  hist_mc_B0_pion_rapidity_true->SetMarkerSize(0.6);
762  hist_mc_B0_pion_rapidity_true->SetMarkerColor(6);
763  TH1F* histogram_mc_B0_pion_rapidity_true = (TH1F*)hist_mc_B0_pion_rapidity_true->Clone();
764  fOutputB0MC->Add(histogram_mc_B0_pion_rapidity_true);
765 
766  TString name_mc_DStar_rapidity_true ="mc_DStar_rapidity_true";
767  TH1F* hist_mc_DStar_rapidity_true = new TH1F(name_mc_DStar_rapidity_true.Data(),"rapidity_true monte carlo DStar in B0->D*#pi; Y; Entries",5000,-20,20);
768  hist_mc_DStar_rapidity_true->Sumw2();
769  hist_mc_DStar_rapidity_true->SetLineColor(6);
770  hist_mc_DStar_rapidity_true->SetMarkerStyle(20);
771  hist_mc_DStar_rapidity_true->SetMarkerSize(0.6);
772  hist_mc_DStar_rapidity_true->SetMarkerColor(6);
773  TH1F* histogram_mc_DStar_rapidity_true = (TH1F*)hist_mc_DStar_rapidity_true->Clone();
774  fOutputB0MC->Add(histogram_mc_DStar_rapidity_true);
775 
776  TString name_mc_DStar_pion_rapidity_true ="mc_DStar_pion_rapidity_true";
777  TH1F* hist_mc_DStar_pion_rapidity_true = new TH1F(name_mc_DStar_pion_rapidity_true.Data(),"rapidity_true monte carlo pion of DStar in B0->D*#pi; Y; Entries",5000,-20,20);
778  hist_mc_DStar_pion_rapidity_true->Sumw2();
779  hist_mc_DStar_pion_rapidity_true->SetLineColor(6);
780  hist_mc_DStar_pion_rapidity_true->SetMarkerStyle(20);
781  hist_mc_DStar_pion_rapidity_true->SetMarkerSize(0.6);
782  hist_mc_DStar_pion_rapidity_true->SetMarkerColor(6);
783  TH1F* histogram_mc_DStar_pion_rapidity_true = (TH1F*)hist_mc_DStar_pion_rapidity_true->Clone();
784  fOutputB0MC->Add(histogram_mc_DStar_pion_rapidity_true);
785 
786  TString name_mc_D0_rapidity_true ="mc_D0_rapidity_true";
787  TH1F* hist_mc_D0_rapidity_true = new TH1F(name_mc_D0_rapidity_true.Data(),"rapidity_true monte carlo D0 in B0->D*#pi; Y; Entries",5000,-20,20);
788  hist_mc_D0_rapidity_true->Sumw2();
789  hist_mc_D0_rapidity_true->SetLineColor(6);
790  hist_mc_D0_rapidity_true->SetMarkerStyle(20);
791  hist_mc_D0_rapidity_true->SetMarkerSize(0.6);
792  hist_mc_D0_rapidity_true->SetMarkerColor(6);
793  TH1F* histogram_mc_D0_rapidity_true = (TH1F*)hist_mc_D0_rapidity_true->Clone();
794  fOutputB0MC->Add(histogram_mc_D0_rapidity_true);
795 
796  TString name_mc_D0_pion_rapidity_true ="mc_D0_pion_rapidity_true";
797  TH1F* hist_mc_D0_pion_rapidity_true = new TH1F(name_mc_D0_pion_rapidity_true.Data(),"rapidity_true monte carlo pion of D0 in B0->D*#pi; Y; Entries",5000,-20,20);
798  hist_mc_D0_pion_rapidity_true->Sumw2();
799  hist_mc_D0_pion_rapidity_true->SetLineColor(6);
800  hist_mc_D0_pion_rapidity_true->SetMarkerStyle(20);
801  hist_mc_D0_pion_rapidity_true->SetMarkerSize(0.6);
802  hist_mc_D0_pion_rapidity_true->SetMarkerColor(6);
803  TH1F* histogram_mc_D0_pion_rapidity_true = (TH1F*)hist_mc_D0_pion_rapidity_true->Clone();
804  fOutputB0MC->Add(histogram_mc_D0_pion_rapidity_true);
805 
806  TString name_mc_D0_kaon_rapidity_true ="mc_D0_kaon_rapidity_true";
807  TH1F* hist_mc_D0_kaon_rapidity_true = new TH1F(name_mc_D0_kaon_rapidity_true.Data(),"rapidity_true monte carlo kaon of D0 in B0->D*#pi; Y; Entries",5000,-20,20);
808  hist_mc_D0_kaon_rapidity_true->Sumw2();
809  hist_mc_D0_kaon_rapidity_true->SetLineColor(6);
810  hist_mc_D0_kaon_rapidity_true->SetMarkerStyle(20);
811  hist_mc_D0_kaon_rapidity_true->SetMarkerSize(0.6);
812  hist_mc_D0_kaon_rapidity_true->SetMarkerColor(6);
813  TH1F* histogram_mc_D0_kaon_rapidity_true = (TH1F*)hist_mc_D0_kaon_rapidity_true->Clone();
814  fOutputB0MC->Add(histogram_mc_D0_kaon_rapidity_true);
815 
816  TString name_mc_B0_pseudorapidity_true ="mc_B0_pseudorapidity_true";
817  TH1F* hist_mc_B0_pseudorapidity_true = new TH1F(name_mc_B0_pseudorapidity_true.Data(),"pseudorapidity_true monte carlo B0 in B0->D*#pi; #eta; Entries",5000,-20,20);
818  hist_mc_B0_pseudorapidity_true->Sumw2();
819  hist_mc_B0_pseudorapidity_true->SetLineColor(6);
820  hist_mc_B0_pseudorapidity_true->SetMarkerStyle(20);
821  hist_mc_B0_pseudorapidity_true->SetMarkerSize(0.6);
822  hist_mc_B0_pseudorapidity_true->SetMarkerColor(6);
823  TH1F* histogram_mc_B0_pseudorapidity_true = (TH1F*)hist_mc_B0_pseudorapidity_true->Clone();
824  fOutputB0MC->Add(histogram_mc_B0_pseudorapidity_true);
825 
826  TString name_mc_B0_pion_pseudorapidity_true ="mc_B0_pion_pseudorapidity_true";
827  TH1F* hist_mc_B0_pion_pseudorapidity_true = new TH1F(name_mc_B0_pion_pseudorapidity_true.Data(),"pseudorapidity_true monte carlo pion of B0 in B0->D*#pi; #eta; Entries",5000,-20,20);
828  hist_mc_B0_pion_pseudorapidity_true->Sumw2();
829  hist_mc_B0_pion_pseudorapidity_true->SetLineColor(6);
830  hist_mc_B0_pion_pseudorapidity_true->SetMarkerStyle(20);
831  hist_mc_B0_pion_pseudorapidity_true->SetMarkerSize(0.6);
832  hist_mc_B0_pion_pseudorapidity_true->SetMarkerColor(6);
833  TH1F* histogram_mc_B0_pion_pseudorapidity_true = (TH1F*)hist_mc_B0_pion_pseudorapidity_true->Clone();
834  fOutputB0MC->Add(histogram_mc_B0_pion_pseudorapidity_true);
835 
836  TString name_mc_DStar_pseudorapidity_true ="mc_DStar_pseudorapidity_true";
837  TH1F* hist_mc_DStar_pseudorapidity_true = new TH1F(name_mc_DStar_pseudorapidity_true.Data(),"pseudorapidity_true monte carlo DStar in B0->D*#pi; #eta; Entries",5000,-20,20);
838  hist_mc_DStar_pseudorapidity_true->Sumw2();
839  hist_mc_DStar_pseudorapidity_true->SetLineColor(6);
840  hist_mc_DStar_pseudorapidity_true->SetMarkerStyle(20);
841  hist_mc_DStar_pseudorapidity_true->SetMarkerSize(0.6);
842  hist_mc_DStar_pseudorapidity_true->SetMarkerColor(6);
843  TH1F* histogram_mc_DStar_pseudorapidity_true = (TH1F*)hist_mc_DStar_pseudorapidity_true->Clone();
844  fOutputB0MC->Add(histogram_mc_DStar_pseudorapidity_true);
845 
846  TString name_mc_DStar_pion_pseudorapidity_true ="mc_DStar_pion_pseudorapidity_true";
847  TH1F* hist_mc_DStar_pion_pseudorapidity_true = new TH1F(name_mc_DStar_pion_pseudorapidity_true.Data(),"pseudorapidity_true monte carlo pion of DStar in B0->D*#pi; #eta; Entries",5000,-20,20);
848  hist_mc_DStar_pion_pseudorapidity_true->Sumw2();
849  hist_mc_DStar_pion_pseudorapidity_true->SetLineColor(6);
850  hist_mc_DStar_pion_pseudorapidity_true->SetMarkerStyle(20);
851  hist_mc_DStar_pion_pseudorapidity_true->SetMarkerSize(0.6);
852  hist_mc_DStar_pion_pseudorapidity_true->SetMarkerColor(6);
853  TH1F* histogram_mc_DStar_pion_pseudorapidity_true = (TH1F*)hist_mc_DStar_pion_pseudorapidity_true->Clone();
854  fOutputB0MC->Add(histogram_mc_DStar_pion_pseudorapidity_true);
855 
856  TString name_mc_D0_pseudorapidity_true ="mc_D0_pseudorapidity_true";
857  TH1F* hist_mc_D0_pseudorapidity_true = new TH1F(name_mc_D0_pseudorapidity_true.Data(),"pseudorapidity_true monte carlo D0 in B0->D*#pi; #eta; Entries",5000,-20,20);
858  hist_mc_D0_pseudorapidity_true->Sumw2();
859  hist_mc_D0_pseudorapidity_true->SetLineColor(6);
860  hist_mc_D0_pseudorapidity_true->SetMarkerStyle(20);
861  hist_mc_D0_pseudorapidity_true->SetMarkerSize(0.6);
862  hist_mc_D0_pseudorapidity_true->SetMarkerColor(6);
863  TH1F* histogram_mc_D0_pseudorapidity_true = (TH1F*)hist_mc_D0_pseudorapidity_true->Clone();
864  fOutputB0MC->Add(histogram_mc_D0_pseudorapidity_true);
865 
866  TString name_mc_D0_pion_pseudorapidity_true ="mc_D0_pion_pseudorapidity_true";
867  TH1F* hist_mc_D0_pion_pseudorapidity_true = new TH1F(name_mc_D0_pion_pseudorapidity_true.Data(),"pseudorapidity_true monte carlo pion of D0 in B0->D*#pi; #eta; Entries",5000,-20,20);
868  hist_mc_D0_pion_pseudorapidity_true->Sumw2();
869  hist_mc_D0_pion_pseudorapidity_true->SetLineColor(6);
870  hist_mc_D0_pion_pseudorapidity_true->SetMarkerStyle(20);
871  hist_mc_D0_pion_pseudorapidity_true->SetMarkerSize(0.6);
872  hist_mc_D0_pion_pseudorapidity_true->SetMarkerColor(6);
873  TH1F* histogram_mc_D0_pion_pseudorapidity_true = (TH1F*)hist_mc_D0_pion_pseudorapidity_true->Clone();
874  fOutputB0MC->Add(histogram_mc_D0_pion_pseudorapidity_true);
875 
876  TString name_mc_D0_kaon_pseudorapidity_true ="mc_D0_kaon_pseudorapidity_true";
877  TH1F* hist_mc_D0_kaon_pseudorapidity_true = new TH1F(name_mc_D0_kaon_pseudorapidity_true.Data(),"pseudorapidity_true monte carlo kaon of D0 in B0->D*#pi; #eta; Entries",5000,-20,20);
878  hist_mc_D0_kaon_pseudorapidity_true->Sumw2();
879  hist_mc_D0_kaon_pseudorapidity_true->SetLineColor(6);
880  hist_mc_D0_kaon_pseudorapidity_true->SetMarkerStyle(20);
881  hist_mc_D0_kaon_pseudorapidity_true->SetMarkerSize(0.6);
882  hist_mc_D0_kaon_pseudorapidity_true->SetMarkerColor(6);
883  TH1F* histogram_mc_D0_kaon_pseudorapidity_true = (TH1F*)hist_mc_D0_kaon_pseudorapidity_true->Clone();
884  fOutputB0MC->Add(histogram_mc_D0_kaon_pseudorapidity_true);
885 
886  //==================================================
887 
888  TString name_dca_D0_DStarPion ="dca_D0_DStarPion";
889  TH1F* hist_dca_D0_DStarPion = new TH1F(name_dca_D0_DStarPion.Data(),"dca_D0_DStarPion; DCA [cm]; Entries",1000,0,0.2);
890  hist_dca_D0_DStarPion->Sumw2();
891  hist_dca_D0_DStarPion->SetLineColor(6);
892  hist_dca_D0_DStarPion->SetMarkerStyle(20);
893  hist_dca_D0_DStarPion->SetMarkerSize(0.6);
894  hist_dca_D0_DStarPion->SetMarkerColor(6);
895  TH1F* histogram_dca_D0_DStarPion = (TH1F*)hist_dca_D0_DStarPion->Clone();
896  fOutputB0MC->Add(histogram_dca_D0_DStarPion);
897 
898  TString name_dca_D0_B0Pion ="dca_D0_B0Pion";
899  TH1F* hist_dca_D0_B0Pion = new TH1F(name_dca_D0_B0Pion.Data(),"dca_D0_B0Pion; DCA [cm]; Entries",1000,0,0.2);
900  hist_dca_D0_B0Pion->Sumw2();
901  hist_dca_D0_B0Pion->SetLineColor(6);
902  hist_dca_D0_B0Pion->SetMarkerStyle(20);
903  hist_dca_D0_B0Pion->SetMarkerSize(0.6);
904  hist_dca_D0_B0Pion->SetMarkerColor(6);
905  TH1F* histogram_dca_D0_B0Pion = (TH1F*)hist_dca_D0_B0Pion->Clone();
906  fOutputB0MC->Add(histogram_dca_D0_B0Pion);
907 
908  TString name_dca_DStarPion_B0Pion ="dca_DStarPion_B0Pion";
909  TH1F* hist_dca_DStarPion_B0Pion = new TH1F(name_dca_DStarPion_B0Pion.Data(),"dca_DStarPion_B0Pion; DCA [cm]; Entries",1000,0,0.2);
910  hist_dca_DStarPion_B0Pion->Sumw2();
911  hist_dca_DStarPion_B0Pion->SetLineColor(6);
912  hist_dca_DStarPion_B0Pion->SetMarkerStyle(20);
913  hist_dca_DStarPion_B0Pion->SetMarkerSize(0.6);
914  hist_dca_DStarPion_B0Pion->SetMarkerColor(6);
915  TH1F* histogram_dca_DStarPion_B0Pion = (TH1F*)hist_dca_DStarPion_B0Pion->Clone();
916  fOutputB0MC->Add(histogram_dca_DStarPion_B0Pion);
917 
918  TString name_dca_Combined ="dca_Combined";
919  TH1F* hist_dca_Combined = new TH1F(name_dca_Combined.Data(),"dca_Combined; DCA [cm]; Entries",1000,0,1.0);
920  hist_dca_Combined->Sumw2();
921  hist_dca_Combined->SetLineColor(6);
922  hist_dca_Combined->SetMarkerStyle(20);
923  hist_dca_Combined->SetMarkerSize(0.6);
924  hist_dca_Combined->SetMarkerColor(6);
925  TH1F* histogram_dca_Combined = (TH1F*)hist_dca_Combined->Clone();
926  fOutputB0MC->Add(histogram_dca_Combined);
927 
928  TString name_dca_Signal_D0_DStarPion ="dca_Signal_D0_DStarPion";
929  TH1F* hist_dca_Signal_D0_DStarPion = new TH1F(name_dca_Signal_D0_DStarPion.Data(),"dca_Signal_D0_DStarPion; DCA [cm]; Entries",1000,0,0.2);
930  hist_dca_Signal_D0_DStarPion->Sumw2();
931  hist_dca_Signal_D0_DStarPion->SetLineColor(4);
932  hist_dca_Signal_D0_DStarPion->SetMarkerStyle(20);
933  hist_dca_Signal_D0_DStarPion->SetMarkerSize(0.6);
934  hist_dca_Signal_D0_DStarPion->SetMarkerColor(4);
935  TH1F* histogram_dca_Signal_D0_DStarPion = (TH1F*)hist_dca_Signal_D0_DStarPion->Clone();
936  fOutputB0MC->Add(histogram_dca_Signal_D0_DStarPion);
937 
938  TString name_dca_Signal_D0_B0Pion ="dca_Signal_D0_B0Pion";
939  TH1F* hist_dca_Signal_D0_B0Pion = new TH1F(name_dca_Signal_D0_B0Pion.Data(),"dca_Signal_D0_B0Pion; DCA [cm]; Entries",1000,0,0.2);
940  hist_dca_Signal_D0_B0Pion->Sumw2();
941  hist_dca_Signal_D0_B0Pion->SetLineColor(4);
942  hist_dca_Signal_D0_B0Pion->SetMarkerStyle(20);
943  hist_dca_Signal_D0_B0Pion->SetMarkerSize(0.6);
944  hist_dca_Signal_D0_B0Pion->SetMarkerColor(4);
945  TH1F* histogram_dca_Signal_D0_B0Pion = (TH1F*)hist_dca_Signal_D0_B0Pion->Clone();
946  fOutputB0MC->Add(histogram_dca_Signal_D0_B0Pion);
947 
948  TString name_dca_Signal_DStarPion_B0Pion ="dca_Signal_DStarPion_B0Pion";
949  TH1F* hist_dca_Signal_DStarPion_B0Pion = new TH1F(name_dca_Signal_DStarPion_B0Pion.Data(),"dca_Signal_DStarPion_B0Pion; DCA [cm]; Entries",1000,0,0.2);
950  hist_dca_Signal_DStarPion_B0Pion->Sumw2();
951  hist_dca_Signal_DStarPion_B0Pion->SetLineColor(4);
952  hist_dca_Signal_DStarPion_B0Pion->SetMarkerStyle(20);
953  hist_dca_Signal_DStarPion_B0Pion->SetMarkerSize(0.6);
954  hist_dca_Signal_DStarPion_B0Pion->SetMarkerColor(4);
955  TH1F* histogram_dca_Signal_DStarPion_B0Pion = (TH1F*)hist_dca_Signal_DStarPion_B0Pion->Clone();
956  fOutputB0MC->Add(histogram_dca_Signal_DStarPion_B0Pion);
957 
958  TString name_dca_Signal_Combined ="dca_Signal_Combined";
959  TH1F* hist_dca_Signal_Combined = new TH1F(name_dca_Signal_Combined.Data(),"dca_Signal_Combined; DCA [cm]; Entries",1000,0,1.0);
960  hist_dca_Signal_Combined->Sumw2();
961  hist_dca_Signal_Combined->SetLineColor(4);
962  hist_dca_Signal_Combined->SetMarkerStyle(20);
963  hist_dca_Signal_Combined->SetMarkerSize(0.6);
964  hist_dca_Signal_Combined->SetMarkerColor(4);
965  TH1F* histogram_dca_Signal_Combined = (TH1F*)hist_dca_Signal_Combined->Clone();
966  fOutputB0MC->Add(histogram_dca_Signal_Combined);
967 
968  //==================================================
969 
970  TString name_B0s_in_analysis ="B0s_in_analysis";
971  TH1F* hist_B0s_in_analysis = new TH1F(name_B0s_in_analysis.Data(),"Number of B0 to kpipipi in the Analysis; Entries",10,0,10);
972  hist_B0s_in_analysis->Sumw2();
973  hist_B0s_in_analysis->SetLineColor(6);
974  hist_B0s_in_analysis->SetMarkerStyle(20);
975  hist_B0s_in_analysis->SetMarkerSize(0.6);
976  hist_B0s_in_analysis->SetMarkerColor(6);
977  hist_B0s_in_analysis->SetStats(kTRUE);
978  hist_B0s_in_analysis->GetXaxis()->SetBinLabel(1,"no. of B0s");
979  hist_B0s_in_analysis->GetXaxis()->SetBinLabel(2,"no. of B0s to kpipipi");
980  hist_B0s_in_analysis->GetXaxis()->SetBinLabel(3,"no. with all tracks in event");
981  hist_B0s_in_analysis->GetXaxis()->SetBinLabel(4,"no. ...");
982  hist_B0s_in_analysis->GetXaxis()->SetBinLabel(5,"no. ...");
983  hist_B0s_in_analysis->GetXaxis()->SetBinLabel(6,"no. ...");
984  hist_B0s_in_analysis->GetXaxis()->SetBinLabel(7,"no. ...");
985  hist_B0s_in_analysis->GetXaxis()->SetBinLabel(8,"no. ...");
986  TH1F* hist_B0s_in_analysis_mc = (TH1F*)hist_B0s_in_analysis->Clone();
987  fOutputB0MC->Add(hist_B0s_in_analysis_mc);
988 
989  TString name_B0s_per_bin ="B0s_per_bin";
990  TH1F* hist_B0s_per_bin = new TH1F(name_B0s_per_bin.Data(),"Number of B0 to kpipipi in the Analysis per bin; Entries",fnPtBins,0,fnPtBins);
991  for (Int_t i = 0; i < fnPtBins; ++i)
992  {
993  TString bin_name = "";
994  bin_name += fPtBinLimits[i];
995  bin_name += "-";
996  bin_name += fPtBinLimits[i+1];
997  hist_B0s_per_bin->GetXaxis()->SetBinLabel(i+1,bin_name);
998  }
999  TH1F* hist_B0s_per_bin_mc = (TH1F*)hist_B0s_per_bin->Clone();
1000  fOutputB0MC->Add(hist_B0s_per_bin_mc);
1001 
1002  TString name_B0s_per_bin_in_Acc ="B0s_per_bin_in_Acc";
1003  TH1F* hist_B0s_per_bin_in_Acc = new TH1F(name_B0s_per_bin_in_Acc.Data(),"Number of B0 to kpipipi in the Analysis per bin with all daughters in acceptance; Entries",fnPtBins,0,fnPtBins);
1004  for (Int_t i = 0; i < fnPtBins; ++i)
1005  {
1006  TString bin_name = "";
1007  bin_name += fPtBinLimits[i];
1008  bin_name += "-";
1009  bin_name += fPtBinLimits[i+1];
1010  hist_B0s_per_bin_in_Acc->GetXaxis()->SetBinLabel(i+1,bin_name);
1011  }
1012  TH1F* hist_B0s_per_bin_in_Acc_mc = (TH1F*)hist_B0s_per_bin_in_Acc->Clone();
1013  fOutputB0MC->Add(hist_B0s_per_bin_in_Acc_mc);
1014 
1015  //======================================================================================================================================================
1016 
1017  //we make the histograms for the Pions and Kaon
1018  for (Int_t i = 0; i < 4; i++){
1019 
1020  TString add_name = "";
1021  TList * listout;
1022  if(i==0) listout = fOutputD0FirstDaughter;
1023  if(i==1) listout = fOutputD0SecondDaughter;
1024  if(i==2) listout = fOutputDStarPion;
1025  if(i==3) listout = fOutputB0Pion;
1026 
1027  for (Int_t j = 0; j < 6; j++){
1028  if(j==0) add_name = "";
1029  if(j==1) add_name = "Signal";
1030  if(j==2) add_name = "Cut";
1031  if(j==3) add_name = "SignalCut";
1032  if(j==4) add_name = "Result";
1033  if(j==5) add_name = "SignalResult";
1034 
1035  TString name_Histogram = "";
1036  TString discription_Histogram = "";
1037  Int_t numberOfBins = 0;
1038  Double_t lowerBound = 0.0;
1039  Double_t upperBound = 0.0;
1040 
1041  for (Int_t k = 0; k < 9; ++k)
1042  {
1043  if(k==0){name_Histogram = "ptTrack"; discription_Histogram = "pt track; p_{T} [GeV/c]; Entries"; numberOfBins = 600; lowerBound = 0; upperBound = 30;}
1044  if(k==1){name_Histogram = "momentumTrack"; discription_Histogram = "momentum track; p [GeV/c]; Entries"; numberOfBins = 600; lowerBound = 0; upperBound = 30;}
1045  if(k==2){name_Histogram = "numberOfITS"; discription_Histogram = "Number of ITS clusters track; [#]; Entries"; numberOfBins = 10; lowerBound = -0.5; upperBound = 9.5;}
1046  if(k==3){name_Histogram = "numberOfTPC"; discription_Histogram = "Number of TPC clusters track; [#]; Entries"; numberOfBins = 601; lowerBound = -0.5; upperBound = 600.5;}
1047  if(k==4){name_Histogram = "pointsOnITS"; discription_Histogram = "Number of ITS clusters track per layer; [#]; Entries"; numberOfBins = 10; lowerBound = -0.5; upperBound = 9.5;}
1048  if(k==5){name_Histogram = "nSigmaTPC"; discription_Histogram = "n sigma TPC for track PID; sigma; Entries"; numberOfBins = 500; lowerBound = -5; upperBound = 5;}
1049  if(k==6){name_Histogram = "nSigmaTOF"; discription_Histogram = "n sigma TOF for track PID; sigma; Entries"; numberOfBins = 500; lowerBound = -5; upperBound = 5;}
1050  if(k==7){name_Histogram = "nSigmaTPCandTOF"; discription_Histogram = "n sigma TPC and TOF for track PID; a.u.; Entries"; numberOfBins = 1000; lowerBound = 0; upperBound = 10;}
1051  if(k==8){name_Histogram = "impactParameter"; discription_Histogram = "Impact Parameter track; [cm]; Entries"; numberOfBins = 2000; lowerBound = 0; upperBound = 0.5;}
1052 
1053  name_Histogram += add_name;
1054  TH1F* histogram = new TH1F(name_Histogram.Data(),discription_Histogram.Data(),numberOfBins,lowerBound,upperBound);
1055  histogram->Sumw2();
1056  if(j%2==0) histogram->SetLineColor(6);
1057  if(j%2==1) histogram->SetLineColor(4);
1058  histogram->SetMarkerStyle(20);
1059  histogram->SetMarkerSize(0.6);
1060  if(j%2==0) histogram->SetMarkerColor(6);
1061  if(j%2==1) histogram->SetMarkerColor(4);
1062  TH1F* histogram_Clone = (TH1F*)histogram->Clone();
1063  listout->Add(histogram_Clone);
1064  fDaughterHistogramArray[i][j][k] = histogram_Clone;
1065  }
1066 
1067  TString numberofparticlesperevent="numberofparticlesperevent";
1068  numberofparticlesperevent += add_name;
1069  TH1F* hist_numberofparticlesperevent = new TH1F(numberofparticlesperevent.Data(),"Number of particles per event; number of particles in one event; Entries",100,0,100);
1070  hist_numberofparticlesperevent->Sumw2();
1071  hist_numberofparticlesperevent->SetLineColor(6);
1072  hist_numberofparticlesperevent->SetMarkerStyle(20);
1073  hist_numberofparticlesperevent->SetMarkerSize(0.6);
1074  hist_numberofparticlesperevent->SetMarkerColor(6);
1075  TH1F* histogram_numberofparticlesperevent = (TH1F*)hist_numberofparticlesperevent->Clone();
1076  listout->Add(histogram_numberofparticlesperevent);
1077  fDaughterHistogramArray[i][j][12] = histogram_numberofparticlesperevent;
1078  }
1079 
1080  TH1F * effectOfCuts = new TH1F("effectOfCutsOnBackground","Removal counter",18,0,18);
1081  effectOfCuts->SetStats(kTRUE);
1082  effectOfCuts->GetXaxis()->SetTitle("Cut number");
1083  effectOfCuts->GetYaxis()->SetTitle("Particles cut");
1084  effectOfCuts->GetXaxis()->SetBinLabel(1,"total");
1085  effectOfCuts->GetXaxis()->SetBinLabel(2,"1");
1086  effectOfCuts->GetXaxis()->SetBinLabel(3,"2");
1087  effectOfCuts->GetXaxis()->SetBinLabel(4,"3");
1088  effectOfCuts->GetXaxis()->SetBinLabel(5,"4");
1089  effectOfCuts->GetXaxis()->SetBinLabel(6,"5");
1090  effectOfCuts->GetXaxis()->SetBinLabel(7,"6");
1091  effectOfCuts->GetXaxis()->SetBinLabel(8,"7");
1092  effectOfCuts->GetXaxis()->SetBinLabel(9,"8");
1093  effectOfCuts->GetXaxis()->SetBinLabel(10,"9");
1094  effectOfCuts->GetXaxis()->SetBinLabel(11,"10");
1095  effectOfCuts->GetXaxis()->SetBinLabel(12,"11");
1096  effectOfCuts->GetXaxis()->SetBinLabel(13,"12");
1097  effectOfCuts->GetXaxis()->SetBinLabel(14,"13");
1098  effectOfCuts->GetXaxis()->SetBinLabel(15,"14");
1099  effectOfCuts->GetXaxis()->SetBinLabel(16,"15");
1100  effectOfCuts->GetXaxis()->SetBinLabel(17,"16");
1101  effectOfCuts->GetXaxis()->SetBinLabel(18,"17");
1102  listout->Add(effectOfCuts);
1103  fDaughterHistogramArrayExtra[i][0] = effectOfCuts;
1104 
1105  TH1F * effectOfCutsMC = new TH1F("effectOfCutsOnSignal","Removal counter",18,0,18);
1106  effectOfCutsMC->SetStats(kTRUE);
1107  effectOfCutsMC->GetXaxis()->SetTitle("Cut number");
1108  effectOfCutsMC->GetYaxis()->SetTitle("Particles cut");
1109  effectOfCutsMC->GetXaxis()->SetBinLabel(1,"total");
1110  effectOfCutsMC->GetXaxis()->SetBinLabel(2,"1");
1111  effectOfCutsMC->GetXaxis()->SetBinLabel(3,"2");
1112  effectOfCutsMC->GetXaxis()->SetBinLabel(4,"3");
1113  effectOfCutsMC->GetXaxis()->SetBinLabel(5,"4");
1114  effectOfCutsMC->GetXaxis()->SetBinLabel(6,"5");
1115  effectOfCutsMC->GetXaxis()->SetBinLabel(7,"6");
1116  effectOfCutsMC->GetXaxis()->SetBinLabel(8,"7");
1117  effectOfCutsMC->GetXaxis()->SetBinLabel(9,"8");
1118  effectOfCutsMC->GetXaxis()->SetBinLabel(10,"9");
1119  effectOfCutsMC->GetXaxis()->SetBinLabel(11,"10");
1120  effectOfCutsMC->GetXaxis()->SetBinLabel(12,"11");
1121  effectOfCutsMC->GetXaxis()->SetBinLabel(13,"12");
1122  effectOfCutsMC->GetXaxis()->SetBinLabel(14,"13");
1123  effectOfCutsMC->GetXaxis()->SetBinLabel(15,"14");
1124  effectOfCutsMC->GetXaxis()->SetBinLabel(16,"15");
1125  effectOfCutsMC->GetXaxis()->SetBinLabel(17,"16");
1126  effectOfCutsMC->GetXaxis()->SetBinLabel(18,"17");
1127  listout->Add(effectOfCutsMC);
1128  fDaughterHistogramArrayExtra[i][1] = effectOfCutsMC;
1129 
1130  TString name_particle_pdg ="particle_pdg";
1131  TH1F* hist_particle_pdg = new TH1F(name_particle_pdg.Data(),"Pdg code particle; pdg code; Entries",2000,-0.5,1999.5);
1132  hist_particle_pdg->Sumw2();
1133  hist_particle_pdg->SetLineColor(6);
1134  hist_particle_pdg->SetMarkerStyle(20);
1135  hist_particle_pdg->SetMarkerSize(0.6);
1136  hist_particle_pdg->SetMarkerColor(6);
1137  TH1F* histogram_particle_pdg = (TH1F*)hist_particle_pdg->Clone();
1138  listout->Add(histogram_particle_pdg);
1139  fDaughterHistogramArrayExtra[i][2] = histogram_particle_pdg;
1140 
1141  TString name_particle_mother_pdg ="particle_mother_pdg";
1142  TH1F* hist_particle_mother_pdg = new TH1F(name_particle_mother_pdg.Data(),"Pdg code particle mother; pdg code; Entries",2000,-0.5,1999.5);
1143  hist_particle_mother_pdg->Sumw2();
1144  hist_particle_mother_pdg->SetLineColor(6);
1145  hist_particle_mother_pdg->SetMarkerStyle(20);
1146  hist_particle_mother_pdg->SetMarkerSize(0.6);
1147  hist_particle_mother_pdg->SetMarkerColor(6);
1148  TH1F* histogram_particle_mother_pdg = (TH1F*)hist_particle_mother_pdg->Clone();
1149  listout->Add(histogram_particle_mother_pdg);
1150  fDaughterHistogramArrayExtra[i][3] = histogram_particle_mother_pdg;
1151 
1152  TString name_ptB0_vs_ptTrack ="ptB0_vs_ptTrackBackground";
1153  TH2F* hist_ptB0_vs_ptTrack = new TH2F(name_ptB0_vs_ptTrack.Data(),"Pt B0 vs Pt ; p_{T} B0 [GeV/c]; p_{T} track [GeV/c]",100,0,30,100,0,30);
1154  hist_ptB0_vs_ptTrack->Sumw2();
1155  hist_ptB0_vs_ptTrack->SetLineColor(6);
1156  hist_ptB0_vs_ptTrack->SetMarkerStyle(20);
1157  hist_ptB0_vs_ptTrack->SetMarkerSize(0.6);
1158  hist_ptB0_vs_ptTrack->SetMarkerColor(6);
1159  TH2F* histogram_ptB0_vs_ptTrack = (TH2F*)hist_ptB0_vs_ptTrack->Clone();
1160  listout->Add(histogram_ptB0_vs_ptTrack);
1161  fDaughterHistogramArray2D[i][4] = histogram_ptB0_vs_ptTrack;
1162 
1163  TString name_ptB0_vs_ptTrackMC ="ptB0_vs_ptTrackSignal";
1164  TH2F* hist_ptB0_vs_ptTrackMC = new TH2F(name_ptB0_vs_ptTrackMC.Data(),"Pt B0 vs Pt ; p_{T} B0 [GeV/c]; p_{T} track [GeV/c]",100,0,30,100,0,30);
1165  hist_ptB0_vs_ptTrackMC->Sumw2();
1166  hist_ptB0_vs_ptTrackMC->SetLineColor(4);
1167  hist_ptB0_vs_ptTrackMC->SetMarkerStyle(20);
1168  hist_ptB0_vs_ptTrackMC->SetMarkerSize(0.6);
1169  hist_ptB0_vs_ptTrackMC->SetMarkerColor(6);
1170  TH2F* histogram_ptB0_vs_ptTrackMC = (TH2F*)hist_ptB0_vs_ptTrackMC->Clone();
1171  listout->Add(histogram_ptB0_vs_ptTrackMC);
1172  fDaughterHistogramArray2D[i][5] = histogram_ptB0_vs_ptTrackMC;
1173  }
1174 
1175  //we make the histograms for the reconstructed particles
1176  for (Int_t i = 0; i < 6; i++){
1177 
1178  TString add_name = "";
1179  TList * listout;
1180  Int_t nHistogramSets = 0;
1181  if(i==0) {listout = fOutputD0; nHistogramSets = 6 + 2*fnPtBins;}
1182  if(i==1) {listout = fOutputDStar; nHistogramSets = 6 + 2*fnPtBins;}
1183  if(i==2) {listout = fOutputB0; nHistogramSets = 6 + 2*fnPtBins;}
1184  if(i==3) {listout = fOutputD0_D0Pt; nHistogramSets = 2*fnPtBinsD0forD0ptbin;}
1185  if(i==4) {listout = fOutputD0_DStarPt; nHistogramSets = 2*fnPtBinsD0forDStarptbin;}
1186  if(i==5) {listout = fOutputDStar_DStarPt; nHistogramSets = 2*fnPtBinsDStarforDStarptbin;}
1187 
1188  for (Int_t j = 0; j < nHistogramSets; j++){
1189  if(i<3)
1190  {
1191  if(j==0) add_name = "";
1192  if(j==1) add_name = "Signal";
1193  if(j==2) add_name = "Cut";
1194  if(j==3) add_name = "SignalCut";
1195  if(j==4) add_name = "Result";
1196  if(j==5) add_name = "SignalResult";
1197  if(j%2==0 && j>5) {add_name = "_ptbin_"; add_name += fPtBinLimits[(j-6)/2]; add_name += "_to_"; add_name += fPtBinLimits[(j-6)/2 + 1];}
1198  if(j%2==1 && j>5) {add_name = "Signal_ptbin_"; add_name += fPtBinLimits[(j-7)/2]; add_name += "_to_"; add_name += fPtBinLimits[(j-7)/2 + 1];}
1199  }
1200  if(i==3)
1201  {
1202  if(j%2==0) {add_name = "_ptbin_"; add_name += fPtBinLimitsD0forD0ptbin[j/2]; add_name += "_to_"; add_name += fPtBinLimitsD0forD0ptbin[1+j/2];}
1203  if(j%2==1) {add_name = "Signal_ptbin_"; add_name += fPtBinLimitsD0forD0ptbin[(j-1)/2]; add_name += "_to_"; add_name += fPtBinLimitsD0forD0ptbin[1+(j-1)/2];}
1204  }
1205  if(i==4)
1206  {
1207  if(j%2==0) {add_name = "_ptbin_"; add_name += fPtBinLimitsD0forDStarptbin[j/2]; add_name += "_to_"; add_name += fPtBinLimitsD0forDStarptbin[1+j/2];}
1208  if(j%2==1) {add_name = "Signal_ptbin_"; add_name += fPtBinLimitsD0forDStarptbin[(j-1)/2]; add_name += "_to_"; add_name += fPtBinLimitsD0forDStarptbin[1+(j-1)/2];}
1209  }
1210  if(i==5)
1211  {
1212  if(j%2==0) {add_name = "_ptbin_"; add_name += fPtBinLimitsDStarforDStarptbin[j/2]; add_name += "_to_"; add_name += fPtBinLimitsDStarforDStarptbin[1+j/2];}
1213  if(j%2==1) {add_name = "Signal_ptbin_"; add_name += fPtBinLimitsDStarforDStarptbin[(j-1)/2]; add_name += "_to_"; add_name += fPtBinLimitsDStarforDStarptbin[1+(j-1)/2];}
1214  }
1215 
1216 
1217  TString name_Histogram = "";
1218  TString discription_Histogram = "";
1219  Int_t numberOfBins = 0;
1220  Double_t lowerBound = 0.0;
1221  Double_t upperBound = 0.0;
1222  Int_t numberOfBinsTwo = 0;
1223  Double_t lowerBoundTwo = 0.0;
1224  Double_t upperBoundTwo = 0.0;
1225 
1226  for (Int_t k = 0; k < 43; ++k)
1227  {
1228  if(k==0){name_Histogram = "ptMother"; discription_Histogram = "pt mother; p_{T} [GeV/c]; Entries"; numberOfBins = 300; lowerBound = 0; upperBound = 30;}
1229  if(k==1){name_Histogram = "ptFirstDaughter"; discription_Histogram = "pt first daughter; p_{T} [GeV/c]; Entries"; numberOfBins = 300; lowerBound = 0; upperBound = 30;}
1230  if(k==2){name_Histogram = "ptSecondDaughter"; discription_Histogram = "pt second daughter; p_{T} [GeV/c]; Entries"; numberOfBins = 300; lowerBound = 0; upperBound = 30;}
1231  if(k==3){name_Histogram = "etaMother"; discription_Histogram = "eta mother; #eta; Entries"; numberOfBins = 100; lowerBound = -2; upperBound = 2;}
1232  if(k==4){name_Histogram = "phiMother"; discription_Histogram = "phi mother; #phi; Entries"; numberOfBins = 25; lowerBound = 0; upperBound = 2*TMath::Pi();}
1233  if(k==5){name_Histogram = "d0Mother"; discription_Histogram = "d0 mother; [cm]; Entries"; numberOfBins = 2000; lowerBound = 0; upperBound = 0.5;}
1234  if(k==6){name_Histogram = "d0FirstDaughter"; discription_Histogram = "d0 first daughter; [cm]; Entries"; numberOfBins = 2000; lowerBound = 0; upperBound = 0.5;}
1235 
1236  if(k==7){name_Histogram = "d0SecondDaughter"; discription_Histogram = "d0 second daughter; [cm]; Entries"; numberOfBins = 2000; lowerBound = 0; upperBound = 0.5;}
1237 
1238  if(k==8){name_Histogram = "pointingAngleMother"; discription_Histogram = "pointing angle; [Cos(#theta)]; Entries"; numberOfBins = 100; lowerBound = -1; upperBound = 1;}
1239  if(k==9){name_Histogram = "impactProduct"; discription_Histogram = "impact product; [cm^{2}]; Entries"; numberOfBins = 500; lowerBound = -0.01; upperBound = 0.01;}
1240  if(k==10){name_Histogram = "impactProductXY"; discription_Histogram = "impact product XY; [cm^{2}]; Entries"; numberOfBins = 400; lowerBound = 0; upperBound = 0.1;}
1241  if(k==11){name_Histogram = "invariantMassMother"; discription_Histogram = "mass mother candidate; m [GeV/c^{2}]; Entries"; numberOfBins = 20000; lowerBound = 0; upperBound = 10;}
1242  if(k==12){name_Histogram = "deltaMassMother"; discription_Histogram = "mass mother candidate; m [GeV/c^{2}]; Entries"; numberOfBins = 10000; lowerBound = 0; upperBound = 10;}
1243  if(k==13){name_Histogram = "dcaMother"; discription_Histogram = "dca mother; distance [cm]; Entries"; numberOfBins = 500; lowerBound = 0; upperBound = 0.25;}
1244  if(k==14){name_Histogram = "vertexDistance"; discription_Histogram = "vertex distance between mother and primary vertex; distance [cm]; Entries"; numberOfBins = 500; lowerBound = 0; upperBound = 1;}
1245  if(k==15){name_Histogram = "normDecayLength"; discription_Histogram = "Normalized decay length w.r.t primary vertex; [cm]; Entries"; numberOfBins = 100; lowerBound = 0; upperBound = 50;}
1246  if(k==16){name_Histogram = "pseudoProperDecayTime"; discription_Histogram = "Pseudo Proper Decay Time w.r.t primary vertex; [a.u.]; Entries"; numberOfBins = 1000; lowerBound = -10; upperBound = 10;}
1247  if(k==17){name_Histogram = "DecayTime"; discription_Histogram = "Decay Time w.r.t primary vertex; [a.u.]; Entries"; numberOfBins = 100; lowerBound = 0; upperBound = 0.00000001;}
1248  if(k==18){name_Histogram = "normDecayTime"; discription_Histogram = "Normalized Decay Time w.r.t primary vertex; [a.u.]; Entries"; numberOfBins = 100; lowerBound = 0; upperBound = 0.0000001;}
1249  if(k==19){name_Histogram = "angleMotherFirstDaughter"; discription_Histogram = "flight angle mother and first daughter; [Cos(#phi)]; Entries"; numberOfBins = 100; lowerBound = -1; upperBound = 1;}
1250  if(k==20){name_Histogram = "angleMotherSecondDaughter"; discription_Histogram = "flight angle mother and second daughter; [Cos(#phi)]; Entries"; numberOfBins = 100; lowerBound = 0.5; upperBound = 1;}
1251  if(k==21){name_Histogram = "angleBetweenBothDaughters"; discription_Histogram = "angle between both daughters; [Cos(#phi)]; Entries"; numberOfBins = 100; lowerBound = -1; upperBound = 1;}
1252  if(k==22){name_Histogram = "cosThetaStar"; discription_Histogram = "cosThetaStar; [Cos(#theta*)]; Entries"; numberOfBins = 200; lowerBound = -2; upperBound = 2;}
1253  if(k==23){name_Histogram = "vertexX"; discription_Histogram = "Vertex position; [cm]; Entries"; numberOfBins = 200; lowerBound = -5; upperBound = 5;}
1254  if(k==24){name_Histogram = "vertexY"; discription_Histogram = "Vertex position; [cm]; Entries"; numberOfBins = 200; lowerBound = -5; upperBound = 5;}
1255  if(k==25){name_Histogram = "vertexZ"; discription_Histogram = "Vertex position; [cm]; Entries"; numberOfBins = 200; lowerBound = -20; upperBound = 20;}
1256 
1257 
1258  if(k==26){if(i==0 || i==3 || i==4){name_Histogram = "pointingAngleToDStar"; discription_Histogram = "Pointing angle w.r.t. DStar decay vertex; [Cos(#theta)]; Entries"; numberOfBins = 200; lowerBound = -1; upperBound = 1;}
1259  else continue;}
1260  if(k==27){if(i==0 || i==3 || i==4){name_Histogram = "d0MotherToDStar"; discription_Histogram = "d0 Mother w.r.t. DStar decay vertex; [cm]; Entries"; numberOfBins = 200; lowerBound = 0; upperBound = 1;}
1261  else continue;}
1262  if(k==28){if(i==0 || i==3 || i==4){name_Histogram = "d0FirstDaughterToDStar"; discription_Histogram = "d0 first daughter w.r.t. DStar decay vertex; [cm]; Entries"; numberOfBins = 200; lowerBound = 0; upperBound = 1;}
1263  else continue;}
1264  if(k==29){if(i==0 || i==3 || i==4){name_Histogram = "d0SecondDaughterToDStar"; discription_Histogram = "d0 second daughter w.r.t. DStar decay vertex; [cm]; Entries"; numberOfBins = 200; lowerBound = 0; upperBound = 1;}
1265  else continue;}
1266  if(k==30){if(i==0 || i==3 || i==4){name_Histogram = "impactProductToDStar"; discription_Histogram = "impact product w.r.t. DStar decay vertex; [cm]; Entries"; numberOfBins = 200; lowerBound = -0.02; upperBound = 0.02;}
1267  else continue;}
1268  if(k==31){if(i==0 || i==3 || i==4){name_Histogram = "impactProductXYToDStar"; discription_Histogram = "impact product XY w.r.t. DStar decay vertex; [cm^{2}]; Entries"; numberOfBins = 100; lowerBound = 0; upperBound = 0.5;}
1269  else continue;}
1270  if(k==32){if(i==0 || i==3 || i==4){name_Histogram = "normDecayLengthToDStar"; discription_Histogram = "Normalized decay length w.r.t. DStar decay vertex; [cm]; Entries"; numberOfBins = 100; lowerBound = 0; upperBound = 50;}
1271  else continue;}
1272  if(k==33){if(i==0 || i==3 || i==4){name_Histogram = "pseudoProperDecayTimeToDStar"; discription_Histogram = "Pseudo Proper Decay Time w.r.t DStar vertex; [a.u.]; Entries"; numberOfBins = 1000; lowerBound = -1; upperBound = 1;}
1273  else continue;}
1274  if(k==34){if(i==0 || i==3 || i==4){name_Histogram = "DecayTimeToDStar"; discription_Histogram = "Decay Time w.r.t DStar vertex; [a.u.]; Entries"; numberOfBins = 100; lowerBound = 0; upperBound = 0.00000001;}
1275  else continue;}
1276  if(k==35){if(i==0 || i==3 || i==4){name_Histogram = "normDecayTimeToDStar"; discription_Histogram = "Normalized Decay Time w.r.t DStar vertex; [a.u.]; Entries"; numberOfBins = 100; lowerBound = 0; upperBound = 0.00001;}
1277  else continue;}
1278 
1279  if(k==36){name_Histogram = "topomaticFirstDaughter"; discription_Histogram = "topomatic d0 first daughter; [cm]; Entries"; numberOfBins = 200; lowerBound = 0; upperBound = 20;}
1280  if(k==37){name_Histogram = "topomaticSecondDaughter"; discription_Histogram = "topomatic d0 second daughter; [cm]; Entries"; numberOfBins = 200; lowerBound = 0; upperBound = 20;}
1281  if(k==38){name_Histogram = "topomaticMax"; discription_Histogram = "Max topomatic; [cm]; Entries"; numberOfBins = 200; lowerBound = 0; upperBound = 20;}
1282  if(k==39){name_Histogram = "topomaticMin"; discription_Histogram = "Min topomatic; [cm]; Entries"; numberOfBins = 200; lowerBound = 0; upperBound = 20;}
1283  if(k==40){name_Histogram = "pointingAngleMotherXY"; discription_Histogram = "pointing angle XY; [Cos(#theta)]; Entries"; numberOfBins = 1000; lowerBound = -1; upperBound = 1;}
1284  if(k==41){name_Histogram = "vertexDistanceXY"; discription_Histogram = "vertex distance between mother and primary vertex XY; distance [cm]; Entries"; numberOfBins = 1000; lowerBound = 0; upperBound = 10;}
1285  if(k==42){name_Histogram = "normDecayLengthXY"; discription_Histogram = "Normalized decay length w.r.t primary vertex XY; [cm]; Entries"; numberOfBins = 100; lowerBound = 0; upperBound = 50;}
1286 
1287 
1288  name_Histogram += add_name;
1289  TH1F* histogram = new TH1F(name_Histogram.Data(),discription_Histogram.Data(),numberOfBins,lowerBound,upperBound);
1290  histogram->Sumw2();
1291  if(j%2==0) histogram->SetLineColor(6);
1292  if(j%2==1) histogram->SetLineColor(4);
1293  histogram->SetMarkerStyle(20);
1294  histogram->SetMarkerSize(0.6);
1295  if(j%2==0) histogram->SetMarkerColor(6);
1296  if(j%2==1) histogram->SetMarkerColor(4);
1297  TH1F* histogram_Clone = (TH1F*)histogram->Clone();
1298  listout->Add(histogram_Clone);
1299  fMotherHistogramArray[i][j][k] = histogram_Clone;
1300  }
1301 
1302 
1303  name_Histogram = "";
1304  discription_Histogram = "";
1305  numberOfBins = 0;
1306  lowerBound = 0.0;
1307  upperBound = 0.0;
1308  numberOfBinsTwo = 0;
1309  lowerBoundTwo = 0.0;
1310  upperBoundTwo = 0.0;
1311 
1312  //we make the 2D histograms for the reconstructed particles
1313  Int_t nFirst = 0;
1314  Int_t nSecond = 1;
1315  Int_t nVariables = 10;
1316  Int_t nHistograms = nVariables * (nVariables - 1) / 2;
1317 
1318  TList * list2D = new TList();
1319  list2D->SetOwner();
1320  TString name2D = "2D_Histograms";
1321  name2D += add_name;
1322  list2D->SetName(name2D.Data());
1323  listout->Add(list2D);
1324 
1325  for (Int_t k = 0; k < nHistograms; ++k)
1326  {
1327  numberOfBins = 50; numberOfBinsTwo = 50;
1328  if(nFirst==0){name_Histogram = "d0FirstDaughter"; discription_Histogram = "d0 first daughter [cm];"; lowerBound = 0; upperBound = 1;}
1329  if(nFirst==1){name_Histogram = "d0SecondDaughter"; discription_Histogram = "d0 second daughter [cm];"; lowerBound = 0; upperBound = 1;}
1330  if(nFirst==2){name_Histogram = "d0Mother"; discription_Histogram = "d0 mother [cm];"; lowerBound = 0; upperBound = 1;}
1331  if(nFirst==3){name_Histogram = "pointingAngleMother"; discription_Histogram = "pointing angle [Cos(#theta)];"; lowerBound = -1; upperBound = 1;}
1332  if(nFirst==4){name_Histogram = "impactProduct"; discription_Histogram = "impact product [cm^{2}];"; lowerBound = -0.01; upperBound = 0.01;}
1333  if(nFirst==5){name_Histogram = "impactProductXY"; discription_Histogram = "impact product XY [cm^{2}];"; lowerBound = 0; upperBound = 0.5;}
1334  if(nFirst==6){name_Histogram = "vertexDistance"; discription_Histogram = "vertex distance between mother and primary vertex [cm];"; lowerBound = 0; upperBound = 1;}
1335  if(nFirst==7){name_Histogram = "normDecayLength"; discription_Histogram = "Normalized decay length w.r.t primary vertex [cm];"; lowerBound = 0; upperBound = 50;}
1336  if(nFirst==8){name_Histogram = "pointingAngleMotherXY"; discription_Histogram = "pointing angle XY [Cos(#theta)];"; lowerBound = -1; upperBound = 1;}
1337  if(nFirst==9){name_Histogram = "vertexDistanceXY"; discription_Histogram = "vertex distance between mother and primary vertex XY [cm];"; lowerBound = 0; upperBound = 1;}
1338  if(nFirst==10){name_Histogram = "normDecayLengthXY"; discription_Histogram = "Normalized decay length w.r.t primary vertex XY [cm];"; lowerBound = 0; upperBound = 50;}
1339 
1340  if(nSecond==0){name_Histogram += "d0FirstDaughter"; discription_Histogram += "d0 first daughter [cm];"; lowerBoundTwo = 0; upperBoundTwo = 1;}
1341  if(nSecond==1){name_Histogram += "d0SecondDaughter"; discription_Histogram += "d0 second daughter [cm];"; lowerBoundTwo = 0; upperBoundTwo = 1;}
1342  if(nSecond==2){name_Histogram += "d0Mother"; discription_Histogram += "d0 mother [cm];"; lowerBoundTwo = 0; upperBoundTwo = 1;}
1343  if(nSecond==3){name_Histogram += "pointingAngleMother"; discription_Histogram += "pointing angle [Cos(#theta)];"; lowerBoundTwo = -1; upperBoundTwo = 1;}
1344  if(nSecond==4){name_Histogram += "impactProduct"; discription_Histogram += "impact product [cm^{2}];"; lowerBoundTwo = -0.01; upperBoundTwo = 0.01;}
1345  if(nSecond==5){name_Histogram += "impactProductXY"; discription_Histogram += "impact product XY [cm^{2}];"; lowerBoundTwo = 0; upperBoundTwo = 0.5;}
1346  if(nSecond==6){name_Histogram += "vertexDistance"; discription_Histogram += "vertex distance between mother and primary vertex [cm];"; lowerBoundTwo = 0; upperBoundTwo = 1;}
1347  if(nSecond==7){name_Histogram += "normDecayLength"; discription_Histogram += "Normalized decay length w.r.t primary vertex [cm];"; lowerBoundTwo = 0; upperBoundTwo = 50;}
1348  if(nSecond==8){name_Histogram += "_pointingAngleMotherXY"; discription_Histogram += "pointing angle XY [Cos(#theta)];"; lowerBoundTwo = -1; upperBoundTwo = 1;}
1349  if(nSecond==9){name_Histogram += "_vertexDistanceXY"; discription_Histogram += "vertex distance between mother and primary vertex XY [cm];"; lowerBoundTwo = 0; upperBoundTwo = 1;}
1350  if(nSecond==10){name_Histogram += "_normDecayLengthXY"; discription_Histogram += "Normalized decay length w.r.t primary vertex XY [cm];"; lowerBoundTwo = 0; upperBoundTwo = 50;}
1351 
1352  name_Histogram += add_name;
1353  TH2F* histogram = new TH2F(name_Histogram.Data(),discription_Histogram.Data(),numberOfBins,lowerBound,upperBound,numberOfBinsTwo,lowerBoundTwo,upperBoundTwo);
1354  histogram->Sumw2();
1355  if(j%2==0) histogram->SetLineColor(6);
1356  if(j%2==1) histogram->SetLineColor(4);
1357  histogram->SetMarkerStyle(20);
1358  histogram->SetMarkerSize(0.6);
1359  histogram->SetMarkerColor(6);
1360  TH2F* histogram_Clone = (TH2F*)histogram->Clone();
1361  list2D->Add(histogram_Clone);
1362  fMotherHistogramArray2D[i][j][k] = histogram_Clone;
1363 
1364  nSecond++;
1365  if(nSecond>nVariables)
1366  {
1367  nFirst++;
1368  nSecond = nFirst + 1;
1369  }
1370  }
1371 
1372  if(fUse3DHistograms)
1373  {
1374  name_Histogram = "";
1375  discription_Histogram = "";
1376  numberOfBins = 0;
1377  lowerBound = 0.0;
1378  upperBound = 0.0;
1379  numberOfBinsTwo = 0;
1380  lowerBoundTwo = 0.0;
1381  upperBoundTwo = 0.0;
1382  Int_t numberOfBinsThree = 0;
1383  Int_t lowerBoundThree = 0.0;
1384  Int_t upperBoundThree = 0.0;
1385 
1386  //we make the 3D histograms for the reconstructed particles
1387  nFirst = 0;
1388  nSecond = 1;
1389  Int_t nThird = 2;
1390  nVariables = 10;
1391  nHistograms = nVariables * (nVariables - 1) * (nVariables - 2) / 6;
1392 
1393  TList * list3D = new TList();
1394  list3D->SetOwner();
1395  TString name3D = "3D_Histograms";
1396  name3D += add_name;
1397  list3D->SetName(name2D.Data());
1398  listout->Add(list3D);
1399 
1400  for (Int_t k = 0; k < nHistograms; ++k)
1401  {
1402  numberOfBins = 50; numberOfBinsTwo = 50;
1403  if(nFirst==0){name_Histogram = "d0FirstDaughter"; discription_Histogram = "d0 first daughter [cm];"; lowerBound = 0; upperBound = 1;}
1404  if(nFirst==1){name_Histogram = "d0SecondDaughter"; discription_Histogram = "d0 second daughter [cm];"; lowerBound = 0; upperBound = 1;}
1405  if(nFirst==2){name_Histogram = "d0Mother"; discription_Histogram = "d0 mother [cm];"; lowerBound = 0; upperBound = 1;}
1406  if(nFirst==3){name_Histogram = "pointingAngleMother"; discription_Histogram = "pointing angle [Cos(#theta)];"; lowerBound = -1; upperBound = 1;}
1407  if(nFirst==4){name_Histogram = "impactProduct"; discription_Histogram = "impact product [cm^{2}];"; lowerBound = -0.01; upperBound = 0.01;}
1408  if(nFirst==5){name_Histogram = "impactProductXY"; discription_Histogram = "impact product XY [cm^{2}];"; lowerBound = 0; upperBound = 0.5;}
1409  if(nFirst==6){name_Histogram = "vertexDistance"; discription_Histogram = "vertex distance between mother and primary vertex [cm];"; lowerBound = 0; upperBound = 1;}
1410  if(nFirst==7){name_Histogram = "normDecayLength"; discription_Histogram = "Normalized decay length w.r.t primary vertex [cm];"; lowerBound = 0; upperBound = 50;}
1411  if(nFirst==8){name_Histogram = "pointingAngleMotherXY"; discription_Histogram = "pointing angle XY [Cos(#theta)];"; lowerBound = -1; upperBound = 1;}
1412  if(nFirst==9){name_Histogram = "vertexDistanceXY"; discription_Histogram = "vertex distance between mother and primary vertex XY [cm];"; lowerBound = 0; upperBound = 1;}
1413  if(nFirst==10){name_Histogram = "normDecayLengthXY"; discription_Histogram = "Normalized decay length w.r.t primary vertex XY [cm];"; lowerBound = 0; upperBound = 50;}
1414 
1415  if(nSecond==0){name_Histogram += "_d0FirstDaughter"; discription_Histogram += "d0 first daughter [cm];"; lowerBoundTwo = 0; upperBoundTwo = 1;}
1416  if(nSecond==1){name_Histogram += "_d0SecondDaughter"; discription_Histogram += "d0 second daughter [cm];"; lowerBoundTwo = 0; upperBoundTwo = 1;}
1417  if(nSecond==2){name_Histogram += "_d0Mother"; discription_Histogram += "d0 mother [cm];"; lowerBoundTwo = 0; upperBoundTwo = 1;}
1418  if(nSecond==3){name_Histogram += "_pointingAngleMother"; discription_Histogram += "pointing angle [Cos(#theta)];"; lowerBoundTwo = -1; upperBoundTwo = 1;}
1419  if(nSecond==4){name_Histogram += "_impactProduct"; discription_Histogram += "impact product [cm^{2}];"; lowerBoundTwo = -0.01; upperBoundTwo = 0.01;}
1420  if(nSecond==5){name_Histogram += "_impactProductXY"; discription_Histogram += "impact product XY [cm^{2}];"; lowerBoundTwo = 0; upperBoundTwo = 0.5;}
1421  if(nSecond==6){name_Histogram += "_vertexDistance"; discription_Histogram += "vertex distance between mother and primary vertex [cm];"; lowerBoundTwo = 0; upperBoundTwo = 1;}
1422  if(nSecond==7){name_Histogram += "_normDecayLength"; discription_Histogram += "Normalized decay length w.r.t primary vertex [cm];"; lowerBoundTwo = 0; upperBoundTwo = 50;}
1423  if(nSecond==8){name_Histogram += "_pointingAngleMotherXY"; discription_Histogram += "pointing angle XY [Cos(#theta)];"; lowerBoundTwo = -1; upperBoundTwo = 1;}
1424  if(nSecond==9){name_Histogram += "_vertexDistanceXY"; discription_Histogram += "vertex distance between mother and primary vertex XY [cm];"; lowerBoundTwo = 0; upperBoundTwo = 1;}
1425  if(nSecond==10){name_Histogram += "_normDecayLengthXY"; discription_Histogram += "Normalized decay length w.r.t primary vertex XY [cm];"; lowerBoundTwo = 0; upperBoundTwo = 50;}
1426 
1427  if(nThird==0){name_Histogram += "_d0FirstDaughter"; discription_Histogram += "d0 first daughter [cm];"; lowerBoundThree = 0; upperBoundThree = 1;}
1428  if(nThird==1){name_Histogram += "_d0SecondDaughter"; discription_Histogram += "d0 second daughter [cm];"; lowerBoundThree = 0; upperBoundThree = 1;}
1429  if(nThird==2){name_Histogram += "_d0Mother"; discription_Histogram += "d0 mother [cm];"; lowerBoundThree = 0; upperBoundThree = 1;}
1430  if(nThird==3){name_Histogram += "_pointingAngleMother"; discription_Histogram += "pointing angle [Cos(#theta)];"; lowerBoundThree = -1; upperBoundThree = 1;}
1431  if(nThird==4){name_Histogram += "_impactProduct"; discription_Histogram += "impact product [cm^{2}];"; lowerBoundThree = -0.01; upperBoundThree = 0.01;}
1432  if(nThird==5){name_Histogram += "_impactProductXY"; discription_Histogram += "impact product XY [cm^{2}];"; lowerBoundThree = 0; upperBoundThree = 0.5;}
1433  if(nThird==6){name_Histogram += "_vertexDistance"; discription_Histogram += "vertex distance between mother and primary vertex [cm];"; lowerBoundThree = 0; upperBoundThree = 1;}
1434  if(nThird==7){name_Histogram += "_normDecayLength"; discription_Histogram += "Normalized decay length w.r.t primary vertex [cm];"; lowerBoundThree = 0; upperBoundThree = 50;}
1435  if(nThird==8){name_Histogram += "_pointingAngleMotherXY"; discription_Histogram += "pointing angle XY [Cos(#theta)];"; lowerBoundThree = -1; upperBoundThree = 1;}
1436  if(nThird==9){name_Histogram += "_vertexDistanceXY"; discription_Histogram += "vertex distance between mother and primary vertex XY [cm];"; lowerBoundThree = 0; upperBoundThree = 1;}
1437  if(nThird==10){name_Histogram += "_normDecayLengthXY"; discription_Histogram += "Normalized decay length w.r.t primary vertex XY [cm];"; lowerBoundThree = 0; upperBoundThree = 50;}
1438 
1439 
1440  name_Histogram += add_name;
1441  TH3F* histogram3D = new TH3F(name_Histogram.Data(),discription_Histogram.Data(),numberOfBins,lowerBound,upperBound,numberOfBinsTwo,lowerBoundTwo,upperBoundTwo,numberOfBinsThree,lowerBoundThree,upperBoundThree);
1442  histogram3D->Sumw2();
1443  if(j%2==0) histogram3D->SetLineColor(6);
1444  if(j%2==1) histogram3D->SetLineColor(4);
1445  histogram3D->SetMarkerStyle(20);
1446  histogram3D->SetMarkerSize(0.6);
1447  histogram3D->SetMarkerColor(6);
1448  TH3F* histogram_Clone3D = (TH3F*)histogram3D->Clone();
1449  list3D->Add(histogram_Clone3D);
1450  fMotherHistogramArray3D[i][j][k] = histogram_Clone3D;
1451 
1452 
1453  nThird++;
1454  if(nThird>nVariables)
1455  {
1456  nSecond++;
1457  nThird = nSecond + 1;
1458  if(nSecond>nVariables)
1459  {
1460  nFirst++;
1461  nSecond = nFirst + 1;
1462  nThird = nFirst + 2;
1463 
1464  }
1465  }
1466  }
1467  }
1468  }
1469 
1470  TH1F * effectOfCuts = new TH1F("effectOfCuts","Removal counter",100,0,100);
1471  effectOfCuts->SetStats(kTRUE);
1472  effectOfCuts->GetXaxis()->SetTitle("Cut number");
1473  effectOfCuts->GetYaxis()->SetTitle("Particles cut");
1474  effectOfCuts->GetXaxis()->SetBinLabel(1,"total");
1475  for (Int_t i = 1; i < 100; ++i)
1476  {
1477  TString integerText = "";
1478  integerText += i;
1479  effectOfCuts->GetXaxis()->SetBinLabel(i+1,integerText);
1480  }
1481  listout->Add(effectOfCuts);
1482  fMotherHistogramArrayExtra[i][0] = effectOfCuts;
1483 
1484  TH1F * effectOfCutsMC = new TH1F("effectOfCutsMC","Removal counter",100,0,100);
1485  effectOfCutsMC->SetStats(kTRUE);
1486  effectOfCutsMC->GetXaxis()->SetTitle("Cut number");
1487  effectOfCutsMC->GetYaxis()->SetTitle("Particles cut");
1488  effectOfCutsMC->GetXaxis()->SetBinLabel(1,"total");
1489  for (Int_t i = 1; i < 100; ++i)
1490  {
1491  TString integerText = "";
1492  integerText += i;
1493  effectOfCutsMC->GetXaxis()->SetBinLabel(i+1,integerText);
1494  }
1495  listout->Add(effectOfCutsMC);
1496  fMotherHistogramArrayExtra[i][1] = effectOfCutsMC;
1497 
1498  TString name_particle_pdg ="particle_pdg";
1499  TH1F* hist_particle_pdg = new TH1F(name_particle_pdg.Data(),"Pdg code particle; pdg code; Entries",2000,-0.5,1999.5);
1500  hist_particle_pdg->Sumw2();
1501  hist_particle_pdg->SetLineColor(6);
1502  hist_particle_pdg->SetMarkerStyle(20);
1503  hist_particle_pdg->SetMarkerSize(0.6);
1504  hist_particle_pdg->SetMarkerColor(6);
1505  TH1F* histogram_particle_pdg = (TH1F*)hist_particle_pdg->Clone();
1506  listout->Add(histogram_particle_pdg);
1507  fMotherHistogramArrayExtra[i][2] = histogram_particle_pdg;
1508 
1509  TString name_particle_mother_pdg ="particle_mother_pdg";
1510  TH1F* hist_particle_mother_pdg = new TH1F(name_particle_mother_pdg.Data(),"Pdg code particle mother; pdg code; Entries",2000,-0.5,1999.5);
1511  hist_particle_mother_pdg->Sumw2();
1512  hist_particle_mother_pdg->SetLineColor(6);
1513  hist_particle_mother_pdg->SetMarkerStyle(20);
1514  hist_particle_mother_pdg->SetMarkerSize(0.6);
1515  hist_particle_mother_pdg->SetMarkerColor(6);
1516  TH1F* histogram_particle_mother_pdg = (TH1F*)hist_particle_mother_pdg->Clone();
1517  listout->Add(histogram_particle_mother_pdg);
1518  fMotherHistogramArrayExtra[i][3] = histogram_particle_mother_pdg;
1519 
1520  TString name_distance_vertex_from_real ="distance_vertex_from_real";
1521  TH1F* hist_distance_vertex_from_real = new TH1F(name_distance_vertex_from_real.Data(),"Distance reconstructed vertex from real vertex; distance [cm]; Entries",100,0,1);
1522  hist_distance_vertex_from_real->Sumw2();
1523  hist_distance_vertex_from_real->SetLineColor(6);
1524  hist_distance_vertex_from_real->SetMarkerStyle(20);
1525  hist_distance_vertex_from_real->SetMarkerSize(0.6);
1526  hist_distance_vertex_from_real->SetMarkerColor(6);
1527  TH1F* histogram_distance_vertex_from_real = (TH1F*)hist_distance_vertex_from_real->Clone();
1528  listout->Add(histogram_distance_vertex_from_real);
1529  fMotherHistogramArrayExtra[i][4] = histogram_distance_vertex_from_real;
1530 
1531  TString name_distance_vertex_from_real_new ="distance_vertex_from_real_new";
1532  TH1F* hist_distance_vertex_from_real_new = new TH1F(name_distance_vertex_from_real_new.Data(),"Distance reconstructed vertex from real vertex; distance [cm]; Entries",100,0,1);
1533  hist_distance_vertex_from_real_new->Sumw2();
1534  hist_distance_vertex_from_real_new->SetLineColor(6);
1535  hist_distance_vertex_from_real_new->SetMarkerStyle(20);
1536  hist_distance_vertex_from_real_new->SetMarkerSize(0.6);
1537  hist_distance_vertex_from_real_new->SetMarkerColor(6);
1538  TH1F* histogram_distance_vertex_from_real_new = (TH1F*)hist_distance_vertex_from_real_new->Clone();
1539  listout->Add(histogram_distance_vertex_from_real_new);
1540  fMotherHistogramArrayExtra[i][5] = histogram_distance_vertex_from_real_new;
1541 
1542  TString name_momentum_resolution ="momentum_resolution";
1543  TH1F* hist_momentum_resolution = new TH1F(name_momentum_resolution.Data(),"Momentum resolution; difference between real and reconstructed momentum [GeV/c]; Entries",1000,0,1);
1544  hist_momentum_resolution->Sumw2();
1545  hist_momentum_resolution->SetLineColor(6);
1546  hist_momentum_resolution->SetMarkerStyle(20);
1547  hist_momentum_resolution->SetMarkerSize(0.6);
1548  hist_momentum_resolution->SetMarkerColor(6);
1549  TH1F* histogram_momentum_resolution = (TH1F*)hist_momentum_resolution->Clone();
1550  listout->Add(histogram_momentum_resolution);
1551  fMotherHistogramArrayExtra[i][6] = histogram_momentum_resolution;
1552  }
1553 
1554  //we make the histograms for the same sign method histograms and the pt bins
1555  for (Int_t k = 0; k < fnPtBins+3; ++k){
1556  TString ptBinMother = "";
1557  if(k==0) ptBinMother = "";
1558  if(k==1) ptBinMother = "_ptbin_6_to_inf";
1559  if(k==2) ptBinMother = "_ptbin_3_to_inf";
1560  if(k>2) {ptBinMother += "_ptbin_"; ptBinMother += fPtBinLimits[k-3]; ptBinMother += "_to_"; ptBinMother += fPtBinLimits[k-2];}
1561 
1562  for (Int_t i = 0; i < 8; ++i){
1563  TString signName = "";
1564  if(i==0) signName = "";
1565  if(i==1) signName = "_SameSign";
1566  if(i==2) signName = "_SignSum";
1567  if(i==3) signName = "_HIJING_Background";
1568  if(i==4) signName = "_HIJING_Signal";
1569  if(i==5) signName = "_Background_rotation";
1570  if(i==6) signName = "_HIJING_Background_rotation";
1571  if(i==7) signName = "_correlated511";
1572  TString name_invariantMassMother ="invariantMassB0";
1573  name_invariantMassMother += ptBinMother + signName;
1574  TH1F* hist_invariantMassMother = new TH1F(name_invariantMassMother.Data(),"mass mother candidate; m [GeV/c^2]; Entries",2000,0,20);
1575  hist_invariantMassMother->Sumw2();
1576  hist_invariantMassMother->SetLineColor(6);
1577  hist_invariantMassMother->SetMarkerStyle(20);
1578  hist_invariantMassMother->SetMarkerSize(0.6);
1579  hist_invariantMassMother->SetMarkerColor(6);
1580  TH1F* histogram_invariantMassMother = (TH1F*)hist_invariantMassMother->Clone();
1581  fOutputB0MC->Add(histogram_invariantMassMother);
1582 
1583  TString name_deltainvariantMassMother ="deltainvariantMassB0";
1584  name_deltainvariantMassMother += ptBinMother + signName;
1585  TH1F* hist_deltainvariantMassMother = new TH1F(name_deltainvariantMassMother.Data(),"delta mass mother candidate; m [GeV/c^2]; Entries",2000,0,20);
1586  hist_deltainvariantMassMother->Sumw2();
1587  hist_deltainvariantMassMother->SetLineColor(6);
1588  hist_deltainvariantMassMother->SetMarkerStyle(20);
1589  hist_deltainvariantMassMother->SetMarkerSize(0.6);
1590  hist_deltainvariantMassMother->SetMarkerColor(6);
1591  TH1F* histogram_deltainvariantMassMother = (TH1F*)hist_deltainvariantMassMother->Clone();
1592  fOutputB0MC->Add(histogram_deltainvariantMassMother);
1593  }
1594  }
1595 
1596  // for (Int_t k = 0; k < fnPtBins+3; ++k){
1597  // TString ptBinMother = "";
1598  // if(k==0) ptBinMother = "";
1599  // if(k==1) ptBinMother = "_ptbin_6_to_inf";
1600  // if(k==2) ptBinMother = "_ptbin_3_to_inf";
1601  // if(k>2) {ptBinMother += "_ptbin_"; ptBinMother += fPtBinLimits[k-3]; ptBinMother += "_to_"; ptBinMother += fPtBinLimits[k-2];}
1602 
1603  // for (Int_t i = 0; i < 7; ++i){
1604  // TString signName = "";
1605  // if(i==0) signName = "";
1606  // if(i==1) signName = "_SameSign";
1607  // if(i==2) signName = "_SignSum";
1608  // if(i==3) signName = "_HIJING_Background";
1609  // if(i==4) signName = "_HIJING_Signal";
1610  // if(i==5) signName = "_Background_rotation";
1611  // if(i==6) signName = "_HIJING_Background_rotation";
1612 
1613  // TString name_invariantMassMother ="fineBin_invariantMassB0";
1614  // name_invariantMassMother += ptBinMother + signName;
1615  // TH1F* hist_invariantMassMother = new TH1F(name_invariantMassMother.Data(),"mass mother candidate; m [GeV/c^2]; Entries",5000,2.5,7.5);
1616  // hist_invariantMassMother->Sumw2();
1617  // hist_invariantMassMother->SetLineColor(6);
1618  // hist_invariantMassMother->SetMarkerStyle(20);
1619  // hist_invariantMassMother->SetMarkerSize(0.6);
1620  // hist_invariantMassMother->SetMarkerColor(6);
1621  // TH1F* histogram_invariantMassMother = (TH1F*)hist_invariantMassMother->Clone();
1622  // fOutputB0MC->Add(histogram_invariantMassMother);
1623 
1624  // TString name_deltainvariantMassMother ="fineBin_deltainvariantMassB0";
1625  // name_deltainvariantMassMother += ptBinMother + signName;
1626  // TH1F* hist_deltainvariantMassMother = new TH1F(name_deltainvariantMassMother.Data(),"delta mass mother candidate; m [GeV/c^2]; Entries",2000,0,20);
1627  // hist_deltainvariantMassMother->Sumw2();
1628  // hist_deltainvariantMassMother->SetLineColor(6);
1629  // hist_deltainvariantMassMother->SetMarkerStyle(20);
1630  // hist_deltainvariantMassMother->SetMarkerSize(0.6);
1631  // hist_deltainvariantMassMother->SetMarkerColor(6);
1632  // TH1F* histogram_deltainvariantMassMother = (TH1F*)hist_deltainvariantMassMother->Clone();
1633  // fOutputB0MC->Add(histogram_deltainvariantMassMother);
1634  // }
1635  // }
1636 
1637  TString name_cutEffectBackground ="cutEffectBackground";
1638  TH2I* hist_cutEffectBackground = new TH2I(name_cutEffectBackground.Data(),"Effect of Cuts on background; cut number; cut number",99,0,99,99,0,99);
1639  for (int i = 0; i < 99; ++i)
1640  {
1641  TString integerText = "";
1642  integerText += i;
1643  hist_cutEffectBackground->GetXaxis()->SetBinLabel(i+1,integerText);
1644  hist_cutEffectBackground->GetYaxis()->SetBinLabel(i+1,integerText);
1645  }
1646  TH2I* histogram_cutEffectBackground = (TH2I*)hist_cutEffectBackground->Clone();
1647  fOutputB0MC->Add(histogram_cutEffectBackground);
1648 
1649  TString name_cutEffectSignal ="cutEffectSignal";
1650  TH2I* hist_cutEffectSignal = new TH2I(name_cutEffectSignal.Data(),"Effect of Cuts on Signal; cut number; cut number",99,0,99,99,0,99);
1651  for (Int_t i = 0; i < 99; ++i)
1652  {
1653  TString integerText = "";
1654  integerText += i;
1655  hist_cutEffectSignal->GetXaxis()->SetBinLabel(i+1,integerText);
1656  hist_cutEffectSignal->GetYaxis()->SetBinLabel(i+1,integerText);
1657  }
1658  TH2I* histogram_cutEffectSignal = (TH2I*)hist_cutEffectSignal->Clone();
1659  fOutputB0MC->Add(histogram_cutEffectSignal);
1660 
1661  TString name_cutEffectUniqueBackground ="cutEffectUniqueBackground";
1662  TH1I* hist_cutEffectUniqueBackground = new TH1I(name_cutEffectUniqueBackground.Data(),"Effect of Cuts on Signal; cut number; cut number",99,0,99);
1663  for (Int_t i = 0; i < 99; ++i)
1664  {
1665  TString integerText = "";
1666  integerText += i;
1667  hist_cutEffectUniqueBackground->GetXaxis()->SetBinLabel(i+1,integerText);
1668  }
1669  TH1I* histogram_cutEffectUniqueBackground = (TH1I*)hist_cutEffectUniqueBackground->Clone();
1670  fOutputB0MC->Add(histogram_cutEffectUniqueBackground);
1671 
1672  TString name_cutEffectUniqueSignal ="cutEffectUniqueSignal";
1673  TH1I* hist_cutEffectUniqueSignal = new TH1I(name_cutEffectUniqueSignal.Data(),"Effect of Cuts on Signal; cut number; cut number",99,0,99);
1674  for (Int_t i = 0; i < 99; ++i)
1675  {
1676  TString integerText = "";
1677  integerText += i;
1678  hist_cutEffectUniqueSignal->GetXaxis()->SetBinLabel(i+1,integerText);
1679  }
1680  TH1I* histogram_cutEffectUniqueSignal = (TH1I*)hist_cutEffectUniqueSignal->Clone();
1681  fOutputB0MC->Add(histogram_cutEffectUniqueSignal);
1682 
1683  TString name_totalITSBackground ="totalITSBackground";
1684  TH1F* hist_totalITSBackground = new TH1F(name_totalITSBackground.Data(),"Total nr. of ITS hits for the daughters; number [#]; Entries",30,0,30);
1685  hist_totalITSBackground->Sumw2();
1686  hist_totalITSBackground->SetLineColor(6);
1687  hist_totalITSBackground->SetMarkerStyle(20);
1688  hist_totalITSBackground->SetMarkerSize(0.6);
1689  hist_totalITSBackground->SetMarkerColor(6);
1690  TH1F* histogram_totalITSBackground = (TH1F*)hist_totalITSBackground->Clone();
1691  fOutputB0MC->Add(histogram_totalITSBackground);
1692 
1693  TString name_totalITSSignal ="totalITSSignal";
1694  TH1F* hist_totalITSSignal = new TH1F(name_totalITSSignal.Data(),"Total nr. of ITS hits for the daughters; number [#]; Entries",30,0,30);
1695  hist_totalITSSignal->Sumw2();
1696  hist_totalITSSignal->SetLineColor(6);
1697  hist_totalITSSignal->SetMarkerStyle(20);
1698  hist_totalITSSignal->SetMarkerSize(0.6);
1699  hist_totalITSSignal->SetMarkerColor(6);
1700  TH1F* histogram_totalITSSignal = (TH1F*)hist_totalITSSignal->Clone();
1701  fOutputB0MC->Add(histogram_totalITSSignal);
1702 
1703  TString name_totalTPCBackground ="totalTPCBackground";
1704  TH1F* hist_totalTPCBackground = new TH1F(name_totalTPCBackground.Data(),"Total nr. of TPC hits for the daughters; number [#]; Entries",1000,0,1000);
1705  hist_totalTPCBackground->Sumw2();
1706  hist_totalTPCBackground->SetLineColor(6);
1707  hist_totalTPCBackground->SetMarkerStyle(20);
1708  hist_totalTPCBackground->SetMarkerSize(0.6);
1709  hist_totalTPCBackground->SetMarkerColor(6);
1710  TH1F* histogram_totalTPCBackground = (TH1F*)hist_totalTPCBackground->Clone();
1711  fOutputB0MC->Add(histogram_totalTPCBackground);
1712 
1713  TString name_totalTPCSignal ="totalTPCSignal";
1714  TH1F* hist_totalTPCSignal = new TH1F(name_totalTPCSignal.Data(),"Total nr. of TPC hits for the daughters; number [#]; Entries",1000,0,1000);
1715  hist_totalTPCSignal->Sumw2();
1716  hist_totalTPCSignal->SetLineColor(6);
1717  hist_totalTPCSignal->SetMarkerStyle(20);
1718  hist_totalTPCSignal->SetMarkerSize(0.6);
1719  hist_totalTPCSignal->SetMarkerColor(6);
1720  TH1F* histogram_totalTPCSignal = (TH1F*)hist_totalTPCSignal->Clone();
1721  fOutputB0MC->Add(histogram_totalTPCSignal);
1722 
1723  TString name_totalSigmaPIDBackground ="totalSigmaPIDBackground";
1724  TH1F* hist_totalSigmaPIDBackground = new TH1F(name_totalSigmaPIDBackground.Data(),"Total sigma of TPC and TOF PID for the daughters; number [#]; Entries",1000,0,100);
1725  hist_totalSigmaPIDBackground->Sumw2();
1726  hist_totalSigmaPIDBackground->SetLineColor(6);
1727  hist_totalSigmaPIDBackground->SetMarkerStyle(20);
1728  hist_totalSigmaPIDBackground->SetMarkerSize(0.6);
1729  hist_totalSigmaPIDBackground->SetMarkerColor(6);
1730  TH1F* histogram_totalSigmaPIDBackground = (TH1F*)hist_totalSigmaPIDBackground->Clone();
1731  fOutputB0MC->Add(histogram_totalSigmaPIDBackground);
1732 
1733  TString name_totalSigmaPIDSignal ="totalSigmaPIDSignal";
1734  TH1F* hist_totalSigmaPIDSignal = new TH1F(name_totalSigmaPIDSignal.Data(),"Total sigma of TPC and TOF PID for the daughters; number [#]; Entries",1000,0,100);
1735  hist_totalSigmaPIDSignal->Sumw2();
1736  hist_totalSigmaPIDSignal->SetLineColor(6);
1737  hist_totalSigmaPIDSignal->SetMarkerStyle(20);
1738  hist_totalSigmaPIDSignal->SetMarkerSize(0.6);
1739  hist_totalSigmaPIDSignal->SetMarkerColor(6);
1740  TH1F* histogram_totalSigmaPIDSignal = (TH1F*)hist_totalSigmaPIDSignal->Clone();
1741  fOutputB0MC->Add(histogram_totalSigmaPIDSignal);
1742 
1743  TString name_particle_pdgB0Pion ="particle_pdgB0Pion";
1744  TH2F* hist_particle_pdgB0Pion = new TH2F(name_particle_pdgB0Pion.Data(),"Pdg code particle; pdg code; Entries",5000,-0.5,4999.5,10,0,10);
1745  hist_particle_pdgB0Pion->Sumw2();
1746  hist_particle_pdgB0Pion->SetLineColor(6);
1747  hist_particle_pdgB0Pion->SetMarkerStyle(20);
1748  hist_particle_pdgB0Pion->SetMarkerSize(0.6);
1749  hist_particle_pdgB0Pion->SetMarkerColor(6);
1750  TH2F* histogram_particle_pdgB0Pion = (TH2F*)hist_particle_pdgB0Pion->Clone();
1751  fOutputB0MC->Add(histogram_particle_pdgB0Pion);
1752 
1753  TString name_particle_pdgDStarPion ="particle_pdgDStarPion";
1754  TH2F* hist_particle_pdgDStarPion = new TH2F(name_particle_pdgDStarPion.Data(),"Pdg code particle; pdg code; Entries",5000,-0.5,4999.5,10,0,10);
1755  hist_particle_pdgDStarPion->Sumw2();
1756  hist_particle_pdgDStarPion->SetLineColor(6);
1757  hist_particle_pdgDStarPion->SetMarkerStyle(20);
1758  hist_particle_pdgDStarPion->SetMarkerSize(0.6);
1759  hist_particle_pdgDStarPion->SetMarkerColor(6);
1760  TH2F* histogram_particle_pdgDStarPion = (TH2F*)hist_particle_pdgDStarPion->Clone();
1761  fOutputB0MC->Add(histogram_particle_pdgDStarPion);
1762 
1763  TString name_particle_pdgD0First ="particle_pdgD0First";
1764  TH2F* hist_particle_pdgD0First = new TH2F(name_particle_pdgD0First.Data(),"Pdg code particle; pdg code; Entries",5000,-0.5,4999.5,10,0,10);
1765  hist_particle_pdgD0First->Sumw2();
1766  hist_particle_pdgD0First->SetLineColor(6);
1767  hist_particle_pdgD0First->SetMarkerStyle(20);
1768  hist_particle_pdgD0First->SetMarkerSize(0.6);
1769  hist_particle_pdgD0First->SetMarkerColor(6);
1770  TH2F* histogram_particle_pdgD0First = (TH2F*)hist_particle_pdgD0First->Clone();
1771  fOutputB0MC->Add(histogram_particle_pdgD0First);
1772 
1773  TString name_particle_pdgD0Second ="particle_pdgD0Second";
1774  TH2F* hist_particle_pdgD0Second = new TH2F(name_particle_pdgD0Second.Data(),"Pdg code particle; pdg code; Entries",5000,-0.5,4999.5,10,0,10);
1775  hist_particle_pdgD0Second->Sumw2();
1776  hist_particle_pdgD0Second->SetLineColor(6);
1777  hist_particle_pdgD0Second->SetMarkerStyle(20);
1778  hist_particle_pdgD0Second->SetMarkerSize(0.6);
1779  hist_particle_pdgD0Second->SetMarkerColor(6);
1780  TH2F* histogram_particle_pdgD0Second = (TH2F*)hist_particle_pdgD0Second->Clone();
1781  fOutputB0MC->Add(histogram_particle_pdgD0Second);
1782 
1783  TString name_particle_pdgAll ="particle_pdgAll";
1784  TH1F* hist_particle_pdgAll = new TH1F(name_particle_pdgAll.Data(),"Pdg code particle; pdg code; Entries",5000,-0.5,4999.5);
1785  hist_particle_pdgAll->Sumw2();
1786  hist_particle_pdgAll->SetLineColor(6);
1787  hist_particle_pdgAll->SetMarkerStyle(20);
1788  hist_particle_pdgAll->SetMarkerSize(0.6);
1789  hist_particle_pdgAll->SetMarkerColor(6);
1790  TH1F* histogram_particle_pdgAll = (TH1F*)hist_particle_pdgAll->Clone();
1791  fOutputB0MC->Add(histogram_particle_pdgAll);
1792 
1793  TString name_particle_pdgAllSecond ="particle_pdgAllSecond";
1794  TH1F* hist_particle_pdgAllSecond = new TH1F(name_particle_pdgAllSecond.Data(),"Pdg code particle; pdg code; Entries",5000,-0.5,4999.5);
1795  hist_particle_pdgAllSecond->Sumw2();
1796  hist_particle_pdgAllSecond->SetLineColor(6);
1797  hist_particle_pdgAllSecond->SetMarkerStyle(20);
1798  hist_particle_pdgAllSecond->SetMarkerSize(0.6);
1799  hist_particle_pdgAllSecond->SetMarkerColor(6);
1800  TH1F* histogram_particle_pdgAllSecond = (TH1F*)hist_particle_pdgAllSecond->Clone();
1801  fOutputB0MC->Add(histogram_particle_pdgAllSecond);
1802 
1803  TString name_particle_pdgAllThird ="particle_pdgAllThird";
1804  TH1F* hist_particle_pdgAllThird = new TH1F(name_particle_pdgAllThird.Data(),"Pdg code particle; pdg code; Entries",5000,-0.5,4999.5);
1805  hist_particle_pdgAllThird->Sumw2();
1806  hist_particle_pdgAllThird->SetLineColor(6);
1807  hist_particle_pdgAllThird->SetMarkerStyle(20);
1808  hist_particle_pdgAllThird->SetMarkerSize(0.6);
1809  hist_particle_pdgAllThird->SetMarkerColor(6);
1810  TH1F* histogram_particle_pdgAllThird = (TH1F*)hist_particle_pdgAllThird->Clone();
1811  fOutputB0MC->Add(histogram_particle_pdgAllThird);
1812 
1813  TString name_particle_pdgAllFourth ="particle_pdgAllFourth";
1814  TH1F* hist_particle_pdgAllFourth = new TH1F(name_particle_pdgAllFourth.Data(),"Pdg code particle; pdg code; Entries",5000,-0.5,4999.5);
1815  hist_particle_pdgAllFourth->Sumw2();
1816  hist_particle_pdgAllFourth->SetLineColor(6);
1817  hist_particle_pdgAllFourth->SetMarkerStyle(20);
1818  hist_particle_pdgAllFourth->SetMarkerSize(0.6);
1819  hist_particle_pdgAllFourth->SetMarkerColor(6);
1820  TH1F* histogram_particle_pdgAllFourth = (TH1F*)hist_particle_pdgAllFourth->Clone();
1821  fOutputB0MC->Add(histogram_particle_pdgAllFourth);
1822 
1823  TString name_particle_pdgAllFifth ="particle_pdgAllFifth";
1824  TH1F* hist_particle_pdgAllFifth = new TH1F(name_particle_pdgAllFifth.Data(),"Pdg code particle; pdg code; Entries",5000,-0.5,4999.5);
1825  hist_particle_pdgAllFifth->Sumw2();
1826  hist_particle_pdgAllFifth->SetLineColor(6);
1827  hist_particle_pdgAllFifth->SetMarkerStyle(20);
1828  hist_particle_pdgAllFifth->SetMarkerSize(0.6);
1829  hist_particle_pdgAllFifth->SetMarkerColor(6);
1830  TH1F* histogram_particle_pdgAllFifth = (TH1F*)hist_particle_pdgAllFifth->Clone();
1831  fOutputB0MC->Add(histogram_particle_pdgAllFifth);
1832 
1833  TString name_particle_pdgAllInvMass ="particle_pdgAllInvMass";
1834  TH2F* hist_particle_pdgAllInvMass = new TH2F(name_particle_pdgAllInvMass.Data(),"Pdg code particle; pdg code; B0 candidate Inv. Mass",5000,-0.5,4999.5,500,4.0,6.0);
1835  hist_particle_pdgAllInvMass->Sumw2();
1836  hist_particle_pdgAllInvMass->SetLineColor(6);
1837  hist_particle_pdgAllInvMass->SetMarkerStyle(20);
1838  hist_particle_pdgAllInvMass->SetMarkerSize(0.6);
1839  hist_particle_pdgAllInvMass->SetMarkerColor(6);
1840  TH2F* histogram_particle_pdgAllInvMass = (TH2F*)hist_particle_pdgAllInvMass->Clone();
1841  fOutputB0MC->Add(histogram_particle_pdgAllInvMass);
1842 
1843  TString name_particle_pdgAllInvMassSecond ="particle_pdgAllInvMassSecond";
1844  TH2F* hist_particle_pdgAllInvMassSecond = new TH2F(name_particle_pdgAllInvMassSecond.Data(),"Pdg code particle; pdg code; B0 candidate Inv. Mass",5000,-0.5,4999.5,500,4.0,6.0);
1845  hist_particle_pdgAllInvMassSecond->Sumw2();
1846  hist_particle_pdgAllInvMassSecond->SetLineColor(6);
1847  hist_particle_pdgAllInvMassSecond->SetMarkerStyle(20);
1848  hist_particle_pdgAllInvMassSecond->SetMarkerSize(0.6);
1849  hist_particle_pdgAllInvMassSecond->SetMarkerColor(6);
1850  TH2F* histogram_particle_pdgAllInvMassSecond = (TH2F*)hist_particle_pdgAllInvMassSecond->Clone();
1851  fOutputB0MC->Add(histogram_particle_pdgAllInvMassSecond);
1852 
1853  TString name_particle_pdgAllInvMassThird ="particle_pdgAllInvMassThird";
1854  TH2F* hist_particle_pdgAllInvMassThird = new TH2F(name_particle_pdgAllInvMassThird.Data(),"Pdg code particle; pdg code; B0 candidate Inv. Mass",5000,-0.5,4999.5,500,4.0,6.0);
1855  hist_particle_pdgAllInvMassThird->Sumw2();
1856  hist_particle_pdgAllInvMassThird->SetLineColor(6);
1857  hist_particle_pdgAllInvMassThird->SetMarkerStyle(20);
1858  hist_particle_pdgAllInvMassThird->SetMarkerSize(0.6);
1859  hist_particle_pdgAllInvMassThird->SetMarkerColor(6);
1860  TH2F* histogram_particle_pdgAllInvMassThird = (TH2F*)hist_particle_pdgAllInvMassThird->Clone();
1861  fOutputB0MC->Add(histogram_particle_pdgAllInvMassThird);
1862 
1863  TString name_particle_pdgAllInvMassFourth ="particle_pdgAllInvMassFourth";
1864  TH2F* hist_particle_pdgAllInvMassFourth = new TH2F(name_particle_pdgAllInvMassFourth.Data(),"Pdg code particle; pdg code; B0 candidate Inv. Mass",5000,-0.5,4999.5,500,4.0,6.0);
1865  hist_particle_pdgAllInvMassFourth->Sumw2();
1866  hist_particle_pdgAllInvMassFourth->SetLineColor(6);
1867  hist_particle_pdgAllInvMassFourth->SetMarkerStyle(20);
1868  hist_particle_pdgAllInvMassFourth->SetMarkerSize(0.6);
1869  hist_particle_pdgAllInvMassFourth->SetMarkerColor(6);
1870  TH2F* histogram_particle_pdgAllInvMassFourth = (TH2F*)hist_particle_pdgAllInvMassFourth->Clone();
1871  fOutputB0MC->Add(histogram_particle_pdgAllInvMassFourth);
1872 
1873  TString name_particle_pdgAllInvMassFifth ="particle_pdgAllInvMassFifth";
1874  TH2F* hist_particle_pdgAllInvMassFifth = new TH2F(name_particle_pdgAllInvMassFifth.Data(),"Pdg code particle; pdg code; B0 candidate Inv. Mass",5000,-0.5,4999.5,500,4.0,6.0);
1875  hist_particle_pdgAllInvMassFifth->Sumw2();
1876  hist_particle_pdgAllInvMassFifth->SetLineColor(6);
1877  hist_particle_pdgAllInvMassFifth->SetMarkerStyle(20);
1878  hist_particle_pdgAllInvMassFifth->SetMarkerSize(0.6);
1879  hist_particle_pdgAllInvMassFifth->SetMarkerColor(6);
1880  TH2F* histogram_particle_pdgAllInvMassFifth = (TH2F*)hist_particle_pdgAllInvMassFifth->Clone();
1881  fOutputB0MC->Add(histogram_particle_pdgAllInvMassFifth);
1882 
1883  TString name_particle_daughterPdgOneStep511a ="particle_daughterPdgOneStep511a";
1884  TH2F* hist_particle_daughterPdgOneStep511a = new TH2F(name_particle_daughterPdgOneStep511a.Data(),"Pdg daughters; n daughter; Pdg daughter",50,-0.5,49.5,5000,-0.5,4999.5);
1885  hist_particle_daughterPdgOneStep511a->Sumw2();
1886  hist_particle_daughterPdgOneStep511a->SetLineColor(6);
1887  hist_particle_daughterPdgOneStep511a->SetMarkerStyle(20);
1888  hist_particle_daughterPdgOneStep511a->SetMarkerSize(0.6);
1889  hist_particle_daughterPdgOneStep511a->SetMarkerColor(6);
1890  TH2F* histogram_particle_daughterPdgOneStep511a = (TH2F*)hist_particle_daughterPdgOneStep511a->Clone();
1891  fOutputB0MC->Add(histogram_particle_daughterPdgOneStep511a);
1892 
1893  TString name_particle_daughterPdgOneStep521a ="particle_daughterPdgOneStep521a";
1894  TH2F* hist_particle_daughterPdgOneStep521a = new TH2F(name_particle_daughterPdgOneStep521a.Data(),"Pdg daughters; n daughter; Pdg daughter",50,-0.5,49.5,5000,-0.5,4999.5);
1895  hist_particle_daughterPdgOneStep521a->Sumw2();
1896  hist_particle_daughterPdgOneStep521a->SetLineColor(6);
1897  hist_particle_daughterPdgOneStep521a->SetMarkerStyle(20);
1898  hist_particle_daughterPdgOneStep521a->SetMarkerSize(0.6);
1899  hist_particle_daughterPdgOneStep521a->SetMarkerColor(6);
1900  TH2F* histogram_particle_daughterPdgOneStep521a = (TH2F*)hist_particle_daughterPdgOneStep521a->Clone();
1901  fOutputB0MC->Add(histogram_particle_daughterPdgOneStep521a);
1902 
1903  TString name_particle_daughterPdgOneStep511b ="particle_daughterPdgOneStep511b";
1904  TH2F* hist_particle_daughterPdgOneStep511b = new TH2F(name_particle_daughterPdgOneStep511b.Data(),"Pdg daughters; n daughter; Pdg daughter",50,-0.5,49.5,5000,-0.5,4999.5);
1905  hist_particle_daughterPdgOneStep511b->Sumw2();
1906  hist_particle_daughterPdgOneStep511b->SetLineColor(6);
1907  hist_particle_daughterPdgOneStep511b->SetMarkerStyle(20);
1908  hist_particle_daughterPdgOneStep511b->SetMarkerSize(0.6);
1909  hist_particle_daughterPdgOneStep511b->SetMarkerColor(6);
1910  TH2F* histogram_particle_daughterPdgOneStep511b = (TH2F*)hist_particle_daughterPdgOneStep511b->Clone();
1911  fOutputB0MC->Add(histogram_particle_daughterPdgOneStep511b);
1912 
1913  TString name_particle_daughterPdgOneStep521b ="particle_daughterPdgOneStep521b";
1914  TH2F* hist_particle_daughterPdgOneStep521b = new TH2F(name_particle_daughterPdgOneStep521b.Data(),"Pdg daughters; n daughter; Pdg daughter",50,-0.5,49.5,5000,-0.5,4999.5);
1915  hist_particle_daughterPdgOneStep521b->Sumw2();
1916  hist_particle_daughterPdgOneStep521b->SetLineColor(6);
1917  hist_particle_daughterPdgOneStep521b->SetMarkerStyle(20);
1918  hist_particle_daughterPdgOneStep521b->SetMarkerSize(0.6);
1919  hist_particle_daughterPdgOneStep521b->SetMarkerColor(6);
1920  TH2F* histogram_particle_daughterPdgOneStep521b = (TH2F*)hist_particle_daughterPdgOneStep521b->Clone();
1921  fOutputB0MC->Add(histogram_particle_daughterPdgOneStep521b);
1922 
1923  TString name_particle_daughterPdgTwoStep511a ="particle_daughterPdgTwoStep511a";
1924  TH2F* hist_particle_daughterPdgTwoStep511a = new TH2F(name_particle_daughterPdgTwoStep511a.Data(),"Pdg daughters; n daughter; Pdg daughter",50,-0.5,49.5,5000,-0.5,4999.5);
1925  hist_particle_daughterPdgTwoStep511a->Sumw2();
1926  hist_particle_daughterPdgTwoStep511a->SetLineColor(6);
1927  hist_particle_daughterPdgTwoStep511a->SetMarkerStyle(20);
1928  hist_particle_daughterPdgTwoStep511a->SetMarkerSize(0.6);
1929  hist_particle_daughterPdgTwoStep511a->SetMarkerColor(6);
1930  TH2F* histogram_particle_daughterPdgTwoStep511a = (TH2F*)hist_particle_daughterPdgTwoStep511a->Clone();
1931  fOutputB0MC->Add(histogram_particle_daughterPdgTwoStep511a);
1932 
1933  TString name_particle_daughterPdgTwoStep521a ="particle_daughterPdgTwoStep521a";
1934  TH2F* hist_particle_daughterPdgTwoStep521a = new TH2F(name_particle_daughterPdgTwoStep521a.Data(),"Pdg daughters; n daughter; Pdg daughter",50,-0.5,49.5,5000,-0.5,4999.5);
1935  hist_particle_daughterPdgTwoStep521a->Sumw2();
1936  hist_particle_daughterPdgTwoStep521a->SetLineColor(6);
1937  hist_particle_daughterPdgTwoStep521a->SetMarkerStyle(20);
1938  hist_particle_daughterPdgTwoStep521a->SetMarkerSize(0.6);
1939  hist_particle_daughterPdgTwoStep521a->SetMarkerColor(6);
1940  TH2F* histogram_particle_daughterPdgTwoStep521a = (TH2F*)hist_particle_daughterPdgTwoStep521a->Clone();
1941  fOutputB0MC->Add(histogram_particle_daughterPdgTwoStep521a);
1942 
1943  TString name_particle_daughterPdgTwoStep511b ="particle_daughterPdgTwoStep511b";
1944  TH2F* hist_particle_daughterPdgTwoStep511b = new TH2F(name_particle_daughterPdgTwoStep511b.Data(),"Pdg daughters; n daughter; Pdg daughter",50,-0.5,49.5,5000,-0.5,4999.5);
1945  hist_particle_daughterPdgTwoStep511b->Sumw2();
1946  hist_particle_daughterPdgTwoStep511b->SetLineColor(6);
1947  hist_particle_daughterPdgTwoStep511b->SetMarkerStyle(20);
1948  hist_particle_daughterPdgTwoStep511b->SetMarkerSize(0.6);
1949  hist_particle_daughterPdgTwoStep511b->SetMarkerColor(6);
1950  TH2F* histogram_particle_daughterPdgTwoStep511b = (TH2F*)hist_particle_daughterPdgTwoStep511b->Clone();
1951  fOutputB0MC->Add(histogram_particle_daughterPdgTwoStep511b);
1952 
1953  TString name_particle_daughterPdgTwoStep521b ="particle_daughterPdgTwoStep521b";
1954  TH2F* hist_particle_daughterPdgTwoStep521b = new TH2F(name_particle_daughterPdgTwoStep521b.Data(),"Pdg daughters; n daughter; Pdg daughter",50,-0.5,49.5,5000,-0.5,4999.5);
1955  hist_particle_daughterPdgTwoStep521b->Sumw2();
1956  hist_particle_daughterPdgTwoStep521b->SetLineColor(6);
1957  hist_particle_daughterPdgTwoStep521b->SetMarkerStyle(20);
1958  hist_particle_daughterPdgTwoStep521b->SetMarkerSize(0.6);
1959  hist_particle_daughterPdgTwoStep521b->SetMarkerColor(6);
1960  TH2F* histogram_particle_daughterPdgTwoStep521b = (TH2F*)hist_particle_daughterPdgTwoStep521b->Clone();
1961  fOutputB0MC->Add(histogram_particle_daughterPdgTwoStep521b);
1962 
1963  TString name_particle_daughterPdgTwoStep511c ="particle_daughterPdgTwoStep511c";
1964  TH2F* hist_particle_daughterPdgTwoStep511c = new TH2F(name_particle_daughterPdgTwoStep511c.Data(),"Pdg daughters; n daughter; Pdg daughter",50,-0.5,49.5,5000,-0.5,4999.5);
1965  hist_particle_daughterPdgTwoStep511c->Sumw2();
1966  hist_particle_daughterPdgTwoStep511c->SetLineColor(6);
1967  hist_particle_daughterPdgTwoStep511c->SetMarkerStyle(20);
1968  hist_particle_daughterPdgTwoStep511c->SetMarkerSize(0.6);
1969  hist_particle_daughterPdgTwoStep511c->SetMarkerColor(6);
1970  TH2F* histogram_particle_daughterPdgTwoStep511c = (TH2F*)hist_particle_daughterPdgTwoStep511c->Clone();
1971  fOutputB0MC->Add(histogram_particle_daughterPdgTwoStep511c);
1972 
1973  TString name_particle_daughterPdgTwoStep521c ="particle_daughterPdgTwoStep521c";
1974  TH2F* hist_particle_daughterPdgTwoStep521c = new TH2F(name_particle_daughterPdgTwoStep521c.Data(),"Pdg daughters; n daughter; Pdg daughter",50,-0.5,49.5,5000,-0.5,4999.5);
1975  hist_particle_daughterPdgTwoStep521c->Sumw2();
1976  hist_particle_daughterPdgTwoStep521c->SetLineColor(6);
1977  hist_particle_daughterPdgTwoStep521c->SetMarkerStyle(20);
1978  hist_particle_daughterPdgTwoStep521c->SetMarkerSize(0.6);
1979  hist_particle_daughterPdgTwoStep521c->SetMarkerColor(6);
1980  TH2F* histogram_particle_daughterPdgTwoStep521c = (TH2F*)hist_particle_daughterPdgTwoStep521c->Clone();
1981  fOutputB0MC->Add(histogram_particle_daughterPdgTwoStep521c);
1982 
1983  TString name_invariantMassB0Signal_BA ="invariantMassB0Signal_BA";
1984  TH1F* hist_invariantMassB0Signal_BA = new TH1F(name_invariantMassB0Signal_BA.Data(),"mass mother candidate; m [GeV/c^2]; Entries",2000,0,20);
1985  hist_invariantMassB0Signal_BA->Sumw2();
1986  hist_invariantMassB0Signal_BA->SetLineColor(6);
1987  hist_invariantMassB0Signal_BA->SetMarkerStyle(20);
1988  hist_invariantMassB0Signal_BA->SetMarkerSize(0.6);
1989  hist_invariantMassB0Signal_BA->SetMarkerColor(6);
1990  TH1F* histogram_invariantMassB0Signal_BA = (TH1F*)hist_invariantMassB0Signal_BA->Clone();
1991  fOutputB0MC->Add(histogram_invariantMassB0Signal_BA);
1992 
1993  TString name_invariantMassB0Correlated_BA ="invariantMassB0Correlated_BA";
1994  TH1F* hist_invariantMassB0Correlated_BA = new TH1F(name_invariantMassB0Correlated_BA.Data(),"mass mother candidate; m [GeV/c^2]; Entries",2000,0,20);
1995  hist_invariantMassB0Correlated_BA->Sumw2();
1996  hist_invariantMassB0Correlated_BA->SetLineColor(6);
1997  hist_invariantMassB0Correlated_BA->SetMarkerStyle(20);
1998  hist_invariantMassB0Correlated_BA->SetMarkerSize(0.6);
1999  hist_invariantMassB0Correlated_BA->SetMarkerColor(6);
2000  TH1F* histogram_invariantMassB0Correlated_BA = (TH1F*)hist_invariantMassB0Correlated_BA->Clone();
2001  fOutputB0MC->Add(histogram_invariantMassB0Correlated_BA);
2002 
2003  TString name_invariantMassB0Background_BA ="invariantMassB0Background_BA";
2004  TH1F* hist_invariantMassB0Background_BA = new TH1F(name_invariantMassB0Background_BA.Data(),"mass mother candidate; m [GeV/c^2]; Entries",2000,0,20);
2005  hist_invariantMassB0Background_BA->Sumw2();
2006  hist_invariantMassB0Background_BA->SetLineColor(6);
2007  hist_invariantMassB0Background_BA->SetMarkerStyle(20);
2008  hist_invariantMassB0Background_BA->SetMarkerSize(0.6);
2009  hist_invariantMassB0Background_BA->SetMarkerColor(6);
2010  TH1F* histogram_invariantMassB0Background_BA = (TH1F*)hist_invariantMassB0Background_BA->Clone();
2011  fOutputB0MC->Add(histogram_invariantMassB0Background_BA);
2012 
2013  return;
2014 }
2015 //-------------------------------------------------------------------------------------
2016 AliAODVertex* AliAnalysisTaskSEB0toDStarPi::RecalculateVertex(const AliVVertex *primary,TObjArray *tracks,Double_t bField, Double_t dispersion){
2017  //
2018  // Helper function to recalculate a vertex.
2019  //
2020 
2021  AliESDVertex *vertexESD = 0;
2022  AliAODVertex *vertexAOD = 0;
2023 
2024  AliVertexerTracks vertexer;
2025  vertexer.SetFieldkG(bField);
2026 
2027  vertexer.SetVtxStart((AliESDVertex*)primary); //primary vertex
2028  vertexESD = (AliESDVertex*)vertexer.VertexForSelectedESDTracks(tracks);
2029 
2030  // delete vertexer; vertexer=NULL;
2031 
2032  if(!vertexESD) return vertexAOD;
2033 
2034 
2035  if(vertexESD->GetNContributors()!=tracks->GetEntriesFast())
2036  {
2037  delete vertexESD; vertexESD=nullptr;
2038  return vertexAOD;
2039  }
2040 
2041  // convert to AliAODVertex
2042  Double_t pos[3],cov[6],chi2perNDF;
2043  for(Int_t a=0;a<3;a++)pos[a]=0.;
2044  for(Int_t b=0;b<6;b++)cov[b]=0.;
2045  chi2perNDF=0;
2046 
2047  vertexESD->GetXYZ(pos); // position
2048  vertexESD->GetCovMatrix(cov); //covariance matrix
2049 
2050 
2051  Double_t vertRadius2=pos[0]*pos[0]+pos[1]*pos[1];
2052  if(vertRadius2>8.) //(2.82)^2 radius beam pipe
2053  {
2054  delete vertexESD; vertexESD=nullptr;
2055  return vertexAOD;
2056  }
2057 
2058  chi2perNDF = vertexESD->GetChi2toNDF();
2059  dispersion = vertexESD->GetDispersion();
2060  delete vertexESD; vertexESD=nullptr;
2061  Int_t nprongs = 2; //tracks->GetEntriesFast();
2062  vertexAOD = new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
2063 
2064  return vertexAOD;
2065 }
2066 //-------------------------------------------------------------------------------------
2067 void AliAnalysisTaskSEB0toDStarPi::B0toDStarPiSignalTracksInMC(TClonesArray * mcTrackArray,AliAODEvent* aodevent,TMatrix * B0toDStarPiLabelMatrix, TList *listout){
2068 
2069  TMatrix &particleMatrix = *B0toDStarPiLabelMatrix;
2070  for (Int_t i=0; i<mcTrackArray->GetEntriesFast(); i++){
2071 
2072  Int_t mcLabelPionB0 = 0;
2073  Int_t mcLabelPionDStar = 0;
2074  Int_t mcLabelPionD0 = 0;
2075  Int_t mcLabelKaon = 0;
2076  Int_t mcLabelD0 = 0;
2077  Int_t mcLabelDStar = 0;
2078  Int_t mcLabelB0 = 0;
2079 
2080  Double_t ptMC[7] = {0.0};
2081  Double_t yMC[7] = {0.0};
2082  Double_t pseudoYMC[7] = {0.0};
2083 
2084 
2085  Bool_t mcPionB0Present = kFALSE;
2086  Bool_t mcPionDStarPresent = kFALSE;
2087  Bool_t mcPionD0Present = kFALSE;
2088  Bool_t mcKaonPresent = kFALSE;
2089 
2090  // Below, we find all the MC labels for the true signal tracks
2091  AliAODMCParticle *mcTrackParticle = dynamic_cast< AliAODMCParticle*>(mcTrackArray->At(i));
2092  if(!mcTrackParticle) {std::cout << "no particle" << std::endl; continue;}
2093  Int_t pdgCodeMC=TMath::Abs(mcTrackParticle->GetPdgCode());
2094 
2095  if (pdgCodeMC==511){ //if the track is a B0 we look at its daughters
2096 
2097  mcLabelB0 = i;
2098  Int_t nDaughterB0 = mcTrackParticle->GetNDaughters();
2099  ptMC[0] = mcTrackParticle->Pt();
2100  yMC[0] = mcTrackParticle->Y();
2101  pseudoYMC[0] = mcTrackParticle->Eta();
2102 
2103  TString fillthis= "B0s_in_analysis";
2104  ((TH1F*)(listout->FindObject(fillthis)))->Fill(0);
2105 
2106  if(nDaughterB0==2){
2107  for(Int_t iDaughterB0=0; iDaughterB0<2; iDaughterB0++){
2108 
2109  AliAODMCParticle* daughterB0 = (AliAODMCParticle*)mcTrackArray->At(mcTrackParticle->GetDaughter(iDaughterB0));
2110  if(!daughterB0) break;
2111  Int_t pdgCodeDaughterB0=TMath::Abs(daughterB0->GetPdgCode());
2112 
2113  if (pdgCodeDaughterB0==211){ //if the track is a pion we save its monte carlo label
2114  mcLabelPionB0 = mcTrackParticle->GetDaughter(iDaughterB0);
2115  mcPionB0Present = kTRUE;
2116  ptMC[1] = daughterB0->Pt();
2117  yMC[1] = daughterB0->Y();
2118  pseudoYMC[1] = daughterB0->Eta();
2119 
2120  } else if (pdgCodeDaughterB0==413){ //if the track is a DStar we look at its daughters
2121  mcLabelDStar = mcTrackParticle->GetDaughter(iDaughterB0);
2122  Int_t nDaughterDStar = daughterB0->GetNDaughters();
2123  ptMC[2] = daughterB0->Pt();
2124  yMC[2] = daughterB0->Y();
2125  pseudoYMC[2] = daughterB0->Eta();
2126 
2127  if(nDaughterDStar==2){
2128  for(Int_t iDaughterDStar=0; iDaughterDStar<2; iDaughterDStar++){
2129 
2130  AliAODMCParticle* daughterDStar = (AliAODMCParticle*)mcTrackArray->At(daughterB0->GetDaughter(iDaughterDStar));
2131  if(!daughterDStar) break;
2132  Int_t pdgCodeDaughterDStar=TMath::Abs(daughterDStar->GetPdgCode());
2133 
2134  if (pdgCodeDaughterDStar==211){ //if the track is a pion we save its monte carlo label
2135  mcLabelPionDStar = daughterB0->GetDaughter(iDaughterDStar);
2136  mcPionDStarPresent = kTRUE;
2137  ptMC[3] = daughterDStar->Pt();
2138  yMC[3] = daughterDStar->Y();
2139  pseudoYMC[3] = daughterDStar->Eta();
2140 
2141  } else if (pdgCodeDaughterDStar==421){ //if the track is a D0 we look at its daughters
2142  mcLabelD0 = daughterB0->GetDaughter(iDaughterDStar);
2143  Int_t nDaughterD0 = daughterDStar->GetNDaughters();
2144  ptMC[4] = daughterDStar->Pt();
2145  yMC[4] = daughterDStar->Y();
2146  pseudoYMC[4] = daughterDStar->Eta();
2147 
2148  if(nDaughterD0==2){
2149  for(Int_t iDaughterD0=0; iDaughterD0<2; iDaughterD0++){
2150 
2151  AliAODMCParticle* daughterD0 = (AliAODMCParticle*)mcTrackArray->At(daughterDStar->GetDaughter(iDaughterD0));
2152  if(!daughterD0) break;
2153  Int_t pdgCodeDaughterD0=TMath::Abs(daughterD0->GetPdgCode());
2154 
2155  if (pdgCodeDaughterD0==211){ //if the track is a pion we save its monte carlo label
2156  mcLabelPionD0 = daughterDStar->GetDaughter(iDaughterD0);
2157  ptMC[5] = daughterD0->Pt();
2158  yMC[5] = daughterD0->Y();
2159  pseudoYMC[5] = daughterD0->Eta();
2160  mcPionD0Present = kTRUE;
2161 
2162  } else if (pdgCodeDaughterD0==321){ //if the track is a kaon we save its monte carlo label
2163  mcLabelKaon = daughterDStar->GetDaughter(iDaughterD0);;
2164  mcKaonPresent = kTRUE;
2165  ptMC[6] = daughterD0->Pt();
2166  yMC[6] = daughterD0->Y();
2167  pseudoYMC[6] = daughterD0->Eta();
2168 
2169  } else break;
2170  }
2171  }
2172  } else break;
2173  }
2174  }
2175  } else break;
2176  }
2177  }
2178  }
2179 
2180  // Next, we save the labels to our array
2181  if(mcPionB0Present && mcPionDStarPresent && mcPionD0Present && mcKaonPresent){
2182  Int_t rows = B0toDStarPiLabelMatrix->GetNrows();
2183 
2184  B0toDStarPiLabelMatrix->ResizeTo(rows+1,7);
2185  particleMatrix(rows,0) = mcLabelPionB0;
2186  particleMatrix(rows,1) = mcLabelPionDStar;
2187  particleMatrix(rows,2) = mcLabelPionD0;
2188  particleMatrix(rows,3) = mcLabelKaon;
2189  particleMatrix(rows,4) = mcLabelD0;
2190  particleMatrix(rows,5) = mcLabelDStar;
2191  particleMatrix(rows,6) = mcLabelB0;
2192 
2193  // We also save information on the amount of signal tracks that exist in the MC dataset
2194  TString fillthis= "B0s_in_analysis";
2195  ((TH1F*)(listout->FindObject(fillthis)))->Fill(1);
2196 
2197  fillthis= "B0s_per_bin";
2198  for (Int_t j = 0; j < fnPtBins; ++j)
2199  {
2200  if(fPtBinLimits[j] < ptMC[0] && ptMC[0] < fPtBinLimits[j+1]) {((TH1F*)(listout->FindObject(fillthis)))->Fill(j); break;}
2201  }
2202 
2203  fillthis= "mc_B0_pt";
2204  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[0]);
2205  fillthis= "mc_B0_pion_pt";
2206  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[1]);
2207  fillthis= "mc_DStar_pt";
2208  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[2]);
2209  fillthis= "mc_DStar_pion_pt";
2210  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[3]);
2211  fillthis= "mc_D0_pt";
2212  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[4]);
2213  fillthis= "mc_D0_pion_pt";
2214  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[5]);
2215  fillthis= "mc_D0_kaon_pt";
2216  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[6]);
2217 
2218  fillthis= "mc_B0_rapidity_true";
2219  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[0]);
2220  fillthis= "mc_B0_pion_rapidity_true";
2221  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[1]);
2222  fillthis= "mc_DStar_rapidity_true";
2223  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[2]);
2224  fillthis= "mc_DStar_pion_rapidity_true";
2225  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[3]);
2226  fillthis= "mc_D0_rapidity_true";
2227  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[4]);
2228  fillthis= "mc_D0_pion_rapidity_true";
2229  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[5]);
2230  fillthis= "mc_D0_kaon_rapidity_true";
2231  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[6]);
2232 
2233  fillthis= "mc_B0_pseudorapidity_true";
2234  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[0]);
2235  fillthis= "mc_B0_pion_pseudorapidity_true";
2236  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[1]);
2237  fillthis= "mc_DStar_pseudorapidity_true";
2238  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[2]);
2239  fillthis= "mc_DStar_pion_pseudorapidity_true";
2240  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[3]);
2241  fillthis= "mc_D0_pseudorapidity_true";
2242  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[4]);
2243  fillthis= "mc_D0_pion_pseudorapidity_true";
2244  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[5]);
2245  fillthis= "mc_D0_kaon_pseudorapidity_true";
2246  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[6]);
2247 
2248  }
2249  }
2250 
2251  // Not all the tracks can be/are detected by the detector. We are only interested in tracks that lie within the acceptance of the detector.
2252  // We remove the undetectable tracks from the array in order to get accurate information on the amount of signal that lies within the acceptance of our detector.
2253  Int_t numberOfB0s = 0;
2254  TArrayI correctLabelArray;
2255  for (Int_t i = 0; i < B0toDStarPiLabelMatrix->GetNrows(); i++)
2256  {
2257  Int_t particleCounter = 0;
2258  for (Int_t j = 0; j < 4; j++)
2259  {
2260  Int_t labelParticleInList = (Int_t)particleMatrix(i,j);
2261  for (Int_t k=0; k<aodevent->GetNumberOfTracks(); k++)
2262  {
2263  AliAODTrack* aodTrack = dynamic_cast<AliAODTrack*>(aodevent->GetTrack(k));
2264  if(!aodTrack) AliFatal("Not a standard AOD");
2265  if(TMath::Abs(aodTrack->Eta())>0.8) continue;
2266  if(aodTrack->GetLabel() == labelParticleInList)
2267  {
2268  particleCounter++;
2269  break;
2270  }
2271  }
2272  }
2273 
2274  if (particleCounter==4)
2275  {
2276  TString fillthis= "B0s_in_analysis";
2277  ((TH1F*)(listout->FindObject(fillthis)))->Fill(2);
2278  numberOfB0s++;
2279  correctLabelArray.Set(numberOfB0s);
2280  correctLabelArray.AddAt(i,numberOfB0s-1);
2281 
2282  Int_t labelParticle = (Int_t)particleMatrix(i,0);
2283  AliAODMCParticle * B0track = dynamic_cast< AliAODMCParticle*>(mcTrackArray->At(labelParticle));
2284 
2285  fillthis= "B0s_per_bin_in_Acc";
2286  for (Int_t j = 0; j < fnPtBins; ++j)
2287  {
2288  if(fPtBinLimits[j] < B0track->Pt() && B0track->Pt() < fPtBinLimits[j+1]) {((TH1F*)(listout->FindObject(fillthis)))->Fill(j); break;}
2289  }
2290  }
2291  }
2292 
2293  for (Int_t i = 0; i < correctLabelArray.GetSize(); i++)
2294  {
2295  particleMatrix(i,0) = (Int_t)particleMatrix(correctLabelArray[i],0);
2296  particleMatrix(i,1) = (Int_t)particleMatrix(correctLabelArray[i],1);
2297  particleMatrix(i,2) = (Int_t)particleMatrix(correctLabelArray[i],2);
2298  particleMatrix(i,3) = (Int_t)particleMatrix(correctLabelArray[i],3);
2299  particleMatrix(i,4) = (Int_t)particleMatrix(correctLabelArray[i],4);
2300  particleMatrix(i,5) = (Int_t)particleMatrix(correctLabelArray[i],5);
2301  particleMatrix(i,6) = (Int_t)particleMatrix(correctLabelArray[i],6);
2302  }
2303  B0toDStarPiLabelMatrix->ResizeTo(correctLabelArray.GetSize(),7);
2304  return;
2305 }
2306 //-------------------------------------------------------------------------------------
2307 Bool_t AliAnalysisTaskSEB0toDStarPi::D0FirstDaughterSelection(AliAODTrack* aodTrack, AliAODVertex *primaryVertex, Double_t bz, TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, AliAODMCHeader * header){
2308 
2309  // we select the D0 pion and save its information
2310  if(!aodTrack) AliFatal("Not a standard AOD");
2311 
2312  //quick quality cut
2313  if(aodTrack->GetITSNcls() < 1) return kFALSE;
2314  if(aodTrack->GetTPCNcls() < 1) return kFALSE;
2315  if(aodTrack->GetStatus()&AliESDtrack::kITSpureSA) return kFALSE;
2316  if(!(aodTrack->GetStatus()&AliESDtrack::kITSin)) return kFALSE;
2317  if(aodTrack->GetID() < 0) return kFALSE;
2318  Double_t covtest[21];
2319  if(!aodTrack->GetCovarianceXYZPxPyPz(covtest)) return kFALSE;
2320 
2321  Int_t mcLabelParticle = -1;
2322  Int_t pdgParticle = -1;
2323  mcLabelParticle = aodTrack->GetLabel();
2324 
2325  // we fill histograms with information of the track
2326  Double_t pt_track = aodTrack->Pt();
2327  Double_t momentum_track = aodTrack->P();
2328  Int_t numberOfITS = aodTrack->GetITSNcls();
2329  Int_t numberOfTPC = aodTrack->GetTPCNcls();
2330 
2331  AliExternalTrackParam particleTrack;
2332  particleTrack.CopyFromVTrack(aodTrack);
2333  Double_t d0[2],covd0[3];
2334  particleTrack.PropagateToDCA(primaryVertex,bz,100.,d0,covd0);
2335 
2336  //we check if the particle is a signal track, we look at both daughter options therefore the signal will be too high in the D0 daughter signal histograms
2337  Bool_t isDesiredCandidate = kFALSE;
2338  if(fUseMCInfo){
2339  TMatrix &particleMatrix = *B0toDStarPiLabelMatrix;
2340  for (Int_t k = 0; k < B0toDStarPiLabelMatrix->GetNrows(); ++k){
2341  if(mcLabelParticle == (Int_t)particleMatrix(k,2) || mcLabelParticle == (Int_t)particleMatrix(k,3)){
2342  isDesiredCandidate = kTRUE;
2343  break;
2344  }
2345  }
2346  }
2347 
2348  if(IsTrackInjected(aodTrack,header,mcTrackArray) && !isDesiredCandidate && fQuickSignalAnalysis == 2) return kFALSE;
2349 
2350  Int_t daughterType = 0;
2351 
2352 
2353  Int_t histType = 0;
2354  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2355  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2356  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2357  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2358 
2359  for (Int_t j = 0; j < 10; ++j)
2360  {
2361  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2362 
2363  }
2364  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2365 
2366  if(isDesiredCandidate)
2367  {
2368  histType = 1;
2369  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2370  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2371  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2372  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2373 
2374  for (Int_t j = 0; j < 10; ++j)
2375  {
2376  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2377 
2378  }
2379  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2380  }
2381 
2382  //we apply a number of cuts on the particle
2383  Bool_t bCut = kFALSE;
2384 
2385  //We do not apply a PID cut at this stage since we don't know if we are dealing with a kaon or a pion
2386 
2387  if(aodTrack->GetITSNcls() < fCuts->GetMinITSNclsD0FirstDaughter()){
2388  if(isDesiredCandidate) {
2389  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(3);
2390  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(3);
2391  bCut = kTRUE;
2392  }
2393 
2394  if(aodTrack->GetTPCNcls() < fCuts->GetMinTPCNclsD0FirstDaughter()){
2395  if(isDesiredCandidate) {
2396  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(4);
2397  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(4);
2398  bCut = kTRUE;
2399  }
2400 
2401  if(fCuts->UseITSRefitD0FirstDaughter()==kTRUE){
2402  if(!(aodTrack->GetStatus()&AliESDtrack::kITSrefit)) {
2403  if(isDesiredCandidate) {
2404  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(5);
2405  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(5);
2406  bCut = kTRUE;
2407  }
2408  }
2409 
2410  if(fCuts->UseTPCRefitD0FirstDaughter()==kTRUE){
2411  if((!(aodTrack->GetStatus()&AliESDtrack::kTPCrefit))) {
2412  if(isDesiredCandidate) {
2413  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(6);
2414  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(6);
2415  bCut = kTRUE;
2416  }
2417  }
2418 
2419  if(fCuts->UseFilterBitD0FirstDaughter()==kTRUE){
2420  if(!(aodTrack->TestFilterMask(BIT(fCuts->GetFilterBitD0FirstDaughter())))) {
2421  if(isDesiredCandidate) {
2422  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(7);
2423  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(7);
2424  bCut = kTRUE;
2425  }
2426  }
2427 
2428  if(aodTrack->Pt() < fCuts->GetMinPtD0FirstDaughter()){
2429  if(isDesiredCandidate) {
2430  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(8);
2431  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(8);
2432  bCut = kTRUE;
2433  }
2434 
2435  if(TMath::Abs(d0[0]) < fCuts->GetMind0D0FirstDaughter()){
2436  if(isDesiredCandidate) {
2437  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(12);
2438  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(12);
2439  bCut = kTRUE;
2440  }
2441 
2442  if(TMath::Abs(aodTrack->Eta()) > fCuts->GetMaxAbsEtaD0FirstDaughter()){
2443  if(isDesiredCandidate) {
2444  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(9);
2445  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(9);
2446  bCut = kTRUE;
2447  }
2448 
2449  Bool_t bHardSelectionArrayITS[7] = {kFALSE};
2450  fCuts->GetHardSelectionArrayITSD0FirstDaughter(bHardSelectionArrayITS);
2451  Bool_t bSoftSelectionArrayITS[7] = {kFALSE};
2452  fCuts->GetSoftSelectionArrayITSD0FirstDaughter(bSoftSelectionArrayITS);
2453 
2454  Bool_t bHardITSPass = kTRUE;
2455  for (Int_t j = 0; j < 7; ++j)
2456  {
2457  if(bHardSelectionArrayITS[j])
2458  {
2459  if(!aodTrack->HasPointOnITSLayer(j)) bHardITSPass = kFALSE;
2460  }
2461  }
2462 
2463  Int_t nCounterSoftSelection = 0;
2464  Bool_t bSoftITSPass = kTRUE;
2465  for (Int_t j = 0; j < 7; ++j)
2466  {
2467  if(bSoftSelectionArrayITS[j])
2468  {
2469  if(aodTrack->HasPointOnITSLayer(j)) nCounterSoftSelection++;
2470  }
2471  }
2472  if(nCounterSoftSelection < fCuts->GetNSoftITSCutD0FirstDaughter()) bSoftITSPass = kFALSE;
2473 
2474  if(!bHardITSPass){
2475  if(isDesiredCandidate) {
2476  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(10);
2477  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(10);
2478  bCut = kTRUE;
2479  }
2480 
2481  if(!bSoftITSPass){
2482  if(isDesiredCandidate) {
2483  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(11);
2484  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(11);
2485  bCut = kTRUE;
2486  }
2487 
2488  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) bCut = kTRUE;
2489 
2490  if(bCut) {
2491  if(isDesiredCandidate) {
2492  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(0);
2493  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(0);
2494  return kFALSE;
2495  }
2496 
2497  //we fill histograms with track information of the tracks that pass the cuts
2498  histType = 2;
2499  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2500  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2501  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2502  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2503 
2504  for (Int_t j = 0; j < 10; ++j)
2505  {
2506  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2507 
2508  }
2509  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2510 
2511  if(isDesiredCandidate)
2512  {
2513  histType = 3;
2514  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2515  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2516  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2517  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2518 
2519  for (Int_t j = 0; j < 10; ++j)
2520  {
2521  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2522 
2523  }
2524  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2525  }
2526 
2527  return kTRUE;
2528 }
2529 //-------------------------------------------------------------------------------------
2530 Bool_t AliAnalysisTaskSEB0toDStarPi::D0SecondDaughterSelection(AliAODTrack* aodTrack, AliAODVertex *primaryVertex, Double_t bz, TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, AliAODMCHeader * header){
2531 
2532  // we select the D0 pion and save its information
2533  if(!aodTrack) AliFatal("Not a standard AOD");
2534 
2535  //quick quality cut
2536  if(aodTrack->GetITSNcls() < 1) return kFALSE;
2537  if(aodTrack->GetTPCNcls() < 1) return kFALSE;
2538  if(aodTrack->GetStatus()&AliESDtrack::kITSpureSA) return kFALSE;
2539  if(!(aodTrack->GetStatus()&AliESDtrack::kITSin)) return kFALSE;
2540  if(aodTrack->GetID() < 0) return kFALSE;
2541  Double_t covtest[21];
2542  if(!aodTrack->GetCovarianceXYZPxPyPz(covtest)) return kFALSE;
2543 
2544  Int_t mcLabelParticle = -1;
2545  Int_t pdgParticle = -1;
2546  mcLabelParticle = aodTrack->GetLabel();
2547 
2548  // we fill histograms with information of the track
2549  Double_t pt_track = aodTrack->Pt();
2550  Double_t momentum_track = aodTrack->P();
2551  Int_t numberOfITS = aodTrack->GetITSNcls();
2552  Int_t numberOfTPC = aodTrack->GetTPCNcls();
2553 
2554  AliExternalTrackParam particleTrack;
2555  particleTrack.CopyFromVTrack(aodTrack);
2556  Double_t d0[2],covd0[3];
2557  particleTrack.PropagateToDCA(primaryVertex,bz,100.,d0,covd0);
2558 
2559  //we check if the particle is a signal track, we look at both daughter options therefore the signal will be too high in the D0 daughter signal histograms
2560  Bool_t isDesiredCandidate = kFALSE;
2561  if(fUseMCInfo){
2562  TMatrix &particleMatrix = *B0toDStarPiLabelMatrix;
2563  for (Int_t k = 0; k < B0toDStarPiLabelMatrix->GetNrows(); ++k){
2564  if(mcLabelParticle == (Int_t)particleMatrix(k,2) || mcLabelParticle == (Int_t)particleMatrix(k,3)){
2565  isDesiredCandidate = kTRUE;
2566  break;
2567  }
2568  }
2569  }
2570 
2571  if(IsTrackInjected(aodTrack,header,mcTrackArray) && !isDesiredCandidate && fQuickSignalAnalysis == 2) return kFALSE;
2572 
2573  Int_t daughterType = 1;
2574 
2575 
2576  Int_t histType = 0;
2577  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2578  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2579  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2580  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2581 
2582  for (Int_t j = 0; j < 10; ++j)
2583  {
2584  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2585 
2586  }
2587  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2588 
2589  if(isDesiredCandidate)
2590  {
2591  histType = 1;
2592  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2593  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2594  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2595  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2596 
2597  for (Int_t j = 0; j < 10; ++j)
2598  {
2599  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2600 
2601  }
2602  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2603  }
2604 
2605  //we apply a number of cuts on the particle
2606  Bool_t bCut = kFALSE;
2607 
2608  //We do not apply a PID cut at this stage since we don't know if we are dealing with a kaon or a pion
2609 
2610  if(aodTrack->GetITSNcls() < fCuts->GetMinITSNclsD0SecondDaughter()){
2611  if(isDesiredCandidate) {
2612  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(3);
2613  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(3);
2614  bCut = kTRUE;
2615  }
2616 
2617  if(aodTrack->GetTPCNcls() < fCuts->GetMinTPCNclsD0SecondDaughter()){
2618  if(isDesiredCandidate) {
2619  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(4);
2620  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(4);
2621  bCut = kTRUE;
2622  }
2623 
2624  if(fCuts->UseITSRefitD0SecondDaughter()==kTRUE){
2625  if(!(aodTrack->GetStatus()&AliESDtrack::kITSrefit)) {
2626  if(isDesiredCandidate) {
2627  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(5);
2628  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(5);
2629  bCut = kTRUE;
2630  }
2631  }
2632 
2633  if(fCuts->UseTPCRefitD0SecondDaughter()==kTRUE){
2634  if((!(aodTrack->GetStatus()&AliESDtrack::kTPCrefit))) {
2635  if(isDesiredCandidate) {
2636  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(6);
2637  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(6);
2638  bCut = kTRUE;
2639  }
2640  }
2641 
2642  if(fCuts->UseFilterBitD0SecondDaughter()==kTRUE){
2643  if(!(aodTrack->TestFilterMask(BIT(fCuts->GetFilterBitD0SecondDaughter())))) {
2644  if(isDesiredCandidate) {
2645  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(7);
2646  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(7);
2647  bCut = kTRUE;
2648  }
2649  }
2650 
2651  if(aodTrack->Pt() < fCuts->GetMinPtD0SecondDaughter()){
2652  if(isDesiredCandidate) {
2653  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(8);
2654  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(8);
2655  bCut = kTRUE;
2656  }
2657 
2658  if(TMath::Abs(d0[0]) < fCuts->GetMind0D0SecondDaughter()){
2659  if(isDesiredCandidate) {
2660  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(12);
2661  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(12);
2662  bCut = kTRUE;
2663  }
2664 
2665  if(TMath::Abs(aodTrack->Eta()) > fCuts->GetMaxAbsEtaD0SecondDaughter()){
2666  if(isDesiredCandidate) {
2667  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(9);
2668  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(9);
2669  bCut = kTRUE;
2670  }
2671 
2672  Bool_t bHardSelectionArrayITS[7] = {kFALSE};
2673  fCuts->GetHardSelectionArrayITSD0SecondDaughter(bHardSelectionArrayITS);
2674  Bool_t bSoftSelectionArrayITS[7] = {kFALSE};
2675  fCuts->GetSoftSelectionArrayITSD0SecondDaughter(bSoftSelectionArrayITS);
2676 
2677  Bool_t bHardITSPass = kTRUE;
2678  for (Int_t j = 0; j < 7; ++j)
2679  {
2680  if(bHardSelectionArrayITS[j])
2681  {
2682  if(!aodTrack->HasPointOnITSLayer(j)) bHardITSPass = kFALSE;
2683  }
2684  }
2685 
2686  Int_t nCounterSoftSelection = 0;
2687  Bool_t bSoftITSPass = kTRUE;
2688  for (Int_t j = 0; j < 7; ++j)
2689  {
2690  if(bSoftSelectionArrayITS[j])
2691  {
2692  if(aodTrack->HasPointOnITSLayer(j)) nCounterSoftSelection++;
2693  }
2694  }
2695  if(nCounterSoftSelection < fCuts->GetNSoftITSCutD0SecondDaughter()) bSoftITSPass = kFALSE;
2696 
2697  if(!bHardITSPass){
2698  if(isDesiredCandidate) {
2699  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(10);
2700  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(10);
2701  bCut = kTRUE;
2702  }
2703 
2704  if(!bSoftITSPass){
2705  if(isDesiredCandidate) {
2706  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(11);
2707  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(11);
2708  bCut = kTRUE;
2709  }
2710 
2711  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) bCut = kTRUE;
2712 
2713  if(bCut) {
2714  if(isDesiredCandidate) {
2715  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(0);
2716  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(0);
2717  return kFALSE;
2718  }
2719 
2720  //we fill histograms with track information of the tracks that pass the cuts
2721  histType = 2;
2722  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2723  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2724  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2725  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2726 
2727  for (Int_t j = 0; j < 10; ++j)
2728  {
2729  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2730 
2731  }
2732  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2733 
2734  if(isDesiredCandidate)
2735  {
2736  histType = 3;
2737  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2738  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2739  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2740  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2741 
2742  for (Int_t j = 0; j < 10; ++j)
2743  {
2744  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2745 
2746  }
2747  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2748  }
2749 
2750  return kTRUE;
2751 }
2752 //-------------------------------------------------------------------------------------
2753 void AliAnalysisTaskSEB0toDStarPi::DStarPionSelection(AliAODEvent* aodEvent, AliAODVertex *primaryVertex, Double_t bz, TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, AliAODMCHeader * header){
2754 
2755  //we keep track of the number of particles we could use and how many we actually use after cuts
2756  Int_t numberofparticles = 0;
2757  Int_t numberofparticlesused = 0;
2758  Int_t iClonesArray = 0;
2759 
2760  TString fillthis = "";
2761 
2762  //we loop over all tracks in the event
2763  for (Int_t i=0; i<aodEvent->GetNumberOfTracks(); i++){
2764  AliAODTrack* aodTrack = dynamic_cast<AliAODTrack*>(aodEvent->GetTrack(i));
2765  if(!aodTrack) AliFatal("Not a standard AOD");
2766 
2767  //quick quality cut
2768  if(aodTrack->GetITSNcls() < 1) continue;
2769  if(aodTrack->GetTPCNcls() < 1) continue;
2770  if(aodTrack->GetStatus()&AliESDtrack::kITSpureSA) continue;
2771  if(!(aodTrack->GetStatus()&AliESDtrack::kITSin)) continue;
2772  if(aodTrack->GetID() < 0) continue;
2773  Double_t covtest[21];
2774  if(!aodTrack->GetCovarianceXYZPxPyPz(covtest)) continue;
2775 
2776  Int_t mcLabelParticle = -1;
2777  Int_t pdgParticle = -1;
2778  mcLabelParticle = aodTrack->GetLabel();
2779 
2780  numberofparticles++;
2781 
2782  // we fill histograms with information of the track
2783  Double_t pt_track = aodTrack->Pt();
2784  Double_t momentum_track = aodTrack->P();
2785  Int_t numberOfITS = aodTrack->GetITSNcls();
2786  Int_t numberOfTPC = aodTrack->GetTPCNcls();
2787  Double_t nSigmaTPC = 0;
2788  Double_t nSigmaTOF = 0;
2789  Int_t pionPIDnumber = 2;
2790  Int_t kaonPIDnumber = 3;
2791  Int_t TPCok = 0;
2792  Int_t TOFok = 0;
2793 
2794  AliAODPidHF* trackPIDHF = (AliAODPidHF*)fCuts->GetPidHF();
2795  TPCok = trackPIDHF->GetnSigmaTPC(aodTrack, pionPIDnumber, nSigmaTPC);
2796  TOFok = trackPIDHF->GetnSigmaTOF(aodTrack, pionPIDnumber, nSigmaTOF);
2797 
2798  AliExternalTrackParam particleTrack;
2799  particleTrack.CopyFromVTrack(aodTrack);
2800  Double_t d0[2],covd0[3];
2801  particleTrack.PropagateToDCA(primaryVertex,bz,100.,d0,covd0);
2802 
2803  //we check if the particle is a signal track
2804  Bool_t isDesiredCandidate = kFALSE;
2805  if(fUseMCInfo){
2806  TMatrix &particleMatrix = *B0toDStarPiLabelMatrix;
2807  for (Int_t k = 0; k < B0toDStarPiLabelMatrix->GetNrows(); ++k){
2808  if(mcLabelParticle == (Int_t)particleMatrix(k,1)){
2809  isDesiredCandidate = kTRUE;
2810  break;
2811  }
2812  }
2813  }
2814 
2815  if(IsTrackInjected(aodTrack,header,mcTrackArray) && !isDesiredCandidate && fQuickSignalAnalysis == 2) continue;
2816 
2817  Int_t daughterType = 2;
2818 
2819 
2820  Int_t histType = 0;
2821  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2822  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2823  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2824  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2825 
2826  for (Int_t j = 0; j < 10; ++j)
2827  {
2828  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2829 
2830  }
2831 
2832  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
2833  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
2834  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
2835  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2836 
2837  if(isDesiredCandidate)
2838  {
2839  histType = 1;
2840  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2841  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2842  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2843  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2844 
2845  for (Int_t j = 0; j < 10; ++j)
2846  {
2847  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2848 
2849  }
2850 
2851  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
2852  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
2853  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
2854  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2855  }
2856 
2857  //we apply a number of cuts on the particle
2858  Bool_t bCut = kFALSE;
2859 
2860  //we apply a PID cut for a pion
2861  if(!(fCuts->SelectPID(aodTrack,pionPIDnumber))){
2862  if(isDesiredCandidate) {
2863  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(2);
2864  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(2);
2865  bCut = kTRUE;
2866  }
2867 
2868  if(aodTrack->GetITSNcls() < fCuts->GetMinITSNclsDStarPion()){
2869  if(isDesiredCandidate) {
2870  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(3);
2871  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(3);
2872  bCut = kTRUE;
2873  }
2874 
2875  if(aodTrack->GetTPCNcls() < fCuts->GetMinTPCNclsDStarPion()){
2876  if(isDesiredCandidate) {
2877  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(4);
2878  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(4);
2879  bCut = kTRUE;
2880  }
2881 
2882  if(fCuts->UseITSRefitDStarPion()==kTRUE){
2883  if(!(aodTrack->GetStatus()&AliESDtrack::kITSrefit)) {
2884  if(isDesiredCandidate) {
2885  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(5);
2886  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(5);
2887  bCut = kTRUE;
2888  }
2889  }
2890 
2891  if(fCuts->UseTPCRefitDStarPion()==kTRUE){
2892  if((!(aodTrack->GetStatus()&AliESDtrack::kTPCrefit))) {
2893  if(isDesiredCandidate) {
2894  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(6);
2895  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(6);
2896  bCut = kTRUE;
2897  }
2898  }
2899 
2900  if(fCuts->UseFilterBitDStarPion()==kTRUE){
2901  if(!(aodTrack->TestFilterMask(BIT(fCuts->GetFilterBitDStarPion())))) {
2902  if(isDesiredCandidate) {
2903  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(7);
2904  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(7);
2905  bCut = kTRUE;
2906  }
2907  }
2908 
2909  if(aodTrack->Pt() < fCuts->GetMinPtDStarPion()){
2910  if(isDesiredCandidate) {
2911  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(8);
2912  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(8);
2913  bCut = kTRUE;
2914  }
2915 
2916  if(aodTrack->Pt() > fCuts->GetMaxPtDStarPion()){
2917  if(isDesiredCandidate) {
2918  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(13);
2919  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(13);
2920  bCut = kTRUE;
2921  }
2922 
2923 
2924  if(TMath::Abs(d0[0]) < fCuts->GetMind0DStarPion()){
2925  if(isDesiredCandidate) {
2926  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(12);
2927  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(12);
2928  bCut = kTRUE;
2929  }
2930 
2931 
2932  if(TMath::Abs(aodTrack->Eta()) > fCuts->GetMaxAbsEtaDStarPion()){
2933  if(isDesiredCandidate) {
2934  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(9);
2935  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(9);
2936  bCut = kTRUE;
2937  }
2938 
2939  Bool_t bHardSelectionArrayITS[7] = {kFALSE};
2940  fCuts->GetHardSelectionArrayITSDStarPion(bHardSelectionArrayITS);
2941  Bool_t bSoftSelectionArrayITS[7] = {kFALSE};
2942  fCuts->GetSoftSelectionArrayITSDStarPion(bSoftSelectionArrayITS);
2943 
2944  Bool_t bHardITSPass = kTRUE;
2945  for (Int_t j = 0; j < 7; ++j)
2946  {
2947  if(bHardSelectionArrayITS[j])
2948  {
2949  if(!aodTrack->HasPointOnITSLayer(j)) bHardITSPass = kFALSE;
2950  }
2951  }
2952 
2953  Int_t nCounterSoftSelection = 0;
2954  Bool_t bSoftITSPass = kTRUE;
2955  for (Int_t j = 0; j < 7; ++j)
2956  {
2957  if(bSoftSelectionArrayITS[j])
2958  {
2959  if(aodTrack->HasPointOnITSLayer(j)) nCounterSoftSelection++;
2960  }
2961  }
2962  if(nCounterSoftSelection < fCuts->GetNSoftITSCutDStarPion()) bSoftITSPass = kFALSE;
2963 
2964  if(!bHardITSPass){
2965  if(isDesiredCandidate) {
2966  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(10);
2967  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(10);
2968  bCut = kTRUE;
2969  }
2970 
2971  if(!bSoftITSPass){
2972  if(isDesiredCandidate) {
2973  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(11);
2974  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(11);
2975  bCut = kTRUE;
2976  }
2977 
2978  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) bCut = kTRUE;
2979 
2980  if(bCut) {
2981  if(isDesiredCandidate) {
2982  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(0);
2983  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(0);
2984  continue;
2985  }
2986 
2987  //we fill histograms with track information of the tracks that pass the cuts
2988  histType = 2;
2989  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2990  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2991  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2992  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2993 
2994  for (Int_t j = 0; j < 10; ++j)
2995  {
2996  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2997 
2998  }
2999 
3000  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3001  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3002  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3003  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3004 
3005  if(isDesiredCandidate)
3006  {
3007  histType = 3;
3008  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3009  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3010  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3011  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3012 
3013  for (Int_t j = 0; j < 10; ++j)
3014  {
3015  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3016 
3017  }
3018 
3019  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3020  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3021  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3022  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3023  }
3024 
3025  fDStarPionTracks->push_back(i);
3026  numberofparticlesused++;
3027  }
3028 
3029  ((TH1F*)fDaughterHistogramArray[2][0][12])->Fill(numberofparticles);
3030  ((TH1F*)fDaughterHistogramArray[2][1][12])->Fill(numberofparticlesused);
3031  return;
3032 }
3033 //-------------------------------------------------------------------------------------
3034 void AliAnalysisTaskSEB0toDStarPi::B0PionSelection(AliAODEvent* aodEvent, AliAODVertex *primaryVertex, Double_t bz, TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, AliAODMCHeader * header){
3035 
3036  //we keep track of the number of particles we could use and how many we actually use after cuts
3037  Int_t numberofparticles = 0;
3038  Int_t numberofparticlesused = 0;
3039  Int_t iClonesArray = 0;
3040 
3041  TString fillthis = "";
3042 
3043  //we loop over all tracks in the event
3044  for (Int_t i=0; i<aodEvent->GetNumberOfTracks(); i++){
3045  AliAODTrack* aodTrack = dynamic_cast<AliAODTrack*>(aodEvent->GetTrack(i));
3046  if(!aodTrack) AliFatal("Not a standard AOD");
3047 
3048  //quick quality cut
3049  if(aodTrack->GetITSNcls() < 1) continue;
3050  if(aodTrack->GetTPCNcls() < 1) continue;
3051  if(aodTrack->GetStatus()&AliESDtrack::kITSpureSA) continue;
3052  if(!(aodTrack->GetStatus()&AliESDtrack::kITSin)) continue;
3053  if(aodTrack->GetID() < 0) continue;
3054  Double_t covtest[21];
3055  if(!aodTrack->GetCovarianceXYZPxPyPz(covtest)) continue;
3056 
3057 
3058  Int_t mcLabelParticle = -1;
3059  Int_t pdgParticle = -1;
3060  mcLabelParticle = aodTrack->GetLabel();
3061 
3062  numberofparticles++;
3063 
3064  // we fill histograms with information of the track
3065  Double_t pt_track = aodTrack->Pt();
3066  Double_t momentum_track = aodTrack->P();
3067  Int_t numberOfITS = aodTrack->GetITSNcls();
3068  Int_t numberOfTPC = aodTrack->GetTPCNcls();
3069  Double_t nSigmaTPC = 0;
3070  Double_t nSigmaTOF = 0;
3071  Int_t pionPIDnumber = 2;
3072  Int_t kaonPIDnumber = 3;
3073  Int_t TPCok = 0;
3074  Int_t TOFok = 0;
3075 
3076  AliAODPidHF* trackPIDHF = (AliAODPidHF*)fCuts->GetPidHF();
3077  TPCok = trackPIDHF->GetnSigmaTPC(aodTrack, pionPIDnumber, nSigmaTPC);
3078  TOFok = trackPIDHF->GetnSigmaTOF(aodTrack, pionPIDnumber, nSigmaTOF);
3079 
3080  AliExternalTrackParam particleTrack;
3081  particleTrack.CopyFromVTrack(aodTrack);
3082  Double_t d0[2],covd0[3];
3083  particleTrack.PropagateToDCA(primaryVertex,bz,100.,d0,covd0);
3084 
3085 
3086  //we check if the particle is a signal track
3087  Bool_t isDesiredCandidate = kFALSE;
3088  if(fUseMCInfo){
3089  TMatrix &particleMatrix = *B0toDStarPiLabelMatrix;
3090  for (Int_t k = 0; k < B0toDStarPiLabelMatrix->GetNrows(); ++k){
3091  if(mcLabelParticle == (Int_t)particleMatrix(k,0)){
3092  isDesiredCandidate = kTRUE;
3093  break;
3094  }
3095  }
3096  }
3097 
3098  if(IsTrackInjected(aodTrack,header,mcTrackArray) && !isDesiredCandidate && fQuickSignalAnalysis == 2) continue;
3099 
3100  Int_t daughterType = 3;
3101 
3102  Int_t histType = 0;
3103  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3104  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3105  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3106  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3107 
3108  for (Int_t j = 0; j < 10; ++j)
3109  {
3110  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3111 
3112  }
3113 
3114  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3115  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3116  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3117  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3118 
3119  if(isDesiredCandidate)
3120  {
3121  histType = 1;
3122  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3123  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3124  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3125  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3126 
3127  for (Int_t j = 0; j < 10; ++j)
3128  {
3129  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3130 
3131  }
3132 
3133  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3134  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3135  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3136  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3137  }
3138 
3139  //we apply a number of cuts on the particle
3140  Bool_t bCut = kFALSE;
3141 
3142  //we apply a PID cut, 2 is used to indicate we look for a pion
3143  if(!(fCuts->SelectPID(aodTrack,2))){
3144  if(isDesiredCandidate) {
3145  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(2);
3146  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(2);
3147  bCut = kTRUE;
3148  }
3149 
3150  if(aodTrack->GetITSNcls() < fCuts->GetMinITSNclsB0Pion()){
3151  if(isDesiredCandidate) {
3152  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(3);
3153  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(3);
3154  bCut = kTRUE;
3155  }
3156 
3157  if(aodTrack->GetTPCNcls() < fCuts->GetMinTPCNclsB0Pion()){
3158  if(isDesiredCandidate) {
3159  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(4);
3160  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(4);
3161  bCut = kTRUE;
3162  }
3163 
3164  if(fCuts->UseITSRefitB0Pion()==kTRUE){
3165  if(!(aodTrack->GetStatus()&AliESDtrack::kITSrefit)) {
3166  if(isDesiredCandidate) {
3167  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(5);
3168  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(5);
3169  bCut = kTRUE;
3170  }
3171  }
3172 
3173  if(fCuts->UseTPCRefitB0Pion()==kTRUE){
3174  if((!(aodTrack->GetStatus()&AliESDtrack::kTPCrefit))) {
3175  if(isDesiredCandidate) {
3176  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(6);
3177  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(6);
3178  bCut = kTRUE;
3179  }
3180  }
3181 
3182  if(fCuts->UseFilterBitB0Pion()==kTRUE){
3183  if(!(aodTrack->TestFilterMask(BIT(fCuts->GetFilterBitB0Pion())))) {
3184  if(isDesiredCandidate) {
3185  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(7);
3186  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(7);
3187  bCut = kTRUE;
3188  }
3189  }
3190 
3191 
3192  if(aodTrack->Pt() < fCuts->GetMinPtB0Pion()){
3193  if(isDesiredCandidate) {
3194  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(8);
3195  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(8);
3196  bCut = kTRUE;
3197  }
3198 
3199 
3200  if(TMath::Abs(d0[0]) < fCuts->GetMind0B0Pion()){
3201  if(isDesiredCandidate) {
3202  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(12);
3203  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(12);
3204  bCut = kTRUE;
3205  }
3206 
3207  if(TMath::Abs(aodTrack->Eta()) > fCuts->GetMaxAbsEtaB0Pion()){
3208  if(isDesiredCandidate) {
3209  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(9);
3210  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(9);
3211  bCut = kTRUE;
3212  }
3213 
3214  Bool_t bHardSelectionArrayITS[7] = {kFALSE};
3215  fCuts->GetHardSelectionArrayITSB0Pion(bHardSelectionArrayITS);
3216  Bool_t bSoftSelectionArrayITS[7] = {kFALSE};
3217  fCuts->GetSoftSelectionArrayITSB0Pion(bSoftSelectionArrayITS);
3218 
3219  Bool_t bHardITSPass = kTRUE;
3220  for (Int_t j = 0; j < 7; ++j)
3221  {
3222  if(bHardSelectionArrayITS[j])
3223  {
3224  if(!aodTrack->HasPointOnITSLayer(j)) bHardITSPass = kFALSE;
3225  }
3226  }
3227 
3228  Int_t nCounterSoftSelection = 0;
3229  Bool_t bSoftITSPass = kTRUE;
3230  for (Int_t j = 0; j < 7; ++j)
3231  {
3232  if(bSoftSelectionArrayITS[j])
3233  {
3234  if(aodTrack->HasPointOnITSLayer(j)) nCounterSoftSelection++;
3235  }
3236  }
3237  if(nCounterSoftSelection < fCuts->GetNSoftITSCutB0Pion()) bSoftITSPass = kFALSE;
3238 
3239  if(!bHardITSPass){
3240  if(isDesiredCandidate) {
3241  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(10);
3242  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(10);
3243  bCut = kTRUE;
3244  }
3245 
3246  if(!bSoftITSPass){
3247  if(isDesiredCandidate) {
3248  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(11);
3249  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(11);
3250  bCut = kTRUE;
3251  }
3252 
3253 
3254  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) bCut = kTRUE;
3255 
3256  if(bCut) {
3257  if(isDesiredCandidate) {
3258  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(0);
3259  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(0);
3260  continue;
3261  }
3262 
3263  //we fill histograms with track information of the tracks that pass the cuts
3264  histType = 2;
3265  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3266  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3267  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3268  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3269 
3270  for (Int_t j = 0; j < 10; ++j)
3271  {
3272  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3273 
3274  }
3275 
3276  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3277  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3278  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3279  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3280 
3281  if(isDesiredCandidate)
3282  {
3283  histType = 3;
3284  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3285  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3286  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3287  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3288 
3289  for (Int_t j = 0; j < 10; ++j)
3290  {
3291  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3292 
3293  }
3294 
3295  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3296  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3297  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3298  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3299  }
3300 
3301 
3302  fB0PionTracks->push_back(i);
3303  numberofparticlesused++;
3304  }
3305 
3306  ((TH1F*)fDaughterHistogramArray[3][0][12])->Fill(numberofparticles);
3307  ((TH1F*)fDaughterHistogramArray[3][1][12])->Fill(numberofparticlesused);
3308  return;
3309 }
3310 //-------------------------------------------------------------------------------------
3311 void AliAnalysisTaskSEB0toDStarPi::D0Selection(AliAODEvent* aodEvent, AliAODVertex *primaryVertex, Double_t bz,TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, TClonesArray * D0TracksFromFriendFile, AliAODMCHeader * header){
3312 
3313  TString fillthis = "";
3314 
3316 
3317  //next we loop over all the D0 candidates
3318  for (Int_t j = 0; j < D0TracksFromFriendFile->GetEntriesFast(); j++)
3319  {
3320 
3321  //we get the track of the D0
3322  AliAODRecoDecayHF2Prong * trackD0 = (AliAODRecoDecayHF2Prong*)(D0TracksFromFriendFile->At(j));
3323  if(!trackD0) {std::cout << "found none" << std::endl; continue;}
3324  if(trackD0 == nullptr) {std::cout << "found nullptr" << std::endl; continue;}
3325 
3326  if(!(vHF->FillRecoCand(aodEvent,trackD0))) //Fill the data members of the candidate only if they are empty.
3327  {
3328  fCEvents->Fill(12); //monitor how often this fails
3329  continue;
3330  }
3331 
3332  AliAODTrack * trackFirstDaughter = (AliAODTrack*)(trackD0->GetDaughter(0));
3333  AliAODTrack * trackSecondDaughter = (AliAODTrack*)(trackD0->GetDaughter(1));
3334  if(!D0FirstDaughterSelection(trackFirstDaughter, primaryVertex, bz, mcTrackArray, B0toDStarPiLabelMatrix,header)) continue;
3335  if(!D0SecondDaughterSelection(trackSecondDaughter, primaryVertex, bz, mcTrackArray, B0toDStarPiLabelMatrix,header)) continue;
3336 
3337 
3338  AliAODVertex *vertexMother = (AliAODVertex*)trackD0->GetSecondaryVtx();
3339 
3340  //we save the pdgcode of the used particle and its mother and check if it is a desired candidate
3341  Int_t pdgCodeMother = -1;
3342  Float_t pdgCodeGrandMother = -1;
3343  Bool_t isDesiredCandidate = kFALSE;
3344  Int_t motherType, histType;
3345  motherType = 0;
3346  Int_t mcLabelD0 = -1;
3347 
3348  if(fUseMCInfo)
3349  {
3350  mcLabelD0 = MatchCandidateToMonteCarlo(421,trackD0,mcTrackArray,B0toDStarPiLabelMatrix);
3351 
3352  if(mcLabelD0 >= 0)
3353  {
3354  isDesiredCandidate = kTRUE;
3355 
3356  Int_t mcLabelFirstTrack = -1;
3357  mcLabelFirstTrack = trackFirstDaughter->GetLabel();
3358 
3359  if(mcLabelFirstTrack >= 0)
3360  {
3361  AliAODMCParticle *mcParticleFirstTrack = (AliAODMCParticle*)mcTrackArray->At(mcLabelFirstTrack);
3362  AliAODMCParticle *mcMotherParticle = (AliAODMCParticle*)mcTrackArray->At(mcLabelD0);
3363 
3364  if(mcParticleFirstTrack && mcMotherParticle)
3365  {
3366  pdgCodeMother = mcMotherParticle->GetPdgCode();
3367 
3368  Double_t vertex_distance = TMath::Sqrt((vertexMother->GetX() - mcParticleFirstTrack->Xv())*(vertexMother->GetX() - mcParticleFirstTrack->Xv()) + (vertexMother->GetY() - mcParticleFirstTrack->Yv())*(vertexMother->GetY() - mcParticleFirstTrack->Yv()) + (vertexMother->GetZ() - mcParticleFirstTrack->Zv())*(vertexMother->GetZ() - mcParticleFirstTrack->Zv()));
3369  ((TH1F*)fMotherHistogramArrayExtra[motherType][4])->Fill(vertex_distance);
3370 
3371  Double_t momentum_resolution = TMath::Sqrt((trackD0->Px() - mcMotherParticle->Px())*(trackD0->Px() - mcMotherParticle->Px()) + (trackD0->Py() - mcMotherParticle->Py())*(trackD0->Py() - mcMotherParticle->Py()) + (trackD0->Pz() - mcMotherParticle->Pz())*(trackD0->Pz() - mcMotherParticle->Pz()));
3372  ((TH1F*)fMotherHistogramArrayExtra[motherType][6])->Fill(momentum_resolution);
3373  }
3374  }
3375  }
3376  }
3377 
3378  // We fill the histograms
3379  histType = 0;
3380  FillD0Histograms(trackD0, primaryVertex, bz, motherType, histType);
3381  if(isDesiredCandidate && fUseMCInfo){
3382  histType = 1;
3383  FillD0Histograms(trackD0, primaryVertex, bz, motherType, histType,pdgCodeMother);
3384  }
3385 
3386  // Here we apply cuts on the particle
3387  Bool_t cutMother = kFALSE;
3388 
3389  Bool_t bCutArray[29] = {0};
3390  Int_t cutReturnValue = fCuts->IsD0forD0ptbinSelected(trackD0, 0, aodEvent, bCutArray);
3391  if(cutReturnValue == -1) cutMother = kTRUE;
3392  if(cutReturnValue == 0) cutMother = kTRUE;
3393 
3394 
3395  if(fGetCutInfo == kTRUE)
3396  {
3397  for (Int_t k = 0; k < 29; ++k)
3398  {
3399  if (bCutArray[k] == kTRUE){
3400  if(isDesiredCandidate){
3401  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(k+1);
3402  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(k+1);
3403  cutMother = kTRUE;
3404  }
3405  }
3406  }
3407 
3408 
3409  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) cutMother = kTRUE;
3410 
3411  if(cutMother){
3412  if(isDesiredCandidate){
3413  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(0);
3414  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(0);
3415  // delete vertexMother; vertexMother = nullptr;
3416  // delete trackD0; trackD0 = nullptr;
3417  continue;
3418  }
3419 
3420  // We fill the cut histograms
3421  histType = 2;
3422  FillD0Histograms(trackD0, primaryVertex, bz, motherType, histType);
3423  if(isDesiredCandidate && fUseMCInfo){
3424  histType = 3;
3425  FillD0Histograms(trackD0, primaryVertex, bz, motherType, histType,pdgCodeMother);
3426  }
3427 
3428  //we save the location of the D0 candidate
3429  fD0Tracks->push_back(j);
3430  }
3431 
3432  delete vHF; vHF = nullptr;
3433  return;
3434 }
3435 //-------------------------------------------------------------------------------------
3436 void AliAnalysisTaskSEB0toDStarPi::DStarAndB0Selection(AliAODEvent* aodEvent, AliAODVertex *primaryVertex, Double_t bz,TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, TClonesArray * D0TracksFromFriendFile, AliAODMCHeader * header){
3437 
3438  TString fillthis = "";
3439 
3440  //we loop over all the DStar pion candidates
3441  for (Int_t i = 0; i < (Int_t)fDStarPionTracks->size(); i++)
3442  {
3443  //Save current Object count
3444  Int_t ObjectNumber = TProcessID::GetObjectCount();
3445 
3446  //we get the track of the DStar pion
3447  AliAODTrack * trackFirstDaughter = (AliAODTrack*)(aodEvent->GetTrack(fDStarPionTracks->at(i)));
3448  if(!trackFirstDaughter) continue;
3449 
3450  Int_t pdgD0 = 421;
3451  if(trackFirstDaughter->Charge() == -1) pdgD0 = -421;
3452 
3453  //next we loop over all the D0 candidates
3454  for (Int_t j = 0; j < (Int_t)fD0Tracks->size(); j++)
3455  {
3456  //we get the track of the D0
3457  AliAODRecoDecayHF2Prong * trackSecondDaughter = (AliAODRecoDecayHF2Prong*)(D0TracksFromFriendFile->At(fD0Tracks->at(j)));
3458  if(!trackSecondDaughter) {std::cout << "found none" << std::endl; continue;}
3459  if(trackSecondDaughter == nullptr) {std::cout << "found nullptr" << std::endl; continue;}
3460 
3461  //we check if the IDs of the tracks are different
3462  if(trackFirstDaughter->GetID() == trackSecondDaughter->GetProngID(0) || trackFirstDaughter->GetID() == trackSecondDaughter->GetProngID(1)) continue;
3463 
3464  //we check if the charges of the tracks are correct
3465  if(trackFirstDaughter->Charge() == trackSecondDaughter->Charge() || TMath::Abs(trackFirstDaughter->Charge() + trackSecondDaughter->Charge()) != 1) continue;
3466 
3467 
3468  //we check if the pions have the same charge
3469  if(trackFirstDaughter->Charge() == -1 && ((AliAODTrack*)trackSecondDaughter->GetDaughter(1))->Charge() != -1) continue;
3470  if(trackFirstDaughter->Charge() == 1 && ((AliAODTrack*)trackSecondDaughter->GetDaughter(0))->Charge() != 1) continue;
3471 
3472  //we apply a PID cut on the D0 daughters
3473 
3474  if(trackFirstDaughter->Charge()==1)
3475  {
3476  if(!(fCuts->SelectPID(((AliAODTrack*)trackSecondDaughter->GetDaughter(0)),2))) continue;
3477  if(!(fCuts->SelectPID(((AliAODTrack*)trackSecondDaughter->GetDaughter(1)),3))) continue;
3478  } else if (trackFirstDaughter->Charge()==-1){
3479  if(!(fCuts->SelectPID(((AliAODTrack*)trackSecondDaughter->GetDaughter(0)),3))) continue;
3480  if(!(fCuts->SelectPID(((AliAODTrack*)trackSecondDaughter->GetDaughter(1)),2))) continue;
3481  }
3482 
3483  //location DStar pion rotation around PV
3484 
3485  //we make an estimate of the DStar vertex and make an initial broad invariant mass window cut
3486  AliExternalTrackParam DStarPionTrackParam;
3487  DStarPionTrackParam.CopyFromVTrack(trackFirstDaughter);
3488  AliExternalTrackParam D0TrackParam;
3489  D0TrackParam.CopyFromVTrack(trackSecondDaughter);
3490 
3491  // we calculate the vertex of the mother candidate
3492  TObjArray tracksTestVertex;
3493 
3494  tracksTestVertex.Add(&DStarPionTrackParam);
3495  tracksTestVertex.Add(&D0TrackParam);
3496 
3497  Double_t dispersionTest = 0;
3498  AliAODVertex *testVertex = RecalculateVertex(primaryVertex,&tracksTestVertex,bz,dispersionTest);
3499  if(!testVertex) {delete testVertex; testVertex = nullptr; continue;}
3500 
3501  Double_t d0z0Test[2],covd0z0Test[3];
3502 
3503  //DStar creation with the new vertex
3504  DStarPionTrackParam.PropagateToDCA(testVertex,bz,100.,d0z0Test,covd0z0Test);
3505  D0TrackParam.PropagateToDCA(testVertex,bz,100.,d0z0Test,covd0z0Test);
3506  delete testVertex; testVertex = nullptr;
3507 
3508  Double_t pdgMassPion = TDatabasePDG::Instance()->GetParticle(211)->Mass();
3509  Double_t pdgMassD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
3510  Double_t pdgMassDStar = TDatabasePDG::Instance()->GetParticle(413)->Mass();
3511 
3512  Double_t energyDStarPion = pdgMassPion*pdgMassPion + DStarPionTrackParam.Px()*DStarPionTrackParam.Px()+DStarPionTrackParam.Py()*DStarPionTrackParam.Py()+DStarPionTrackParam.Pz()*DStarPionTrackParam.Pz();
3513  Double_t energyD0 = pdgMassD0*pdgMassD0 + D0TrackParam.Px()*D0TrackParam.Px()+D0TrackParam.Py()*D0TrackParam.Py()+D0TrackParam.Pz()*D0TrackParam.Pz();
3514  Double_t energySum = TMath::Sqrt(energyDStarPion) + TMath::Sqrt(energyD0);
3515 
3516  Double_t pxDStarTest = DStarPionTrackParam.Px() + D0TrackParam.Px();
3517  Double_t pyDStarTest = DStarPionTrackParam.Py() + D0TrackParam.Py();
3518  Double_t pzDStarTest = DStarPionTrackParam.Pz() + D0TrackParam.Pz();
3519  Double_t p2DStarTest = pxDStarTest*pxDStarTest + pyDStarTest*pyDStarTest + pzDStarTest*pzDStarTest;
3520 
3521  Double_t invMassDStarTest = TMath::Sqrt(energySum*energySum-p2DStarTest);
3522 
3523  //we use a mass window twice the size of the final cut. We cut here to speed up the code.
3524  Int_t nCutIndex = 0;
3525  Bool_t bCutArrayTemp[29];
3526  Double_t cutVariableValue = TMath::Abs(invMassDStarTest-pdgMassDStar)/2.0;
3527  Bool_t bPassedCut = fCuts->ApplyCutOnVariableDStarforDStarptbin(nCutIndex,0,cutVariableValue,bCutArrayTemp);
3528  if(!bPassedCut) continue;
3529 
3530  // Apply an impact product cut. We cut here to speed up the code.
3531  AliExternalTrackParam firstTrack;
3532  firstTrack.CopyFromVTrack(trackFirstDaughter);
3533  AliExternalTrackParam secondTrack;
3534  secondTrack.CopyFromVTrack(trackSecondDaughter);
3535 
3536  Double_t d0z0DStar[2],covd0z0DStar[3],d0DStar[2],d0errDStar[2];
3537 
3538  firstTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0DStar,covd0z0DStar);
3539  d0DStar[0] = d0z0DStar[0];
3540  d0errDStar[0] = TMath::Sqrt(covd0z0DStar[0]);
3541  secondTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0DStar,covd0z0DStar);
3542  d0DStar[1] = d0z0DStar[0];
3543  d0errDStar[1] = TMath::Sqrt(covd0z0DStar[0]);
3544 
3545  nCutIndex = 10;
3546  cutVariableValue = d0DStar[0] * d0DStar[1];
3547  bPassedCut = fCuts->ApplyCutOnVariableDStarforDStarptbin(nCutIndex,0,cutVariableValue,bCutArrayTemp);
3548  if(!bPassedCut) continue;
3549 
3550  //we loop over all the B0 pion candidates
3551  for (Int_t k = 0; k < (Int_t)fB0PionTracks->size(); k++)
3552  {
3553  //we get the track of the first daughter
3554  AliAODTrack * trackB0Pion = dynamic_cast<AliAODTrack*>(aodEvent->GetTrack(fB0PionTracks->at(k)));
3555  if(!trackB0Pion) continue;
3556 
3557  //we check if the IDs of the tracks are different
3558  AliAODTrack* twoProngdaughter0 = (AliAODTrack*)trackSecondDaughter->GetDaughter(0);
3559  AliAODTrack* twoProngdaughter1 = (AliAODTrack*)trackSecondDaughter->GetDaughter(1);
3560  UShort_t idProng0 = twoProngdaughter0->GetID();
3561  UShort_t idProng1 = twoProngdaughter1->GetID();
3562 
3563  if(trackB0Pion->GetID() == trackFirstDaughter->GetID() || trackB0Pion->GetID() == idProng0 || trackB0Pion->GetID() == idProng1) continue;
3564 
3565 
3566 
3567  //we check if the charges of the tracks are correct // later change this for like sign analysis.
3568  Bool_t bSameSign = kFALSE;
3569  if(trackB0Pion->Charge() == (trackSecondDaughter->Charge() + trackFirstDaughter->Charge()) && trackB0Pion->Charge() + (trackSecondDaughter->Charge() + trackFirstDaughter->Charge()) != 0) bSameSign = kTRUE;
3570 
3571  //location B0 pion rotation around PV
3572  for (Int_t iRot = 0; iRot < fNumberOfRotations + 1; ++iRot)
3573  {
3574  //we create a copy of the track that we will rotate
3575  AliAODTrack * trackB0PionRotated = new AliAODTrack(*trackB0Pion);
3576 
3577  //for iRot == 0, we use the original unrotated track. For iRot > 0 we rotate the track and set the label to -1
3578  if (iRot != 0)
3579  {
3580  //should still check if track is already at PV
3581  Double_t dPhiRotated = trackB0PionRotated->Phi() + TMath::Pi() - (TMath::Pi() * fDegreePerRotation * fNumberOfRotations / (180.0 * 2.0)) + (TMath::Pi() * fDegreePerRotation * iRot / 180.0);
3582  trackB0PionRotated->SetPhi(dPhiRotated);
3583  }
3584 
3585 
3587  //
3588  // DStar Reconstruction
3589  //
3591 
3592  //we use the DStar pion, B0 pion, and D0 tracks to reconstruct the vertex for the B0 and DStar decay
3593  AliExternalTrackParam thirdTrack;
3594  thirdTrack.CopyFromVTrack(trackB0PionRotated);
3595 
3596  // we calculate the vertex
3597  TObjArray daughterTracksWithRecalculation;
3598 
3599  daughterTracksWithRecalculation.Add(&firstTrack);
3600  daughterTracksWithRecalculation.Add(&secondTrack);
3601  daughterTracksWithRecalculation.Add(&thirdTrack);
3602 
3603  Double_t dispersion = 0;
3604  AliAODVertex *vertexMother = RecalculateVertex(primaryVertex,&daughterTracksWithRecalculation,bz,dispersion);
3605  if(!vertexMother) {
3606  delete vertexMother; vertexMother = nullptr;
3607  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3608  continue;}
3609 
3610 
3611  if(vertexMother->GetNDaughters()!=2)
3612  {
3613  std::cout << "bad reconstruction - number of daughters for vertex is incorrect" << std::endl;
3614  delete vertexMother; vertexMother = nullptr;
3615  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3616  continue;
3617  }
3618 
3619  Double_t xdummyDStar=0.,ydummyDStar=0.,eDStar[2];
3620  // Double_t d0z0DStar[2],covd0z0DStar[3],d0DStar[2],d0errDStar[2];
3621 
3622  //DStar creation with the new vertex
3623  firstTrack.PropagateToDCA(vertexMother,bz,100.,d0z0DStar,covd0z0DStar);
3624  secondTrack.PropagateToDCA(vertexMother,bz,100.,d0z0DStar,covd0z0DStar);
3625 
3626  Double_t pxDStar[2],pyDStar[2],pzDStar[2];
3627  pxDStar[0] = firstTrack.Px();
3628  pyDStar[0] = firstTrack.Py();
3629  pzDStar[0] = firstTrack.Pz();
3630  pxDStar[1] = secondTrack.Px();
3631  pyDStar[1] = secondTrack.Py();
3632  pzDStar[1] = secondTrack.Pz();
3633 
3634  Double_t xyz_track1[3];
3635  xyz_track1[0] = firstTrack.GetX();
3636  firstTrack.GetYAt(xyz_track1[0],bz,xyz_track1[1]);
3637  firstTrack.GetZAt(xyz_track1[0],bz,xyz_track1[2]);
3638 
3639  Double_t xyz_track2[3];
3640  xyz_track2[0] = secondTrack.GetX();
3641  secondTrack.GetYAt(xyz_track2[0],bz,xyz_track2[1]);
3642  secondTrack.GetZAt(xyz_track2[0],bz,xyz_track2[2]);
3643 
3644  Double_t distanceAtVertex = TMath::Sqrt((xyz_track1[0]-xyz_track2[0])*(xyz_track1[0]-xyz_track2[0]) + (xyz_track1[1]-xyz_track2[1])*(xyz_track1[1]-xyz_track2[1]) + (xyz_track1[2]-xyz_track2[2])*(xyz_track1[2]-xyz_track2[2]));
3645 
3646  // firstTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0DStar,covd0z0DStar);
3647  // d0DStar[0] = d0z0DStar[0];
3648  // d0errDStar[0] = TMath::Sqrt(covd0z0DStar[0]);
3649  // secondTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0DStar,covd0z0DStar);
3650  // d0DStar[1] = d0z0DStar[0];
3651  // d0errDStar[1] = TMath::Sqrt(covd0z0DStar[0]);
3652 
3653  //Apply cuts on DCA
3654  Double_t dcaDStarPionD0 = secondTrack.GetDCA(&firstTrack,bz,xdummyDStar,ydummyDStar);
3655  Double_t dcaDStarPionB0Pion = secondTrack.GetDCA(&thirdTrack,bz,xdummyDStar,ydummyDStar);
3656  Double_t dcaB0PionD0 = thirdTrack.GetDCA(&firstTrack,bz,xdummyDStar,ydummyDStar);
3657 
3658  if(dcaDStarPionD0 > fCuts->GetMaxDCADStarPionD0())
3659  {
3660  delete vertexMother; vertexMother = nullptr;
3661  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3662  continue;
3663  }
3664  if(dcaDStarPionB0Pion > fCuts->GetMaxDCADStarPionB0Pion())
3665  {
3666  delete vertexMother; vertexMother = nullptr;
3667  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3668  continue;
3669  }
3670  if(dcaB0PionD0 > fCuts->GetMaxDCAB0PionD0())
3671  {
3672  delete vertexMother; vertexMother = nullptr;
3673  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3674  continue;
3675  }
3676 
3677  Double_t dcaCombined = TMath::Sqrt(TMath::Abs(dcaDStarPionD0) + TMath::Abs(dcaDStarPionB0Pion) + TMath::Abs(dcaB0PionD0));
3678  if(dcaCombined > fCuts->GetMaxDCACombined())
3679  {
3680  delete vertexMother; vertexMother = nullptr;
3681  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3682  continue;
3683  }
3684 
3685  Short_t chargeDStar = trackFirstDaughter->Charge() + trackSecondDaughter->Charge();
3686  AliAODVertex * vertexDStar = new AliAODVertex(*vertexMother);
3687  if(!vertexDStar)
3688  {
3689  std::cout << "no dstar vertex" << std::endl;
3690  delete vertexMother; vertexMother = nullptr;
3691  delete vertexDStar; vertexDStar = nullptr;
3692  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3693  continue;
3694 
3695  }
3696 
3697  Int_t nProngsDStar = 2;
3698  AliAODRecoDecayHF2Prong trackDStar(vertexDStar,pxDStar,pyDStar,pzDStar,d0DStar,d0errDStar,distanceAtVertex);
3699  if(!&trackDStar)
3700  {
3701  delete vertexMother; vertexMother = nullptr;
3702  delete vertexDStar; vertexDStar = nullptr;
3703  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3704  continue;
3705  }
3706 
3707  trackDStar.SetCharge(chargeDStar);
3708 
3709  UShort_t idDStar[2];
3710  idDStar[0]= trackFirstDaughter->GetID();
3711  idDStar[1]= 0;
3712 
3713  UInt_t prongsDStar[2];
3714  prongsDStar[0] = 211;
3715  prongsDStar[1] = 421;
3716 
3717 
3718  if(vertexDStar->GetNDaughters()!=2)
3719  {
3720  std::cout << "bad reconstruction 2 - number of daughters for vertex is incorrect" << std::endl;
3721  delete vertexMother; vertexMother = nullptr;
3722  delete vertexDStar; vertexDStar = nullptr;
3723  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3724  continue;
3725  }
3726 
3727  trackDStar.GetSecondaryVtx()->AddDaughter(trackFirstDaughter);
3728  trackDStar.GetSecondaryVtx()->AddDaughter(trackSecondDaughter);
3729  trackDStar.SetPrimaryVtxRef((AliAODVertex*)aodEvent->GetPrimaryVertex());
3730  trackDStar.SetProngIDs(2,idDStar);
3731 
3732 
3734  //
3735  // BO Reconstruction
3736  //
3738 
3739  //location B0 pion rotation around SV
3740 
3741  // Use the new DStar candidate and the new vertex to create the B0 candidate
3742  Double_t xdummy=0.,ydummy=0.,dca,e[2];
3743  Double_t d0z0[2],covd0z0[3],d0[2],d0err[2];
3744 
3745  AliExternalTrackParam fourthTrack;
3746  fourthTrack.CopyFromVTrack(&trackDStar);
3747 
3748  thirdTrack.PropagateToDCA(vertexMother,bz,100.,d0z0,covd0z0);
3749  fourthTrack.PropagateToDCA(vertexMother,bz,100.,d0z0,covd0z0);
3750 
3751  Double_t px[2],py[2],pz[2];
3752  px[0] = thirdTrack.Px();
3753  py[0] = thirdTrack.Py();
3754  pz[0] = thirdTrack.Pz();
3755  px[1] = fourthTrack.Px();
3756  py[1] = fourthTrack.Py();
3757  pz[1] = fourthTrack.Pz();
3758 
3759  UInt_t prongs[2];
3760  prongs[0] = 211;
3761  prongs[1] = 413;
3762 
3763  UShort_t id[2];
3764  id[0]= thirdTrack.GetID();
3765  id[1]= 0;
3766 
3767  thirdTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
3768  d0[0] = d0z0[0];
3769  d0err[0] = TMath::Sqrt(covd0z0[0]);
3770  fourthTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
3771  d0[1] = d0z0[0];
3772  d0err[1] = TMath::Sqrt(covd0z0[0]);
3773 
3774  dca = fourthTrack.GetDCA(&thirdTrack,bz,xdummy,ydummy);
3775 
3776 
3777  Short_t chargeMother = trackFirstDaughter->Charge() + trackDStar.Charge();
3778  Int_t nProngsB0 = 2;
3779  AliAODRecoDecayHF2Prong trackB0(vertexMother,px,py,pz,d0,d0err,dca);
3780  if(!&trackB0)
3781  {
3782  delete vertexMother; vertexMother = nullptr;
3783  delete vertexDStar; vertexDStar = nullptr;
3784  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3785  continue;
3786  }
3787 
3788  trackB0.SetCharge(chargeMother);
3789 
3790  trackB0.GetSecondaryVtx()->AddDaughter(trackB0PionRotated);
3791  trackB0.GetSecondaryVtx()->AddDaughter(&trackDStar);
3792  trackB0.SetPrimaryVtxRef((AliAODVertex*)aodEvent->GetPrimaryVertex());
3793  trackB0.SetProngIDs(2,id);
3794 
3796  //
3797  // Cuts
3798  //
3800 
3801  // We check if the signal is injected, optionally we can reject injected signals
3802  Bool_t fCheckInjected = kTRUE; //temp
3803  Bool_t fRemoveInjected = kFALSE; //temp
3804  Bool_t bIsInjected = kFALSE;
3805  if(fCheckInjected) bIsInjected = IsCandidateInjected(&trackB0, header,mcTrackArray);
3806  if(fCheckInjected && fRemoveInjected && bIsInjected) {
3807  delete vertexMother; vertexMother = nullptr;
3808  delete vertexDStar; vertexDStar = nullptr;
3809  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3810  continue;
3811  }
3812 
3813  // We check if the B0 candidate is a true signal in Monte Carlo
3814  Bool_t isDesiredCandidate = kFALSE;
3815  Int_t mcLabelB0 = -1;
3816  Int_t mcLabelDStar = -1;
3817  fillthis = "";
3818  Int_t motherType, histType;
3819  motherType = 1;
3820 
3821  if(fUseMCInfo)
3822  {
3823  mcLabelDStar = MatchCandidateToMonteCarlo(413,&trackDStar,mcTrackArray,B0toDStarPiLabelMatrix);
3824  mcLabelB0 = MatchCandidateToMonteCarlo(511,&trackB0,mcTrackArray,B0toDStarPiLabelMatrix);
3825 
3826  if (mcLabelB0 >= 0 && mcLabelDStar >= 0 && trackB0PionRotated->GetLabel() >= 0 && iRot == 0)
3827  {
3828  AliAODMCParticle *mcTrackDStarPion = (AliAODMCParticle*)mcTrackArray->At(trackB0PionRotated->GetLabel());
3829  AliAODMCParticle *mcTrackDStar = (AliAODMCParticle*)mcTrackArray->At(mcLabelDStar);
3830  // DStar
3831  Double_t vertex_distance = TMath::Sqrt((vertexMother->GetX() - mcTrackDStarPion->Xv())*(vertexMother->GetX() - mcTrackDStarPion->Xv()) + (vertexMother->GetY() - mcTrackDStarPion->Yv())*(vertexMother->GetY() - mcTrackDStarPion->Yv()) + (vertexMother->GetZ() - mcTrackDStarPion->Zv())*(vertexMother->GetZ() - mcTrackDStarPion->Zv()));
3832  ((TH1F*)fMotherHistogramArrayExtra[motherType][4])->Fill(vertex_distance);
3833 
3834  Double_t momentum_resolution = TMath::Sqrt((trackDStar.Px() - mcTrackDStar->Px())*(trackDStar.Px() - mcTrackDStar->Px()) + (trackDStar.Py() - mcTrackDStar->Py())*(trackDStar.Py() - mcTrackDStar->Py()) + (trackDStar.Pz() - mcTrackDStar->Pz())*(trackDStar.Pz() - mcTrackDStar->Pz()));
3835  ((TH1F*)fMotherHistogramArrayExtra[motherType][6])->Fill(momentum_resolution);
3836 
3837  isDesiredCandidate = kTRUE;
3838  }
3839  }
3840 
3841 
3842  // We fill the DStar histograms
3843  histType = 0;
3844  FillDStarAndB0Histograms(&trackDStar, primaryVertex, bz, motherType, histType);
3845  if(isDesiredCandidate && fUseMCInfo)
3846  {
3847  histType = 1;
3848  FillDStarAndB0Histograms(&trackDStar, primaryVertex, bz, motherType, histType);
3849  }
3850 
3851  // We apply cuts on the DStar
3852  Bool_t cutDStar = kFALSE;
3853 
3854  Bool_t bCutArrayDStar[29] = {0};
3855  Int_t cutReturnValueDStar = fCuts->IsDStarforDStarptbinSelected(&trackDStar, 0, aodEvent, bCutArrayDStar);
3856  if(cutReturnValueDStar == -1) cutDStar = kTRUE;
3857  if(cutReturnValueDStar == 0) cutDStar = kTRUE;
3858 
3859  Bool_t bCutArrayD0[39] = {0};
3860  Int_t cutReturnValueD0 = fCuts->IsD0forDStarptbinSelected(&trackDStar, 0, aodEvent, bCutArrayD0);
3861  if(cutReturnValueD0 == -1) cutDStar = kTRUE;
3862  if(cutReturnValueD0 == 0) cutDStar = kTRUE;
3863 
3864 
3865  if(fGetCutInfo == kTRUE)
3866  {
3867 
3868  for (Int_t n = 0; n < 29; ++n)
3869  {
3870  if(bCutArrayDStar[n] == kTRUE){
3871  if(isDesiredCandidate){
3872  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(n+1);
3873  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(n+1);
3874  cutDStar = kTRUE;
3875  }
3876  }
3877 
3878  for (Int_t n = 0; n < 39; ++n)
3879  {
3880  if(bCutArrayD0[n] == kTRUE){
3881  if(isDesiredCandidate){
3882  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(n+1+39);
3883  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(n+1+39);
3884  cutDStar = kTRUE;
3885  }
3886  }
3887  }
3888 
3889  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) cutDStar = kFALSE;
3890 
3891  if(cutDStar)
3892  {
3893  if(isDesiredCandidate)
3894  {
3895  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(0);
3896  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(0);
3897  delete vertexMother; vertexMother = nullptr;
3898  delete vertexDStar; vertexDStar = nullptr;
3899  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3900  continue;
3901  }
3902 
3903  // We fill the cut histograms
3904  histType = 2;
3905  FillDStarAndB0Histograms(&trackDStar, primaryVertex, bz, motherType, histType);
3906  if(isDesiredCandidate && fUseMCInfo)
3907  {
3908  histType = 3;
3909  FillDStarAndB0Histograms(&trackDStar, primaryVertex, bz, motherType, histType);
3910  }
3911 
3913  //
3914  // BO Reconstruction
3915  //
3916  //
3918 
3919 
3920  //we get information about the reconstructed B0
3921  Double_t ptMother = trackB0.Pt();
3922 
3923  fillthis = "";
3924 
3925  motherType = 2;
3926  histType = 0;
3927 
3928  if(isDesiredCandidate)
3929  {
3930  AliAODMCParticle *mcTrackFirstDaughter = (AliAODMCParticle*)mcTrackArray->At(trackB0PionRotated->GetLabel());
3931  AliAODMCParticle *mcTrackB0 = (AliAODMCParticle*)mcTrackArray->At(mcLabelB0);
3932 
3933  Double_t vertex_distance = TMath::Sqrt((vertexMother->GetX() - mcTrackFirstDaughter->Xv())*(vertexMother->GetX() - mcTrackFirstDaughter->Xv()) + (vertexMother->GetY() - mcTrackFirstDaughter->Yv())*(vertexMother->GetY() - mcTrackFirstDaughter->Yv()) + (vertexMother->GetZ() - mcTrackFirstDaughter->Zv())*(vertexMother->GetZ() - mcTrackFirstDaughter->Zv()));
3934  ((TH1F*)fMotherHistogramArrayExtra[motherType][4])->Fill(vertex_distance);
3935 
3936  Double_t momentum_resolution = TMath::Sqrt((trackB0.Px() - mcTrackB0->Px())*(trackB0.Px() - mcTrackB0->Px()) + (trackB0.Py() - mcTrackB0->Py())*(trackB0.Py() - mcTrackB0->Py()) + (trackB0.Pz() - mcTrackB0->Pz())*(trackB0.Pz() - mcTrackB0->Pz()));
3937  ((TH1F*)fMotherHistogramArrayExtra[motherType][6])->Fill(momentum_resolution);
3938  }
3939 
3940  if(!bSameSign)
3941  {
3942  // We fill the histograms
3943  histType = 0;
3944  FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
3945 
3946  if(isDesiredCandidate)
3947  {
3948  histType = 1;
3949  FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
3950  }
3951  }
3952 
3953 
3954  // We apply cuts
3955  Bool_t cutMother = kFALSE;
3956 
3957  Bool_t bCutArray[97] = {0};
3958  Int_t numberOfCuts = 97;
3959  Int_t cutReturnValue = fCuts->IsSelected(&trackB0, 0, aodEvent, bCutArray);
3960  if(cutReturnValue == -1) cutMother = kTRUE;
3961  if(cutReturnValue == 0) cutMother = kTRUE;
3962 
3963 
3964  // We save information about the cuts
3965  TString histName = "";
3966  Double_t invariantMassMother = trackB0.InvMass(2,prongs);
3967  Double_t pdgMassMother=TDatabasePDG::Instance()->GetParticle(511)->Mass();
3968  Double_t massWindow = fHistMassWindow; //GeV/c^2
3969  if(fGetCutInfo == kTRUE)
3970  {
3971  for (Int_t n = 0; n < 97; ++n)
3972  {
3973  if(bCutArray[n] == kTRUE){
3974  if(isDesiredCandidate){
3975  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(n+1);
3976  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(n+1);
3977  cutMother = kTRUE;
3978  }
3979  }
3980 
3981  if (TMath::Abs(invariantMassMother-pdgMassMother)<massWindow){
3982  for (Int_t l = 0; l < numberOfCuts; ++l) //total
3983  {
3984  if(bCutArray[l] == kFALSE) continue;
3985  for (Int_t j = 0; j < numberOfCuts; ++j)
3986  {
3987  if(bCutArray[j] == kFALSE) continue;
3988  if(isDesiredCandidate == kFALSE) histName ="cutEffectBackground";
3989  if(isDesiredCandidate == kTRUE) histName ="cutEffectSignal";
3990  ((TH2I*)(fOutputB0MC->FindObject(histName)))->Fill(l,j);
3991  }
3992  }
3993 
3994  for (Int_t l = 0; l < numberOfCuts; ++l) //unique
3995  {
3996  if(bCutArray[l] == kFALSE) continue;
3997  Bool_t bFill = kTRUE;
3998  for (Int_t j = 0; j < numberOfCuts; ++j)
3999  {
4000  if(l==j) continue;
4001  if(bCutArray[j] == kTRUE)
4002  {
4003  bFill = kFALSE;
4004  break;
4005  }
4006 
4007  }
4008  if(bFill == kTRUE)
4009  {
4010  if(isDesiredCandidate == kFALSE) histName ="cutEffectUniqueBackground";
4011  if(isDesiredCandidate == kTRUE) histName ="cutEffectUniqueSignal";
4012  ((TH1I*)(fOutputB0MC->FindObject(histName)))->Fill(l);
4013  }
4014  }
4015  }
4016  }
4017 
4018 
4019  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) cutMother = kTRUE;
4020 
4021  if(cutMother)
4022  {
4023  if(isDesiredCandidate)
4024  {
4025  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(0);
4026  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(0);
4027  delete vertexMother; vertexMother = nullptr;
4028  delete vertexDStar; vertexDStar = nullptr;
4029  delete trackB0PionRotated; trackB0PionRotated = nullptr;
4030  continue;
4031  }
4032 
4033  // We save the DCA information
4034  TString name_dca_D0_DStarPion ="dca_D0_DStarPion";
4035  ((TH1F*)(fOutputB0MC->FindObject(name_dca_D0_DStarPion)))->Fill(dcaDStarPionD0);
4036 
4037  TString name_dca_D0_B0Pion ="dca_D0_B0Pion";
4038  ((TH1F*)(fOutputB0MC->FindObject(name_dca_D0_B0Pion)))->Fill(dcaB0PionD0);
4039 
4040  TString name_dca_DStarPion_B0Pion ="dca_DStarPion_B0Pion";
4041  ((TH1F*)(fOutputB0MC->FindObject(name_dca_DStarPion_B0Pion)))->Fill(dcaDStarPionB0Pion);
4042 
4043  TString name_dca_Combined ="dca_Combined";
4044  ((TH1F*)(fOutputB0MC->FindObject(name_dca_Combined)))->Fill(dcaCombined);
4045 
4046  if(isDesiredCandidate && fUseMCInfo)
4047  {
4048  TString name_dca_Signal_D0_DStarPion ="dca_Signal_D0_DStarPion";
4049  ((TH1F*)(fOutputB0MC->FindObject(name_dca_Signal_D0_DStarPion)))->Fill(dcaDStarPionD0);
4050 
4051  TString name_dca_Signal_D0_B0Pion ="dca_Signal_D0_B0Pion";
4052  ((TH1F*)(fOutputB0MC->FindObject(name_dca_Signal_D0_B0Pion)))->Fill(dcaB0PionD0);
4053 
4054  TString name_dca_Signal_DStarPion_B0Pion ="dca_Signal_DStarPion_B0Pion";
4055  ((TH1F*)(fOutputB0MC->FindObject(name_dca_Signal_DStarPion_B0Pion)))->Fill(dcaDStarPionB0Pion);
4056 
4057  TString name_dca_Signal_Combined ="dca_Signal_Combined";
4058  ((TH1F*)(fOutputB0MC->FindObject(name_dca_Signal_Combined)))->Fill(dcaCombined);
4059  }
4060 
4061 
4062  // Background analysis
4063  Bool_t bIsCorrelatedBackground = kFALSE;
4064  Bool_t bIsCorrelatedBackground511 = kFALSE;
4065  if(!bSameSign && fCheckBackground && fUseMCInfo && !isDesiredCandidate && iRot == 0)
4066  {
4067  Int_t mcLabelB0Pion = trackB0PionRotated->GetLabel();
4068  Int_t mcLabelDStarPion = trackFirstDaughter->GetLabel();
4069  Int_t mcLabelD0first = ((AliAODTrack*)trackSecondDaughter->GetDaughter(0))->GetLabel();
4070  Int_t mcLabelD0second = ((AliAODTrack*)trackSecondDaughter->GetDaughter(1))->GetLabel();
4071 
4072  if(mcLabelB0Pion >= 0 && mcLabelDStarPion >= 0 && mcLabelD0first >= 0 && mcLabelD0second >= 0)
4073  {
4074  AliAODMCParticle * mcB0Pion = (AliAODMCParticle*)mcTrackArray->At(mcLabelB0Pion);
4075  AliAODMCParticle * mcDStarPion = (AliAODMCParticle*)mcTrackArray->At(mcLabelDStarPion);
4076  AliAODMCParticle * mcD0first = (AliAODMCParticle*)mcTrackArray->At(mcLabelD0first);
4077  AliAODMCParticle * mcD0second = (AliAODMCParticle*)mcTrackArray->At(mcLabelD0second);
4078 
4079  if(mcB0Pion)
4080  {
4081  Int_t iterator = 0;
4082  while(mcB0Pion->GetMother() >= 0)
4083  {
4084  mcB0Pion = (AliAODMCParticle*)mcTrackArray->At(mcB0Pion->GetMother());
4085  fillthis="particle_pdgB0Pion";
4086  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(mcB0Pion->GetPdgCode()),iterator++);
4087  }
4088  }
4089 
4090  if(mcDStarPion)
4091  {
4092  Int_t iterator = 0;
4093  while(mcDStarPion->GetMother() >= 0)
4094  {
4095  mcDStarPion = (AliAODMCParticle*)mcTrackArray->At(mcDStarPion->GetMother());
4096  fillthis="particle_pdgB0Pion";
4097  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(mcDStarPion->GetPdgCode()),iterator++);
4098  }
4099  }
4100 
4101  if(mcD0first)
4102  {
4103  Int_t iterator = 0;
4104  while(mcD0first->GetMother() >= 0)
4105  {
4106  mcD0first = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4107  fillthis="particle_pdgD0First";
4108  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(mcD0first->GetPdgCode()),iterator++);
4109  }
4110  }
4111 
4112  if(mcD0second)
4113  {
4114  Int_t iterator = 0;
4115  while(mcD0second->GetMother() >= 0)
4116  {
4117  mcD0second = (AliAODMCParticle*)mcTrackArray->At(mcD0second->GetMother());
4118  fillthis="particle_pdgD0Second";
4119  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(mcD0second->GetPdgCode()),iterator++);
4120  }
4121  }
4122 
4123  mcB0Pion = (AliAODMCParticle*)mcTrackArray->At(mcLabelB0Pion);
4124  mcDStarPion = (AliAODMCParticle*)mcTrackArray->At(mcLabelDStarPion);
4125  mcD0first = (AliAODMCParticle*)mcTrackArray->At(mcLabelD0first);
4126  mcD0second = (AliAODMCParticle*)mcTrackArray->At(mcLabelD0second);
4127 
4128  if(mcB0Pion && mcDStarPion && mcD0first && mcD0second)
4129  {
4130  // B -> DStar + pion -> D0 + pion
4131  if(mcD0first->GetMother() == mcD0second->GetMother() && mcD0first->GetMother() >= 0)
4132  {
4133  AliAODMCParticle * D0Mother = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4134  AliAODMCParticle * D0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetMother());
4135  if(D0Mother->GetMother() == mcDStarPion->GetMother() && D0Mother->GetMother() >= 0 && D0GrandMother->GetMother() == mcB0Pion->GetMother() && D0GrandMother->GetMother() >= 0)
4136  {
4137  AliAODMCParticle * finalMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetMother());
4138  fillthis="particle_pdgAll";
4139  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()));
4140  fillthis="particle_pdgAllInvMass";
4141  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()),invariantMassMother);
4142  if(TMath::Abs(finalMother->GetPdgCode())==511)
4143  {
4144  bIsCorrelatedBackground = kTRUE;
4145  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4146  {
4147  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4148  fillthis="particle_daughterPdgTwoStep511a";
4149  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4150  }
4151  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4152  {
4153  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4154  fillthis="particle_daughterPdgTwoStep511a";
4155  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4156  }
4157  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4158  {
4159  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4160  fillthis="particle_daughterPdgTwoStep511a";
4161  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4162  }
4163  }
4164  if(TMath::Abs(finalMother->GetPdgCode())==521)
4165  {
4166  bIsCorrelatedBackground = kTRUE;
4167  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4168  {
4169  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4170  fillthis="particle_daughterPdgTwoStep521a";
4171  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4172  }
4173  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4174  {
4175  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4176  fillthis="particle_daughterPdgTwoStep521a";
4177  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4178  }
4179  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4180  {
4181  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4182  fillthis="particle_daughterPdgTwoStep521a";
4183  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4184  }
4185  }
4186  }
4187  }
4188 
4189  // B -> D0 + (B0) pion
4190  if(mcD0first->GetMother() == mcD0second->GetMother() && mcD0first->GetMother() >= 0)
4191  {
4192  AliAODMCParticle * D0Mother = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4193  if(D0Mother->GetMother() == mcB0Pion->GetMother() && D0Mother->GetMother() >= 0)
4194  {
4195  AliAODMCParticle * finalMother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetMother());
4196  fillthis="particle_pdgAllSecond";
4197  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()));
4198  fillthis="particle_pdgAllInvMassSecond";
4199  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()),invariantMassMother);
4200  if(TMath::Abs(finalMother->GetPdgCode())==511)
4201  {
4202  bIsCorrelatedBackground = kTRUE;
4203  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4204  {
4205  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4206  fillthis="particle_daughterPdgOneStep511a";
4207  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4208  }
4209  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4210  {
4211  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4212  fillthis="particle_daughterPdgOneStep511a";
4213  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0Mother->GetPdgCode()));
4214  }
4215  }
4216  if(TMath::Abs(finalMother->GetPdgCode())==521)
4217  {
4218  if(fUpgradeSetting == 2 || fUpgradeSetting == 3)
4219  {
4220  delete vertexMother; vertexMother = nullptr;
4221  delete vertexDStar; vertexDStar = nullptr;
4222  delete trackB0PionRotated; trackB0PionRotated = nullptr;
4223  continue;
4224  }
4225  bIsCorrelatedBackground = kTRUE;
4226  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4227  {
4228  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4229  fillthis="particle_daughterPdgOneStep521a";
4230  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4231  }
4232  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4233  {
4234  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4235  fillthis="particle_daughterPdgOneStep521a";
4236  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0Mother->GetPdgCode()));
4237  }
4238  }
4239  }
4240  }
4241 
4242  // B -> D0 + (DStar) pion
4243  if(mcD0first->GetMother() == mcD0second->GetMother() && mcD0first->GetMother() >= 0)
4244  {
4245  AliAODMCParticle * D0Mother = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4246  if(D0Mother->GetMother() == mcDStarPion->GetMother() && D0Mother->GetMother() >= 0)
4247  {
4248  AliAODMCParticle * finalMother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetMother());
4249  fillthis="particle_pdgAllThird";
4250  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()));
4251  fillthis="particle_pdgAllInvMassThird";
4252  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()),invariantMassMother);
4253  if(TMath::Abs(finalMother->GetPdgCode())==511)
4254  {
4255  bIsCorrelatedBackground = kTRUE;
4256  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4257  {
4258  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4259  fillthis="particle_daughterPdgOneStep511b";
4260  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4261  }
4262  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4263  {
4264  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4265  fillthis="particle_daughterPdgOneStep511b";
4266  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0Mother->GetPdgCode()));
4267  }
4268  }
4269  if(TMath::Abs(finalMother->GetPdgCode())==521)
4270  {
4271  bIsCorrelatedBackground = kTRUE;
4272  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4273  {
4274  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4275  fillthis="particle_daughterPdgOneStep521b";
4276  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4277  }
4278  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4279  {
4280  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4281  fillthis="particle_daughterPdgOneStep521b";
4282  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0Mother->GetPdgCode()));
4283  }
4284  }
4285  }
4286  }
4287 
4288  // B -> X + (B0) pion -> D0
4289  if(mcD0first->GetMother() == mcD0second->GetMother() && mcD0first->GetMother() >= 0)
4290  {
4291  AliAODMCParticle * D0Mother = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4292  AliAODMCParticle * D0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetMother());
4293  if(D0GrandMother->GetMother() == mcB0Pion->GetMother() && D0GrandMother->GetMother() >= 0)
4294  {
4295  AliAODMCParticle * finalMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetMother());
4296  fillthis="particle_pdgAllFourth";
4297  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()));
4298  fillthis="particle_pdgAllInvMassFourth";
4299  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()),invariantMassMother);
4300  if(TMath::Abs(finalMother->GetPdgCode())==511)
4301  {
4302  if(fUpgradeSetting == 1 || fUpgradeSetting == 3)
4303  {
4304  delete vertexMother; vertexMother = nullptr;
4305  delete vertexDStar; vertexDStar = nullptr;
4306  delete trackB0PionRotated; trackB0PionRotated = nullptr;
4307  continue;
4308  }
4309  bIsCorrelatedBackground = kTRUE;
4310  bIsCorrelatedBackground511 = kTRUE;
4311  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4312  {
4313  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4314  fillthis="particle_daughterPdgTwoStep511b";
4315  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4316  }
4317  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4318  {
4319  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4320  fillthis="particle_daughterPdgTwoStep511b";
4321  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4322  }
4323  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4324  {
4325  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4326  fillthis="particle_daughterPdgTwoStep511b";
4327  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4328  }
4329  }
4330  if(TMath::Abs(finalMother->GetPdgCode())==521)
4331  {
4332  bIsCorrelatedBackground = kTRUE;
4333  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4334  {
4335  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4336  fillthis="particle_daughterPdgTwoStep521b";
4337  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4338  }
4339  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4340  {
4341  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4342  fillthis="particle_daughterPdgTwoStep521b";
4343  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4344  }
4345  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4346  {
4347  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4348  fillthis="particle_daughterPdgTwoStep521b";
4349  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4350  }
4351  }
4352  }
4353  }
4354 
4355  // B -> X + (DStar) pion -> D0
4356  if(mcD0first->GetMother() == mcD0second->GetMother() && mcD0first->GetMother() >= 0)
4357  {
4358  AliAODMCParticle * D0Mother = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4359  AliAODMCParticle * D0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetMother());
4360  if(D0GrandMother->GetMother() == mcDStarPion->GetMother() && D0GrandMother->GetMother() >= 0)
4361  {
4362  AliAODMCParticle * finalMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetMother());
4363  fillthis="particle_pdgAllFifth";
4364  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()));
4365  fillthis="particle_pdgAllInvMassFifth";
4366  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()),invariantMassMother);
4367  if(TMath::Abs(finalMother->GetPdgCode())==511)
4368  {
4369  bIsCorrelatedBackground = kTRUE;
4370  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4371  {
4372  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4373  fillthis="particle_daughterPdgTwoStep511c";
4374  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4375  }
4376  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4377  {
4378  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4379  fillthis="particle_daughterPdgTwoStep511c";
4380  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4381  }
4382  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4383  {
4384  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4385  fillthis="particle_daughterPdgTwoStep511c";
4386  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4387  }
4388  }
4389  if(TMath::Abs(finalMother->GetPdgCode())==521)
4390  {
4391  bIsCorrelatedBackground = kTRUE;
4392  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4393  {
4394  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4395  fillthis="particle_daughterPdgTwoStep521c";
4396  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4397  }
4398  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4399  {
4400  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4401  fillthis="particle_daughterPdgTwoStep521c";
4402  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4403  }
4404  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4405  {
4406  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4407  fillthis="particle_daughterPdgTwoStep521c";
4408  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4409  }
4410  }
4411  }
4412  }
4413  }
4414  }
4415  }
4416 
4417  if(!bSameSign)
4418  {
4419  histType = 2;
4420  FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4421  if(fUseMCInfo && isDesiredCandidate)
4422  {
4423  //fill mc histograms
4424  histType = 3;
4425  FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4426  }
4427  }
4428 
4429  AliAODRecoDecayHF2Prong* selectedDStar = (AliAODRecoDecayHF2Prong*)trackB0.GetDaughter(1);
4430  AliAODRecoDecayHF2Prong* selectedD0 = (AliAODRecoDecayHF2Prong*)selectedDStar->GetDaughter(1);
4431 
4432  // We fill the final cut histograms with the candidates that have an invariant mass close to the PDG value. This way the background we use for optimizing the cuts will not be contaminated with candidates that don't affect the signal region.
4433  massWindow = fHistMassWindow; // GeV/c^2
4434  if (TMath::Abs(invariantMassMother-pdgMassMother)<massWindow)
4435  {
4436  if(!bSameSign)
4437  {
4438  FillFinalTrackHistograms(&trackB0, isDesiredCandidate, mcTrackArray);
4439  if(!isDesiredCandidate)
4440  {
4441  motherType = 0; histType = 4; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histType, pdgD0);
4442  motherType = 1; histType = 4; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histType);
4443  motherType = 2; histType = 4; FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4444  }
4445  if(isDesiredCandidate)
4446  {
4447  motherType = 0; histType = 5; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histType, pdgD0);
4448  motherType = 1; histType = 5; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histType);
4449  motherType = 2; histType = 5; FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4450  }
4451  }
4452  }
4453 
4454  // Here we fill the histograms per pt bin and apply the same sign method
4455  TString ptBinMother = "";
4456  Int_t ptBin = fCuts->PtBin(trackB0.Pt());
4457  ptBinMother += "_ptbin_"; ptBinMother += fPtBinLimits[ptBin]; ptBinMother += "_to_"; ptBinMother += fPtBinLimits[ptBin+1];
4458  histType = 6 + 2 * ptBin;
4459 
4460  Int_t d0PtBin = fCuts->PtBinD0forD0ptbin(selectedD0->Pt());
4461  Int_t histTypeD0 = 2 * d0PtBin;
4462 
4463  Int_t d0DStarPtBin = fCuts->PtBinD0forDStarptbin(selectedDStar->Pt());
4464  Int_t histTypeD0DStar = 2 * d0DStarPtBin;
4465 
4466  Int_t dstarPtBin = fCuts->PtBinDStarforDStarptbin(selectedDStar->Pt());
4467  Int_t histTypeDStar = 2 * dstarPtBin;
4468 
4469 
4470  if (TMath::Abs(invariantMassMother-pdgMassMother)<massWindow)
4471  {
4472  if(!bSameSign && histType > 5)
4473  {
4474  if(!isDesiredCandidate)
4475  {
4476  motherType = 0; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histType, pdgD0);
4477  motherType = 1; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histType);
4478  motherType = 2; FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4479  motherType = 3; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histTypeD0, pdgD0);
4480  motherType = 4; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histTypeD0DStar, pdgD0);
4481  motherType = 5; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histTypeDStar);
4482  }
4483 
4484  if(isDesiredCandidate)
4485  {
4486  histType += 1;
4487  motherType = 0; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histType, pdgD0);
4488  motherType = 1; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histType);
4489  motherType = 2; FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4490  motherType = 3; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histTypeD0 + 1, pdgD0);
4491  motherType = 4; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histTypeD0DStar + 1, pdgD0);
4492  motherType = 5; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histTypeDStar + 1);
4493  }
4494  }
4495  }
4496 
4497  Double_t invmassDelta = DeltaInvMassB0Kpipipi(&trackB0);
4498  if(bSameSign && iRot == 0)
4499  {
4500  fillthis="invariantMassB0";
4501  fillthis += "_SameSign";
4502  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4503  fillthis="invariantMassB0";
4504  fillthis += ptBinMother + "_SameSign";
4505  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4506  fillthis="invariantMassB0";
4507  fillthis += "_SignSum";
4508  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4509  fillthis="invariantMassB0";
4510  fillthis += ptBinMother + "_SignSum";
4511  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4512  }
4513  if(!bSameSign)
4514  {
4515  if(iRot == 0)
4516  {
4517  fillthis="invariantMassB0";
4518  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4519  fillthis="invariantMassB0";
4520  fillthis += ptBinMother;
4521  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4522  fillthis="invariantMassB0";
4523  fillthis += "_SignSum";
4524  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4525  fillthis="invariantMassB0";
4526  fillthis += ptBinMother + "_SignSum";
4527  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4528 
4529  fillthis = "invariantMassB0Signal_BA";
4530  if(isDesiredCandidate) ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4531 
4532  fillthis = "invariantMassB0Correlated_BA";
4533  if(bIsCorrelatedBackground) ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4534 
4535  fillthis = "invariantMassB0Background_BA";
4536  if(!isDesiredCandidate && !bIsCorrelatedBackground) ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4537 
4538  if(bIsCorrelatedBackground511)
4539  {
4540  fillthis="invariantMassB0_correlated511";
4541  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4542  fillthis="invariantMassB0";
4543  fillthis += ptBinMother + "_correlated511";
4544  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4545  }
4546 
4547  if(!isDesiredCandidate && !bIsInjected)
4548  {
4549  TString signName = "_HIJING_Background";
4550  fillthis="invariantMassB0";
4551  fillthis += signName;
4552  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4553  fillthis="invariantMassB0";
4554  fillthis += ptBinMother + signName;
4555  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4556  }
4557  if(isDesiredCandidate && !bIsInjected)
4558  {
4559  TString signName = "_HIJING_Signal";
4560  fillthis="invariantMassB0";
4561  fillthis += signName;
4562  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4563  fillthis="invariantMassB0";
4564  fillthis += ptBinMother + signName;
4565  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4566  }
4567  }
4568  else
4569  {
4570  TString signName = "_Background_rotation";
4571  fillthis="invariantMassB0";
4572  fillthis += signName;
4573  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4574  fillthis="invariantMassB0";
4575  fillthis += ptBinMother + signName;
4576  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4577  if(!isDesiredCandidate && !bIsInjected)
4578  {
4579  signName = "_HIJING_Background_rotation";
4580  fillthis="invariantMassB0";
4581  fillthis += signName;
4582  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4583  fillthis="invariantMassB0";
4584  fillthis += ptBinMother + signName;
4585  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4586  }
4587  }
4588  }
4589 
4590  if(trackB0.Pt() > 6.0)
4591  {
4592  TString broadptBinMother = "_ptbin_6_to_inf";
4593  if(bSameSign && iRot == 0)
4594  {
4595  fillthis="invariantMassB0";
4596  fillthis += broadptBinMother + "_SameSign";
4597  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4598  fillthis="invariantMassB0";
4599  fillthis += broadptBinMother + "_SignSum";
4600  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4601  }
4602  if(!bSameSign)
4603  {
4604  if(iRot == 0)
4605  {
4606  fillthis="invariantMassB0";
4607  fillthis += broadptBinMother;
4608  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4609  fillthis="invariantMassB0";
4610  fillthis += broadptBinMother + "_SignSum";
4611  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4612  if(!isDesiredCandidate && !bIsInjected)
4613  {
4614  TString signName = "_HIJING_Background";
4615  fillthis="invariantMassB0";
4616  fillthis += broadptBinMother + signName;
4617  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4618  }
4619  if(isDesiredCandidate && !bIsInjected)
4620  {
4621  TString signName = "_HIJING_Signal";
4622  fillthis="invariantMassB0";
4623  fillthis += broadptBinMother + signName;
4624  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4625  }
4626  }
4627  else
4628  {
4629  TString signName = "_Background_rotation";
4630  fillthis="invariantMassB0";
4631  fillthis += broadptBinMother + signName;
4632  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4633  if(!isDesiredCandidate && !bIsInjected)
4634  {
4635  signName = "_HIJING_Background_rotation";
4636  fillthis="invariantMassB0";
4637  fillthis += broadptBinMother + signName;
4638  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4639  }
4640  }
4641  }
4642  }
4643 
4644  if(trackB0.Pt() > 3.0)
4645  {
4646  TString broadptBinMother = "_ptbin_3_to_inf";
4647  if(bSameSign && iRot == 0)
4648  {
4649  fillthis="invariantMassB0";
4650  fillthis += broadptBinMother + "_SameSign";
4651  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4652  fillthis="invariantMassB0";
4653  fillthis += broadptBinMother + "_SignSum";
4654  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4655  }
4656  if(!bSameSign)
4657  {
4658  if(iRot == 0)
4659  {
4660  fillthis="invariantMassB0";
4661  fillthis += broadptBinMother;
4662  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4663  fillthis="invariantMassB0";
4664  fillthis += broadptBinMother + "_SignSum";
4665  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4666  if(!isDesiredCandidate && !bIsInjected)
4667  {
4668  TString signName = "_HIJING_Background";
4669  fillthis="invariantMassB0";
4670  fillthis += broadptBinMother + signName;
4671  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4672  }
4673  if(isDesiredCandidate && !bIsInjected)
4674  {
4675  TString signName = "_HIJING_Signal";
4676  fillthis="invariantMassB0";
4677  fillthis += broadptBinMother + signName;
4678  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4679  }
4680  }
4681  else
4682  {
4683  TString signName = "_Background_rotation";
4684  fillthis="invariantMassB0";
4685  fillthis += broadptBinMother + signName;
4686  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4687  if(!isDesiredCandidate && !bIsInjected)
4688  {
4689  signName = "_HIJING_Background_rotation";
4690  fillthis="invariantMassB0";
4691  fillthis += broadptBinMother + signName;
4692  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4693  }
4694  }
4695  }
4696  }
4697 
4698  // //fine binning
4699  // if(bSameSign && iRot == 0)
4700  // {
4701  // fillthis="fineBin_invariantMassB0";
4702  // fillthis += "_SameSign";
4703  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4704  // fillthis="fineBin_invariantMassB0";
4705  // fillthis += ptBinMother + "_SameSign";
4706  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4707  // fillthis="fineBin_invariantMassB0";
4708  // fillthis += "_SignSum";
4709  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4710  // fillthis="fineBin_invariantMassB0";
4711  // fillthis += ptBinMother + "_SignSum";
4712  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4713  // }
4714  // if(!bSameSign)
4715  // {
4716  // if(iRot == 0)
4717  // {
4718  // fillthis="fineBin_invariantMassB0";
4719  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4720  // fillthis="fineBin_invariantMassB0";
4721  // fillthis += ptBinMother;
4722  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4723  // fillthis="fineBin_invariantMassB0";
4724  // fillthis += "_SignSum";
4725  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4726  // fillthis="fineBin_invariantMassB0";
4727  // fillthis += ptBinMother + "_SignSum";
4728  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4729 
4730  // if(!isDesiredCandidate && !bIsInjected)
4731  // {
4732  // TString signName = "_HIJING_Background";
4733  // fillthis="fineBin_invariantMassB0";
4734  // fillthis += signName;
4735  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4736  // fillthis="fineBin_invariantMassB0";
4737  // fillthis += ptBinMother + signName;
4738  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4739  // }
4740  // if(isDesiredCandidate && !bIsInjected)
4741  // {
4742  // TString signName = "_HIJING_Signal";
4743  // fillthis="fineBin_invariantMassB0";
4744  // fillthis += signName;
4745  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4746  // fillthis="fineBin_invariantMassB0";
4747  // fillthis += ptBinMother + signName;
4748  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4749  // }
4750  // }
4751  // else
4752  // {
4753  // TString signName = "_Background_rotation";
4754  // fillthis="fineBin_invariantMassB0";
4755  // fillthis += signName;
4756  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4757  // fillthis="fineBin_invariantMassB0";
4758  // fillthis += ptBinMother + signName;
4759  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4760  // if(!isDesiredCandidate && !bIsInjected)
4761  // {
4762  // signName = "_HIJING_Background_rotation";
4763  // fillthis="fineBin_invariantMassB0";
4764  // fillthis += signName;
4765  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4766  // fillthis="fineBin_invariantMassB0";
4767  // fillthis += ptBinMother + signName;
4768  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4769  // }
4770  // }
4771  // }
4772 
4773  // if(trackB0.Pt() > 6.0)
4774  // {
4775  // TString broadptBinMother = "_ptbin_6_to_inf";
4776  // if(bSameSign && iRot == 0)
4777  // {
4778  // fillthis="fineBin_invariantMassB0";
4779  // fillthis += broadptBinMother + "_SameSign";
4780  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4781  // fillthis="fineBin_invariantMassB0";
4782  // fillthis += broadptBinMother + "_SignSum";
4783  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4784  // }
4785  // if(!bSameSign)
4786  // {
4787  // if(iRot == 0)
4788  // {
4789  // fillthis="fineBin_invariantMassB0";
4790  // fillthis += broadptBinMother;
4791  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4792  // fillthis="fineBin_invariantMassB0";
4793  // fillthis += broadptBinMother + "_SignSum";
4794  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4795  // if(!isDesiredCandidate && !bIsInjected)
4796  // {
4797  // TString signName = "_HIJING_Background";
4798  // fillthis="fineBin_invariantMassB0";
4799  // fillthis += broadptBinMother + signName;
4800  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4801  // }
4802  // if(isDesiredCandidate && !bIsInjected)
4803  // {
4804  // TString signName = "_HIJING_Signal";
4805  // fillthis="fineBin_invariantMassB0";
4806  // fillthis += broadptBinMother + signName;
4807  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4808  // }
4809  // }
4810  // else
4811  // {
4812  // TString signName = "_Background_rotation";
4813  // fillthis="fineBin_invariantMassB0";
4814  // fillthis += broadptBinMother + signName;
4815  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4816  // if(!isDesiredCandidate && !bIsInjected)
4817  // {
4818  // signName = "_HIJING_Background_rotation";
4819  // fillthis="fineBin_invariantMassB0";
4820  // fillthis += broadptBinMother + signName;
4821  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4822  // }
4823  // }
4824  // }
4825  // }
4826 
4827  // if(trackB0.Pt() > 3.0)
4828  // {
4829  // TString broadptBinMother = "_ptbin_3_to_inf";
4830  // if(bSameSign && iRot == 0)
4831  // {
4832  // fillthis="fineBin_invariantMassB0";
4833  // fillthis += broadptBinMother + "_SameSign";
4834  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4835  // fillthis="fineBin_invariantMassB0";
4836  // fillthis += broadptBinMother + "_SignSum";
4837  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4838  // }
4839  // if(!bSameSign)
4840  // {
4841  // if(iRot == 0)
4842  // {
4843  // fillthis="fineBin_invariantMassB0";
4844  // fillthis += broadptBinMother;
4845  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4846  // fillthis="fineBin_invariantMassB0";
4847  // fillthis += broadptBinMother + "_SignSum";
4848  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4849  // if(!isDesiredCandidate && !bIsInjected)
4850  // {
4851  // TString signName = "_HIJING_Background";
4852  // fillthis="fineBin_invariantMassB0";
4853  // fillthis += broadptBinMother + signName;
4854  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4855  // }
4856  // if(isDesiredCandidate && !bIsInjected)
4857  // {
4858  // TString signName = "_HIJING_Signal";
4859  // fillthis="fineBin_invariantMassB0";
4860  // fillthis += broadptBinMother + signName;
4861  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4862  // }
4863  // }
4864  // else
4865  // {
4866  // TString signName = "_Background_rotation";
4867  // fillthis="fineBin_invariantMassB0";
4868  // fillthis += broadptBinMother + signName;
4869  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4870  // if(!isDesiredCandidate && !bIsInjected)
4871  // {
4872  // signName = "_HIJING_Background_rotation";
4873  // fillthis="fineBin_invariantMassB0";
4874  // fillthis += broadptBinMother + signName;
4875  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4876  // }
4877  // }
4878  // }
4879  // }
4880 
4881  //deltamass
4882  if(bSameSign && iRot == 0)
4883  {
4884  fillthis="deltainvariantMassB0";
4885  fillthis += "_SameSign";
4886  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4887  fillthis="deltainvariantMassB0";
4888  fillthis += ptBinMother + "_SameSign";
4889  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4890  fillthis="deltainvariantMassB0";
4891  fillthis += "_SignSum";
4892  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
4893  fillthis="deltainvariantMassB0";
4894  fillthis += ptBinMother + "_SignSum";
4895  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
4896  }
4897  if(!bSameSign)
4898  {
4899  if(iRot == 0)
4900  {
4901  fillthis="deltainvariantMassB0";
4902  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4903  fillthis="deltainvariantMassB0";
4904  fillthis += ptBinMother;
4905  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4906  fillthis="deltainvariantMassB0";
4907  fillthis += "_SignSum";
4908  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
4909  fillthis="deltainvariantMassB0";
4910  fillthis += ptBinMother + "_SignSum";
4911  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
4912 
4913  if(bIsCorrelatedBackground511)
4914  {
4915  fillthis="deltainvariantMassB0_correlated511";
4916  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4917  fillthis="deltainvariantMassB0";
4918  fillthis += ptBinMother + "_correlated511" ;
4919  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4920  }
4921 
4922  if(!isDesiredCandidate && !bIsInjected)
4923  {
4924  TString signName = "_HIJING_Background";
4925  fillthis="deltainvariantMassB0";
4926  fillthis += signName;
4927  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4928  fillthis="deltainvariantMassB0";
4929  fillthis += ptBinMother + signName;
4930  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4931  }
4932  if(isDesiredCandidate && !bIsInjected)
4933  {
4934  TString signName = "_HIJING_Signal";
4935  fillthis="deltainvariantMassB0";
4936  fillthis += signName;
4937  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4938  fillthis="deltainvariantMassB0";
4939  fillthis += ptBinMother + signName;
4940  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4941  }
4942  }
4943  else
4944  {
4945  TString signName = "_Background_rotation";
4946  fillthis="deltainvariantMassB0";
4947  fillthis += signName;
4948  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4949  fillthis="deltainvariantMassB0";
4950  fillthis += ptBinMother + signName;
4951  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4952  if(!isDesiredCandidate && !bIsInjected)
4953  {
4954  signName = "_HIJING_Background_rotation";
4955  fillthis="deltainvariantMassB0";
4956  fillthis += signName;
4957  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4958  fillthis="deltainvariantMassB0";
4959  fillthis += ptBinMother + signName;
4960  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4961  }
4962  }
4963  }
4964 
4965  if(trackB0.Pt() > 6.0)
4966  {
4967  TString broadptBinMother = "_ptbin_6_to_inf";
4968  if(bSameSign && iRot == 0)
4969  {
4970  fillthis="deltainvariantMassB0";
4971  fillthis += broadptBinMother + "_SameSign";
4972  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4973  fillthis="deltainvariantMassB0";
4974  fillthis += broadptBinMother + "_SignSum";
4975  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
4976  }
4977  if(!bSameSign)
4978  {
4979  if(iRot == 0)
4980  {
4981  fillthis="deltainvariantMassB0";
4982  fillthis += broadptBinMother;
4983  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4984  fillthis="deltainvariantMassB0";
4985  fillthis += broadptBinMother + "_SignSum";
4986  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
4987  if(!isDesiredCandidate && !bIsInjected)
4988  {
4989  TString signName = "_HIJING_Background";
4990  fillthis="deltainvariantMassB0";
4991  fillthis += broadptBinMother + signName;
4992  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4993  }
4994  if(isDesiredCandidate && !bIsInjected)
4995  {
4996  TString signName = "_HIJING_Signal";
4997  fillthis="deltainvariantMassB0";
4998  fillthis += broadptBinMother + signName;
4999  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5000  }
5001  }
5002  else
5003  {
5004  TString signName = "_Background_rotation";
5005  fillthis="deltainvariantMassB0";
5006  fillthis += broadptBinMother + signName;
5007  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5008  if(!isDesiredCandidate && !bIsInjected)
5009  {
5010  signName = "_HIJING_Background_rotation";
5011  fillthis="deltainvariantMassB0";
5012  fillthis += broadptBinMother + signName;
5013  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5014  }
5015  }
5016  }
5017  }
5018 
5019  if(trackB0.Pt() > 3.0)
5020  {
5021  TString broadptBinMother = "_ptbin_3_to_inf";
5022  if(bSameSign && iRot == 0)
5023  {
5024  fillthis="deltainvariantMassB0";
5025  fillthis += broadptBinMother + "_SameSign";
5026  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5027  fillthis="deltainvariantMassB0";
5028  fillthis += broadptBinMother + "_SignSum";
5029  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5030  }
5031  if(!bSameSign)
5032  {
5033  if(iRot == 0)
5034  {
5035  fillthis="deltainvariantMassB0";
5036  fillthis += broadptBinMother;
5037  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5038  fillthis="deltainvariantMassB0";
5039  fillthis += broadptBinMother + "_SignSum";
5040  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5041  if(!isDesiredCandidate && !bIsInjected)
5042  {
5043  TString signName = "_HIJING_Background";
5044  fillthis="deltainvariantMassB0";
5045  fillthis += broadptBinMother + signName;
5046  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5047  }
5048  if(isDesiredCandidate && !bIsInjected)
5049  {
5050  TString signName = "_HIJING_Signal";
5051  fillthis="deltainvariantMassB0";
5052  fillthis += broadptBinMother + signName;
5053  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5054  }
5055  }
5056  else
5057  {
5058  TString signName = "_Background_rotation";
5059  fillthis="deltainvariantMassB0";
5060  fillthis += broadptBinMother + signName;
5061  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5062  if(!isDesiredCandidate && !bIsInjected)
5063  {
5064  signName = "_HIJING_Background_rotation";
5065  fillthis="deltainvariantMassB0";
5066  fillthis += broadptBinMother + signName;
5067  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5068  }
5069  }
5070  }
5071  }
5072 
5073  // //fine binning
5074  // if(bSameSign && iRot == 0)
5075  // {
5076  // fillthis="fineBin_deltainvariantMassB0";
5077  // fillthis += "_SameSign";
5078  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5079  // fillthis="fineBin_deltainvariantMassB0";
5080  // fillthis += ptBinMother + "_SameSign";
5081  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5082  // fillthis="fineBin_deltainvariantMassB0";
5083  // fillthis += "_SignSum";
5084  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5085  // fillthis="fineBin_deltainvariantMassB0";
5086  // fillthis += ptBinMother + "_SignSum";
5087  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5088  // }
5089  // if(!bSameSign)
5090  // {
5091  // if(iRot == 0)
5092  // {
5093  // fillthis="fineBin_deltainvariantMassB0";
5094  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5095  // fillthis="fineBin_deltainvariantMassB0";
5096  // fillthis += ptBinMother;
5097  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5098  // fillthis="fineBin_deltainvariantMassB0";
5099  // fillthis += "_SignSum";
5100  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5101  // fillthis="fineBin_deltainvariantMassB0";
5102  // fillthis += ptBinMother + "_SignSum";
5103  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5104 
5105  // if(!isDesiredCandidate && !bIsInjected)
5106  // {
5107  // TString signName = "_HIJING_Background";
5108  // fillthis="fineBin_deltainvariantMassB0";
5109  // fillthis += signName;
5110  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5111  // fillthis="fineBin_deltainvariantMassB0";
5112  // fillthis += ptBinMother + signName;
5113  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5114  // }
5115  // if(isDesiredCandidate && !bIsInjected)
5116  // {
5117  // TString signName = "_HIJING_Signal";
5118  // fillthis="fineBin_deltainvariantMassB0";
5119  // fillthis += signName;
5120  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5121  // fillthis="fineBin_deltainvariantMassB0";
5122  // fillthis += ptBinMother + signName;
5123  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5124  // }
5125  // }
5126  // else
5127  // {
5128  // TString signName = "_Background_rotation";
5129  // fillthis="fineBin_deltainvariantMassB0";
5130  // fillthis += signName;
5131  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5132  // fillthis="fineBin_deltainvariantMassB0";
5133  // fillthis += ptBinMother + signName;
5134  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5135  // if(!isDesiredCandidate && !bIsInjected)
5136  // {
5137  // signName = "_HIJING_Background_rotation";
5138  // fillthis="fineBin_deltainvariantMassB0";
5139  // fillthis += signName;
5140  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5141  // fillthis="fineBin_deltainvariantMassB0";
5142  // fillthis += ptBinMother + signName;
5143  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5144  // }
5145  // }
5146  // }
5147 
5148  // if(trackB0.Pt() > 6.0)
5149  // {
5150  // TString broadptBinMother = "_ptbin_6_to_inf";
5151  // if(bSameSign && iRot == 0)
5152  // {
5153  // fillthis="fineBin_deltainvariantMassB0";
5154  // fillthis += broadptBinMother + "_SameSign";
5155  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5156  // fillthis="fineBin_deltainvariantMassB0";
5157  // fillthis += broadptBinMother + "_SignSum";
5158  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5159  // }
5160  // if(!bSameSign)
5161  // {
5162  // if(iRot == 0)
5163  // {
5164  // fillthis="fineBin_deltainvariantMassB0";
5165  // fillthis += broadptBinMother;
5166  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5167  // fillthis="fineBin_deltainvariantMassB0";
5168  // fillthis += broadptBinMother + "_SignSum";
5169  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5170  // if(!isDesiredCandidate && !bIsInjected)
5171  // {
5172  // TString signName = "_HIJING_Background";
5173  // fillthis="fineBin_deltainvariantMassB0";
5174  // fillthis += broadptBinMother + signName;
5175  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5176  // }
5177  // if(isDesiredCandidate && !bIsInjected)
5178  // {
5179  // TString signName = "_HIJING_Signal";
5180  // fillthis="fineBin_deltainvariantMassB0";
5181  // fillthis += broadptBinMother + signName;
5182  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5183  // }
5184  // }
5185  // else
5186  // {
5187  // TString signName = "_Background_rotation";
5188  // fillthis="fineBin_deltainvariantMassB0";
5189  // fillthis += broadptBinMother + signName;
5190  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5191  // if(!isDesiredCandidate && !bIsInjected)
5192  // {
5193  // signName = "_HIJING_Background_rotation";
5194  // fillthis="fineBin_deltainvariantMassB0";
5195  // fillthis += broadptBinMother + signName;
5196  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5197  // }
5198  // }
5199  // }
5200  // }
5201 
5202  // if(trackB0.Pt() > 3.0)
5203  // {
5204  // TString broadptBinMother = "_ptbin_3_to_inf";
5205  // if(bSameSign && iRot == 0)
5206  // {
5207  // fillthis="fineBin_deltainvariantMassB0";
5208  // fillthis += broadptBinMother + "_SameSign";
5209  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5210  // fillthis="fineBin_deltainvariantMassB0";
5211  // fillthis += broadptBinMother + "_SignSum";
5212  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5213  // }
5214  // if(!bSameSign)
5215  // {
5216  // if(iRot == 0)
5217  // {
5218  // fillthis="fineBin_deltainvariantMassB0";
5219  // fillthis += broadptBinMother;
5220  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5221  // fillthis="fineBin_deltainvariantMassB0";
5222  // fillthis += broadptBinMother + "_SignSum";
5223  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5224  // if(!isDesiredCandidate && !bIsInjected)
5225  // {
5226  // TString signName = "_HIJING_Background";
5227  // fillthis="fineBin_deltainvariantMassB0";
5228  // fillthis += broadptBinMother + signName;
5229  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5230  // }
5231  // if(isDesiredCandidate && !bIsInjected)
5232  // {
5233  // TString signName = "_HIJING_Signal";
5234  // fillthis="fineBin_deltainvariantMassB0";
5235  // fillthis += broadptBinMother + signName;
5236  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5237  // }
5238  // }
5239  // else
5240  // {
5241  // TString signName = "_Background_rotation";
5242  // fillthis="fineBin_deltainvariantMassB0";
5243  // fillthis += broadptBinMother + signName;
5244  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5245  // if(!isDesiredCandidate && !bIsInjected)
5246  // {
5247  // signName = "_HIJING_Background_rotation";
5248  // fillthis="fineBin_deltainvariantMassB0";
5249  // fillthis += broadptBinMother + signName;
5250  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5251  // }
5252  // }
5253  // }
5254  // }
5255 
5256  delete vertexMother; vertexMother = nullptr;
5257  delete vertexDStar; vertexDStar = nullptr;
5258  delete trackB0PionRotated; trackB0PionRotated = nullptr;
5259  }
5260  }
5261  }
5262 
5263  //Restore Object count
5264  //To save space in the table keeping track of all referenced objects,
5265  //we reset the object count to what it was at the beginning of the loop.
5266  TProcessID::SetObjectCount(ObjectNumber);
5267  }
5268  return;
5269 }
5270 //-------------------------------------------------------------------------------------
5271 void AliAnalysisTaskSEB0toDStarPi::FillFinalTrackHistograms(AliAODRecoDecayHF2Prong * selectedB0, Bool_t isDesiredCandidate,TClonesArray * mcTrackArray){
5272 
5273  //In this function we fill histograms with the properties of all the daughters of our selected signal candidate
5274 
5275  AliAODTrack* selectedB0Pion = (AliAODTrack*)selectedB0->GetDaughter(0);
5276  AliAODRecoDecayHF2Prong* selectedDStar = (AliAODRecoDecayHF2Prong*)selectedB0->GetDaughter(1);
5277 
5278  AliAODTrack* selectedDStarPion = (AliAODTrack*)selectedDStar->GetDaughter(0);
5279  AliAODRecoDecayHF2Prong* selectedD0 = (AliAODRecoDecayHF2Prong*)selectedDStar->GetDaughter(1);
5280 
5281  AliAODTrack* selectedD0Pion;
5282  AliAODTrack* selectedD0Kaon;
5283 
5284  if(selectedDStarPion->Charge() == 1) selectedD0Pion = (AliAODTrack*)selectedD0->GetDaughter(0);
5285  if(selectedDStarPion->Charge() == -1) selectedD0Pion = (AliAODTrack*)selectedD0->GetDaughter(1);
5286 
5287  if(selectedDStarPion->Charge() == 1) selectedD0Kaon = (AliAODTrack*)selectedD0->GetDaughter(1);
5288  if(selectedDStarPion->Charge() == -1) selectedD0Kaon = (AliAODTrack*)selectedD0->GetDaughter(0);
5289 
5290  Double_t d0B0pion = TMath::Abs(selectedB0->Getd0Prong(0));
5291  Double_t d0DStarpion = TMath::Abs(selectedDStar->Getd0Prong(0));
5292  Double_t d0D0pion = 0;
5293  Double_t d0D0kaon = 0;
5294 
5295  if(selectedDStarPion->Charge() == 1) d0D0pion = selectedD0->Getd0Prong(0);
5296  if(selectedDStarPion->Charge() == -1) d0D0pion = selectedD0->Getd0Prong(1);
5297 
5298  if(selectedDStarPion->Charge() == 1) d0D0kaon = selectedD0->Getd0Prong(1);
5299  if(selectedDStarPion->Charge() == -1) d0D0kaon = selectedD0->Getd0Prong(0);
5300 
5301  Double_t pt_track = 0;
5302  Double_t momentum_track = 0;
5303  Int_t numberOfITS = 0;
5304  Int_t numberOfTPC = 0;
5305  Int_t daughterType, histType;
5306  Int_t totalNumberOfITS = 0;
5307  Int_t totalNumberOfTPC = 0;
5308  Double_t nSigmaTPC = 0;
5309  Double_t nSigmaTOF = 0;
5310  Double_t nSigmaTPCtotal = 0;
5311  Double_t nSigmaTOFtotal = 0;
5312  Int_t pionPIDnumber = 2;
5313  Int_t kaonPIDnumber = 3;
5314  Int_t TPCok = 0;
5315  Int_t TOFok = 0;
5316 
5317  AliAODPidHF* trackPIDHF = (AliAODPidHF*)fCuts->GetPidHF();
5318 
5319  //fill the D0 pion info
5320  pt_track = selectedD0Pion->Pt();
5321  momentum_track = selectedD0Pion->P();
5322  numberOfITS = selectedD0Pion->GetITSNcls();
5323  numberOfTPC = selectedD0Pion->GetTPCNcls();
5324  totalNumberOfITS += numberOfITS;
5325  totalNumberOfTPC += numberOfTPC;
5326  TPCok = trackPIDHF->GetnSigmaTPC(selectedD0Pion, pionPIDnumber, nSigmaTPC);
5327  TOFok = trackPIDHF->GetnSigmaTOF(selectedD0Pion, pionPIDnumber, nSigmaTOF);
5328  if(TPCok != -1) nSigmaTPCtotal += nSigmaTPC*nSigmaTPC;
5329  if(TOFok != -1) nSigmaTOFtotal += nSigmaTOF*nSigmaTOF;
5330 
5331  Double_t ptB0 = selectedB0->Pt();
5332 
5333  daughterType = 0;
5334  histType = 4;
5335  if(!isDesiredCandidate)
5336  {
5337  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5338  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5339  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5340  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5341 
5342  for (Int_t j = 0; j < 10; ++j)
5343  {
5344  if(selectedD0Pion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5345 
5346  }
5347 
5348  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5349  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5350  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5351  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0D0pion);
5352  ((TH2F*)fDaughterHistogramArray2D[daughterType][4])->Fill(ptB0,pt_track);
5353  }
5354 
5355  if(isDesiredCandidate)
5356  {
5357  histType = 5;
5358  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5359  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5360  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5361  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5362 
5363  for (Int_t j = 0; j < 10; ++j)
5364  {
5365  if(selectedD0Pion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5366 
5367  }
5368 
5369  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5370  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5371  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5372  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0D0pion);
5373  ((TH2F*)fDaughterHistogramArray2D[daughterType][5])->Fill(ptB0,pt_track);
5374  }
5375 
5376  //we save the pdgcode of the used particle and its mother to check PID efficiency
5377  if(fUseMCInfo)
5378  {
5379  Float_t pdgCodeParticle = -1;
5380  Float_t pdgCodeParticleMother = -1;
5381  Int_t mcLabelParticle = -1;
5382  Int_t mcLabelParticleMother = -1;
5383  mcLabelParticle = selectedD0Pion->GetLabel();
5384 
5385  if(mcLabelParticle >= 0){
5386 
5387  AliAODMCParticle *mcTrackParticle = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticle);
5388  pdgCodeParticle = TMath::Abs(mcTrackParticle->GetPdgCode());
5389  ((TH1F*)fDaughterHistogramArrayExtra[0][2])->Fill(pdgCodeParticle);
5390  mcLabelParticleMother = mcTrackParticle->GetMother();
5391 
5392  if(mcLabelParticleMother >= 0){
5393  AliAODMCParticle *mcTrackParticleMother = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticleMother);
5394  pdgCodeParticleMother = TMath::Abs(mcTrackParticleMother->GetPdgCode());
5395  ((TH1F*)fDaughterHistogramArrayExtra[0][3])->Fill(pdgCodeParticleMother);
5396  }
5397  }
5398  }
5399 
5400 
5401 
5402  //fill the D0 kaon info
5403  pt_track = selectedD0Kaon->Pt();
5404  momentum_track = selectedD0Kaon->P();
5405  numberOfITS = selectedD0Kaon->GetITSNcls();
5406  numberOfTPC = selectedD0Kaon->GetTPCNcls();
5407  totalNumberOfITS += numberOfITS;
5408  totalNumberOfTPC += numberOfTPC;
5409  TPCok = trackPIDHF->GetnSigmaTPC(selectedD0Kaon, kaonPIDnumber, nSigmaTPC);
5410  TOFok = trackPIDHF->GetnSigmaTOF(selectedD0Kaon, kaonPIDnumber, nSigmaTOF);
5411  if(TPCok != -1) nSigmaTPCtotal += nSigmaTPC*nSigmaTPC;
5412  if(TOFok != -1) nSigmaTOFtotal += nSigmaTOF*nSigmaTOF;
5413 
5414  daughterType = 1;
5415  histType = 4;
5416  if(!isDesiredCandidate)
5417  {
5418  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5419  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5420  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5421  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5422 
5423  for (Int_t j = 0; j < 10; ++j)
5424  {
5425  if(selectedD0Kaon->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5426 
5427  }
5428 
5429  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5430  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5431  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5432  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0D0kaon);
5433  ((TH2F*)fDaughterHistogramArray2D[daughterType][4])->Fill(ptB0,pt_track);
5434  }
5435 
5436  if(isDesiredCandidate)
5437  {
5438  histType = 5;
5439  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5440  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5441  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5442  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5443 
5444  for (Int_t j = 0; j < 10; ++j)
5445  {
5446  if(selectedD0Kaon->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5447 
5448  }
5449 
5450  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5451  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5452  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5453  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0D0kaon);
5454  ((TH2F*)fDaughterHistogramArray2D[daughterType][5])->Fill(ptB0,pt_track);
5455  }
5456 
5457  //we save the pdgcode of the used particle and its mother to check PID efficiency
5458  if(fUseMCInfo)
5459  {
5460  Float_t pdgCodeParticle = -1;
5461  Float_t pdgCodeParticleMother = -1;
5462  Int_t mcLabelParticle = -1;
5463  Int_t mcLabelParticleMother = -1;
5464  mcLabelParticle = selectedD0Kaon->GetLabel();
5465 
5466  if(mcLabelParticle >= 0){
5467 
5468  AliAODMCParticle *mcTrackParticle = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticle);
5469  pdgCodeParticle = TMath::Abs(mcTrackParticle->GetPdgCode());
5470  ((TH1F*)fDaughterHistogramArrayExtra[1][2])->Fill(pdgCodeParticle);
5471  mcLabelParticleMother = mcTrackParticle->GetMother();
5472 
5473  if(mcLabelParticleMother >= 0){
5474  AliAODMCParticle *mcTrackParticleMother = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticleMother);
5475  pdgCodeParticleMother = TMath::Abs(mcTrackParticleMother->GetPdgCode());
5476  ((TH1F*)fDaughterHistogramArrayExtra[1][3])->Fill(pdgCodeParticleMother);
5477  }
5478  }
5479  }
5480 
5481  //fill the DStar pion info
5482  pt_track = selectedDStarPion->Pt();
5483  momentum_track = selectedDStarPion->P();
5484  numberOfITS = selectedDStarPion->GetITSNcls();
5485  numberOfTPC = selectedDStarPion->GetTPCNcls();
5486  totalNumberOfITS += numberOfITS;
5487  totalNumberOfTPC += numberOfTPC;
5488  TPCok = trackPIDHF->GetnSigmaTPC(selectedDStarPion, pionPIDnumber, nSigmaTPC);
5489  TOFok = trackPIDHF->GetnSigmaTOF(selectedDStarPion, pionPIDnumber, nSigmaTOF);
5490  if(TPCok != -1) nSigmaTPCtotal += nSigmaTPC*nSigmaTPC;
5491 
5492  daughterType = 2;
5493  histType = 4;
5494  if(!isDesiredCandidate)
5495  {
5496  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5497  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5498  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5499  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5500 
5501  for (Int_t j = 0; j < 10; ++j)
5502  {
5503  if(selectedDStarPion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5504 
5505  }
5506 
5507  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5508  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5509  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5510  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0DStarpion);
5511  ((TH2F*)fDaughterHistogramArray2D[daughterType][4])->Fill(ptB0,pt_track);
5512  }
5513 
5514  if(isDesiredCandidate)
5515  {
5516  histType = 5;
5517  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5518  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5519  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5520  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5521 
5522  for (Int_t j = 0; j < 10; ++j)
5523  {
5524  if(selectedDStarPion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5525 
5526  }
5527 
5528  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5529  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5530  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5531  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0DStarpion);
5532  ((TH2F*)fDaughterHistogramArray2D[daughterType][5])->Fill(ptB0,pt_track);
5533  }
5534 
5535  //we save the pdgcode of the used particle and its mother to check PID efficiency
5536  if(fUseMCInfo)
5537  {
5538  Float_t pdgCodeParticle = -1;
5539  Float_t pdgCodeParticleMother = -1;
5540  Int_t mcLabelParticle = -1;
5541  Int_t mcLabelParticleMother = -1;
5542  mcLabelParticle = selectedDStarPion->GetLabel();
5543 
5544  if(mcLabelParticle >= 0){
5545 
5546  AliAODMCParticle *mcTrackParticle = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticle);
5547  pdgCodeParticle = TMath::Abs(mcTrackParticle->GetPdgCode());
5548  ((TH1F*)fDaughterHistogramArrayExtra[2][2])->Fill(pdgCodeParticle);
5549  mcLabelParticleMother = mcTrackParticle->GetMother();
5550 
5551  if(mcLabelParticleMother >= 0){
5552  AliAODMCParticle *mcTrackParticleMother = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticleMother);
5553  pdgCodeParticleMother = TMath::Abs(mcTrackParticleMother->GetPdgCode());
5554  ((TH1F*)fDaughterHistogramArrayExtra[2][3])->Fill(pdgCodeParticleMother);
5555  }
5556  }
5557  }
5558 
5559  //fill the B0 pion info
5560  pt_track = selectedB0Pion->Pt();
5561  momentum_track = selectedB0Pion->P();
5562  numberOfITS = selectedB0Pion->GetITSNcls();
5563  numberOfTPC = selectedB0Pion->GetTPCNcls();
5564  totalNumberOfITS += numberOfITS;
5565  totalNumberOfTPC += numberOfTPC;
5566  TPCok = trackPIDHF->GetnSigmaTPC(selectedB0Pion, pionPIDnumber, nSigmaTPC);
5567  TOFok = trackPIDHF->GetnSigmaTOF(selectedB0Pion, pionPIDnumber, nSigmaTOF);
5568  if(TPCok != -1) nSigmaTPCtotal += nSigmaTPC*nSigmaTPC;
5569  if(TOFok != -1) nSigmaTOFtotal += nSigmaTOF*nSigmaTOF;
5570 
5571  daughterType = 3;
5572  histType = 4;
5573  if(!isDesiredCandidate)
5574  {
5575  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5576  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5577  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5578  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5579 
5580  for (Int_t j = 0; j < 10; ++j)
5581  {
5582  if(selectedB0Pion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5583 
5584  }
5585 
5586  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5587  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5588  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5589  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0B0pion);
5590  ((TH2F*)fDaughterHistogramArray2D[daughterType][4])->Fill(ptB0,pt_track);
5591  }
5592 
5593  if(isDesiredCandidate)
5594  {
5595  histType = 5;
5596  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5597  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5598  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5599  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5600 
5601  for (Int_t j = 0; j < 10; ++j)
5602  {
5603  if(selectedB0Pion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5604 
5605  }
5606 
5607  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5608  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5609  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5610  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0B0pion);
5611  ((TH2F*)fDaughterHistogramArray2D[daughterType][5])->Fill(ptB0,pt_track);
5612  }
5613 
5614  //we save the pdgcode of the used particle and its mother to check PID efficiency
5615  if(fUseMCInfo)
5616  {
5617  Float_t pdgCodeParticle = -1;
5618  Float_t pdgCodeParticleMother = -1;
5619  Int_t mcLabelParticle = -1;
5620  Int_t mcLabelParticleMother = -1;
5621  mcLabelParticle = selectedB0Pion->GetLabel();
5622 
5623  if(mcLabelParticle >= 0){
5624 
5625  AliAODMCParticle *mcTrackParticle = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticle);
5626  pdgCodeParticle = TMath::Abs(mcTrackParticle->GetPdgCode());
5627  ((TH1F*)fDaughterHistogramArrayExtra[3][2])->Fill(pdgCodeParticle);
5628  mcLabelParticleMother = mcTrackParticle->GetMother();
5629 
5630  if(mcLabelParticleMother >= 0){
5631  AliAODMCParticle *mcTrackParticleMother = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticleMother);
5632  pdgCodeParticleMother = TMath::Abs(mcTrackParticleMother->GetPdgCode());
5633  ((TH1F*)fDaughterHistogramArrayExtra[3][3])->Fill(pdgCodeParticleMother);
5634  }
5635  }
5636  }
5637 
5638  if(!isDesiredCandidate)
5639  {
5640  ((TH1F*)(fOutputB0MC->FindObject("totalITSBackground")))->Fill(totalNumberOfITS);
5641  ((TH1F*)(fOutputB0MC->FindObject("totalTPCBackground")))->Fill(totalNumberOfTPC);
5642  ((TH1F*)(fOutputB0MC->FindObject("totalSigmaPIDBackground")))->Fill(sqrt(nSigmaTPCtotal + nSigmaTOFtotal));
5643  }
5644  if(isDesiredCandidate)
5645  {
5646  ((TH1F*)(fOutputB0MC->FindObject("totalITSSignal")))->Fill(totalNumberOfITS);
5647  ((TH1F*)(fOutputB0MC->FindObject("totalTPCSignal")))->Fill(totalNumberOfTPC);
5648  ((TH1F*)(fOutputB0MC->FindObject("totalSigmaPIDSignal")))->Fill(sqrt(nSigmaTPCtotal + nSigmaTOFtotal));
5649  }
5650 
5651 
5652  return;
5653 }
5654 //-------------------------------------------------------------------------------------
5656 {
5660  Int_t chargeDStar = DStar->Charge();
5661 
5662  Double_t e[3];
5663  UInt_t prongs[2];
5664  if(chargeDStar==1){
5665  e[0]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(0,211);
5666  e[1]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(1,321);
5667  prongs[0] = 211;
5668  prongs[1] = 321;
5669  }
5670  else if (chargeDStar==-1)
5671  {
5672  e[0]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(1,211);
5673  e[1]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(0,321);
5674  prongs[1] = 211;
5675  prongs[0] = 321;
5676  }
5677  else
5678  {
5679  std::cout << "Wrong charge DStar." << std::endl;
5680  return 0;
5681  }
5682  e[2]=DStar->EProng(0,211);
5683 
5684  Double_t esum = e[0]+e[1]+e[2];
5685  Double_t invMassDStar = TMath::Sqrt(esum*esum-DStar->P2());
5686  Double_t invMassD0 = ((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->InvMass(2,prongs);
5687 
5688  return invMassDStar - invMassD0;
5689 }
5690 //-------------------------------------------------------------------------------------
5692 {
5696 
5697  AliAODRecoDecayHF2Prong * DStar = (AliAODRecoDecayHF2Prong*)B0->GetDaughter(1);
5698  Int_t chargeDStar = DStar->Charge();
5699 
5700  Double_t e[4];
5701  UInt_t prongs[2];
5702  if(chargeDStar==1){
5703  e[1]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(0,211);
5704  e[2]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(1,321);
5705  prongs[0] = 211;
5706  prongs[1] = 321;
5707  }
5708  else if (chargeDStar==-1)
5709  {
5710  e[1]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(1,211);
5711  e[2]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(0,321);
5712  prongs[1] = 211;
5713  prongs[0] = 321;
5714  }
5715  else
5716  {
5717  std::cout << "Wrong charge DStar." << std::endl;
5718  return 0;
5719  }
5720  e[0]=DStar->EProng(0,211);
5721  e[3]=B0->EProng(0,211);
5722 
5723