19 #include <TClonesArray.h>
23 #include <TParticle.h>
25 #include "AliAODEvent.h"
26 #include "AliAODMCHeader.h"
27 #include "AliGenEventHeader.h"
28 #include "AliAODMCParticle.h"
53 fMinEtaForTracklets(-1.),
54 fMaxEtaForTracklets(1.)
65 fMinEtaForTracklets(-1.),
66 fMaxEtaForTracklets(1.)
77 Double_t errSigSq=errsignal*errsignal;
78 Double_t errBkgSq=errbackground*errbackground;
79 Double_t sigPlusBkg=signal+background;
80 if(sigPlusBkg>0. && signal>0.){
81 significance = signal/TMath::Sqrt(signal+background);
82 errsignificance = significance*TMath::Sqrt((errSigSq+errBkgSq)/(4.*sigPlusBkg*sigPlusBkg)+(background/sigPlusBkg)*errSigSq/signal/signal);
95 c[0]=0.626657; c[1]=0.; c[2]=-0.09694; c[3]=0.02754; c[4]=-0.002283;
98 c[0]=0.; c[1]=0.25; c[2]=-0.011414; c[3]=-0.034726; c[4]=0.006815;
101 return c[0]*x+c[1]*x*x+c[2]*x*x*x+c[3]*x*x*x*x+c[4]*x*x*x*x*x;
106 return TMath::Sqrt(TMath::Pi()/8)*x*TMath::Exp(-x*x/4)*(TMath::BesselI0(x*x/4)+TMath::BesselI1(x*x/4));
127 if(y1*y2>0)
return -1;
132 while((x2-x1)>0.0001){
142 ymed=
Pol(xmed,2)-res;
145 if((y1*ymed)<0) x2=xmed;
146 if((y2*ymed)<0)x1=xmed;
147 if(ymed==0)
return xmed;
156 Double_t chisub=
FindChi(resSub,k);
157 Double_t chifull=chisub*TMath::Sqrt(2);
158 if(k==1)
return ResolK1(chifull);
159 else if(k==2)
return Pol(chifull,2);
161 printf(
"k should be <=2\n");
169 if(!hSubEvCorr)
return 1.;
176 if(!hSubEvCorr)
return 1.;
178 printf(
"%f\n",resSub);
184 if(!hSubEvCorr)
return 1.;
186 printf(
"%f\n",resSub);
192 AliAODTracklets* tracklets=ev->GetTracklets();
193 Int_t nTr=tracklets->GetNumberOfTracklets();
195 for(Int_t iTr=0; iTr<nTr; iTr++){
196 Double_t theta=tracklets->GetTheta(iTr);
197 Double_t eta=-TMath::Log(TMath::Tan(theta/2.));
198 if(eta>mineta && eta<maxeta) count++;
207 for(Int_t i=0;i<arrayMC->GetEntriesFast();i++){
208 AliAODMCParticle *part=(AliAODMCParticle*)arrayMC->UncheckedAt(i);
209 Int_t
charge = part->Charge();
210 Double_t eta = part->Eta();
211 if(charge!=0 && eta>mineta && eta<maxeta) nChargedMC++;
220 for(Int_t i=0;i<arrayMC->GetEntriesFast();i++){
221 AliAODMCParticle *part=(AliAODMCParticle*)arrayMC->UncheckedAt(i);
222 Int_t
charge = part->Charge();
223 Double_t eta = part->Eta();
224 if(charge!=0 && eta>mineta && eta<maxeta){
225 if(part->IsPrimary())nChargedMC++;
235 for(Int_t i=0;i<arrayMC->GetEntriesFast();i++){
236 AliAODMCParticle *part=(AliAODMCParticle*)arrayMC->UncheckedAt(i);
237 Int_t
charge = part->Charge();
238 Double_t eta = part->Eta();
239 if(charge!=0 && eta>mineta && eta<maxeta){
240 if(part->IsPhysicalPrimary())nChargedMC++;
254 Double_t multV0AEq=0;
255 for(Int_t iCh = 32; iCh < 64; ++iCh) {
256 Double_t mult = ev->GetVZEROEqMultiplicity(iCh);
268 Double_t multV0CEq=0;
269 for(Int_t iCh = 0; iCh < 32; ++iCh) {
270 Double_t mult = ev->GetVZEROEqMultiplicity(iCh);
277 void AliVertexingHFUtils::AveragePt(Float_t& averagePt, Float_t& errorPt,Float_t
ptmin,Float_t
ptmax, TH2F* hMassD, Float_t massFromFit, Float_t sigmaFromFit, TF1* funcB2, Float_t sigmaRangeForSig,Float_t sigmaRangeForBkg, Float_t
minMass, Float_t
maxMass, Int_t
rebin){
282 Int_t start=hMassD->FindBin(ptmin);
283 Int_t end=hMassD->FindBin(ptmax)-1;
284 const Int_t nx=end-start;
285 TH2F *hMassDpt=
new TH2F(
"hptmass",
"hptmass",nx,ptmin,ptmax,hMassD->GetNbinsY(),hMassD->GetYaxis()->GetBinLowEdge(1),hMassD->GetYaxis()->GetBinLowEdge(hMassD->GetNbinsY())+hMassD->GetYaxis()->GetBinWidth(hMassD->GetNbinsY()));
286 for(Int_t ix=start;ix<end;ix++){
287 for(Int_t iy=1;iy<=hMassD->GetNbinsY();iy++){
288 hMassDpt->SetBinContent(ix-start+1,iy,hMassD->GetBinContent(ix,iy));
289 hMassDpt->SetBinError(ix-start+1,iy,hMassD->GetBinError(ix,iy));
293 Double_t minMassSig=massFromFit-sigmaRangeForSig*sigmaFromFit;
294 Double_t maxMassSig=massFromFit+sigmaRangeForSig*sigmaFromFit;
295 Int_t minBinSig=hMassD->GetYaxis()->FindBin(minMassSig);
296 Int_t maxBinSig=hMassD->GetYaxis()->FindBin(maxMassSig);
297 Double_t minMassSigBin=hMassD->GetYaxis()->GetBinLowEdge(minBinSig);
298 Double_t maxMassSigBin=hMassD->GetYaxis()->GetBinLowEdge(maxBinSig)+hMassD->GetYaxis()->GetBinWidth(maxBinSig);
301 Double_t maxMassBkgLow=massFromFit-sigmaRangeForBkg*sigmaFromFit;
302 Int_t minBinBkgLow=TMath::Max(hMassD->GetYaxis()->FindBin(minMass),2);
303 Int_t maxBinBkgLow=hMassD->GetYaxis()->FindBin(maxMassBkgLow);
304 Double_t minMassBkgLowBin=hMassD->GetYaxis()->GetBinLowEdge(minBinBkgLow);
305 Double_t maxMassBkgLowBin=hMassD->GetYaxis()->GetBinLowEdge(maxBinBkgLow)+hMassD->GetYaxis()->GetBinWidth(maxBinBkgLow);
306 Double_t minMassBkgHi=massFromFit+sigmaRangeForBkg*sigmaFromFit;
307 Int_t minBinBkgHi=hMassD->GetYaxis()->FindBin(minMassBkgHi);
308 Int_t maxBinBkgHi=TMath::Min(hMassD->GetYaxis()->FindBin(maxMass),hMassD->GetNbinsY()-1);
309 Double_t minMassBkgHiBin=hMassD->GetYaxis()->GetBinLowEdge(minBinBkgHi);
310 Double_t maxMassBkgHiBin=hMassD->GetYaxis()->GetBinLowEdge(maxBinBkgHi)+hMassD->GetYaxis()->GetBinWidth(maxBinBkgHi);
313 Double_t bkgSig=funcB2->Integral(minMassSigBin,maxMassSigBin);
314 Double_t bkgLow=funcB2->Integral(minMassBkgLowBin,maxMassBkgLowBin);
315 Double_t bkgHi=funcB2->Integral(minMassBkgHiBin,maxMassBkgHiBin);
318 TH1F* hMptBkgLo=(TH1F*)hMassDpt->ProjectionX(
"hPtBkgLoBin",minBinBkgLow,maxBinBkgLow);
319 TH1F* hMptBkgHi=(TH1F*)hMassDpt->ProjectionX(
"hPtBkgHiBin",minBinBkgHi,maxBinBkgHi);
320 TH1F* hMptSigReg=(TH1F*)hMassDpt->ProjectionX(
"hCPtBkgSigBin",minBinSig,maxBinSig);
322 hMptBkgLo->Rebin(rebin);
323 hMptBkgHi->Rebin(rebin);
324 hMptSigReg->Rebin(rebin);
328 TH1F* hMptBkgLoScal=(TH1F*)hMptBkgLo->Clone(
"hPtBkgLoScalBin");
329 hMptBkgLoScal->Scale(bkgSig/bkgLow);
330 TH1F* hMptBkgHiScal=(TH1F*)hMptBkgHi->Clone(
"hPtBkgHiScalBin");
331 hMptBkgHiScal->Scale(bkgSig/bkgHi);
333 TH1F* hMptBkgAver=0x0;
334 hMptBkgAver=(TH1F*)hMptBkgLoScal->Clone(
"hPtBkgAverBin");
335 hMptBkgAver->Add(hMptBkgHiScal);
336 hMptBkgAver->Scale(0.5);
337 TH1F* hMptSig=(TH1F*)hMptSigReg->Clone(
"hCPtSigBin");
338 hMptSig->Add(hMptBkgAver,-1.);
340 averagePt = hMptSig->GetMean();
341 errorPt = hMptSig->GetMeanError();
346 delete hMptBkgLoScal;
347 delete hMptBkgHiScal;
356 const Double32_t *mean = aodEv->GetT0TOF();
357 if(mean && mean[0]<9999.)
return kTRUE;
364 if(!partD || !arrayMC || !mcHeader)
return 99999.;
365 Int_t code=partD->GetPdgCode();
366 if(TMath::Abs(code)!=421)
return 99999.;
369 mcHeader->GetVertex(vtxTrue);
371 partD->XvYvZv(origD);
372 Short_t
charge=partD->Charge();
373 Double_t pXdauTrue[2],pYdauTrue[2],pZdauTrue[2];
374 for(Int_t iDau=0; iDau<2; iDau++){
380 Int_t nDau=partD->GetNDaughters();
381 Int_t labelFirstDau = partD->GetDaughter(0);
383 for(Int_t iDau=0; iDau<2; iDau++){
384 Int_t ind = labelFirstDau+iDau;
385 AliAODMCParticle* part =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(ind));
387 printf(
"Daughter particle not found in MC array");
390 pXdauTrue[iDau]=part->Px();
391 pYdauTrue[iDau]=part->Py();
392 pZdauTrue[iDau]=part->Pz();
398 Double_t d0dummy[2]={0.,0.};
399 AliAODRecoDecayHF aodDvsMC(vtxTrue,origD,2,charge,pXdauTrue,pYdauTrue,pZdauTrue,d0dummy);
407 if(!partD || !arrayMC || !mcHeader)
return 99999.;
408 Int_t code=partD->GetPdgCode();
409 if(TMath::Abs(code)!=411)
return 99999.;
412 mcHeader->GetVertex(vtxTrue);
414 partD->XvYvZv(origD);
415 Short_t
charge=partD->Charge();
416 Double_t pXdauTrue[3],pYdauTrue[3],pZdauTrue[3];
417 for(Int_t iDau=0; iDau<3; iDau++){
423 Int_t nDau=partD->GetNDaughters();
424 Int_t labelFirstDau = partD->GetDaughter(0);
426 for(Int_t iDau=0; iDau<3; iDau++){
427 Int_t ind = labelFirstDau+iDau;
428 AliAODMCParticle* part =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(ind));
430 printf(
"Daughter particle not found in MC array");
433 pXdauTrue[iDau]=part->Px();
434 pYdauTrue[iDau]=part->Py();
435 pZdauTrue[iDau]=part->Pz();
439 for(Int_t iDau=0; iDau<2; iDau++){
440 Int_t ind = labelFirstDau+iDau;
441 AliAODMCParticle* part =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(ind));
443 printf(
"Daughter particle not found in MC array");
446 Int_t pdgCode=TMath::Abs(part->GetPdgCode());
447 if(pdgCode==211 || pdgCode==321){
448 pXdauTrue[theDau]=part->Px();
449 pYdauTrue[theDau]=part->Py();
450 pZdauTrue[theDau]=part->Pz();
453 Int_t nDauRes=part->GetNDaughters();
455 Int_t labelFirstDauRes = part->GetDaughter(0);
456 for(Int_t iDauRes=0; iDauRes<2; iDauRes++){
457 Int_t indDR = labelFirstDauRes+iDauRes;
458 AliAODMCParticle* partDR =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(indDR));
460 printf(
"Daughter particle not found in MC array");
464 Int_t pdgCodeDR=TMath::Abs(partDR->GetPdgCode());
465 if(pdgCodeDR==211 || pdgCodeDR==321){
466 pXdauTrue[theDau]=partDR->Px();
467 pYdauTrue[theDau]=partDR->Py();
468 pZdauTrue[theDau]=partDR->Pz();
476 printf(
"Wrong number of decay prongs");
481 Double_t d0dummy[3]={0.,0.,0.};
482 AliAODRecoDecayHF aodDvsMC(vtxTrue,origD,3,charge,pXdauTrue,pYdauTrue,pZdauTrue,d0dummy);
496 if(TMath::Abs(vtxZ)>10.0){
498 return uncorrectedNacc;
502 printf(
"ERROR: Missing TProfile for correction of multiplicity\n");
503 return uncorrectedNacc;
506 Double_t localAvg = estimatorAvg->GetBinContent(estimatorAvg->FindBin(vtxZ));
508 Double_t deltaM = uncorrectedNacc*(refMult/localAvg - 1);
510 Double_t correctedNacc = uncorrectedNacc + (deltaM>0 ? 1 : -1) *
gRandom->Poisson(TMath::Abs(deltaM));
512 return correctedNacc;
519 TList *lh=header->GetCocktailHeaders();
520 Int_t nh=lh->GetEntries();
521 for(Int_t i=0;i<nh;i++){
522 AliGenEventHeader* gh=(AliGenEventHeader*)lh->At(i);
523 TString genname=gh->GetName();
524 Int_t npart=gh->NProduced();
525 if(label>=nsumpart && label<(nsumpart+npart))
return genname;
536 Int_t lab=TMath::Abs(track->GetLabel());
541 while(nameGen.IsWhitespace()){
542 AliAODMCParticle *mcpart= (AliAODMCParticle*)arrayMC->At(lab);
544 printf(
"AliVertexingHFUtils::IsTrackInjected - BREAK: No valid AliAODMCParticle at label %i\n",lab);
547 Int_t mother = mcpart->GetMother();
549 printf(
"AliVertexingHFUtils::IsTrackInjected - BREAK: Reached primary particle without valid mother\n");
569 if(nameGen.IsWhitespace() || nameGen.Contains(
"ijing"))
return kFALSE;
577 Int_t nprongs=cand->GetNProngs();
578 for(Int_t i=0;i<nprongs;i++){
579 AliAODTrack *daugh=(AliAODTrack*)cand->GetDaughter(i);
590 AliDebug(2,
"Bachelor is injected, the whole candidate is then injected");
593 AliAODv0* v0 = cand->
Getv0();
594 Int_t nprongs = v0->GetNProngs();
595 for(Int_t i = 0; i < nprongs; i++){
596 AliAODTrack *daugh = (AliAODTrack*)v0->GetDaughter(i);
598 AliDebug(2, Form(
"V0 daughter number %d is injected, the whole candidate is then injected", i));
610 mother = mcPart->GetFirstMother();
612 Int_t abspdgGranma =0;
613 Bool_t isFromB=kFALSE;
614 Bool_t isQuarkFound=kFALSE;
617 TParticle* mcGranma = stack->Particle(mother);
619 pdgGranma = mcGranma->GetPdgCode();
620 abspdgGranma = TMath::Abs(pdgGranma);
621 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)){
624 if(abspdgGranma==4 || abspdgGranma==5) isQuarkFound=kTRUE;
625 mother = mcGranma->GetFirstMother();
627 printf(
"CheckOrigin: Failed casting the mother particle!");
631 if(searchUpToQuark && !isQuarkFound)
return 0;
632 if(isFromB)
return 5;
642 mother = mcPart->GetMother();
644 Int_t abspdgGranma =0;
645 Bool_t isFromB=kFALSE;
646 Bool_t isQuarkFound=kFALSE;
649 AliAODMCParticle* mcGranma =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(mother));
651 pdgGranma = mcGranma->GetPdgCode();
652 abspdgGranma = TMath::Abs(pdgGranma);
653 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)){
656 if(abspdgGranma==4 || abspdgGranma==5) isQuarkFound=kTRUE;
657 mother = mcGranma->GetMother();
659 printf(
"AliVertexingHFUtils::CheckOrigin: Failed casting the mother particle!");
663 if(searchUpToQuark && !isQuarkFound)
return 0;
664 if(isFromB)
return 5;
674 mother = mcPart->GetMother();
676 Int_t abspdgGranma =0;
679 AliAODMCParticle* mcGranma =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(mother));
681 pdgGranma = mcGranma->GetPdgCode();
682 abspdgGranma = TMath::Abs(pdgGranma);
683 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)){
684 return mcGranma->Pt();
686 if(abspdgGranma==4)
return -999.;
687 if(abspdgGranma==5)
return -1.;
688 mother = mcGranma->GetMother();
690 printf(
"AliVertexingHFUtils::GetBeautyMotherPt: Failed casting the mother particle!");
700 if(label<0)
return -1;
701 TParticle* mcPart = stack->Particle(label);
702 Int_t pdgD=mcPart->GetPdgCode();
703 if(TMath::Abs(pdgD)!=421)
return -1;
705 Int_t nDau=mcPart->GetNDaughters();
708 Int_t daughter0 = mcPart->GetDaughter(0);
709 Int_t daughter1 = mcPart->GetDaughter(1);
710 TParticle* mcPartDaughter0 = stack->Particle(daughter0);
711 TParticle* mcPartDaughter1 = stack->Particle(daughter1);
712 if(!mcPartDaughter0 || !mcPartDaughter1)
return -1;
713 arrayDauLab[0]=daughter0;
714 arrayDauLab[1]=daughter1;
715 Int_t pdgCode0=mcPartDaughter0->GetPdgCode();
716 Int_t pdgCode1=mcPartDaughter1->GetPdgCode();
717 if(!(TMath::Abs(pdgCode0)==321 && TMath::Abs(pdgCode1)==211) &&
718 !(TMath::Abs(pdgCode0)==211 && TMath::Abs(pdgCode1)==321)){
721 if(TMath::Abs(pdgCode0)==321 && (pdgD*pdgCode0)>0)
return -1;
722 if(TMath::Abs(pdgCode1)==321 && (pdgD*pdgCode1)>0)
return -1;
723 if((pdgCode0*pdgCode1)>0)
return -1;
724 Double_t sumPxDau=mcPartDaughter0->Px()+mcPartDaughter1->Px();
725 Double_t sumPyDau=mcPartDaughter0->Py()+mcPartDaughter1->Py();
726 Double_t sumPzDau=mcPartDaughter0->Pz()+mcPartDaughter1->Pz();
727 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
728 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
729 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
733 if(nDau==3 || nDau==4){
736 Double_t sumPxDau=0.;
737 Double_t sumPyDau=0.;
738 Double_t sumPzDau=0.;
740 Int_t labelFirstDau = mcPart->GetDaughter(0);
741 for(Int_t iDau=0; iDau<nDau; iDau++){
742 Int_t indDau = labelFirstDau+iDau;
743 if(indDau<0)
return -1;
744 TParticle* dau=stack->Particle(indDau);
746 Int_t pdgdau=dau->GetPdgCode();
747 if(TMath::Abs(pdgdau)==321){
748 if(pdgD>0 && pdgdau>0)
return -1;
749 if(pdgD<0 && pdgdau<0)
return -1;
754 arrayDauLab[nFoundKpi++]=indDau;
755 if(nFoundKpi>4)
return -1;
756 }
else if(TMath::Abs(pdgdau)==211){
761 arrayDauLab[nFoundKpi++]=indDau;
762 if(nFoundKpi>4)
return -1;
763 }
else if(TMath::Abs(pdgdau)==113 || TMath::Abs(pdgdau)==313){
764 Int_t nResDau=dau->GetNDaughters();
765 if(nResDau!=2)
return -1;
766 Int_t indFirstResDau=dau->GetDaughter(0);
767 for(Int_t resDau=0; resDau<2; resDau++){
768 Int_t indResDau=indFirstResDau+resDau;
769 if(indResDau<0)
return -1;
770 TParticle* resdau=stack->Particle(indResDau);
771 if(!resdau)
return -1;
772 Int_t pdgresdau=resdau->GetPdgCode();
773 if(TMath::Abs(pdgresdau)==321){
774 if(pdgD>0 && pdgresdau>0)
return -1;
775 if(pdgD<0 && pdgresdau<0)
return -1;
777 sumPxDau+=resdau->Px();
778 sumPyDau+=resdau->Py();
779 sumPzDau+=resdau->Pz();
780 arrayDauLab[nFoundKpi++]=indResDau;
781 if(nFoundKpi>4)
return -1;
783 if(TMath::Abs(pdgresdau)==211){
785 sumPxDau+=resdau->Px();
786 sumPyDau+=resdau->Py();
787 sumPzDau+=resdau->Pz();
788 arrayDauLab[nFoundKpi++]=indResDau;
789 if(nFoundKpi>4)
return -1;
796 if(nPions!=3)
return -1;
797 if(nKaons!=1)
return -1;
798 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -1;
799 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -1;
800 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -1;
810 Int_t pdgD=mcPart->GetPdgCode();
811 if(TMath::Abs(pdgD)!=421)
return -1;
813 Int_t nDau=mcPart->GetNDaughters();
816 Int_t daughter0 = mcPart->GetDaughter(0);
817 Int_t daughter1 = mcPart->GetDaughter(1);
818 AliAODMCParticle* mcPartDaughter0 =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(daughter0));
819 AliAODMCParticle* mcPartDaughter1 =
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(daughter1));
820 if(!mcPartDaughter0 || !mcPartDaughter1)
return -1;
821 arrayDauLab[0]=daughter0;
822 arrayDauLab[1]=daughter1;
823 Int_t pdgCode0=mcPartDaughter0->GetPdgCode();
824 Int_t pdgCode1=mcPartDaughter1->GetPdgCode();
825 if(!(TMath::Abs(pdgCode0)==321 && TMath::Abs(pdgCode1)==211) &&
826 !(TMath::Abs(pdgCode0)==211 && TMath::Abs(pdgCode1)==321)){
829 if(TMath::Abs(pdgCode0)==321 && (pdgD*pdgCode0)>0)
return -1;
830 if(TMath::Abs(pdgCode1)==321 && (pdgD*pdgCode1)>0)
return -1;
831 if((pdgCode0*pdgCode1)>0)
return -1;
832 Double_t sumPxDau=mcPartDaughter0->Px()+mcPartDaughter1->Px();
833 Double_t sumPyDau=mcPartDaughter0->Py()+mcPartDaughter1->Py();
834 Double_t sumPzDau=mcPartDaughter0->Pz()+mcPartDaughter1->Pz();
835 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
836 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
837 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
841 if(nDau==3 || nDau==4){
844 Double_t sumPxDau=0.;
845 Double_t sumPyDau=0.;
846 Double_t sumPzDau=0.;
848 Int_t labelFirstDau = mcPart->GetDaughter(0);
849 for(Int_t iDau=0; iDau<nDau; iDau++){
850 Int_t indDau = labelFirstDau+iDau;
851 if(indDau<0)
return -1;
852 AliAODMCParticle* dau=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(indDau));
854 Int_t pdgdau=dau->GetPdgCode();
855 if(TMath::Abs(pdgdau)==321){
856 if(pdgD>0 && pdgdau>0)
return -1;
857 if(pdgD<0 && pdgdau<0)
return -1;
862 arrayDauLab[nFoundKpi++]=indDau;
863 if(nFoundKpi>4)
return -1;
864 }
else if(TMath::Abs(pdgdau)==211){
869 arrayDauLab[nFoundKpi++]=indDau;
870 if(nFoundKpi>4)
return -1;
871 }
else if(TMath::Abs(pdgdau)==113 || TMath::Abs(pdgdau)==313){
872 Int_t nResDau=dau->GetNDaughters();
873 if(nResDau!=2)
return -1;
874 Int_t indFirstResDau=dau->GetDaughter(0);
875 for(Int_t resDau=0; resDau<2; resDau++){
876 Int_t indResDau=indFirstResDau+resDau;
877 if(indResDau<0)
return -1;
878 AliAODMCParticle* resdau=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(indResDau));
879 if(!resdau)
return -1;
880 Int_t pdgresdau=resdau->GetPdgCode();
881 if(TMath::Abs(pdgresdau)==321){
882 if(pdgD>0 && pdgresdau>0)
return -1;
883 if(pdgD<0 && pdgresdau<0)
return -1;
885 sumPxDau+=resdau->Px();
886 sumPyDau+=resdau->Py();
887 sumPzDau+=resdau->Pz();
888 arrayDauLab[nFoundKpi++]=indResDau;
889 if(nFoundKpi>4)
return -1;
891 if(TMath::Abs(pdgresdau)==211){
893 sumPxDau+=resdau->Px();
894 sumPyDau+=resdau->Py();
895 sumPzDau+=resdau->Pz();
896 arrayDauLab[nFoundKpi++]=indResDau;
897 if(nFoundKpi>4)
return -1;
904 if(nPions!=3)
return -1;
905 if(nKaons!=1)
return -1;
906 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -1;
907 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -1;
908 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -1;
917 if(label<0)
return -1;
918 TParticle* mcPart = stack->Particle(label);
919 Int_t pdgD=mcPart->GetPdgCode();
920 if(TMath::Abs(pdgD)!=411)
return -1;
922 Int_t nDau=mcPart->GetNDaughters();
923 Int_t labelFirstDau = mcPart->GetDaughter(0);
926 Double_t sumPxDau=0.;
927 Double_t sumPyDau=0.;
928 Double_t sumPzDau=0.;
931 if(nDau==3 || nDau==2){
932 for(Int_t iDau=0; iDau<nDau; iDau++){
933 Int_t indDau = labelFirstDau+iDau;
934 if(indDau<0)
return -1;
935 TParticle* dau=stack->Particle(indDau);
937 Int_t pdgdau=dau->GetPdgCode();
938 if(TMath::Abs(pdgdau)==321){
939 if(pdgD*pdgdau>0)
return -1;
944 arrayDauLab[nFoundKpi++]=indDau;
945 if(nFoundKpi>3)
return -1;
946 }
else if(TMath::Abs(pdgdau)==211){
947 if(pdgD*pdgdau<0)
return -1;
952 arrayDauLab[nFoundKpi++]=indDau;
953 if(nFoundKpi>3)
return -1;
954 }
else if(TMath::Abs(pdgdau)==313){
955 Int_t nResDau=dau->GetNDaughters();
956 if(nResDau!=2)
return -1;
957 Int_t indFirstResDau=dau->GetDaughter(0);
958 for(Int_t resDau=0; resDau<2; resDau++){
959 Int_t indResDau=indFirstResDau+resDau;
960 if(indResDau<0)
return -1;
961 TParticle* resdau=stack->Particle(indResDau);
962 if(!resdau)
return -1;
963 Int_t pdgresdau=resdau->GetPdgCode();
964 if(TMath::Abs(pdgresdau)==321){
965 if(pdgD*pdgresdau>0)
return -1;
966 sumPxDau+=resdau->Px();
967 sumPyDau+=resdau->Py();
968 sumPzDau+=resdau->Pz();
970 arrayDauLab[nFoundKpi++]=indResDau;
971 if(nFoundKpi>3)
return -1;
973 if(TMath::Abs(pdgresdau)==211){
974 if(pdgD*pdgresdau<0)
return -1;
975 sumPxDau+=resdau->Px();
976 sumPyDau+=resdau->Py();
977 sumPzDau+=resdau->Pz();
979 arrayDauLab[nFoundKpi++]=indResDau;
980 if(nFoundKpi>3)
return -1;
987 if(nPions!=2)
return -1;
988 if(nKaons!=1)
return -1;
989 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
990 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
991 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
992 if(nDau==3)
return 1;
993 else if(nDau==2)
return 2;
1004 Int_t pdgD=mcPart->GetPdgCode();
1005 if(TMath::Abs(pdgD)!=411)
return -1;
1007 Int_t nDau=mcPart->GetNDaughters();
1008 Int_t labelFirstDau = mcPart->GetDaughter(0);
1011 Double_t sumPxDau=0.;
1012 Double_t sumPyDau=0.;
1013 Double_t sumPzDau=0.;
1016 if(nDau==3 || nDau==2){
1017 for(Int_t iDau=0; iDau<nDau; iDau++){
1018 Int_t indDau = labelFirstDau+iDau;
1019 if(indDau<0)
return -1;
1020 AliAODMCParticle* dau=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(indDau));
1022 Int_t pdgdau=dau->GetPdgCode();
1023 if(TMath::Abs(pdgdau)==321){
1024 if(pdgD*pdgdau>0)
return -1;
1026 sumPxDau+=dau->Px();
1027 sumPyDau+=dau->Py();
1028 sumPzDau+=dau->Pz();
1029 arrayDauLab[nFoundKpi++]=indDau;
1030 if(nFoundKpi>3)
return -1;
1031 }
else if(TMath::Abs(pdgdau)==211){
1032 if(pdgD*pdgdau<0)
return -1;
1034 sumPxDau+=dau->Px();
1035 sumPyDau+=dau->Py();
1036 sumPzDau+=dau->Pz();
1037 arrayDauLab[nFoundKpi++]=indDau;
1038 if(nFoundKpi>3)
return -1;
1039 }
else if(TMath::Abs(pdgdau)==313){
1040 Int_t nResDau=dau->GetNDaughters();
1041 if(nResDau!=2)
return -1;
1042 Int_t indFirstResDau=dau->GetDaughter(0);
1043 for(Int_t resDau=0; resDau<2; resDau++){
1044 Int_t indResDau=indFirstResDau+resDau;
1045 if(indResDau<0)
return -1;
1046 AliAODMCParticle* resdau=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(indResDau));
1047 if(!resdau)
return -1;
1048 Int_t pdgresdau=resdau->GetPdgCode();
1049 if(TMath::Abs(pdgresdau)==321){
1050 if(pdgD*pdgresdau>0)
return -1;
1051 sumPxDau+=resdau->Px();
1052 sumPyDau+=resdau->Py();
1053 sumPzDau+=resdau->Pz();
1055 arrayDauLab[nFoundKpi++]=indResDau;
1056 if(nFoundKpi>3)
return -1;
1058 if(TMath::Abs(pdgresdau)==211){
1059 if(pdgD*pdgresdau<0)
return -1;
1060 sumPxDau+=resdau->Px();
1061 sumPyDau+=resdau->Py();
1062 sumPzDau+=resdau->Pz();
1064 arrayDauLab[nFoundKpi++]=indResDau;
1065 if(nFoundKpi>3)
return -1;
1072 if(nPions!=2)
return -1;
1073 if(nKaons!=1)
return -1;
1074 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1075 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1076 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1077 if(nDau==3)
return 1;
1078 else if(nDau==2)
return 2;
1088 if(label<0)
return -1;
1089 TParticle* mcPart = stack->Particle(label);
1090 Int_t pdgD=mcPart->GetPdgCode();
1091 if(TMath::Abs(pdgD)!=411)
return -1;
1093 Int_t nDau=mcPart->GetNDaughters();
1094 Int_t labelFirstDau = mcPart->GetDaughter(0);
1097 Double_t sumPxDau=0.;
1098 Double_t sumPyDau=0.;
1099 Double_t sumPzDau=0.;
1101 Bool_t isPhi=kFALSE;
1102 Bool_t isk0st=kFALSE;
1104 if(nDau==3 || nDau==2){
1105 for(Int_t iDau=0; iDau<nDau; iDau++){
1106 Int_t indDau = labelFirstDau+iDau;
1107 if(indDau<0)
return -1;
1108 TParticle* dau=stack->Particle(indDau);
1110 Int_t pdgdau=dau->GetPdgCode();
1111 if(TMath::Abs(pdgdau)==321){
1113 sumPxDau+=dau->Px();
1114 sumPyDau+=dau->Py();
1115 sumPzDau+=dau->Pz();
1116 arrayDauLab[nFoundKpi++]=indDau;
1117 if(nFoundKpi>3)
return -1;
1118 }
else if(TMath::Abs(pdgdau)==211){
1120 sumPxDau+=dau->Px();
1121 sumPyDau+=dau->Py();
1122 sumPzDau+=dau->Pz();
1123 arrayDauLab[nFoundKpi++]=indDau;
1124 if(nFoundKpi>3)
return -1;
1125 }
else if(TMath::Abs(pdgdau)==313 || TMath::Abs(pdgdau)==333){
1126 if(TMath::Abs(pdgdau)==313) isk0st=kTRUE;
1127 if(TMath::Abs(pdgdau)==333) isPhi=kTRUE;
1128 Int_t nResDau=dau->GetNDaughters();
1129 if(nResDau!=2)
return -1;
1130 Int_t indFirstResDau=dau->GetDaughter(0);
1131 for(Int_t resDau=0; resDau<2; resDau++){
1132 Int_t indResDau=indFirstResDau+resDau;
1133 if(indResDau<0)
return -1;
1134 TParticle* resdau=stack->Particle(indResDau);
1135 if(!resdau)
return -1;
1136 Int_t pdgresdau=resdau->GetPdgCode();
1137 if(TMath::Abs(pdgresdau)==321){
1138 sumPxDau+=resdau->Px();
1139 sumPyDau+=resdau->Py();
1140 sumPzDau+=resdau->Pz();
1142 arrayDauLab[nFoundKpi++]=indResDau;
1143 if(nFoundKpi>3)
return -1;
1145 if(TMath::Abs(pdgresdau)==211){
1146 sumPxDau+=resdau->Px();
1147 sumPyDau+=resdau->Py();
1148 sumPzDau+=resdau->Pz();
1150 arrayDauLab[nFoundKpi++]=indResDau;
1151 if(nFoundKpi>3)
return -1;
1158 if(nPions!=1)
return -1;
1159 if(nKaons!=2)
return -1;
1160 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1161 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1162 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1163 if(nDau==3)
return 3;
1165 if(isk0st)
return 2;
1177 if(label<0)
return -1;
1178 TParticle* mcPart = stack->Particle(label);
1179 Int_t pdgD=mcPart->GetPdgCode();
1180 if(TMath::Abs(pdgD)!=411)
return -1;
1182 Int_t nDau=mcPart->GetNDaughters();
1183 Int_t labelFirstDau = mcPart->GetDaughter(0);
1185 Double_t sumPxDau=0.;
1186 Double_t sumPyDau=0.;
1187 Double_t sumPzDau=0.;
1192 for(Int_t iDau=0; iDau<nDau; iDau++){
1193 Int_t indDau = labelFirstDau+iDau;
1194 if(indDau<0)
return -1;
1195 TParticle* dau=stack->Particle(indDau);
1197 Int_t pdgdau=dau->GetPdgCode();
1198 if(TMath::Abs(pdgdau)==211){
1200 sumPxDau+=dau->Px();
1201 sumPyDau+=dau->Py();
1202 sumPzDau+=dau->Pz();
1203 arrayDauLab[nFoundpi++]=indDau;
1204 if(nFoundpi>3)
return -1;
1205 }
else if(TMath::Abs(pdgdau)==311){
1206 codeV0=TMath::Abs(pdgdau);
1209 Int_t nK0Dau=dau->GetNDaughters();
1210 if(nK0Dau!=1)
return -1;
1211 Int_t indK0s=dau->GetDaughter(0);
1212 if(indK0s<0)
return -1;
1213 v0=stack->Particle(indK0s);
1215 Int_t pdgK0sl=v0->GetPdgCode();
1216 codeV0=TMath::Abs(pdgK0sl);
1218 Int_t nV0Dau=v0->GetNDaughters();
1219 if(nV0Dau!=2)
return -1;
1220 Int_t indFirstV0Dau=v0->GetDaughter(0);
1221 for(Int_t v0Dau=0; v0Dau<2; v0Dau++){
1222 Int_t indV0Dau=indFirstV0Dau+v0Dau;
1223 if(indV0Dau<0)
return -1;
1224 TParticle* v0dau=stack->Particle(indV0Dau);
1225 if(!v0dau)
return -1;
1226 Int_t pdgv0dau=v0dau->GetPdgCode();
1227 if(TMath::Abs(pdgv0dau)==211){
1228 sumPxDau+=v0dau->Px();
1229 sumPyDau+=v0dau->Py();
1230 sumPzDau+=v0dau->Pz();
1232 arrayDauLab[nFoundpi++]=indV0Dau;
1233 if(nFoundpi>3)
return -1;
1240 if(nPions!=3)
return -1;
1241 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1242 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1243 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1244 if(codeV0==310)
return 1;
1255 if(label<0)
return -1;
1256 TParticle* mcPart = stack->Particle(label);
1257 Int_t pdgD=mcPart->GetPdgCode();
1258 if(TMath::Abs(pdgD)!=431)
return -1;
1260 Int_t nDau=mcPart->GetNDaughters();
1261 Int_t labelFirstDau = mcPart->GetDaughter(0);
1264 Double_t sumPxDau=0.;
1265 Double_t sumPyDau=0.;
1266 Double_t sumPzDau=0.;
1268 Bool_t isPhi=kFALSE;
1269 Bool_t isk0st=kFALSE;
1271 if(nDau==3 || nDau==2){
1272 for(Int_t iDau=0; iDau<nDau; iDau++){
1273 Int_t indDau = labelFirstDau+iDau;
1274 if(indDau<0)
return -1;
1275 TParticle* dau=stack->Particle(indDau);
1277 Int_t pdgdau=dau->GetPdgCode();
1278 if(TMath::Abs(pdgdau)==321){
1280 sumPxDau+=dau->Px();
1281 sumPyDau+=dau->Py();
1282 sumPzDau+=dau->Pz();
1283 arrayDauLab[nFoundKpi++]=indDau;
1284 if(nFoundKpi>3)
return -1;
1285 }
else if(TMath::Abs(pdgdau)==211){
1287 sumPxDau+=dau->Px();
1288 sumPyDau+=dau->Py();
1289 sumPzDau+=dau->Pz();
1290 arrayDauLab[nFoundKpi++]=indDau;
1291 if(nFoundKpi>3)
return -1;
1292 }
else if(TMath::Abs(pdgdau)==313 || TMath::Abs(pdgdau)==333){
1293 if(TMath::Abs(pdgdau)==313) isk0st=kTRUE;
1294 if(TMath::Abs(pdgdau)==333) isPhi=kTRUE;
1295 Int_t nResDau=dau->GetNDaughters();
1296 if(nResDau!=2)
return -1;
1297 Int_t indFirstResDau=dau->GetDaughter(0);
1298 for(Int_t resDau=0; resDau<2; resDau++){
1299 Int_t indResDau=indFirstResDau+resDau;
1300 if(indResDau<0)
return -1;
1301 TParticle* resdau=stack->Particle(indResDau);
1302 if(!resdau)
return -1;
1303 Int_t pdgresdau=resdau->GetPdgCode();
1304 if(TMath::Abs(pdgresdau)==321){
1305 sumPxDau+=resdau->Px();
1306 sumPyDau+=resdau->Py();
1307 sumPzDau+=resdau->Pz();
1309 arrayDauLab[nFoundKpi++]=indResDau;
1310 if(nFoundKpi>3)
return -1;
1312 if(TMath::Abs(pdgresdau)==211){
1313 sumPxDau+=resdau->Px();
1314 sumPyDau+=resdau->Py();
1315 sumPzDau+=resdau->Pz();
1317 arrayDauLab[nFoundKpi++]=indResDau;
1318 if(nFoundKpi>3)
return -1;
1325 if(nPions!=1)
return -1;
1326 if(nKaons!=2)
return -1;
1327 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1328 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1329 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1330 if(nDau==3)
return 3;
1332 if(isk0st)
return 2;
1344 if(label<0)
return -1;
1345 TParticle* mcPart = stack->Particle(label);
1346 Int_t pdgD=mcPart->GetPdgCode();
1347 if(TMath::Abs(pdgD)!=431)
return -1;
1349 Int_t nDau=mcPart->GetNDaughters();
1350 Int_t labelFirstDau = mcPart->GetDaughter(0);
1353 Double_t sumPxDau=0.;
1354 Double_t sumPyDau=0.;
1355 Double_t sumPzDau=0.;
1360 for(Int_t iDau=0; iDau<nDau; iDau++){
1361 Int_t indDau = labelFirstDau+iDau;
1362 if(indDau<0)
return -1;
1363 TParticle* dau=stack->Particle(indDau);
1365 Int_t pdgdau=dau->GetPdgCode();
1366 if(TMath::Abs(pdgdau)==211){
1368 sumPxDau+=dau->Px();
1369 sumPyDau+=dau->Py();
1370 sumPzDau+=dau->Pz();
1371 arrayDauLab[nFoundKpi++]=indDau;
1372 if(nFoundKpi>3)
return -1;
1373 }
else if(TMath::Abs(pdgdau)==321){
1375 sumPxDau+=dau->Px();
1376 sumPyDau+=dau->Py();
1377 sumPzDau+=dau->Pz();
1378 arrayDauLab[nFoundKpi++]=indDau;
1379 if(nFoundKpi>3)
return -1;
1380 }
else if(TMath::Abs(pdgdau)==311){
1381 codeV0=TMath::Abs(pdgdau);
1384 Int_t nK0Dau=dau->GetNDaughters();
1385 if(nK0Dau!=1)
return -1;
1386 Int_t indK0s=dau->GetDaughter(0);
1387 if(indK0s<0)
return -1;
1388 v0=stack->Particle(indK0s);
1390 Int_t pdgK0sl=v0->GetPdgCode();
1391 codeV0=TMath::Abs(pdgK0sl);
1393 Int_t nV0Dau=v0->GetNDaughters();
1394 if(nV0Dau!=2)
return -1;
1395 Int_t indFirstV0Dau=v0->GetDaughter(0);
1396 for(Int_t v0Dau=0; v0Dau<2; v0Dau++){
1397 Int_t indV0Dau=indFirstV0Dau+v0Dau;
1398 if(indV0Dau<0)
return -1;
1399 TParticle* v0dau=stack->Particle(indV0Dau);
1400 if(!v0dau)
return -1;
1401 Int_t pdgv0dau=v0dau->GetPdgCode();
1402 if(TMath::Abs(pdgv0dau)==211){
1403 sumPxDau+=v0dau->Px();
1404 sumPyDau+=v0dau->Py();
1405 sumPzDau+=v0dau->Pz();
1407 arrayDauLab[nFoundKpi++]=indV0Dau;
1408 if(nFoundKpi>3)
return -1;
1415 if(nPions!=2)
return -1;
1416 if(nKaons!=1)
return -1;
1417 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1418 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1419 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1420 if(codeV0==310)
return 1;
1431 Int_t pdgD=mcPart->GetPdgCode();
1432 if(TMath::Abs(pdgD)!=431)
return -1;
1434 Int_t nDau=mcPart->GetNDaughters();
1435 Int_t labelFirstDau = mcPart->GetDaughter(0);
1438 Double_t sumPxDau=0.;
1439 Double_t sumPyDau=0.;
1440 Double_t sumPzDau=0.;
1442 Bool_t isPhi=kFALSE;
1443 Bool_t isk0st=kFALSE;
1445 if(nDau==3 || nDau==2){
1446 for(Int_t iDau=0; iDau<nDau; iDau++){
1447 Int_t indDau = labelFirstDau+iDau;
1448 if(indDau<0)
return -1;
1449 AliAODMCParticle* dau=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(indDau));
1451 Int_t pdgdau=dau->GetPdgCode();
1452 if(TMath::Abs(pdgdau)==321){
1454 sumPxDau+=dau->Px();
1455 sumPyDau+=dau->Py();
1456 sumPzDau+=dau->Pz();
1457 arrayDauLab[nFoundKpi++]=indDau;
1458 if(nFoundKpi>3)
return -1;
1459 }
else if(TMath::Abs(pdgdau)==211){
1461 sumPxDau+=dau->Px();
1462 sumPyDau+=dau->Py();
1463 sumPzDau+=dau->Pz();
1464 arrayDauLab[nFoundKpi++]=indDau;
1465 if(nFoundKpi>3)
return -1;
1466 }
else if(TMath::Abs(pdgdau)==313 || TMath::Abs(pdgdau)==333){
1467 if(TMath::Abs(pdgdau)==313) isk0st=kTRUE;
1468 if(TMath::Abs(pdgdau)==333) isPhi=kTRUE;
1469 Int_t nResDau=dau->GetNDaughters();
1470 if(nResDau!=2)
return -1;
1471 Int_t indFirstResDau=dau->GetDaughter(0);
1472 for(Int_t resDau=0; resDau<2; resDau++){
1473 Int_t indResDau=indFirstResDau+resDau;
1474 if(indResDau<0)
return -1;
1475 AliAODMCParticle* resdau=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(indResDau));
1476 if(!resdau)
return -1;
1477 Int_t pdgresdau=resdau->GetPdgCode();
1478 if(TMath::Abs(pdgresdau)==321){
1479 sumPxDau+=resdau->Px();
1480 sumPyDau+=resdau->Py();
1481 sumPzDau+=resdau->Pz();
1483 arrayDauLab[nFoundKpi++]=indResDau;
1484 if(nFoundKpi>3)
return -1;
1486 if(TMath::Abs(pdgresdau)==211){
1487 sumPxDau+=resdau->Px();
1488 sumPyDau+=resdau->Py();
1489 sumPzDau+=resdau->Pz();
1491 arrayDauLab[nFoundKpi++]=indResDau;
1492 if(nFoundKpi>3)
return -1;
1499 if(nPions!=1)
return -1;
1500 if(nKaons!=2)
return -1;
1501 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1502 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1503 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1504 if(nDau==3)
return 3;
1506 if(isk0st)
return 2;
1518 if(label<0)
return -1;
1519 TParticle* mcPart = stack->Particle(label);
1520 Int_t pdgD=mcPart->GetPdgCode();
1521 if(TMath::Abs(pdgD)!=413)
return -1;
1523 Int_t nDau=mcPart->GetNDaughters();
1524 if(nDau!=2)
return -1;
1526 Int_t labelFirstDau = mcPart->GetDaughter(0);
1529 Double_t sumPxDau=0.;
1530 Double_t sumPyDau=0.;
1531 Double_t sumPzDau=0.;
1534 for(Int_t iDau=0; iDau<nDau; iDau++){
1535 Int_t indDau = labelFirstDau+iDau;
1536 if(indDau<0)
return -1;
1537 TParticle* dau=stack->Particle(indDau);
1539 Int_t pdgdau=dau->GetPdgCode();
1540 if(TMath::Abs(pdgdau)==421){
1541 Int_t nResDau=dau->GetNDaughters();
1542 if(nResDau!=2)
return -1;
1543 Int_t indFirstResDau=dau->GetDaughter(0);
1544 for(Int_t resDau=0; resDau<2; resDau++){
1545 Int_t indResDau=indFirstResDau+resDau;
1546 if(indResDau<0)
return -1;
1547 TParticle* resdau=stack->Particle(indResDau);
1548 if(!resdau)
return -1;
1549 Int_t pdgresdau=resdau->GetPdgCode();
1550 if(TMath::Abs(pdgresdau)==321){
1551 if(pdgD*pdgresdau>0)
return -1;
1552 sumPxDau+=resdau->Px();
1553 sumPyDau+=resdau->Py();
1554 sumPzDau+=resdau->Pz();
1556 arrayDauLab[nFoundKpi++]=indResDau;
1557 if(nFoundKpi>3)
return -1;
1559 if(TMath::Abs(pdgresdau)==211){
1560 if(pdgD*pdgresdau<0)
return -1;
1561 sumPxDau+=resdau->Px();
1562 sumPyDau+=resdau->Py();
1563 sumPzDau+=resdau->Pz();
1565 arrayDauLab[nFoundKpi++]=indResDau;
1566 if(nFoundKpi>3)
return -1;
1569 }
else if(TMath::Abs(pdgdau)==211){
1570 if(pdgD*pdgdau<0)
return -1;
1572 sumPxDau+=dau->Px();
1573 sumPyDau+=dau->Py();
1574 sumPzDau+=dau->Pz();
1575 arrayDauLab[nFoundKpi++]=indDau;
1576 if(nFoundKpi>3)
return -1;
1580 if(nPions!=2)
return -1;
1581 if(nKaons!=1)
return -1;
1582 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1583 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1584 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1593 Int_t pdgD=mcPart->GetPdgCode();
1594 if(TMath::Abs(pdgD)!=413)
return -1;
1596 Int_t nDau=mcPart->GetNDaughters();
1597 if(nDau!=2)
return -1;
1599 Int_t labelFirstDau = mcPart->GetDaughter(0);
1602 Double_t sumPxDau=0.;
1603 Double_t sumPyDau=0.;
1604 Double_t sumPzDau=0.;
1607 for(Int_t iDau=0; iDau<nDau; iDau++){
1608 Int_t indDau = labelFirstDau+iDau;
1609 if(indDau<0)
return -1;
1610 AliAODMCParticle* dau=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(indDau));
1612 Int_t pdgdau=dau->GetPdgCode();
1613 if(TMath::Abs(pdgdau)==421){
1614 Int_t nResDau=dau->GetNDaughters();
1615 if(nResDau!=2)
return -1;
1616 Int_t indFirstResDau=dau->GetDaughter(0);
1617 for(Int_t resDau=0; resDau<2; resDau++){
1618 Int_t indResDau=indFirstResDau+resDau;
1619 if(indResDau<0)
return -1;
1620 AliAODMCParticle* resdau=
dynamic_cast<AliAODMCParticle*
>(arrayMC->At(indResDau));
1621 if(!resdau)
return -1;
1622 Int_t pdgresdau=resdau->GetPdgCode();
1623 if(TMath::Abs(pdgresdau)==321){
1624 if(pdgD*pdgresdau>0)
return -1;
1625 sumPxDau+=resdau->Px();
1626 sumPyDau+=resdau->Py();
1627 sumPzDau+=resdau->Pz();
1629 arrayDauLab[nFoundKpi++]=indResDau;
1630 if(nFoundKpi>3)
return -1;
1632 if(TMath::Abs(pdgresdau)==211){
1633 if(pdgD*pdgresdau<0)
return -1;
1634 sumPxDau+=resdau->Px();
1635 sumPyDau+=resdau->Py();
1636 sumPzDau+=resdau->Pz();
1638 arrayDauLab[nFoundKpi++]=indResDau;
1639 if(nFoundKpi>3)
return -1;
1642 }
else if(TMath::Abs(pdgdau)==211){
1643 if(pdgD*pdgdau<0)
return -1;
1645 sumPxDau+=dau->Px();
1646 sumPyDau+=dau->Py();
1647 sumPzDau+=dau->Pz();
1648 arrayDauLab[nFoundKpi++]=indDau;
1649 if(nFoundKpi>3)
return -1;
1653 if(nPions!=2)
return -1;
1654 if(nKaons!=1)
return -1;
1655 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1656 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1657 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1666 if(label<0)
return -1;
1667 TParticle* mcPart = stack->Particle(label);
1668 Int_t pdgD=mcPart->GetPdgCode();
1669 if(TMath::Abs(pdgD)!=4122)
return -1;
1671 Int_t nDau=mcPart->GetNDaughters();
1672 Int_t labelFirstDau = mcPart->GetDaughter(0);
1676 Double_t sumPxDau=0.;
1677 Double_t sumPyDau=0.;
1678 Double_t sumPzDau=0.;
1682 if(nDau==3 || nDau==2){
1683 for(Int_t iDau=0; iDau<nDau; iDau++){
1684 Int_t indDau = labelFirstDau+iDau;
1685 if(indDau<0)
return -1;
1686 TParticle* dau=stack->Particle(indDau);
1688 Int_t pdgdau=dau->GetPdgCode();
1689 if(TMath::Abs(pdgdau)==321){
1691 sumPxDau+=dau->Px();
1692 sumPyDau+=dau->Py();
1693 sumPzDau+=dau->Pz();
1694 arrayDauLab[nFoundpKpi++]=indDau;
1695 if(nFoundpKpi>3)
return -1;
1696 }
else if(TMath::Abs(pdgdau)==211){
1698 sumPxDau+=dau->Px();
1699 sumPyDau+=dau->Py();
1700 sumPzDau+=dau->Pz();
1701 arrayDauLab[nFoundpKpi++]=indDau;
1702 if(nFoundpKpi>3)
return -1;
1703 }
else if(TMath::Abs(pdgdau)==2212){
1705 sumPxDau+=dau->Px();
1706 sumPyDau+=dau->Py();
1707 sumPzDau+=dau->Pz();
1708 arrayDauLab[nFoundpKpi++]=indDau;
1709 if(nFoundpKpi>3)
return -1;
1710 }
else if(TMath::Abs(pdgdau)==313 || TMath::Abs(pdgdau)==3124 ||
1711 TMath::Abs(pdgdau)==2224){
1712 codeRes=TMath::Abs(pdgdau);
1713 Int_t nResDau=dau->GetNDaughters();
1714 if(nResDau!=2)
return -1;
1715 Int_t indFirstResDau=dau->GetDaughter(0);
1716 for(Int_t resDau=0; resDau<2; resDau++){
1717 Int_t indResDau=indFirstResDau+resDau;
1718 if(indResDau<0)
return -1;
1719 TParticle* resdau=stack->Particle(indResDau);
1720 if(!resdau)
return -1;
1721 Int_t pdgresdau=resdau->GetPdgCode();
1722 if(TMath::Abs(pdgresdau)==321){
1723 sumPxDau+=resdau->Px();
1724 sumPyDau+=resdau->Py();
1725 sumPzDau+=resdau->Pz();
1727 arrayDauLab[nFoundpKpi++]=indResDau;
1728 if(nFoundpKpi>3)
return -1;
1729 }
else if(TMath::Abs(pdgresdau)==211){
1730 sumPxDau+=resdau->Px();
1731 sumPyDau+=resdau->Py();
1732 sumPzDau+=resdau->Pz();
1734 arrayDauLab[nFoundpKpi++]=indResDau;
1735 if(nFoundpKpi>3)
return -1;
1736 }
else if(TMath::Abs(pdgresdau)==2212){
1737 sumPxDau+=resdau->Px();
1738 sumPyDau+=resdau->Py();
1739 sumPzDau+=resdau->Pz();
1741 arrayDauLab[nFoundpKpi++]=indResDau;
1742 if(nFoundpKpi>3)
return -1;
1749 if(nPions!=1)
return -1;
1750 if(nKaons!=1)
return -1;
1751 if(nProtons!=1)
return -1;
1752 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1753 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1754 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1755 if(nDau==3)
return 1;
1757 if(codeRes==313)
return 2;
1758 else if(codeRes==2224)
return 3;
1759 else if(codeRes==3124)
return 4;
1771 if(label<0)
return -1;
1772 TParticle* mcPart = stack->Particle(label);
1773 Int_t pdgD=mcPart->GetPdgCode();
1774 if(TMath::Abs(pdgD)!=4122)
return -1;
1776 Int_t nDau=mcPart->GetNDaughters();
1777 Int_t labelFirstDau = mcPart->GetDaughter(0);
1780 Double_t sumPxDau=0.;
1781 Double_t sumPyDau=0.;
1782 Double_t sumPzDau=0.;
1787 for(Int_t iDau=0; iDau<nDau; iDau++){
1788 Int_t indDau = labelFirstDau+iDau;
1789 if(indDau<0)
return -1;
1790 TParticle* dau=stack->Particle(indDau);
1792 Int_t pdgdau=dau->GetPdgCode();
1793 if(TMath::Abs(pdgdau)==211){
1795 sumPxDau+=dau->Px();
1796 sumPyDau+=dau->Py();
1797 sumPzDau+=dau->Pz();
1798 arrayDauLab[nFoundppi++]=indDau;
1799 if(nFoundppi>3)
return -1;
1800 }
else if(TMath::Abs(pdgdau)==2212){
1802 sumPxDau+=dau->Px();
1803 sumPyDau+=dau->Py();
1804 sumPzDau+=dau->Pz();
1805 arrayDauLab[nFoundppi++]=indDau;
1806 if(nFoundppi>3)
return -1;
1807 }
else if(TMath::Abs(pdgdau)==311 || TMath::Abs(pdgdau)==3122){
1808 codeV0=TMath::Abs(pdgdau);
1811 Int_t nK0Dau=dau->GetNDaughters();
1812 if(nK0Dau!=1)
return -1;
1813 Int_t indK0s=dau->GetDaughter(0);
1814 if(indK0s<0)
return -1;
1815 v0=stack->Particle(indK0s);
1817 Int_t pdgK0sl=v0->GetPdgCode();
1818 codeV0=TMath::Abs(pdgK0sl);
1820 Int_t nV0Dau=v0->GetNDaughters();
1821 if(nV0Dau!=2)
return -1;
1822 Int_t indFirstV0Dau=v0->GetDaughter(0);
1823 for(Int_t v0Dau=0; v0Dau<2; v0Dau++){
1824 Int_t indV0Dau=indFirstV0Dau+v0Dau;
1825 if(indV0Dau<0)
return -1;
1826 TParticle* v0dau=stack->Particle(indV0Dau);
1827 if(!v0dau)
return -1;
1828 Int_t pdgv0dau=v0dau->GetPdgCode();
1829 if(TMath::Abs(pdgv0dau)==211){
1830 sumPxDau+=v0dau->Px();
1831 sumPyDau+=v0dau->Py();
1832 sumPzDau+=v0dau->Pz();
1834 arrayDauLab[nFoundppi++]=indV0Dau;
1835 if(nFoundppi>3)
return -1;
1836 }
else if(TMath::Abs(pdgv0dau)==2212){
1837 sumPxDau+=v0dau->Px();
1838 sumPyDau+=v0dau->Py();
1839 sumPzDau+=v0dau->Pz();
1841 arrayDauLab[nFoundppi++]=indV0Dau;
1842 if(nFoundppi>3)
return -1;
1849 if(nPions!=2)
return -1;
1850 if(nProtons!=1)
return -1;
1851 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1852 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1853 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1854 if(codeV0==310)
return 1;
1855 else if(codeV0==3122)
return 2;
1866 if(label<0)
return -1;
1867 TParticle* mcPart = stack->Particle(label);
1868 Int_t pdgD=mcPart->GetPdgCode();
1869 if(TMath::Abs(pdgD)!=4232)
return -1;
1871 Int_t nDau=mcPart->GetNDaughters();
1872 if(nDau!=3)
return -1;
1874 Int_t labelFirstDau = mcPart->GetDaughter(0);
1877 Double_t sumPxDau=0.;
1878 Double_t sumPyDau=0.;
1879 Double_t sumPzDau=0.;
1882 for(Int_t iDau=0; iDau<nDau; iDau++){
1883 Int_t indDau = labelFirstDau+iDau;
1884 if(indDau<0)
return -1;
1885 TParticle* dau=stack->Particle(indDau);
1887 Int_t pdgdau=dau->GetPdgCode();
1888 if(TMath::Abs(pdgdau)==3312){
1889 if(pdgD*pdgdau<0)
return -1;
1890 sumPxDau+=dau->Px();
1891 sumPyDau+=dau->Py();
1892 sumPzDau+=dau->Pz();
1894 arrayDauLab[nFoundXi++]=indDau;
1897 if(TMath::Abs(pdgdau)==211){
1898 if(pdgD*pdgdau<0)
return -1;
1900 sumPxDau+=dau->Px();
1901 sumPyDau+=dau->Py();
1902 sumPzDau+=dau->Pz();
1903 arrayDauLab[nFoundXi++]=indDau;
1904 if(nFoundXi>3)
return -1;
1908 if(nPions!=2)
return -1;
1909 if(nXi!=1)
return -1;
1910 if(TMath::Abs(mcPart->Px()-sumPxDau)>0.001)
return -2;
1911 if(TMath::Abs(mcPart->Py()-sumPyDau)>0.001)
return -2;
1912 if(TMath::Abs(mcPart->Pz()-sumPzDau)>0.001)
return -2;
1919 Int_t filtbit1, Int_t filtbit2,
1923 Int_t nTracks=aod->GetNumberOfTracks();
1930 if(ptMin<0.) ptMin=0.;
1932 for(Int_t it=0; it<nTracks; it++) {
1933 AliAODTrack *tr=
dynamic_cast<AliAODTrack*
>(aod->GetTrack(it));
1935 Float_t eta = tr->Eta();
1936 Float_t pt = tr->Pt();
1937 Float_t phi = tr->Phi();
1938 if(eta<etaMin || eta>etaMax)
continue;
1939 if(pt<ptMin || pt>ptMax)
continue;
1940 Bool_t fb1 = tr->TestFilterBit(filtbit1);
1941 Bool_t fb2 = tr->TestFilterBit(filtbit2);
1942 if( !(fb1 || fb2) )
continue;
1943 Double_t px=pt*TMath::Cos(phi);
1944 Double_t py=pt*TMath::Sin(phi);
1945 s00 += (px * px)/pt;
1946 s01 += (py * px)/pt;
1947 s11 += (py * py)/pt;
1952 if(nSelTracks<minMult)
return -0.5;
1960 Double_t sphericity = -10;
1961 Double_t lambda1=((s00+s11)+TMath::Sqrt((s00+s11)*(s00+s11)-4*(s00*s11-s01*s01)))/2.;
1962 Double_t lambda2=((s00+s11)-TMath::Sqrt((s00+s11)*(s00+s11)-4*(s00*s11-s01*s01)))/2.;
1963 if(TMath::Abs(lambda2)<0.00001 && TMath::Abs(lambda1)<0.00001) sphericity=0;
1964 if(TMath::Abs(lambda1+lambda2)>0.000001) sphericity=2*TMath::Min(lambda1,lambda2)/(lambda1+lambda2);
1972 Int_t filtbit1, Int_t filtbit2,
1973 Int_t minMult, Double_t phiStepSizeDeg){
1976 Int_t nTracks=aod->GetNumberOfTracks();
1979 Double_t* ptArr=
new Double_t[nTracks];
1980 Double_t* phiArr=
new Double_t[nTracks];
1983 for(Int_t it=0; it<nTracks; it++) {
1984 AliAODTrack *tr=
dynamic_cast<AliAODTrack*
>(aod->GetTrack(it));
1986 Float_t eta = tr->Eta();
1987 Float_t pt = tr->Pt();
1988 Float_t phi = tr->Phi();
1989 if(eta<etaMin || eta>etaMax)
continue;
1990 if(pt<ptMin || pt>ptMax)
continue;
1991 Bool_t fb1 = tr->TestFilterBit(filtbit1);
1992 Bool_t fb2 = tr->TestFilterBit(filtbit2);
1993 if( !(fb1 || fb2) )
continue;
1994 ptArr[nSelTracks]=pt;
1995 phiArr[nSelTracks]=phi;
2000 if(nSelTracks<minMult)
return -0.5;
2003 Double_t spherocity=2.;
2004 for(Int_t i=0; i<360/phiStepSizeDeg; ++i){
2005 Double_t phistep=TMath::Pi()*(Double_t)i*phiStepSizeDeg/180.;
2006 Double_t nx=TMath::Cos(phistep);
2007 Double_t ny=TMath::Sin(phistep);
2009 for(Int_t j=0; j<nSelTracks; ++j){
2010 Double_t pxA=ptArr[j]*TMath::Cos(phiArr[j]);
2011 Double_t pyA=ptArr[j]*TMath::Sin(phiArr[j]);
2012 numer+=TMath::Abs(ny*pxA - nx*pyA);
2014 Double_t pFull=numer*numer/(sumpt*sumpt);
2015 if(pFull<spherocity) spherocity=pFull;
2021 spherocity*=(TMath::Pi()*TMath::Pi()/4.);
static void AveragePt(Float_t &averagePt, Float_t &errorPt, Float_t ptmin, Float_t ptmax, TH2F *hMassD, Float_t massFromFit, Float_t sigmaFromFit, TF1 *funcB2, Float_t sigmaRangeForSig=2.5, Float_t sigmaRangeForBkg=4.5, Float_t minMass=0., Float_t maxMass=3., Int_t rebin=1)
Functions for computing average pt.
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
static Int_t CheckDplusDecay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
static Int_t CheckDstarDecay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
Double_t ImpParXY() const
static TString GetGenerator(Int_t label, AliAODMCHeader *header)
static Int_t CheckDsDecay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
Double_t Pol(Double_t x) const
static Int_t CheckLcpKpiDecay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
static Double_t GetFullEvResolLowLim(const TH1F *hSubEvCorr, Int_t k=1)
static Int_t CheckOrigin(TClonesArray *arrayMC, AliAODMCParticle *mcPart, Bool_t searchUpToQuark=kTRUE)
void GetTrackPrimaryGenerator(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC, TString &nameGen)
static Int_t CheckXicXipipiDecay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
static Double_t GetVZEROCEqualizedMultiplicity(AliAODEvent *ev)
static Int_t CheckLcV0bachelorDecay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
static Double_t GetFullEvResolHighLim(const TH1F *hSubEvCorr, Int_t k=1)
static Double_t ResolK1(Double_t x)
static Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent *ev, Double_t mineta, Double_t maxeta)
static Double_t GetSpherocity(AliAODEvent *aod, Double_t etaMin=-0.8, Double_t etaMax=0.8, Double_t ptMin=0.15, Double_t ptMax=10., Int_t filtbit1=256, Int_t filtbit2=512, Int_t minMult=3, Double_t phiStepSizeDeg=0.1)
Functions for event shape variables.
Double_t GetFullEvResol() const
static Bool_t CheckT0TriggerFired(AliAODEvent *aodEv)
Functions for processing trigger information.
static Int_t CheckD0Decay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
static Int_t CheckDsK0sKDecay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
AliAODTrack * GetBachelor() const
static Double_t GetSubEvResolLowLim(const TH1F *hSubEvCorr)
static Int_t CheckDplusKKpiDecay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
Bool_t HasCascadeCandidateAnyDaughInjected(AliAODRecoCascadeHF *cand, AliAODMCHeader *header, TClonesArray *arrayMC)
Bool_t IsCandidateInjected(AliAODRecoDecayHF *cand, AliAODMCHeader *header, TClonesArray *arrayMC)
static Int_t CheckDplusK0spiDecay(AliStack *stack, Int_t label, Int_t *arrayDauLab)
static Double_t GetBeautyMotherPt(TClonesArray *arrayMC, AliAODMCParticle *mcPart)
static void ComputeSignificance(Double_t signal, Double_t errsignal, Double_t background, Double_t errbackground, Double_t &significance, Double_t &errsignificance)
Significance calculator.
static Double_t GetCorrectedNtracklets(TProfile *estimatorAvg, Double_t uncorrectedNacc, Double_t vtxZ, Double_t refMult)
Double_t GetSubEvResol() const
Bool_t IsTrackInjected(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC)
static Int_t GetGeneratedPhysicalPrimariesInEtaRange(TClonesArray *arrayMC, Double_t mineta, Double_t maxeta)
static Double_t GetVZEROAEqualizedMultiplicity(AliAODEvent *ev)
Utilities for V0 multiplicity checks.
static Double_t GetTrueImpactParameterDzero(AliAODMCHeader *mcHeader, TClonesArray *arrayMC, AliAODMCParticle *partDp)
Functions for computing true impact parameter of D meson.
static Double_t GetSubEvResolHighLim(const TH1F *hSubEvCorr)
static Double_t GetTrueImpactParameterDplus(AliAODMCHeader *mcHeader, TClonesArray *arrayMC, AliAODMCParticle *partDp)
static Double_t GetSphericity(AliAODEvent *aod, Double_t etaMin=-0.8, Double_t etaMax=0.8, Double_t ptMin=0.15, Double_t ptMax=10., Int_t filtbit1=256, Int_t filtbit2=512, Int_t minMult=3)
static Int_t GetGeneratedMultiplicityInEtaRange(TClonesArray *arrayMC, Double_t mineta, Double_t maxeta)
static Int_t GetGeneratedPrimariesInEtaRange(TClonesArray *arrayMC, Double_t mineta, Double_t maxeta)
Class with functions useful for different D2H analyses //.