From cbbb1658cdf7515b8b9f1e8a724a4e3ebf470f54 Mon Sep 17 00:00:00 2001 From: Lucamicheletti93 Date: Wed, 15 Apr 2026 12:03:11 +0200 Subject: [PATCH 1/6] Adding configurable to reduce memory usage for muon track extension --- Common/TableProducer/fwdtrackextension.cxx | 63 +++++++++++++--------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/Common/TableProducer/fwdtrackextension.cxx b/Common/TableProducer/fwdtrackextension.cxx index 5ffdf73bf7a..9b524becc2f 100644 --- a/Common/TableProducer/fwdtrackextension.cxx +++ b/Common/TableProducer/fwdtrackextension.cxx @@ -50,6 +50,7 @@ struct FwdTrackExtension { Configurable geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; Configurable configCcdbUrl{"configCcdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable propInTheAbsorber{"propInTheAbsorber", false, "Propagate muon in the absober: false to minimize standalone muons DCA calculation"}; Configurable refitGlobalMuon{"refitGlobalMuon", false, "Recompute parameters of global muons"}; Service fCCDB; @@ -63,7 +64,7 @@ struct FwdTrackExtension { fCCDB->setCaching(true); fCCDB->setLocalObjectValidityChecking(); - if (!o2::base::GeometryManager::isGeometryLoaded()) { + if (propInTheAbsorber && !o2::base::GeometryManager::isGeometryLoaded()) { LOGF(info, "Load geometry from CCDB"); fCCDB->get(geoPath); } @@ -77,32 +78,44 @@ struct FwdTrackExtension { float dcaY = -999; if (track.has_collision()) { auto const& collision = track.collision(); - auto bc = collision.template bc_as(); - if (fCurrentRun != bc.runNumber()) { - grpmag = fCCDB->getForTimeStamp(grpmagPath, bc.timestamp()); - if (grpmag != nullptr) { - LOGF(info, "Init field from GRP"); - o2::base::Propagator::initFieldFromGRP(grpmag); + if (propInTheAbsorber) { + auto bc = collision.template bc_as(); + if (fCurrentRun != bc.runNumber()) { + grpmag = fCCDB->getForTimeStamp(grpmagPath, bc.timestamp()); + if (grpmag != nullptr) { + LOGF(info, "Init field from GRP"); + o2::base::Propagator::initFieldFromGRP(grpmag); + } + LOGF(info, "Set field for muons"); + o2::mch::TrackExtrap::setField(); + fCurrentRun = bc.runNumber(); } - LOGF(info, "Set field for muons"); - o2::mch::TrackExtrap::setField(); - fCurrentRun = bc.runNumber(); - } - const float zField = grpmag->getNominalL3Field(); - - o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwdShift(track, 0.0); - if (refitGlobalMuon && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) { - auto muontrack = track.template matchMCHTrack_as(); - auto mfttrack = track.template matchMFTTrack_as(); - o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, 0.f, zField); - SMatrix5 tpars(mfttrack.x(), mfttrack.y(), mfttrack.phi(), mfttrack.tgl(), mfttrack.signed1Pt()); - SMatrix55 tcovs{}; - o2::track::TrackParCovFwd mft{mfttrack.z(), tpars, tcovs, mfttrack.chi2()}; - fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); + const float zField = grpmag->getNominalL3Field(); + + o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwdShift(track, 0.0); + if (refitGlobalMuon && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) { + auto muontrack = track.template matchMCHTrack_as(); + auto mfttrack = track.template matchMFTTrack_as(); + o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, 0.f, zField); + SMatrix5 tpars(mfttrack.x(), mfttrack.y(), mfttrack.phi(), mfttrack.tgl(), mfttrack.signed1Pt()); + SMatrix55 tcovs{}; + o2::track::TrackParCovFwd mft{mfttrack.z(), tpars, tcovs, mfttrack.chi2()}; + fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); + } + auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd(fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, 0.f, zField); + dcaX = (proptrack.getX() - collision.posX()); + dcaY = (proptrack.getY() - collision.posY()); + } else { + double chi2 = track.chi2(); + SMatrix5 tpars(track.x(), track.y(), track.phi(), track.tgl(), track.signed1Pt()); + std::vector v1; + SMatrix55 tcovs(v1.begin(), v1.end()); + o2::track::TrackParCovFwd pars1{track.z(), tpars, tcovs, chi2}; + pars1.propagateToZlinear(collision.posZ()); + + dcaX = (pars1.getX() - collision.posX()); + dcaY = (pars1.getY() - collision.posY()); } - auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd(fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, 0.f, zField); - dcaX = (proptrack.getX() - collision.posX()); - dcaY = (proptrack.getY() - collision.posY()); } fwdDCA(dcaX, dcaY); } From fb4ff6e45a391d2ae8c131be78a46efd1b388994 Mon Sep 17 00:00:00 2001 From: Lucamicheletti93 Date: Wed, 15 Apr 2026 17:05:04 +0200 Subject: [PATCH 2/6] Updating task --- Common/TableProducer/fwdtrackextension.cxx | 55 ++++++++++------------ 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/Common/TableProducer/fwdtrackextension.cxx b/Common/TableProducer/fwdtrackextension.cxx index 9b524becc2f..f9bf2ffca5d 100644 --- a/Common/TableProducer/fwdtrackextension.cxx +++ b/Common/TableProducer/fwdtrackextension.cxx @@ -78,43 +78,38 @@ struct FwdTrackExtension { float dcaY = -999; if (track.has_collision()) { auto const& collision = track.collision(); - if (propInTheAbsorber) { - auto bc = collision.template bc_as(); - if (fCurrentRun != bc.runNumber()) { - grpmag = fCCDB->getForTimeStamp(grpmagPath, bc.timestamp()); - if (grpmag != nullptr) { - LOGF(info, "Init field from GRP"); - o2::base::Propagator::initFieldFromGRP(grpmag); - } + auto bc = collision.template bc_as(); + if (fCurrentRun != bc.runNumber()) { + grpmag = fCCDB->getForTimeStamp(grpmagPath, bc.timestamp()); + if (grpmag != nullptr) { + LOGF(info, "Init field from GRP"); + o2::base::Propagator::initFieldFromGRP(grpmag); + } + if (propInTheAbsorber) { LOGF(info, "Set field for muons"); o2::mch::TrackExtrap::setField(); - fCurrentRun = bc.runNumber(); - } - const float zField = grpmag->getNominalL3Field(); - - o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwdShift(track, 0.0); - if (refitGlobalMuon && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) { - auto muontrack = track.template matchMCHTrack_as(); - auto mfttrack = track.template matchMFTTrack_as(); - o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, 0.f, zField); - SMatrix5 tpars(mfttrack.x(), mfttrack.y(), mfttrack.phi(), mfttrack.tgl(), mfttrack.signed1Pt()); - SMatrix55 tcovs{}; - o2::track::TrackParCovFwd mft{mfttrack.z(), tpars, tcovs, mfttrack.chi2()}; - fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); } + fCurrentRun = bc.runNumber(); + } + const float zField = grpmag->getNominalL3Field(); + + o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwdShift(track, 0.0); + if (refitGlobalMuon && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) { + auto muontrack = track.template matchMCHTrack_as(); + auto mfttrack = track.template matchMFTTrack_as(); + o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, 0.f, zField); + SMatrix5 tpars(mfttrack.x(), mfttrack.y(), mfttrack.phi(), mfttrack.tgl(), mfttrack.signed1Pt()); + SMatrix55 tcovs{}; + o2::track::TrackParCovFwd mft{mfttrack.z(), tpars, tcovs, mfttrack.chi2()}; + fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); + } + if (!propInTheAbsorber && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::MCHStandaloneTrack)) { auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd(fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, 0.f, zField); dcaX = (proptrack.getX() - collision.posX()); dcaY = (proptrack.getY() - collision.posY()); } else { - double chi2 = track.chi2(); - SMatrix5 tpars(track.x(), track.y(), track.phi(), track.tgl(), track.signed1Pt()); - std::vector v1; - SMatrix55 tcovs(v1.begin(), v1.end()); - o2::track::TrackParCovFwd pars1{track.z(), tpars, tcovs, chi2}; - pars1.propagateToZlinear(collision.posZ()); - - dcaX = (pars1.getX() - collision.posX()); - dcaY = (pars1.getY() - collision.posY()); + dcaX = track.pDca() / sqrt(2) / track.p(); + dcaY = dcaX; } } fwdDCA(dcaX, dcaY); From 3708f3522879e26eae29a099dd8310def50a7a48 Mon Sep 17 00:00:00 2001 From: Lucamicheletti93 Date: Wed, 15 Apr 2026 23:29:58 +0200 Subject: [PATCH 3/6] Fix calng --- Common/TableProducer/fwdtrackextension.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/TableProducer/fwdtrackextension.cxx b/Common/TableProducer/fwdtrackextension.cxx index f9bf2ffca5d..2dbc82c8c34 100644 --- a/Common/TableProducer/fwdtrackextension.cxx +++ b/Common/TableProducer/fwdtrackextension.cxx @@ -109,7 +109,7 @@ struct FwdTrackExtension { dcaY = (proptrack.getY() - collision.posY()); } else { dcaX = track.pDca() / sqrt(2) / track.p(); - dcaY = dcaX; + dcaY = dcaX; } } fwdDCA(dcaX, dcaY); From 9709660628c8e7919bada1ec8ff55a53ef34306c Mon Sep 17 00:00:00 2001 From: Lucamicheletti93 Date: Thu, 16 Apr 2026 10:10:13 +0200 Subject: [PATCH 4/6] Moving to std::numbers::sqrt2 --- Common/TableProducer/fwdtrackextension.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/TableProducer/fwdtrackextension.cxx b/Common/TableProducer/fwdtrackextension.cxx index 2dbc82c8c34..2594bc22427 100644 --- a/Common/TableProducer/fwdtrackextension.cxx +++ b/Common/TableProducer/fwdtrackextension.cxx @@ -108,7 +108,7 @@ struct FwdTrackExtension { dcaX = (proptrack.getX() - collision.posX()); dcaY = (proptrack.getY() - collision.posY()); } else { - dcaX = track.pDca() / sqrt(2) / track.p(); + dcaX = track.pDca() / std::numbers::sqrt2 / track.p(); dcaY = dcaX; } } From f464cb60132fb8035037af782565b0484b13871e Mon Sep 17 00:00:00 2001 From: Lucamicheletti93 Date: Thu, 16 Apr 2026 10:49:45 +0200 Subject: [PATCH 5/6] Adding missing include --- Common/TableProducer/fwdtrackextension.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/Common/TableProducer/fwdtrackextension.cxx b/Common/TableProducer/fwdtrackextension.cxx index 2594bc22427..88475be866f 100644 --- a/Common/TableProducer/fwdtrackextension.cxx +++ b/Common/TableProducer/fwdtrackextension.cxx @@ -35,6 +35,7 @@ #include #include +#include using namespace o2; using namespace o2::framework; From 1294b601288230eed29cc397b684e696ac3612af Mon Sep 17 00:00:00 2001 From: Lucamicheletti93 Date: Thu, 16 Apr 2026 10:53:03 +0200 Subject: [PATCH 6/6] Fix clang --- Common/TableProducer/fwdtrackextension.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/TableProducer/fwdtrackextension.cxx b/Common/TableProducer/fwdtrackextension.cxx index 88475be866f..1fcede5d26c 100644 --- a/Common/TableProducer/fwdtrackextension.cxx +++ b/Common/TableProducer/fwdtrackextension.cxx @@ -33,9 +33,9 @@ #include #include +#include #include #include -#include using namespace o2; using namespace o2::framework;