diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonHoleRecoveryTool.h b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonHoleRecoveryTool.h index b2b50be486d9e6cd030ebffa214660f3392854be..6c4f3b5c7a55d93ff8305048c01cc85860a37543 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonHoleRecoveryTool.h +++ b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonHoleRecoveryTool.h @@ -29,6 +29,9 @@ namespace Muon { @return a pointer to a track, the ownership of the output track is passed to the client calling the tool. */ virtual Trk::Track* recover( const Trk::Track& track ) const = 0; + + virtual void cleanUp() const {}; + }; inline const InterfaceID& IMuonHoleRecoveryTool::interfaceID() diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonTrackBuilder.h b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonTrackBuilder.h index 59ac1cd14fa1ac96a9ec2681eaddb98b57443156..e3f2d54b50b04693de73d2b3ccaa0942fd2573c3 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonTrackBuilder.h +++ b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonTrackBuilder.h @@ -45,6 +45,8 @@ namespace Muon { */ virtual std::vector<std::unique_ptr<MuPatTrack> > find( MuPatCandidateBase& candidate, const std::vector<MuPatSegment*>& segments ) const = 0; + + virtual void cleanUp() const {}; }; inline const InterfaceID& IMuonTrackBuilder::interfaceID() diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonTrackSegmentMatchingTool.h b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonTrackSegmentMatchingTool.h index 990d3c11ff4ac96be070f11236d339e8f5228b38..81fd9e986b2347a490bc85396f0ae65ce8b42d8f 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonTrackSegmentMatchingTool.h +++ b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonTrackSegmentMatchingTool.h @@ -32,6 +32,7 @@ namespace Muon { The caller should ensure the track gets deleted. */ virtual bool match( const Trk::Track& track, const MuonSegment& segment, bool useTightCuts = false ) const = 0; + void cleanUp() const {}; }; inline const InterfaceID& IMuonTrackSegmentMatchingTool::interfaceID() diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonSegmentRegionRecoveryTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonSegmentRegionRecoveryTool.cxx index 532adb28c0fe30ab98ebc009f86a04c8c9843fe7..fe9fe6e66d966f65a9d566c9c1fba152f5f36a6d 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonSegmentRegionRecoveryTool.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonSegmentRegionRecoveryTool.cxx @@ -1146,5 +1146,9 @@ const Trk::TrackParameters* MuonSegmentRegionRecoveryTool::reachableDetEl( const } + void MuonSegmentRegionRecoveryTool::cleanUp() const { + m_trackSegmentMatchingTool->cleanUp(); + } + } diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonSegmentRegionRecoveryTool.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonSegmentRegionRecoveryTool.h index 8f279cd1715ba89609ef5ef731b9018cfc921cb6..86a15e3847a049aa047113d573b93a6f187aa3b5 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonSegmentRegionRecoveryTool.h +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonSegmentRegionRecoveryTool.h @@ -121,7 +121,8 @@ namespace Muon { /** @brief returns a new track with segments recovered using RegionSelector*/ Trk::Track* recover( const Trk::Track& track ) const; - + void cleanUp() const; + private: /** @brief returns a new track with segments recovered using RegionSelector, actual implementation*/ diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx index 9d601f878366dfe14fb2b6493af1d196d3085de9..c65b986a11b88b9a5c3414ff9d165dc92d00fc01 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx @@ -1463,6 +1463,9 @@ namespace Muon { if ( msgLvl(MSG::VERBOSE) ) msg(MSG::VERBOSE) << " Yes!" << endmsg; return true; } - + + void MooCandidateMatchingTool::cleanUp() const { + m_candidateTool->cleanUp(); + } } diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h index 002d582d713d7a9565d9faa3204494202aacc9f9..0126b69d8ec008fa222c31e063e61f10442ddc55 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h @@ -154,6 +154,7 @@ namespace Muon { /** @brief return whether the 2 segments are in neighbouring chambers */ bool areInNeighbouringChambers( const MuPatSegment& seg1, const MuPatSegment& seg2 ) const; + void cleanUp() const; private: diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx index cfcdbfdefc4cb8bbbfe9209877712f8256b41f93..16904d597d0171ae7d90bb02969facf4b4b3193e 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx @@ -1518,4 +1518,9 @@ namespace Muon { return newTracks; } + void MooTrackBuilder::cleanUp() const { + m_candidateHandler->cleanUp(); + + } + } diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h index cb0243f379c6d22d598645a7a6fbc94ec755dcde..dcac0e533570744afaca645f57853fd701c0e152 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h @@ -246,6 +246,9 @@ namespace Muon { */ virtual void refine( MuPatTrack& track ) const override; + void cleanUp() const; + + private: void removeDuplicateWithReference( std::unique_ptr<Trk::SegmentCollection>& segments, diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MuPatHitTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MuPatHitTool.cxx index 20deda0f367ae9513597a085c4892102e2f345b8..8928243a3a88a98b45ba2ef8b6ff4bedb04a1903 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MuPatHitTool.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MuPatHitTool.cxx @@ -76,22 +76,19 @@ MuPatHitTool::cleanUp() const { const std::lock_guard<std::mutex> lock(m_hitsMutex); - std::for_each(m_hitsToBeDeleted.begin(), m_hitsToBeDeleted.end(), MuonDeleteObject<MuPatHit>()); + for (auto ptr : m_hitsToBeDeleted) { + delete ptr; + } m_hitsToBeDeleted.clear(); - - // reset size of vector if its size increased - if (m_hitsToBeDeleted.capacity() > arraySize) m_hitsToBeDeleted.reserve(arraySize); } { const std::lock_guard<std::mutex> lock(m_parsMutex); - std::for_each(m_parsToBeDeleted.begin(), m_parsToBeDeleted.end(), - MuonDeleteObject<const Trk::TrackParameters>()); + for (auto ptr : m_parsToBeDeleted) { + delete ptr; + } m_parsToBeDeleted.clear(); - - // reset size of vector if its size increased - if (m_parsToBeDeleted.capacity() > arraySize) m_parsToBeDeleted.reserve(arraySize); } } diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MuonTrackSteering.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MuonTrackSteering.cxx index 8f48e5efb22cb12b44eaaa7a5f6350c1cff9795a..f090d9a3b98a88fc12ea2f552d492c6f97c27d22 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MuonTrackSteering.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MuonTrackSteering.cxx @@ -138,6 +138,11 @@ namespace Muon { // clean up entry handler tool m_candidateTool->cleanUp(); + + // clean up track builder tools + m_mooBTool->cleanUp(); + m_trackBTool->cleanUp(); + } //----------------------------------------------------------------------------------------------------------- diff --git a/Reconstruction/MuonIdentification/MuidInterfaces/MuidInterfaces/ICombinedMuonTrackBuilder.h b/Reconstruction/MuonIdentification/MuidInterfaces/MuidInterfaces/ICombinedMuonTrackBuilder.h index 621e06379ee670f295a4a35247e61ee9d41e5da4..cb56fb23ca5af169e3df0fb042ec34d4155c6693 100755 --- a/Reconstruction/MuonIdentification/MuidInterfaces/MuidInterfaces/ICombinedMuonTrackBuilder.h +++ b/Reconstruction/MuonIdentification/MuidInterfaces/MuidInterfaces/ICombinedMuonTrackBuilder.h @@ -76,7 +76,7 @@ public: virtual Trk::Track* fit(Trk::Track& track, const Trk::RunOutlierRemoval runOutlier = false, const Trk::ParticleHypothesis particleHypothesis = Trk::muon) const = 0; - + virtual void cleanUp() const {}; }; } // end of namespace diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h index dd11b2cebe5eccd59877691015b93d7c8143b6f8..e6f6efdd65efdfcd2a546cad6c6f46ac109d4c3a 100755 --- a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h +++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h @@ -105,6 +105,8 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon const Trk::RunOutlierRemoval runOutlier = false, const Trk::ParticleHypothesis particleHypothesis = Trk::muon) const; + void cleanUp() const; + private: bool optimizeErrors(Trk::Track* track) const; Trk::Track* addIDMSerrors(Trk::Track* track) const; diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx index 54e7fe576218cd221901f9d0b480a17fef56020b..91df3e06db34b667e0601e6dd721725f3cbedf4f 100755 --- a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx +++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx @@ -4858,6 +4858,7 @@ CombinedMuonTrackBuilder::checkTrack(std::string txt, Trk::Track* newTrack, Trk: return newTrackOK; } - - + void CombinedMuonTrackBuilder::cleanUp() const { + m_muonHoleRecovery->cleanUp(); + } } // namespace Rec diff --git a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.cxx b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.cxx index 55da770b7789b82e18345a98b9e8a889506ed136..c0c80680cf15c20143b0ede49c7b3a1b9980ef5e 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.cxx @@ -94,5 +94,10 @@ MuonCombinedInDetExtensionAlg::execute() tool->extend(*indetCandidateCollection, tagMap.ptr(), combTracks, meTracks, segments); } + //Clean up at the end of execute + for (auto& tool : m_muonCombinedInDetExtensionTools) { + tool->cleanUp(); + } + return StatusCode::SUCCESS; } diff --git a/Reconstruction/MuonIdentification/MuonCombinedToolInterfaces/MuonCombinedToolInterfaces/IMuonCandidateTrackBuilderTool.h b/Reconstruction/MuonIdentification/MuonCombinedToolInterfaces/MuonCombinedToolInterfaces/IMuonCandidateTrackBuilderTool.h index 9027023c02c08fe9f699a95469f24781b9c5c214..ff1d24891abd69faad9498e9035a8a6477737195 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedToolInterfaces/MuonCombinedToolInterfaces/IMuonCandidateTrackBuilderTool.h +++ b/Reconstruction/MuonIdentification/MuonCombinedToolInterfaces/MuonCombinedToolInterfaces/IMuonCandidateTrackBuilderTool.h @@ -28,6 +28,8 @@ namespace Muon { /** @brief build a track out of a MuonCandidate */ virtual Trk::Track* buildCombinedTrack( const Trk::Track& idTrack, const MuonCandidate& candidate ) const = 0; + void cleanUp() const {}; + }; inline const InterfaceID& IMuonCandidateTrackBuilderTool::interfaceID() diff --git a/Reconstruction/MuonIdentification/MuonCombinedToolInterfaces/MuonCombinedToolInterfaces/IMuonCombinedInDetExtensionTool.h b/Reconstruction/MuonIdentification/MuonCombinedToolInterfaces/MuonCombinedToolInterfaces/IMuonCombinedInDetExtensionTool.h index 5f6499ea4d5a16438c3246ce9bf32ac3c27f8f78..e92c2f9eba6c47ff505c79f9a4f0dafb4439e7c5 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedToolInterfaces/MuonCombinedToolInterfaces/IMuonCombinedInDetExtensionTool.h +++ b/Reconstruction/MuonIdentification/MuonCombinedToolInterfaces/MuonCombinedToolInterfaces/IMuonCombinedInDetExtensionTool.h @@ -47,6 +47,8 @@ namespace MuonCombined { virtual void extendWithPRDs( const InDetCandidateCollection& inDetCandidates, InDetCandidateToTagMap* tagMap, IMuonCombinedInDetExtensionTool::MuonPrdData prdData, TrackCollection* combTracks, TrackCollection* meTracks, Trk::SegmentCollection* segments) const = 0; + void cleanUp() const {}; + }; inline const InterfaceID& IMuonCombinedInDetExtensionTool::interfaceID() diff --git a/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonCandidateTrackBuilderTool.cxx b/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonCandidateTrackBuilderTool.cxx index fa35105da8334c8b540e02718c5412e682d884f2..3a8fd859d75239e816da85524bd5c39cf1492087 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonCandidateTrackBuilderTool.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonCandidateTrackBuilderTool.cxx @@ -124,6 +124,8 @@ namespace Muon { return refittedTrack; } - + void MuonCandidateTrackBuilderTool::cleanUp() const { + m_trackFitter->cleanUp(); + } } diff --git a/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonCandidateTrackBuilderTool.h b/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonCandidateTrackBuilderTool.h index a32f5510540e4060e33cc15cff3d10be4498f596..d9c3bc4f1cfa1812b9f6b9109e3577beb802cee7 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonCandidateTrackBuilderTool.h +++ b/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonCandidateTrackBuilderTool.h @@ -73,6 +73,8 @@ namespace Muon { /**IMuonCandidateTrackBuilderTool interface: buildCombinedTrack */ Trk::Track* buildCombinedTrack( const Trk::Track& idTrack, const MuonCandidate& candidate ) const; + void cleanUp() const; + private: ToolHandle<IMuonSegmentTrackBuilder> m_muonTrackBuilder{this,"MuonSegmentTrackBuilder","Muon::MooTrackBuilder/MooMuonTrackBuilder"}; ToolHandle<MuonEDMPrinterTool> m_printer{this,"MuonEDMPrinterTool","Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"}; diff --git a/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.cxx b/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.cxx index d079eef7b1fe2615bb88b69263acd7cd08eac0e1..aa706e8ee277e77945e09ac8e687511143faedd8 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.cxx @@ -341,5 +341,10 @@ namespace MuonCombined { } return true; } + + void MuonInsideOutRecoTool::cleanUp() const { + m_candidateTrackBuilder->cleanUp(); + } + } diff --git a/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.h b/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.h index 0d9ab3fb559cd55d3133922de097bba147c632b4..ac6543de0f5af79c5fd34e9d4952122af554d5b2 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.h +++ b/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.h @@ -64,6 +64,8 @@ namespace MuonCombined { /** find the best candidate for a given set of segments */ std::pair<std::unique_ptr<const Muon::MuonCandidate>,Trk::Track*> findBestCandidate( const xAOD::TrackParticle& indetTrackParticle, const std::vector< Muon::MuonLayerRecoData >& allLayers) const; + + void cleanUp() const; private: /** handle a single candidate */