47 ATH_CHECK(muonCandidates.
record(std::make_unique<MuonCandidateCollection>()));
54 unsigned int ntracks = 0;
59 std::vector<track_link> trackLinks;
61 unsigned int index = -1;
66 if (!track->track()) {
76 std::unique_ptr<Trk::Track> standaloneTrack;
78 standaloneTrack =
m_trackBuilder->standaloneFit(ctx, msTrack, beamSpot->beamPos(),
nullptr);
83 if (standaloneTrack) {
85 if (standaloneTrack->fitQuality()->doubleNumberDoF() == 0) {
86 standaloneTrack.reset();
93 if (standaloneTrack->fitQuality()->chiSquared() / standaloneTrack->fitQuality()->doubleNumberDoF() > 1000 * mschi2) {
94 standaloneTrack.reset();
95 ATH_MSG_DEBUG(
"extrapolated track has a degraded fit, don't use it");
99 if (standaloneTrack) {
100 standaloneTrack->info().setParticleHypothesis(
Trk::muon);
103 <<
m_printer->print(*standaloneTrack) << std::endl
104 <<
m_printer->printStations(*standaloneTrack));
106 if (!standaloneTrack->perigeeParameters()) {
108 }
else if (!standaloneTrack->perigeeParameters()->covariance()) {
109 ATH_MSG_WARNING(
" Track with perigee without covariance " << (*standaloneTrack));
111 trackLinks.emplace_back(std::move(standaloneTrack),
index,
true);
116 bool skipTrack =
true;
118 std::unique_ptr<Trk::TrackSummary> msTrackSummary;
122 msMuonTrackSummary = msTrackSummary->muonTrackSummary();
128 if ((chs.isMdt() &&
m_idHelperSvc->stationIndex(chs.chamberId()) != StIndex::EM) ||
135 trackLinks.emplace_back(std::make_unique<Trk::Track>(msTrack),
index,
false);
141 extrapTracks->reserve(trackLinks.size());
142 for (
const track_link& link : trackLinks) {
143 extrapTracks->push_back(link.track.get());
145 ATH_MSG_DEBUG(
"Finished back-tracking, total number of successfull fits " << ntracks);
150 ATH_MSG_DEBUG(
"Finished ambiguity solving: " << extrapTracks->size() <<
" track(s) in -> " << resolvedTracks->size()
157 for (
const Trk::Track* track : *resolvedTracks) {
158 std::vector<track_link>::iterator tLink = std::ranges::find_if(trackLinks,
159 [&track](
const track_link& link) {
160 return link.track.get() == track;
163 if (tLink == trackLinks.end()) {
164 ATH_MSG_WARNING(
"Unable to find internal link between MS and SA tracks!");
168 std::unique_ptr<MuonCombined::MuonCandidate> muon_candidate{};
170 if (tLink->extp_succeed) {
171 msOnlyTracks->push_back(std::move(tLink->track));
173 muon_candidate = std::make_unique<MuonCombined::MuonCandidate>(MS_TrkLink, saLink,
174 msOnlyTracks->size() - 1);
178 muon_candidate = std::make_unique<MuonCombined::MuonCandidate>(MS_TrkLink);
182 std::vector<const Muon::MuonSegment*> assoc_segs;
184 muon_candidate->setSegments(std::move(assoc_segs));
186 muonCandidates->push_back(std::move(muon_candidate));
188 return StatusCode::SUCCESS;