Skip to content

Commit fbad808

Browse files
committed
Added ULS and LS separation in MC Gen processes
1 parent 4b30a42 commit fbad808

File tree

2 files changed

+92
-40
lines changed

2 files changed

+92
-40
lines changed

PWGHF/HFC/TableProducer/correlatorDsHadrons.cxx

Lines changed: 52 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -759,25 +759,23 @@ struct HfCorrelatorDsHadrons {
759759
listDaughters.clear();
760760
RecoDecay::getDaughters(particle, &listDaughters, arrDaughDsPDG, 2);
761761
int counterDaughters = 0;
762+
// Assign Ds charge sign
762763
int chargeDs = 0;
764+
if (particle.pdgCode() == kDS) {
765+
chargeDs = 1;
766+
} else {
767+
chargeDs = -1;
768+
}
769+
// Find Ds daughters
763770
if (listDaughters.size() == NDaughtersDs) {
764771
for (const auto& dauIdx : listDaughters) {
765772
// auto daughI = mcParticles.rawIteratorAt(dauIdx - mcParticles.offset());
766773
auto daughI = groupedMcParticles.rawIteratorAt(dauIdx - groupedMcParticles.offset());
767774
counterDaughters += 1;
768-
if (counterDaughters == 1) {
769-
if (daughI.pdgCode() == kKPlus) {
770-
chargeDs = 1;
771-
} else {
772-
chargeDs = -1;
773-
}
774-
}
775775
prongsId[counterDaughters - 1] = daughI.globalIndex();
776776
}
777777
}
778778

779-
int numberOfCorrKaons = 0;
780-
781779
// Ds Hadron correlation dedicated section
782780
for (const auto& particleAssoc : groupedMcParticles) {
783781
if (std::abs(particleAssoc.eta()) > etaTrackMax || particleAssoc.pt() < ptTrackMin || particleAssoc.pt() > ptTrackMax) {
@@ -792,46 +790,37 @@ struct HfCorrelatorDsHadrons {
792790
if (!particleAssoc.isPhysicalPrimary()) {
793791
continue;
794792
}
795-
796-
if (isDsPrompt) {
797-
registry.fill(HIST("hCorrAllPrimaryParticles"), getDeltaPhi(particleAssoc.phi(), particle.phi()), particle.pt(), particleAssoc.pt());
798-
if (std::abs(particleAssoc.pdgCode()) == kPiPlus) {
799-
registry.fill(HIST("hCorrAllPrimaryHadrons"), getDeltaPhi(particleAssoc.phi(), particle.phi()), particle.pt(), particleAssoc.pt());
800-
registry.fill(HIST("hCorrAllPrimaryPions"), getDeltaPhi(particleAssoc.phi(), particle.phi()), particle.pt(), particleAssoc.pt());
801-
} else if (std::abs(particleAssoc.pdgCode()) == kKPlus) {
802-
registry.fill(HIST("hCorrAllPrimaryHadrons"), getDeltaPhi(particleAssoc.phi(), particle.phi()), particle.pt(), particleAssoc.pt());
803-
registry.fill(HIST("hCorrAllPrimaryKaons"), getDeltaPhi(particleAssoc.phi(), particle.phi()), particle.pt(), particleAssoc.pt());
804-
} else if (std::abs(particleAssoc.pdgCode()) == kProton) {
805-
registry.fill(HIST("hCorrAllPrimaryHadrons"), getDeltaPhi(particleAssoc.phi(), particle.phi()), particle.pt(), particleAssoc.pt());
806-
registry.fill(HIST("hCorrAllPrimaryProtons"), getDeltaPhi(particleAssoc.phi(), particle.phi()), particle.pt(), particleAssoc.pt());
793+
if (pidTrkApplied) {
794+
// MC truth match
795+
if (trkPIDspecies->at(0) == o2::track::PID::Kaon && std::abs(particleAssoc.pdgCode()) != kKPlus) {
796+
continue;
797+
}
798+
if (trkPIDspecies->at(0) == o2::track::PID::Pion && std::abs(particleAssoc.pdgCode()) != kPiPlus) {
799+
continue;
807800
}
808-
if (pidTrkApplied) {
809-
if (((chargeDs == 1) && (particleAssoc.pdgCode() == kKPlus)) || ((chargeDs == -1) && (particleAssoc.pdgCode() == kKMinus))) { // LS pairs
810-
registry.fill(HIST("hCorrKaonsLSPairs"), getDeltaPhi(particleAssoc.phi(), particle.phi()), particle.pt(), particleAssoc.pt());
811-
numberOfCorrKaons++;
812-
}
813-
if (((chargeDs == 1) && (particleAssoc.pdgCode() == kKMinus)) || ((chargeDs == -1) && (particleAssoc.pdgCode() == kKPlus))) { // ULS pairs
814-
registry.fill(HIST("hCorrKaonsULSPairs"), getDeltaPhi(particleAssoc.phi(), particle.phi()), particle.pt(), particleAssoc.pt());
815-
numberOfCorrKaons++;
816-
}
801+
if (trkPIDspecies->at(0) == o2::track::PID::Proton && std::abs(particleAssoc.pdgCode()) != kProton) {
802+
continue;
817803
}
818804
}
819805

806+
int chargeParticle = 0;
807+
if ((particleAssoc.pdgCode() == kElectron) || (particleAssoc.pdgCode() == kMuonMinus) || (particleAssoc.pdgCode() == kPiMinus) || (particleAssoc.pdgCode()) == kKMinus || (particleAssoc.pdgCode() == kProtonBar)) {
808+
chargeParticle = -1;
809+
} else {
810+
chargeParticle = 1;
811+
}
820812
// trackOrigin = RecoDecay::getCharmHadronOrigin(mcParticles, particleAssoc, true);
821813
trackOrigin = RecoDecay::getCharmHadronOrigin(groupedMcParticles, particleAssoc, true);
822814
registry.fill(HIST("hPtParticleAssocMcGen"), particleAssoc.pt());
823815
entryDsHadronPair(getDeltaPhi(particleAssoc.phi(), particle.phi()),
824816
particleAssoc.eta() - particle.eta(),
825-
particle.pt(),
826-
particleAssoc.pt(),
817+
particle.pt() * chargeDs,
818+
particleAssoc.pt() * chargeParticle,
827819
poolBin,
828820
0);
829821
entryDsHadronRecoInfo(MassDS, true, isDecayChan);
830822
entryDsHadronGenInfo(isDsPrompt, particleAssoc.isPhysicalPrimary(), trackOrigin);
831823
} // end loop generated particles
832-
if (numberOfCorrKaons == 0) {
833-
registry.fill(HIST("hDsWoKaons"), numberOfCorrKaons);
834-
}
835824
} // if statement for Ds selection
836825
} // end loop generated Ds
837826
} // end loop reconstructed collision
@@ -1095,12 +1084,38 @@ struct HfCorrelatorDsHadrons {
10951084
if (!particleAssoc.isPhysicalPrimary()) {
10961085
continue;
10971086
}
1087+
if (pidTrkApplied) {
1088+
// MC truth match
1089+
if (trkPIDspecies->at(0) == o2::track::PID::Kaon && std::abs(particleAssoc.pdgCode()) != kKPlus) {
1090+
continue;
1091+
}
1092+
if (trkPIDspecies->at(0) == o2::track::PID::Pion && std::abs(particleAssoc.pdgCode()) != kPiPlus) {
1093+
continue;
1094+
}
1095+
if (trkPIDspecies->at(0) == o2::track::PID::Proton && std::abs(particleAssoc.pdgCode()) != kProton) {
1096+
continue;
1097+
}
1098+
}
1099+
1100+
int chargeDs = 0;
1101+
if (candidate.pdgCode() == kDS) {
1102+
chargeDs = 1;
1103+
} else {
1104+
chargeDs = -1;
1105+
}
1106+
1107+
int chargeParticle = 0;
1108+
if ((particleAssoc.pdgCode() == kElectron) || (particleAssoc.pdgCode() == kMuonMinus) || (particleAssoc.pdgCode() == kPiMinus) || (particleAssoc.pdgCode()) == kKMinus || (particleAssoc.pdgCode() == kProtonBar)) {
1109+
chargeParticle = -1;
1110+
} else {
1111+
chargeParticle = 1;
1112+
}
10981113
int trackOrigin = RecoDecay::getCharmHadronOrigin(mcParticles, particleAssoc, true);
10991114
bool isDsPrompt = candidate.originMcGen() == RecoDecay::OriginType::Prompt;
11001115
entryDsHadronPair(getDeltaPhi(particleAssoc.phi(), candidate.phi()),
11011116
particleAssoc.eta() - candidate.eta(),
1102-
candidate.pt(),
1103-
particleAssoc.pt(),
1117+
candidate.pt() * chargeDs,
1118+
particleAssoc.pt() * chargeParticle,
11041119
poolBin,
11051120
0);
11061121
entryDsHadronRecoInfo(MassDS, true, true);

PWGHF/HFC/Tasks/taskCorrelationDsHadrons.cxx

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,12 @@ struct HfTaskCorrelationDsHadrons {
254254
registry.add("hDeltaEtaPtIntSidebandRightMcRec", "Ds-h deltaEta sideband right region MC reco", {HistType::kTH1F, {axisDetlaEta}});
255255
registry.add("hDeltaPhiPtIntSidebandRightMcRec", "Ds-h deltaPhi sideband right region MC reco", {HistType::kTH1F, {axisDetlaPhi}});
256256
registry.add("hCorrel2DVsPtSidebandRightMcRec", "Ds-h correlations sideband right region MC reco", {HistType::kTHnSparseD, {{axisDetlaPhi}, {axisDetlaEta}, {axisPtD}, {axisPtHadron}, {axisPoolBin}}});
257-
257+
if (doLSpair) {
258+
registry.add("hCorrel2DVsPtPhysicalPrimaryMcRecLS", "Ds-h correlations signal region (only true primary particles) MC reco", {HistType::kTHnSparseD, {{axisDetlaPhi}, {axisDetlaEta}, {axisPtD}, {axisPtHadron}, {axisDsPrompt}, {axisPoolBin}}});
259+
}
260+
if (doULSpair) {
261+
registry.add("hCorrel2DVsPtPhysicalPrimaryMcRecULS", "Ds-h correlations signal region (only true primary particles) MC reco", {HistType::kTHnSparseD, {{axisDetlaPhi}, {axisDetlaEta}, {axisPtD}, {axisPtHadron}, {axisDsPrompt}, {axisPoolBin}}});
262+
}
258263
registry.get<THnSparse>(HIST("hCorrel2DVsPtSignalRegionMcRec"))->Sumw2();
259264
registry.get<THnSparse>(HIST("hCorrel2DVsPtPhysicalPrimaryMcRec"))->Sumw2();
260265
registry.get<THnSparse>(HIST("hCorrel2DVsPtSidebandLeftMcRec"))->Sumw2();
@@ -270,6 +275,14 @@ struct HfTaskCorrelationDsHadrons {
270275
registry.add("hCorrel2DVsPtMcGenNonPromptDsNonPromptHadron", "Ds-h correlations non prompt Ds non prompt h MC Gen", {HistType::kTHnSparseD, {{axisDetlaPhi}, {axisDetlaEta}, {axisPtD}, {axisPtHadron}, {axisPoolBin}}});
271276
registry.add("hCorrel2DVsPtMcGenNonPrompt", "Ds-h correlations NonPrompt MC Gen", {HistType::kTHnSparseD, {{axisDetlaPhi}, {axisDetlaEta}, {axisPtD}, {axisPtHadron}, {axisPoolBin}}});
272277

278+
if (doLSpair) {
279+
registry.add("hCorrel2DVsPtMcGenPromptLS", "Ds-h correlations Prompt MC Gen", {HistType::kTHnSparseD, {{axisDetlaPhi}, {axisDetlaEta}, {axisPtD}, {axisPtHadron}, {axisPoolBin}}});
280+
registry.add("hCorrel2DVsPtMcGenNonPromptLS", "Ds-h correlations NonPrompt MC Gen", {HistType::kTHnSparseD, {{axisDetlaPhi}, {axisDetlaEta}, {axisPtD}, {axisPtHadron}, {axisPoolBin}}});
281+
}
282+
if (doULSpair) {
283+
registry.add("hCorrel2DVsPtMcGenPromptULS", "Ds-h correlations Prompt MC Gen", {HistType::kTHnSparseD, {{axisDetlaPhi}, {axisDetlaEta}, {axisPtD}, {axisPtHadron}, {axisPoolBin}}});
284+
registry.add("hCorrel2DVsPtMcGenNonPromptULS", "Ds-h correlations NonPrompt MC Gen", {HistType::kTHnSparseD, {{axisDetlaPhi}, {axisDetlaEta}, {axisPtD}, {axisPtHadron}, {axisPoolBin}}});
285+
}
273286
registry.get<THnSparse>(HIST("hCorrel2DVsPtMcGen"))->Sumw2();
274287
registry.get<THnSparse>(HIST("hCorrel2DVsPtMcGenPrompt"))->Sumw2();
275288
registry.get<THnSparse>(HIST("hCorrel2DVsPtMcGenNonPrompt"))->Sumw2();
@@ -642,7 +655,13 @@ struct HfTaskCorrelationDsHadrons {
642655
registry.fill(HIST("hDeltaPhiPtIntSignalRegionMcRec"), deltaPhi, efficiencyWeight);
643656
registry.fill(HIST("hCorrel2DVsPtSignalRegionMcRec"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), statusDsPrompt, poolBin, efficiencyWeight);
644657
if (isPhysicalPrimary) {
645-
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRec"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), statusDsPrompt, poolBin, efficiencyWeight);
658+
if (doLSpair && ((ptD > 0. && ptHadron > 0.) || (ptD < 0. && ptHadron < 0.))) { // like-sign pairs
659+
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRecLS"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), statusDsPrompt, poolBin, efficiencyWeight);
660+
} else if (doULSpair && ((ptD > 0. && ptHadron < 0.) || (ptD < 0. && ptHadron > 0.))) { // unlike-sign pairs
661+
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRecULS"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), statusDsPrompt, poolBin, efficiencyWeight);
662+
} else { // default case
663+
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRec"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), statusDsPrompt, poolBin, efficiencyWeight);
664+
}
646665
if (statusDsPrompt == 1 && statusPromptHadron == RecoDecay::OriginType::Prompt) {
647666
registry.fill(HIST("hCorrel2DVsPtSignalRegionPromptDsPromptHadronMcRec"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), poolBin, efficiencyWeight);
648667
} else if (statusDsPrompt == 0 && statusPromptHadron == RecoDecay::OriginType::NonPrompt) {
@@ -685,11 +704,23 @@ struct HfTaskCorrelationDsHadrons {
685704
registry.fill(HIST("hDeltaPhiPtIntMcGen"), deltaPhi);
686705
if (isDsPrompt) {
687706
registry.fill(HIST("hCorrel2DVsPtMcGenPrompt"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), poolBin);
707+
if (doULSpair) {
708+
registry.fill(HIST("hCorrel2DVsPtMcGenPromptULS"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), poolBin);
709+
}
710+
if (doLSpair && ((ptD > 0. && ptHadron > 0.) || (ptD < 0. && ptHadron < 0.))) {
711+
registry.fill(HIST("hCorrel2DVsPtMcGenPromptLS"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), poolBin);
712+
}
688713
if (statusPromptHadron == RecoDecay::OriginType::Prompt) {
689714
registry.fill(HIST("hCorrel2DVsPtMcGenPromptDsPromptHadron"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), poolBin);
690715
}
691716
} else {
692717
registry.fill(HIST("hCorrel2DVsPtMcGenNonPrompt"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), poolBin);
718+
if (doULSpair) {
719+
registry.fill(HIST("hCorrel2DVsPtMcGenNonPromptULS"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), poolBin);
720+
}
721+
if (doLSpair && ((ptD > 0. && ptHadron > 0.) || (ptD < 0. && ptHadron < 0.))) {
722+
registry.fill(HIST("hCorrel2DVsPtMcGenNonPromptLS"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), poolBin);
723+
}
693724
if (statusPromptHadron == RecoDecay::OriginType::NonPrompt) {
694725
registry.fill(HIST("hCorrel2DVsPtMcGenNonPromptDsNonPromptHadron"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), poolBin);
695726
}
@@ -876,7 +907,13 @@ struct HfTaskCorrelationDsHadrons {
876907
registry.fill(HIST("hDeltaPhiPtIntSignalRegionMcRec"), deltaPhi, efficiencyWeight);
877908
registry.fill(HIST("hCorrel2DVsPtSignalRegionMcRec"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), statusDsPrompt, poolBin, efficiencyWeight);
878909
if (isPhysicalPrimary) {
879-
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRec"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), statusDsPrompt, poolBin, efficiencyWeight);
910+
if (doLSpair && ((ptD > 0. && ptHadron > 0.) || (ptD < 0. && ptHadron < 0.))) { // like-sign pairs
911+
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRecLS"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), statusDsPrompt, poolBin, efficiencyWeight);
912+
} else if (doULSpair && ((ptD > 0. && ptHadron < 0.) || (ptD < 0. && ptHadron > 0.))) { // unlike-sign pairs
913+
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRecULS"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), statusDsPrompt, poolBin, efficiencyWeight);
914+
} else { // default case
915+
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRec"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), statusDsPrompt, poolBin, efficiencyWeight);
916+
}
880917
if (statusDsPrompt == 1 && statusPromptHadron == RecoDecay::OriginType::Prompt) {
881918
registry.fill(HIST("hCorrel2DVsPtSignalRegionPromptDsPromptHadronMcRec"), deltaPhi, deltaEta, std::abs(ptD), std::abs(ptHadron), poolBin, efficiencyWeight);
882919
} else if (statusDsPrompt == 0 && statusPromptHadron == RecoDecay::OriginType::NonPrompt) {

0 commit comments

Comments
 (0)