fParentSelect[1] = 421;
fParentSelect[2] = 431;
fParentSelect[3] = 4122;
+ fParentSelect[4] = 4232;
+ fParentSelect[5] = 4132;
+ fParentSelect[6] = 4332;
fFlavorSelect = 4;
break;
case kPyD0PbPbMNR:
// Check if there is a ccbar or bbbar pair with at least one of the two
// in fYMin < y < fYMax
if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi) {
- TParticle *hvq;
+ TParticle *partCheck;
+ TParticle *mother;
Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
- Float_t yQ;
- Int_t pdgQ;
+ Bool_t theChild=kFALSE;
+ Float_t y;
+ Int_t pdg,mpdg,mpdgUpperFamily;
for(i=0; i<np; i++) {
- hvq = (TParticle*)fParticles.At(i);
- pdgQ = hvq->GetPdgCode();
- if(TMath::Abs(pdgQ) != fFlavorSelect) continue;
- if(pdgQ>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
- yQ = 0.5*TMath::Log((hvq->Energy()+hvq->Pz()+1.e-13)/
- (hvq->Energy()-hvq->Pz()+1.e-13));
- if(yQ>fYMin && yQ<fYMax) inYcut=kTRUE;
+ partCheck = (TParticle*)fParticles.At(i);
+ pdg = partCheck->GetPdgCode();
+ if(TMath::Abs(pdg) == fFlavorSelect) { // quark
+ if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
+ y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
+ (partCheck->Energy()-partCheck->Pz()+1.e-13));
+ if(y>fYMin && y<fYMax) inYcut=kTRUE;
+ }
+ if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
+ Int_t mi = partCheck->GetFirstMother() - 1;
+ if(mi<0) continue;
+ mother = (TParticle*)fParticles.At(mi);
+ mpdg=TMath::Abs(mother->GetPdgCode());
+ mpdgUpperFamily=(mpdg>1000 ? mpdg-1000 : mpdg-100); // keep e from c from b
+ if ( ParentSelected(mpdg) ||
+ (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
+ if (KinematicSelection(partCheck,1)) {
+ theChild=kTRUE;
+ }
+ }
+ }
}
- if (!theQ || !theQbar || !inYcut) {
+ if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
delete[] pParent;
return 0;
}
+ if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
+ delete[] pParent;
+ return 0;
+ }
+
}
//Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
fParentSelect[1] = 421;
fParentSelect[2] = 431;
fParentSelect[3] = 4122;
+ fParentSelect[4] = 4232;
+ fParentSelect[5] = 4132;
+ fParentSelect[6] = 4332;
fFlavorSelect = 4;
break;
case kPyD0PbPbMNR:
// Check if there is a ccbar or bbbar pair with at least one of the two
// in fYMin < y < fYMax
if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi) {
- TParticle *hvq;
+ TParticle *partCheck;
+ TParticle *mother;
Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
- Float_t yQ;
- Int_t pdgQ;
+ Bool_t theChild=kFALSE;
+ Float_t y;
+ Int_t pdg,mpdg,mpdgUpperFamily;
for(i=0; i<np; i++) {
- hvq = (TParticle*)fParticles.At(i);
- pdgQ = hvq->GetPdgCode();
- if(TMath::Abs(pdgQ) != fFlavorSelect) continue;
- if(pdgQ>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
- yQ = 0.5*TMath::Log((hvq->Energy()+hvq->Pz()+1.e-13)/
- (hvq->Energy()-hvq->Pz()+1.e-13));
- if(yQ>fYMin && yQ<fYMax) inYcut=kTRUE;
+ partCheck = (TParticle*)fParticles.At(i);
+ pdg = partCheck->GetPdgCode();
+ if(TMath::Abs(pdg) == fFlavorSelect) { // quark
+ if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
+ y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
+ (partCheck->Energy()-partCheck->Pz()+1.e-13));
+ if(y>fYMin && y<fYMax) inYcut=kTRUE;
+ }
+
+ if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
+ Int_t mi = partCheck->GetFirstMother() - 1;
+ if(mi<0) continue;
+ mother = (TParticle*)fParticles.At(mi);
+ mpdg=TMath::Abs(mother->GetPdgCode());
+ mpdgUpperFamily=(mpdg>1000 ? mpdg-1000 : mpdg-100); // keep e from c from b
+ if ( ParentSelected(mpdg) ||
+ (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
+ if (KinematicSelection(partCheck,1)) {
+ theChild=kTRUE;
+ }
+ }
+ }
}
- if (!theQ || !theQbar || !inYcut) {
+ if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
delete[] pParent;
return 0;
}
+ if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
+ delete[] pParent;
+ return 0;
+ }
+
}
//Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff