From 481356024736f6c7ea6f26fce9a9a578cbc6bd2d Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 30 Jul 2025 16:29:03 +0200 Subject: [PATCH 1/2] Add hash method to the TrackParam Hash is calculated by combining the precision-truncated (a la AOD) x, alpha + 5 parameters, so the hash depends on the X where it is evaluated. --- .../TrackParametrization.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/DataFormats/Reconstruction/include/ReconstructionDataFormats/TrackParametrization.h b/DataFormats/Reconstruction/include/ReconstructionDataFormats/TrackParametrization.h index f240e34861eeb..9c3079208b2f5 100644 --- a/DataFormats/Reconstruction/include/ReconstructionDataFormats/TrackParametrization.h +++ b/DataFormats/Reconstruction/include/ReconstructionDataFormats/TrackParametrization.h @@ -248,6 +248,8 @@ class TrackParametrization #ifndef GPUCA_ALIGPUCODE std::string asString() const; std::string asStringHexadecimal(); + size_t hash() const { return hash(getX(), getAlpha(), getY(), getZ(), getSnp(), getTgl(), getQ2Pt()); } + static size_t hash(float x, float alp, float y, float z, float snp, float tgl, float q2pt); #endif GPUd() void updateParam(value_t delta, int i); @@ -752,6 +754,21 @@ GPUdi() void TrackParametrization::updateParams(const value_t* delta) } } +#ifndef GPUCA_ALIGPUCODE +template +size_t TrackParametrization::hash(float x, float alp, float y, float z, float snp, float tgl, float q2pt) +{ + size_t h = std::hash{}(o2::math_utils::detail::truncateFloatFraction(x, 0xFFFFFFF0)); + h ^= std::hash{}(o2::math_utils::detail::truncateFloatFraction(alp, 0xFFFFFFF0)) << 1; + h ^= std::hash{}(o2::math_utils::detail::truncateFloatFraction(y, 0xFFFFFFF0)) << 1; + h ^= std::hash{}(o2::math_utils::detail::truncateFloatFraction(z, 0xFFFFFFF0)) << 1; + h ^= std::hash{}(o2::math_utils::detail::truncateFloatFraction(snp, 0xFFFFFF00)) << 1; + h ^= std::hash{}(o2::math_utils::detail::truncateFloatFraction(tgl, 0xFFFFFF00)) << 1; + h ^= std::hash{}(o2::math_utils::detail::truncateFloatFraction(q2pt, 0xFFFFFC00)) << 1; + return h; +} +#endif + } // namespace track } // namespace o2 From 6c0041f835f93d3923697d5690fca414b7fb686b Mon Sep 17 00:00:00 2001 From: shahoian Date: Wed, 30 Jul 2025 16:29:32 +0200 Subject: [PATCH 2/2] Add track hash to TrackStudy output --- .../study/include/GlobalTrackingStudy/TrackInfoExt.h | 4 ++-- Detectors/GlobalTrackingWorkflow/study/src/TrackingStudy.cxx | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Detectors/GlobalTrackingWorkflow/study/include/GlobalTrackingStudy/TrackInfoExt.h b/Detectors/GlobalTrackingWorkflow/study/include/GlobalTrackingStudy/TrackInfoExt.h index 2eed64df3bfca..e33a0def63842 100644 --- a/Detectors/GlobalTrackingWorkflow/study/include/GlobalTrackingStudy/TrackInfoExt.h +++ b/Detectors/GlobalTrackingWorkflow/study/include/GlobalTrackingStudy/TrackInfoExt.h @@ -53,7 +53,7 @@ struct TrackInfoExt { uint8_t padFromEdge = -1; uint8_t rowMaxTPC = 0; uint8_t rowCountTPC = 0; - + size_t hashIU = 0; void setTPCA() { setBit(int(TPCA)); } void setTPCC() { setBit(int(TPCC)); } void setTPCAC() { setBit(int(TPCC)); } @@ -74,7 +74,7 @@ struct TrackInfoExt { void resetBit(int bit) { flags &= ~(kBitMask & (0x1 << bit)); } bool isBitSet(int bit) const { return flags & (kBitMask & (0x1 << bit)); } - ClassDefNV(TrackInfoExt, 7); + ClassDefNV(TrackInfoExt, 8); }; } // namespace dataformats diff --git a/Detectors/GlobalTrackingWorkflow/study/src/TrackingStudy.cxx b/Detectors/GlobalTrackingWorkflow/study/src/TrackingStudy.cxx index 44dbf5f1e1458..d9ea9fe4516e1 100644 --- a/Detectors/GlobalTrackingWorkflow/study/src/TrackingStudy.cxx +++ b/Detectors/GlobalTrackingWorkflow/study/src/TrackingStudy.cxx @@ -479,6 +479,7 @@ void TrackingStudySpec::process(o2::globaltracking::RecoContainer& recoData) auto& trcExt = trcExtVec.emplace_back(); recoData.getTrackTime(vid, trcExt.ttime, trcExt.ttimeE); trcExt.track = trc; + trcExt.hashIU = trc.hash(); trcExt.dca = dca; trcExt.gid = vid; trcExt.xmin = xmin;