 |
ATLAS Offline Software
|
#include <KalmanFitterTool.h>
|
virtual | ~KalmanFitterTool ()=default |
|
virtual StatusCode | initialize () override |
|
virtual std::unique_ptr< Trk::Track > | fit (const EventContext &ctx, const Trk::Track &, const Trk::RunOutlierRemoval runOutlier=false, const Trk::ParticleHypothesis matEffects=Trk::nonInteracting) const override |
| refit a track More...
|
|
virtual std::unique_ptr< Trk::Track > | fit (const EventContext &ctx, const Trk::PrepRawDataSet &, const Trk::TrackParameters &, const Trk::RunOutlierRemoval runOutlier=false, const Trk::ParticleHypothesis matEffects=Trk::nonInteracting) const override |
| fit a set of PrepRawData objects More...
|
|
virtual std::unique_ptr< Trk::Track > | fit (const EventContext &ctx, const Trk::MeasurementSet &, const Trk::TrackParameters &, const Trk::RunOutlierRemoval runOutlier=false, const Trk::ParticleHypothesis matEffects=Trk::nonInteracting) const override |
| fit a set of MeasurementBase objects More...
|
|
virtual std::unique_ptr< Trk::Track > | fit (const EventContext &ctx, const Trk::Track &, const Trk::PrepRawDataSet &, const Trk::RunOutlierRemoval runOutlier=false, const Trk::ParticleHypothesis matEffects=Trk::nonInteracting) const override |
| extend a track fit including a new set of PrepRawData objects More...
|
|
virtual std::unique_ptr< ActsTrk::MutableTrackContainer > | fit (const std::vector< ActsTrk::ATLASUncalibSourceLink > &clusterList, const Acts::BoundTrackParameters &initialParams, const Acts::GeometryContext &tgContext, const Acts::MagneticFieldContext &mfContext, const Acts::CalibrationContext &calContext, const Acts::Surface *targetSurface=nullptr) const override |
| fit a set of xAOD uncalibrated Measurements More...
|
|
virtual std::unique_ptr< Trk::Track > | fit (const EventContext &ctx, const Trk::Track &, const Trk::MeasurementSet &, const Trk::RunOutlierRemoval runOutlier=false, const Trk::ParticleHypothesis matEffects=Trk::nonInteracting) const override |
| extend a track fit including a new set of MeasurementBase objects More...
|
|
virtual std::unique_ptr< Trk::Track > | fit (const EventContext &ctx, const Trk::Track &intrk1, const Trk::Track &intrk2, const Trk::RunOutlierRemoval runOutlier=false, const Trk::ParticleHypothesis matEffects=Trk::nonInteracting) const override |
| combined track fit More...
|
|
virtual std::unique_ptr< ActsTrk::MutableTrackContainer > | fit (const ActsTrk::Seed &seed, const Acts::BoundTrackParameters &initialParams, const Acts::GeometryContext &tgContext, const Acts::MagneticFieldContext &mfContext, const Acts::CalibrationContext &calContext, const Acts::Surface &targetSurface) const override |
| Acts seed fit. More...
|
|
virtual StatusCode | fit (const EventContext &ctx, const ActsTrk::TrackContainer::ConstTrackProxy &track, ActsTrk::MutableTrackContainer &trackContainer, const Acts::PerigeeSurface &pSurface) const override |
|
|
ToolHandle< IActsExtrapolationTool > | m_extrapolationTool {this, "ExtrapolationTool", ""} |
|
PublicToolHandle< ActsTrk::ITrackingGeometryTool > | m_trackingGeometryTool {this, "TrackingGeometryTool", ""} |
|
ToolHandle< ActsTrk::IActsToTrkConverterTool > | m_ATLASConverterTool {this, "ATLASConverterTool", ""} |
|
Gaudi::Property< double > | m_option_outlierChi2Cut |
|
Gaudi::Property< double > | m_option_ReverseFilteringPt |
|
Gaudi::Property< int > | m_option_maxPropagationStep |
|
Gaudi::Property< double > | m_option_seedCovarianceScale |
|
detail::TrkMeasurementCalibrator | m_trkCalibrator {} |
| Calibrator for the Trk::MeasurementBase track states (legacy EDM) More...
|
|
detail::TrkMeasSurfaceAccessor | m_trkSurfAcc {} |
| Accessor to fetch surfaces from the Trk::MeasurementBase track states (legacy EDM) More...
|
|
detail::TrkPrepRawDataCalibrator | m_prdCalibrator {} |
| Calibrator for the Trk::PrepRawData track states (legacy EDM) More...
|
|
detail::TrkPrepRawDataSurfaceAcc | m_prdSurfAcc {} |
| Surface accessor for the Trk::PrepRawData track states (legacy EDM) More...
|
|
detail::xAODUncalibMeasSurfAcc | m_unalibMeasSurfAcc {} |
| Accessor to fetch surfaces from the xAOD::UncalibratedMeasurements (Phase-II EDM) More...
|
|
xAODUnCalibrator_t | m_uncalibMeasCalibrator {} |
|
std::unique_ptr< Fitter > | m_fitter {nullptr} |
|
std::unique_ptr< DirectFitter > | m_directFitter {nullptr} |
|
std::array< FitterExtension_t, s_nExtensions > | m_kfExtensions {} |
|
ActsTrk::detail::FitterHelperFunctions::ATLASOutlierFinder | m_outlierFinder {0} |
|
ActsTrk::detail::FitterHelperFunctions::ReverseFilteringLogic | m_reverseFilteringLogic {0} |
|
std::unique_ptr< const Acts::Logger > | m_logger |
| logging instance More...
|
|
ToolHandle< Trk::IRIO_OnTrackCreator > | m_ROTcreator {this, "RotCreatorTool", ""} |
|
Gaudi::Property< bool > | m_doReFitFromPRD {this, "DoReFitFromPRD", false, "Do Refit From PRD instead of ROT"} |
|
Definition at line 60 of file KalmanFitterTool.h.
◆ DirectFitter
◆ Fitter
◆ FitterExtension_t
◆ FitterOptions_t
◆ xAODUnCalibrator_t
◆ ~KalmanFitterTool()
virtual ActsTrk::KalmanFitterTool::~KalmanFitterTool |
( |
| ) |
|
|
virtualdefault |
◆ configureFit()
Helper method to pack the last information (Calibration, Alignment, B-Field, etc.) for the fit.
The parsed context objects need to prevail the call of the fit
- Parameters
-
tgContext | Reference to the geometry context |
mfContext | Reference to the passed magnetic field context |
calContext | Reference to the calibration context |
surface | Target surface on which the fit result is expressed. |
slType | Switch of which source link type shall be used to access the surfaces from the measurements & for calibration |
Definition at line 136 of file KalmanFitterTool.cxx.
143 const auto& kfExtensions =
m_kfExtensions[
static_cast<int>(slType)];
145 Acts::PropagatorPlainOptions propagationOption(tgContext, mfContext);
149 kfExtensions, propagationOption,
◆ fit() [1/9]
std::unique_ptr< MutableTrackContainer > ActsTrk::KalmanFitterTool::fit |
( |
const ActsTrk::Seed & |
seed, |
|
|
const Acts::BoundTrackParameters & |
initialParams, |
|
|
const Acts::GeometryContext & |
tgContext, |
|
|
const Acts::MagneticFieldContext & |
mfContext, |
|
|
const Acts::CalibrationContext & |
calContext, |
|
|
const Acts::Surface & |
targetSurface |
|
) |
| const |
|
overridevirtual |
Acts seed fit.
Definition at line 528 of file KalmanFitterTool.cxx.
535 std::vector<ATLASUncalibSourceLink> sourceLinks;
536 sourceLinks.reserve(6);
538 const auto& sps =
seed.sp();
540 const auto& measurements = sp->measurements();
542 sourceLinks.emplace_back(umeas);
545 return fit(sourceLinks, initialParams, tgContext, mfContext, calContext, &targetSurface);
◆ fit() [2/9]
virtual StatusCode ActsTrk::KalmanFitterTool::fit |
( |
const EventContext & |
ctx, |
|
|
const ActsTrk::TrackContainer::ConstTrackProxy & |
track, |
|
|
ActsTrk::MutableTrackContainer & |
trackContainer, |
|
|
const Acts::PerigeeSurface & |
pSurface |
|
) |
| const |
|
overridevirtual |
◆ fit() [3/9]
fit a set of MeasurementBase objects
Definition at line 223 of file KalmanFitterTool.cxx.
230 if (inputMeasSet.size() < 2) {
231 ATH_MSG_DEBUG(
"called to refit empty measurement set or a measurement set with too little information, reject fit");
239 const Acts::MagneticFieldContext mfContext =
m_extrapolationTool->getMagneticFieldContext(ctx);
242 Acts::KalmanFitterOptions kfOptions =
configureFit(tgContext, mfContext, calContext, pSurface.get(),
245 std::vector<Acts::SourceLink> trackSourceLinks;
248 if (trackSourceLinks.empty()) {
249 ATH_MSG_DEBUG(
"input contain measurement but no source link created, probable issue with the converter, reject fit ");
253 const auto initialParams =
m_ATLASConverterTool->trkTrackParametersToActsParameters(estimatedStartParameters, tgContext);
258 std::move(multiTrajBackEnd));
261 auto result =
m_fitter->fit(trackSourceLinks.begin(), trackSourceLinks.end(),
262 initialParams, kfOptions, tracks);
◆ fit() [4/9]
fit a set of PrepRawData objects
Definition at line 271 of file KalmanFitterTool.cxx.
282 const Acts::MagneticFieldContext mfContext =
m_extrapolationTool->getMagneticFieldContext(ctx);
285 Acts::KalmanFitterOptions kfOptions =
configureFit(tgContext, mfContext, calContext, pSurface.get(),
288 std::vector<Acts::SourceLink> trackSourceLinks;
291 if (trackSourceLinks.empty()) {
292 ATH_MSG_WARNING(
"input contain measurement but no source link created, probable issue with the converter, reject fit ");
297 const auto initialParams =
m_ATLASConverterTool->trkTrackParametersToActsParameters(estimatedStartParameters, tgContext);
302 std::move(multiTrajBackEnd));
305 auto result =
m_fitter->fit(trackSourceLinks.begin(), trackSourceLinks.end(),
306 initialParams, kfOptions, tracks);
◆ fit() [5/9]
extend a track fit including a new set of MeasurementBase objects
Definition at line 372 of file KalmanFitterTool.cxx.
382 if (addMeasColl.empty()) {
383 ATH_MSG_DEBUG(
"client tries to add an empty MeasurementSet to the track fit." );
384 return fit(ctx,inputTrack);
389 ATH_MSG_DEBUG(
"called to refit empty track or track with too little information, reject fit");
395 ATH_MSG_DEBUG(
"input fails to provide track parameters for seeding the KF, reject fit");
404 const Acts::MagneticFieldContext mfContext =
m_extrapolationTool->getMagneticFieldContext(ctx);
408 Acts::KalmanFitterOptions kfOptions =
configureFit(tgContext, mfContext, calContext, pSurface.get(),
411 std::vector<Acts::SourceLink> trackSourceLinks =
m_ATLASConverterTool->trkTrackToSourceLinks(inputTrack);
415 if (trackSourceLinks.empty()) {
416 ATH_MSG_DEBUG(
"input contain measurement but no source link created, probable issue with the converter, reject fit ");
424 std::move(multiTrajBackEnd));
427 auto result =
m_fitter->fit(trackSourceLinks.begin(), trackSourceLinks.end(),
428 initialParams, kfOptions, tracks);
◆ fit() [6/9]
extend a track fit including a new set of PrepRawData objects
Definition at line 437 of file KalmanFitterTool.cxx.
443 ATH_MSG_DEBUG(
"Fit of Track with additional PrepRawDataSet not yet implemented");
◆ fit() [7/9]
refit a track
Definition at line 155 of file KalmanFitterTool.cxx.
160 ATH_MSG_VERBOSE (
"--> enter KalmanFitter::fit(Track,,) with Track from author = "
165 ATH_MSG_DEBUG(
"called to refit empty track or track with too little information, reject fit");
171 ATH_MSG_DEBUG(
"input fails to provide track parameters for seeding the KF, reject fit");
179 const Acts::MagneticFieldContext mfContext =
m_extrapolationTool->getMagneticFieldContext(ctx);
182 Acts::KalmanFitterOptions kfOptions =
configureFit(tgContext, mfContext, calContext, pSurface.get(),
185 std::vector<Acts::SourceLink> trackSourceLinks =
m_ATLASConverterTool->trkTrackToSourceLinks(inputTrack);
187 if (trackSourceLinks.empty()) {
188 ATH_MSG_DEBUG(
"input contain measurement but no source link created, probable issue with the converter, reject fit ");
196 Acts::BoundSquareMatrix scaledCov = Acts::BoundSquareMatrix::Identity();
197 for (
int i=0;
i<6; ++
i) {
199 (scaledCov)(
i,
i) =
scale * initialParams.covariance().value()(
i,
i);
202 const Acts::BoundTrackParameters scaledInitialParams(initialParams.referenceSurface().getSharedPtr(),
203 initialParams.parameters(),
210 std::move(multiTrajBackEnd));
213 auto result =
m_fitter->fit(trackSourceLinks.begin(), trackSourceLinks.end(),
214 scaledInitialParams, kfOptions, tracks);
◆ fit() [8/9]
combined track fit
Definition at line 450 of file KalmanFitterTool.cxx.
458 <<
" and #2 = " << intrk2.
info().
dumpInfo()<<
", "<<hypothesis);
462 ATH_MSG_DEBUG(
"input #2 is empty try to fit track 1 alone" );
463 return fit(ctx,intrk1);
468 ATH_MSG_DEBUG(
"input #1 is empty try to fit track 2 alone" );
469 return fit(ctx,intrk2);
474 ATH_MSG_DEBUG(
"input #1 fails to provide track parameters for seeding the KF, reject fit");
482 const Acts::MagneticFieldContext mfContext =
m_extrapolationTool->getMagneticFieldContext(ctx);
486 Acts::KalmanFitterOptions kfOptions =
configureFit(tgContext, mfContext, calContext, pSurface.get(),
489 std::vector<Acts::SourceLink> trackSourceLinks =
m_ATLASConverterTool->trkTrackToSourceLinks(intrk1);
490 std::vector<Acts::SourceLink> trackSourceLinks2 =
m_ATLASConverterTool->trkTrackToSourceLinks(intrk2);
491 trackSourceLinks.insert(trackSourceLinks.end(), std::make_move_iterator(trackSourceLinks2.begin()),
492 std::make_move_iterator(trackSourceLinks2.end()));
494 if (trackSourceLinks.empty()) {
495 ATH_MSG_DEBUG(
"input contain measurement but no source link created, probable issue with the converter, reject fit ");
503 Acts::BoundSquareMatrix scaledCov = Acts::BoundSquareMatrix::Identity();
504 for (
int i=0;
i<6; ++
i) {
506 (scaledCov)(
i,
i) =
scale * initialParams.covariance().value()(
i,
i);
509 const Acts::BoundTrackParameters scaledInitialParams(initialParams.referenceSurface().getSharedPtr(),
510 initialParams.parameters(),
517 std::move(multiTrajBackEnd));
520 auto result =
m_fitter->fit(trackSourceLinks.begin(), trackSourceLinks.end(),
521 scaledInitialParams, kfOptions, tracks);
◆ fit() [9/9]
fit a set of xAOD uncalibrated Measurements
Definition at line 315 of file KalmanFitterTool.cxx.
321 ATH_MSG_DEBUG(
"--> entering KalmanFitter::fit(xAODMeasure...things,TP,)");
323 std::vector<Acts::SourceLink> sourceLinks;
324 sourceLinks.reserve(clusterList.size());
326 std::vector<const Acts::Surface*> surfaces;
327 surfaces.reserve(clusterList.size());
331 sourceLinks.emplace_back(
el );
336 std::shared_ptr<Acts::Surface> pSurface{
nullptr};
339 targetSurface = pSurface.get();
344 Acts::KalmanFitterOptions kfOptions =
configureFit(tgContext, mfContext, calContext, targetSurface,
349 std::unique_ptr< MutableTrackContainer > tracks = std::make_unique< MutableTrackContainer >( std::move(trackContainerBackEnd),
350 std::move(multiTrajBackEnd) );
◆ initialize()
StatusCode ActsTrk::KalmanFitterTool::initialize |
( |
| ) |
|
|
overridevirtual |
Configure the fit extensions for Trk::MeasuremenBase pass through fits.
Configure the fit extensions for the Trk::PrepRawData fits
Configure the fit extensions for the uncalibrated measurement fits
Definition at line 58 of file KalmanFitterTool.cxx.
67 auto field = std::make_shared<ATLASMagneticFieldWrapper>();
70 Acts::SympyStepper stepper(
field);
72 logger().cloneWithSuffix(
"Navigator"));
73 Acts::Propagator<Acts::SympyStepper, Acts::Navigator> propagator(stepper,
75 logger().cloneWithSuffix(
"Prop"));
77 m_fitter = std::make_unique<Fitter>(std::move(propagator),
78 logger().cloneWithSuffix(
"KalmanFitter"));
81 Acts::DirectNavigator directNavigator(
logger().cloneWithSuffix(
"DirectNavigator") );
82 Acts::Propagator<Acts::SympyStepper, Acts::DirectNavigator> directPropagator(std::move(stepper),
83 std::move(directNavigator),
84 logger().cloneWithSuffix(
"DirectPropagator"));
86 m_directFitter = std::make_unique<DirectFitter>(std::move(directPropagator),
87 logger().cloneWithSuffix(
"DirectKalmanFitter"));
97 extensionTemplate.updater.connect<&detail::FitterHelperFunctions::gainMatrixUpdate<MutableTrackStateBackend>>();
98 extensionTemplate.smoother.connect<&detail::FitterHelperFunctions::mbfSmoother<MutableTrackStateBackend>>();
100 extensionTemplate.outlierFinder.connect<&detail::FitterHelperFunctions::ATLASOutlierFinder::operator()
102 extensionTemplate.updater.connect<&detail::FitterHelperFunctions::gainMatrixUpdate<MutableTrackStateBackend>>();
109 configureMe = extensionTemplate;
110 configureMe.calibrator.connect<&detail::TrkMeasurementCalibrator::calibrate<MutableTrackStateBackend>>(&
m_trkCalibrator);
111 configureMe.surfaceAccessor.connect<&detail::TrkMeasSurfaceAccessor::operator()>(&
m_trkSurfAcc);
118 configureMe = extensionTemplate;
119 configureMe.calibrator.connect<&detail::TrkPrepRawDataCalibrator::calibrate<MutableTrackStateBackend>>(&
m_prdCalibrator);
120 configureMe.surfaceAccessor.connect<&detail::TrkPrepRawDataSurfaceAcc::operator()>(&
m_prdSurfAcc);
127 configureMe = extensionTemplate;
128 configureMe.surfaceAccessor.connect<&detail::xAODUncalibMeasSurfAcc::operator()>(&
m_unalibMeasSurfAcc);
131 return StatusCode::SUCCESS;
◆ logger()
const Acts::Logger& ActsTrk::KalmanFitterTool::logger |
( |
| ) |
const |
|
inlineprivate |
◆ m_ATLASConverterTool
◆ m_directFitter
std::unique_ptr<DirectFitter> ActsTrk::KalmanFitterTool::m_directFitter {nullptr} |
|
private |
◆ m_doReFitFromPRD
Gaudi::Property<bool> ActsTrk::KalmanFitterTool::m_doReFitFromPRD {this, "DoReFitFromPRD", false, "Do Refit From PRD instead of ROT"} |
|
private |
◆ m_extrapolationTool
ToolHandle<IActsExtrapolationTool> ActsTrk::KalmanFitterTool::m_extrapolationTool {this, "ExtrapolationTool", ""} |
|
private |
◆ m_fitter
std::unique_ptr<Fitter> ActsTrk::KalmanFitterTool::m_fitter {nullptr} |
|
private |
◆ m_kfExtensions
◆ m_logger
std::unique_ptr<const Acts::Logger> ActsTrk::KalmanFitterTool::m_logger |
|
private |
◆ m_option_maxPropagationStep
Gaudi::Property< int > ActsTrk::KalmanFitterTool::m_option_maxPropagationStep |
|
private |
Initial value:{this, "MaxPropagationStep", 5000,
"Maximum number of steps for one propagate call"}
Definition at line 177 of file KalmanFitterTool.h.
◆ m_option_outlierChi2Cut
Gaudi::Property< double > ActsTrk::KalmanFitterTool::m_option_outlierChi2Cut |
|
private |
Initial value:{this, "OutlierChi2Cut", 12.5,
"Chi2 cut used by the outlier finder" }
Definition at line 173 of file KalmanFitterTool.h.
◆ m_option_ReverseFilteringPt
Gaudi::Property< double > ActsTrk::KalmanFitterTool::m_option_ReverseFilteringPt |
|
private |
Initial value:
"Pt cut used for the ReverseFiltering logic"}
Definition at line 175 of file KalmanFitterTool.h.
◆ m_option_seedCovarianceScale
Gaudi::Property< double > ActsTrk::KalmanFitterTool::m_option_seedCovarianceScale |
|
private |
Initial value:{this, "SeedCovarianceScale", 100.,
"Scale factor for the input seed covariance when doing refitting"}
Definition at line 179 of file KalmanFitterTool.h.
◆ m_outlierFinder
◆ m_prdCalibrator
◆ m_prdSurfAcc
◆ m_reverseFilteringLogic
◆ m_ROTcreator
◆ m_trackingGeometryTool
◆ m_trkCalibrator
◆ m_trkSurfAcc
◆ m_unalibMeasSurfAcc
Accessor to fetch surfaces from the xAOD::UncalibratedMeasurements (Phase-II EDM)
Definition at line 191 of file KalmanFitterTool.h.
◆ m_uncalibMeasCalibrator
◆ s_nExtensions
Array of all configured fitter extensions depending on which source link type is in use.
Definition at line 205 of file KalmanFitterTool.h.
The documentation for this class was generated from the following files:
Acts::CalibrationContext getCalibrationContext(const EventContext &ctx)
The Acts::Calibration context is piped through the Acts fitters to (re)calibrate the Acts::SourceLink...
const Acts::Surface * get(const xAOD::UncalibratedMeasurement *meas) const
Operator.
Acts::Navigator Navigator
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
Acts::VectorTrackContainer MutableTrackBackend
@ TrkPrepRawData
Calibrated Trk::MeasurementBase objects.
Acts::TrackContainer< MutableTrackBackend, MutableTrackStateBackend, Acts::detail::ValueHolder > MutableTrackContainer
@ xAODUnCalibMeas
UnCalibrated Trk::PrepRawData objects.
#define ATH_MSG_VERBOSE(x)
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
void calibrate(const Acts::GeometryContext &geoctx, const Acts::CalibrationContext &cctx, const Acts::SourceLink &link, TrackStateProxy state) const
Function that's hooked to the calibration delegate of the implemented Acts fitters.
const xAOD::UncalibratedMeasurement * ATLASUncalibSourceLink
const DataVector< const TrackParameters > * trackParameters() const
Return a pointer to a vector of TrackParameters.
const Perigee * perigeeParameters() const
return Perigee.
@ KalmanFitter
tracks produced by the Kalman Fitter
std::string dumpInfo() const
Returns a string with the name of the fitter of this track (i.e.
Acts::VectorMultiTrajectory MutableTrackStateBackend
static OnTrackCalibrator NoCalibration(const ActsTrk::ITrackingGeometryTool *trackGeoTool)
Constructs a calibrator which copies the local position & covariance of the ITk measurements onto the...
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
#define ATH_MSG_WARNING(x)
double StateChiSquaredPerNumberDoFCut