AliPhysics  vAN-20150810 (e477c3b)
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros
AliHFsubtractBFDcuts.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  * appear in the supporting documentation. The authors make no claims *
12  * about the suitability of this software for any purpose. It is *
13  * provided "as is" without express or implied warranty. *
14  **************************************************************************/
15 
17 // //
18 // Class for storing and handling D0 meson candidates properties //
19 // for estimating the feed-down fraction using several sets of cuts //
20 // Andrea Rossi <andrea.rossi@cern.ch> //
21 // Felix Reidt <felix.reidt@cern.ch> //
22 // //
24 #include "AliHFsubtractBFDcuts.h"
25 
26 #include <vector>
27 
28 #include "TNamed.h"
29 #include "THnSparse.h"
30 #include "TH1F.h"
31 #include "TClonesArray.h"
32 #include "TString.h"
33 #include "TObjString.h"
34 #include "TMath.h"
35 
37 #include "AliAODMCParticle.h"
38 #include "AliAODEvent.h"
39 #include "AliAODVertex.h"
40 #include "AliESDVertex.h"
41 #include "AliVTrack.h"
42 #include "AliAODTrack.h"
43 #include "AliVertexerTracks.h"
44 #include "AliExternalTrackParam.h"
45 #include "AliNeutralTrackParam.h"
46 
50 
52  : TNamed()
53  , fIsMC(kTRUE)
54  , fCheckAcceptance(kTRUE)
55  , fResolveResonances(kTRUE)
56  , fPtMCGenStep(0x0)
57  , fCutsData(0x0)
58  , fCutsMC(0x0)
59  , fMCarray(0x0)
60  , fAODtracks(0x0)
61  , fLabCand(-1)
62  , fNprongs((UInt_t)-1)
63  , fNprongsInAcc((UInt_t)-1)
64  , fMotherPt(-1.)
65  , fGenerateDecayList(kTRUE)
66  , fDecayProngs()
67  , fDecayStrList(0x0)
68  , fQAhists(0x0)
69 {
70  // default constructor
71 }
72 
73 AliHFsubtractBFDcuts::AliHFsubtractBFDcuts(const char* name, const char* title)
74  : TNamed(name,title)
75  , fIsMC(kTRUE)
76  , fCheckAcceptance(kTRUE)
77  , fResolveResonances(kTRUE)
78  , fPtMCGenStep(0x0)
79  , fCutsData(0x0)
80  , fCutsMC(0x0)
81  , fMCarray(0x0)
82  , fAODtracks(0x0)
83  , fLabCand(-1)
84  , fNprongs((UInt_t)-1)
85  , fNprongsInAcc((UInt_t)-1)
86  , fMotherPt(-1.)
87  , fGenerateDecayList(kTRUE)
88  , fDecayProngs()
89  , fDecayStrList(0x0)
90  , fQAhists(0x0)
91 {
92  // default constructor with name
93  fDecayStrList = new TList();
94  fDecayStrList->SetOwner();
95  fQAhists = new TList();
96  fQAhists->SetOwner();
97 }
98 
100  : TNamed(c.GetName(),c.GetTitle())
101  , fIsMC(c.fIsMC)
102  , fCheckAcceptance(c.fCheckAcceptance)
103  , fResolveResonances(c.fResolveResonances)
104  , fPtMCGenStep(c.fPtMCGenStep)
105  , fCutsData(c.fCutsData)
106  , fCutsMC(c.fCutsMC)
107  , fMCarray(c.fMCarray)
108  , fAODtracks(c.fAODtracks)
109  , fLabCand(c.fLabCand)
110  , fNprongs(c.fNprongs)
111  , fNprongsInAcc(c.fNprongsInAcc)
112  , fMotherPt(c.fMotherPt)
113  , fGenerateDecayList(c.fGenerateDecayList)
114  , fDecayProngs(c.fDecayProngs)
115  , fDecayStrList(c.fDecayStrList) // FIXME: TList copy contructor not implemented
116  , fQAhists(c.fQAhists)
117 {
118  // copy constructor
119 }
120 
122 {
123  // assignment operator
124  return c;
125 }
126 
128  AliDebug(3, "TODO: implement me!");
129 }
130 
132  Int_t dimAxes[4]={500 ,24 ,30 ,400 };// mass, pt, normLXY, cosPointXY
133  Double_t min[4]={ 1.7, 0., 0., 0.96};
134  Double_t max[4]={ 2.2,24.,30., 1. };
135  fCutsData=new THnSparseF("fCutsDataFD","fCutsDataFD",4,dimAxes,min,max);
136  fCutsData->GetAxis(0)->SetName("mass");
137  fCutsData->GetAxis(0)->SetTitle("Mass (K,#pi) (GeV/#it{c^{2}})");
138  fCutsData->GetAxis(1)->SetName("pt");
139  fCutsData->GetAxis(1)->SetTitle("#it{p}_{T} (GeV/#it{c})");
140  fCutsData->GetAxis(2)->SetName("NormDecLengthXY");
141  fCutsData->GetAxis(2)->SetTitle("Normalized XY decay length");
142  fCutsData->GetAxis(3)->SetName("CosPointXY");
143  fCutsData->GetAxis(3)->SetTitle("Cos#theta_{point}^{XY}");
144 
145  Int_t dimAxesMC[5]={24 , 30,400 ,20 ,24 };// pt, normLXY, cosPointXY, #prongs, mother pt
146  Double_t minMC[5]={ 0., 0., 0.96, 0., 0.};
147  Double_t maxMC[5]={24.,30., 1. ,20.,24.};
148  fCutsMC=new THnSparseF("fCutsMCFD","fCutsMCFD",5,dimAxesMC,minMC,maxMC);
149  fCutsMC->GetAxis(0)->SetName("pt");
150  fCutsMC->GetAxis(0)->SetTitle("#it{p}_{T} (GeV/#it{c})");
151  fCutsMC->GetAxis(1)->SetName("NormDecLengthXY");
152  fCutsMC->GetAxis(1)->SetTitle("Normalized XY decay length");
153  fCutsMC->GetAxis(2)->SetName("CosPointXY");
154  fCutsMC->GetAxis(2)->SetTitle("Cos#theta_{point}^{XY}");
155  fCutsMC->GetAxis(3)->SetName("nProngs");
156  fCutsMC->GetAxis(3)->SetTitle("Number of Decay Prongs");
157  fCutsMC->GetAxis(4)->SetName("Mother_pt");
158  fCutsMC->GetAxis(4)->SetTitle("Mother #it{p}_{T} (GeV/#it{c})");
159 
160  fPtMCGenStep=new TH3F("fPtMCGenStep","fPtMCGenStep;#it{p}_{T};Number of prongs;Mother #it{p}_{T}",24,0.,24.,20,0.,20.,24,0.,24.);
161 
162  fQAhists->Add(new TH1F("hRapidityDist", "All Particles;y;Counts (a.u.)",800,-4.0,4.0)); // 0
163  fQAhists->Add(new TH1F("hRapidityDistStable", "All Stable Particles;y;Counts (a.u.)",800,-4.0,4.0)); // 1
164  fQAhists->Add(new TH1F("hDecayLengthB", ";Decay Length B Meson (cm?);counts (a.u.)",200,0.,2.0)); // 2
165  fQAhists->Add(new TH1F("hDecayLengthBxy", ";Decay Length B Meson in XY direction (cm?);counts (a.u.)",200,0.,2.0)); // 3
166  fQAhists->Add(new TH2F("hDCABhypothesis", "All Particles;Distance of Closest Approach (cm?);Impact parameter of D0 x track (cm^{2});counts (a.u.)",1000,0.,1.0,10000,0.,0.01)); // 4
167  fQAhists->Add(new TH2F("hDCABprongs", "Only Real B Decay Prongs;Distance of Closest Approach (cm?);Impact parameter of D0 x track (cm^{2});counts (a.u.)",1000,0.,1.0,10000,0.,0.01)); // 5
168  return;
169 }
170 
171 void AliHFsubtractBFDcuts::FillGenStep(AliAODMCParticle *dzeropart,Double_t pt/*=-1.*/,Double_t weight/*=1.*/,TClonesArray* mcArray/*=0x0*/){
172  fMCarray=mcArray;
173  if (pt<0) {
174  pt=dzeropart->Pt();
175  }
176  if (fIsMC && fMCarray) {
177  fNprongs=0;
178  fNprongsInAcc=0;
179  fDecayChain=kFALSE; // TODO: use this value
180  fMotherPt=pt;
181  fLabCand=dzeropart->GetLabel();
182  if (!AnalyseDecay(fGenerateDecayList, kTRUE)) {
183  AliDebug(3, "Error during the decay type determination!");
184  }
185  fPtMCGenStep->Fill(pt,(Double_t)fNprongsInAcc,fMotherPt,weight);
186  // y distribution of all particles
187  for (Int_t i=0; i<fMCarray->GetEntriesFast(); ++i) {
188  Double_t y=((AliAODMCParticle*)fMCarray->UncheckedAt(i))->Y();
189  ((TH1F*)fQAhists->At(0))->Fill(y); // all particles
190  if (IsStable(i)) ((TH1F*)fQAhists->At(1))->Fill(y); // all stable particles
191  }
192  }
193  else {
194  fPtMCGenStep->Fill(pt,0.,weight);
195  }
196  fMCarray=0x0;
197  return;
198 }
199 
200 void AliHFsubtractBFDcuts::FillSparses(AliAODRecoDecayHF2Prong *dzerocand,Int_t isSelected,Double_t pt,Double_t massD0,Double_t massD0bar,Double_t weight,TClonesArray* mcArray,AliAODEvent* aodEvent){
201  fMCarray=mcArray;
202  if (aodEvent) {
203  fAODtracks=aodEvent->GetTracks();
204  fBkG =aodEvent->GetMagneticField();
205  fPriVtx =aodEvent->GetPrimaryVertex();
206  }
207  if(isSelected<=0||isSelected>3){
208  Printf("isSelected = %d", isSelected);
209  return;
210  }
211  if(massD0<0){
212  dzerocand->InvMassD0(massD0,massD0bar);
213  Printf("mass D0 =%f, massD0bar = %f ", massD0, massD0bar);
214  }
215  if(pt<0){
216  pt=dzerocand->Pt();
217  }
218  Double_t normalDecayLengXY=dzerocand->NormalizedDecayLengthXY();
219  Double_t cptangXY=dzerocand->CosPointingAngleXY();
220  Double_t pointData[4]={massD0,pt,normalDecayLengXY,cptangXY};
221 
222  if(isSelected==1||isSelected==3){
223  fCutsData->Fill(pointData,weight);
224  }
225  if(isSelected==2||isSelected==3){
226  pointData[0]=massD0bar;
227  fCutsData->Fill(pointData,weight);
228  }
229 
230  if(fIsMC && fMCarray) {
231  fNprongs=0;
232  fNprongsInAcc=0;
233  fDecayChain=kFALSE; // TODO: use this value
234  fMotherPt=pt;
235  fD0Cand=dzerocand;
236  if (fD0Cand) fD0CandParam=new AliNeutralTrackParam(fD0Cand);
237  if (!GetCandidateLabel() || !AnalyseDecay(kFALSE, kFALSE)) {
238  AliDebug(3, "Error during the decay type determination!");
239  }
240  Double_t pointMC[5]={pt,normalDecayLengXY,cptangXY,(Double_t)fNprongsInAcc,fMotherPt};
241  fCutsMC->Fill(pointMC, weight);
242  }
243  fMCarray=0x0;
244  fAODtracks=0x0;
245  fBkG=0.;
246  fD0Cand=0x0;
247  return;
248 }
249 
251  if (fD0Cand) {
252  Int_t labDau0=((AliAODTrack*)fD0Cand->GetDaughter(0))->GetLabel();
253  AliAODMCParticle* firstDau=(AliAODMCParticle*)fMCarray->UncheckedAt(TMath::Abs(labDau0));
254  fLabCand = firstDau->GetMother();
255  return kTRUE;
256  }
257  else {
258  AliDebug(3, "Could not obtain the label of the candidate");
259  return kFALSE;
260  }
261  return kFALSE;
262 }
263 
264 Bool_t AliHFsubtractBFDcuts::AnalyseDecay(Bool_t generateString, Bool_t mcOnly) {
265  AliAODMCParticle* cand=(AliAODMCParticle*)fMCarray->UncheckedAt(fLabCand);
266  fLabMother = cand->GetMother();
267  AliAODMCParticle* mother = (AliAODMCParticle*)fMCarray->UncheckedAt(fLabMother);
268  Int_t pdgMother = mother->GetPdgCode();
269  if (pdgMother<0) pdgMother*=-1; // treat particles and anti-particles the same way
270  if (pdgMother==4 || pdgMother==2212 || pdgMother==2112) { // prompt production
271  fNprongs=1;
272  fNprongsInAcc=1;
273  return kTRUE;
274  }
275  if ((pdgMother%1000)/100==4 || (pdgMother%10000)/1000==4) {
276  // chained decay of charmed hadrons, using recursion to resolve it
277  fDecayChain=kTRUE;
279  return AnalyseDecay(generateString, mcOnly);
280  }
281  if ((pdgMother%1000)/100!=5 && (pdgMother%10000)/1000!=5) {
282  AliDebug(3, "Found strange decay, expected the mother to be a beauty hadron!");
283  fNprongs=0;
284  fNprongsInAcc=0;
285  return kFALSE;
286  }
287  CountProngs(fLabMother, fLabCand, generateString, mcOnly); // count the prongs
288 
289  if (generateString) {
290  // Store the decay
291  std::sort(fDecayProngs.begin(), fDecayProngs.end());
292  TString decayStr = "";
293  for (ULong64_t i=0; i<fDecayProngs.size(); ++i) {
294  decayStr = (i==0) ? Form("%d", fDecayProngs[i]) : Form("%s_%d", decayStr.Data(), fDecayProngs[i]);
295  }
296  //decayStr = Form("%s__%d_%d_%d", decayStr.Data(), fNprongs, fNprongsInAcc, fDecayProngs.size());
297  TObjString* str = new TObjString(decayStr);
298  if (!fDecayStrList->FindObject(str)) fDecayStrList->Add(str); // only allow unique entries
299  fDecayProngs.clear();
300  }
301 
302  if (mcOnly) {
303  Double_t decayLengthB; // Decay length B meson
304  Double_t decayLengthBxy; // Decay length B meson (xy-plane)
305  Double_t originB[3] = {0.,0.,0.};
306  if(!mother->XvYvZv(originB)) AliDebug(3, "Couldn't determine MC origin of the beauty hadron");
307  Double_t originD[3] = {0.,0.,0.};
308  if(!cand->XvYvZv(originD)) AliDebug(3, "Couldn't determine MC origin of the charmed hadron");
309  decayLengthBxy = TMath::Sqrt((originB[0]-originD[0])*(originB[0]-originD[0])+
310  (originB[1]-originD[1])*(originB[1]-originD[1]));
311  decayLengthB = TMath::Sqrt(decayLengthBxy*decayLengthBxy+(originB[2]-originD[2])*(originB[2]-originD[2]));
312  ((TH1F*)fQAhists->At(2))->Fill(decayLengthB);
313  ((TH1F*)fQAhists->At(3))->Fill(decayLengthBxy);
314  }
315  else {
316  for (Int_t iAODtrack=0; iAODtrack<fAODtracks->GetEntriesFast(); ++iAODtrack) {
317  CheckBhypothesis(iAODtrack, kFALSE);
318  }
319  }
320 
321  fMotherPt=mother->Pt();
322  return kTRUE;
323 }
324 
325 void AliHFsubtractBFDcuts::CountProngs(Int_t labCurrMother, Int_t labCurrExcl,
326  Bool_t generateString, Bool_t mcOnly) {
327  for (Int_t iMCParticle=0; iMCParticle<fMCarray->GetEntriesFast(); ++iMCParticle) {
328  if (iMCParticle!=labCurrExcl) {
329  if (((AliAODMCParticle*)fMCarray->UncheckedAt(iMCParticle))->GetMother()==labCurrMother) {
330  if (!fResolveResonances || IsStable(iMCParticle)) {
331  if (generateString) fDecayProngs.push_back(((AliAODMCParticle*)fMCarray->UncheckedAt(iMCParticle))->GetPdgCode());
332  ++fNprongs;
333  if (!mcOnly) {
334  for (Int_t iAODtrack=0; iAODtrack<fAODtracks->GetEntriesFast(); ++iAODtrack) {
335  AliAODTrack* aodTrack=(AliAODTrack*)fAODtracks->UncheckedAt(iAODtrack);
336  if (aodTrack->GetLabel()==iMCParticle) CheckBhypothesis(iAODtrack, kTRUE);
337  }
338  }
339  if (!fCheckAcceptance || IsInAcceptance(iMCParticle)) {
340  ++fNprongsInAcc;
341  }
342  }
343  else CountProngs(iMCParticle, -1, generateString, mcOnly);
344  }
345  }
346  else {
347  ++fNprongs; // candidate is only counted as a single prong
348  ++fNprongsInAcc;
349  if (generateString) fDecayProngs.push_back(((AliAODMCParticle*)fMCarray->UncheckedAt(iMCParticle))->GetPdgCode());
350  }
351  }
352 }
353 
354 Bool_t AliHFsubtractBFDcuts::IsStable(Int_t labProng) const {
355  const Int_t stablePartPdgs[] = { 11, 13, 211, 321, 2212, 12, 14, 22, 111, 130 };
356  const Int_t nStablePartPdgs = sizeof(stablePartPdgs)/sizeof(Int_t);
357  AliAODMCParticle* prong = (AliAODMCParticle*)fMCarray->UncheckedAt(labProng);
358  Int_t pdgProng = prong->GetPdgCode();
359  if (pdgProng<0) pdgProng*=-1; // treat particles and anti-particles the same way
360  for (Int_t iPdg=0; iPdg<nStablePartPdgs; ++iPdg) {
361  if (stablePartPdgs[iPdg] == pdgProng) return kTRUE;
362  }
363  return kFALSE;
364 }
365 
366 Bool_t AliHFsubtractBFDcuts::IsInAcceptance(Int_t labProng) const {
367  AliDebug(1, "AliHFsubtractBFDcuts::IsInAcceptance(...) hasn't been implemented yet, prong");
368  Double_t eta = ((AliAODMCParticle*)fMCarray->UncheckedAt(labProng))->Eta();
369  Double_t pt = ((AliAODMCParticle*)fMCarray->UncheckedAt(labProng))->Pt();
370  Short_t charge = ((AliAODMCParticle*)fMCarray->UncheckedAt(labProng))->Charge();
371  if ((pt>0.15) && (eta>-0.9) && (eta<0.9) && (charge!=0)) return kTRUE;
372  return kFALSE;
373 }
374 
375 Bool_t AliHFsubtractBFDcuts::CheckBhypothesis(Int_t iAODtrack, Bool_t Bprong) {
376  AliExternalTrackParam *t = new AliExternalTrackParam();
377  t->CopyFromVTrack((AliVTrack*)fAODtracks->UncheckedAt(iAODtrack));
378 
379  TObjArray *tracks = new TObjArray(2);
380  tracks->AddAt(t, 0);
381  tracks->AddAt(fD0CandParam,1);
382 
383  AliAODVertex *bVtx = RecBvtx(tracks);
384  if(!bVtx) {
385  AliDebug(3, "Couldn't reconstruct B meson vertex!");
386  delete t; t=0x0;
387  return kFALSE;
388  }
389 
390  const Double_t maxD = 1.;
391 
392  // Propagate candidates to secondary vertex
393  Double_t dz[2],cov[3];
394  t->PropagateToDCA(bVtx,fBkG,maxD,dz,cov);
395  fD0CandParam->PropagateToDCA(bVtx,fBkG,maxD,dz,cov);
396 
397  // Impact parameters
398  t->PropagateToDCA(fPriVtx,fBkG,maxD,dz,cov);
399  Double_t d0Track=dz[0];
400  Double_t d0TrackErr=TMath::Sqrt(cov[0]);
401  fD0CandParam->PropagateToDCA(fPriVtx,fBkG,maxD,dz,cov);
402  Double_t d0D0Cand=dz[0];
403  Double_t d0D0CandErr=TMath::Sqrt(cov[0]);
404 
405  // distance of closest approach of the D0 and the track
406  Double_t xDCAtrack, xDCAD0;
407  Double_t dcaB=t->GetDCA(fD0CandParam,fBkG,xDCAtrack,xDCAD0);
408  if (!Bprong) ((TH1F*)fQAhists->At(4))->Fill(dcaB,d0D0Cand*d0Track);
409  else ((TH1F*)fQAhists->At(5))->Fill(dcaB,d0D0Cand*d0Track);
410 
411  delete tracks; tracks=0x0;
412  delete bVtx ; bVtx =0x0;
413  delete t ; t =0x0;
414  return kTRUE;
415 }
416 
417 AliAODVertex* AliHFsubtractBFDcuts::RecBvtx(TObjArray *tracks) const {
418  AliESDVertex* vtxESD=0x0;
419  AliVertexerTracks* vertexer = new AliVertexerTracks(fBkG);
420  vertexer->SetVtxStart((AliESDVertex*)fPriVtx);
421  vtxESD = (AliESDVertex*)vertexer->VertexForSelectedESDTracks(tracks);
422  delete vertexer; vertexer=0x0;
423  if(!vtxESD || vtxESD->GetNContributors()!=tracks->GetEntriesFast()) {
424  AliDebug(3, "Couldn't reconstruct B Meson vertex");
425  delete vtxESD; vtxESD=0x0;
426  return 0x0;
427  }
428  Double_t rVtxSq=vtxESD->GetX()*vtxESD->GetX()+vtxESD->GetY()*vtxESD->GetY();
429  if(rVtxSq>8.){
430  // vertex outside beam pipe, reject candidate to avoid propagation through material
431  delete vtxESD; vtxESD=0x0;
432  return 0x0;
433  }
434  // convert to AliAODVertex
435  Double_t pos[3],cov[6],chi2perNDF;
436  vtxESD->GetXYZ(pos);
437  vtxESD->GetCovMatrix(cov);
438  chi2perNDF=vtxESD->GetChi2toNDF();
439  delete vtxESD; vtxESD=0x0;
440  return new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,0);
441 }
Int_t charge
Double_t NormalizedDecayLengthXY() const
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Bool_t AnalyseDecay(Bool_t generateString, Bool_t mcOnly)
Bool_t fIsMC
Method to check Whether the current D0 candidate and the track originate from a B decay...
const char * title
Definition: MakeQAPdf.C:26
AliAODVertex * RecBvtx(TObjArray *tracks) const
Is that prong within the fiducial acceptance.
std::vector< Int_t > fDecayProngs
Generate the list containig strings with all PDG codes of the decay prongs.
Double_t CosPointingAngleXY() const
void FillSparses(AliAODRecoDecayHF2Prong *dzeroPart, Int_t isSelected, Double_t pt=-1, Double_t massD0=-1, Double_t massD0bar=-1, Double_t weight=1., TClonesArray *mcArray=0x0, AliAODEvent *aodEvent=0x0)
AliAODRecoDecayHF2Prong * fD0Cand
Magnetic field (z-direction) in units of kG.
AliNeutralTrackParam * fD0CandParam
Pointer to the D0 candidate from reconstruction.
Int_t fLabMother
Label of the candidate D0 (charmed hadron in case of a chained decay)
Bool_t fCheckAcceptance
flag for MC/Data
TH3F * fPtMCGenStep
flag resolve resonances in during the prong determination
TClonesArray * fAODtracks
! TClonesArray holding the AliAODTracks of the event to be processed
AliAODVertex * fPriVtx
! Primary AOD vertex
void FillGenStep(AliAODMCParticle *dzeroMC, Double_t pt=-1, Double_t weight=1., TClonesArray *mcArray=0x0)
TList * fQAhists
! List with QA histograms
THnSparseF * fCutsData
! THnSparse for cut variables (data, with inv mass axis), first axis is always mass ...
TList * fDecayStrList
PDG codes of the daughters separated.
THnSparseF * fCutsMC
! THnSparse for cut variables (MC at PID level, w/o mass axis)y
TClonesArray * fMCarray
Event specific variables.
UInt_t fNprongsInAcc
Number of prongs, counting the first charmed hadron as one particle (simulation cuts can lead to loss...
UInt_t fNprongs
Label of the mother of the candidate D0 (or charmed hadron)
Bool_t IsStable(Int_t labProng) const
counting the prongs of labCurrMother, labCurrExcl is assumed to be a stable particle ...
void CountProngs(Int_t labCurrMother, Int_t labCurrExcl, Bool_t generateString, Bool_t mConly)
check in which decay process a particle was created
Double_t fMotherPt
Chained decay of charmed hadrons.
Bool_t fResolveResonances
flag for checking whether the decay prongs are within acceptance
Bool_t fDecayChain
Number of prongs, counting only the particles within acceptance.
Bool_t IsInAcceptance(Int_t labProng) const
Is that prong a stable particle?
AliHFsubtractBFDcuts operator=(const AliHFsubtractBFDcuts &c)
Int_t fLabCand
Pointer to an AliNeutralTrackParam of the D0 candidata for DCA calculation.
Bool_t CheckBhypothesis(Int_t iAODtrack, Bool_t Bprong)
Reconstruct a secondary vertex with the supplied tracks.