Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
133 changes: 63 additions & 70 deletions PWGLF/Tasks/GlobalEventProperties/PseudorapidityDensityMFT.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@
#include <TGeoGlobalMagField.h>
#include <TH1.h>
#include <TH2.h>
#include <TUUID.h>
#include <TPDGCode.h>
#include <TUUID.h>

#include <algorithm>
#include <array>
Expand Down Expand Up @@ -296,7 +296,6 @@ struct PseudorapidityDensityMFT {
static constexpr int NoCompatibleCollisions = 0;
static constexpr int SingleCompatibleCollision = 1;


static constexpr int ChargeUnitTimesThree = 3;

void initMagField(FullBCs::iterator const& bc)
Expand Down Expand Up @@ -394,7 +393,7 @@ struct PseudorapidityDensityMFT {
Configurable<bool> useTriggerTVX{"useTriggerTVX", true, "Require kIsTriggerTVX in processGenReco"};
Configurable<bool> useNoTimeFrameBorderCut{"useNoTimeFrameBorderCut", true, "Require kNoTimeFrameBorder in processGenReco"};
Configurable<bool> useNoITSROFrameBorderCut{"useNoITSROFrameBorderCut", true, "Require kNoITSROFrameBorder in processGenReco"};
AxisSpec multAxisRecoMFT = {multBinning, "N_{ch}^{reco,MFT}"};
AxisSpec multAxisRecoMFT = {multBinning, "N_{ch}^{reco,MFT}"};
AxisSpec multAxisGenMFT = {multBinning, "N_{ch}^{gen,MFT}"};
// Namespace plus invocation/reco IDs makes offline event keys independent of
// local collision-index reuse across dataframes and separate worker outputs.
Expand Down Expand Up @@ -520,17 +519,11 @@ struct PseudorapidityDensityMFT {
const AxisSpec key16{65536, -0.5, 65535.5};
registry.add({"Association/EventTrackKeysBeforeDCA",
";#eta;z_{chosen}^{reco};DCAxy;DCAz;track category;association (0:right,1:wrong,2:unclassified);namespace0;namespace1;namespace2;namespace3;namespace4;namespace5;callLow;callHigh;recoLow;recoHigh",
{HistType::kTHnSparseD, {etaBinning, zAxis, dcaXyAxis, dcaZAxis,
{2, -0.5, 1.5}, {3, -0.5, 2.5},
key16, key16, key16, key16, key16, key16, key16, key16, key16, key16}}});
registry.add({"Association/hNumRecoEventsWithRightTracks", ";Selected reco collisions with right-associated tracks;Count",
{HistType::kTH1D, {{1, 0.5, 1.5}}}});
registry.add({"Association/hNumRecoEventsWithWrongTracks", ";Selected reco collisions with wrong-associated tracks;Count",
{HistType::kTH1D, {{1, 0.5, 1.5}}}});
registry.add({"Association/RecoEventVzWithRightTracks", ";z_{chosen}^{reco} (cm);Selected reco collisions",
{HistType::kTH1D, {zAxis}}});
registry.add({"Association/RecoEventVzWithWrongTracks", ";z_{chosen}^{reco} (cm);Selected reco collisions",
{HistType::kTH1D, {zAxis}}});
{HistType::kTHnSparseD, {etaBinning, zAxis, dcaXyAxis, dcaZAxis, {2, -0.5, 1.5}, {3, -0.5, 2.5}, key16, key16, key16, key16, key16, key16, key16, key16, key16, key16}}});
registry.add({"Association/hNumRecoEventsWithRightTracks", ";Selected reco collisions with right-associated tracks;Count", {HistType::kTH1D, {{1, 0.5, 1.5}}}});
registry.add({"Association/hNumRecoEventsWithWrongTracks", ";Selected reco collisions with wrong-associated tracks;Count", {HistType::kTH1D, {{1, 0.5, 1.5}}}});
registry.add({"Association/RecoEventVzWithRightTracks", ";z_{chosen}^{reco} (cm);Selected reco collisions", {HistType::kTH1D, {zAxis}}});
registry.add({"Association/RecoEventVzWithWrongTracks", ";z_{chosen}^{reco} (cm);Selected reco collisions", {HistType::kTH1D, {zAxis}}});
registry.add({"OfflineVariations/RecoTrackSparseBeforeDCA",
";#eta;z_{vtx}^{reco} (cm);DCA_{xy} (cm);DCA_{z} (cm);category (0: nonamb, 1: amb)",
{HistType::kTHnSparseF, {etaBinning, zAxis, dcaXyAxis, dcaZAxis, {2, -0.5, 1.5}}}});
Expand Down Expand Up @@ -1473,10 +1466,10 @@ struct PseudorapidityDensityMFT {

std::vector<typename std::decay_t<decltype(collisions)>::iterator> cols;
for (const auto& bc : bcs) {
if (!useEvSel ||
(bc.selection_bit(aod::evsel::kIsBBT0A) &&
bc.selection_bit(aod::evsel::kIsBBT0C))) {
registry.fill(HIST("EventSelection"), static_cast<int>(EventSelectionBin::GoodBCs));
if (!useEvSel ||
(bc.selection_bit(aod::evsel::kIsBBT0A) &&
bc.selection_bit(aod::evsel::kIsBBT0C))) {
registry.fill(HIST("EventSelection"), static_cast<int>(EventSelectionBin::GoodBCs));
cols.clear();
for (const auto& collision : collisions) {
if (collision.has_foundBC()) {
Expand Down Expand Up @@ -1599,7 +1592,7 @@ struct PseudorapidityDensityMFT {
((phi > ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) - cfgPhiCut) &&
(phi < ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) + cfgPhiCut))) {
continue;
}
}
}

registry.fill(HIST("TracksEtaZvtx"), track.eta(), z);
Expand Down Expand Up @@ -1962,7 +1955,7 @@ struct PseudorapidityDensityMFT {
((phi > ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) - cfgPhiCut) &&
(phi < ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) + cfgPhiCut))) {
continue;
}
}
}

registry.fill(HIST("Tracks/Centrality/EtaZvtx"), track.eta(), z, c);
Expand Down Expand Up @@ -2102,9 +2095,9 @@ struct PseudorapidityDensityMFT {

if (usePhiCut) {
if ((phi <= PhiVetoLow) ||
((phi >= PhiVetoPiMin) && (phi <= PhiVetoPiMax)) ||
(phi >= PhiVetoHigh)) {
continue;
((phi >= PhiVetoPiMin) && (phi <= PhiVetoPiMax)) ||
(phi >= PhiVetoHigh)) {
continue;
}
}
if (usePtCut) {
Expand Down Expand Up @@ -2744,8 +2737,7 @@ struct PseudorapidityDensityMFT {
std::abs(parentPdg) != PDG_t::kLambda0) {
continue;
}
const int parentSpecies = parentPdg == PDG_t::kK0Short ? 1 :
(parentPdg == PDG_t::kLambda0 ? 2 : 3);
const int parentSpecies = parentPdg == PDG_t::kK0Short ? 1 : (parentPdg == PDG_t::kLambda0 ? 2 : 3);
registry.fill(HIST("Strangeness/Mid/RecoStrangeEtaZvtx"),
centralTrack.eta(), z,
centralTrack.dcaXY(), centralTrack.dcaZ(), parentSpecies);
Expand Down Expand Up @@ -2832,8 +2824,8 @@ struct PseudorapidityDensityMFT {
original.chi2() / getTrackNdf(original) >= cfgChi2NDFMax ||
offlinePhi <= cfgPhiCut1 || offlinePhi >= cfgPhiCut2 ||
(usePhiCut && (offlinePhi <= PhiVetoLow ||
(offlinePhi >= PhiVetoPiMin && offlinePhi <= PhiVetoPiMax) ||
offlinePhi >= PhiVetoHigh)) ||
(offlinePhi >= PhiVetoPiMin && offlinePhi <= PhiVetoPiMax) ||
offlinePhi >= PhiVetoHigh)) ||
(usePtCut && original.pt() > cfgnPt) || !passGenRecoTrackMode(offlineTrack)) {
continue;
}
Expand Down Expand Up @@ -2881,8 +2873,10 @@ struct PseudorapidityDensityMFT {
(!useDCAxyCut || std::abs(offlineTrack.bestDCAXY()) <= maxDCAxy) &&
(!useDCAzCut || std::abs(offlineTrack.bestDCAZ()) <= maxDCAz);
if (passesConfiguredDCA) {
if (association == 0) recoEventsWithRightTracks.insert(chosenId);
if (association == 1) recoEventsWithWrongTracks.insert(chosenId);
if (association == 0)
recoEventsWithRightTracks.insert(chosenId);
if (association == 1)
recoEventsWithWrongTracks.insert(chosenId);
}
}

Expand Down Expand Up @@ -3069,8 +3063,7 @@ struct PseudorapidityDensityMFT {
// excludes fake labels and counts only matched secondaries.
if (isSecondaryCharged) {
const int parentSpecies =
mcpartMother.pdgCode() == PDG_t::kK0Short ? 1 :
(mcpartMother.pdgCode() == PDG_t::kLambda0 ? 2 : 3);
mcpartMother.pdgCode() == PDG_t::kK0Short ? 1 : (mcpartMother.pdgCode() == PDG_t::kLambda0 ? 2 : 3);
registry.fill(HIST("Strangeness/Fwd/RecoStrangeEtaZvtx"),
etaReco, z, dcaXYReco, dcaZReco, parentSpecies);
}
Expand Down Expand Up @@ -3511,7 +3504,7 @@ struct PseudorapidityDensityMFT {
((phi >= PhiVetoPiMin) && (phi <= PhiVetoPiMax)) ||
(phi >= PhiVetoHigh)) {
continue;
}
}
}
if (usePtCut) {
if (ptCut > cfgnPt) {
Expand All @@ -3524,54 +3517,54 @@ struct PseudorapidityDensityMFT {
mcCollision.posZ());
registry.fill(HIST("TracksPtEtaGen_t"), particle.pt(), particle.eta());
}
if ( mcCollision.posZ() >= cfgVzCut1 && mcCollision.posZ() <= cfgVzCut2) {
if (mcCollision.posZ() >= cfgVzCut1 && mcCollision.posZ() <= cfgVzCut2) {
registry.fill(HIST("TracksEtaZvtxGen_gt0t"), particle.eta(),
mcCollision.posZ());
registry.fill(HIST("TracksPhiEtaGen_gt0t"), particle.phi(), particle.eta());

if ( nChargedCentral > 0) {
if (particle.isPhysicalPrimary()) {
registry.fill(HIST("TracksEtaZvtxGen_gt0t_primary"), particle.eta(), mcCollision.posZ());
}
registry.fill(HIST("TracksEtaZvtxGen"), particle.eta(),
mcCollision.posZ());
registry.fill(HIST("TracksPtEtaGen"), particle.pt(), particle.eta());
registry.fill(HIST("TracksPhiEtaGen"), particle.phi(), particle.eta());
registry.fill(HIST("TracksPhiZvtxGen"), particle.phi(),
mcCollision.posZ());
if (particle.isPhysicalPrimary()) {
registry.fill(HIST("Purity/mc/PrimaryAll"), static_cast<int>(SingleCountBin::Count));
registry.fill(HIST("Purity/mc/PrimaryAllEta"), particle.eta());
registry.fill(HIST("Purity/mc/PrimaryTracksEtaZvtx"), particle.eta(), mcCollision.posZ());
registry.fill(HIST("Purity/mc/PrimaryTracksPhiEta"), particle.phi(), particle.eta());
}

// Retain both vertex definitions for narrow reco-z slices. A split
// generated event contributes once per accepted reconstructed collision,
// matching SelectedRecoEventVertexResponse; do not interpret as unique MC events.
if (particle.isPhysicalPrimary()) {
for (const auto& [offlineRecoId, offlineRecoZ] : recoVtxZ) {
registry.fill(HIST("OfflineVariations/GenPrimaryEtaTrueZRecoZ"),
particle.eta(), mcCollision.posZ(), offlineRecoZ);
if (nChargedCentral > 0) {
if (particle.isPhysicalPrimary()) {
registry.fill(HIST("TracksEtaZvtxGen_gt0t_primary"), particle.eta(), mcCollision.posZ());
}
}

if (atLeastOneSel8VzGt0) {
registry.fill(HIST("TracksEtaZvtxGen_gt0"), particle.eta(),
registry.fill(HIST("TracksEtaZvtxGen"), particle.eta(),
mcCollision.posZ());
registry.fill(HIST("TracksPhiEtaGen_gt0"), particle.phi(), particle.eta());
registry.fill(HIST("TracksPtEtaGen"), particle.pt(), particle.eta());
registry.fill(HIST("TracksPhiEtaGen"), particle.phi(), particle.eta());
registry.fill(HIST("TracksPhiZvtxGen"), particle.phi(),
mcCollision.posZ());
if (particle.isPhysicalPrimary()) {
registry.fill(HIST("Purity/mc/PrimaryAll"), static_cast<int>(SingleCountBin::Count));
registry.fill(HIST("Purity/mc/PrimaryAllEta"), particle.eta());
registry.fill(HIST("Purity/mc/PrimaryTracksEtaZvtx"), particle.eta(), mcCollision.posZ());
registry.fill(HIST("Purity/mc/PrimaryTracksPhiEta"), particle.phi(), particle.eta());
}

// Retain both vertex definitions for narrow reco-z slices. A split
// generated event contributes once per accepted reconstructed collision,
// matching SelectedRecoEventVertexResponse; do not interpret as unique MC events.
if (particle.isPhysicalPrimary()) {
registry.fill(HIST("TracksEtaZvtxGen_gt0_primary"), particle.eta(), mcCollision.posZ());
registry.fill(HIST("TracksPhiEtaGen_gt0_primary"), particle.phi(), particle.eta());
registry.fill(HIST("TracksPtZvtxGen_gt0_primary"), particle.pt(), mcCollision.posZ());
registry.fill(HIST("Purity/mc/PrimaryTracksEtaZvtx_gt0"), particle.eta(), mcCollision.posZ());
registry.fill(HIST("Purity/mc/PrimaryTracksPtZvtx_gt0"), particle.pt(), mcCollision.posZ());
// registry.fill(HIST("Purity/mc/PrimaryTracksDCAxyZvtx_gt0"), dcaXyCut, mcCollision.posZ());
// registry.fill(HIST("Purity/mc/PrimaryTracksDCAzZvtx_gt0"), dcaZCut, mcCollision.posZ());
for (const auto& [offlineRecoId, offlineRecoZ] : recoVtxZ) {
registry.fill(HIST("OfflineVariations/GenPrimaryEtaTrueZRecoZ"),
particle.eta(), mcCollision.posZ(), offlineRecoZ);
}
}

if (atLeastOneSel8VzGt0) {
registry.fill(HIST("TracksEtaZvtxGen_gt0"), particle.eta(),
mcCollision.posZ());
registry.fill(HIST("TracksPhiEtaGen_gt0"), particle.phi(), particle.eta());
if (particle.isPhysicalPrimary()) {
registry.fill(HIST("TracksEtaZvtxGen_gt0_primary"), particle.eta(), mcCollision.posZ());
registry.fill(HIST("TracksPhiEtaGen_gt0_primary"), particle.phi(), particle.eta());
registry.fill(HIST("TracksPtZvtxGen_gt0_primary"), particle.pt(), mcCollision.posZ());
registry.fill(HIST("Purity/mc/PrimaryTracksEtaZvtx_gt0"), particle.eta(), mcCollision.posZ());
registry.fill(HIST("Purity/mc/PrimaryTracksPtZvtx_gt0"), particle.pt(), mcCollision.posZ());
// registry.fill(HIST("Purity/mc/PrimaryTracksDCAxyZvtx_gt0"), dcaXyCut, mcCollision.posZ());
// registry.fill(HIST("Purity/mc/PrimaryTracksDCAzZvtx_gt0"), dcaZCut, mcCollision.posZ());
}
}
}
}
}
if (particle.isPhysicalPrimary()) {

++nGenPrimaryChargedMFT;
Expand Down