From b65ea010d835bea39e4d51bf554a2118c6d83bc2 Mon Sep 17 00:00:00 2001 From: Paul Gessinger-Befurt <paul.gessinger@cern.ch> Date: Thu, 14 Mar 2024 20:01:29 +0100 Subject: [PATCH] Bump ACTS to v33.0.0 Bump ACTS to v33.0.0 --- Projects/Athena/build_externals.sh | 2 +- Tools/WorkflowTestRunner/python/References.py | 2 +- .../python/ActsPriVxFinderConfig.py | 4 +- .../src/SeedingTool.cxx | 2 +- .../ActsPatternRecognition/src/SeedingTool.h | 2 +- .../src/AdaptiveMultiPriVtxFinderTool.cxx | 60 ++++++++++--------- .../src/AdaptiveMultiPriVtxFinderTool.h | 20 +++++-- .../src/IterativePriVtxFinderTool.cxx | 54 ++++++++--------- .../src/IterativePriVtxFinderTool.h | 20 +++++-- 9 files changed, 95 insertions(+), 71 deletions(-) diff --git a/Projects/Athena/build_externals.sh b/Projects/Athena/build_externals.sh index 59e9f6e1450a..188808eeec48 100755 --- a/Projects/Athena/build_externals.sh +++ b/Projects/Athena/build_externals.sh @@ -12,7 +12,7 @@ ATLAS_BUILDTYPE="RelWithDebInfo" ATLAS_EXTRA_CMAKE_ARGS=(-DLCG_VERSION_NUMBER=104 -DLCG_VERSION_POSTFIX="d_ATLAS_9" -DATLAS_GAUDI_SOURCE="URL;https://gitlab.cern.ch/atlas/Gaudi/-/archive/v38r0.000/Gaudi-v38r0.000.tar.gz;URL_MD5;af374562de2c29151881f49b4d8b49cf" - -DATLAS_ACTS_SOURCE="URL;https://github.com/acts-project/acts/archive/refs/tags/v32.0.2.tar.gz;URL_HASH;SHA256=a817a9b6434ae206c36b1c25df6139ffcde95234944d09e718125e14da7996b8" + -DATLAS_ACTS_SOURCE="URL;https://github.com/acts-project/acts/archive/refs/tags/v33.0.0.tar.gz;URL_HASH;SHA256=7fa226e59890d0693311fba3119fd4806458850c8741dc7970d50e0cfabb5889" -DATLAS_GEOMODEL_SOURCE="URL;https://gitlab.cern.ch/GeoModelDev/GeoModel/-/archive/5.3.0/GeoModel-5.3.0.tar.bz2;URL_MD5;69c41f2c12ada4d953b6452454f92a04" -DATLAS_GEOMODEL_PATCH="" -DATLAS_GEOMODEL_FORCEDOWNLOAD_MESSAGE="Forcing_the_re-download_of_GeoModel_(2024.01.27.)") diff --git a/Tools/WorkflowTestRunner/python/References.py b/Tools/WorkflowTestRunner/python/References.py index 3130342127fc..aad80956f5b4 100644 --- a/Tools/WorkflowTestRunner/python/References.py +++ b/Tools/WorkflowTestRunner/python/References.py @@ -24,7 +24,7 @@ references_map = { "d1912": "v1", # Reco "q442": "v45", - "q449": "v69", + "q449": "v70", "q452": "v3", "q454": "v3", # Derivations diff --git a/Tracking/Acts/ActsConfig/python/ActsPriVxFinderConfig.py b/Tracking/Acts/ActsConfig/python/ActsPriVxFinderConfig.py index b76b994c6a96..d0f9e375f3fa 100644 --- a/Tracking/Acts/ActsConfig/python/ActsPriVxFinderConfig.py +++ b/Tracking/Acts/ActsConfig/python/ActsPriVxFinderConfig.py @@ -29,7 +29,7 @@ def ActsGaussAdaptiveMultiFindingCfg(flags, flags.Tracking.PriVertex.useBeamConstraint) kwargs.setdefault("tracksMaxZinterval", flags.Tracking.PriVertex.maxZinterval) - kwargs.setdefault("do3dSplitting", + kwargs.setdefault("doFullSplitting", not flags.Tracking.PriVertex.useBeamConstraint) if flags.GeoModel.Run >= LHCPeriod.Run4: @@ -55,7 +55,7 @@ def TrigActsGaussAdaptiveMultiFindingCfg( kwargs.setdefault("useBeamConstraint", True) kwargs.setdefault("useSeedConstraint", False) kwargs.setdefault("tracksMaxZinterval", flags.Tracking.ActiveConfig.TracksMaxZinterval) - kwargs.setdefault("do3dSplitting", False) + kwargs.setdefault("doFullSplitting", False) kwargs.setdefault("addSingleTrackVertices", flags.Tracking.ActiveConfig.addSingleTrackVertices) acc.setPrivateTools(acc.popToolsAndMerge( diff --git a/Tracking/Acts/ActsPatternRecognition/src/SeedingTool.cxx b/Tracking/Acts/ActsPatternRecognition/src/SeedingTool.cxx index 51c4c60ae77a..32832c8c79cf 100644 --- a/Tracking/Acts/ActsPatternRecognition/src/SeedingTool.cxx +++ b/Tracking/Acts/ActsPatternRecognition/src/SeedingTool.cxx @@ -488,7 +488,7 @@ namespace ActsTrk { m_gridCfg = m_gridCfg.toInternalUnits(); // Seed Finder - m_finder = Acts::SeedFinder< value_type >(m_finderCfg); + m_finder = {m_finderCfg}; return StatusCode::SUCCESS; } diff --git a/Tracking/Acts/ActsPatternRecognition/src/SeedingTool.h b/Tracking/Acts/ActsPatternRecognition/src/SeedingTool.h index f136d023f4cd..17b96c46947d 100644 --- a/Tracking/Acts/ActsPatternRecognition/src/SeedingTool.h +++ b/Tracking/Acts/ActsPatternRecognition/src/SeedingTool.h @@ -79,7 +79,7 @@ namespace ActsTrk { // ********************************************************************* protected: - Acts::SeedFinder< value_type > m_finder; + Acts::SeedFinder< value_type, Acts::CylindricalSpacePointGrid<value_type> > m_finder; Acts::SeedFinderConfig< value_type > m_finderCfg; Acts::CylindricalSpacePointGridConfig m_gridCfg; diff --git a/Tracking/Acts/ActsVertexReconstruction/src/AdaptiveMultiPriVtxFinderTool.cxx b/Tracking/Acts/ActsVertexReconstruction/src/AdaptiveMultiPriVtxFinderTool.cxx index 0c60c8a68d12..39710ab994ad 100644 --- a/Tracking/Acts/ActsVertexReconstruction/src/AdaptiveMultiPriVtxFinderTool.cxx +++ b/Tracking/Acts/ActsVertexReconstruction/src/AdaptiveMultiPriVtxFinderTool.cxx @@ -20,6 +20,8 @@ #include "Acts/Propagator/EigenStepper.hpp" #include "Acts/Propagator/Propagator.hpp" #include "Acts/Utilities/AnnealingUtility.hpp" +#include "Acts/Surfaces/PerigeeSurface.hpp" +#include "Acts/Vertexing/TrackAtVertex.hpp" // STL #include <iostream> @@ -64,24 +66,23 @@ ActsTrk::AdaptiveMultiPriVtxFinderTool::initialize() auto bField = std::make_shared<ATLASMagneticFieldWrapper>(); auto stepper = Acts::EigenStepper<>(bField); - auto propagator = std::make_shared<Propagator>(std::move(stepper), + m_propagator = std::make_shared<Propagator>(std::move(stepper), std::move(navigator)); + // IP Estimator - using IPEstimator = Acts::ImpactPointEstimator<TrackWrapper, Propagator>; - IPEstimator::Config ipEstCfg(bField, propagator); + Acts::ImpactPointEstimator::Config ipEstCfg(bField, m_propagator); ipEstCfg.maxIterations = m_ipEstMaxIterations; ipEstCfg.precision = m_ipEstPrecision; - IPEstimator ipEst(ipEstCfg); + Acts::ImpactPointEstimator ipEst(ipEstCfg); Acts::AnnealingUtility::Config annealingConfig; annealingConfig.setOfTemperatures = m_annealingTemps; annealingConfig.cutOff = m_annealingCutOff; Acts::AnnealingUtility annealingUtility(annealingConfig); - // Create a custom std::function to extract BoundParameters - // from TrackWrapper - std::function<Acts::BoundTrackParameters(TrackWrapper)> extractParameters = - [](const TrackWrapper& params) { return params.parameters(); }; + // Linearizer for Acts::BoundParameters type test + TrackLinearizer::Config ltConfig(bField, m_propagator); + m_linearizer.emplace(ltConfig); // Vertex fitter configuration VertexFitter::Config fitterCfg(ipEst); @@ -91,24 +92,22 @@ ActsTrk::AdaptiveMultiPriVtxFinderTool::initialize() fitterCfg.minWeight = m_minWeightFitter; fitterCfg.maxRelativeShift = m_fitterMaxRelativeShift; fitterCfg.doSmoothing = m_fitterDoSmoothing; - VertexFitter fitter(fitterCfg, extractParameters); - - // Linearizer for Acts::BoundParameters type test - TrackLinearizer::Config ltConfig(bField, propagator); - TrackLinearizer linearizer(ltConfig); + fitterCfg.extractParameters.connect<&TrackWrapper::extractParameters>(); + fitterCfg.trackLinearizer.connect<&TrackLinearizer::linearizeTrack>(&*m_linearizer); + VertexFitter fitter(fitterCfg); // Set up Gaussian track density - Acts::GaussianTrackDensity<TrackWrapper>::Config trackDensityConfig; + Acts::GaussianTrackDensity::Config trackDensityConfig; trackDensityConfig.d0MaxSignificance = m_gaussianMaxD0Significance; trackDensityConfig.z0MaxSignificance = m_gaussianMaxZ0Significance; - Acts::GaussianTrackDensity<TrackWrapper> trackDensity(trackDensityConfig); + trackDensityConfig.extractParameters.connect<&TrackWrapper::extractParameters>(); + Acts::GaussianTrackDensity trackDensity(trackDensityConfig); // Vertex seed finder - VertexSeedFinder::Config seedFinderConfig; - seedFinderConfig.trackDensityEstimator = trackDensity; - VertexSeedFinder seedFinder(seedFinderConfig, extractParameters); + VertexSeedFinder::Config seedFinderConfig{trackDensity}; + auto seedFinder = std::make_shared<VertexSeedFinder>(seedFinderConfig); VertexFinder::Config finderConfig(std::move(fitter), seedFinder, - ipEst, std::move(linearizer), bField); + ipEst, bField); // Vertex finder config finderConfig.tracksMaxZinterval = m_tracksMaxZinterval; @@ -120,12 +119,13 @@ ActsTrk::AdaptiveMultiPriVtxFinderTool::initialize() finderConfig.minWeight = m_minWeight; finderConfig.maxIterations = m_maxIterations; finderConfig.addSingleTrackVertices = m_addSingleTrackVertices; - finderConfig.do3dSplitting = m_do3dSplitting; + finderConfig.doFullSplitting = m_doFullSplitting; finderConfig.maximumVertexContamination = m_maximumVertexContamination; finderConfig.initialVariances = Acts::Vector4::Constant(m_looseConstrValue); finderConfig.useVertexCovForIPEstimation = m_useVertexCovForIPEstimation; finderConfig.useSeedConstraint = m_useSeedConstraint; - m_vertexFinder = std::make_shared<VertexFinder>(std::move(finderConfig), extractParameters); + finderConfig.extractParameters.connect<&TrackWrapper::extractParameters>(); + m_vertexFinder = std::make_shared<VertexFinder>(std::move(finderConfig)); ATH_MSG_INFO("ACTS AMVF tool successfully initialized"); return StatusCode::SUCCESS; @@ -215,7 +215,7 @@ ActsTrk::AdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx}; const Acts::Vector3& beamSpotPos = beamSpotHandle->beamVtx().position(); - Acts::Vertex<TrackWrapper> beamSpotConstraintVtx(beamSpotPos); + Acts::Vertex beamSpotConstraintVtx(beamSpotPos); beamSpotConstraintVtx.setCovariance(beamSpotHandle->beamVtx().covariancePosition()); // Get the magnetic field context @@ -271,14 +271,14 @@ ActsTrk::AdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, allTracks.emplace_back(trk.get(),Acts::BoundTrackParameters(perigeeSurface, actsParams, covMat, Acts::ParticleHypothesis::pion())); } - std::vector<const TrackWrapper*> allTrackPtrs; + std::vector<Acts::InputTrack> allTrackPtrs; allTrackPtrs.reserve(allTracks.size()); for(const auto& trk : allTracks){ - allTrackPtrs.push_back(&trk); + allTrackPtrs.emplace_back(&trk); } - Acts::VertexingOptions<TrackWrapper> vertexingOptions( geoContext, magFieldContext ); + Acts::VertexingOptions vertexingOptions( geoContext, magFieldContext ); if(!m_useBeamConstraint){ beamSpotConstraintVtx.setPosition(Acts::Vector3::Zero()); @@ -291,7 +291,7 @@ ActsTrk::AdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, vertexingOptions.useConstraintInFit = m_useBeamConstraint; vertexingOptions.constraint = beamSpotConstraintVtx; - VertexFinder::State finderState; + auto finderState = m_vertexFinder->makeState(magFieldContext); auto findResult = m_vertexFinder->find(allTrackPtrs, vertexingOptions, finderState); @@ -304,7 +304,7 @@ ActsTrk::AdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, return std::make_pair(theVertexContainer, theVertexAuxContainer); } - std::vector<Acts::Vertex<TrackWrapper>> allVertices = *findResult; + std::vector<Acts::Vertex> allVertices = *findResult; std::vector<VertexAndSignalComp> vtxList; @@ -333,8 +333,10 @@ ActsTrk::AdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, continue; } + const TrackWrapper* originalParams = trk.originalParams.template as<TrackWrapper>(); + Trk::Perigee* fittedPerigee = actsBoundToTrkPerigee(trk.fittedParams, beamSpotPos); - Trk::VxTrackAtVertex trkAtVtx((trk.originalParams)->trackLink()->clone()); + Trk::VxTrackAtVertex trkAtVtx(originalParams->trackLink()->clone()); trkAtVtx.setPerigeeAtVertex(fittedPerigee); trkAtVtx.setTrackQuality(Trk::FitQuality(trk.chi2Track, trk.ndf)); trkAtVtx.setVtxCompatibility(trk.vertexCompatibility); @@ -342,7 +344,7 @@ ActsTrk::AdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, trkAtVtxVec->push_back(trkAtVtx); const Trk::LinkToXAODTrackParticle* linkToXAODTP = - dynamic_cast<const Trk::LinkToXAODTrackParticle*>((trk.originalParams)->trackLink()); + dynamic_cast<const Trk::LinkToXAODTrackParticle*>(originalParams->trackLink()); if (linkToXAODTP) { xAODVtx->addTrackAtVertex(*linkToXAODTP, trk.trackWeight); } diff --git a/Tracking/Acts/ActsVertexReconstruction/src/AdaptiveMultiPriVtxFinderTool.h b/Tracking/Acts/ActsVertexReconstruction/src/AdaptiveMultiPriVtxFinderTool.h index 7057b0bfdfde..2b64bf3b1db8 100644 --- a/Tracking/Acts/ActsVertexReconstruction/src/AdaptiveMultiPriVtxFinderTool.h +++ b/Tracking/Acts/ActsVertexReconstruction/src/AdaptiveMultiPriVtxFinderTool.h @@ -38,6 +38,7 @@ #include "Acts/Vertexing/AdaptiveMultiVertexFitter.hpp" #include "Acts/Vertexing/HelicalTrackLinearizer.hpp" #include "Acts/Vertexing/TrackDensityVertexFinder.hpp" +#include "Acts/Vertexing/TrackAtVertex.hpp" #include "Acts/Vertexing/Vertex.hpp" #include "Acts/Vertexing/ImpactPointEstimator.hpp" @@ -65,6 +66,10 @@ namespace ActsTrk { const Trk::ITrackLink* trackLink() const {return m_trkLink;} + static Acts::BoundTrackParameters extractParameters(const Acts::InputTrack& input) { + return input.template as<TrackWrapper>()->parameters(); + } + private: const Trk::ITrackLink* m_trkLink; Acts::BoundTrackParameters m_boundParams; @@ -104,13 +109,18 @@ namespace ActsTrk { } using Propagator = Acts::Propagator<Acts::EigenStepper<>, Acts::Navigator>; - using TrackLinearizer = Acts::HelicalTrackLinearizer<Propagator>; - using VertexFitter = Acts::AdaptiveMultiVertexFitter<TrackWrapper, TrackLinearizer>; - using VertexSeedFinder = Acts::TrackDensityVertexFinder<VertexFitter, Acts::GaussianTrackDensity<TrackWrapper>>; - using VertexFinder = Acts::AdaptiveMultiVertexFinder<VertexFitter, VertexSeedFinder>; + using TrackLinearizer = Acts::HelicalTrackLinearizer; + using VertexFitter = Acts::AdaptiveMultiVertexFitter; + using VertexSeedFinder = Acts::TrackDensityVertexFinder; + using VertexFinder = Acts::AdaptiveMultiVertexFinder; std::shared_ptr<VertexFinder> m_vertexFinder = nullptr; + std::shared_ptr<Propagator> m_propagator = nullptr; + + // optional because of late initializatio + std::optional<TrackLinearizer> m_linearizer = std::nullopt; + ToolHandle<IActsTrackingGeometryTool> m_trackingGeometryTool{this, "TrackingGeometryTool", "", "ActsTrackingGeometryTool"}; ToolHandle<IActsExtrapolationTool> m_extrapolationTool{this, "ExtrapolationTool", "", "ActsExtrapolationTool"}; ToolHandle<InDet::IInDetTrackSelectionTool> m_trkFilter{this, "TrackSelector", "", "InDetTrackSelectionTool"}; @@ -140,7 +150,7 @@ namespace ActsTrk { DoubleProperty m_minWeight{this, "minWeight", 0.0001, "Min track weight for finder"}; UnsignedIntegerProperty m_maxIterations{this, "maxIterations", 100, "Vertex finder max. iterations"}; BooleanProperty m_addSingleTrackVertices{this, "addSingleTrackVertices", false, "Add single-track vertices"}; - BooleanProperty m_do3dSplitting{this, "do3dSplitting", false, "Do 3d-splitting"}; + BooleanProperty m_doFullSplitting{this, "doFullSplitting", false, "Do full-splitting"}; DoubleProperty m_maximumVertexContamination{this, "maximumVertexContamination", 0.5, "Max. vertex contamination"}; DoubleProperty m_looseConstrValue{this, "looseConstrValue", 1e+8, "Loose constraint value"}; BooleanProperty m_useVertexCovForIPEstimation{this, "useVertexCovForIPEstimation", false, "Use seed vertex cov for IPEstimation"}; diff --git a/Tracking/Acts/ActsVertexReconstruction/src/IterativePriVtxFinderTool.cxx b/Tracking/Acts/ActsVertexReconstruction/src/IterativePriVtxFinderTool.cxx index 41048e8fe99d..396d3f45f8c6 100644 --- a/Tracking/Acts/ActsVertexReconstruction/src/IterativePriVtxFinderTool.cxx +++ b/Tracking/Acts/ActsVertexReconstruction/src/IterativePriVtxFinderTool.cxx @@ -20,6 +20,7 @@ #include "Acts/Propagator/EigenStepper.hpp" #include "Acts/Propagator/Propagator.hpp" #include "Acts/Utilities/AnnealingUtility.hpp" +#include "Acts/Vertexing/TrackAtVertex.hpp" // STL #include <iostream> @@ -64,44 +65,40 @@ ActsTrk::IterativePriVtxFinderTool::initialize() m_bField = std::make_shared<ATLASMagneticFieldWrapper>(); auto stepper = Acts::EigenStepper<>(m_bField); - auto propagator = std::make_shared<Propagator>(std::move(stepper), + m_propagator = std::make_shared<Propagator>(std::move(stepper), std::move(navigator)); // IP Estimator - using IPEstimator = Acts::ImpactPointEstimator<TrackWrapper, Propagator>; - IPEstimator::Config ipEstCfg(m_bField, propagator); + Acts::ImpactPointEstimator::Config ipEstCfg(m_bField, m_propagator); ipEstCfg.maxIterations = m_ipEstMaxIterations; ipEstCfg.precision = m_ipEstPrecision; - IPEstimator ipEst(ipEstCfg); + Acts::ImpactPointEstimator ipEst(ipEstCfg); - // Create a custom std::function to extract BoundParameters - // from TrackWrapper - std::function<Acts::BoundTrackParameters(TrackWrapper)> extractParameters = - [](const TrackWrapper& params) { return params.parameters(); }; + // Linearizer for Acts::BoundParameters type test + TrackLinearizer::Config ltConfig(m_bField, m_propagator); + m_linearizer.emplace(ltConfig); // Full Billoir Vertex fitter setup VertexFitter::Config fitterCfg; fitterCfg.maxIterations = m_fitterMaxIterations; - VertexFitter fitter(fitterCfg, extractParameters); + fitterCfg.extractParameters.connect<&TrackWrapper::extractParameters>(); + fitterCfg.trackLinearizer.connect<&TrackLinearizer::linearizeTrack>(&*m_linearizer); + VertexFitter fitter(fitterCfg); - // Linearizer for Acts::BoundParameters type test - TrackLinearizer::Config ltConfig(m_bField, propagator); - TrackLinearizer linearizer(ltConfig); // Seed finder setup // Set up Gaussian track density - Acts::GaussianTrackDensity<TrackWrapper>::Config trackDensityConfig; + Acts::GaussianTrackDensity::Config trackDensityConfig; trackDensityConfig.d0MaxSignificance = m_gaussianMaxD0Significance; trackDensityConfig.z0MaxSignificance = m_gaussianMaxZ0Significance; - Acts::GaussianTrackDensity<TrackWrapper> trackDensity(trackDensityConfig); + trackDensityConfig.extractParameters.connect<&TrackWrapper::extractParameters>(); + Acts::GaussianTrackDensity trackDensity(trackDensityConfig); // Vertex seed finder - VertexSeedFinder::Config seedFinderConfig; - seedFinderConfig.trackDensityEstimator = trackDensity; - VertexSeedFinder seedFinder(seedFinderConfig, extractParameters); + VertexSeedFinder::Config seedFinderConfig{trackDensity}; + auto seedFinder = std::make_shared<VertexSeedFinder>(seedFinderConfig); // Iterative Vertex Finder setup VertexFinder::Config finderConfig(std::move(fitter), - std::move(linearizer), std::move(seedFinder), ipEst); finderConfig.significanceCutSeeding = m_significanceCutSeeding; @@ -113,7 +110,9 @@ ActsTrk::IterativePriVtxFinderTool::initialize() finderConfig.doMaxTracksCut = m_doMaxTracksCut; finderConfig.maxTracks = m_maxTracks; finderConfig.cutOffTrackWeight = m_cutOffTrackWeight; - m_vertexFinder = std::make_shared<VertexFinder>(std::move(finderConfig), extractParameters); + finderConfig.extractParameters.connect<&TrackWrapper::extractParameters>(); + finderConfig.trackLinearizer.connect<&TrackLinearizer::linearizeTrack>(&*m_linearizer); + m_vertexFinder = std::make_shared<VertexFinder>(std::move(finderConfig)); ATH_MSG_INFO("ACTS Iterative Vertex Finder tool successfully initialized"); return StatusCode::SUCCESS; @@ -227,7 +226,7 @@ ActsTrk::IterativePriVtxFinderTool::findVertex(const EventContext& ctx, } const Acts::Vector3& beamSpotPos = beamSpotHandle->beamVtx().position(); - Acts::Vertex<TrackWrapper> beamSpotConstraintVtx(beamSpotPos); + Acts::Vertex beamSpotConstraintVtx(beamSpotPos); beamSpotConstraintVtx.setCovariance(beamSpotHandle->beamVtx().covariancePosition()); std::shared_ptr<Acts::PerigeeSurface> perigeeSurface = @@ -269,14 +268,14 @@ ActsTrk::IterativePriVtxFinderTool::findVertex(const EventContext& ctx, allTracks.emplace_back(trk.get(),Acts::BoundTrackParameters(perigeeSurface, actsParams, covMat, Acts::ParticleHypothesis::pion())); } - std::vector<const TrackWrapper*> allTrackPtrs; + std::vector<Acts::InputTrack> allTrackPtrs; allTrackPtrs.reserve(allTracks.size()); for(const auto& trk : allTracks){ - allTrackPtrs.push_back(&trk); + allTrackPtrs.emplace_back(&trk); } - Acts::VertexingOptions<TrackWrapper> vertexingOptions(geoContext, + Acts::VertexingOptions vertexingOptions(geoContext, magFieldContext); if(!m_useBeamConstraint){ @@ -300,7 +299,7 @@ for(const auto& trk : allTracks){ vertexingOptions.constraint.setFullPosition(vtxConstraintPos); vertexingOptions.constraint.setFullCovariance(vtxConstraintCov); - VertexFinder::State finderState(*m_bField, magFieldContext); + auto finderState = m_vertexFinder->makeState(magFieldContext); auto findResult = m_vertexFinder->find(allTrackPtrs, vertexingOptions, finderState); @@ -315,7 +314,7 @@ for(const auto& trk : allTracks){ return std::make_pair(theVertexContainer, theVertexAuxContainer); } - std::vector<Acts::Vertex<TrackWrapper>> allVertices = *findResult; + std::vector<Acts::Vertex> allVertices = *findResult; for(const auto& vtx : allVertices){ xAOD::Vertex* xAODVtx = new xAOD::Vertex; @@ -330,9 +329,10 @@ for(const auto& trk : allTracks){ Trk::Perigee* fittedPerigee = actsBoundToTrkPerigee(trk.fittedParams, beamSpotPos); //Trk::Perigee* originalPerigee = actsBoundToTrkPerigee((trk.originalParams)->parameters(), beamSpotPos); + const TrackWrapper* originalParams = trk.originalParams.template as<TrackWrapper>(); //Trk::VxTrackAtVertex trkAtVtx(trk.chi2Track, fittedPerigee, originalPerigee); - Trk::VxTrackAtVertex trkAtVtx((trk.originalParams)->trackLink()->clone()); + Trk::VxTrackAtVertex trkAtVtx(originalParams->trackLink()->clone()); trkAtVtx.setPerigeeAtVertex(fittedPerigee); trkAtVtx.setTrackQuality(Trk::FitQuality(trk.chi2Track, trk.ndf)); trkAtVtx.setVtxCompatibility(trk.vertexCompatibility); @@ -340,7 +340,7 @@ for(const auto& trk : allTracks){ trkAtVtxVec->push_back(trkAtVtx); const Trk::LinkToXAODTrackParticle* linkToXAODTP = - dynamic_cast<const Trk::LinkToXAODTrackParticle*>((trk.originalParams)->trackLink()); + dynamic_cast<const Trk::LinkToXAODTrackParticle*>(originalParams->trackLink()); if (linkToXAODTP) { xAODVtx->addTrackAtVertex(*linkToXAODTP, trk.trackWeight); } diff --git a/Tracking/Acts/ActsVertexReconstruction/src/IterativePriVtxFinderTool.h b/Tracking/Acts/ActsVertexReconstruction/src/IterativePriVtxFinderTool.h index d5dd7821f9ec..5bc96c1c4936 100644 --- a/Tracking/Acts/ActsVertexReconstruction/src/IterativePriVtxFinderTool.h +++ b/Tracking/Acts/ActsVertexReconstruction/src/IterativePriVtxFinderTool.h @@ -39,12 +39,14 @@ #include "Acts/Vertexing/FullBilloirVertexFitter.hpp" #include "Acts/Vertexing/HelicalTrackLinearizer.hpp" #include "Acts/Vertexing/TrackDensityVertexFinder.hpp" +#include "Acts/Vertexing/TrackAtVertex.hpp" #include "Acts/Vertexing/Vertex.hpp" #include "Acts/Vertexing/ImpactPointEstimator.hpp" #include "Acts/Utilities/Logger.hpp" #include <cmath> +#include <optional> namespace Acts { class Surface; @@ -67,6 +69,10 @@ namespace ActsTrk { const Trk::ITrackLink* trackLink() const {return m_trkLink;} + static Acts::BoundTrackParameters extractParameters(const Acts::InputTrack& input) { + return input.template as<TrackWrapper>()->parameters(); + } + private: const Trk::ITrackLink* m_trkLink; Acts::BoundTrackParameters m_boundParams; @@ -106,13 +112,19 @@ namespace ActsTrk { } using Propagator = Acts::Propagator<Acts::EigenStepper<>, Acts::Navigator>; - using TrackLinearizer = Acts::HelicalTrackLinearizer<Propagator>; - using VertexFitter = Acts::FullBilloirVertexFitter<TrackWrapper, TrackLinearizer>; - using VertexSeedFinder = Acts::TrackDensityVertexFinder<VertexFitter, Acts::GaussianTrackDensity<TrackWrapper>>; - using VertexFinder = Acts::IterativeVertexFinder<VertexFitter, VertexSeedFinder>; + using TrackLinearizer = Acts::HelicalTrackLinearizer; + using VertexFitter = Acts::FullBilloirVertexFitter; + using VertexSeedFinder = Acts::TrackDensityVertexFinder; + using VertexFinder = Acts::IterativeVertexFinder; std::shared_ptr<VertexFinder> m_vertexFinder = nullptr; std::shared_ptr<ATLASMagneticFieldWrapper> m_bField = nullptr; + + std::shared_ptr<Propagator> m_propagator = nullptr; + + // optional because of late initializatio + std::optional<TrackLinearizer> m_linearizer = std::nullopt; + ToolHandle<IActsTrackingGeometryTool> m_trackingGeometryTool{this, "TrackingGeometryTool", "", "ActsTrackingGeometryTool"}; ToolHandle<IActsExtrapolationTool> m_extrapolationTool{this, "ExtrapolationTool", "", "ActsExtrapolationTool"}; ToolHandle<InDet::IInDetTrackSelectionTool> m_trkFilter{this, "TrackSelector", "", "InDetTrackSelectionTool"}; -- GitLab