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"
62 m_fitter = std::make_unique<CurvedFitter_t>(std::move(propagator),
63 logger().cloneWithSuffix(
"GlobalChiSquareFitter"));
65 Acts::StraightLineStepper stepper{};
70 m_slFitter = std::make_unique<StraightFitter_t>(std::move(propagator),
71 logger().cloneWithSuffix(
"GlobalChiSquareFitter"));
78 extensionTemplate.outlierFinder.connect<&detail::FitterHelperFunctions::ATLASOutlierFinder::operator()
80 extensionTemplate.updater.connect<&detail::FitterHelperFunctions::gainMatrixUpdate<MutableTrackStateBackend>>();
88 configureMe = extensionTemplate;
89 configureMe.calibrator.connect<&detail::TrkMeasurementCalibrator::calibrate<MutableTrackStateBackend>>(&
m_trkMeasCalibrator);
90 configureMe.surfaceAccessor.connect<&detail::TrkMeasSurfaceAccessor::operator()>(&
m_trkMeasSurfAcc);
97 configureMe = extensionTemplate;
98 configureMe.calibrator.connect<&detail::TrkPrepRawDataCalibrator::calibrate<MutableTrackStateBackend>>(&
m_prdCalibrator);
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");
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");
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,)");
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) {
323 targetSurface = pSurface.get();
326 std::vector<Acts::SourceLink> sourceLinks;
327 sourceLinks.reserve(measList.size());
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");
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");
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;