Skip to content

v45.0.0

Choose a tag to compare

@github-actions github-actions released this 29 Jan 18:33

45.0.0

🚨 BREAKING CHANGES

  • Make BetheHeitlerApprox virtual (#4826) by @andiwand
    • BetheHeitlerApprox and its subclasses are now abstract with virtual functions, breaking compile-time polymorphism. Template parameters NComponents and PolyDegree were removed from AtlasBetheHeitlerApprox, requiring dynamic allocation and losing compile-time constant expressions.
    • The mixture() method signature changed from returning a static array/vector to requiring a pre-allocated span as input parameter, fundamentally altering the API contract and object ownership model.
    • Replace template instantiations with polymorphic pointers (e.g., std::unique_ptr<BetheHeitlerApprox>), pre-allocate mixture buffers using maxComponents(), and pass them to mixture() instead of receiving return values.
  • Remove all deprecated symbols (#4895) by @paulgessinger
    • Deprecated APIs removed, including mutator methods on GeometryIdentifier, Barcode, SimVertexBarcode, and TrackProxy, as well as convenience functions like createClusters(), toInternalUnits() methods, and material map type aliases.
    • Replace mutable methods (setVolume(), setBoundary(), etc.) with immutable alternatives (withVolume(), withBoundary(), etc.) that return new instances instead of modifying in place.
  • Actors return Result instead of void (#4921) by @benjaminhuth
    • Actor act() methods now return Result<void> instead of void, enabling immediate error handling and propagation termination
    • Custom actors must update their act() signature to return Result<void> and return Result<void>::success() or return {}; on success, or an error Result on failure
  • Remove ISurfaceProvider and (Gen1) KDTTrackingGeometry builder & ProtoDetector (#4938) by @asalzburger
    • Removed classes and interfaces: ISurfacesProvider, KDTreeTrackingGeometryBuilder, ProtoDetector, and KdtSurfacesProvider have been deleted as part of deprecating Generation 1 tracking geometry infrastructure.
    • Use the newer Generation 3 geometry building system. If you were using KDTreeTrackingGeometryBuilder or implementing ISurfacesProvider, switch to the Blueprint-based geometry builder and related Gen3 components.
  • Rework KalmanFitter logic (#4694) by @andiwand
    • KalmanFitter interface changes: The reversedFiltering option was renamed to reverseFiltering, and reversedFilteringCovarianceScaling to reverseFilteringCovarianceScaling. The default value for reverse filtering covariance scaling changed from 1.0 to 100.0.
    • Track state mask changes: During Kalman filtering, the Smoothed component is no longer pre-allocated for predicted and filtered track states, breaking code that assumes this mask is present before smoothing.
    • Update option names (reversedFilteringreverseFiltering, reversedFilteringCovarianceScalingreverseFilteringCovarianceScaling) and adjust the scaling factor if you explicitly set it to 1.0 (the new default 100.0 may be more appropriate).
  • Replace KF target strategy (#4835) by @andiwand
    • Removed KalmanFitterTargetSurfaceStrategy enum in favor of the more generic TrackExtrapolationStrategy
    • The KalmanFitterOptions::referenceSurfaceStrategy field now uses TrackExtrapolationStrategy instead of KalmanFitterTargetSurfaceStrategy
    • Replace KalmanFitterTargetSurfaceStrategy::{first,last,firstOrLast} with TrackExtrapolationStrategy::{first,last,firstOrLast} respectively in your code
  • Reduce fitter templating (#4942) by @andiwand
    • KalmanFitter, CombinatorialKalmanFilter, and Gx2Fitter no longer accept templated start parameters—they now require BoundTrackParameters explicitly
    • Replace template parameter start_parameters_t with BoundTrackParameters in your fitter calls and ensure your starting parameters are of type BoundTrackParameters
  • Type erased track and track state proxies (#4889) by @paulgessinger
    • ProxyAccessor now calls proxy.hasColumn(key) instead of proxy.container().hasColumn(key): Code using ProxyAccessorBase::hasColumn() will need to ensure proxy types implement a hasColumn() method
    • New concept requirements for track proxies: Track proxy types must now satisfy stricter concepts (TrackProxyLike, ConstTrackProxyConcept, MutableTrackProxyConcept) and provide specific type aliases and methods
  • Rework TrackStateType (#4945) by @andiwand
    • Renamed TrackStateType map to TrackStateTypeMap and introduced a new TrackStateType value type, breaking any code that references the old map type directly.
    • Replaced bitset-style .test() methods on track state flags with dedicated helper methods (e.g., .test(TrackStateFlag::MeasurementFlag).hasMeasurement(), combined measurement checks → .isMeasurement()).
    • Replace .typeFlags().test(TrackStateFlag::XXXFlag) with .typeFlags().hasXXX() or .typeFlags().isXXX() (e.g., .hasOutlier(), .isOutlier(), .isMeasurement() for measurement-and-not-outlier).
  • Rename thickness to layerThickness (#5013) by @junggjo9
    • The Layer::thickness() method has been renamed to Layer::layerThickness() across the ACTS Core geometry API
    • This affects all code calling thickness() on Layer objects (ConeLayer, CylinderLayer, DiscLayer, PlaneLayer)
    • Replace all calls to layer->thickness() with layer->layerThickness()
  • Strongly type MappingType (#5017) by @andiwand
    • MappingType changed from unscoped enum to strongly-typed enum class, preventing implicit conversion to int and requiring explicit scoping
    • HomogeneousSurfaceMaterial and BinnedSurfaceMaterial constructors now require explicit splitFactor parameter (value 1) before mappingType, as implicit conversion no longer provides the default
    • Use MappingType::PreMapping instead of PreMapping, add explicit splitFactor argument (typically 1.0) when constructing material objects
  • Rework PointwiseMaterialInteraction part 1 (#5016) by @andiwand
    • MaterialUpdateStage renamed to MaterialUpdateMode: The enum was renamed and its numeric values changed (PreUpdate: -1→1, FullUpdate: 0→3, PostUpdate: 1→2), plus a new NoUpdate value was added at 0.
    • NoiseUpdateMode strongly typed: Changed from unscoped enum to scoped enum class, breaking code using addNoise/removeNoise without NoiseUpdateMode:: prefix.
    • Replace MaterialUpdateStage with MaterialUpdateMode, adjust numeric comparisons if any, and prefix NoiseUpdateMode values with NoiseUpdateMode:: (e.g., addNoiseNoiseUpdateMode::addNoise).

🚀 Features

🐛 Bug Fixes

🚜 Refactor

📚 Documentation

⚡ Performance

🧪 Testing

🛠️ Build

⚙️ Miscellaneous Tasks