20 return StatusCode::SUCCESS;
23std::unique_ptr<Trk::Track>
31 return reFitImpl(ctx, track, {}, hypothesis, useScaledCov);
33std::unique_ptr<Trk::Track>
40 std::vector<Acts::SourceLink> sourceLinks;
43 bool useScaledCov =
false;
45 return reFitImpl(ctx, track, sourceLinks, hypothesis, useScaledCov);
48std::unique_ptr<Trk::Track>
55 std::vector<Acts::SourceLink> sourceLinks;
58 bool useScaledCov =
false;
60 return reFitImpl(ctx, track, sourceLinks, hypothesis, useScaledCov);
63std::unique_ptr<Trk::Track>
70 std::vector<Acts::SourceLink> sourceLinks;
73 const auto initialParams =
m_geometryConvTool->convertTrackParametersToActs(ctx, params);
75 return fitImpl(ctx, sourceLinks, initialParams);
78std::unique_ptr<Trk::Track>
85 std::vector<Acts::SourceLink> sourceLinks;
88 const auto initialParams =
m_geometryConvTool->convertTrackParametersToActs(ctx, params);
90 return fitImpl(ctx, sourceLinks, initialParams);
93std::unique_ptr<Trk::Track>
105 ATH_MSG_DEBUG(
"input #2 is empty try to fit track 1 alone" );
106 return fit(ctx,track1);
111 ATH_MSG_DEBUG(
"input #1 is empty try to fit track 2 alone" );
112 return fit(ctx,track2);
115 std::vector<Acts::SourceLink> trackSourceLinks2 =
m_ATLASConverterTool->trkTrackToSourceLinks(track2);
119 return reFitImpl(ctx, track1, trackSourceLinks2, hypothesis, useScaledCov);
122std::unique_ptr<Trk::Track>
125 const std::vector<Acts::SourceLink>& measColl,
127 const bool useScaledCov)
const {
128 ATH_MSG_VERBOSE (
"--> enter ActsToTrkFitterWrapTool::reFitImpl(Track,measColl,)"
129 <<
" with Track from author = " << track.info().dumpInfo());
132 if (!track.measurementsOnTrack() || (track.measurementsOnTrack()->size() < 2 && measColl.empty())) {
133 ATH_MSG_DEBUG(
"called to refit empty track or track with too little information, reject fit");
138 if (!track.trackParameters() || track.trackParameters()->empty()) {
139 ATH_MSG_DEBUG(
"input fails to provide track parameters for seeding the fitter, reject fit");
143 std::vector<Acts::SourceLink> trackSourceLinks =
m_ATLASConverterTool->trkTrackToSourceLinks(track);
144 trackSourceLinks.insert(trackSourceLinks.end(), std::make_move_iterator(measColl.begin()),
145 std::make_move_iterator(measColl.end()));
147 auto initialParams =
m_geometryConvTool->convertTrackParametersToActs(ctx, *track.perigeeParameters());
152 initialParams = Acts::BoundTrackParameters(initialParams.referenceSurface().getSharedPtr(),
153 initialParams.parameters(),
157 return fitImpl(ctx, trackSourceLinks, initialParams);
160std::unique_ptr<Trk::Track>
162 const std::vector<Acts::SourceLink>& measColl,
163 const Acts::BoundTrackParameters& params)
const {
164 ATH_MSG_VERBOSE (
"--> enter ActsToTrkFitterWrapTool::fitImpl(measColl,)"
165 <<
" with nMeas = " << measColl.size());
168 if (measColl.size() < 2) {
169 ATH_MSG_DEBUG(
"called to refit empty measurement set or a measurement set with too little information, reject fit");
174 auto pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
176 const Acts::GeometryContext tgContext{
m_ctxProvider.getGeometryContext(ctx)};
177 const Acts::MagneticFieldContext mfContext{
m_ctxProvider.getMagneticFieldContext(ctx)};
178 const Acts::CalibrationContext calContext{
m_ctxProvider.getCalibrationContext(ctx)};
180 std::unique_ptr<MutableTrackContainer> outTracks =
181 m_actsFitterTool->fit(measColl, params, tgContext, mfContext, calContext, pSurface.get());
183 if (!outTracks || outTracks->size() == 0 ) {
184 ATH_MSG_DEBUG(
"Acts fitter failed to refit the track, reject fit");
189 for (
auto trkProxy : *outTracks) {
195 std::unique_ptr<Trk::Track> convertedTrack =
198 if (convertedTrack) {
199 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...
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