From 6b1b7718b4132e4d03fa7c5bababfc7a70cdf6f3 Mon Sep 17 00:00:00 2001 From: Scott Snyder <scott.snyder@cern.ch> Date: Mon, 27 Sep 2021 18:30:56 +0200 Subject: [PATCH] TrkTrack+TRT_SegmentToTrackTool+TrkMaterialProvider: Remove non-const trackStateOnSurfaces. --- .../src/TRT_SegmentToTrackTool.cxx | 20 ++++------ Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h | 10 +---- Tracking/TrkEvent/TrkTrack/TrkTrack/Track.icc | 8 +--- .../src/TrkMaterialProviderTool.cxx | 40 ++++++++++++------- 4 files changed, 35 insertions(+), 43 deletions(-) diff --git a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx index 2ee58344e1ae..b7db18ec9129 100644 --- a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx +++ b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx @@ -335,11 +335,8 @@ namespace InDet { info.setPatternRecognitionInfo(Trk::TrackInfo::TRTStandalone); // create new track candidate - Trk::Track* newTrack = new Trk::Track(info, std::move(ntsos), fq); - // We need to keep the tsos added. As later on we modify them - auto newTrackTSOS = newTrack->trackStateOnSurfaces(); if (!m_doRefit) { - return newTrack; + return new Trk::Track(info, std::move(ntsos), fq); } else { // // ----------------------------- this is a horrible hack to make the @@ -369,8 +366,6 @@ namespace InDet { m_extrapolator->extrapolateDirectly(*segPar, perigeeSurface)); if (!tempper) { ATH_MSG_DEBUG("Could not produce perigee"); - delete newTrack; - newTrack = nullptr; delete segPar; segPar = nullptr; return nullptr; @@ -481,7 +476,7 @@ namespace InDet { // ME: wow this is hacking the vector ... const Trk::MeasurementBase* firstmeas = - (**newTrackTSOS->begin()).measurementOnTrack(); + (**ntsos.begin()).measurementOnTrack(); Amg::MatrixX newcov(2, 2); newcov.setZero(); newcov(0, 0) = (firstmeas->localCovariance())(0, 0); @@ -492,8 +487,8 @@ namespace InDet { new Trk::PseudoMeasurementOnTrack( newpar, newcov, firstmeas->associatedSurface()); // hack replace first measurement with pseudomeasurement - newTrackTSOS->erase(newTrackTSOS->begin()); - newTrackTSOS->insert(newTrackTSOS->begin(), + ntsos.erase(ntsos.begin()); + ntsos.insert(ntsos.begin(), new Trk::TrackStateOnSurface(newpseudo, nullptr)); } @@ -596,7 +591,7 @@ namespace InDet { typePattern.set(Trk::TrackStateOnSurface::Perigee); Trk::TrackStateOnSurface* seg_tsos = new Trk::TrackStateOnSurface( nullptr, per, nullptr, nullptr, typePattern); - newTrackTSOS->insert(newTrackTSOS->begin(), seg_tsos); + ntsos.insert(ntsos.begin(), seg_tsos); ATH_MSG_VERBOSE("Constructed perigee at input to fit : " << (*per)); @@ -605,12 +600,11 @@ namespace InDet { // track // + Trk::Track newTrack (info, std::move(ntsos), fq); Trk::Track* fitTrack = - m_fitterTool->fit(*newTrack, true, Trk::nonInteracting); + m_fitterTool->fit(newTrack, true, Trk::nonInteracting); // cleanup - delete newTrack; - newTrack = nullptr; if (segPar) { delete segPar; segPar = nullptr; diff --git a/Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h b/Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h index 686762aaa7f5..4f1c8aad8f36 100755 --- a/Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h +++ b/Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration */ #ifndef TRKTRACK_H @@ -206,14 +206,6 @@ namespace Trk */ const DataVector<const TrackStateOnSurface>* trackStateOnSurfaces() const; - /** - * return a pointer to the non-const DataVector of const TrackStateOnSurfaces - * owned by a non-const track - * The pointer will be nullptr if the track was created without - * TrackStateOnSurfaces. - */ - DataVector<const TrackStateOnSurface>* trackStateOnSurfaces(); - /** * Set the TrackStateOnSurfaces. The Trk::Track takes ownership */ diff --git a/Tracking/TrkEvent/TrkTrack/TrkTrack/Track.icc b/Tracking/TrkEvent/TrkTrack/TrkTrack/Track.icc index d527689048b6..8d938091a4ab 100644 --- a/Tracking/TrkEvent/TrkTrack/TrkTrack/Track.icc +++ b/Tracking/TrkEvent/TrkTrack/TrkTrack/Track.icc @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration */ namespace Trk { @@ -22,12 +22,6 @@ Track::trackStateOnSurfaces() const return &m_trackStateVector; } -inline DataVector<const TrackStateOnSurface>* -Track::trackStateOnSurfaces() -{ - return &m_trackStateVector; -} - inline const TrackInfo& Track::info() const { diff --git a/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx b/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx index 67e61f2b7577..3f64b20b4983 100644 --- a/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx +++ b/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx @@ -156,7 +156,12 @@ void Trk::TrkMaterialProviderTool::updateCaloTSOS(Trk::Track& track, const Trk:: // back extrapolate to perigee, get pAtCaloEntry from list of TSOSs // and update/add calo+ID material to mstrack to be refitted. - Trk::TrackStates* inputTSOS = track.trackStateOnSurfaces(); + const Trk::TrackStates* inputTSOS_orig = track.trackStateOnSurfaces(); + + auto inputTSOS = std::make_unique<Trk::TrackStates>(); + for (const Trk::TrackStateOnSurface* tsos : *inputTSOS_orig) { + inputTSOS->push_back (tsos->clone()); + } // Iterators Trk::TrackStates::iterator lastIDwP = inputTSOS->end(); @@ -248,9 +253,10 @@ void Trk::TrkMaterialProviderTool::updateCaloTSOS(Trk::Track& track, const Trk:: #endif // apply X0 and Eloss scale to MuonSpectrometer - this->updateVectorMS(inputTSOS,firstMS,X0ScaleMS,ElossScaleMS); + this->updateVectorMS(inputTSOS.get(),firstMS,X0ScaleMS,ElossScaleMS); // update the original vector - Trk::TrkMaterialProviderTool::updateVector(inputTSOS, firstCALO, firstMS, caloTSOS); + Trk::TrkMaterialProviderTool::updateVector(inputTSOS.get(), firstCALO, firstMS, caloTSOS); + track.setTrackStateOnSurfaces (std::move (*inputTSOS)); myLocal_resetTrack(track); } @@ -261,7 +267,12 @@ void Trk::TrkMaterialProviderTool::updateCaloTSOS(const Trk::Track& idTrack, Trk ATH_MSG_VERBOSE("updateCaloTSOS(Trk::Track& idTrack, Trk::Track& extrapolatedTrack)"); const Trk::TrackStates* inputTSOS_ID = idTrack.trackStateOnSurfaces(); - Trk::TrackStates* inputTSOS_MS = extrapolatedTrack.trackStateOnSurfaces(); + const Trk::TrackStates* inputTSOS_MS_orig = extrapolatedTrack.trackStateOnSurfaces(); + + auto inputTSOS_MS = std::make_unique<Trk::TrackStates>(); + for (const Trk::TrackStateOnSurface* tsos : *inputTSOS_MS_orig) { + inputTSOS_MS->push_back (tsos->clone()); + } // find last ID TSOS @@ -338,14 +349,14 @@ void Trk::TrkMaterialProviderTool::updateCaloTSOS(const Trk::Track& idTrack, Trk double ElossScaleMS = 0.; // get calorimeter TSOS from TG Trk::TrackStates* caloTSOS = this->getCaloTSOS (*(*lastIDwP)->trackParameters(), - extrapolatedTrack, - (*firstMSnotPerigee)->surface(), - Trk::alongMomentum, - Trk::muon, - Eloss, X0ScaleMS, ElossScaleMS, - (firstMSwP == inputTSOS_MS->end()) ? nullptr : (*firstMSwP)->trackParameters(), - false, - true); + extrapolatedTrack, + (*firstMSnotPerigee)->surface(), + Trk::alongMomentum, + Trk::muon, + Eloss, X0ScaleMS, ElossScaleMS, + (firstMSwP == inputTSOS_MS->end()) ? nullptr : (*firstMSwP)->trackParameters(), + false, + true); if(!caloTSOS || caloTSOS->size()!=3) { @@ -362,10 +373,11 @@ void Trk::TrkMaterialProviderTool::updateCaloTSOS(const Trk::Track& idTrack, Trk #endif // apply X0 and Eloss scale to MuonSpectrometer - this->updateVectorMS(inputTSOS_MS,firstMS,X0ScaleMS,ElossScaleMS); + this->updateVectorMS(inputTSOS_MS.get(),firstMS,X0ScaleMS,ElossScaleMS); // update the original vector - Trk::TrkMaterialProviderTool::updateVector(inputTSOS_MS, firstCALO, firstMS, caloTSOS); + Trk::TrkMaterialProviderTool::updateVector(inputTSOS_MS.get(), firstCALO, firstMS, caloTSOS); + extrapolatedTrack.setTrackStateOnSurfaces (std::move (*inputTSOS_MS)); myLocal_resetTrack(extrapolatedTrack); } -- GitLab