From 0887d51119c549d22147f3911bc47b5b089fe979 Mon Sep 17 00:00:00 2001 From: maciacco Date: Wed, 3 Dec 2025 17:33:31 +0100 Subject: [PATCH 1/4] fill table from a single function --- PWGLF/TableProducer/Nuspex/ebyeMaker.cxx | 128 ++++++++--------------- 1 file changed, 45 insertions(+), 83 deletions(-) diff --git a/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx b/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx index 86b0513ef07..b7bb412e94f 100644 --- a/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx +++ b/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx @@ -54,7 +54,6 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; -using TracksFull = soa::Join; using TracksFullPID = soa::Join; using TracksFullIUPID = soa::Join; using BCsWithRun2Info = soa::Join; @@ -267,7 +266,6 @@ struct EbyeMaker { HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; - Preslice perCollisionTracksFull = o2::aod::track::collisionId; Preslice perCollisionTracksFullPID = o2::aod::track::collisionId; Preslice perCollisionTracksFullIUPID = o2::aod::track::collisionId; Preslice perCollisionV0 = o2::aod::v0::collisionId; @@ -427,12 +425,41 @@ struct EbyeMaker { return static_cast((track.tpcSignal() - expBethe) / expSigma); } - template - float getOuterPID(T const& track) - { - if (!(doprocessRun2 || doprocessMcRun2) && track.hasTOF() && track.pt() > antipPtTof) - return track.tofNSigmaPr(); - return -999.f; + template + void fillTableMiniTrack(CandidateTrack& candidateTrack, T const& tk, float const& nSigmaITS = -999.f){ + int selMask = -1; + if ((isMc && candidateTrack.isreco) || !isMc) { + float outerPID = -999.f; + if (!(doprocessRun2 || doprocessMcRun2) && tk.hasTOF() && tk.pt() > antipPtTof) // TODO: remove the process-dependent conditional if all have the tof table + outerPID = tk.tofNSigmaPr(); + candidateTrack.itsnsigma = nSigmaITS; + candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; + int selMask = getTrackSelMask(candidateTrack); + if (candidateTrack.outerPID < outerPIDMin) + return; + if (isMc && candidateTrack.pdgcodemoth > 0) + selMask |= candidateTrack.pdgcodemoth; + } else if (isMc && candidateTrack.pdgcodemoth > 0) { + selMask = candidateTrack.pdgcodemoth; + } + if (isMc && selMask >= 0) { + mcMiniTrkTable( + miniCollTable.lastIndex(), + candidateTrack.pt, + static_cast(candidateTrack.eta * 100), + selMask, + candidateTrack.outerPID, + candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt, + static_cast(candidateTrack.geneta * 100), + candidateTrack.isreco); + } else if (!isMc) { + miniTrkTable( + miniCollTable.lastIndex(), + candidateTrack.pt, + static_cast(candidateTrack.eta * 100), + selMask, + candidateTrack.outerPID); + } } template @@ -523,8 +550,6 @@ struct EbyeMaker { { if (doprocessRun3 || doprocessMcRun3) return tracksAll.sliceBy(perCollisionTracksFullIUPID, collId); - else if (doprocessRun2 || doprocessMcRun2) - return tracksAll.sliceBy(perCollisionTracksFull, collId); else return tracksAll.sliceBy(perCollisionTracksFullPID, collId); } @@ -915,24 +940,13 @@ struct EbyeMaker { for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); - float outerPID = getOuterPID(tk); - candidateTrack.itsnsigma = -999.f; - candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; - int selMask = getTrackSelMask(candidateTrack); - if (candidateTrack.outerPID < outerPIDMin) - continue; - miniTrkTable( - miniCollTable.lastIndex(), - candidateTrack.pt, - static_cast(candidateTrack.eta * 100), - selMask, - candidateTrack.outerPID); + fillTableMiniTrack(candidateTrack, tk); } } } PROCESS_SWITCH(EbyeMaker, processRun3, "process (Run 3)", false); - void processRun2(soa::Join const& collisions, TracksFull const& tracks, aod::V0s const& V0s, BCsWithRun2Info const&) + void processRun2(soa::Join const& collisions, TracksFullPID const& tracks, aod::V0s const& V0s, BCsWithRun2Info const&) { for (const auto& collision : collisions) { auto bc = collision.bc_as(); @@ -1051,20 +1065,9 @@ struct EbyeMaker { for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); - float outerPID = getOuterPID(tk); auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2); histos.fill(HIST("QA/itsSignal"), tk.p(), itsSignal); - candidateTrack.itsnsigma = nSigmaITS; - candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; - int selMask = getTrackSelMask(candidateTrack); - if (candidateTrack.outerPID < outerPIDMin) - continue; - miniTrkTable( - miniCollTable.lastIndex(), - candidateTrack.pt, - static_cast(candidateTrack.eta * 100), - selMask, - candidateTrack.outerPID); + fillTableMiniTrack(candidateTrack, tk, nSigmaITS); } } } @@ -1093,35 +1096,14 @@ struct EbyeMaker { miniCollTable(static_cast(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl); for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) - int selMask = -1; - if (candidateTrack.isreco) { - auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); - float outerPID = getOuterPID(tk); - candidateTrack.itsnsigma = -999.f; - candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; - selMask = getTrackSelMask(candidateTrack); - if (candidateTrack.pdgcodemoth > 0) - selMask |= candidateTrack.pdgcodemoth; - } else if (candidateTrack.pdgcodemoth > 0) { - selMask = candidateTrack.pdgcodemoth; - } - if (selMask < 0) - continue; - mcMiniTrkTable( - miniCollTable.lastIndex(), - candidateTrack.pt, - static_cast(candidateTrack.eta * 100), - selMask, - candidateTrack.outerPID, - candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt, - static_cast(candidateTrack.geneta * 100), - candidateTrack.isreco); + auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0); + fillTableMiniTrack(candidateTrack, tk); } } } PROCESS_SWITCH(EbyeMaker, processMcRun3, "process MC (Run 3)", false); - void processMcRun2(soa::Join const& collisions, aod::McCollisions const& /*mcCollisions*/, TracksFull const& tracks, aod::V0s const& V0s, aod::McParticles const& mcParticles, aod::McTrackLabels const& mcLab, BCsWithRun2Info const&) + void processMcRun2(soa::Join const& collisions, aod::McCollisions const& /*mcCollisions*/, TracksFullPID const& tracks, aod::V0s const& V0s, aod::McParticles const& mcParticles, aod::McTrackLabels const& mcLab, BCsWithRun2Info const&) { for (const auto& collision : collisions) { auto bc = collision.bc_as(); @@ -1208,31 +1190,11 @@ struct EbyeMaker { miniCollTable(static_cast(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl); for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) - int selMask = -1; - if (candidateTrack.isreco) { - auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); - float outerPID = getOuterPID(tk); - auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2); + auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0); + auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2); + if (candidateTrack.isreco) histos.fill(HIST("QA/itsSignal"), tk.p(), itsSignal); - candidateTrack.itsnsigma = nSigmaITS; - candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; - selMask = getTrackSelMask(candidateTrack); - if (candidateTrack.pdgcodemoth > 0) - selMask |= candidateTrack.pdgcodemoth; - } else if (candidateTrack.pdgcodemoth > 0) { - selMask = candidateTrack.pdgcodemoth; - } - if (selMask < 0) - continue; - mcMiniTrkTable( - miniCollTable.lastIndex(), - candidateTrack.pt, - static_cast(candidateTrack.eta * 100), - selMask, - candidateTrack.outerPID, - candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt, - static_cast(candidateTrack.geneta * 100), - candidateTrack.isreco); + fillTableMiniTrack(candidateTrack, tk, nSigmaITS); } } } From 670a654519df48126739bb2c244d7a9e3523808f Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 3 Dec 2025 16:35:32 +0000 Subject: [PATCH 2/4] Please consider the following formatting changes --- PWGLF/TableProducer/Nuspex/ebyeMaker.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx b/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx index b7bb412e94f..0c681524935 100644 --- a/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx +++ b/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx @@ -426,7 +426,8 @@ struct EbyeMaker { } template - void fillTableMiniTrack(CandidateTrack& candidateTrack, T const& tk, float const& nSigmaITS = -999.f){ + void fillTableMiniTrack(CandidateTrack& candidateTrack, T const& tk, float const& nSigmaITS = -999.f) + { int selMask = -1; if ((isMc && candidateTrack.isreco) || !isMc) { float outerPID = -999.f; From 5cff6179e9165cbc5d1337f088b5fad752136b48 Mon Sep 17 00:00:00 2001 From: maciacco Date: Wed, 3 Dec 2025 17:52:47 +0100 Subject: [PATCH 3/4] fill mini table also for PbPb run 2 process function --- PWGLF/TableProducer/Nuspex/ebyeMaker.cxx | 138 ++++++++++++----------- 1 file changed, 73 insertions(+), 65 deletions(-) diff --git a/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx b/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx index 0c681524935..565cfd42193 100644 --- a/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx +++ b/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx @@ -257,6 +257,7 @@ struct EbyeMaker { Configurable> cfgTrackSels{"cfgTrackSels", {kTrackSels, 1, 12, particleName, trackSelsNames}, "Track selections"}; Configurable> cfgDcaSelsParam{"cfgDcaSelsParam", {kDcaSelsParam[0], 3, 3, dcaSelsNames, dcaParNames}, "DCA threshold settings"}; + Configurable fillMini{"fillMini", false, "fill mini tables"}; std::array ptMin; std::array ptTof; @@ -430,9 +431,7 @@ struct EbyeMaker { { int selMask = -1; if ((isMc && candidateTrack.isreco) || !isMc) { - float outerPID = -999.f; - if (!(doprocessRun2 || doprocessMcRun2) && tk.hasTOF() && tk.pt() > antipPtTof) // TODO: remove the process-dependent conditional if all have the tof table - outerPID = tk.tofNSigmaPr(); + float outerPID = tk.pt() > antipPtTof ? tk.tofNSigmaPr() : -999.f; candidateTrack.itsnsigma = nSigmaITS; candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; int selMask = getTrackSelMask(candidateTrack); @@ -938,7 +937,6 @@ struct EbyeMaker { fillRecoEvent(collision, tracks, v0TableThisCollision, centrality); miniCollTable(static_cast(collision.posZ() * 10), 0x0, nTrackletsColl, centrality, nTracksColl); - for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); fillTableMiniTrack(candidateTrack, tk); @@ -989,32 +987,38 @@ struct EbyeMaker { histos.fill(HIST("QA/V0MvsCL0"), centralityCl0, centrality); histos.fill(HIST("QA/trackletsVsV0M"), centrality, multTracklets); - collisionEbyeTable(centrality, collision.posZ()); - - for (const auto& candidateV0 : candidateV0s) { - lambdaEbyeTable( - collisionEbyeTable.lastIndex(), - candidateV0.pt, - candidateV0.eta, - candidateV0.mass, - candidateV0.dcav0pv, - candidateV0.dcav0daugh, - candidateV0.cpa, - candidateV0.globalIndexNeg, - candidateV0.globalIndexPos); - } - - for (int iP{0}; iP < kNpart; ++iP) { - for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons - nucleiEbyeTable( + if (fillMini) { + miniCollTable(static_cast(collision.posZ() * 10), 0x0, nTrackletsColl, centrality, nTracksColl); + for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) + auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); + fillTableMiniTrack(candidateTrack, tk); + } + } else { + collisionEbyeTable(centrality, collision.posZ()); + for (const auto& candidateV0 : candidateV0s) { + lambdaEbyeTable( collisionEbyeTable.lastIndex(), - candidateTrack.pt, - candidateTrack.eta, - candidateTrack.mass, - candidateTrack.dcapv, - candidateTrack.tpcncls, - candidateTrack.tpcnsigma, - candidateTrack.tofmass); + candidateV0.pt, + candidateV0.eta, + candidateV0.mass, + candidateV0.dcav0pv, + candidateV0.dcav0daugh, + candidateV0.cpa, + candidateV0.globalIndexNeg, + candidateV0.globalIndexPos); + } + for (int iP{0}; iP < kNpart; ++iP) { + for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons + nucleiEbyeTable( + collisionEbyeTable.lastIndex(), + candidateTrack.pt, + candidateTrack.eta, + candidateTrack.mass, + candidateTrack.dcapv, + candidateTrack.tpcncls, + candidateTrack.tpcnsigma, + candidateTrack.tofmass); + } } } } @@ -1062,8 +1066,8 @@ struct EbyeMaker { if (triggerCut != 0x0 && (trigger & triggerCut) != triggerCut) { continue; } - miniCollTable(static_cast(collision.posZ() * 10), trigger, nTrackletsColl, centrality, nTracksColl); + miniCollTable(static_cast(collision.posZ() * 10), trigger, nTrackletsColl, centrality, nTracksColl); for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2); @@ -1095,7 +1099,6 @@ struct EbyeMaker { fillMcGen(mcParticles, mcLab, collision.mcCollisionId()); miniCollTable(static_cast(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl); - for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0); fillTableMiniTrack(candidateTrack, tk); @@ -1126,40 +1129,46 @@ struct EbyeMaker { fillMcEvent(collision, tracks, v0TableThisCollision, centrality, mcParticles, mcLab); fillMcGen(mcParticles, mcLab, collision.mcCollisionId()); - collisionEbyeTable(centrality, collision.posZ()); - - for (const auto& candidateV0 : candidateV0s) { - mcLambdaEbyeTable( - collisionEbyeTable.lastIndex(), - candidateV0.pt, - candidateV0.eta, - candidateV0.mass, - candidateV0.dcav0pv, - candidateV0.dcav0daugh, - candidateV0.cpa, - candidateV0.globalIndexNeg, - candidateV0.globalIndexPos, - candidateV0.genpt, - candidateV0.geneta, - candidateV0.pdgcode, - candidateV0.isreco); - } - - for (int iP{0}; iP < kNpart; ++iP) { - for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons - mcNucleiEbyeTable( + if (fillMini) { + miniCollTable(static_cast(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl); + for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) + auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0); + fillTableMiniTrack(candidateTrack, tk); + } + } else { + collisionEbyeTable(centrality, collision.posZ()); + for (const auto& candidateV0 : candidateV0s) { + mcLambdaEbyeTable( collisionEbyeTable.lastIndex(), - candidateTrack.pt, - candidateTrack.eta, - candidateTrack.mass, - candidateTrack.dcapv, - candidateTrack.tpcncls, - candidateTrack.tpcnsigma, - candidateTrack.tofmass, - candidateTrack.genpt, - candidateTrack.geneta, - candidateTrack.pdgcode, - candidateTrack.isreco); + candidateV0.pt, + candidateV0.eta, + candidateV0.mass, + candidateV0.dcav0pv, + candidateV0.dcav0daugh, + candidateV0.cpa, + candidateV0.globalIndexNeg, + candidateV0.globalIndexPos, + candidateV0.genpt, + candidateV0.geneta, + candidateV0.pdgcode, + candidateV0.isreco); + } + for (int iP{0}; iP < kNpart; ++iP) { + for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons + mcNucleiEbyeTable( + collisionEbyeTable.lastIndex(), + candidateTrack.pt, + candidateTrack.eta, + candidateTrack.mass, + candidateTrack.dcapv, + candidateTrack.tpcncls, + candidateTrack.tpcnsigma, + candidateTrack.tofmass, + candidateTrack.genpt, + candidateTrack.geneta, + candidateTrack.pdgcode, + candidateTrack.isreco); + } } } } @@ -1189,7 +1198,6 @@ struct EbyeMaker { fillMcGen(mcParticles, mcLab, collision.mcCollisionId()); miniCollTable(static_cast(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl); - for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0); auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2); From f5f9394e3499acc365e17211c8ced731c73a0f52 Mon Sep 17 00:00:00 2001 From: Mario Ciacco Date: Wed, 3 Dec 2025 22:49:38 +0100 Subject: [PATCH 4/4] fix variable re-declaration --- PWGLF/TableProducer/Nuspex/ebyeMaker.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx b/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx index 565cfd42193..7525ce0b398 100644 --- a/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx +++ b/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx @@ -434,7 +434,7 @@ struct EbyeMaker { float outerPID = tk.pt() > antipPtTof ? tk.tofNSigmaPr() : -999.f; candidateTrack.itsnsigma = nSigmaITS; candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; - int selMask = getTrackSelMask(candidateTrack); + selMask = getTrackSelMask(candidateTrack); if (candidateTrack.outerPID < outerPIDMin) return; if (isMc && candidateTrack.pdgcodemoth > 0)