8#include "Acts/EventData/Types.hpp"
17#include "Acts/Definitions/TrackParametrization.hpp"
18#include "Acts/Definitions/Units.hpp"
19#include "Acts/EventData/Types.hpp"
20#include "Acts/EventData/VectorTrackContainer.hpp"
21#include "Acts/Propagator/Navigator.hpp"
22#include "Acts/Propagator/Propagator.hpp"
23#include "Acts/Propagator/SympyStepper.hpp"
24#include "Acts/Surfaces/PerigeeSurface.hpp"
25#include "Acts/Surfaces/Surface.hpp"
26#include "Acts/TrackFitting/GlobalChiSquareFitter.hpp"
27#include "Acts/Utilities/CalibrationContext.hpp"
28#include "Acts/Utilities/Helpers.hpp"
29#include "Acts/Utilities/Logger.hpp"
57 CurvedPropagator_t::Stepper stepper{std::make_shared<ATLASMagneticFieldWrapper>()};
59 Acts::Navigator navigator(std::move(navConfig),
logger().cloneWithSuffix(
"Navigator"));
62 m_fitter = std::make_unique<CurvedFitter_t>(std::move(propagator),
63 logger().cloneWithSuffix(
"GlobalChiSquareFitter"));
65 Acts::StraightLineStepper stepper{};
67 Acts::Navigator navigator(std::move(navConfig),
logger().cloneWithSuffix(
"Navigator"));
70 m_slFitter = std::make_unique<StraightFitter_t>(std::move(propagator),
71 logger().cloneWithSuffix(
"GlobalChiSquareFitter"));
78 extensionTemplate.outlierFinder.connect<&detail::FitterHelperFunctions::ATLASOutlierFinder::operator()
88 configureMe = extensionTemplate;
90 configureMe.surfaceAccessor.connect<&detail::TrkMeasSurfaceAccessor::operator()>(&
m_trkMeasSurfAcc);
97 configureMe = extensionTemplate;
99 configureMe.surfaceAccessor.connect<&detail::TrkPrepRawDataSurfaceAcc::operator()>(&
m_prdSurfaceAcc);
105 configureMe = extensionTemplate;
106 configureMe.surfaceAccessor.connect<&detail::xAODUncalibMeasSurfAcc::operator()>(&
m_unalibMeasSurfAcc);
117 return StatusCode::SUCCESS;
121 const Acts::BoundTrackParameters& initialPars,
125 m_fitter->fit(soureLinks.begin(), soureLinks.end(), initialPars, gx2fOptions, tracks) :
126 m_slFitter->fit(soureLinks.begin(), soureLinks.end(), initialPars, gx2fOptions, tracks);
131 const Acts::MagneticFieldContext& mfContext,
132 const Acts::CalibrationContext& calContext,
133 const Acts::Surface* surface,
135 Acts::PropagatorPlainOptions propagationOption{tgContext, mfContext};
141 std::move(propagationOption),
151 const EventContext& ctx,
const Trk::Track& inputTrack,
155 ATH_MSG_VERBOSE(
"--> enter GlobalChiSquareFitterTool::fit(Track,,) with Track from author = "
160 ATH_MSG_DEBUG(
"called to refit empty track or track with too little information, reject fit");
166 ATH_MSG_DEBUG(
"input fails to provide track parameters for seeding the GX2F, reject fit");
171 auto pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
173 std::vector<Acts::SourceLink> trackSourceLinks =
m_ATLASConverterTool->trkTrackToSourceLinks(inputTrack);
176 if (trackSourceLinks.empty()) {
177 ATH_MSG_DEBUG(
"input contain measurement but no source link created, probable issue "
178 <<
"with the converter, reject fit ");
183 const Acts::MagneticFieldContext mfContext{
m_extrapolationTool->getMagneticFieldContext(ctx)};
188 const Acts::BoundTrackParameters initialParamsWithHypothesis(
189 initialParams.referenceSurface().getSharedPtr(),
190 initialParams.parameters(), initialParams.covariance(),
199 std::move(multiTrajBackEnd));
201 auto result =
fit(trackSourceLinks, initialParamsWithHypothesis, gx2fOptions, tracks);
217 if (inputMeasSet.size() < 2) {
218 ATH_MSG_DEBUG(
"Called to refit empty measurement set or a measurement set with too "
219 <<
"little information, reject fit");
224 auto pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
227 const Acts::MagneticFieldContext mfContext{
m_extrapolationTool->getMagneticFieldContext(ctx)};
232 std::vector<Acts::SourceLink> trackSourceLinks;
236 if (trackSourceLinks.empty()) {
237 ATH_MSG_DEBUG(
"input contain measurement but no source link created, probable issue "
238 <<
"with the converter, reject fit ");
242 const auto initialParams =
m_ATLASConverterTool->trkTrackParametersToActsParameters(estimatedStartParameters, tgContext);
247 std::move(multiTrajBackEnd));
252 auto result =
fit(trackSourceLinks, initialParams, gx2fOptions, tracks);
266 ATH_MSG_DEBUG(
"--> entering GlobalChiSquareFitterTool::fit(PRDS,TP,)");
269 auto pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
272 const Acts::MagneticFieldContext mfContext =
m_extrapolationTool->getMagneticFieldContext(ctx);
275 std::vector<Acts::SourceLink> trackSourceLinks;
280 if (trackSourceLinks.empty()) {
281 ATH_MSG_WARNING(
"input contain measurement but no source link created, probable issue "
282 "with the converter, reject fit ");
286 const auto initialParams =
m_ATLASConverterTool->trkTrackParametersToActsParameters(estimatedStartParameters, tgContext);
296 std::move(multiTrajBackEnd));
298 auto result =
fit(trackSourceLinks, initialParams, gx2fOptions, tracks);
308 const std::vector<ATLASUncalibSourceLink>& measList,
309 const Acts::BoundTrackParameters& initialParams,
310 const Acts::GeometryContext& tgContext,
311 const Acts::MagneticFieldContext& mfContext,
312 const Acts::CalibrationContext& calContext,
313 const Acts::Surface* targetSurface)
const {
315 if (measList.empty()) {
320 std::shared_ptr<Acts::Surface> pSurface{};
321 if (!targetSurface) {
322 pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
323 targetSurface = pSurface.get();
326 std::vector<Acts::SourceLink> sourceLinks;
327 sourceLinks.reserve(measList.size());
328 std::ranges::transform(measList, std::back_inserter(sourceLinks),
339 auto tracks = std::make_unique<MutableTrackContainer>( std::move(trackContainerBackEnd),
340 std::move(multiTrajBackEnd) );
342 auto result =
fit(sourceLinks, initialParams, gx2fOptions, *tracks);
355 const EventContext& ctx,
const Trk::Track& inputTrack,
359 ATH_MSG_VERBOSE(
"--> enter GlobalChiSquareFitterTool::fit(Track,Meas'BaseSet,,)");
363 if (addMeasColl.empty()) {
364 ATH_MSG_DEBUG(
"client tries to add an empty MeasurementSet to the track fit.");
365 return fit(ctx, inputTrack);
370 ATH_MSG_DEBUG(
"Called to refit empty track or track with too little information, reject fit");
376 ATH_MSG_DEBUG(
"input fails to provide track parameters for seeding the GX2F, reject fit");
381 auto pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
384 const Acts::MagneticFieldContext mfContext{
m_extrapolationTool->getMagneticFieldContext(ctx)};
387 std::vector<Acts::SourceLink> trackSourceLinks =
m_ATLASConverterTool->trkTrackToSourceLinks(inputTrack);
391 if (trackSourceLinks.empty()) {
392 ATH_MSG_DEBUG(
"input contain measurement but no source link created, probable issue "
393 <<
"with the converter, reject fit ");
402 std::move(multiTrajBackEnd));
407 auto result =
fit(trackSourceLinks, initialParams, gx2fOptions, tracks);
421 "Fit of Track with additional PrepRawDataSet not yet implemented");
431 ATH_MSG_VERBOSE(
"--> enter GlobalChiSquareFitterTool::fit(Track,Track,)");
439 return fit(ctx, intrk1);
445 return fit(ctx, intrk2);
450 ATH_MSG_DEBUG(
"input #1 fails to provide track parameters for seeding the GX2F, reject fit");
455 auto pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
458 const Acts::MagneticFieldContext mfContext{
m_extrapolationTool->getMagneticFieldContext(ctx)};
461 std::vector<Acts::SourceLink> trackSourceLinks =
m_ATLASConverterTool->trkTrackToSourceLinks(intrk1);
462 std::vector<Acts::SourceLink> trackSourceLinks2 =
m_ATLASConverterTool->trkTrackToSourceLinks(intrk2);
463 trackSourceLinks.insert(trackSourceLinks.end(), std::make_move_iterator(trackSourceLinks2.begin()),
464 std::make_move_iterator(trackSourceLinks2.end()));
467 if (trackSourceLinks.empty()) {
468 ATH_MSG_DEBUG(
"input contain measurement but no source link created, probable issue "
469 <<
"with the converter, reject fit ");
476 const Acts::BoundTrackParameters initialParamsWithHypothesis(
477 initialParams.referenceSurface().getSharedPtr(),
478 initialParams.parameters(), initialParams.covariance(),
484 std::move(multiTrajBackEnd));
489 auto result =
fit(trackSourceLinks, initialParamsWithHypothesis, gx2fOptions, tracks);
498 const Acts::BoundTrackParameters& initialParams,
499 const Acts::GeometryContext& tgContext,
500 const Acts::MagneticFieldContext& mfContext,
501 const Acts::CalibrationContext& calContext,
502 const Acts::Surface& targetSurface)
const {
504 std::vector<ATLASUncalibSourceLink> sourceLinks;
505 sourceLinks.reserve(6);
508 sourceLinks.insert(sourceLinks.end(),
sp->measurements().begin(),
sp->measurements().end());
510 return fit(sourceLinks, initialParams, tgContext, mfContext, calContext, &targetSurface);
515 const EventContext& ,
516 const TrackContainer::ConstTrackProxy& ,
518 const Acts::PerigeeSurface& )
const
520 ATH_MSG_ERROR(
"Track refit method not implemented in GlobalChiSquareFitterTool yet");
521 return StatusCode::FAILURE;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
Helper class to access the Acts::Surface for a given Acts::SourceLink which is poiniting to a Trk::Me...
Calibrator class that links the legacy Trk::MeasurementBase objects with the Acts MultiTrajectory tra...
void calibrate(const Acts::GeometryContext &gctx, const Acts::CalibrationContext &cctx, const Acts::SourceLink &sl, TrackState_t< trajectory_t > trackState) const
Calibrator delegate implementation to calibrate the ActsTrk fit from Trk::MeasurementBase objects.
Class to calibrate the Acts track states with uncalibrated Trk::PrepRaw data objects.
void calibrate(const Acts::GeometryContext &gctx, const Acts::CalibrationContext &cctx, const Acts::SourceLink &sl, TrackState_t< trajectory_t > trackState) const
Calibrator delegate implementation to calibrate the ActsTrk fit from Trk::PrepRawData objects.
Helper class to access the Acts::surface associated with a Trk::PrepRawData measurement.
void calibrate(const Acts::GeometryContext &gctx, const Acts::CalibrationContext &cctx, const Acts::SourceLink &sl, const MutableTrackStateBackend::TrackStateProxy trackState) const
: Interface method for the Acts fitter to calibrate the trajectory track states from the source link ...
static Acts::SourceLink pack(const xAOD::UncalibratedMeasurement *meas)
Helper method to pack an uncalibrated measurement to an Acts source link.
Helper class to access the Acts::surface associated with an Uncalibrated xAOD measurement.
virtual void calibrateSourceLink(const Acts::GeometryContext &geoctx, const Acts::CalibrationContext &cctx, const Acts::SourceLink &link, ActsTrk::MutableTrackStateBackend::TrackStateProxy state) const =0
Function that's hooked to the calibration delegate of the implemented Acts fitters.
std::string dumpInfo() const
Returns a string with the name of the fitter of this track (i.e.
@ GlobalChi2Fitter
Track's from Thijs' global chi^2 fitter.
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
const DataVector< const TrackParameters > * trackParameters() const
Return a pointer to a vector of TrackParameters.
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
const Perigee * perigeeParameters() const
return Perigee.
xAOD::ParticleHypothesis convert(Acts::ParticleHypothesis h)
Acts::Result< void > gainMatrixUpdate(const Acts::GeometryContext &gctx, typename trajectory_t::TrackStateProxy trackState, const Acts::Logger &logger)
SourceLinkType
Enumeration to distinguish between the ATLAS EDM -> Acts::SourceLink variants.
@ xAODUnCalibMeas
UnCalibrated Trk::PrepRawData objects.
@ TrkPrepRawData
Calibrated Trk::MeasurementBase objects.
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Acts::VectorMultiTrajectory MutableTrackStateBackend
Acts::TrackContainer< MutableTrackBackend, MutableTrackStateBackend, Acts::detail::ValueHolder > MutableTrackContainer
Acts::CalibrationContext getCalibrationContext(const EventContext &ctx)
The Acts::Calibration context is piped through the Acts fitters to (re)calibrate the Acts::SourceLink...
Acts::VectorTrackContainer MutableTrackBackend
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
bool RunOutlierRemoval
switch to toggle quality processing after fit
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters
std::vector< const PrepRawData * > PrepRawDataSet
vector of clusters and drift circles
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.