23 return StatusCode::SUCCESS;
26std::unique_ptr<Trk::Track>
34 return reFitImpl(ctx, track, {}, hypothesis, useScaledCov);
36std::unique_ptr<Trk::Track>
43 std::vector<Acts::SourceLink> sourceLinks;
46 bool useScaledCov =
false;
48 return reFitImpl(ctx, track, sourceLinks, hypothesis, useScaledCov);
51std::unique_ptr<Trk::Track>
58 std::vector<Acts::SourceLink> sourceLinks;
61 bool useScaledCov =
false;
63 return reFitImpl(ctx, track, sourceLinks, hypothesis, useScaledCov);
66std::unique_ptr<Trk::Track>
73 std::vector<Acts::SourceLink> sourceLinks;
76 const auto initialParams =
m_geometryConvTool->convertTrackParametersToActs(ctx, params);
78 return fitImpl(ctx, sourceLinks, initialParams);
81std::unique_ptr<Trk::Track>
88 std::vector<Acts::SourceLink> sourceLinks;
91 const auto initialParams =
m_geometryConvTool->convertTrackParametersToActs(ctx, params);
93 return fitImpl(ctx, sourceLinks, initialParams);
96std::unique_ptr<Trk::Track>
102 ATH_MSG_VERBOSE (
"--> enter ActsToTrkFitterWrapTool::fit(Track,Track,)"
108 ATH_MSG_DEBUG(
"input #2 is empty try to fit track 1 alone" );
109 return fit(ctx,track1);
114 ATH_MSG_DEBUG(
"input #1 is empty try to fit track 2 alone" );
115 return fit(ctx,track2);
118 std::vector<Acts::SourceLink> trackSourceLinks2 =
m_ATLASConverterTool->trkTrackToSourceLinks(track2);
122 return reFitImpl(ctx, track1, trackSourceLinks2, hypothesis, useScaledCov);
125std::unique_ptr<Trk::Track>
128 const std::vector<Acts::SourceLink>& measColl,
130 const bool useScaledCov)
const {
131 ATH_MSG_VERBOSE (
"--> enter ActsToTrkFitterWrapTool::reFitImpl(Track,measColl,)"
132 <<
" with Track from author = " << track.info().dumpInfo());
135 if (!track.measurementsOnTrack() || (track.measurementsOnTrack()->size() < 2 && measColl.empty())) {
136 ATH_MSG_DEBUG(
"called to refit empty track or track with too little information, reject fit");
141 if (!track.trackParameters() || track.trackParameters()->empty()) {
142 ATH_MSG_DEBUG(
"input fails to provide track parameters for seeding the fitter, reject fit");
146 std::vector<Acts::SourceLink> trackSourceLinks =
m_ATLASConverterTool->trkTrackToSourceLinks(track);
147 trackSourceLinks.insert(trackSourceLinks.end(), std::make_move_iterator(measColl.begin()),
148 std::make_move_iterator(measColl.end()));
150 auto initialParams =
m_geometryConvTool->convertTrackParametersToActs(ctx, *track.perigeeParameters());
155 initialParams = Acts::BoundTrackParameters(initialParams.referenceSurface().getSharedPtr(),
156 initialParams.parameters(),
160 return fitImpl(ctx, trackSourceLinks, initialParams);
163std::unique_ptr<Trk::Track>
165 const std::vector<Acts::SourceLink>& measColl,
166 const Acts::BoundTrackParameters& params)
const {
167 ATH_MSG_VERBOSE (
"--> enter ActsToTrkFitterWrapTool::fitImpl(measColl,)"
168 <<
" with nMeas = " << measColl.size());
171 if (measColl.size() < 2) {
172 ATH_MSG_DEBUG(
"called to refit empty measurement set or a measurement set with too little information, reject fit");
177 auto pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
180 const Acts::MagneticFieldContext mfContext =
m_extrapolationTool->getMagneticFieldContext(ctx);
183 std::unique_ptr<MutableTrackContainer> outTracks =
184 m_actsFitterTool->fit(measColl, params, tgContext, mfContext, calContext, pSurface.get());
186 if (!outTracks || outTracks->size() == 0 ) {
187 ATH_MSG_DEBUG(
"Acts fitter failed to refit the track, reject fit");
192 for (
auto trkProxy : *outTracks) {
198 std::unique_ptr<Trk::Track> convertedTrack =
201 if (convertedTrack) {
202 return convertedTrack;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
static Acts::SourceLink pack(const Ptr_t &measurement)
Pack the measurement type pointer to an Acts::SourceLink including the intermediate conversion into a...
std::string dumpInfo() const
Returns a string with the name of the fitter of this track (i.e.
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
xAOD::ParticleHypothesis convert(Acts::ParticleHypothesis h)
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Acts::CalibrationContext getCalibrationContext(const EventContext &ctx)
The Acts::Calibration context is piped through the Acts fitters to (re)calibrate the Acts::SourceLink...
Trk::TrackInfo::TrackFitter toTrkFitterType(const xAOD::TrackFitter fType)
Converts xAOD fitter type to Trk fitter type.
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
TrackFitter
Enums to identify who created this track and which properties does it have.
@ Unknown
Track fitter not defined.
static xAOD::TrackFitter fitterType(const consttrackproxy_t &trackProxy)
get fitter type of a track
static bool hasFitterType(const consttrackproxy_t &trackProxy)
test whether a track has a fitter type