v45.0.0
45.0.0
🚨 BREAKING CHANGES
- Make
BetheHeitlerApproxvirtual (#4826) by @andiwandBetheHeitlerApproxand its subclasses are now abstract with virtual functions, breaking compile-time polymorphism. Template parametersNComponentsandPolyDegreewere removed fromAtlasBetheHeitlerApprox, 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 usingmaxComponents(), and pass them tomixture()instead of receiving return values.
- Remove all deprecated symbols (#4895) by @paulgessinger
- Deprecated APIs removed, including mutator methods on
GeometryIdentifier,Barcode,SimVertexBarcode, andTrackProxy, as well as convenience functions likecreateClusters(),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.
- Deprecated APIs removed, including mutator methods on
- Actors return Result instead of void (#4921) by @benjaminhuth
- Actor
act()methods now returnResult<void>instead ofvoid, enabling immediate error handling and propagation termination - Custom actors must update their
act()signature to returnResult<void>and returnResult<void>::success()orreturn {};on success, or an errorResulton failure
- Actor
- Remove
ISurfaceProviderand (Gen1)KDTTrackingGeometrybuilder &ProtoDetector(#4938) by @asalzburger- Removed classes and interfaces:
ISurfacesProvider,KDTreeTrackingGeometryBuilder,ProtoDetector, andKdtSurfacesProviderhave been deleted as part of deprecating Generation 1 tracking geometry infrastructure. - Use the newer Generation 3 geometry building system. If you were using
KDTreeTrackingGeometryBuilderor implementingISurfacesProvider, switch to the Blueprint-based geometry builder and related Gen3 components.
- Removed classes and interfaces:
- Rework
KalmanFitterlogic (#4694) by @andiwand- KalmanFitter interface changes: The
reversedFilteringoption was renamed toreverseFiltering, andreversedFilteringCovarianceScalingtoreverseFilteringCovarianceScaling. The default value for reverse filtering covariance scaling changed from1.0to100.0. - Track state mask changes: During Kalman filtering, the
Smoothedcomponent is no longer pre-allocated for predicted and filtered track states, breaking code that assumes this mask is present before smoothing. - Update option names (
reversedFiltering→reverseFiltering,reversedFilteringCovarianceScaling→reverseFilteringCovarianceScaling) and adjust the scaling factor if you explicitly set it to1.0(the new default100.0may be more appropriate).
- KalmanFitter interface changes: The
- Replace KF target strategy (#4835) by @andiwand
- Removed
KalmanFitterTargetSurfaceStrategyenum in favor of the more genericTrackExtrapolationStrategy - The
KalmanFitterOptions::referenceSurfaceStrategyfield now usesTrackExtrapolationStrategyinstead ofKalmanFitterTargetSurfaceStrategy - Replace
KalmanFitterTargetSurfaceStrategy::{first,last,firstOrLast}withTrackExtrapolationStrategy::{first,last,firstOrLast}respectively in your code
- Removed
- Reduce fitter templating (#4942) by @andiwand
- KalmanFitter, CombinatorialKalmanFilter, and Gx2Fitter no longer accept templated start parameters—they now require
BoundTrackParametersexplicitly - Replace template parameter
start_parameters_twithBoundTrackParametersin your fitter calls and ensure your starting parameters are of typeBoundTrackParameters
- KalmanFitter, CombinatorialKalmanFilter, and Gx2Fitter no longer accept templated start parameters—they now require
- Type erased track and track state proxies (#4889) by @paulgessinger
- ProxyAccessor now calls
proxy.hasColumn(key)instead ofproxy.container().hasColumn(key): Code usingProxyAccessorBase::hasColumn()will need to ensure proxy types implement ahasColumn()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
- ProxyAccessor now calls
- Rework
TrackStateType(#4945) by @andiwand- Renamed
TrackStateTypemap toTrackStateTypeMapand introduced a newTrackStateTypevalue 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).
- Renamed
- Rename thickness to layerThickness (#5013) by @junggjo9
- The
Layer::thickness()method has been renamed toLayer::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()withlayer->layerThickness()
- The
- Strongly type
MappingType(#5017) by @andiwandMappingTypechanged from unscopedenumto strongly-typedenum class, preventing implicit conversion tointand requiring explicit scopingHomogeneousSurfaceMaterialandBinnedSurfaceMaterialconstructors now require explicitsplitFactorparameter (value1) beforemappingType, as implicit conversion no longer provides the default- Use
MappingType::PreMappinginstead ofPreMapping, add explicitsplitFactorargument (typically1.0) when constructing material objects
- Rework
PointwiseMaterialInteractionpart 1 (#5016) by @andiwandMaterialUpdateStagerenamed toMaterialUpdateMode: The enum was renamed and its numeric values changed (PreUpdate: -1→1, FullUpdate: 0→3, PostUpdate: 1→2), plus a newNoUpdatevalue was added at 0.NoiseUpdateModestrongly typed: Changed from unscopedenumto scopedenum class, breaking code usingaddNoise/removeNoisewithoutNoiseUpdateMode::prefix.- Replace
MaterialUpdateStagewithMaterialUpdateMode, adjust numeric comparisons if any, and prefixNoiseUpdateModevalues withNoiseUpdateMode::(e.g.,addNoise→NoiseUpdateMode::addNoise).
🚀 Features
- Allow diamond bounds for the volume in the builder (#4868) by @dimitra97
- Add NVTX ranges to GNN code (#4527) by @benjaminhuth
- Straw line seeder (#4808) by @patrick-scholer
- Add ProtoAxisHelper (#4871) by @delitez
- Introduce indexed grid navigation policy for Gen3 (#4898) by @asalzburger
- Update GBTS with latest changes from Athena (#4908) by @jpreston-cern
- JSON converter for IndexGrid policy and display script (#4905) by @asalzburger
- Add install‑time git hash patching to ActsConfig.cmake (#4932) by @paulgessinger
- Sliding window alg for hough transform (#4906) by @tboldagh
- Updated authorlist, part 1 (#4917) by @asalzburger
- Add boost::histogram wrappers and ROOT converter (#4939) by @benjaminhuth
- Pip install acts, first steps (#4948) by @benjaminhuth
- Acts::Any gets
.emplacemethod for in-place construction (#4979) by @paulgessinger - Use CylinderNavigationPolicy in Gen3 GenericDetector (#4978) by @paulgessinger
- Ensure acts can still be built with EDM4hep 1.0 (#4976) by @tmadlener
- Teach the Navigator to treat free surfaces (#4494) by @junggjo9
- Support free sensitive surfaces (#5002) by @andiwand
SeedContainer2can point toSpacePointContainer2(#4977) by @andiwand- Wrapper function for tgeo geometry building (#4989) by @osbornjd
- Skip propagation errors in MaterialMappers (#5010) by @veprbl
- Use AnyConstTrackProxy for track constituents of jets (#4969) by @delitez
- Definitely not ATLAS toroidal field (#4765) by @davidedicroce
- Introduce the SurfacePlacementBase interface class (#5005) by @junggjo9
🐛 Bug Fixes
- Figure path after #4875 (#4880) by @AJPfleger
- Pass
ParticleHypothesisto root branch in CKF (#4885) by @andiwand - Re-targeting for
DirectNavigator(#4891) by @andiwand - New component mean implementation for GSF (#4753) by @benjaminhuth
- Import acts.examples before importing json modules (#4919) by @pbutti
- Fpe cmakelist fix typo (#4920) by @pbutti
- Attempt to fix FPE in clang19 build (#4894) by @tstreble-ATLAS
- Move DetectorElementBase pybind11 definition to Core (#4941) by @asalzburger
- BugFix Composite Space-point Line Fitter (#4950) by @lmonaco99
- Update nlohmanjson from 3.10.5 to 3.11.3 (#4961) by @timadye
- Sonar cloud issues and bug in defining upper right corner (#4955) by @tboldagh
- Use (cached) runtime type hash in Acts::Any (#4968) by @paulgessinger
- AnyTrack(State)Proxy from const input proxy (#4966) by @paulgessinger
- Import PodioReader from examples.edm4hep (#4975) by @delitez
- Use forward for universal reference arguments (#4997) by @paulgessinger
- Underflow in duplication evaluation (#5011) by @benjaminhuth
- Adapt Mat_map_surface_plot.C to read sur_type from geometry-map.json (#4931) by @veprbl
- Attach full namespace to PWMI in GX2F (#5026) by @andiwand
🚜 Refactor
- RAII RootBranchPtr class to avoid raw pointers (#4822) by @paulgessinger
- Muon Mockup Detector: use ACTS chamber frame to describe cuboids instead of geoModel local frame (#4896) by @lmonaco99
- Rename ConvexPolygonVolumeBounds to DiamondVolumeBounds (#4878) by @dimitra97
- Extend the track and track state proxy concepts (#4897) by @paulgessinger
- Use templates where possible for compile-time checks and optimizations (#4923) by @abarton5
- Segmentizer.cpp : Use a span instead of copying (#4926) by @abarton5
- Avoid allocations with trivial arrays (#4925) by @abarton5
- StrawLineSeeder - Use forwarding in constructor & minor clean (#4884) by @junggjo9
- Deprecate and replace
MultiTrajectoryTraits(#4915) by @paulgessinger - Rework CMake options for building python (#4946) by @benjaminhuth
- Refactoring of string parsing code for Gbts LUT and connection table (#4934) by @jpreston-cern
- Remove raw pointer from portal shell class (#4933) by @dimitra97
- Holders become public API, are constrained by concept (#4960) by @paulgessinger
- Muon Mockup Detector Builder: refactoring and adding endcaps (#4922) by @lmonaco99
- Rename the surface transform -> localToGlobalTransform (#4958) by @junggjo9
- Split Navigator into
.cppfile (#4971) by @paulgessinger - DetectorElementBase - Introduce isSensitive method && define localToGlobalTransform in the child classes (#4970) by @junggjo9
- Make MuonSpacePointDigitizer similar to DigitizationAlgorithm (#4866) by @AJPfleger
- ActsGeoModelPlugin - Remove geometry context from GeoModelConverters (#4982) by @junggjo9
- GainMatrixUpdater uses AnyMutableTrackState (#4890) by @paulgessinger
- Replace
(void)variable;withstatic_cast<void>(variable);(#4992) by @AJPfleger - Explicit default construction for GeometryContext (#4957) by @paulgessinger
- Minor cleanup of
GainMatrixUpdater(#4825) by @andiwand - Avoid that factorial can return negative values (#4962) by @junggjo9
- Use
std::bit_castinActs::Any(#4994) by @paulgessinger - Relax
KalmanFittererror logs (#4996) by @andiwand - Equip Volume position methods with GeometryContext (#4954) by @junggjo9
- Relax Core error logs for Propagation, Navigation, Fitter, Finder (#5004) by @andiwand
📚 Documentation
- Move sphinx docs to
oldsubfolder (#4875) by @paulgessinger - Minor cmake option name correction (#4928) by @veprbl
- Fully doxygen based documentation (#4918) by @paulgessinger
- Include getting started guide + build examples target (#4988) by @paulgessinger
⚡ Performance
- Use cached inverse transform in Volume::inside(). (#4877) by @scott-snyder
🧪 Testing
- Fix MTJ common tests, add a new check (#4916) by @paulgessinger
🛠️ Build
- (deps) Bump actions/download-artifact from 6 to 7 (#4912) by @dependabot[bot]
- (deps) Bump SonarSource/sonarqube-scan-action from 6.0.0 to 7.0.0 (#4911) by @dependabot[bot]
- (deps) Bump actions/upload-artifact from 5 to 6 (#4913) by @dependabot[bot]
- (deps) Bump actions/cache from 4 to 5 (#4914) by @dependabot[bot]
- Make static builds of Examples, Plugins possible (#4947) by @benjaminhuth
- Add Examples bindings to ActsPythonBindings as dep (#4959) by @paulgessinger
- Improve python handling in cmake (#5000) by @benjaminhuth
⚙️ Miscellaneous Tasks
- Automated python requirements upgrades (#4879) by @github-actions[bot]
- Bump traccc to v0.26.1 (#4876) by @paulgessinger
- Add helper script to bump dependency versions (#4821) by @paulgessinger
- Rename to
IndexGridand cleanup (#4883) by @asalzburger - Simulation with Geant4 for GSF physmon (#4804) by @benjaminhuth
- Clean python notebooks (#4881) by @AJPfleger
- Bump minimum boost version to 1.78.0 (#3517) by @paulgessinger
- Consistent use of
rangeContainsValue(#4321) by @asalzburger - Python bindings for Examples (#4888) by @asalzburger
- Use direct smoother on first iteration, reverse KF on second in Physmon (#4887) by @andiwand
- Remove gcc8 workarounds in track state proxy (#4900) by @AJPfleger
- Remove gcc8 filesystem support (#4899) by @AJPfleger
- Automated python requirements upgrades (#4909) by @github-actions[bot]
- Bump ModuleMapGraph version (#4886) by @benjaminhuth
- Minor changes to the material plotting scripts (#4924) by @pbutti
- Switch CI jobs to ubuntu‑slim and tighten shell script (#4936) by @paulgessinger
- Automated python requirements upgrades (#4927) by @github-actions[bot]
- Cleanup
Examples/Io/Csv(#4944) by @andiwand - Bump dependencies version to 19.0.0 (#4940) by @paulgessinger
- Automated python requirements upgrades (#4949) by @github-actions[bot]
- Docs build PR banner + prepped for version banner (#4943) by @paulgessinger
- Add script to sync CITATION.cff to other files (#4937) by @paulgessinger
- Update
GbtsDataStorageto ACTS coding standard (#4956) by @jpreston-cern - Automated python requirements upgrades (#4984) by @github-actions[bot]
- Cleanup propagator typedefs, helpers and more (#4965) by @andiwand
- Remove unneeded transforms from the Trapezoid / Diamond PortalShell interface (#4995) by @junggjo9
- File headers cleanup (#5006) by @andiwand
- Bump ModuleMapGraph version (#5003) by @benjaminhuth
- Update
GbtsGeometryto ACTS coding standard (#5009) by @jpreston-cern - ActsExamples Move the context to G4 event store (#5007) by @junggjo9
- Install CI dependencies in SonarCloud analysis job (#4999) by @paulgessinger
- Update
GbtsTrackingFilterto ACTS coding standard (#5012) by @jpreston-cern - Try to ignore spack subfolder from sonar (#5019) by @paulgessinger
- Random round of sonar fixes (#5021) by @paulgessinger