AliPhysics  64f4410 (64f4410)
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 
2183  // We also save information on the amount of signal tracks that exist in the MC dataset
2184  TString fillthis= "B0s_in_analysis";
2185  ((TH1F*)(listout->FindObject(fillthis)))->Fill(1);
2186 
2187  fillthis= "B0s_per_bin";
2188  for (Int_t j = 0; j < fnPtBins; ++j)
2189  {
2190  if(fPtBinLimits[j] < ptMC[0] && ptMC[0] < fPtBinLimits[j+1]) {((TH1F*)(listout->FindObject(fillthis)))->Fill(j); break;}
2191  }
2192 
2193  fillthis= "mc_B0_pt";
2194  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[0]);
2195  fillthis= "mc_B0_pion_pt";
2196  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[1]);
2197  fillthis= "mc_DStar_pt";
2198  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[2]);
2199  fillthis= "mc_DStar_pion_pt";
2200  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[3]);
2201  fillthis= "mc_D0_pt";
2202  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[4]);
2203  fillthis= "mc_D0_pion_pt";
2204  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[5]);
2205  fillthis= "mc_D0_kaon_pt";
2206  ((TH1F*)(listout->FindObject(fillthis)))->Fill(ptMC[6]);
2207 
2208  fillthis= "mc_B0_rapidity_true";
2209  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[0]);
2210  fillthis= "mc_B0_pion_rapidity_true";
2211  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[1]);
2212  fillthis= "mc_DStar_rapidity_true";
2213  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[2]);
2214  fillthis= "mc_DStar_pion_rapidity_true";
2215  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[3]);
2216  fillthis= "mc_D0_rapidity_true";
2217  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[4]);
2218  fillthis= "mc_D0_pion_rapidity_true";
2219  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[5]);
2220  fillthis= "mc_D0_kaon_rapidity_true";
2221  ((TH1F*)(listout->FindObject(fillthis)))->Fill(yMC[6]);
2222 
2223  fillthis= "mc_B0_pseudorapidity_true";
2224  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[0]);
2225  fillthis= "mc_B0_pion_pseudorapidity_true";
2226  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[1]);
2227  fillthis= "mc_DStar_pseudorapidity_true";
2228  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[2]);
2229  fillthis= "mc_DStar_pion_pseudorapidity_true";
2230  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[3]);
2231  fillthis= "mc_D0_pseudorapidity_true";
2232  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[4]);
2233  fillthis= "mc_D0_pion_pseudorapidity_true";
2234  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[5]);
2235  fillthis= "mc_D0_kaon_pseudorapidity_true";
2236  ((TH1F*)(listout->FindObject(fillthis)))->Fill(pseudoYMC[6]);
2237 
2238  // We check if the tracks are in acceptance
2239  if(ptMC[1] < 0.1 || TMath::Abs(pseudoYMC[1]) > 0.9 ) continue;
2240  if(ptMC[3] < 0.1 || TMath::Abs(pseudoYMC[3]) > 0.9 ) continue;
2241  if(ptMC[5] < 0.1 || TMath::Abs(pseudoYMC[5]) > 0.9 ) continue;
2242  if(ptMC[6] < 0.1 || TMath::Abs(pseudoYMC[6]) > 0.9 ) continue;
2243 
2244  // We check if the B0 is in the fiducial region
2245  if(TMath::Abs(yMC[0]) > 0.8) continue;
2246 
2247  Int_t rows = B0toDStarPiLabelMatrix->GetNrows();
2248 
2249  B0toDStarPiLabelMatrix->ResizeTo(rows+1,7);
2250  particleMatrix(rows,0) = mcLabelPionB0;
2251  particleMatrix(rows,1) = mcLabelPionDStar;
2252  particleMatrix(rows,2) = mcLabelPionD0;
2253  particleMatrix(rows,3) = mcLabelKaon;
2254  particleMatrix(rows,4) = mcLabelD0;
2255  particleMatrix(rows,5) = mcLabelDStar;
2256  particleMatrix(rows,6) = mcLabelB0;
2257 
2258  fillthis= "B0s_in_analysis";
2259  ((TH1F*)(listout->FindObject(fillthis)))->Fill(2);
2260 
2261 
2262  fillthis= "B0s_per_bin_in_Acc";
2263  for (Int_t j = 0; j < fnPtBins; ++j)
2264  {
2265  if(fPtBinLimits[j] < ptMC[0] && ptMC[0] < fPtBinLimits[j+1]) {((TH1F*)(listout->FindObject(fillthis)))->Fill(j); break;}
2266  }
2267 
2268  }
2269  }
2270 
2271  //old method
2272 
2273  // 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.
2274  // 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.
2275  // Int_t numberOfB0s = 0;
2276  // TArrayI correctLabelArray;
2277  // for (Int_t i = 0; i < B0toDStarPiLabelMatrix->GetNrows(); i++)
2278  // {
2279  // std::cout << "loop at row = " << i << std::endl;
2280  // Int_t particleCounter = 0;
2281  // for (Int_t j = 0; j < 4; j++)
2282  // {
2283  // Int_t labelParticleInList = (Int_t)particleMatrix(i,j);
2284  // for (Int_t k=0; k<aodevent->GetNumberOfTracks(); k++)
2285  // {
2286  // AliAODTrack* aodTrack = dynamic_cast<AliAODTrack*>(aodevent->GetTrack(k));
2287  // if(!aodTrack) AliFatal("Not a standard AOD");
2288  // if(TMath::Abs(aodTrack->Eta())>0.8) continue;
2289  // if(aodTrack->GetLabel() == labelParticleInList)
2290  // {
2291  // particleCounter++;
2292  // break;
2293  // }
2294  // }
2295  // }
2296  // if(particleCounter==4) std::cout << "found 4" << std::endl;
2297  // if (particleCounter==4)
2298  // {
2299  // TString fillthis= "B0s_in_analysis";
2300  // ((TH1F*)(listout->FindObject(fillthis)))->Fill(2);
2301  // numberOfB0s++;
2302  // correctLabelArray.Set(numberOfB0s);
2303  // correctLabelArray.AddAt(i,numberOfB0s-1);
2304 
2305  // Int_t labelParticle = (Int_t)particleMatrix(i,0);
2306  // AliAODMCParticle * B0track = dynamic_cast< AliAODMCParticle*>(mcTrackArray->At(labelParticle));
2307 
2308  // fillthis= "B0s_per_bin_in_Acc";
2309  // for (Int_t j = 0; j < fnPtBins; ++j)
2310  // {
2311  // if(fPtBinLimits[j] < B0track->Pt() && B0track->Pt() < fPtBinLimits[j+1]) {((TH1F*)(listout->FindObject(fillthis)))->Fill(j); break;}
2312  // }
2313  // }
2314  // }
2315 
2316  // std::cout << "Number of B0 = " << numberOfB0s << std::endl;
2317 
2318  // for (Int_t i = 0; i < correctLabelArray.GetSize(); i++)
2319  // {
2320  // particleMatrix(i,0) = (Int_t)particleMatrix(correctLabelArray[i],0);
2321  // particleMatrix(i,1) = (Int_t)particleMatrix(correctLabelArray[i],1);
2322  // particleMatrix(i,2) = (Int_t)particleMatrix(correctLabelArray[i],2);
2323  // particleMatrix(i,3) = (Int_t)particleMatrix(correctLabelArray[i],3);
2324  // particleMatrix(i,4) = (Int_t)particleMatrix(correctLabelArray[i],4);
2325  // particleMatrix(i,5) = (Int_t)particleMatrix(correctLabelArray[i],5);
2326  // particleMatrix(i,6) = (Int_t)particleMatrix(correctLabelArray[i],6);
2327  // }
2328  // B0toDStarPiLabelMatrix->ResizeTo(correctLabelArray.GetSize(),7);
2329  return;
2330 }
2331 //-------------------------------------------------------------------------------------
2332 Bool_t AliAnalysisTaskSEB0toDStarPi::D0FirstDaughterSelection(AliAODTrack* aodTrack, AliAODVertex *primaryVertex, Double_t bz, TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, AliAODMCHeader * header){
2333 
2334  // we select the D0 pion and save its information
2335  if(!aodTrack) AliFatal("Not a standard AOD");
2336 
2337  //quick quality cut
2338  if(aodTrack->GetITSNcls() < 1) return kFALSE;
2339  if(aodTrack->GetTPCNcls() < 1) return kFALSE;
2340  if(aodTrack->GetStatus()&AliESDtrack::kITSpureSA) return kFALSE;
2341  if(!(aodTrack->GetStatus()&AliESDtrack::kITSin)) return kFALSE;
2342  if(aodTrack->GetID() < 0) return kFALSE;
2343  Double_t covtest[21];
2344  if(!aodTrack->GetCovarianceXYZPxPyPz(covtest)) return kFALSE;
2345 
2346  Int_t mcLabelParticle = -1;
2347  Int_t pdgParticle = -1;
2348  mcLabelParticle = aodTrack->GetLabel();
2349 
2350  // we fill histograms with information of the track
2351  Double_t pt_track = aodTrack->Pt();
2352  Double_t momentum_track = aodTrack->P();
2353  Int_t numberOfITS = aodTrack->GetITSNcls();
2354  Int_t numberOfTPC = aodTrack->GetTPCNcls();
2355 
2356  AliExternalTrackParam particleTrack;
2357  particleTrack.CopyFromVTrack(aodTrack);
2358  Double_t d0[2],covd0[3];
2359  particleTrack.PropagateToDCA(primaryVertex,bz,100.,d0,covd0);
2360 
2361  //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
2362  Bool_t isDesiredCandidate = kFALSE;
2363  if(fUseMCInfo){
2364  TMatrix &particleMatrix = *B0toDStarPiLabelMatrix;
2365  for (Int_t k = 0; k < B0toDStarPiLabelMatrix->GetNrows(); ++k){
2366  if(mcLabelParticle == (Int_t)particleMatrix(k,2) || mcLabelParticle == (Int_t)particleMatrix(k,3)){
2367  isDesiredCandidate = kTRUE;
2368  break;
2369  }
2370  }
2371  }
2372 
2373  if(fUseMCInfo){
2374  if(IsTrackInjected(aodTrack,header,mcTrackArray) && !isDesiredCandidate && fQuickSignalAnalysis == 2) return kFALSE;
2375  }
2376 
2377  Int_t daughterType = 0;
2378 
2379 
2380  Int_t histType = 0;
2381  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2382  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2383  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2384  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2385 
2386  for (Int_t j = 0; j < 10; ++j)
2387  {
2388  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2389 
2390  }
2391  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2392 
2393  if(isDesiredCandidate)
2394  {
2395  histType = 1;
2396  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2397  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2398  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2399  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2400 
2401  for (Int_t j = 0; j < 10; ++j)
2402  {
2403  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2404 
2405  }
2406  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2407  }
2408 
2409  //we apply a number of cuts on the particle
2410  Bool_t bCut = kFALSE;
2411 
2412  //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
2413 
2414  if(aodTrack->GetITSNcls() < fCuts->GetMinITSNclsD0FirstDaughter()){
2415  if(isDesiredCandidate) {
2416  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(3);
2417  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(3);
2418  bCut = kTRUE;
2419  }
2420 
2421  if(aodTrack->GetTPCNcls() < fCuts->GetMinTPCNclsD0FirstDaughter()){
2422  if(isDesiredCandidate) {
2423  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(4);
2424  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(4);
2425  bCut = kTRUE;
2426  }
2427 
2428  if(fCuts->UseITSRefitD0FirstDaughter()==kTRUE){
2429  if(!(aodTrack->GetStatus()&AliESDtrack::kITSrefit)) {
2430  if(isDesiredCandidate) {
2431  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(5);
2432  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(5);
2433  bCut = kTRUE;
2434  }
2435  }
2436 
2437  if(fCuts->UseTPCRefitD0FirstDaughter()==kTRUE){
2438  if((!(aodTrack->GetStatus()&AliESDtrack::kTPCrefit))) {
2439  if(isDesiredCandidate) {
2440  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(6);
2441  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(6);
2442  bCut = kTRUE;
2443  }
2444  }
2445 
2446  if(fCuts->UseFilterBitD0FirstDaughter()==kTRUE){
2447  if(!(aodTrack->TestFilterMask(BIT(fCuts->GetFilterBitD0FirstDaughter())))) {
2448  if(isDesiredCandidate) {
2449  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(7);
2450  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(7);
2451  bCut = kTRUE;
2452  }
2453  }
2454 
2455  if(aodTrack->Pt() < fCuts->GetMinPtD0FirstDaughter()){
2456  if(isDesiredCandidate) {
2457  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(8);
2458  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(8);
2459  bCut = kTRUE;
2460  }
2461 
2462  if(TMath::Abs(d0[0]) < fCuts->GetMind0D0FirstDaughter()){
2463  if(isDesiredCandidate) {
2464  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(12);
2465  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(12);
2466  bCut = kTRUE;
2467  }
2468 
2469  if(TMath::Abs(aodTrack->Eta()) > fCuts->GetMaxAbsEtaD0FirstDaughter()){
2470  if(isDesiredCandidate) {
2471  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(9);
2472  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(9);
2473  bCut = kTRUE;
2474  }
2475 
2476  Bool_t bHardSelectionArrayITS[7] = {kFALSE};
2477  fCuts->GetHardSelectionArrayITSD0FirstDaughter(bHardSelectionArrayITS);
2478  Bool_t bSoftSelectionArrayITS[7] = {kFALSE};
2479  fCuts->GetSoftSelectionArrayITSD0FirstDaughter(bSoftSelectionArrayITS);
2480 
2481  Bool_t bHardITSPass = kTRUE;
2482  for (Int_t j = 0; j < 7; ++j)
2483  {
2484  if(bHardSelectionArrayITS[j])
2485  {
2486  if(!aodTrack->HasPointOnITSLayer(j)) bHardITSPass = kFALSE;
2487  }
2488  }
2489 
2490  Int_t nCounterSoftSelection = 0;
2491  Bool_t bSoftITSPass = kTRUE;
2492  for (Int_t j = 0; j < 7; ++j)
2493  {
2494  if(bSoftSelectionArrayITS[j])
2495  {
2496  if(aodTrack->HasPointOnITSLayer(j)) nCounterSoftSelection++;
2497  }
2498  }
2499  if(nCounterSoftSelection < fCuts->GetNSoftITSCutD0FirstDaughter()) bSoftITSPass = kFALSE;
2500 
2501  if(!bHardITSPass){
2502  if(isDesiredCandidate) {
2503  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(10);
2504  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(10);
2505  bCut = kTRUE;
2506  }
2507 
2508  if(!bSoftITSPass){
2509  if(isDesiredCandidate) {
2510  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(11);
2511  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(11);
2512  bCut = kTRUE;
2513  }
2514 
2515  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) bCut = kTRUE;
2516 
2517  if(bCut) {
2518  if(isDesiredCandidate) {
2519  ((TH1F*)fDaughterHistogramArrayExtra[0][1])->Fill(0);
2520  } else ((TH1F*)fDaughterHistogramArrayExtra[0][0])->Fill(0);
2521  return kFALSE;
2522  }
2523 
2524  //we fill histograms with track information of the tracks that pass the cuts
2525  histType = 2;
2526  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2527  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2528  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2529  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2530 
2531  for (Int_t j = 0; j < 10; ++j)
2532  {
2533  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2534 
2535  }
2536  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2537 
2538  if(isDesiredCandidate)
2539  {
2540  histType = 3;
2541  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2542  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2543  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2544  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2545 
2546  for (Int_t j = 0; j < 10; ++j)
2547  {
2548  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2549 
2550  }
2551  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2552  }
2553 
2554  return kTRUE;
2555 }
2556 //-------------------------------------------------------------------------------------
2557 Bool_t AliAnalysisTaskSEB0toDStarPi::D0SecondDaughterSelection(AliAODTrack* aodTrack, AliAODVertex *primaryVertex, Double_t bz, TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, AliAODMCHeader * header){
2558 
2559  // we select the D0 pion and save its information
2560  if(!aodTrack) AliFatal("Not a standard AOD");
2561 
2562  //quick quality cut
2563  if(aodTrack->GetITSNcls() < 1) return kFALSE;
2564  if(aodTrack->GetTPCNcls() < 1) return kFALSE;
2565  if(aodTrack->GetStatus()&AliESDtrack::kITSpureSA) return kFALSE;
2566  if(!(aodTrack->GetStatus()&AliESDtrack::kITSin)) return kFALSE;
2567  if(aodTrack->GetID() < 0) return kFALSE;
2568  Double_t covtest[21];
2569  if(!aodTrack->GetCovarianceXYZPxPyPz(covtest)) return kFALSE;
2570 
2571  Int_t mcLabelParticle = -1;
2572  Int_t pdgParticle = -1;
2573  mcLabelParticle = aodTrack->GetLabel();
2574 
2575  // we fill histograms with information of the track
2576  Double_t pt_track = aodTrack->Pt();
2577  Double_t momentum_track = aodTrack->P();
2578  Int_t numberOfITS = aodTrack->GetITSNcls();
2579  Int_t numberOfTPC = aodTrack->GetTPCNcls();
2580 
2581  AliExternalTrackParam particleTrack;
2582  particleTrack.CopyFromVTrack(aodTrack);
2583  Double_t d0[2],covd0[3];
2584  particleTrack.PropagateToDCA(primaryVertex,bz,100.,d0,covd0);
2585 
2586  //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
2587  Bool_t isDesiredCandidate = kFALSE;
2588  if(fUseMCInfo){
2589  TMatrix &particleMatrix = *B0toDStarPiLabelMatrix;
2590  for (Int_t k = 0; k < B0toDStarPiLabelMatrix->GetNrows(); ++k){
2591  if(mcLabelParticle == (Int_t)particleMatrix(k,2) || mcLabelParticle == (Int_t)particleMatrix(k,3)){
2592  isDesiredCandidate = kTRUE;
2593  break;
2594  }
2595  }
2596  }
2597 
2598  if(fUseMCInfo){
2599  if(IsTrackInjected(aodTrack,header,mcTrackArray) && !isDesiredCandidate && fQuickSignalAnalysis == 2) return kFALSE;
2600  }
2601 
2602  Int_t daughterType = 1;
2603 
2604 
2605  Int_t histType = 0;
2606  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2607  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2608  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2609  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2610 
2611  for (Int_t j = 0; j < 10; ++j)
2612  {
2613  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2614 
2615  }
2616  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2617 
2618  if(isDesiredCandidate)
2619  {
2620  histType = 1;
2621  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2622  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2623  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2624  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2625 
2626  for (Int_t j = 0; j < 10; ++j)
2627  {
2628  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2629 
2630  }
2631  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2632  }
2633 
2634  //we apply a number of cuts on the particle
2635  Bool_t bCut = kFALSE;
2636 
2637  //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
2638 
2639  if(aodTrack->GetITSNcls() < fCuts->GetMinITSNclsD0SecondDaughter()){
2640  if(isDesiredCandidate) {
2641  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(3);
2642  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(3);
2643  bCut = kTRUE;
2644  }
2645 
2646  if(aodTrack->GetTPCNcls() < fCuts->GetMinTPCNclsD0SecondDaughter()){
2647  if(isDesiredCandidate) {
2648  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(4);
2649  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(4);
2650  bCut = kTRUE;
2651  }
2652 
2653  if(fCuts->UseITSRefitD0SecondDaughter()==kTRUE){
2654  if(!(aodTrack->GetStatus()&AliESDtrack::kITSrefit)) {
2655  if(isDesiredCandidate) {
2656  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(5);
2657  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(5);
2658  bCut = kTRUE;
2659  }
2660  }
2661 
2662  if(fCuts->UseTPCRefitD0SecondDaughter()==kTRUE){
2663  if((!(aodTrack->GetStatus()&AliESDtrack::kTPCrefit))) {
2664  if(isDesiredCandidate) {
2665  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(6);
2666  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(6);
2667  bCut = kTRUE;
2668  }
2669  }
2670 
2671  if(fCuts->UseFilterBitD0SecondDaughter()==kTRUE){
2672  if(!(aodTrack->TestFilterMask(BIT(fCuts->GetFilterBitD0SecondDaughter())))) {
2673  if(isDesiredCandidate) {
2674  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(7);
2675  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(7);
2676  bCut = kTRUE;
2677  }
2678  }
2679 
2680  if(aodTrack->Pt() < fCuts->GetMinPtD0SecondDaughter()){
2681  if(isDesiredCandidate) {
2682  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(8);
2683  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(8);
2684  bCut = kTRUE;
2685  }
2686 
2687  if(TMath::Abs(d0[0]) < fCuts->GetMind0D0SecondDaughter()){
2688  if(isDesiredCandidate) {
2689  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(12);
2690  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(12);
2691  bCut = kTRUE;
2692  }
2693 
2694  if(TMath::Abs(aodTrack->Eta()) > fCuts->GetMaxAbsEtaD0SecondDaughter()){
2695  if(isDesiredCandidate) {
2696  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(9);
2697  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(9);
2698  bCut = kTRUE;
2699  }
2700 
2701  Bool_t bHardSelectionArrayITS[7] = {kFALSE};
2702  fCuts->GetHardSelectionArrayITSD0SecondDaughter(bHardSelectionArrayITS);
2703  Bool_t bSoftSelectionArrayITS[7] = {kFALSE};
2704  fCuts->GetSoftSelectionArrayITSD0SecondDaughter(bSoftSelectionArrayITS);
2705 
2706  Bool_t bHardITSPass = kTRUE;
2707  for (Int_t j = 0; j < 7; ++j)
2708  {
2709  if(bHardSelectionArrayITS[j])
2710  {
2711  if(!aodTrack->HasPointOnITSLayer(j)) bHardITSPass = kFALSE;
2712  }
2713  }
2714 
2715  Int_t nCounterSoftSelection = 0;
2716  Bool_t bSoftITSPass = kTRUE;
2717  for (Int_t j = 0; j < 7; ++j)
2718  {
2719  if(bSoftSelectionArrayITS[j])
2720  {
2721  if(aodTrack->HasPointOnITSLayer(j)) nCounterSoftSelection++;
2722  }
2723  }
2724  if(nCounterSoftSelection < fCuts->GetNSoftITSCutD0SecondDaughter()) bSoftITSPass = kFALSE;
2725 
2726  if(!bHardITSPass){
2727  if(isDesiredCandidate) {
2728  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(10);
2729  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(10);
2730  bCut = kTRUE;
2731  }
2732 
2733  if(!bSoftITSPass){
2734  if(isDesiredCandidate) {
2735  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(11);
2736  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(11);
2737  bCut = kTRUE;
2738  }
2739 
2740  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) bCut = kTRUE;
2741 
2742  if(bCut) {
2743  if(isDesiredCandidate) {
2744  ((TH1F*)fDaughterHistogramArrayExtra[1][1])->Fill(0);
2745  } else ((TH1F*)fDaughterHistogramArrayExtra[1][0])->Fill(0);
2746  return kFALSE;
2747  }
2748 
2749  //we fill histograms with track information of the tracks that pass the cuts
2750  histType = 2;
2751  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2752  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2753  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2754  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2755 
2756  for (Int_t j = 0; j < 10; ++j)
2757  {
2758  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2759 
2760  }
2761  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2762 
2763  if(isDesiredCandidate)
2764  {
2765  histType = 3;
2766  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2767  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2768  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2769  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2770 
2771  for (Int_t j = 0; j < 10; ++j)
2772  {
2773  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2774 
2775  }
2776  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2777  }
2778 
2779  return kTRUE;
2780 }
2781 //-------------------------------------------------------------------------------------
2782 void AliAnalysisTaskSEB0toDStarPi::DStarPionSelection(AliAODEvent* aodEvent, AliAODVertex *primaryVertex, Double_t bz, TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, AliAODMCHeader * header){
2783 
2784  //we keep track of the number of particles we could use and how many we actually use after cuts
2785  Int_t numberofparticles = 0;
2786  Int_t numberofparticlesused = 0;
2787  Int_t iClonesArray = 0;
2788 
2789  TString fillthis = "";
2790 
2791  //we loop over all tracks in the event
2792  for (Int_t i=0; i<aodEvent->GetNumberOfTracks(); i++){
2793  AliAODTrack* aodTrack = dynamic_cast<AliAODTrack*>(aodEvent->GetTrack(i));
2794  if(!aodTrack) AliFatal("Not a standard AOD");
2795 
2796  //quick quality cut
2797  if(aodTrack->GetITSNcls() < 1) continue;
2798  if(aodTrack->GetTPCNcls() < 1) continue;
2799  if(aodTrack->GetStatus()&AliESDtrack::kITSpureSA) continue;
2800  if(!(aodTrack->GetStatus()&AliESDtrack::kITSin)) continue;
2801  if(aodTrack->GetID() < 0) continue;
2802  Double_t covtest[21];
2803  if(!aodTrack->GetCovarianceXYZPxPyPz(covtest)) continue;
2804 
2805  Int_t mcLabelParticle = -1;
2806  Int_t pdgParticle = -1;
2807  mcLabelParticle = aodTrack->GetLabel();
2808 
2809  numberofparticles++;
2810 
2811  // we fill histograms with information of the track
2812  Double_t pt_track = aodTrack->Pt();
2813  Double_t momentum_track = aodTrack->P();
2814  Int_t numberOfITS = aodTrack->GetITSNcls();
2815  Int_t numberOfTPC = aodTrack->GetTPCNcls();
2816  Double_t nSigmaTPC = 0;
2817  Double_t nSigmaTOF = 0;
2818  Int_t pionPIDnumber = 2;
2819  Int_t kaonPIDnumber = 3;
2820  Int_t TPCok = 0;
2821  Int_t TOFok = 0;
2822 
2823  AliAODPidHF* trackPIDHF = (AliAODPidHF*)fCuts->GetPidHF();
2824  TPCok = trackPIDHF->GetnSigmaTPC(aodTrack, pionPIDnumber, nSigmaTPC);
2825  TOFok = trackPIDHF->GetnSigmaTOF(aodTrack, pionPIDnumber, nSigmaTOF);
2826 
2827  AliExternalTrackParam particleTrack;
2828  particleTrack.CopyFromVTrack(aodTrack);
2829  Double_t d0[2],covd0[3];
2830  particleTrack.PropagateToDCA(primaryVertex,bz,100.,d0,covd0);
2831 
2832  //we check if the particle is a signal track
2833  Bool_t isDesiredCandidate = kFALSE;
2834  if(fUseMCInfo){
2835  TMatrix &particleMatrix = *B0toDStarPiLabelMatrix;
2836  for (Int_t k = 0; k < B0toDStarPiLabelMatrix->GetNrows(); ++k){
2837  if(mcLabelParticle == (Int_t)particleMatrix(k,1)){
2838  isDesiredCandidate = kTRUE;
2839  break;
2840  }
2841  }
2842  }
2843 
2844  if(fUseMCInfo){
2845  if(IsTrackInjected(aodTrack,header,mcTrackArray) && !isDesiredCandidate && fQuickSignalAnalysis == 2) continue;
2846  }
2847 
2848  Int_t daughterType = 2;
2849 
2850 
2851  Int_t histType = 0;
2852  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2853  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2854  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2855  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2856 
2857  for (Int_t j = 0; j < 10; ++j)
2858  {
2859  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2860 
2861  }
2862 
2863  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
2864  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
2865  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
2866  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2867 
2868  if(isDesiredCandidate)
2869  {
2870  histType = 1;
2871  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
2872  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
2873  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
2874  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
2875 
2876  for (Int_t j = 0; j < 10; ++j)
2877  {
2878  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
2879 
2880  }
2881 
2882  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
2883  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
2884  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
2885  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
2886  }
2887 
2888  //we apply a number of cuts on the particle
2889  Bool_t bCut = kFALSE;
2890 
2891  //we apply a PID cut for a pion
2892  if(!(fCuts->SelectPID(aodTrack,pionPIDnumber))){
2893  if(isDesiredCandidate) {
2894  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(2);
2895  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(2);
2896  bCut = kTRUE;
2897  }
2898 
2899  if(aodTrack->GetITSNcls() < fCuts->GetMinITSNclsDStarPion()){
2900  if(isDesiredCandidate) {
2901  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(3);
2902  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(3);
2903  bCut = kTRUE;
2904  }
2905 
2906  if(aodTrack->GetTPCNcls() < fCuts->GetMinTPCNclsDStarPion()){
2907  if(isDesiredCandidate) {
2908  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(4);
2909  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(4);
2910  bCut = kTRUE;
2911  }
2912 
2913  if(fCuts->UseITSRefitDStarPion()==kTRUE){
2914  if(!(aodTrack->GetStatus()&AliESDtrack::kITSrefit)) {
2915  if(isDesiredCandidate) {
2916  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(5);
2917  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(5);
2918  bCut = kTRUE;
2919  }
2920  }
2921 
2922  if(fCuts->UseTPCRefitDStarPion()==kTRUE){
2923  if((!(aodTrack->GetStatus()&AliESDtrack::kTPCrefit))) {
2924  if(isDesiredCandidate) {
2925  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(6);
2926  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(6);
2927  bCut = kTRUE;
2928  }
2929  }
2930 
2931  if(fCuts->UseFilterBitDStarPion()==kTRUE){
2932  if(!(aodTrack->TestFilterMask(BIT(fCuts->GetFilterBitDStarPion())))) {
2933  if(isDesiredCandidate) {
2934  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(7);
2935  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(7);
2936  bCut = kTRUE;
2937  }
2938  }
2939 
2940  if(aodTrack->Pt() < fCuts->GetMinPtDStarPion()){
2941  if(isDesiredCandidate) {
2942  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(8);
2943  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(8);
2944  bCut = kTRUE;
2945  }
2946 
2947  if(aodTrack->Pt() > fCuts->GetMaxPtDStarPion()){
2948  if(isDesiredCandidate) {
2949  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(13);
2950  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(13);
2951  bCut = kTRUE;
2952  }
2953 
2954 
2955  if(TMath::Abs(d0[0]) < fCuts->GetMind0DStarPion()){
2956  if(isDesiredCandidate) {
2957  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(12);
2958  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(12);
2959  bCut = kTRUE;
2960  }
2961 
2962 
2963  if(TMath::Abs(aodTrack->Eta()) > fCuts->GetMaxAbsEtaDStarPion()){
2964  if(isDesiredCandidate) {
2965  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(9);
2966  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(9);
2967  bCut = kTRUE;
2968  }
2969 
2970  Bool_t bHardSelectionArrayITS[7] = {kFALSE};
2971  fCuts->GetHardSelectionArrayITSDStarPion(bHardSelectionArrayITS);
2972  Bool_t bSoftSelectionArrayITS[7] = {kFALSE};
2973  fCuts->GetSoftSelectionArrayITSDStarPion(bSoftSelectionArrayITS);
2974 
2975  Bool_t bHardITSPass = kTRUE;
2976  for (Int_t j = 0; j < 7; ++j)
2977  {
2978  if(bHardSelectionArrayITS[j])
2979  {
2980  if(!aodTrack->HasPointOnITSLayer(j)) bHardITSPass = kFALSE;
2981  }
2982  }
2983 
2984  Int_t nCounterSoftSelection = 0;
2985  Bool_t bSoftITSPass = kTRUE;
2986  for (Int_t j = 0; j < 7; ++j)
2987  {
2988  if(bSoftSelectionArrayITS[j])
2989  {
2990  if(aodTrack->HasPointOnITSLayer(j)) nCounterSoftSelection++;
2991  }
2992  }
2993  if(nCounterSoftSelection < fCuts->GetNSoftITSCutDStarPion()) bSoftITSPass = kFALSE;
2994 
2995  if(!bHardITSPass){
2996  if(isDesiredCandidate) {
2997  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(10);
2998  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(10);
2999  bCut = kTRUE;
3000  }
3001 
3002  if(!bSoftITSPass){
3003  if(isDesiredCandidate) {
3004  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(11);
3005  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(11);
3006  bCut = kTRUE;
3007  }
3008 
3009  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) bCut = kTRUE;
3010 
3011  if(bCut) {
3012  if(isDesiredCandidate) {
3013  ((TH1F*)fDaughterHistogramArrayExtra[2][1])->Fill(0);
3014  } else ((TH1F*)fDaughterHistogramArrayExtra[2][0])->Fill(0);
3015  continue;
3016  }
3017 
3018  //we fill histograms with track information of the tracks that pass the cuts
3019  histType = 2;
3020  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3021  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3022  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3023  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3024 
3025  for (Int_t j = 0; j < 10; ++j)
3026  {
3027  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3028 
3029  }
3030 
3031  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3032  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3033  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3034  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3035 
3036  if(isDesiredCandidate)
3037  {
3038  histType = 3;
3039  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3040  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3041  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3042  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3043 
3044  for (Int_t j = 0; j < 10; ++j)
3045  {
3046  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3047 
3048  }
3049 
3050  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3051  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3052  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3053  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3054  }
3055 
3056  fDStarPionTracks->push_back(i);
3057  numberofparticlesused++;
3058  }
3059 
3060  ((TH1F*)fDaughterHistogramArray[2][0][12])->Fill(numberofparticles);
3061  ((TH1F*)fDaughterHistogramArray[2][1][12])->Fill(numberofparticlesused);
3062  return;
3063 }
3064 //-------------------------------------------------------------------------------------
3065 void AliAnalysisTaskSEB0toDStarPi::B0PionSelection(AliAODEvent* aodEvent, AliAODVertex *primaryVertex, Double_t bz, TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, AliAODMCHeader * header){
3066 
3067  //we keep track of the number of particles we could use and how many we actually use after cuts
3068  Int_t numberofparticles = 0;
3069  Int_t numberofparticlesused = 0;
3070  Int_t iClonesArray = 0;
3071 
3072  TString fillthis = "";
3073 
3074  //we loop over all tracks in the event
3075  for (Int_t i=0; i<aodEvent->GetNumberOfTracks(); i++){
3076  AliAODTrack* aodTrack = dynamic_cast<AliAODTrack*>(aodEvent->GetTrack(i));
3077  if(!aodTrack) AliFatal("Not a standard AOD");
3078 
3079  //quick quality cut
3080  if(aodTrack->GetITSNcls() < 1) continue;
3081  if(aodTrack->GetTPCNcls() < 1) continue;
3082  if(aodTrack->GetStatus()&AliESDtrack::kITSpureSA) continue;
3083  if(!(aodTrack->GetStatus()&AliESDtrack::kITSin)) continue;
3084  if(aodTrack->GetID() < 0) continue;
3085  Double_t covtest[21];
3086  if(!aodTrack->GetCovarianceXYZPxPyPz(covtest)) continue;
3087 
3088 
3089  Int_t mcLabelParticle = -1;
3090  Int_t pdgParticle = -1;
3091  mcLabelParticle = aodTrack->GetLabel();
3092 
3093  numberofparticles++;
3094 
3095  // we fill histograms with information of the track
3096  Double_t pt_track = aodTrack->Pt();
3097  Double_t momentum_track = aodTrack->P();
3098  Int_t numberOfITS = aodTrack->GetITSNcls();
3099  Int_t numberOfTPC = aodTrack->GetTPCNcls();
3100  Double_t nSigmaTPC = 0;
3101  Double_t nSigmaTOF = 0;
3102  Int_t pionPIDnumber = 2;
3103  Int_t kaonPIDnumber = 3;
3104  Int_t TPCok = 0;
3105  Int_t TOFok = 0;
3106 
3107  AliAODPidHF* trackPIDHF = (AliAODPidHF*)fCuts->GetPidHF();
3108  TPCok = trackPIDHF->GetnSigmaTPC(aodTrack, pionPIDnumber, nSigmaTPC);
3109  TOFok = trackPIDHF->GetnSigmaTOF(aodTrack, pionPIDnumber, nSigmaTOF);
3110 
3111  AliExternalTrackParam particleTrack;
3112  particleTrack.CopyFromVTrack(aodTrack);
3113  Double_t d0[2],covd0[3];
3114  particleTrack.PropagateToDCA(primaryVertex,bz,100.,d0,covd0);
3115 
3116 
3117  //we check if the particle is a signal track
3118  Bool_t isDesiredCandidate = kFALSE;
3119  if(fUseMCInfo){
3120  TMatrix &particleMatrix = *B0toDStarPiLabelMatrix;
3121  for (Int_t k = 0; k < B0toDStarPiLabelMatrix->GetNrows(); ++k){
3122  if(mcLabelParticle == (Int_t)particleMatrix(k,0)){
3123  isDesiredCandidate = kTRUE;
3124  break;
3125  }
3126  }
3127  }
3128 
3129  if(fUseMCInfo){
3130  if(IsTrackInjected(aodTrack,header,mcTrackArray) && !isDesiredCandidate && fQuickSignalAnalysis == 2) continue;
3131  }
3132 
3133 
3134  Int_t daughterType = 3;
3135 
3136  Int_t histType = 0;
3137  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3138  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3139  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3140  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3141 
3142  for (Int_t j = 0; j < 10; ++j)
3143  {
3144  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3145 
3146  }
3147 
3148  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3149  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3150  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3151  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3152 
3153  if(isDesiredCandidate)
3154  {
3155  histType = 1;
3156  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3157  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3158  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3159  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3160 
3161  for (Int_t j = 0; j < 10; ++j)
3162  {
3163  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3164 
3165  }
3166 
3167  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3168  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3169  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3170  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3171  }
3172 
3173  //we apply a number of cuts on the particle
3174  Bool_t bCut = kFALSE;
3175 
3176  //we apply a PID cut, 2 is used to indicate we look for a pion
3177  if(!(fCuts->SelectPID(aodTrack,2))){
3178  if(isDesiredCandidate) {
3179  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(2);
3180  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(2);
3181  bCut = kTRUE;
3182  }
3183 
3184  if(aodTrack->GetITSNcls() < fCuts->GetMinITSNclsB0Pion()){
3185  if(isDesiredCandidate) {
3186  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(3);
3187  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(3);
3188  bCut = kTRUE;
3189  }
3190 
3191  if(aodTrack->GetTPCNcls() < fCuts->GetMinTPCNclsB0Pion()){
3192  if(isDesiredCandidate) {
3193  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(4);
3194  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(4);
3195  bCut = kTRUE;
3196  }
3197 
3198  if(fCuts->UseITSRefitB0Pion()==kTRUE){
3199  if(!(aodTrack->GetStatus()&AliESDtrack::kITSrefit)) {
3200  if(isDesiredCandidate) {
3201  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(5);
3202  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(5);
3203  bCut = kTRUE;
3204  }
3205  }
3206 
3207  if(fCuts->UseTPCRefitB0Pion()==kTRUE){
3208  if((!(aodTrack->GetStatus()&AliESDtrack::kTPCrefit))) {
3209  if(isDesiredCandidate) {
3210  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(6);
3211  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(6);
3212  bCut = kTRUE;
3213  }
3214  }
3215 
3216  if(fCuts->UseFilterBitB0Pion()==kTRUE){
3217  if(!(aodTrack->TestFilterMask(BIT(fCuts->GetFilterBitB0Pion())))) {
3218  if(isDesiredCandidate) {
3219  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(7);
3220  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(7);
3221  bCut = kTRUE;
3222  }
3223  }
3224 
3225 
3226  if(aodTrack->Pt() < fCuts->GetMinPtB0Pion()){
3227  if(isDesiredCandidate) {
3228  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(8);
3229  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(8);
3230  bCut = kTRUE;
3231  }
3232 
3233 
3234  if(TMath::Abs(d0[0]) < fCuts->GetMind0B0Pion()){
3235  if(isDesiredCandidate) {
3236  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(12);
3237  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(12);
3238  bCut = kTRUE;
3239  }
3240 
3241  if(TMath::Abs(aodTrack->Eta()) > fCuts->GetMaxAbsEtaB0Pion()){
3242  if(isDesiredCandidate) {
3243  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(9);
3244  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(9);
3245  bCut = kTRUE;
3246  }
3247 
3248  Bool_t bHardSelectionArrayITS[7] = {kFALSE};
3249  fCuts->GetHardSelectionArrayITSB0Pion(bHardSelectionArrayITS);
3250  Bool_t bSoftSelectionArrayITS[7] = {kFALSE};
3251  fCuts->GetSoftSelectionArrayITSB0Pion(bSoftSelectionArrayITS);
3252 
3253  Bool_t bHardITSPass = kTRUE;
3254  for (Int_t j = 0; j < 7; ++j)
3255  {
3256  if(bHardSelectionArrayITS[j])
3257  {
3258  if(!aodTrack->HasPointOnITSLayer(j)) bHardITSPass = kFALSE;
3259  }
3260  }
3261 
3262  Int_t nCounterSoftSelection = 0;
3263  Bool_t bSoftITSPass = kTRUE;
3264  for (Int_t j = 0; j < 7; ++j)
3265  {
3266  if(bSoftSelectionArrayITS[j])
3267  {
3268  if(aodTrack->HasPointOnITSLayer(j)) nCounterSoftSelection++;
3269  }
3270  }
3271  if(nCounterSoftSelection < fCuts->GetNSoftITSCutB0Pion()) bSoftITSPass = kFALSE;
3272 
3273  if(!bHardITSPass){
3274  if(isDesiredCandidate) {
3275  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(10);
3276  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(10);
3277  bCut = kTRUE;
3278  }
3279 
3280  if(!bSoftITSPass){
3281  if(isDesiredCandidate) {
3282  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(11);
3283  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(11);
3284  bCut = kTRUE;
3285  }
3286 
3287 
3288  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) bCut = kTRUE;
3289 
3290  if(bCut) {
3291  if(isDesiredCandidate) {
3292  ((TH1F*)fDaughterHistogramArrayExtra[3][1])->Fill(0);
3293  } else ((TH1F*)fDaughterHistogramArrayExtra[3][0])->Fill(0);
3294  continue;
3295  }
3296 
3297  //we fill histograms with track information of the tracks that pass the cuts
3298  histType = 2;
3299  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3300  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3301  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3302  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3303 
3304  for (Int_t j = 0; j < 10; ++j)
3305  {
3306  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3307 
3308  }
3309 
3310  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3311  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3312  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3313  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3314 
3315  if(isDesiredCandidate)
3316  {
3317  histType = 3;
3318  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
3319  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
3320  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
3321  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
3322 
3323  for (Int_t j = 0; j < 10; ++j)
3324  {
3325  if(aodTrack->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
3326 
3327  }
3328 
3329  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
3330  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
3331  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
3332  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0[0]);
3333  }
3334 
3335 
3336  fB0PionTracks->push_back(i);
3337  numberofparticlesused++;
3338  }
3339 
3340  ((TH1F*)fDaughterHistogramArray[3][0][12])->Fill(numberofparticles);
3341  ((TH1F*)fDaughterHistogramArray[3][1][12])->Fill(numberofparticlesused);
3342  return;
3343 }
3344 //-------------------------------------------------------------------------------------
3345 void AliAnalysisTaskSEB0toDStarPi::D0Selection(AliAODEvent* aodEvent, AliAODVertex *primaryVertex, Double_t bz,TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, TClonesArray * D0TracksFromFriendFile, AliAODMCHeader * header){
3346 
3347  TString fillthis = "";
3348 
3350 
3351  //next we loop over all the D0 candidates
3352  for (Int_t j = 0; j < D0TracksFromFriendFile->GetEntriesFast(); j++)
3353  {
3354 
3355  //we get the track of the D0
3356  AliAODRecoDecayHF2Prong * trackD0 = (AliAODRecoDecayHF2Prong*)(D0TracksFromFriendFile->At(j));
3357  if(!trackD0) {std::cout << "found none" << std::endl; continue;}
3358  if(trackD0 == nullptr) {std::cout << "found nullptr" << std::endl; continue;}
3359 
3360  if(!(vHF->FillRecoCand(aodEvent,trackD0))) //Fill the data members of the candidate only if they are empty.
3361  {
3362  fCEvents->Fill(12); //monitor how often this fails
3363  continue;
3364  }
3365 
3366  AliAODTrack * trackFirstDaughter = (AliAODTrack*)(trackD0->GetDaughter(0));
3367  AliAODTrack * trackSecondDaughter = (AliAODTrack*)(trackD0->GetDaughter(1));
3368  if(!D0FirstDaughterSelection(trackFirstDaughter, primaryVertex, bz, mcTrackArray, B0toDStarPiLabelMatrix,header)) continue;
3369  if(!D0SecondDaughterSelection(trackSecondDaughter, primaryVertex, bz, mcTrackArray, B0toDStarPiLabelMatrix,header)) continue;
3370 
3371 
3372  AliAODVertex *vertexMother = (AliAODVertex*)trackD0->GetSecondaryVtx();
3373 
3374  //we save the pdgcode of the used particle and its mother and check if it is a desired candidate
3375  Int_t pdgCodeMother = -1;
3376  Float_t pdgCodeGrandMother = -1;
3377  Bool_t isDesiredCandidate = kFALSE;
3378  Int_t motherType, histType;
3379  motherType = 0;
3380  Int_t mcLabelD0 = -1;
3381 
3382  if(fUseMCInfo)
3383  {
3384  mcLabelD0 = MatchCandidateToMonteCarlo(421,trackD0,mcTrackArray,B0toDStarPiLabelMatrix);
3385 
3386  if(mcLabelD0 >= 0)
3387  {
3388  isDesiredCandidate = kTRUE;
3389 
3390  Int_t mcLabelFirstTrack = -1;
3391  mcLabelFirstTrack = trackFirstDaughter->GetLabel();
3392 
3393  if(mcLabelFirstTrack >= 0)
3394  {
3395  AliAODMCParticle *mcParticleFirstTrack = (AliAODMCParticle*)mcTrackArray->At(mcLabelFirstTrack);
3396  AliAODMCParticle *mcMotherParticle = (AliAODMCParticle*)mcTrackArray->At(mcLabelD0);
3397 
3398  if(mcParticleFirstTrack && mcMotherParticle)
3399  {
3400  pdgCodeMother = mcMotherParticle->GetPdgCode();
3401 
3402  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()));
3403  ((TH1F*)fMotherHistogramArrayExtra[motherType][4])->Fill(vertex_distance);
3404 
3405  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()));
3406  ((TH1F*)fMotherHistogramArrayExtra[motherType][6])->Fill(momentum_resolution);
3407  }
3408  }
3409  }
3410  }
3411 
3412  // We fill the histograms
3413  histType = 0;
3414  FillD0Histograms(trackD0, primaryVertex, bz, motherType, histType);
3415  if(isDesiredCandidate && fUseMCInfo){
3416  histType = 1;
3417  FillD0Histograms(trackD0, primaryVertex, bz, motherType, histType,pdgCodeMother);
3418  }
3419 
3420  // Here we apply cuts on the particle
3421  Bool_t cutMother = kFALSE;
3422 
3423  Bool_t bCutArray[29] = {0};
3424  Int_t cutReturnValue = fCuts->IsD0forD0ptbinSelected(trackD0, 0, aodEvent, bCutArray);
3425  if(cutReturnValue == -1) cutMother = kTRUE;
3426  if(cutReturnValue == 0) cutMother = kTRUE;
3427 
3428 
3429  if(fGetCutInfo == kTRUE)
3430  {
3431  for (Int_t k = 0; k < 29; ++k)
3432  {
3433  if (bCutArray[k] == kTRUE){
3434  if(isDesiredCandidate){
3435  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(k+1);
3436  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(k+1);
3437  cutMother = kTRUE;
3438  }
3439  }
3440  }
3441 
3442 
3443  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) cutMother = kTRUE;
3444 
3445  if(cutMother){
3446  if(isDesiredCandidate){
3447  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(0);
3448  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(0);
3449  // delete vertexMother; vertexMother = nullptr;
3450  // delete trackD0; trackD0 = nullptr;
3451  continue;
3452  }
3453 
3454  // We fill the cut histograms
3455  histType = 2;
3456  FillD0Histograms(trackD0, primaryVertex, bz, motherType, histType);
3457  if(isDesiredCandidate && fUseMCInfo){
3458  histType = 3;
3459  FillD0Histograms(trackD0, primaryVertex, bz, motherType, histType,pdgCodeMother);
3460  }
3461 
3462  //we save the location of the D0 candidate
3463  fD0Tracks->push_back(j);
3464  }
3465 
3466  delete vHF; vHF = nullptr;
3467  return;
3468 }
3469 //-------------------------------------------------------------------------------------
3470 void AliAnalysisTaskSEB0toDStarPi::DStarAndB0Selection(AliAODEvent* aodEvent, AliAODVertex *primaryVertex, Double_t bz,TClonesArray * mcTrackArray, TMatrix * B0toDStarPiLabelMatrix, TClonesArray * D0TracksFromFriendFile, AliAODMCHeader * header){
3471 
3472  TString fillthis = "";
3473 
3474  //we loop over all the DStar pion candidates
3475  for (Int_t i = 0; i < (Int_t)fDStarPionTracks->size(); i++)
3476  {
3477  //Save current Object count
3478  Int_t ObjectNumber = TProcessID::GetObjectCount();
3479 
3480  //we get the track of the DStar pion
3481  AliAODTrack * trackFirstDaughter = (AliAODTrack*)(aodEvent->GetTrack(fDStarPionTracks->at(i)));
3482  if(!trackFirstDaughter) continue;
3483 
3484  Int_t pdgD0 = 421;
3485  if(trackFirstDaughter->Charge() == -1) pdgD0 = -421;
3486 
3487  //next we loop over all the D0 candidates
3488  for (Int_t j = 0; j < (Int_t)fD0Tracks->size(); j++)
3489  {
3490  //we get the track of the D0
3491  AliAODRecoDecayHF2Prong * trackSecondDaughter = (AliAODRecoDecayHF2Prong*)(D0TracksFromFriendFile->At(fD0Tracks->at(j)));
3492  if(!trackSecondDaughter) {std::cout << "found none" << std::endl; continue;}
3493  if(trackSecondDaughter == nullptr) {std::cout << "found nullptr" << std::endl; continue;}
3494 
3495  //we check if the IDs of the tracks are different
3496  if(trackFirstDaughter->GetID() == trackSecondDaughter->GetProngID(0) || trackFirstDaughter->GetID() == trackSecondDaughter->GetProngID(1)) continue;
3497 
3498  //we check if the charges of the tracks are correct
3499  if(trackFirstDaughter->Charge() == trackSecondDaughter->Charge() || TMath::Abs(trackFirstDaughter->Charge() + trackSecondDaughter->Charge()) != 1) continue;
3500 
3501 
3502  //we check if the pions have the same charge
3503  if(trackFirstDaughter->Charge() == -1 && ((AliAODTrack*)trackSecondDaughter->GetDaughter(1))->Charge() != -1) continue;
3504  if(trackFirstDaughter->Charge() == 1 && ((AliAODTrack*)trackSecondDaughter->GetDaughter(0))->Charge() != 1) continue;
3505 
3506  //we apply a PID cut on the D0 daughters
3507 
3508  if(trackFirstDaughter->Charge()==1)
3509  {
3510  if(!(fCuts->SelectPID(((AliAODTrack*)trackSecondDaughter->GetDaughter(0)),2))) continue;
3511  if(!(fCuts->SelectPID(((AliAODTrack*)trackSecondDaughter->GetDaughter(1)),3))) continue;
3512  } else if (trackFirstDaughter->Charge()==-1){
3513  if(!(fCuts->SelectPID(((AliAODTrack*)trackSecondDaughter->GetDaughter(0)),3))) continue;
3514  if(!(fCuts->SelectPID(((AliAODTrack*)trackSecondDaughter->GetDaughter(1)),2))) continue;
3515  }
3516 
3517  //location DStar pion rotation around PV
3518 
3519  //we make an estimate of the DStar vertex and make an initial broad invariant mass window cut
3520  AliExternalTrackParam DStarPionTrackParam;
3521  DStarPionTrackParam.CopyFromVTrack(trackFirstDaughter);
3522  AliExternalTrackParam D0TrackParam;
3523  D0TrackParam.CopyFromVTrack(trackSecondDaughter);
3524 
3525  // we calculate the vertex of the mother candidate
3526  TObjArray tracksTestVertex;
3527 
3528  tracksTestVertex.Add(&DStarPionTrackParam);
3529  tracksTestVertex.Add(&D0TrackParam);
3530 
3531  Double_t dispersionTest = 0;
3532  AliAODVertex *testVertex = RecalculateVertex(primaryVertex,&tracksTestVertex,bz,dispersionTest);
3533  if(!testVertex) {delete testVertex; testVertex = nullptr; continue;}
3534 
3535  Double_t d0z0Test[2],covd0z0Test[3];
3536 
3537  //DStar creation with the new vertex
3538  DStarPionTrackParam.PropagateToDCA(testVertex,bz,100.,d0z0Test,covd0z0Test);
3539  D0TrackParam.PropagateToDCA(testVertex,bz,100.,d0z0Test,covd0z0Test);
3540  delete testVertex; testVertex = nullptr;
3541 
3542  Double_t pdgMassPion = TDatabasePDG::Instance()->GetParticle(211)->Mass();
3543  Double_t pdgMassD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
3544  Double_t pdgMassDStar = TDatabasePDG::Instance()->GetParticle(413)->Mass();
3545 
3546  Double_t energyDStarPion = pdgMassPion*pdgMassPion + DStarPionTrackParam.Px()*DStarPionTrackParam.Px()+DStarPionTrackParam.Py()*DStarPionTrackParam.Py()+DStarPionTrackParam.Pz()*DStarPionTrackParam.Pz();
3547  Double_t energyD0 = pdgMassD0*pdgMassD0 + D0TrackParam.Px()*D0TrackParam.Px()+D0TrackParam.Py()*D0TrackParam.Py()+D0TrackParam.Pz()*D0TrackParam.Pz();
3548  Double_t energySum = TMath::Sqrt(energyDStarPion) + TMath::Sqrt(energyD0);
3549 
3550  Double_t pxDStarTest = DStarPionTrackParam.Px() + D0TrackParam.Px();
3551  Double_t pyDStarTest = DStarPionTrackParam.Py() + D0TrackParam.Py();
3552  Double_t pzDStarTest = DStarPionTrackParam.Pz() + D0TrackParam.Pz();
3553  Double_t p2DStarTest = pxDStarTest*pxDStarTest + pyDStarTest*pyDStarTest + pzDStarTest*pzDStarTest;
3554 
3555  Double_t invMassDStarTest = TMath::Sqrt(energySum*energySum-p2DStarTest);
3556 
3557  //we use a mass window twice the size of the final cut. We cut here to speed up the code.
3558  Int_t nCutIndex = 0;
3559  Bool_t bCutArrayTemp[29];
3560  Double_t cutVariableValue = TMath::Abs(invMassDStarTest-pdgMassDStar)/2.0;
3561  Bool_t bPassedCut = fCuts->ApplyCutOnVariableDStarforDStarptbin(nCutIndex,0,cutVariableValue,bCutArrayTemp);
3562  if(!bPassedCut) continue;
3563 
3564  // Apply an impact product cut. We cut here to speed up the code.
3565  AliExternalTrackParam firstTrack;
3566  firstTrack.CopyFromVTrack(trackFirstDaughter);
3567  AliExternalTrackParam secondTrack;
3568  secondTrack.CopyFromVTrack(trackSecondDaughter);
3569 
3570  Double_t d0z0DStar[2],covd0z0DStar[3],d0DStar[2],d0errDStar[2];
3571 
3572  firstTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0DStar,covd0z0DStar);
3573  d0DStar[0] = d0z0DStar[0];
3574  d0errDStar[0] = TMath::Sqrt(covd0z0DStar[0]);
3575  secondTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0DStar,covd0z0DStar);
3576  d0DStar[1] = d0z0DStar[0];
3577  d0errDStar[1] = TMath::Sqrt(covd0z0DStar[0]);
3578 
3579  nCutIndex = 10;
3580  cutVariableValue = d0DStar[0] * d0DStar[1];
3581  bPassedCut = fCuts->ApplyCutOnVariableDStarforDStarptbin(nCutIndex,0,cutVariableValue,bCutArrayTemp);
3582  if(!bPassedCut) continue;
3583 
3584  //we loop over all the B0 pion candidates
3585  for (Int_t k = 0; k < (Int_t)fB0PionTracks->size(); k++)
3586  {
3587  //we get the track of the first daughter
3588  AliAODTrack * trackB0Pion = dynamic_cast<AliAODTrack*>(aodEvent->GetTrack(fB0PionTracks->at(k)));
3589  if(!trackB0Pion) continue;
3590 
3591  //we check if the IDs of the tracks are different
3592  AliAODTrack* twoProngdaughter0 = (AliAODTrack*)trackSecondDaughter->GetDaughter(0);
3593  AliAODTrack* twoProngdaughter1 = (AliAODTrack*)trackSecondDaughter->GetDaughter(1);
3594  UShort_t idProng0 = twoProngdaughter0->GetID();
3595  UShort_t idProng1 = twoProngdaughter1->GetID();
3596 
3597  if(trackB0Pion->GetID() == trackFirstDaughter->GetID() || trackB0Pion->GetID() == idProng0 || trackB0Pion->GetID() == idProng1) continue;
3598 
3599  //we check if the charges of the tracks are correct // later change this for like sign analysis.
3600  Bool_t bSameSign = kFALSE;
3601  if(trackB0Pion->Charge() == (trackSecondDaughter->Charge() + trackFirstDaughter->Charge()) && trackB0Pion->Charge() + (trackSecondDaughter->Charge() + trackFirstDaughter->Charge()) != 0) bSameSign = kTRUE;
3602 
3603  //location B0 pion rotation around PV
3604  for (Int_t iRot = 0; iRot < fNumberOfRotations + 1; ++iRot)
3605  {
3606  //we create a copy of the track that we will rotate
3607  AliAODTrack * trackB0PionRotated = new AliAODTrack(*trackB0Pion);
3608 
3609  //for iRot == 0, we use the original unrotated track. For iRot > 0 we rotate the track and set the label to -1
3610  if (iRot != 0)
3611  {
3612  //should still check if track is already at PV
3613  Double_t dPhiRotated = trackB0PionRotated->Phi() + TMath::Pi() - (TMath::Pi() * fDegreePerRotation * fNumberOfRotations / (180.0 * 2.0)) + (TMath::Pi() * fDegreePerRotation * iRot / 180.0);
3614  trackB0PionRotated->SetPhi(dPhiRotated);
3615  }
3616 
3617 
3619  //
3620  // DStar Reconstruction
3621  //
3623 
3624  //we use the DStar pion, B0 pion, and D0 tracks to reconstruct the vertex for the B0 and DStar decay
3625  AliExternalTrackParam thirdTrack;
3626  thirdTrack.CopyFromVTrack(trackB0PionRotated);
3627 
3628  // we calculate the vertex
3629  TObjArray daughterTracksWithRecalculation;
3630 
3631  daughterTracksWithRecalculation.Add(&firstTrack);
3632  daughterTracksWithRecalculation.Add(&secondTrack);
3633  daughterTracksWithRecalculation.Add(&thirdTrack);
3634 
3635  Double_t dispersion = 0;
3636  AliAODVertex *vertexMother = RecalculateVertex(primaryVertex,&daughterTracksWithRecalculation,bz,dispersion);
3637  if(!vertexMother) {
3638  delete vertexMother; vertexMother = nullptr;
3639  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3640  continue;}
3641 
3642 
3643  if(vertexMother->GetNDaughters()!=2)
3644  {
3645  std::cout << "bad reconstruction - number of daughters for vertex is incorrect" << std::endl;
3646  delete vertexMother; vertexMother = nullptr;
3647  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3648  continue;
3649  }
3650 
3651  Double_t xdummyDStar=0.,ydummyDStar=0.,eDStar[2];
3652  // Double_t d0z0DStar[2],covd0z0DStar[3],d0DStar[2],d0errDStar[2];
3653 
3654  //DStar creation with the new vertex
3655  firstTrack.PropagateToDCA(vertexMother,bz,100.,d0z0DStar,covd0z0DStar);
3656  secondTrack.PropagateToDCA(vertexMother,bz,100.,d0z0DStar,covd0z0DStar);
3657 
3658  Double_t pxDStar[2],pyDStar[2],pzDStar[2];
3659  pxDStar[0] = firstTrack.Px();
3660  pyDStar[0] = firstTrack.Py();
3661  pzDStar[0] = firstTrack.Pz();
3662  pxDStar[1] = secondTrack.Px();
3663  pyDStar[1] = secondTrack.Py();
3664  pzDStar[1] = secondTrack.Pz();
3665 
3666  Double_t xyz_track1[3];
3667  xyz_track1[0] = firstTrack.GetX();
3668  firstTrack.GetYAt(xyz_track1[0],bz,xyz_track1[1]);
3669  firstTrack.GetZAt(xyz_track1[0],bz,xyz_track1[2]);
3670 
3671  Double_t xyz_track2[3];
3672  xyz_track2[0] = secondTrack.GetX();
3673  secondTrack.GetYAt(xyz_track2[0],bz,xyz_track2[1]);
3674  secondTrack.GetZAt(xyz_track2[0],bz,xyz_track2[2]);
3675 
3676  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]));
3677 
3678  // firstTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0DStar,covd0z0DStar);
3679  // d0DStar[0] = d0z0DStar[0];
3680  // d0errDStar[0] = TMath::Sqrt(covd0z0DStar[0]);
3681  // secondTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0DStar,covd0z0DStar);
3682  // d0DStar[1] = d0z0DStar[0];
3683  // d0errDStar[1] = TMath::Sqrt(covd0z0DStar[0]);
3684 
3685  //Apply cuts on DCA
3686  Double_t dcaDStarPionD0 = secondTrack.GetDCA(&firstTrack,bz,xdummyDStar,ydummyDStar);
3687  Double_t dcaDStarPionB0Pion = secondTrack.GetDCA(&thirdTrack,bz,xdummyDStar,ydummyDStar);
3688  Double_t dcaB0PionD0 = thirdTrack.GetDCA(&firstTrack,bz,xdummyDStar,ydummyDStar);
3689 
3690  if(dcaDStarPionD0 > fCuts->GetMaxDCADStarPionD0())
3691  {
3692  delete vertexMother; vertexMother = nullptr;
3693  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3694  continue;
3695  }
3696  if(dcaDStarPionB0Pion > fCuts->GetMaxDCADStarPionB0Pion())
3697  {
3698  delete vertexMother; vertexMother = nullptr;
3699  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3700  continue;
3701  }
3702  if(dcaB0PionD0 > fCuts->GetMaxDCAB0PionD0())
3703  {
3704  delete vertexMother; vertexMother = nullptr;
3705  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3706  continue;
3707  }
3708 
3709  Double_t dcaCombined = TMath::Sqrt(TMath::Abs(dcaDStarPionD0) + TMath::Abs(dcaDStarPionB0Pion) + TMath::Abs(dcaB0PionD0));
3710  if(dcaCombined > fCuts->GetMaxDCACombined())
3711  {
3712  delete vertexMother; vertexMother = nullptr;
3713  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3714  continue;
3715  }
3716 
3717  Short_t chargeDStar = trackFirstDaughter->Charge() + trackSecondDaughter->Charge();
3718  AliAODVertex * vertexDStar = new AliAODVertex(*vertexMother);
3719  if(!vertexDStar)
3720  {
3721  std::cout << "no dstar vertex" << std::endl;
3722  delete vertexMother; vertexMother = nullptr;
3723  delete vertexDStar; vertexDStar = nullptr;
3724  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3725  continue;
3726 
3727  }
3728 
3729  Int_t nProngsDStar = 2;
3730  AliAODRecoDecayHF2Prong trackDStar(vertexDStar,pxDStar,pyDStar,pzDStar,d0DStar,d0errDStar,distanceAtVertex);
3731  if(!&trackDStar)
3732  {
3733  delete vertexMother; vertexMother = nullptr;
3734  delete vertexDStar; vertexDStar = nullptr;
3735  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3736  continue;
3737  }
3738 
3739  trackDStar.SetCharge(chargeDStar);
3740 
3741  UShort_t idDStar[2];
3742  idDStar[0]= trackFirstDaughter->GetID();
3743  idDStar[1]= 0;
3744 
3745  UInt_t prongsDStar[2];
3746  prongsDStar[0] = 211;
3747  prongsDStar[1] = 421;
3748 
3749 
3750  if(vertexDStar->GetNDaughters()!=2)
3751  {
3752  std::cout << "bad reconstruction 2 - number of daughters for vertex is incorrect" << std::endl;
3753  delete vertexMother; vertexMother = nullptr;
3754  delete vertexDStar; vertexDStar = nullptr;
3755  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3756  continue;
3757  }
3758 
3759  trackDStar.GetSecondaryVtx()->AddDaughter(trackFirstDaughter);
3760  trackDStar.GetSecondaryVtx()->AddDaughter(trackSecondDaughter);
3761  trackDStar.SetPrimaryVtxRef((AliAODVertex*)aodEvent->GetPrimaryVertex());
3762  trackDStar.SetProngIDs(2,idDStar);
3763 
3764 
3766  //
3767  // BO Reconstruction
3768  //
3770 
3771  //location B0 pion rotation around SV
3772 
3773  // Use the new DStar candidate and the new vertex to create the B0 candidate
3774  Double_t xdummy=0.,ydummy=0.,dca,e[2];
3775  Double_t d0z0[2],covd0z0[3],d0[2],d0err[2];
3776 
3777  AliExternalTrackParam fourthTrack;
3778  fourthTrack.CopyFromVTrack(&trackDStar);
3779 
3780  thirdTrack.PropagateToDCA(vertexMother,bz,100.,d0z0,covd0z0);
3781  fourthTrack.PropagateToDCA(vertexMother,bz,100.,d0z0,covd0z0);
3782 
3783  Double_t px[2],py[2],pz[2];
3784  px[0] = thirdTrack.Px();
3785  py[0] = thirdTrack.Py();
3786  pz[0] = thirdTrack.Pz();
3787  px[1] = fourthTrack.Px();
3788  py[1] = fourthTrack.Py();
3789  pz[1] = fourthTrack.Pz();
3790 
3791  UInt_t prongs[2];
3792  prongs[0] = 211;
3793  prongs[1] = 413;
3794 
3795  UShort_t id[2];
3796  id[0]= thirdTrack.GetID();
3797  id[1]= 0;
3798 
3799  thirdTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
3800  d0[0] = d0z0[0];
3801  d0err[0] = TMath::Sqrt(covd0z0[0]);
3802  fourthTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
3803  d0[1] = d0z0[0];
3804  d0err[1] = TMath::Sqrt(covd0z0[0]);
3805 
3806  dca = fourthTrack.GetDCA(&thirdTrack,bz,xdummy,ydummy);
3807 
3808 
3809  Short_t chargeMother = trackFirstDaughter->Charge() + trackDStar.Charge();
3810  Int_t nProngsB0 = 2;
3811  AliAODRecoDecayHF2Prong trackB0(vertexMother,px,py,pz,d0,d0err,dca);
3812  if(!&trackB0)
3813  {
3814  delete vertexMother; vertexMother = nullptr;
3815  delete vertexDStar; vertexDStar = nullptr;
3816  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3817  continue;
3818  }
3819 
3820  trackB0.SetCharge(chargeMother);
3821 
3822  trackB0.GetSecondaryVtx()->AddDaughter(trackB0PionRotated);
3823  trackB0.GetSecondaryVtx()->AddDaughter(&trackDStar);
3824  trackB0.SetPrimaryVtxRef((AliAODVertex*)aodEvent->GetPrimaryVertex());
3825  trackB0.SetProngIDs(2,id);
3826 
3827  // Fiducial cut
3828  if(TMath::Abs(trackB0.Y(511)) > 0.8) {
3829  delete vertexMother; vertexMother = nullptr;
3830  delete vertexDStar; vertexDStar = nullptr;
3831  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3832  continue;
3833  }
3834 
3836  //
3837  // Cuts
3838  //
3840 
3841  // We check if the signal is injected, optionally we can reject injected signals
3842  Bool_t fCheckInjected = kTRUE; //temp
3843  Bool_t fRemoveInjected = kFALSE; //temp
3844  Bool_t bIsInjected = kFALSE;
3845  if(fUseMCInfo){
3846  if(fCheckInjected) bIsInjected = IsCandidateInjected(&trackB0, header,mcTrackArray);
3847  if(fCheckInjected && fRemoveInjected && bIsInjected) {
3848  delete vertexMother; vertexMother = nullptr;
3849  delete vertexDStar; vertexDStar = nullptr;
3850  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3851  continue;
3852  }
3853  }
3854 
3855  // We check if the B0 candidate is a true signal in Monte Carlo
3856  Bool_t isDesiredCandidate = kFALSE;
3857  Int_t mcLabelB0 = -1;
3858  Int_t mcLabelDStar = -1;
3859  fillthis = "";
3860  Int_t motherType, histType;
3861  motherType = 1;
3862 
3863  if(fUseMCInfo)
3864  {
3865  mcLabelDStar = MatchCandidateToMonteCarlo(413,&trackDStar,mcTrackArray,B0toDStarPiLabelMatrix);
3866  mcLabelB0 = MatchCandidateToMonteCarlo(511,&trackB0,mcTrackArray,B0toDStarPiLabelMatrix);
3867 
3868  if (mcLabelB0 >= 0 && mcLabelDStar >= 0 && trackB0PionRotated->GetLabel() >= 0 && iRot == 0)
3869  {
3870  AliAODMCParticle *mcTrackDStarPion = (AliAODMCParticle*)mcTrackArray->At(trackB0PionRotated->GetLabel());
3871  AliAODMCParticle *mcTrackDStar = (AliAODMCParticle*)mcTrackArray->At(mcLabelDStar);
3872  // DStar
3873  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()));
3874  ((TH1F*)fMotherHistogramArrayExtra[motherType][4])->Fill(vertex_distance);
3875 
3876  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()));
3877  ((TH1F*)fMotherHistogramArrayExtra[motherType][6])->Fill(momentum_resolution);
3878 
3879  isDesiredCandidate = kTRUE;
3880  }
3881  }
3882 
3883 
3884  // We fill the DStar histograms
3885  histType = 0;
3886  FillDStarAndB0Histograms(&trackDStar, primaryVertex, bz, motherType, histType);
3887  if(isDesiredCandidate && fUseMCInfo)
3888  {
3889  histType = 1;
3890  FillDStarAndB0Histograms(&trackDStar, primaryVertex, bz, motherType, histType);
3891  }
3892 
3893  // We apply cuts on the DStar
3894  Bool_t cutDStar = kFALSE;
3895 
3896  Bool_t bCutArrayDStar[29] = {0};
3897  Int_t cutReturnValueDStar = fCuts->IsDStarforDStarptbinSelected(&trackDStar, 0, aodEvent, bCutArrayDStar);
3898  if(cutReturnValueDStar == -1) cutDStar = kTRUE;
3899  if(cutReturnValueDStar == 0) cutDStar = kTRUE;
3900 
3901  Bool_t bCutArrayD0[39] = {0};
3902  Int_t cutReturnValueD0 = fCuts->IsD0forDStarptbinSelected(&trackDStar, 0, aodEvent, bCutArrayD0);
3903  if(cutReturnValueD0 == -1) cutDStar = kTRUE;
3904  if(cutReturnValueD0 == 0) cutDStar = kTRUE;
3905 
3906 
3907  if(fGetCutInfo == kTRUE)
3908  {
3909 
3910  for (Int_t n = 0; n < 29; ++n)
3911  {
3912  if(bCutArrayDStar[n] == kTRUE){
3913  if(isDesiredCandidate){
3914  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(n+1);
3915  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(n+1);
3916  cutDStar = kTRUE;
3917  }
3918  }
3919 
3920  for (Int_t n = 0; n < 39; ++n)
3921  {
3922  if(bCutArrayD0[n] == kTRUE){
3923  if(isDesiredCandidate){
3924  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(n+1+39);
3925  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(n+1+39);
3926  cutDStar = kTRUE;
3927  }
3928  }
3929  }
3930 
3931  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) cutDStar = kFALSE;
3932 
3933  if(cutDStar)
3934  {
3935  if(isDesiredCandidate)
3936  {
3937  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(0);
3938  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(0);
3939  delete vertexMother; vertexMother = nullptr;
3940  delete vertexDStar; vertexDStar = nullptr;
3941  delete trackB0PionRotated; trackB0PionRotated = nullptr;
3942  continue;
3943  }
3944 
3945  // We fill the cut histograms
3946  histType = 2;
3947  FillDStarAndB0Histograms(&trackDStar, primaryVertex, bz, motherType, histType);
3948  if(isDesiredCandidate && fUseMCInfo)
3949  {
3950  histType = 3;
3951  FillDStarAndB0Histograms(&trackDStar, primaryVertex, bz, motherType, histType);
3952  }
3953 
3955  //
3956  // BO Reconstruction
3957  //
3958  //
3960 
3961 
3962  //we get information about the reconstructed B0
3963  Double_t ptMother = trackB0.Pt();
3964 
3965  fillthis = "";
3966 
3967  motherType = 2;
3968  histType = 0;
3969 
3970  if(isDesiredCandidate)
3971  {
3972  AliAODMCParticle *mcTrackFirstDaughter = (AliAODMCParticle*)mcTrackArray->At(trackB0PionRotated->GetLabel());
3973  AliAODMCParticle *mcTrackB0 = (AliAODMCParticle*)mcTrackArray->At(mcLabelB0);
3974 
3975  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()));
3976  ((TH1F*)fMotherHistogramArrayExtra[motherType][4])->Fill(vertex_distance);
3977 
3978  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()));
3979  ((TH1F*)fMotherHistogramArrayExtra[motherType][6])->Fill(momentum_resolution);
3980  }
3981 
3982  if(!bSameSign)
3983  {
3984  // We fill the histograms
3985  histType = 0;
3986  FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
3987 
3988  if(isDesiredCandidate)
3989  {
3990  histType = 1;
3991  FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
3992  }
3993  }
3994 
3995 
3996  // We apply cuts
3997  Bool_t cutMother = kFALSE;
3998 
3999  Bool_t bCutArray[97] = {0};
4000  Int_t numberOfCuts = 97;
4001  Int_t cutReturnValue = fCuts->IsSelected(&trackB0, 0, aodEvent, bCutArray);
4002  if(cutReturnValue == -1) cutMother = kTRUE;
4003  if(cutReturnValue == 0) cutMother = kTRUE;
4004 
4005 
4006  // We save information about the cuts
4007  TString histName = "";
4008  Double_t invariantMassMother = trackB0.InvMass(2,prongs);
4009  Double_t pdgMassMother=TDatabasePDG::Instance()->GetParticle(511)->Mass();
4010  Double_t massWindow = fHistMassWindow; //GeV/c^2
4011  if(fGetCutInfo == kTRUE)
4012  {
4013  for (Int_t n = 0; n < 97; ++n)
4014  {
4015  if(bCutArray[n] == kTRUE){
4016  if(isDesiredCandidate){
4017  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(n+1);
4018  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(n+1);
4019  cutMother = kTRUE;
4020  }
4021  }
4022 
4023  if (TMath::Abs(invariantMassMother-pdgMassMother)<massWindow){
4024  for (Int_t l = 0; l < numberOfCuts; ++l) //total
4025  {
4026  if(bCutArray[l] == kFALSE) continue;
4027  for (Int_t j = 0; j < numberOfCuts; ++j)
4028  {
4029  if(bCutArray[j] == kFALSE) continue;
4030  if(isDesiredCandidate == kFALSE) histName ="cutEffectBackground";
4031  if(isDesiredCandidate == kTRUE) histName ="cutEffectSignal";
4032  ((TH2I*)(fOutputB0MC->FindObject(histName)))->Fill(l,j);
4033  }
4034  }
4035 
4036  for (Int_t l = 0; l < numberOfCuts; ++l) //unique
4037  {
4038  if(bCutArray[l] == kFALSE) continue;
4039  Bool_t bFill = kTRUE;
4040  for (Int_t j = 0; j < numberOfCuts; ++j)
4041  {
4042  if(l==j) continue;
4043  if(bCutArray[j] == kTRUE)
4044  {
4045  bFill = kFALSE;
4046  break;
4047  }
4048 
4049  }
4050  if(bFill == kTRUE)
4051  {
4052  if(isDesiredCandidate == kFALSE) histName ="cutEffectUniqueBackground";
4053  if(isDesiredCandidate == kTRUE) histName ="cutEffectUniqueSignal";
4054  ((TH1I*)(fOutputB0MC->FindObject(histName)))->Fill(l);
4055  }
4056  }
4057  }
4058  }
4059 
4060 
4061  if(!isDesiredCandidate && fQuickSignalAnalysis == 1) cutMother = kTRUE;
4062 
4063  if(cutMother)
4064  {
4065  if(isDesiredCandidate)
4066  {
4067  ((TH1F*)fMotherHistogramArrayExtra[motherType][1])->Fill(0);
4068  } else ((TH1F*)fMotherHistogramArrayExtra[motherType][0])->Fill(0);
4069  delete vertexMother; vertexMother = nullptr;
4070  delete vertexDStar; vertexDStar = nullptr;
4071  delete trackB0PionRotated; trackB0PionRotated = nullptr;
4072  continue;
4073  }
4074 
4075  // We save the DCA information
4076  TString name_dca_D0_DStarPion ="dca_D0_DStarPion";
4077  ((TH1F*)(fOutputB0MC->FindObject(name_dca_D0_DStarPion)))->Fill(dcaDStarPionD0);
4078 
4079  TString name_dca_D0_B0Pion ="dca_D0_B0Pion";
4080  ((TH1F*)(fOutputB0MC->FindObject(name_dca_D0_B0Pion)))->Fill(dcaB0PionD0);
4081 
4082  TString name_dca_DStarPion_B0Pion ="dca_DStarPion_B0Pion";
4083  ((TH1F*)(fOutputB0MC->FindObject(name_dca_DStarPion_B0Pion)))->Fill(dcaDStarPionB0Pion);
4084 
4085  TString name_dca_Combined ="dca_Combined";
4086  ((TH1F*)(fOutputB0MC->FindObject(name_dca_Combined)))->Fill(dcaCombined);
4087 
4088  if(isDesiredCandidate && fUseMCInfo)
4089  {
4090  TString name_dca_Signal_D0_DStarPion ="dca_Signal_D0_DStarPion";
4091  ((TH1F*)(fOutputB0MC->FindObject(name_dca_Signal_D0_DStarPion)))->Fill(dcaDStarPionD0);
4092 
4093  TString name_dca_Signal_D0_B0Pion ="dca_Signal_D0_B0Pion";
4094  ((TH1F*)(fOutputB0MC->FindObject(name_dca_Signal_D0_B0Pion)))->Fill(dcaB0PionD0);
4095 
4096  TString name_dca_Signal_DStarPion_B0Pion ="dca_Signal_DStarPion_B0Pion";
4097  ((TH1F*)(fOutputB0MC->FindObject(name_dca_Signal_DStarPion_B0Pion)))->Fill(dcaDStarPionB0Pion);
4098 
4099  TString name_dca_Signal_Combined ="dca_Signal_Combined";
4100  ((TH1F*)(fOutputB0MC->FindObject(name_dca_Signal_Combined)))->Fill(dcaCombined);
4101  }
4102 
4103 
4104  // Background analysis
4105  Bool_t bIsCorrelatedBackground = kFALSE;
4106  Bool_t bIsCorrelatedBackground511 = kFALSE;
4107  if(!bSameSign && fCheckBackground && fUseMCInfo && !isDesiredCandidate && iRot == 0)
4108  {
4109  Int_t mcLabelB0Pion = trackB0PionRotated->GetLabel();
4110  Int_t mcLabelDStarPion = trackFirstDaughter->GetLabel();
4111  Int_t mcLabelD0first = ((AliAODTrack*)trackSecondDaughter->GetDaughter(0))->GetLabel();
4112  Int_t mcLabelD0second = ((AliAODTrack*)trackSecondDaughter->GetDaughter(1))->GetLabel();
4113 
4114  if(mcLabelB0Pion >= 0 && mcLabelDStarPion >= 0 && mcLabelD0first >= 0 && mcLabelD0second >= 0)
4115  {
4116  AliAODMCParticle * mcB0Pion = (AliAODMCParticle*)mcTrackArray->At(mcLabelB0Pion);
4117  AliAODMCParticle * mcDStarPion = (AliAODMCParticle*)mcTrackArray->At(mcLabelDStarPion);
4118  AliAODMCParticle * mcD0first = (AliAODMCParticle*)mcTrackArray->At(mcLabelD0first);
4119  AliAODMCParticle * mcD0second = (AliAODMCParticle*)mcTrackArray->At(mcLabelD0second);
4120 
4121  if(mcB0Pion)
4122  {
4123  Int_t iterator = 0;
4124  while(mcB0Pion->GetMother() >= 0)
4125  {
4126  mcB0Pion = (AliAODMCParticle*)mcTrackArray->At(mcB0Pion->GetMother());
4127  fillthis="particle_pdgB0Pion";
4128  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(mcB0Pion->GetPdgCode()),iterator++);
4129  }
4130  }
4131 
4132  if(mcDStarPion)
4133  {
4134  Int_t iterator = 0;
4135  while(mcDStarPion->GetMother() >= 0)
4136  {
4137  mcDStarPion = (AliAODMCParticle*)mcTrackArray->At(mcDStarPion->GetMother());
4138  fillthis="particle_pdgB0Pion";
4139  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(mcDStarPion->GetPdgCode()),iterator++);
4140  }
4141  }
4142 
4143  if(mcD0first)
4144  {
4145  Int_t iterator = 0;
4146  while(mcD0first->GetMother() >= 0)
4147  {
4148  mcD0first = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4149  fillthis="particle_pdgD0First";
4150  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(mcD0first->GetPdgCode()),iterator++);
4151  }
4152  }
4153 
4154  if(mcD0second)
4155  {
4156  Int_t iterator = 0;
4157  while(mcD0second->GetMother() >= 0)
4158  {
4159  mcD0second = (AliAODMCParticle*)mcTrackArray->At(mcD0second->GetMother());
4160  fillthis="particle_pdgD0Second";
4161  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(mcD0second->GetPdgCode()),iterator++);
4162  }
4163  }
4164 
4165  mcB0Pion = (AliAODMCParticle*)mcTrackArray->At(mcLabelB0Pion);
4166  mcDStarPion = (AliAODMCParticle*)mcTrackArray->At(mcLabelDStarPion);
4167  mcD0first = (AliAODMCParticle*)mcTrackArray->At(mcLabelD0first);
4168  mcD0second = (AliAODMCParticle*)mcTrackArray->At(mcLabelD0second);
4169 
4170  if(mcB0Pion && mcDStarPion && mcD0first && mcD0second)
4171  {
4172  // B -> DStar + pion -> D0 + pion
4173  if(mcD0first->GetMother() == mcD0second->GetMother() && mcD0first->GetMother() >= 0)
4174  {
4175  AliAODMCParticle * D0Mother = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4176  AliAODMCParticle * D0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetMother());
4177  if(D0Mother->GetMother() == mcDStarPion->GetMother() && D0Mother->GetMother() >= 0 && D0GrandMother->GetMother() == mcB0Pion->GetMother() && D0GrandMother->GetMother() >= 0)
4178  {
4179  AliAODMCParticle * finalMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetMother());
4180  fillthis="particle_pdgAll";
4181  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()));
4182  fillthis="particle_pdgAllInvMass";
4183  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()),invariantMassMother);
4184  if(TMath::Abs(finalMother->GetPdgCode())==511)
4185  {
4186  bIsCorrelatedBackground = kTRUE;
4187  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4188  {
4189  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4190  fillthis="particle_daughterPdgTwoStep511a";
4191  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4192  }
4193  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4194  {
4195  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4196  fillthis="particle_daughterPdgTwoStep511a";
4197  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4198  }
4199  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4200  {
4201  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4202  fillthis="particle_daughterPdgTwoStep511a";
4203  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4204  }
4205  }
4206  if(TMath::Abs(finalMother->GetPdgCode())==521)
4207  {
4208  bIsCorrelatedBackground = kTRUE;
4209  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4210  {
4211  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4212  fillthis="particle_daughterPdgTwoStep521a";
4213  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4214  }
4215  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4216  {
4217  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4218  fillthis="particle_daughterPdgTwoStep521a";
4219  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4220  }
4221  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4222  {
4223  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4224  fillthis="particle_daughterPdgTwoStep521a";
4225  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4226  }
4227  }
4228  }
4229  }
4230 
4231  // B -> D0 + (B0) pion
4232  if(mcD0first->GetMother() == mcD0second->GetMother() && mcD0first->GetMother() >= 0)
4233  {
4234  AliAODMCParticle * D0Mother = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4235  if(D0Mother->GetMother() == mcB0Pion->GetMother() && D0Mother->GetMother() >= 0)
4236  {
4237  AliAODMCParticle * finalMother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetMother());
4238  fillthis="particle_pdgAllSecond";
4239  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()));
4240  fillthis="particle_pdgAllInvMassSecond";
4241  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()),invariantMassMother);
4242  if(TMath::Abs(finalMother->GetPdgCode())==511)
4243  {
4244  bIsCorrelatedBackground = kTRUE;
4245  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4246  {
4247  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4248  fillthis="particle_daughterPdgOneStep511a";
4249  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4250  }
4251  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4252  {
4253  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4254  fillthis="particle_daughterPdgOneStep511a";
4255  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0Mother->GetPdgCode()));
4256  }
4257  }
4258  if(TMath::Abs(finalMother->GetPdgCode())==521)
4259  {
4260  if(fUpgradeSetting == 2 || fUpgradeSetting == 3)
4261  {
4262  delete vertexMother; vertexMother = nullptr;
4263  delete vertexDStar; vertexDStar = nullptr;
4264  delete trackB0PionRotated; trackB0PionRotated = nullptr;
4265  continue;
4266  }
4267  bIsCorrelatedBackground = kTRUE;
4268  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4269  {
4270  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4271  fillthis="particle_daughterPdgOneStep521a";
4272  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4273  }
4274  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4275  {
4276  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4277  fillthis="particle_daughterPdgOneStep521a";
4278  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0Mother->GetPdgCode()));
4279  }
4280  }
4281  }
4282  }
4283 
4284  // B -> D0 + (DStar) pion
4285  if(mcD0first->GetMother() == mcD0second->GetMother() && mcD0first->GetMother() >= 0)
4286  {
4287  AliAODMCParticle * D0Mother = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4288  if(D0Mother->GetMother() == mcDStarPion->GetMother() && D0Mother->GetMother() >= 0)
4289  {
4290  AliAODMCParticle * finalMother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetMother());
4291  fillthis="particle_pdgAllThird";
4292  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()));
4293  fillthis="particle_pdgAllInvMassThird";
4294  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()),invariantMassMother);
4295  if(TMath::Abs(finalMother->GetPdgCode())==511)
4296  {
4297  bIsCorrelatedBackground = kTRUE;
4298  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4299  {
4300  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4301  fillthis="particle_daughterPdgOneStep511b";
4302  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4303  }
4304  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4305  {
4306  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4307  fillthis="particle_daughterPdgOneStep511b";
4308  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0Mother->GetPdgCode()));
4309  }
4310  }
4311  if(TMath::Abs(finalMother->GetPdgCode())==521)
4312  {
4313  bIsCorrelatedBackground = kTRUE;
4314  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4315  {
4316  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4317  fillthis="particle_daughterPdgOneStep521b";
4318  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4319  }
4320  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4321  {
4322  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4323  fillthis="particle_daughterPdgOneStep521b";
4324  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0Mother->GetPdgCode()));
4325  }
4326  }
4327  }
4328  }
4329 
4330  // B -> X + (B0) pion -> D0
4331  if(mcD0first->GetMother() == mcD0second->GetMother() && mcD0first->GetMother() >= 0)
4332  {
4333  AliAODMCParticle * D0Mother = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4334  AliAODMCParticle * D0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetMother());
4335  if(D0GrandMother->GetMother() == mcB0Pion->GetMother() && D0GrandMother->GetMother() >= 0)
4336  {
4337  AliAODMCParticle * finalMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetMother());
4338  fillthis="particle_pdgAllFourth";
4339  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()));
4340  fillthis="particle_pdgAllInvMassFourth";
4341  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()),invariantMassMother);
4342  if(TMath::Abs(finalMother->GetPdgCode())==511)
4343  {
4344  if(fUpgradeSetting == 1 || fUpgradeSetting == 3)
4345  {
4346  delete vertexMother; vertexMother = nullptr;
4347  delete vertexDStar; vertexDStar = nullptr;
4348  delete trackB0PionRotated; trackB0PionRotated = nullptr;
4349  continue;
4350  }
4351  bIsCorrelatedBackground = kTRUE;
4352  bIsCorrelatedBackground511 = kTRUE;
4353  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4354  {
4355  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4356  fillthis="particle_daughterPdgTwoStep511b";
4357  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4358  }
4359  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4360  {
4361  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4362  fillthis="particle_daughterPdgTwoStep511b";
4363  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4364  }
4365  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4366  {
4367  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4368  fillthis="particle_daughterPdgTwoStep511b";
4369  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4370  }
4371  }
4372  if(TMath::Abs(finalMother->GetPdgCode())==521)
4373  {
4374  bIsCorrelatedBackground = kTRUE;
4375  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4376  {
4377  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4378  fillthis="particle_daughterPdgTwoStep521b";
4379  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4380  }
4381  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4382  {
4383  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4384  fillthis="particle_daughterPdgTwoStep521b";
4385  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4386  }
4387  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4388  {
4389  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4390  fillthis="particle_daughterPdgTwoStep521b";
4391  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4392  }
4393  }
4394  }
4395  }
4396 
4397  // B -> X + (DStar) pion -> D0
4398  if(mcD0first->GetMother() == mcD0second->GetMother() && mcD0first->GetMother() >= 0)
4399  {
4400  AliAODMCParticle * D0Mother = (AliAODMCParticle*)mcTrackArray->At(mcD0first->GetMother());
4401  AliAODMCParticle * D0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetMother());
4402  if(D0GrandMother->GetMother() == mcDStarPion->GetMother() && D0GrandMother->GetMother() >= 0)
4403  {
4404  AliAODMCParticle * finalMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetMother());
4405  fillthis="particle_pdgAllFifth";
4406  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()));
4407  fillthis="particle_pdgAllInvMassFifth";
4408  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(TMath::Abs(finalMother->GetPdgCode()),invariantMassMother);
4409  if(TMath::Abs(finalMother->GetPdgCode())==511)
4410  {
4411  bIsCorrelatedBackground = kTRUE;
4412  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4413  {
4414  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4415  fillthis="particle_daughterPdgTwoStep511c";
4416  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4417  }
4418  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4419  {
4420  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4421  fillthis="particle_daughterPdgTwoStep511c";
4422  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4423  }
4424  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4425  {
4426  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4427  fillthis="particle_daughterPdgTwoStep511c";
4428  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4429  }
4430  }
4431  if(TMath::Abs(finalMother->GetPdgCode())==521)
4432  {
4433  bIsCorrelatedBackground = kTRUE;
4434  for (Int_t iDaughter = 0; iDaughter < finalMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4435  {
4436  AliAODMCParticle* daughterfinalMother = (AliAODMCParticle*)mcTrackArray->At(finalMother->GetDaughter(0)+iDaughter);
4437  fillthis="particle_daughterPdgTwoStep521c";
4438  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter,TMath::Abs(daughterfinalMother->GetPdgCode()));
4439  }
4440  for (Int_t iDaughter = 0; iDaughter < D0GrandMother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4441  {
4442  AliAODMCParticle* daughterD0GrandMother = (AliAODMCParticle*)mcTrackArray->At(D0GrandMother->GetDaughter(0)+iDaughter);
4443  fillthis="particle_daughterPdgTwoStep521c";
4444  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+10,TMath::Abs(daughterD0GrandMother->GetPdgCode()));
4445  }
4446  for (Int_t iDaughter = 0; iDaughter < D0Mother->GetNDaughters(); ++iDaughter) //will work up to ten daughters
4447  {
4448  AliAODMCParticle* daughterD0Mother = (AliAODMCParticle*)mcTrackArray->At(D0Mother->GetDaughter(0)+iDaughter);
4449  fillthis="particle_daughterPdgTwoStep521c";
4450  ((TH2F*)(fOutputB0MC->FindObject(fillthis)))->Fill(iDaughter+20,TMath::Abs(daughterD0Mother->GetPdgCode()));
4451  }
4452  }
4453  }
4454  }
4455  }
4456  }
4457  }
4458 
4459  if(!bSameSign)
4460  {
4461  histType = 2;
4462  FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4463  if(fUseMCInfo && isDesiredCandidate)
4464  {
4465  //fill mc histograms
4466  histType = 3;
4467  FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4468  }
4469  }
4470 
4471  AliAODRecoDecayHF2Prong* selectedDStar = (AliAODRecoDecayHF2Prong*)trackB0.GetDaughter(1);
4472  AliAODRecoDecayHF2Prong* selectedD0 = (AliAODRecoDecayHF2Prong*)selectedDStar->GetDaughter(1);
4473 
4474  // 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.
4475  massWindow = fHistMassWindow; // GeV/c^2
4476  if (TMath::Abs(invariantMassMother-pdgMassMother)<massWindow)
4477  {
4478  if(!bSameSign)
4479  {
4480  FillFinalTrackHistograms(&trackB0, isDesiredCandidate, mcTrackArray);
4481  if(!isDesiredCandidate)
4482  {
4483  motherType = 0; histType = 4; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histType, pdgD0);
4484  motherType = 1; histType = 4; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histType);
4485  motherType = 2; histType = 4; FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4486  }
4487  if(isDesiredCandidate)
4488  {
4489  motherType = 0; histType = 5; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histType, pdgD0);
4490  motherType = 1; histType = 5; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histType);
4491  motherType = 2; histType = 5; FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4492  }
4493  }
4494  }
4495 
4496  // Here we fill the histograms per pt bin and apply the same sign method
4497  TString ptBinMother = "";
4498  Int_t ptBin = fCuts->PtBin(trackB0.Pt());
4499  ptBinMother += "_ptbin_"; ptBinMother += fPtBinLimits[ptBin]; ptBinMother += "_to_"; ptBinMother += fPtBinLimits[ptBin+1];
4500  histType = 6 + 2 * ptBin;
4501 
4502  Int_t d0PtBin = fCuts->PtBinD0forD0ptbin(selectedD0->Pt());
4503  Int_t histTypeD0 = 2 * d0PtBin;
4504 
4505  Int_t d0DStarPtBin = fCuts->PtBinD0forDStarptbin(selectedDStar->Pt());
4506  Int_t histTypeD0DStar = 2 * d0DStarPtBin;
4507 
4508  Int_t dstarPtBin = fCuts->PtBinDStarforDStarptbin(selectedDStar->Pt());
4509  Int_t histTypeDStar = 2 * dstarPtBin;
4510 
4511 
4512  if (TMath::Abs(invariantMassMother-pdgMassMother)<massWindow)
4513  {
4514  if(!bSameSign && histType > 5)
4515  {
4516  if(!isDesiredCandidate)
4517  {
4518  motherType = 0; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histType, pdgD0);
4519  motherType = 1; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histType);
4520  motherType = 2; FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4521  motherType = 3; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histTypeD0, pdgD0);
4522  motherType = 4; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histTypeD0DStar, pdgD0);
4523  motherType = 5; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histTypeDStar);
4524  }
4525 
4526  if(isDesiredCandidate)
4527  {
4528  histType += 1;
4529  motherType = 0; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histType, pdgD0);
4530  motherType = 1; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histType);
4531  motherType = 2; FillDStarAndB0Histograms(&trackB0, primaryVertex, bz, motherType, histType);
4532  motherType = 3; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histTypeD0 + 1, pdgD0);
4533  motherType = 4; FillD0Histograms(selectedD0, primaryVertex, bz, motherType, histTypeD0DStar + 1, pdgD0);
4534  motherType = 5; FillDStarAndB0Histograms(selectedDStar, primaryVertex, bz, motherType, histTypeDStar + 1);
4535  }
4536  }
4537  }
4538 
4539  Double_t invmassDelta = DeltaInvMassB0Kpipipi(&trackB0);
4540  if(bSameSign && iRot == 0)
4541  {
4542  fillthis="invariantMassB0";
4543  fillthis += "_SameSign";
4544  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4545  fillthis="invariantMassB0";
4546  fillthis += ptBinMother + "_SameSign";
4547  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4548  fillthis="invariantMassB0";
4549  fillthis += "_SignSum";
4550  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4551  fillthis="invariantMassB0";
4552  fillthis += ptBinMother + "_SignSum";
4553  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4554  }
4555  if(!bSameSign)
4556  {
4557  if(iRot == 0)
4558  {
4559  fillthis="invariantMassB0";
4560  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4561  fillthis="invariantMassB0";
4562  fillthis += ptBinMother;
4563  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4564  fillthis="invariantMassB0";
4565  fillthis += "_SignSum";
4566  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4567  fillthis="invariantMassB0";
4568  fillthis += ptBinMother + "_SignSum";
4569  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4570 
4571  fillthis = "invariantMassB0Signal_BA";
4572  if(isDesiredCandidate) ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4573 
4574  fillthis = "invariantMassB0Correlated_BA";
4575  if(bIsCorrelatedBackground) ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4576 
4577  fillthis = "invariantMassB0Background_BA";
4578  if(!isDesiredCandidate && !bIsCorrelatedBackground) ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4579 
4580  if(bIsCorrelatedBackground511)
4581  {
4582  fillthis="invariantMassB0_correlated511";
4583  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4584  fillthis="invariantMassB0";
4585  fillthis += ptBinMother + "_correlated511";
4586  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4587  }
4588 
4589  if(!isDesiredCandidate && !bIsInjected)
4590  {
4591  TString signName = "_HIJING_Background";
4592  fillthis="invariantMassB0";
4593  fillthis += signName;
4594  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4595  fillthis="invariantMassB0";
4596  fillthis += ptBinMother + signName;
4597  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4598  }
4599  if(isDesiredCandidate && !bIsInjected)
4600  {
4601  TString signName = "_HIJING_Signal";
4602  fillthis="invariantMassB0";
4603  fillthis += signName;
4604  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4605  fillthis="invariantMassB0";
4606  fillthis += ptBinMother + signName;
4607  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4608  }
4609  }
4610  else
4611  {
4612  TString signName = "_Background_rotation";
4613  fillthis="invariantMassB0";
4614  fillthis += signName;
4615  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4616  fillthis="invariantMassB0";
4617  fillthis += ptBinMother + signName;
4618  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4619  if(!isDesiredCandidate && !bIsInjected)
4620  {
4621  signName = "_HIJING_Background_rotation";
4622  fillthis="invariantMassB0";
4623  fillthis += signName;
4624  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4625  fillthis="invariantMassB0";
4626  fillthis += ptBinMother + signName;
4627  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4628  }
4629  }
4630  }
4631 
4632  if(trackB0.Pt() > 6.0)
4633  {
4634  TString broadptBinMother = "_ptbin_6_to_inf";
4635  if(bSameSign && iRot == 0)
4636  {
4637  fillthis="invariantMassB0";
4638  fillthis += broadptBinMother + "_SameSign";
4639  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4640  fillthis="invariantMassB0";
4641  fillthis += broadptBinMother + "_SignSum";
4642  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4643  }
4644  if(!bSameSign)
4645  {
4646  if(iRot == 0)
4647  {
4648  fillthis="invariantMassB0";
4649  fillthis += broadptBinMother;
4650  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4651  fillthis="invariantMassB0";
4652  fillthis += broadptBinMother + "_SignSum";
4653  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4654  if(!isDesiredCandidate && !bIsInjected)
4655  {
4656  TString signName = "_HIJING_Background";
4657  fillthis="invariantMassB0";
4658  fillthis += broadptBinMother + signName;
4659  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4660  }
4661  if(isDesiredCandidate && !bIsInjected)
4662  {
4663  TString signName = "_HIJING_Signal";
4664  fillthis="invariantMassB0";
4665  fillthis += broadptBinMother + signName;
4666  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4667  }
4668  }
4669  else
4670  {
4671  TString signName = "_Background_rotation";
4672  fillthis="invariantMassB0";
4673  fillthis += broadptBinMother + signName;
4674  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4675  if(!isDesiredCandidate && !bIsInjected)
4676  {
4677  signName = "_HIJING_Background_rotation";
4678  fillthis="invariantMassB0";
4679  fillthis += broadptBinMother + signName;
4680  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4681  }
4682  }
4683  }
4684  }
4685 
4686  if(trackB0.Pt() > 3.0)
4687  {
4688  TString broadptBinMother = "_ptbin_3_to_inf";
4689  if(bSameSign && iRot == 0)
4690  {
4691  fillthis="invariantMassB0";
4692  fillthis += broadptBinMother + "_SameSign";
4693  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4694  fillthis="invariantMassB0";
4695  fillthis += broadptBinMother + "_SignSum";
4696  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4697  }
4698  if(!bSameSign)
4699  {
4700  if(iRot == 0)
4701  {
4702  fillthis="invariantMassB0";
4703  fillthis += broadptBinMother;
4704  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4705  fillthis="invariantMassB0";
4706  fillthis += broadptBinMother + "_SignSum";
4707  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4708  if(!isDesiredCandidate && !bIsInjected)
4709  {
4710  TString signName = "_HIJING_Background";
4711  fillthis="invariantMassB0";
4712  fillthis += broadptBinMother + signName;
4713  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4714  }
4715  if(isDesiredCandidate && !bIsInjected)
4716  {
4717  TString signName = "_HIJING_Signal";
4718  fillthis="invariantMassB0";
4719  fillthis += broadptBinMother + signName;
4720  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4721  }
4722  }
4723  else
4724  {
4725  TString signName = "_Background_rotation";
4726  fillthis="invariantMassB0";
4727  fillthis += broadptBinMother + signName;
4728  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4729  if(!isDesiredCandidate && !bIsInjected)
4730  {
4731  signName = "_HIJING_Background_rotation";
4732  fillthis="invariantMassB0";
4733  fillthis += broadptBinMother + signName;
4734  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4735  }
4736  }
4737  }
4738  }
4739 
4740  // //fine binning
4741  // if(bSameSign && iRot == 0)
4742  // {
4743  // fillthis="fineBin_invariantMassB0";
4744  // fillthis += "_SameSign";
4745  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4746  // fillthis="fineBin_invariantMassB0";
4747  // fillthis += ptBinMother + "_SameSign";
4748  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4749  // fillthis="fineBin_invariantMassB0";
4750  // fillthis += "_SignSum";
4751  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4752  // fillthis="fineBin_invariantMassB0";
4753  // fillthis += ptBinMother + "_SignSum";
4754  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4755  // }
4756  // if(!bSameSign)
4757  // {
4758  // if(iRot == 0)
4759  // {
4760  // fillthis="fineBin_invariantMassB0";
4761  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4762  // fillthis="fineBin_invariantMassB0";
4763  // fillthis += ptBinMother;
4764  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4765  // fillthis="fineBin_invariantMassB0";
4766  // fillthis += "_SignSum";
4767  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4768  // fillthis="fineBin_invariantMassB0";
4769  // fillthis += ptBinMother + "_SignSum";
4770  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4771 
4772  // if(!isDesiredCandidate && !bIsInjected)
4773  // {
4774  // TString signName = "_HIJING_Background";
4775  // fillthis="fineBin_invariantMassB0";
4776  // fillthis += signName;
4777  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4778  // fillthis="fineBin_invariantMassB0";
4779  // fillthis += ptBinMother + signName;
4780  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4781  // }
4782  // if(isDesiredCandidate && !bIsInjected)
4783  // {
4784  // TString signName = "_HIJING_Signal";
4785  // fillthis="fineBin_invariantMassB0";
4786  // fillthis += signName;
4787  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4788  // fillthis="fineBin_invariantMassB0";
4789  // fillthis += ptBinMother + signName;
4790  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4791  // }
4792  // }
4793  // else
4794  // {
4795  // TString signName = "_Background_rotation";
4796  // fillthis="fineBin_invariantMassB0";
4797  // fillthis += signName;
4798  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4799  // fillthis="fineBin_invariantMassB0";
4800  // fillthis += ptBinMother + signName;
4801  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4802  // if(!isDesiredCandidate && !bIsInjected)
4803  // {
4804  // signName = "_HIJING_Background_rotation";
4805  // fillthis="fineBin_invariantMassB0";
4806  // fillthis += signName;
4807  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4808  // fillthis="fineBin_invariantMassB0";
4809  // fillthis += ptBinMother + signName;
4810  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4811  // }
4812  // }
4813  // }
4814 
4815  // if(trackB0.Pt() > 6.0)
4816  // {
4817  // TString broadptBinMother = "_ptbin_6_to_inf";
4818  // if(bSameSign && iRot == 0)
4819  // {
4820  // fillthis="fineBin_invariantMassB0";
4821  // fillthis += broadptBinMother + "_SameSign";
4822  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4823  // fillthis="fineBin_invariantMassB0";
4824  // fillthis += broadptBinMother + "_SignSum";
4825  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4826  // }
4827  // if(!bSameSign)
4828  // {
4829  // if(iRot == 0)
4830  // {
4831  // fillthis="fineBin_invariantMassB0";
4832  // fillthis += broadptBinMother;
4833  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4834  // fillthis="fineBin_invariantMassB0";
4835  // fillthis += broadptBinMother + "_SignSum";
4836  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4837  // if(!isDesiredCandidate && !bIsInjected)
4838  // {
4839  // TString signName = "_HIJING_Background";
4840  // fillthis="fineBin_invariantMassB0";
4841  // fillthis += broadptBinMother + signName;
4842  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4843  // }
4844  // if(isDesiredCandidate && !bIsInjected)
4845  // {
4846  // TString signName = "_HIJING_Signal";
4847  // fillthis="fineBin_invariantMassB0";
4848  // fillthis += broadptBinMother + signName;
4849  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4850  // }
4851  // }
4852  // else
4853  // {
4854  // TString signName = "_Background_rotation";
4855  // fillthis="fineBin_invariantMassB0";
4856  // fillthis += broadptBinMother + signName;
4857  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4858  // if(!isDesiredCandidate && !bIsInjected)
4859  // {
4860  // signName = "_HIJING_Background_rotation";
4861  // fillthis="fineBin_invariantMassB0";
4862  // fillthis += broadptBinMother + signName;
4863  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4864  // }
4865  // }
4866  // }
4867  // }
4868 
4869  // if(trackB0.Pt() > 3.0)
4870  // {
4871  // TString broadptBinMother = "_ptbin_3_to_inf";
4872  // if(bSameSign && iRot == 0)
4873  // {
4874  // fillthis="fineBin_invariantMassB0";
4875  // fillthis += broadptBinMother + "_SameSign";
4876  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4877  // fillthis="fineBin_invariantMassB0";
4878  // fillthis += broadptBinMother + "_SignSum";
4879  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,-1);
4880  // }
4881  // if(!bSameSign)
4882  // {
4883  // if(iRot == 0)
4884  // {
4885  // fillthis="fineBin_invariantMassB0";
4886  // fillthis += broadptBinMother;
4887  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4888  // fillthis="fineBin_invariantMassB0";
4889  // fillthis += broadptBinMother + "_SignSum";
4890  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother,1);
4891  // if(!isDesiredCandidate && !bIsInjected)
4892  // {
4893  // TString signName = "_HIJING_Background";
4894  // fillthis="fineBin_invariantMassB0";
4895  // fillthis += broadptBinMother + signName;
4896  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4897  // }
4898  // if(isDesiredCandidate && !bIsInjected)
4899  // {
4900  // TString signName = "_HIJING_Signal";
4901  // fillthis="fineBin_invariantMassB0";
4902  // fillthis += broadptBinMother + signName;
4903  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4904  // }
4905  // }
4906  // else
4907  // {
4908  // TString signName = "_Background_rotation";
4909  // fillthis="fineBin_invariantMassB0";
4910  // fillthis += broadptBinMother + signName;
4911  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4912  // if(!isDesiredCandidate && !bIsInjected)
4913  // {
4914  // signName = "_HIJING_Background_rotation";
4915  // fillthis="fineBin_invariantMassB0";
4916  // fillthis += broadptBinMother + signName;
4917  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invariantMassMother);
4918  // }
4919  // }
4920  // }
4921  // }
4922 
4923  //deltamass
4924  if(bSameSign && iRot == 0)
4925  {
4926  fillthis="deltainvariantMassB0";
4927  fillthis += "_SameSign";
4928  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4929  fillthis="deltainvariantMassB0";
4930  fillthis += ptBinMother + "_SameSign";
4931  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4932  fillthis="deltainvariantMassB0";
4933  fillthis += "_SignSum";
4934  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
4935  fillthis="deltainvariantMassB0";
4936  fillthis += ptBinMother + "_SignSum";
4937  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
4938  }
4939  if(!bSameSign)
4940  {
4941  if(iRot == 0)
4942  {
4943  fillthis="deltainvariantMassB0";
4944  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4945  fillthis="deltainvariantMassB0";
4946  fillthis += ptBinMother;
4947  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4948  fillthis="deltainvariantMassB0";
4949  fillthis += "_SignSum";
4950  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
4951  fillthis="deltainvariantMassB0";
4952  fillthis += ptBinMother + "_SignSum";
4953  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
4954 
4955  if(bIsCorrelatedBackground511)
4956  {
4957  fillthis="deltainvariantMassB0_correlated511";
4958  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4959  fillthis="deltainvariantMassB0";
4960  fillthis += ptBinMother + "_correlated511" ;
4961  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4962  }
4963 
4964  if(!isDesiredCandidate && !bIsInjected)
4965  {
4966  TString signName = "_HIJING_Background";
4967  fillthis="deltainvariantMassB0";
4968  fillthis += signName;
4969  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4970  fillthis="deltainvariantMassB0";
4971  fillthis += ptBinMother + signName;
4972  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4973  }
4974  if(isDesiredCandidate && !bIsInjected)
4975  {
4976  TString signName = "_HIJING_Signal";
4977  fillthis="deltainvariantMassB0";
4978  fillthis += signName;
4979  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4980  fillthis="deltainvariantMassB0";
4981  fillthis += ptBinMother + signName;
4982  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4983  }
4984  }
4985  else
4986  {
4987  TString signName = "_Background_rotation";
4988  fillthis="deltainvariantMassB0";
4989  fillthis += signName;
4990  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4991  fillthis="deltainvariantMassB0";
4992  fillthis += ptBinMother + signName;
4993  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
4994  if(!isDesiredCandidate && !bIsInjected)
4995  {
4996  signName = "_HIJING_Background_rotation";
4997  fillthis="deltainvariantMassB0";
4998  fillthis += signName;
4999  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5000  fillthis="deltainvariantMassB0";
5001  fillthis += ptBinMother + signName;
5002  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5003  }
5004  }
5005  }
5006 
5007  if(trackB0.Pt() > 6.0)
5008  {
5009  TString broadptBinMother = "_ptbin_6_to_inf";
5010  if(bSameSign && iRot == 0)
5011  {
5012  fillthis="deltainvariantMassB0";
5013  fillthis += broadptBinMother + "_SameSign";
5014  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5015  fillthis="deltainvariantMassB0";
5016  fillthis += broadptBinMother + "_SignSum";
5017  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5018  }
5019  if(!bSameSign)
5020  {
5021  if(iRot == 0)
5022  {
5023  fillthis="deltainvariantMassB0";
5024  fillthis += broadptBinMother;
5025  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5026  fillthis="deltainvariantMassB0";
5027  fillthis += broadptBinMother + "_SignSum";
5028  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5029  if(!isDesiredCandidate && !bIsInjected)
5030  {
5031  TString signName = "_HIJING_Background";
5032  fillthis="deltainvariantMassB0";
5033  fillthis += broadptBinMother + signName;
5034  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5035  }
5036  if(isDesiredCandidate && !bIsInjected)
5037  {
5038  TString signName = "_HIJING_Signal";
5039  fillthis="deltainvariantMassB0";
5040  fillthis += broadptBinMother + signName;
5041  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5042  }
5043  }
5044  else
5045  {
5046  TString signName = "_Background_rotation";
5047  fillthis="deltainvariantMassB0";
5048  fillthis += broadptBinMother + signName;
5049  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5050  if(!isDesiredCandidate && !bIsInjected)
5051  {
5052  signName = "_HIJING_Background_rotation";
5053  fillthis="deltainvariantMassB0";
5054  fillthis += broadptBinMother + signName;
5055  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5056  }
5057  }
5058  }
5059  }
5060 
5061  if(trackB0.Pt() > 3.0)
5062  {
5063  TString broadptBinMother = "_ptbin_3_to_inf";
5064  if(bSameSign && iRot == 0)
5065  {
5066  fillthis="deltainvariantMassB0";
5067  fillthis += broadptBinMother + "_SameSign";
5068  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5069  fillthis="deltainvariantMassB0";
5070  fillthis += broadptBinMother + "_SignSum";
5071  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5072  }
5073  if(!bSameSign)
5074  {
5075  if(iRot == 0)
5076  {
5077  fillthis="deltainvariantMassB0";
5078  fillthis += broadptBinMother;
5079  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5080  fillthis="deltainvariantMassB0";
5081  fillthis += broadptBinMother + "_SignSum";
5082  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5083  if(!isDesiredCandidate && !bIsInjected)
5084  {
5085  TString signName = "_HIJING_Background";
5086  fillthis="deltainvariantMassB0";
5087  fillthis += broadptBinMother + signName;
5088  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5089  }
5090  if(isDesiredCandidate && !bIsInjected)
5091  {
5092  TString signName = "_HIJING_Signal";
5093  fillthis="deltainvariantMassB0";
5094  fillthis += broadptBinMother + signName;
5095  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5096  }
5097  }
5098  else
5099  {
5100  TString signName = "_Background_rotation";
5101  fillthis="deltainvariantMassB0";
5102  fillthis += broadptBinMother + signName;
5103  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5104  if(!isDesiredCandidate && !bIsInjected)
5105  {
5106  signName = "_HIJING_Background_rotation";
5107  fillthis="deltainvariantMassB0";
5108  fillthis += broadptBinMother + signName;
5109  ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5110  }
5111  }
5112  }
5113  }
5114 
5115  // //fine binning
5116  // if(bSameSign && iRot == 0)
5117  // {
5118  // fillthis="fineBin_deltainvariantMassB0";
5119  // fillthis += "_SameSign";
5120  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5121  // fillthis="fineBin_deltainvariantMassB0";
5122  // fillthis += ptBinMother + "_SameSign";
5123  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5124  // fillthis="fineBin_deltainvariantMassB0";
5125  // fillthis += "_SignSum";
5126  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5127  // fillthis="fineBin_deltainvariantMassB0";
5128  // fillthis += ptBinMother + "_SignSum";
5129  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5130  // }
5131  // if(!bSameSign)
5132  // {
5133  // if(iRot == 0)
5134  // {
5135  // fillthis="fineBin_deltainvariantMassB0";
5136  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5137  // fillthis="fineBin_deltainvariantMassB0";
5138  // fillthis += ptBinMother;
5139  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5140  // fillthis="fineBin_deltainvariantMassB0";
5141  // fillthis += "_SignSum";
5142  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5143  // fillthis="fineBin_deltainvariantMassB0";
5144  // fillthis += ptBinMother + "_SignSum";
5145  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5146 
5147  // if(!isDesiredCandidate && !bIsInjected)
5148  // {
5149  // TString signName = "_HIJING_Background";
5150  // fillthis="fineBin_deltainvariantMassB0";
5151  // fillthis += signName;
5152  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5153  // fillthis="fineBin_deltainvariantMassB0";
5154  // fillthis += ptBinMother + signName;
5155  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5156  // }
5157  // if(isDesiredCandidate && !bIsInjected)
5158  // {
5159  // TString signName = "_HIJING_Signal";
5160  // fillthis="fineBin_deltainvariantMassB0";
5161  // fillthis += signName;
5162  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5163  // fillthis="fineBin_deltainvariantMassB0";
5164  // fillthis += ptBinMother + signName;
5165  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5166  // }
5167  // }
5168  // else
5169  // {
5170  // TString signName = "_Background_rotation";
5171  // fillthis="fineBin_deltainvariantMassB0";
5172  // fillthis += signName;
5173  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5174  // fillthis="fineBin_deltainvariantMassB0";
5175  // fillthis += ptBinMother + signName;
5176  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5177  // if(!isDesiredCandidate && !bIsInjected)
5178  // {
5179  // signName = "_HIJING_Background_rotation";
5180  // fillthis="fineBin_deltainvariantMassB0";
5181  // fillthis += signName;
5182  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5183  // fillthis="fineBin_deltainvariantMassB0";
5184  // fillthis += ptBinMother + signName;
5185  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5186  // }
5187  // }
5188  // }
5189 
5190  // if(trackB0.Pt() > 6.0)
5191  // {
5192  // TString broadptBinMother = "_ptbin_6_to_inf";
5193  // if(bSameSign && iRot == 0)
5194  // {
5195  // fillthis="fineBin_deltainvariantMassB0";
5196  // fillthis += broadptBinMother + "_SameSign";
5197  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5198  // fillthis="fineBin_deltainvariantMassB0";
5199  // fillthis += broadptBinMother + "_SignSum";
5200  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5201  // }
5202  // if(!bSameSign)
5203  // {
5204  // if(iRot == 0)
5205  // {
5206  // fillthis="fineBin_deltainvariantMassB0";
5207  // fillthis += broadptBinMother;
5208  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5209  // fillthis="fineBin_deltainvariantMassB0";
5210  // fillthis += broadptBinMother + "_SignSum";
5211  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5212  // if(!isDesiredCandidate && !bIsInjected)
5213  // {
5214  // TString signName = "_HIJING_Background";
5215  // fillthis="fineBin_deltainvariantMassB0";
5216  // fillthis += broadptBinMother + signName;
5217  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5218  // }
5219  // if(isDesiredCandidate && !bIsInjected)
5220  // {
5221  // TString signName = "_HIJING_Signal";
5222  // fillthis="fineBin_deltainvariantMassB0";
5223  // fillthis += broadptBinMother + signName;
5224  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5225  // }
5226  // }
5227  // else
5228  // {
5229  // TString signName = "_Background_rotation";
5230  // fillthis="fineBin_deltainvariantMassB0";
5231  // fillthis += broadptBinMother + signName;
5232  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5233  // if(!isDesiredCandidate && !bIsInjected)
5234  // {
5235  // signName = "_HIJING_Background_rotation";
5236  // fillthis="fineBin_deltainvariantMassB0";
5237  // fillthis += broadptBinMother + signName;
5238  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5239  // }
5240  // }
5241  // }
5242  // }
5243 
5244  // if(trackB0.Pt() > 3.0)
5245  // {
5246  // TString broadptBinMother = "_ptbin_3_to_inf";
5247  // if(bSameSign && iRot == 0)
5248  // {
5249  // fillthis="fineBin_deltainvariantMassB0";
5250  // fillthis += broadptBinMother + "_SameSign";
5251  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5252  // fillthis="fineBin_deltainvariantMassB0";
5253  // fillthis += broadptBinMother + "_SignSum";
5254  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,-1);
5255  // }
5256  // if(!bSameSign)
5257  // {
5258  // if(iRot == 0)
5259  // {
5260  // fillthis="fineBin_deltainvariantMassB0";
5261  // fillthis += broadptBinMother;
5262  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5263  // fillthis="fineBin_deltainvariantMassB0";
5264  // fillthis += broadptBinMother + "_SignSum";
5265  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta,1);
5266  // if(!isDesiredCandidate && !bIsInjected)
5267  // {
5268  // TString signName = "_HIJING_Background";
5269  // fillthis="fineBin_deltainvariantMassB0";
5270  // fillthis += broadptBinMother + signName;
5271  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5272  // }
5273  // if(isDesiredCandidate && !bIsInjected)
5274  // {
5275  // TString signName = "_HIJING_Signal";
5276  // fillthis="fineBin_deltainvariantMassB0";
5277  // fillthis += broadptBinMother + signName;
5278  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5279  // }
5280  // }
5281  // else
5282  // {
5283  // TString signName = "_Background_rotation";
5284  // fillthis="fineBin_deltainvariantMassB0";
5285  // fillthis += broadptBinMother + signName;
5286  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5287  // if(!isDesiredCandidate && !bIsInjected)
5288  // {
5289  // signName = "_HIJING_Background_rotation";
5290  // fillthis="fineBin_deltainvariantMassB0";
5291  // fillthis += broadptBinMother + signName;
5292  // ((TH1F*)(fOutputB0MC->FindObject(fillthis)))->Fill(invmassDelta);
5293  // }
5294  // }
5295  // }
5296  // }
5297 
5298  delete vertexMother; vertexMother = nullptr;
5299  delete vertexDStar; vertexDStar = nullptr;
5300  delete trackB0PionRotated; trackB0PionRotated = nullptr;
5301  }
5302  }
5303  }
5304 
5305  //Restore Object count
5306  //To save space in the table keeping track of all referenced objects,
5307  //we reset the object count to what it was at the beginning of the loop.
5308  TProcessID::SetObjectCount(ObjectNumber);
5309  }
5310  return;
5311 }
5312 //-------------------------------------------------------------------------------------
5313 void AliAnalysisTaskSEB0toDStarPi::FillFinalTrackHistograms(AliAODRecoDecayHF2Prong * selectedB0, Bool_t isDesiredCandidate,TClonesArray * mcTrackArray){
5314 
5315  //In this function we fill histograms with the properties of all the daughters of our selected signal candidate
5316 
5317  AliAODTrack* selectedB0Pion = (AliAODTrack*)selectedB0->GetDaughter(0);
5318  AliAODRecoDecayHF2Prong* selectedDStar = (AliAODRecoDecayHF2Prong*)selectedB0->GetDaughter(1);
5319 
5320  AliAODTrack* selectedDStarPion = (AliAODTrack*)selectedDStar->GetDaughter(0);
5321  AliAODRecoDecayHF2Prong* selectedD0 = (AliAODRecoDecayHF2Prong*)selectedDStar->GetDaughter(1);
5322 
5323  AliAODTrack* selectedD0Pion;
5324  AliAODTrack* selectedD0Kaon;
5325 
5326  if(selectedDStarPion->Charge() == 1) selectedD0Pion = (AliAODTrack*)selectedD0->GetDaughter(0);
5327  if(selectedDStarPion->Charge() == -1) selectedD0Pion = (AliAODTrack*)selectedD0->GetDaughter(1);
5328 
5329  if(selectedDStarPion->Charge() == 1) selectedD0Kaon = (AliAODTrack*)selectedD0->GetDaughter(1);
5330  if(selectedDStarPion->Charge() == -1) selectedD0Kaon = (AliAODTrack*)selectedD0->GetDaughter(0);
5331 
5332  Double_t d0B0pion = TMath::Abs(selectedB0->Getd0Prong(0));
5333  Double_t d0DStarpion = TMath::Abs(selectedDStar->Getd0Prong(0));
5334  Double_t d0D0pion = 0;
5335  Double_t d0D0kaon = 0;
5336 
5337  if(selectedDStarPion->Charge() == 1) d0D0pion = selectedD0->Getd0Prong(0);
5338  if(selectedDStarPion->Charge() == -1) d0D0pion = selectedD0->Getd0Prong(1);
5339 
5340  if(selectedDStarPion->Charge() == 1) d0D0kaon = selectedD0->Getd0Prong(1);
5341  if(selectedDStarPion->Charge() == -1) d0D0kaon = selectedD0->Getd0Prong(0);
5342 
5343  Double_t pt_track = 0;
5344  Double_t momentum_track = 0;
5345  Int_t numberOfITS = 0;
5346  Int_t numberOfTPC = 0;
5347  Int_t daughterType, histType;
5348  Int_t totalNumberOfITS = 0;
5349  Int_t totalNumberOfTPC = 0;
5350  Double_t nSigmaTPC = 0;
5351  Double_t nSigmaTOF = 0;
5352  Double_t nSigmaTPCtotal = 0;
5353  Double_t nSigmaTOFtotal = 0;
5354  Int_t pionPIDnumber = 2;
5355  Int_t kaonPIDnumber = 3;
5356  Int_t TPCok = 0;
5357  Int_t TOFok = 0;
5358 
5359  AliAODPidHF* trackPIDHF = (AliAODPidHF*)fCuts->GetPidHF();
5360 
5361  //fill the D0 pion info
5362  pt_track = selectedD0Pion->Pt();
5363  momentum_track = selectedD0Pion->P();
5364  numberOfITS = selectedD0Pion->GetITSNcls();
5365  numberOfTPC = selectedD0Pion->GetTPCNcls();
5366  totalNumberOfITS += numberOfITS;
5367  totalNumberOfTPC += numberOfTPC;
5368  TPCok = trackPIDHF->GetnSigmaTPC(selectedD0Pion, pionPIDnumber, nSigmaTPC);
5369  TOFok = trackPIDHF->GetnSigmaTOF(selectedD0Pion, pionPIDnumber, nSigmaTOF);
5370  if(TPCok != -1) nSigmaTPCtotal += nSigmaTPC*nSigmaTPC;
5371  if(TOFok != -1) nSigmaTOFtotal += nSigmaTOF*nSigmaTOF;
5372 
5373  Double_t ptB0 = selectedB0->Pt();
5374 
5375  daughterType = 0;
5376  histType = 4;
5377  if(!isDesiredCandidate)
5378  {
5379  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5380  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5381  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5382  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5383 
5384  for (Int_t j = 0; j < 10; ++j)
5385  {
5386  if(selectedD0Pion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5387 
5388  }
5389 
5390  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5391  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5392  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5393  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0D0pion);
5394  ((TH2F*)fDaughterHistogramArray2D[daughterType][4])->Fill(ptB0,pt_track);
5395  }
5396 
5397  if(isDesiredCandidate)
5398  {
5399  histType = 5;
5400  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5401  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5402  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5403  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5404 
5405  for (Int_t j = 0; j < 10; ++j)
5406  {
5407  if(selectedD0Pion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5408 
5409  }
5410 
5411  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5412  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5413  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5414  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0D0pion);
5415  ((TH2F*)fDaughterHistogramArray2D[daughterType][5])->Fill(ptB0,pt_track);
5416  }
5417 
5418  //we save the pdgcode of the used particle and its mother to check PID efficiency
5419  if(fUseMCInfo)
5420  {
5421  Float_t pdgCodeParticle = -1;
5422  Float_t pdgCodeParticleMother = -1;
5423  Int_t mcLabelParticle = -1;
5424  Int_t mcLabelParticleMother = -1;
5425  mcLabelParticle = selectedD0Pion->GetLabel();
5426 
5427  if(mcLabelParticle >= 0){
5428 
5429  AliAODMCParticle *mcTrackParticle = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticle);
5430  pdgCodeParticle = TMath::Abs(mcTrackParticle->GetPdgCode());
5431  ((TH1F*)fDaughterHistogramArrayExtra[0][2])->Fill(pdgCodeParticle);
5432  mcLabelParticleMother = mcTrackParticle->GetMother();
5433 
5434  if(mcLabelParticleMother >= 0){
5435  AliAODMCParticle *mcTrackParticleMother = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticleMother);
5436  pdgCodeParticleMother = TMath::Abs(mcTrackParticleMother->GetPdgCode());
5437  ((TH1F*)fDaughterHistogramArrayExtra[0][3])->Fill(pdgCodeParticleMother);
5438  }
5439  }
5440  }
5441 
5442 
5443 
5444  //fill the D0 kaon info
5445  pt_track = selectedD0Kaon->Pt();
5446  momentum_track = selectedD0Kaon->P();
5447  numberOfITS = selectedD0Kaon->GetITSNcls();
5448  numberOfTPC = selectedD0Kaon->GetTPCNcls();
5449  totalNumberOfITS += numberOfITS;
5450  totalNumberOfTPC += numberOfTPC;
5451  TPCok = trackPIDHF->GetnSigmaTPC(selectedD0Kaon, kaonPIDnumber, nSigmaTPC);
5452  TOFok = trackPIDHF->GetnSigmaTOF(selectedD0Kaon, kaonPIDnumber, nSigmaTOF);
5453  if(TPCok != -1) nSigmaTPCtotal += nSigmaTPC*nSigmaTPC;
5454  if(TOFok != -1) nSigmaTOFtotal += nSigmaTOF*nSigmaTOF;
5455 
5456  daughterType = 1;
5457  histType = 4;
5458  if(!isDesiredCandidate)
5459  {
5460  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5461  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5462  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5463  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5464 
5465  for (Int_t j = 0; j < 10; ++j)
5466  {
5467  if(selectedD0Kaon->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5468 
5469  }
5470 
5471  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5472  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5473  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5474  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0D0kaon);
5475  ((TH2F*)fDaughterHistogramArray2D[daughterType][4])->Fill(ptB0,pt_track);
5476  }
5477 
5478  if(isDesiredCandidate)
5479  {
5480  histType = 5;
5481  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5482  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5483  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5484  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5485 
5486  for (Int_t j = 0; j < 10; ++j)
5487  {
5488  if(selectedD0Kaon->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5489 
5490  }
5491 
5492  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5493  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5494  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5495  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0D0kaon);
5496  ((TH2F*)fDaughterHistogramArray2D[daughterType][5])->Fill(ptB0,pt_track);
5497  }
5498 
5499  //we save the pdgcode of the used particle and its mother to check PID efficiency
5500  if(fUseMCInfo)
5501  {
5502  Float_t pdgCodeParticle = -1;
5503  Float_t pdgCodeParticleMother = -1;
5504  Int_t mcLabelParticle = -1;
5505  Int_t mcLabelParticleMother = -1;
5506  mcLabelParticle = selectedD0Kaon->GetLabel();
5507 
5508  if(mcLabelParticle >= 0){
5509 
5510  AliAODMCParticle *mcTrackParticle = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticle);
5511  pdgCodeParticle = TMath::Abs(mcTrackParticle->GetPdgCode());
5512  ((TH1F*)fDaughterHistogramArrayExtra[1][2])->Fill(pdgCodeParticle);
5513  mcLabelParticleMother = mcTrackParticle->GetMother();
5514 
5515  if(mcLabelParticleMother >= 0){
5516  AliAODMCParticle *mcTrackParticleMother = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticleMother);
5517  pdgCodeParticleMother = TMath::Abs(mcTrackParticleMother->GetPdgCode());
5518  ((TH1F*)fDaughterHistogramArrayExtra[1][3])->Fill(pdgCodeParticleMother);
5519  }
5520  }
5521  }
5522 
5523  //fill the DStar pion info
5524  pt_track = selectedDStarPion->Pt();
5525  momentum_track = selectedDStarPion->P();
5526  numberOfITS = selectedDStarPion->GetITSNcls();
5527  numberOfTPC = selectedDStarPion->GetTPCNcls();
5528  totalNumberOfITS += numberOfITS;
5529  totalNumberOfTPC += numberOfTPC;
5530  TPCok = trackPIDHF->GetnSigmaTPC(selectedDStarPion, pionPIDnumber, nSigmaTPC);
5531  TOFok = trackPIDHF->GetnSigmaTOF(selectedDStarPion, pionPIDnumber, nSigmaTOF);
5532  if(TPCok != -1) nSigmaTPCtotal += nSigmaTPC*nSigmaTPC;
5533 
5534  daughterType = 2;
5535  histType = 4;
5536  if(!isDesiredCandidate)
5537  {
5538  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5539  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5540  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5541  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5542 
5543  for (Int_t j = 0; j < 10; ++j)
5544  {
5545  if(selectedDStarPion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5546 
5547  }
5548 
5549  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5550  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5551  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5552  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0DStarpion);
5553  ((TH2F*)fDaughterHistogramArray2D[daughterType][4])->Fill(ptB0,pt_track);
5554  }
5555 
5556  if(isDesiredCandidate)
5557  {
5558  histType = 5;
5559  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5560  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5561  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5562  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5563 
5564  for (Int_t j = 0; j < 10; ++j)
5565  {
5566  if(selectedDStarPion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5567 
5568  }
5569 
5570  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5571  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5572  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5573  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0DStarpion);
5574  ((TH2F*)fDaughterHistogramArray2D[daughterType][5])->Fill(ptB0,pt_track);
5575  }
5576 
5577  //we save the pdgcode of the used particle and its mother to check PID efficiency
5578  if(fUseMCInfo)
5579  {
5580  Float_t pdgCodeParticle = -1;
5581  Float_t pdgCodeParticleMother = -1;
5582  Int_t mcLabelParticle = -1;
5583  Int_t mcLabelParticleMother = -1;
5584  mcLabelParticle = selectedDStarPion->GetLabel();
5585 
5586  if(mcLabelParticle >= 0){
5587 
5588  AliAODMCParticle *mcTrackParticle = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticle);
5589  pdgCodeParticle = TMath::Abs(mcTrackParticle->GetPdgCode());
5590  ((TH1F*)fDaughterHistogramArrayExtra[2][2])->Fill(pdgCodeParticle);
5591  mcLabelParticleMother = mcTrackParticle->GetMother();
5592 
5593  if(mcLabelParticleMother >= 0){
5594  AliAODMCParticle *mcTrackParticleMother = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticleMother);
5595  pdgCodeParticleMother = TMath::Abs(mcTrackParticleMother->GetPdgCode());
5596  ((TH1F*)fDaughterHistogramArrayExtra[2][3])->Fill(pdgCodeParticleMother);
5597  }
5598  }
5599  }
5600 
5601  //fill the B0 pion info
5602  pt_track = selectedB0Pion->Pt();
5603  momentum_track = selectedB0Pion->P();
5604  numberOfITS = selectedB0Pion->GetITSNcls();
5605  numberOfTPC = selectedB0Pion->GetTPCNcls();
5606  totalNumberOfITS += numberOfITS;
5607  totalNumberOfTPC += numberOfTPC;
5608  TPCok = trackPIDHF->GetnSigmaTPC(selectedB0Pion, pionPIDnumber, nSigmaTPC);
5609  TOFok = trackPIDHF->GetnSigmaTOF(selectedB0Pion, pionPIDnumber, nSigmaTOF);
5610  if(TPCok != -1) nSigmaTPCtotal += nSigmaTPC*nSigmaTPC;
5611  if(TOFok != -1) nSigmaTOFtotal += nSigmaTOF*nSigmaTOF;
5612 
5613  daughterType = 3;
5614  histType = 4;
5615  if(!isDesiredCandidate)
5616  {
5617  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5618  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5619  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5620  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5621 
5622  for (Int_t j = 0; j < 10; ++j)
5623  {
5624  if(selectedB0Pion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5625 
5626  }
5627 
5628  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5629  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5630  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5631  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0B0pion);
5632  ((TH2F*)fDaughterHistogramArray2D[daughterType][4])->Fill(ptB0,pt_track);
5633  }
5634 
5635  if(isDesiredCandidate)
5636  {
5637  histType = 5;
5638  ((TH1F*)fDaughterHistogramArray[daughterType][histType][0])->Fill(pt_track);
5639  ((TH1F*)fDaughterHistogramArray[daughterType][histType][1])->Fill(momentum_track);
5640  ((TH1F*)fDaughterHistogramArray[daughterType][histType][2])->Fill(numberOfITS);
5641  ((TH1F*)fDaughterHistogramArray[daughterType][histType][3])->Fill(numberOfTPC);
5642 
5643  for (Int_t j = 0; j < 10; ++j)
5644  {
5645  if(selectedB0Pion->HasPointOnITSLayer(j)) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(j);
5646 
5647  }
5648 
5649  if(TPCok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][4])->Fill(nSigmaTPC);
5650  if(TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][5])->Fill(nSigmaTOF);
5651  if(TPCok != -1 && TOFok != -1) ((TH1F*)fDaughterHistogramArray[daughterType][histType][6])->Fill(sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF));
5652  ((TH1F*)fDaughterHistogramArray[daughterType][histType][8])->Fill(d0B0pion);
5653  ((TH2F*)fDaughterHistogramArray2D[daughterType][5])->Fill(ptB0,pt_track);
5654  }
5655 
5656  //we save the pdgcode of the used particle and its mother to check PID efficiency
5657  if(fUseMCInfo)
5658  {
5659  Float_t pdgCodeParticle = -1;
5660  Float_t pdgCodeParticleMother = -1;
5661  Int_t mcLabelParticle = -1;
5662  Int_t mcLabelParticleMother = -1;
5663  mcLabelParticle = selectedB0Pion->GetLabel();
5664 
5665  if(mcLabelParticle >= 0){
5666 
5667  AliAODMCParticle *mcTrackParticle = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticle);
5668  pdgCodeParticle = TMath::Abs(mcTrackParticle->GetPdgCode());
5669  ((TH1F*)fDaughterHistogramArrayExtra[3][2])->Fill(pdgCodeParticle);
5670  mcLabelParticleMother = mcTrackParticle->GetMother();
5671 
5672  if(mcLabelParticleMother >= 0){
5673  AliAODMCParticle *mcTrackParticleMother = (AliAODMCParticle*)mcTrackArray->At(mcLabelParticleMother);
5674  pdgCodeParticleMother = TMath::Abs(mcTrackParticleMother->GetPdgCode());
5675  ((TH1F*)fDaughterHistogramArrayExtra[3][3])->Fill(pdgCodeParticleMother);
5676  }
5677  }
5678  }
5679 
5680  if(!isDesiredCandidate)
5681  {
5682  ((TH1F*)(fOutputB0MC->FindObject("totalITSBackground")))->Fill(totalNumberOfITS);
5683  ((TH1F*)(fOutputB0MC->FindObject("totalTPCBackground")))->Fill(totalNumberOfTPC);
5684  ((TH1F*)(fOutputB0MC->FindObject("totalSigmaPIDBackground")))->Fill(sqrt(nSigmaTPCtotal + nSigmaTOFtotal));
5685  }
5686  if(isDesiredCandidate)
5687  {
5688  ((TH1F*)(fOutputB0MC->FindObject("totalITSSignal")))->Fill(totalNumberOfITS);
5689  ((TH1F*)(fOutputB0MC->FindObject("totalTPCSignal")))->Fill(totalNumberOfTPC);
5690  ((TH1F*)(fOutputB0MC->FindObject("totalSigmaPIDSignal")))->Fill(sqrt(nSigmaTPCtotal + nSigmaTOFtotal));
5691  }
5692 
5693 
5694  return;
5695 }
5696 //-------------------------------------------------------------------------------------
5698 {
5702  Int_t chargeDStar = DStar->Charge();
5703 
5704  Double_t e[3];
5705  UInt_t prongs[2];
5706  if(chargeDStar==1){
5707  e[0]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(0,211);
5708  e[1]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(1,321);
5709  prongs[0] = 211;
5710  prongs[1] = 321;
5711  }
5712  else if (chargeDStar==-1)
5713  {
5714  e[0]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(1,211);
5715  e[1]=((AliAODRecoDecayHF2Prong*)DStar->GetDaughter(1))->EProng(0,321);
5716  prongs[1] = 211;
5717  prongs[0] = 321;
5718  }
5719  else
5720  {
5721  std::cout << "Wrong charge DStar." << std::endl;
5722  return 0;
5723  }
5724  e[2]=DStar->EProng(0,211);