diff --git a/offline/packages/trackreco/PHActsTrkFitter.cc b/offline/packages/trackreco/PHActsTrkFitter.cc index 5a92307b81..d361af240a 100644 --- a/offline/packages/trackreco/PHActsTrkFitter.cc +++ b/offline/packages/trackreco/PHActsTrkFitter.cc @@ -543,17 +543,21 @@ void PHActsTrkFitter::loopTracks(Acts::Logging::Level logLevel) continue; } + // filter sourcelinks to remove detectors that we don't want to include in the fit + sourceLinks = filterSourceLinks( sourceLinks ); + if (sourceLinks.empty()) { continue; } /// If using directed navigation, collect surface list to navigate - SurfacePtrVec surfaces_tmp; SurfacePtrVec surfaces; if (m_fitSiliconMMs || m_directNavigation) { - sourceLinks = getSurfaceVector(sourceLinks, surfaces_tmp); + + // get surfaces matching source links + const auto surfaces_tmp = getSurfaceVector(sourceLinks); // skip if there is no surfaces if (surfaces_tmp.empty()) @@ -960,59 +964,45 @@ ActsTrackFittingAlgorithm::TrackFitterResult PHActsTrkFitter::fitTrack( } //__________________________________________________________________________________ -SourceLinkVec PHActsTrkFitter::getSurfaceVector(const SourceLinkVec& sourceLinks, SurfacePtrVec& surfaces) const +SourceLinkVec PHActsTrkFitter::filterSourceLinks(const SourceLinkVec& sourceLinks ) const { - SourceLinkVec siliconMMSls; - - // if(Verbosity() > 1) - // std::cout << "Sorting " << sourceLinks.size() << " SLs" << std::endl; - + SourceLinkVec filtered; for (const auto& sl : sourceLinks) { const ActsSourceLink asl = sl.get(); - if (Verbosity() > 1) - { - std::cout << "SL available on : " << asl.geometryId() << std::endl; - } - const auto* const surf = m_tGeometry->geometry().tGeometry->findSurface(asl.geometryId()); - if (m_fitSiliconMMs) - { - // skip TPC surfaces - if (m_tGeometry->maps().isTpcSurface(surf)) - { - continue; - } - // also skip micromegas surfaces if not used - if (m_tGeometry->maps().isMicromegasSurface(surf) && !m_useMicromegas) - { - continue; - } - } + // skip TPC surfaces for fitSilicon MMs + if (m_tGeometry->maps().isTpcSurface(surf) && m_fitSiliconMMs) + { continue; } - if (m_forceSiOnlyFit) - { - if (m_tGeometry->maps().isMicromegasSurface(surf) || m_tGeometry->maps().isTpcSurface(surf)) - { - continue; - } - } + // skip micromegas surfaces if not used + if (m_tGeometry->maps().isMicromegasSurface(surf) && !m_useMicromegas) + { continue; } + + // skip everything but silicons if only silicon fit is required + if (m_forceSiOnlyFit && (m_tGeometry->maps().isMicromegasSurface(surf) || m_tGeometry->maps().isTpcSurface(surf)) ) + { continue; } // update vectors - siliconMMSls.push_back(sl); - surfaces.push_back(surf); + filtered.push_back(sl); } - if (Verbosity() > 10) + return filtered; +} + +//__________________________________________________________________________________ +SurfacePtrVec PHActsTrkFitter::getSurfaceVector(const SourceLinkVec& sourceLinks) const +{ + SurfacePtrVec surfaces; + for (const auto& sl : sourceLinks) { - for (const auto& surf : surfaces) - { - std::cout << "Surface vector : " << surf->geometryId() << std::endl; - } + const ActsSourceLink asl = sl.get(); + const auto* const surf = m_tGeometry->geometry().tGeometry->findSurface(asl.geometryId()); + surfaces.push_back(surf); } - return siliconMMSls; + return surfaces; } void PHActsTrkFitter::checkSurfaceVec(SurfacePtrVec& surfaces) const diff --git a/offline/packages/trackreco/PHActsTrkFitter.h b/offline/packages/trackreco/PHActsTrkFitter.h index 09a8ab9d1d..056c3e88b3 100644 --- a/offline/packages/trackreco/PHActsTrkFitter.h +++ b/offline/packages/trackreco/PHActsTrkFitter.h @@ -164,18 +164,20 @@ class PHActsTrkFitter : public SubsysReco /// Helper function to call either the regular navigation or direct /// navigation, depending on m_fitSiliconMMs ActsTrackFittingAlgorithm::TrackFitterResult fitTrack( - const std::vector& sourceLinks, - const ActsTrackFittingAlgorithm::TrackParameters& seed, - const ActsTrackFittingAlgorithm::GeneralFitterOptions& - kfOptions, - const SurfacePtrVec& surfSequence, - const CalibratorAdapter& calibrator, - ActsTrackFittingAlgorithm::TrackContainer& tracks); - - /// Functions to get list of sorted surfaces for direct navigation, if - /// applicable - SourceLinkVec getSurfaceVector(const SourceLinkVec& sourceLinks, - SurfacePtrVec& surfaces) const; + const std::vector& sourceLinks, + const ActsTrackFittingAlgorithm::TrackParameters& seed, + const ActsTrackFittingAlgorithm::GeneralFitterOptions& kfOptions, + const SurfacePtrVec& surfSequence, + const CalibratorAdapter& calibrator, + ActsTrackFittingAlgorithm::TrackContainer& tracks); + + // remove all source links for detectors that we don't want to include in the fit + SourceLinkVec filterSourceLinks(const SourceLinkVec& sourceLinks ) const; + + /// get list of sorted surfaces for direct navigation, if applicable + SurfacePtrVec getSurfaceVector(const SourceLinkVec& sourceLinks) const; + + /// check ordering of the surfaces void checkSurfaceVec(SurfacePtrVec& surfaces) const; bool getTrackFitResult(const FitResult& fitOutput, TrackSeed* seed,