@@ -248,6 +248,8 @@ class TrackParametrization
248248#ifndef GPUCA_ALIGPUCODE
249249 std::string asString () const ;
250250 std::string asStringHexadecimal ();
251+ size_t hash () const { return hash (getX (), getAlpha (), getY (), getZ (), getSnp (), getTgl (), getQ2Pt ()); }
252+ static size_t hash (float x, float alp, float y, float z, float snp, float tgl, float q2pt);
251253#endif
252254
253255 GPUd () void updateParam (value_t delta, int i);
@@ -752,6 +754,21 @@ GPUdi() void TrackParametrization<value_T>::updateParams(const value_t* delta)
752754 }
753755}
754756
757+ #ifndef GPUCA_ALIGPUCODE
758+ template <typename value_T>
759+ size_t TrackParametrization<value_T>::hash(float x, float alp, float y, float z, float snp, float tgl, float q2pt)
760+ {
761+ size_t h = std::hash<float >{}(o2::math_utils::detail::truncateFloatFraction (x, 0xFFFFFFF0 ));
762+ h ^= std::hash<float >{}(o2::math_utils::detail::truncateFloatFraction (alp, 0xFFFFFFF0 )) << 1 ;
763+ h ^= std::hash<float >{}(o2::math_utils::detail::truncateFloatFraction (y, 0xFFFFFFF0 )) << 1 ;
764+ h ^= std::hash<float >{}(o2::math_utils::detail::truncateFloatFraction (z, 0xFFFFFFF0 )) << 1 ;
765+ h ^= std::hash<float >{}(o2::math_utils::detail::truncateFloatFraction (snp, 0xFFFFFF00 )) << 1 ;
766+ h ^= std::hash<float >{}(o2::math_utils::detail::truncateFloatFraction (tgl, 0xFFFFFF00 )) << 1 ;
767+ h ^= std::hash<float >{}(o2::math_utils::detail::truncateFloatFraction (q2pt, 0xFFFFFC00 )) << 1 ;
768+ return h;
769+ }
770+ #endif
771+
755772} // namespace track
756773} // namespace o2
757774
0 commit comments