From c5c5db11d7e60dcda8df61cb6c3c47aa65062934 Mon Sep 17 00:00:00 2001 From: Daiki Sekihata Date: Tue, 15 Jul 2025 21:53:29 +0200 Subject: [PATCH 1/3] PWGEM/Dilepton: remove unnecessary Preslice --- PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx | 1 - 1 file changed, 1 deletion(-) diff --git a/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx b/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx index 4d66821e2b6..c45b2a3321d 100644 --- a/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx +++ b/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx @@ -381,7 +381,6 @@ struct skimmerPrimaryMuon { SliceCache cache; - PresliceUnsorted perMFTTrack = o2::aod::fwdtrack::matchMFTTrackId; Preslice perCollision = o2::aod::fwdtrack::collisionId; Preslice fwdtrackIndicesPerCollision = aod::track_association::collisionId; PresliceUnsorted fwdtrackIndicesPerFwdTrack = aod::track_association::fwdtrackId; From 863e08dfcfc31ece5f072a7225c5931d5b2d9d32 Mon Sep 17 00:00:00 2001 From: Daiki Sekihata Date: Wed, 16 Jul 2025 12:11:10 +0200 Subject: [PATCH 2/3] PWGEM/Dilepton: reduce function arguments --- PWGEM/Dilepton/DataModel/dileptonTables.h | 2 +- PWGEM/Dilepton/TableProducer/filterEoI.cxx | 61 +++++++++++++++---- .../TableProducer/skimmerPrimaryMuon.cxx | 20 +++--- 3 files changed, 59 insertions(+), 24 deletions(-) diff --git a/PWGEM/Dilepton/DataModel/dileptonTables.h b/PWGEM/Dilepton/DataModel/dileptonTables.h index 2a0ba180708..e6b2fe4633d 100644 --- a/PWGEM/Dilepton/DataModel/dileptonTables.h +++ b/PWGEM/Dilepton/DataModel/dileptonTables.h @@ -725,7 +725,7 @@ using EMPrimaryTracks = EMPrimaryTracks_000; // iterators using EMPrimaryTrack = EMPrimaryTracks::iterator; -DECLARE_SOA_TABLE(EMPrimaryTrackEMEventIds, "AOD", "PRMTRACKEMEVENTID", emprimarytrack::EMEventId); // To be joined with EMPrimaryTracks table at analysis level. +DECLARE_SOA_TABLE(EMPrimaryTrackEMEventIds, "AOD", "PRMTRKEMEVENTID", emprimarytrack::EMEventId); // To be joined with EMPrimaryTracks table at analysis level. // iterators using EMPrimaryTrackEMEventId = EMPrimaryTrackEMEventIds::iterator; diff --git a/PWGEM/Dilepton/TableProducer/filterEoI.cxx b/PWGEM/Dilepton/TableProducer/filterEoI.cxx index 9e44960f7de..11a3078d501 100644 --- a/PWGEM/Dilepton/TableProducer/filterEoI.cxx +++ b/PWGEM/Dilepton/TableProducer/filterEoI.cxx @@ -15,6 +15,7 @@ // Please write to: daiki.sekihata@cern.ch #include "PWGEM/Dilepton/DataModel/dileptonTables.h" +#include "PWGEM/PhotonMeson/DataModel/gammaTables.h" #include "Framework/ASoAHelpers.h" #include "Framework/AnalysisDataModel.h" @@ -30,32 +31,39 @@ struct filterEoI { enum SubSystem { kElectron = 0x1, kFwdMuon = 0x2, + kPCM = 0x4, }; Produces emeoi; - Configurable minNElectrons{"minNElectrons", 1, "min number of e+ and e- at midrapidity"}; - Configurable minNMuons{"minNMuons", 1, "min number of mu+ and mu- at forward rapidity"}; + Configurable minNElectrons{"minNElectrons", 1, "min number of e+ or e- at midrapidity"}; + Configurable minNMuons{"minNMuons", 1, "min number of mu+ or mu- at forward rapidity"}; + Configurable minNV0s{"minNV0s", 1, "min number of v0 photons at midrapidity"}; HistogramRegistry fRegistry{"output"}; void init(o2::framework::InitContext&) { - auto hEventCounter = fRegistry.add("hEventCounter", "hEventCounter", kTH1D, {{5, 0.5f, 5.5f}}); + auto hEventCounter = fRegistry.add("hEventCounter", "hEventCounter", kTH1D, {{8, 0.5f, 8.5f}}); hEventCounter->GetXaxis()->SetBinLabel(1, "all"); hEventCounter->GetXaxis()->SetBinLabel(2, "event with electron"); hEventCounter->GetXaxis()->SetBinLabel(3, "event with forward muon"); - hEventCounter->GetXaxis()->SetBinLabel(4, "event with electron or forward muon"); - hEventCounter->GetXaxis()->SetBinLabel(5, "event with electron and forward muon"); + hEventCounter->GetXaxis()->SetBinLabel(4, "event with v0"); + hEventCounter->GetXaxis()->SetBinLabel(5, "event with electron or forward muon"); + hEventCounter->GetXaxis()->SetBinLabel(6, "event with electron and forward muon"); + hEventCounter->GetXaxis()->SetBinLabel(7, "event with electron or forward muon or v0"); + hEventCounter->GetXaxis()->SetBinLabel(8, "event with electron and forward muon and v0"); } SliceCache cache; Preslice perCollision_el = aod::emprimaryelectron::collisionId; Preslice perCollision_mu = aod::emprimarymuon::collisionId; + Preslice perCollision_v0 = aod::v0photonkf::collisionId; - template - void selectEoI(TCollisions const& collisions, TElectrons const& electrons, TMuons const& muons) + template + void selectEoI(TCollisions const& collisions, TElectrons const& electrons, TMuons const& muons, TV0s const& v0s) { for (const auto& collision : collisions) { bool does_electron_exist = false; bool does_fwdmuon_exist = false; + bool does_pcm_exist = false; fRegistry.fill(HIST("hEventCounter"), 1); if constexpr (static_cast(system & kElectron)) { @@ -72,15 +80,28 @@ struct filterEoI { fRegistry.fill(HIST("hEventCounter"), 3); } } + if constexpr (static_cast(system & kPCM)) { + auto v0s_coll = v0s.sliceBy(perCollision_v0, collision.globalIndex()); + if (v0s_coll.size() >= minNV0s) { + does_pcm_exist = true; + fRegistry.fill(HIST("hEventCounter"), 4); + } + } if (does_electron_exist || does_fwdmuon_exist) { - fRegistry.fill(HIST("hEventCounter"), 4); + fRegistry.fill(HIST("hEventCounter"), 5); } if (does_electron_exist && does_fwdmuon_exist) { - fRegistry.fill(HIST("hEventCounter"), 5); + fRegistry.fill(HIST("hEventCounter"), 6); + } + if (does_electron_exist || does_fwdmuon_exist || does_pcm_exist) { + fRegistry.fill(HIST("hEventCounter"), 7); + } + if (does_electron_exist && does_fwdmuon_exist && does_pcm_exist) { + fRegistry.fill(HIST("hEventCounter"), 8); } - emeoi(does_electron_exist || does_fwdmuon_exist); + emeoi(does_electron_exist || does_fwdmuon_exist || does_pcm_exist); } // end of collision loop @@ -89,19 +110,31 @@ struct filterEoI { void process_Electron(aod::Collisions const& collisions, aod::EMPrimaryElectrons const& electrons) { const uint8_t sysflag = kElectron; - selectEoI(collisions, electrons, nullptr); + selectEoI(collisions, electrons, nullptr, nullptr); } void process_FwdMuon(aod::Collisions const& collisions, aod::EMPrimaryMuons const& muons) { const uint8_t sysflag = kFwdMuon; - selectEoI(collisions, nullptr, muons); + selectEoI(collisions, nullptr, muons, nullptr); } void process_Electron_FwdMuon(aod::Collisions const& collisions, aod::EMPrimaryElectrons const& electrons, aod::EMPrimaryMuons const& muons) { const uint8_t sysflag = kElectron | kFwdMuon; - selectEoI(collisions, electrons, muons); + selectEoI(collisions, electrons, muons, nullptr); + } + + void process_PCM(aod::Collisions const& collisions, aod::V0PhotonsKF const& v0s) + { + const uint8_t sysflag = kPCM; + selectEoI(collisions, nullptr, nullptr, v0s); + } + + void process_Electron_FwdMuon_PCM(aod::Collisions const& collisions, aod::EMPrimaryElectrons const& electrons, aod::EMPrimaryMuons const& muons, aod::V0PhotonsKF const& v0s) + { + const uint8_t sysflag = kElectron | kFwdMuon | kPCM; + selectEoI(collisions, electrons, muons, v0s); } void processDummy(aod::Collisions const& collisions) @@ -113,7 +146,9 @@ struct filterEoI { PROCESS_SWITCH(filterEoI, process_Electron, "create filter bit for Electron", false); PROCESS_SWITCH(filterEoI, process_FwdMuon, "create filter bit for Forward Muon", false); + PROCESS_SWITCH(filterEoI, process_PCM, "create filter bit for PCM", false); PROCESS_SWITCH(filterEoI, process_Electron_FwdMuon, "create filter bit for Electron, FwdMuon", false); + PROCESS_SWITCH(filterEoI, process_Electron_FwdMuon_PCM, "create filter bit for Electron, FwdMuon, PCM", false); PROCESS_SWITCH(filterEoI, processDummy, "processDummy", true); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) diff --git a/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx b/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx index c45b2a3321d..9de895a127a 100644 --- a/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx +++ b/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx @@ -203,8 +203,8 @@ struct skimmerPrimaryMuon { return true; } - template - void fillFwdTrackTable(TCollision const& collision, TFwdTrack fwdtrack, TFwdTracks const&, TMFTTracks const&, const bool isAmbiguous) + template + void fillFwdTrackTable(TCollision const& collision, TFwdTrack fwdtrack, const bool isAmbiguous) { if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && fwdtrack.chi2MatchMCHMFT() > maxMatchingChi2MCHMFT) { return; @@ -400,7 +400,7 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) { continue; } - fillFwdTrackTable(collision, fwdtrack, fwdtracks, mfttracks, false); + fillFwdTrackTable(collision, fwdtrack, false); } // end of fwdtrack loop } // end of collision loop } @@ -429,7 +429,7 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) { continue; } - fillFwdTrackTable(collision, fwdtrack, fwdtracks, mfttracks, mapAmb[fwdtrack.globalIndex()]); + fillFwdTrackTable(collision, fwdtrack, mapAmb[fwdtrack.globalIndex()]); } // end of fwdtrack loop } // end of collision loop mapAmb.clear(); @@ -455,7 +455,7 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) { continue; } - fillFwdTrackTable(collision, fwdtrack, fwdtracks, mfttracks, false); + fillFwdTrackTable(collision, fwdtrack, false); } // end of fwdtrack loop } // end of collision loop } @@ -486,7 +486,7 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) { continue; } - fillFwdTrackTable(collision, fwdtrack, fwdtracks, mfttracks, mapAmb[fwdtrack.globalIndex()]); + fillFwdTrackTable(collision, fwdtrack, mapAmb[fwdtrack.globalIndex()]); } // end of fwdtrack loop } // end of collision loop mapAmb.clear(); @@ -513,7 +513,7 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) { continue; } - fillFwdTrackTable(collision, fwdtrack, fwdtracks, mfttracks, false); + fillFwdTrackTable(collision, fwdtrack, false); } // end of fwdtrack loop } // end of collision loop } @@ -547,7 +547,7 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) { continue; } - fillFwdTrackTable(collision, fwdtrack, fwdtracks, mfttracks, mapAmb[fwdtrack.globalIndex()]); + fillFwdTrackTable(collision, fwdtrack, mapAmb[fwdtrack.globalIndex()]); } // end of fwdtrack loop } // end of collision loop mapAmb.clear(); @@ -605,8 +605,8 @@ struct associateSameMFT { em_same_mft_ids(self_Ids); self_Ids.clear(); self_Ids.shrink_to_fit(); - } else { // for standalone muons - em_same_mft_ids(std::vector{}); // empty + } else { + em_same_mft_ids(std::vector{}); // empty for standalone muons } } // end of muon loop } From ae60b2f6fef578ab655123afffa5f0bd3dd42277 Mon Sep 17 00:00:00 2001 From: Daiki Sekihata Date: Thu, 17 Jul 2025 09:28:36 +0200 Subject: [PATCH 3/3] Update skimmerPrimaryMuon.cxx --- PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx b/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx index 9de895a127a..32cff015ea9 100644 --- a/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx +++ b/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx @@ -385,7 +385,7 @@ struct skimmerPrimaryMuon { Preslice fwdtrackIndicesPerCollision = aod::track_association::collisionId; PresliceUnsorted fwdtrackIndicesPerFwdTrack = aod::track_association::fwdtrackId; - void processRec_SA(MyCollisions const& collisions, MyFwdTracks const& fwdtracks, aod::MFTTracks const& mfttracks, aod::BCsWithTimestamps const&) + void processRec_SA(MyCollisions const& collisions, MyFwdTracks const& fwdtracks, aod::MFTTracks const&, aod::BCsWithTimestamps const&) { for (const auto& collision : collisions) { const auto& bc = collision.template bc_as(); @@ -406,7 +406,7 @@ struct skimmerPrimaryMuon { } PROCESS_SWITCH(skimmerPrimaryMuon, processRec_SA, "process reconstructed info", false); - void processRec_TTCA(MyCollisions const& collisions, MyFwdTracks const& fwdtracks, aod::MFTTracks const& mfttracks, aod::BCsWithTimestamps const&, aod::FwdTrackAssoc const& fwdtrackIndices) + void processRec_TTCA(MyCollisions const& collisions, MyFwdTracks const& fwdtracks, aod::MFTTracks const&, aod::BCsWithTimestamps const&, aod::FwdTrackAssoc const& fwdtrackIndices) { std::unordered_map mapAmb; // fwdtrack.globalIndex() -> bool isAmb; for (const auto& fwdtrack : fwdtracks) { @@ -436,7 +436,7 @@ struct skimmerPrimaryMuon { } PROCESS_SWITCH(skimmerPrimaryMuon, processRec_TTCA, "process reconstructed info", false); - void processRec_SA_SWT(MyCollisionsWithSWT const& collisions, MyFwdTracks const& fwdtracks, aod::MFTTracks const& mfttracks, aod::BCsWithTimestamps const&) + void processRec_SA_SWT(MyCollisionsWithSWT const& collisions, MyFwdTracks const& fwdtracks, aod::MFTTracks const&, aod::BCsWithTimestamps const&) { for (const auto& collision : collisions) { const auto& bc = collision.template bc_as(); @@ -461,7 +461,7 @@ struct skimmerPrimaryMuon { } PROCESS_SWITCH(skimmerPrimaryMuon, processRec_SA_SWT, "process reconstructed info only with standalone", false); - void processRec_TTCA_SWT(MyCollisionsWithSWT const& collisions, MyFwdTracks const& fwdtracks, aod::MFTTracks const& mfttracks, aod::BCsWithTimestamps const&, aod::FwdTrackAssoc const& fwdtrackIndices) + void processRec_TTCA_SWT(MyCollisionsWithSWT const& collisions, MyFwdTracks const& fwdtracks, aod::MFTTracks const&, aod::BCsWithTimestamps const&, aod::FwdTrackAssoc const& fwdtrackIndices) { std::unordered_map mapAmb; // fwdtrack.globalIndex() -> bool isAmb; for (const auto& fwdtrack : fwdtracks) { @@ -493,7 +493,7 @@ struct skimmerPrimaryMuon { } PROCESS_SWITCH(skimmerPrimaryMuon, processRec_TTCA_SWT, "process reconstructed info", false); - void processMC_SA(soa::Join const& collisions, MyFwdTracksMC const& fwdtracks, MFTTracksMC const& mfttracks, aod::BCsWithTimestamps const&) + void processMC_SA(soa::Join const& collisions, MyFwdTracksMC const& fwdtracks, MFTTracksMC const&, aod::BCsWithTimestamps const&) { for (const auto& collision : collisions) { const auto& bc = collision.template bc_as(); @@ -519,7 +519,7 @@ struct skimmerPrimaryMuon { } PROCESS_SWITCH(skimmerPrimaryMuon, processMC_SA, "process reconstructed and MC info", false); - void processMC_TTCA(soa::Join const& collisions, MyFwdTracksMC const& fwdtracks, MFTTracksMC const& mfttracks, aod::BCsWithTimestamps const&, aod::FwdTrackAssoc const& fwdtrackIndices) + void processMC_TTCA(soa::Join const& collisions, MyFwdTracksMC const& fwdtracks, MFTTracksMC const&, aod::BCsWithTimestamps const&, aod::FwdTrackAssoc const& fwdtrackIndices) { std::unordered_map mapAmb; // fwdtrack.globalIndex() -> bool isAmb; for (const auto& fwdtrack : fwdtracks) {