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