From bf7db9b903da67cee8eb0eb26d2137df22118bee Mon Sep 17 00:00:00 2001 From: Shaun Roe <shaun.roe@cern.ch> Date: Mon, 22 Mar 2021 15:15:21 +0000 Subject: [PATCH] 22.0-cleanup-TRT_TrackExtensionTool_DAF --- .../ITRT_TrackExtensionTool.h | 30 +- .../TRT_TrackExtensionTool_DAF.h | 17 +- .../src/TRT_TrackExtensionTool_DAF.cxx | 201 ++++------- .../TRT_TrackExtensionToolCosmics.h | 6 +- .../TRT_TrackExtensionTool_xk.h | 10 +- .../src/TRT_TrackExtensionToolCosmics.cxx | 10 +- .../src/TRT_TrackExtensionTool_xk.cxx | 336 +++++++----------- .../src/TRT_TrackSegmentsMaker_ATLxk.cxx | 9 +- 8 files changed, 247 insertions(+), 372 deletions(-) diff --git a/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/ITRT_TrackExtensionTool.h b/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/ITRT_TrackExtensionTool.h index af86dd584637..23d1c71c8874 100755 --- a/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/ITRT_TrackExtensionTool.h +++ b/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/ITRT_TrackExtensionTool.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration */ ///////////////////////////////////////////////////////////////////////////////// @@ -15,18 +15,20 @@ #ifndef ITRT_TrackExtensionTool_H #define ITRT_TrackExtensionTool_H -#include <list> -#include "GaudiKernel/AlgTool.h" -#include "GaudiKernel/EventContext.h" -#include "TrkTrack/Track.h" -#include "TrkMeasurementBase/MeasurementBase.h" -#include "TrkSegment/TrackSegment.h" +#include "TrkParameters/TrackParameters.h" //typedef, cannot fwd declare +#include "GaudiKernel/IAlgTool.h" +#include <vector> +#include <memory> //for unique_ptr class MsgStream; +class EventContext; +namespace Trk{ + class Track; + class TrackSegment; + class MeasurementBase; //only the ptr is template parameter +} namespace InDet { - - static const InterfaceID IID_ITRT_TrackExtensionTool ("InDet::ITRT_TrackExtensionTool",1,0); @@ -47,15 +49,13 @@ namespace InDet { /////////////////////////////////////////////////////////////////// static const InterfaceID& interfaceID(); - virtual StatusCode initialize ()=0; - virtual StatusCode finalize ()=0; /////////////////////////////////////////////////////////////////// // Main methods for track extension to TRT /////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// - // Pixles and sct track extension to TRT + // Pixels and sct track extension to TRT /////////////////////////////////////////////////////////////////// virtual std::vector<const Trk::MeasurementBase*>& extendTrack @@ -65,7 +65,7 @@ namespace InDet { virtual std::vector<const Trk::MeasurementBase*>& extendTrack (const EventContext& ctx, - const Trk::TrackParameters&, + const Trk::TrackParameters * pTrackParams, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const = 0; virtual Trk::Track* newTrack @@ -79,11 +79,11 @@ namespace InDet { virtual Trk::TrackSegment* findSegment (const EventContext& ctx, - const Trk::TrackParameters&, + const Trk::TrackParameters *, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const = 0; /////////////////////////////////////////////////////////////////// - // Tool initialisation for new eevent + // Tool initialisation for new event /////////////////////////////////////////////////////////////////// virtual std::unique_ptr<InDet::ITRT_TrackExtensionTool::IEventData> newEvent(const EventContext& ctx) const = 0; diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h index bd97d0ea30da..e988846479d2 100755 --- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h +++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration */ ///////////////////////////////////////////////////////////////////////////////// @@ -7,7 +7,7 @@ ///////////////////////////////////////////////////////////////////////////////// // (c) ATLAS Detector software ///////////////////////////////////////////////////////////////////////////////// -// Concret implementation for base class ITRT_TrackExtensionTool +// Concrete implementation for base class ITRT_TrackExtensionTool ///////////////////////////////////////////////////////////////////////////////// // Sebastian Fleischmann ///////////////////////////////////////////////////////////////////////////////// @@ -82,7 +82,7 @@ public: virtual std::vector<const Trk::MeasurementBase*>& extendTrack(const EventContext& ctx, - const Trk::TrackParameters&, + const Trk::TrackParameters * pTrackParams, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override; virtual Trk::Track* @@ -96,7 +96,7 @@ public: /////////////////////////////////////////////////////////////////// virtual Trk::TrackSegment* findSegment(const EventContext& ctx, - const Trk::TrackParameters&, + const Trk::TrackParameters *, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override; /////////////////////////////////////////////////////////////////// @@ -133,9 +133,8 @@ protected: const TRT_DriftCircleContainer *m_trtcontainer = nullptr; std::vector<const Trk::MeasurementBase*> m_measurement; //!< vector of MeasurementBase for the output std::vector <const InDetDD::TRT_BaseElement*> m_detectorElements; //!< vector to store the detElements - std::vector <const Trk::TrackParameters*> m_propagatedTrackParameters; //!< vector to store the propagated track parameters (propagated to the related entry of m_detectorElements) - - const Trk::TrackParameters *m_siliconTrkParams = nullptr; //!< track parameters at the outermost Silicon layer + std::vector <std::shared_ptr< const Trk::TrackParameters>> m_propagatedTrackParameters; //!< vector to store the propagated track parameters (propagated to the related entry of m_detectorElements) + const Trk::TrackParameters *m_siliconTrkParams = nullptr; //!< track parameters at the outermost Silicon layer }; @@ -162,9 +161,9 @@ protected: /////////////////////////////////////////////////////////////////// /** find an element-wise extension (ie. the RIOs in a CompROT belong to one detElement) */ - StatusCode elementWiseExtension(int, int, InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const; + bool elementWiseExtension(int, int, InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const; /** find a barrel extension with RIOs grouped along the globalPositions of the track */ - StatusCode groupedBarrelExtension(int, int, InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const; + bool groupedBarrelExtension(int, int, InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const; }; diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx index 1474a4acf7d6..3b14950f1248 100755 --- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx +++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration */ /////////////////////////////////////////////////////////////////// @@ -11,9 +11,7 @@ // Sebastian Fleischmann /////////////////////////////////////////////////////////////////// -#include <iostream> -#include <iomanip> -#include <utility> + #include "TrkParameters/TrackParameters.h" // tools: @@ -29,6 +27,10 @@ #include "TRT_ReadoutGeometry/TRT_BaseElement.h" #include "InDetIdentifier/TRT_ID.h" +#include <cmath> +#include <iostream> +#include <iomanip> +#include <utility> //http://www-zeuthen.desy.de/geant4/clhep-2.0.4.3/BasicVector3D_8h-source.html double perp2( const Amg::Vector3D& v1, const Amg::Vector3D& v2 ) { @@ -94,35 +96,20 @@ StatusCode InDet::TRT_TrackExtensionTool_DAF::initialize() { else m_fieldprop = Trk::MagneticFieldProperties(Trk::FullField); // ------------------- // Get propagator tool - sc = m_propagator.retrieve(); - if (sc.isFailure()) { - ATH_MSG_FATAL( "Could not retrieve the propagator: "<< m_propagator ); - return sc; - } - + ATH_CHECK(m_propagator.retrieve()); + // -------------------------------- // Get CompetingRIOsOnTrack creator - sc = m_compROTcreator.retrieve(); - if (sc.isFailure()) { - ATH_MSG_FATAL( "Could not retrieve CompetingRIOsOnTrack creator: "<< m_compROTcreator ); - return sc; - } - + ATH_CHECK(m_compROTcreator.retrieve()); + // ------------------------------------ // Get detector elements road maker tool - sc = m_roadtool.retrieve(); - if (sc.isFailure()) { - ATH_MSG_FATAL( "Could not retrieve the TRT road tool: "<< m_roadtool ); - return sc; - } - + ATH_CHECK( m_roadtool.retrieve()); + // ------------------------- // Get TRT identifier: // First get TRT manager - if (detStore()->retrieve(m_trtID, "TRT_ID").isFailure()) { - msg(MSG::FATAL) << "Could not get TRT ID helper" << endmsg; - return StatusCode::FAILURE; - } + ATH_CHECK(detStore()->retrieve(m_trtID, "TRT_ID")); // ---------------------------- // init the size of the vectors @@ -168,18 +155,15 @@ InDet::TRT_TrackExtensionTool_DAF::newEvent(const EventContext& ctx) const { // ----------- // get the container with TRT RIOs SG::ReadHandle<TRT_DriftCircleContainer> trtcontainer(m_jo_trtcontainername, ctx); - if((not trtcontainer.isValid())) { std::stringstream msg; msg << "Missing TRT_DriftCircleContainer " << m_jo_trtcontainername.key(); throw std::runtime_error( msg.str() ); } - - std::unique_ptr<EventData> event_data(new EventData(trtcontainer.cptr())); - event_data->m_measurement.reserve(200); - event_data->m_propagatedTrackParameters.reserve(200); - - return std::unique_ptr<InDet::ITRT_TrackExtensionTool::IEventData>(event_data.release()); + auto eventData = std::make_unique<EventData>(trtcontainer.cptr()); + eventData->m_measurement.reserve(200); + eventData->m_propagatedTrackParameters.reserve(200); + return eventData; } /////////////////////////////////////////////////////////////////// @@ -188,44 +172,34 @@ InDet::TRT_TrackExtensionTool_DAF::newEvent(const EventContext& ctx) const { std::vector<const Trk::MeasurementBase*>& InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx, const Trk::Track& track, - InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const + InDet::ITRT_TrackExtensionTool::IEventData &eventDataBaseclass) const { - InDet::TRT_TrackExtensionTool_DAF::EventData & - event_data=InDet::TRT_TrackExtensionTool_DAF::EventData::getPrivateEventData(virt_event_data); - //StatusCode sc; - - const Trk::TrackParameters *trackPar = 0; + EventData & event_data=EventData::getPrivateEventData(eventDataBaseclass); // ------------- // get the last TrackStateOnSurface of the Track: this should be the outermost Silicon measurement - trackPar = track.trackStateOnSurfaces()->back()->trackParameters(); - if (!trackPar) { + auto pTrackPar = track.trackStateOnSurfaces()->back()->trackParameters(); + if (!pTrackPar) { // if the last TSoS does not like us we use the perigee ATH_MSG_DEBUG("last track state has no trackParameters, use Perigee instead."); - trackPar = track.perigeeParameters(); - if(!trackPar) { + pTrackPar = track.perigeeParameters(); + if(!pTrackPar) { // now I am upset... ATH_MSG_ERROR("even the Perigee == Null, stop!"); return event_data.m_measurement; } } // call main function - return extendTrack(ctx, *trackPar,event_data); + return extendTrack(ctx, pTrackPar,event_data); } std::vector<const Trk::MeasurementBase*>& InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx, - const Trk::TrackParameters& trackPar, - InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const + const Trk::TrackParameters * pTrackPar, //I don't own this + InDet::ITRT_TrackExtensionTool::IEventData &eventDataBaseclass) const { InDet::TRT_TrackExtensionTool_DAF::EventData & - event_data=InDet::TRT_TrackExtensionTool_DAF::EventData::getPrivateEventData(virt_event_data); - - StatusCode sc(StatusCode::SUCCESS); - // fake check of StatusCode to avoid "unchecked return codes" warning - if (sc.isFailure()) { - ATH_MSG_FATAL("StatusCode has gone insane!" ); - } + event_data=InDet::TRT_TrackExtensionTool_DAF::EventData::getPrivateEventData(eventDataBaseclass); // ------------ // reset the output vector event_data.m_measurement.clear(); @@ -233,19 +207,14 @@ InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx, event_data.m_detectorElements.clear(); // reset the vector with propagated trackParameters event_data.m_propagatedTrackParameters.clear(); - // ------------ // stop immediately if no RIO container could be retrieved if(!event_data.m_trtcontainer) { ATH_MSG_DEBUG("no RIO container retrieved, stop!"); return event_data.m_measurement; } - - event_data.m_siliconTrkParams = &trackPar; - - ATH_MSG_DEBUG("starting TRT detector elements road maker with initial TrackParemeters: "<< *event_data.m_siliconTrkParams ); - - + event_data.m_siliconTrkParams = pTrackPar; + ATH_MSG_DEBUG("starting TRT detector elements road maker with initial TrackParameters: "<< *event_data.m_siliconTrkParams ); // Get AtlasFieldCache SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx}; const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; @@ -254,41 +223,37 @@ InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx, } MagField::AtlasFieldCache fieldCache; fieldCondObj->getInitializedCache (fieldCache); - // ---------------------------------- // start the TRT detector elements road maker to get a list of possibly interesting detector elements std::vector<const InDetDD::TRT_BaseElement*> detElements; m_roadtool->detElementsRoad(ctx, fieldCache, *event_data.m_siliconTrkParams, Trk::alongMomentum, detElements); - ATH_MSG_DEBUG("TRT detector elements road maker found "<< detElements.size()<< " detElements" ); - + if(detElements.empty()) { + ATH_MSG_DEBUG("TRT_DetElementsRoadMaker found no road, stop!"); + return event_data.m_measurement; + } // ---------------------------------- // extrapolate to get a list of global track positions: // (extrapolate just parameters, not covariance) // the index of the detElement vector where the track changes from one sub type to another - // in the most general case the track crosses the TRT in the way: Endcap, Barrel, Encap (including cosmics) + // in the most general case the track crosses the TRT in the way: Endcap, Barrel, Encap (including cosmics) int beginBarrelRoad = 0; int beginSecondEndcapRoad = 0; - //int nDetElements = 0; // was the barrel already crossed? bool barrelCrossed = false; - // start extrapolation with TrkParameters from Silicon - const Trk::TrackParameters* previousTrkPar = event_data.m_siliconTrkParams; - // loop over detElements - std::vector<const InDetDD::TRT_BaseElement*>::const_iterator detElIter=detElements.begin(); - if(detElIter == detElements.end()) { - ATH_MSG_DEBUG("TRT_DetElementsRoadMaker found no road, stop!"); - return event_data.m_measurement; - } - for(; detElIter!=detElements.end(); ++detElIter) { + // start extrapolation with TrkParameters from Silicon, but don't touch the original + // object in case the shared ptr goes out of scope + std::shared_ptr<const Trk::TrackParameters> previousTrkPar(event_data.m_siliconTrkParams->uniqueClone()); + // loop over detElements + for(const auto & pThisDetectorElement: detElements) { // propagate without boundary checks to detElement - const Trk::TrackParameters* nextTrkPar = m_propagator->propagateParameters(*previousTrkPar, (*detElIter)->surface(), Trk::alongMomentum, false, m_fieldprop, Trk::nonInteracting).release(); + std::shared_ptr<const Trk::TrackParameters> nextTrkPar = m_propagator->propagateParameters(*previousTrkPar, pThisDetectorElement->surface(), Trk::alongMomentum, false, m_fieldprop, Trk::nonInteracting); if(!nextTrkPar) { // propagate directly to this detElement and hope that the Fitter will do a better job: ATH_MSG_DEBUG("step by step propagation of track parameters to TRT detector element failed: Try direct propagation (this may cause problems for the Fitter)"); - ATH_MSG_DEBUG("Problem was in " << (*detElIter)->type() <<" at (" << (*detElIter)->center().x() <<", "<< (*detElIter)->center().y() <<", "<< (*detElIter)->center().z() << ")" ); - nextTrkPar = m_propagator->propagateParameters(*event_data.m_siliconTrkParams, (*detElIter)->surface(), Trk::alongMomentum, false, m_fieldprop, Trk::nonInteracting).release(); + ATH_MSG_DEBUG("Problem was in " << pThisDetectorElement->type() <<" at (" << pThisDetectorElement->center().x() <<", "<< pThisDetectorElement->center().y() <<", "<< pThisDetectorElement->center().z() << ")" ); + nextTrkPar = m_propagator->propagateParameters(*event_data.m_siliconTrkParams, pThisDetectorElement->surface(), Trk::alongMomentum, false, m_fieldprop, Trk::nonInteracting); if (!nextTrkPar) { ATH_MSG_WARNING("direct propagation of track parameters to TRT detector element failed:"); ATH_MSG_WARNING(" this detector element will be dropped and RIOs on the road may be lost!"); @@ -296,14 +261,14 @@ InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx, } //return m_measurement; } // end if !nextTrkPar - ATH_MSG_VERBOSE("propagated TrackParameters: ("<< nextTrkPar->position().x() <<", "<< nextTrkPar->position().y() <<", "<< nextTrkPar->position().z() << ") in detectorType: " << (*detElIter)->type() ); + ATH_MSG_VERBOSE("propagated TrackParameters: ("<< nextTrkPar->position().x() <<", "<< nextTrkPar->position().y() <<", "<< nextTrkPar->position().z() << ") in detectorType: " << pThisDetectorElement->type() ); // append the detElement and the trkParameters to the vectors - event_data.m_detectorElements.push_back((*detElIter)); + event_data.m_detectorElements.push_back(pThisDetectorElement); event_data.m_propagatedTrackParameters.push_back(nextTrkPar); // set the index if subdetector crossed: - if ((*detElIter)->type() == InDetDD::TRT_BaseElement::BARREL) { + if (pThisDetectorElement->type() == InDetDD::TRT_BaseElement::BARREL) { if (!barrelCrossed) { barrelCrossed = true; beginBarrelRoad = event_data.m_detectorElements.size()-1; @@ -314,68 +279,59 @@ InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx, beginSecondEndcapRoad = event_data.m_detectorElements.size()-1; } } - // prepare for next propagation previousTrkPar = nextTrkPar; } // end for loop over detElements ATH_MSG_DEBUG("Barrel Road starts at index "<< beginBarrelRoad << ", second Encap Road at "<< beginSecondEndcapRoad << " with a total of "<< event_data.m_detectorElements.size()<< " detElements" ); - + bool anExtensionFailed{false}; if (m_jo_simpleExtension) { ATH_MSG_DEBUG("run the simpleExtension" ); // ----------------- // build the complete extension element-wise: - sc = elementWiseExtension(0, event_data.m_detectorElements.size()-1,event_data); + anExtensionFailed |= elementWiseExtension(0, event_data.m_detectorElements.size()-1,event_data); } else { // ----------------- // build the extensions for the three road parts and combine them: // endcap before barrel if (beginBarrelRoad > 0) { ATH_MSG_DEBUG("start processing of endcap road before barrel" ); - sc = elementWiseExtension(0, beginBarrelRoad-1,event_data); + anExtensionFailed |= elementWiseExtension(0, beginBarrelRoad-1,event_data); } else if (!barrelCrossed) { ATH_MSG_DEBUG("start processing of endcap road (endcap only track)" ); - sc = elementWiseExtension(0, event_data.m_detectorElements.size()-1,event_data); + anExtensionFailed |= elementWiseExtension(0, event_data.m_detectorElements.size()-1,event_data); } // barrel - if (barrelCrossed && (!(sc.isFailure()))) { + if (barrelCrossed and not(anExtensionFailed)) { ATH_MSG_DEBUG("start processing of barrel road" ); if (beginSecondEndcapRoad > 0) { // endcap was reached after the barrel was crossed - sc = groupedBarrelExtension(beginBarrelRoad, beginSecondEndcapRoad-1,event_data); + anExtensionFailed |= groupedBarrelExtension(beginBarrelRoad, beginSecondEndcapRoad-1,event_data); } else { // after the barrel no endcap was hit - sc = groupedBarrelExtension(beginBarrelRoad, event_data.m_detectorElements.size()-1,event_data); + anExtensionFailed |= groupedBarrelExtension(beginBarrelRoad, event_data.m_detectorElements.size()-1,event_data); } } - // encap after barrel - if ((beginSecondEndcapRoad > 0) && !(sc.isFailure())) { + // endcap after barrel + if ((beginSecondEndcapRoad > 0) and not(anExtensionFailed)) { ATH_MSG_DEBUG("start processing of endcap road after barrel" ); - sc = elementWiseExtension(beginSecondEndcapRoad, event_data.m_detectorElements.size()-1,event_data); + anExtensionFailed |= elementWiseExtension(beginSecondEndcapRoad, event_data.m_detectorElements.size()-1,event_data); } }// end if (simpleExtension) // did one of the extensions fail? - if (sc.isFailure()) { + if (anExtensionFailed) { ATH_MSG_WARNING("extensions failed: Return empty MeasurementBase vector" ); // delete extension made so far - std::vector<const Trk::MeasurementBase*>::const_iterator createdCompROTsIter = event_data.m_measurement.begin(); - for(; createdCompROTsIter!=event_data.m_measurement.end(); ++createdCompROTsIter) { - delete (*createdCompROTsIter); + for(auto pThisROT : event_data.m_measurement) { + delete (pThisROT); } event_data.m_measurement.clear(); } - - // ------------------------------------------ // delete all the propagated track parameters: - std::vector<const Trk::TrackParameters*>::const_iterator trkParIter = event_data.m_propagatedTrackParameters.begin(); - for(; trkParIter!=event_data.m_propagatedTrackParameters.end(); ++trkParIter) { - delete (*trkParIter); - } event_data.m_propagatedTrackParameters.clear(); event_data.m_detectorElements.clear(); - ATH_MSG_DEBUG("** done: Made TRT extension with "<< event_data.m_measurement.size() << " CompetingTRT_DriftCirclesOnTrack"); return event_data.m_measurement; } @@ -384,16 +340,13 @@ InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx, // find an element-wise extension (ie. the RIOs in a CompROT belong to one detElement) /////////////////////////////////////////////////////////////////// -StatusCode InDet::TRT_TrackExtensionTool_DAF::elementWiseExtension(int beginIndex, - int endIndex, - InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const +bool +InDet::TRT_TrackExtensionTool_DAF::elementWiseExtension(int beginIndex, + int endIndex, + InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const { - - const double squaredMaxBarrelRIOdistance = m_jo_roadwidth * m_jo_roadwidth; const double squaredMaxEndcapRIOdistance = m_jo_roadwidth * m_jo_roadwidth; - - double lastEndCapZ = -10000.; // create a new list of RIOs std::list< const Trk::PrepRawData * > RIOlist; @@ -460,7 +413,7 @@ StatusCode InDet::TRT_TrackExtensionTool_DAF::elementWiseExtension(int beginInde if (isBarrel) { // calc squared distance in the x-y-plane double distance = (trkPos - strawGlobPos).squaredNorm(); - ATH_MSG_DEBUG("distance in the x-y-plane: " << sqrt(distance) ); + ATH_MSG_DEBUG("distance in the x-y-plane: " << std::sqrt(distance) ); // exclude RIOs too far from global track position on the detElement: if ( distance > squaredMaxBarrelRIOdistance ) { ATH_MSG_DEBUG("distance too large, RIO will be dropped." ); @@ -471,7 +424,7 @@ StatusCode InDet::TRT_TrackExtensionTool_DAF::elementWiseExtension(int beginInde int straw = m_trtID->straw( (*driftCircleIterator)->identify() ); // calc squared distance of straw and track prediction perpendicular to the straw axis double distance = perp2(strawGlobPos-trkPos, event_data.m_detectorElements[index]->strawAxis(straw)); - ATH_MSG_DEBUG("distance perp. to straw axis: " << sqrt(distance) ); + ATH_MSG_DEBUG("distance perp. to straw axis: " << std::sqrt(distance) ); if ( distance > squaredMaxEndcapRIOdistance ) { ATH_MSG_DEBUG("distance too large, RIO will be dropped." ); @@ -494,13 +447,13 @@ StatusCode InDet::TRT_TrackExtensionTool_DAF::elementWiseExtension(int beginInde event_data.m_measurement.push_back(compROT); } } - return StatusCode::SUCCESS; + return true; } /////////////////////////////////////////////////////////////////// // find a barrel extension with RIOs grouped along the globalPositions of the track /////////////////////////////////////////////////////////////////// -StatusCode +bool InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex, int endIndex, InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const @@ -520,14 +473,10 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex, // index of the last global position belonging to the detElement std::vector<int> detElementGlobPosIndex(event_data.m_propagatedTrackParameters.size(), 0); + + ATH_MSG_DEBUG("looping over detElements between index " << beginIndex << " and " << endIndex << "to produce a list of global positions" ); // do the first iteration manually to get the // last global position - // double lastPosX = m_propagatedTrackParameters[beginIndex]->position().x(); - // double lastPosY = m_propagatedTrackParameters[beginIndex]->position().y(); - // trackGlobalPosX.push_back( lastPosX ); - // trackGlobalPosY.push_back( lastPosY ); - ATH_MSG_DEBUG("looping over detElements between index " << beginIndex << " and " << endIndex << "to produce a list of global positions" ); - Amg::Vector3D* lastPos = new Amg::Vector3D( event_data.m_propagatedTrackParameters[beginIndex]->position() ); ATH_MSG_VERBOSE("global position: ("<< lastPos->x() <<", "<< lastPos->y() << ")" ); // ignore z coordinate (along the straw) @@ -537,8 +486,6 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex, for(int index = beginIndex+1; index <= endIndex; ++index) { // get the global track position and fill it into vectors - //double posX = m_propagatedTrackParameters[index]->position().x(); - //double posY = m_propagatedTrackParameters[index]->position().y(); Amg::Vector3D* Pos = new Amg::Vector3D( event_data.m_propagatedTrackParameters[index]->position() ); // ignore z coordinate (along the straw) (*Pos)[Amg::z]=0.; @@ -604,7 +551,7 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex, unsigned int minDistIndex = detElementGlobPosIndex[index]; //double minDistance = strawGlobPos.distance2(*(trackGlobalPos[minDistIndex])); double minDistance = (*(trackGlobalPos[minDistIndex]) - strawGlobPos).squaredNorm(); - ATH_MSG_VERBOSE("global position of the RIO belonging to globPos index "<< minDistIndex <<" : ("<< strawGlobPos.x() <<", "<< strawGlobPos.y() << ") --> distance: " << sqrt(minDistance) ); + ATH_MSG_VERBOSE("global position of the RIO belonging to globPos index "<< minDistIndex <<" : ("<< strawGlobPos.x() <<", "<< strawGlobPos.y() << ") --> distance: " << std::sqrt(minDistance) ); // Perhaps already exclude RIOs too far from global track position on the detElement: if ( minDistance > squaredMaxRIOdistanceFromTrackOnDetElement ) { @@ -668,7 +615,7 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex, // calc the distance of the straw center to the secant //double distToSecant = ((*(trackGlobalPos[groupIndex]))- (*(trackGlobalPos[groupIndex+1]))).perp( (strawGlobPos - (*(trackGlobalPos[groupIndex]))) ); //double distToSecant = (strawGlobPos - (*(trackGlobalPos[groupIndex]))).perp( ((*(trackGlobalPos[groupIndex]))- (*(trackGlobalPos[groupIndex+1]))) ); - double distToSecant = sqrt(perp2(strawGlobPos - (*(trackGlobalPos[groupIndex])), ((*(trackGlobalPos[groupIndex]))- (*(trackGlobalPos[groupIndex+1]))) ) ); + double distToSecant = std::sqrt(perp2(strawGlobPos - (*(trackGlobalPos[groupIndex])), ((*(trackGlobalPos[groupIndex]))- (*(trackGlobalPos[groupIndex+1]))) ) ); ATH_MSG_VERBOSE(" belongs to group "<< groupIndex <<", distance to secant: "<< distToSecant ); if (distToSecant > m_jo_roadwidth ) { // ignore the current RIO @@ -760,7 +707,7 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex, (*RIOlistIterator) = 0; } - return StatusCode::SUCCESS; + return true; } /////////////////////////////////////////////////////////////////// @@ -768,10 +715,10 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex, /////////////////////////////////////////////////////////////////// Trk::TrackSegment* InDet::TRT_TrackExtensionTool_DAF::findSegment(const EventContext& /*ctx*/, - const Trk::TrackParameters&, + const Trk::TrackParameters *, InDet::ITRT_TrackExtensionTool::IEventData &) const { - return 0; + return nullptr; } /////////////////////////////////////////////////////////////////// // Methods for track extension to TRT for pixles+sct tracks @@ -783,5 +730,5 @@ InDet::TRT_TrackExtensionTool_DAF::newTrack(const EventContext& /*ctx*/, const Trk::Track&, InDet::ITRT_TrackExtensionTool::IEventData &) const { - return 0; + return nullptr; } diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h index c5e03a4be1c3..04bb5787fe87 100755 --- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h +++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration */ ///////////////////////////////////////////////////////////////////////////////// @@ -78,12 +78,12 @@ namespace InDet { virtual std::vector<const Trk::MeasurementBase*>& extendTrack (const EventContext& ctx, - const Trk::TrackParameters&, + const Trk::TrackParameters *, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override; virtual Trk::TrackSegment* findSegment (const EventContext& ctx, - const Trk::TrackParameters&, + const Trk::TrackParameters *, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override; virtual Trk::Track* newTrack diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h index a1eccb56f266..455dad7a8e64 100755 --- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h +++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration */ ///////////////////////////////////////////////////////////////////////////////// @@ -75,9 +75,9 @@ namespace InDet{ virtual std::vector<const Trk::MeasurementBase*>& extendTrack (const EventContext& ctx, const Trk::Track&,InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override; virtual std::vector<const Trk::MeasurementBase*>& extendTrack - (const EventContext& ctx, const Trk::TrackParameters&,InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override; + (const EventContext& ctx, const Trk::TrackParameters *,InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override; virtual Trk::TrackSegment* findSegment - (const EventContext& ctx, const Trk::TrackParameters&, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override; + (const EventContext& ctx, const Trk::TrackParameters *, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override; virtual Trk::Track* newTrack (const EventContext& ctx, const Trk::Track&, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override; virtual std::unique_ptr<InDet::ITRT_TrackExtensionTool::IEventData> newEvent(const EventContext& ctx) const override; @@ -111,7 +111,7 @@ namespace InDet{ std::vector<const Trk::MeasurementBase*>& extendTrackFromParameters (const EventContext& ctx, - const Trk::TrackParameters&, + const Trk::TrackParameters *, InDet::TRT_TrackExtensionTool_xk::EventData &event_data) const; /////////////////////////////////////////////////////////////////// @@ -156,7 +156,7 @@ namespace InDet{ void magneticFieldInit(); StatusCode magneticFieldInit(IOVSVC_CALLBACK_ARGS); bool isGoodExtension(const EventContext& ctx, - const Trk::TrackParameters&, + const Trk::TrackParameters *, InDet::TRT_TrackExtensionTool_xk::EventData &event_data) const; bool numberPIXandSCTclustersCut(const Trk::Track&) const; diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx index be35916d7c51..4fcc0deff8ef 100755 --- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx +++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration */ /////////////////////////////////////////////////////////////////// @@ -264,7 +264,7 @@ InDet::TRT_TrackExtensionToolCosmics::extendTrack(const EventContext& ctx, } if(Tr.perigeeParameters()) { - return extendTrack(ctx, *Tr.perigeeParameters(),event_data); + return extendTrack(ctx, Tr.perigeeParameters(),event_data); } event_data.m_measurement.clear(); return event_data.m_measurement; @@ -397,7 +397,7 @@ class tp_sort_cosmics{ std::vector<const Trk::MeasurementBase*>& InDet::TRT_TrackExtensionToolCosmics::extendTrack(const EventContext& /*ctx*/, - const Trk::TrackParameters& par, + const Trk::TrackParameters * par, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const { InDet::TRT_TrackExtensionToolCosmics::EventData & @@ -412,7 +412,7 @@ InDet::TRT_TrackExtensionToolCosmics::extendTrack(const EventContext& /*ctx*/, std::vector<const Trk::TrackParameters* >* tpars_down=0; std::vector<const Trk::TrackParameters* >* tpars_up=0; - const Trk::Perigee *per=dynamic_cast<const Trk::Perigee *>(&par); + const Trk::Perigee *per=dynamic_cast<const Trk::Perigee *>(par); if (!per) { msg(MSG::FATAL)<<"Track perigee not found!"<<endmsg; return event_data.m_measurement; @@ -492,7 +492,7 @@ InDet::TRT_TrackExtensionToolCosmics::extendTrack(const EventContext& /*ctx*/, Trk::TrackSegment* InDet::TRT_TrackExtensionToolCosmics::findSegment(const EventContext& /*ctx*/, - const Trk::TrackParameters&, + const Trk::TrackParameters *, InDet::ITRT_TrackExtensionTool::IEventData &) const { return NULL; diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx index 1e5afc0595ad..67f5de99ba8f 100755 --- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx +++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration */ /////////////////////////////////////////////////////////////////// @@ -18,9 +18,28 @@ #include "InDetRecToolInterfaces/ITrtDriftCircleCutTool.h" #include "TrkRIO_OnTrack/RIO_OnTrack.h" #include "InDetPrepRawData/SCT_Cluster.h" +#include "TrkTrack/Track.h" +#include "TrkTrack/TrackStateOnSurface.h" +#include <array> #include <list> #include <iostream> +namespace{ + constexpr size_t MAX_ROAD_SIZE(399); + + std::list<const Trk::Surface*> + listOfSurfacesFromVectorOfElements(std::vector<const InDetDD::TRT_BaseElement*> & v){ + size_t roadsize{0}; + std::list<const Trk::Surface*> surfaces; + for(const auto &pThisElement: v) { + surfaces.emplace_back(&(pThisElement->surface())); + if(++roadsize==MAX_ROAD_SIZE) break; + } + return surfaces; + } + +} + /////////////////////////////////////////////////////////////////// // Constructor /////////////////////////////////////////////////////////////////// @@ -85,16 +104,12 @@ InDet::TRT_TrackExtensionTool_xk::~TRT_TrackExtensionTool_xk() StatusCode InDet::TRT_TrackExtensionTool_xk::initialize() { - StatusCode sc = AlgTool::initialize(); - // Get tTools servise + // Get tTools service // IToolSvc* toolSvc; - if ((sc=service("ToolSvc", toolSvc)).isFailure()) { - msg(MSG::FATAL)<<"Toll service not found !"<<endmsg; - return StatusCode::FAILURE; - } - + ATH_CHECK(service("ToolSvc", toolSvc)); + // Get magnetic field service // if(m_fieldmode != "NoField" ) { @@ -107,66 +122,36 @@ StatusCode InDet::TRT_TrackExtensionTool_xk::initialize() // Get RIO_OnTrack creator with drift time information // - if(m_riontrackD.retrieve().isFailure()) { - msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_riontrackD <<endmsg; - return StatusCode::FAILURE; - } else { - msg(MSG::INFO) << "Retrieved tool " << m_riontrackD << endmsg; - } - + ATH_CHECK(m_riontrackD.retrieve()); + ATH_MSG_INFO( "Retrieved tool " << m_riontrackD); + // Get RIO_OnTrack creator without drift time information // - if(m_riontrackN.retrieve().isFailure()) { - msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_riontrackN <<endmsg; - return StatusCode::FAILURE; - } else { - msg(MSG::INFO) << "Retrieved tool " << m_riontrackN << endmsg; - } + ATH_CHECK(m_riontrackN.retrieve()); + ATH_MSG_INFO("Retrieved tool " << m_riontrackN ) ; // Get detector elements road maker tool // - if(m_roadtool.retrieve().isFailure()) { - msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_roadtool <<endmsg; - return StatusCode::FAILURE; - } else { - msg(MSG::INFO) << "Retrieved tool " << m_roadtool << endmsg; - } + ATH_CHECK(m_roadtool.retrieve()); + ATH_MSG_INFO( "Retrieved tool " << m_roadtool); // Get propagator tool // - if(m_proptool.retrieve().isFailure()) { - msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_proptool <<endmsg; - return StatusCode::FAILURE; - } else { - msg(MSG::INFO) << "Retrieved tool " << m_proptool << endmsg; - } + ATH_CHECK(m_proptool.retrieve()); + ATH_MSG_INFO( "Retrieved tool " << m_proptool); // Get updator tool // - if(m_updatortool.retrieve().isFailure()) { - msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_updatortool <<endmsg; - return StatusCode::FAILURE; - } else { - msg(MSG::INFO) << "Retrieved tool " << m_updatortool << endmsg; - } + ATH_CHECK(m_updatortool.retrieve()); + ATH_MSG_INFO("Retrieved tool " << m_updatortool); // Get segment selector tool // - if(m_selectortool.retrieve().isFailure()) { - msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_selectortool <<endmsg; - return StatusCode::FAILURE; - } else { - msg(MSG::INFO) << "Retrieved tool " << m_selectortool << endmsg; - } - - + ATH_CHECK(m_selectortool.retrieve()); + ATH_MSG_INFO("Retrieved tool " << m_selectortool); // TRT - if (detStore()->retrieve(m_trtid,"TRT_ID").isFailure()) { - msg(MSG::FATAL) << "Could not get TRT ID helper" << endmsg; - return StatusCode::FAILURE; - } - + ATH_CHECK(detStore()->retrieve(m_trtid,"TRT_ID")); //Initialize container ATH_CHECK(m_trtname.initialize()); @@ -174,7 +159,7 @@ StatusCode InDet::TRT_TrackExtensionTool_xk::initialize() // Get output print level // m_outputlevel = msg().level()-MSG::DEBUG; - return sc; + return StatusCode::SUCCESS; } /////////////////////////////////////////////////////////////////// @@ -183,7 +168,7 @@ StatusCode InDet::TRT_TrackExtensionTool_xk::initialize() StatusCode InDet::TRT_TrackExtensionTool_xk::finalize() { - StatusCode sc = AlgTool::finalize(); return sc; + return StatusCode::SUCCESS; } /////////////////////////////////////////////////////////////////// @@ -204,63 +189,37 @@ MsgStream& InDet::TRT_TrackExtensionTool_xk::dump( MsgStream& out ) const MsgStream& InDet::TRT_TrackExtensionTool_xk::dumpConditions( MsgStream& out ) const { - int n = 64-m_proptool.type().size(); - std::string s1; for(int i=0; i<n; ++i) s1.append(" "); s1.append("|"); - n = 64-m_updatortool.type().size(); - std::string s10; for(int i=0; i<n; ++i) s10.append(" "); s10.append("|"); - - std::string fieldmode[9] ={"NoField" ,"ConstantField","SolenoidalField", + auto pad = [](const std::string & s)->std::string{ + std::string s1(s.size(),' '); + s1+="|"; + return s + s1 +"\n"; + }; + const std::array<std::string,9> fieldmode{"NoField" ,"ConstantField","SolenoidalField", "ToroidalField" ,"Grid3DField" ,"RealisticField" , "UndefinedField","AthenaField" , "?????" }; - int mode = m_fieldprop.magneticFieldMode(); if(mode<0 || mode>8 ) mode = 8; - - n = 64-fieldmode[mode].size(); - std::string s3; for(int i=0; i<n; ++i) s3.append(" "); s3.append("|"); - n = 64-m_roadtool.type().size(); - std::string s6; for(int i=0; i<n; ++i) s6.append(" "); s6.append("|"); - n = 64-m_trtname.key().size(); - std::string s7; for(int i=0; i<n; ++i) s7.append(" "); s7.append("|"); - n = 64-m_riontrackD.type().size(); - std::string s8; for(int i=0; i<n; ++i) s8.append(" "); s8.append("|"); - n = 64-m_riontrackN.type().size(); - std::string s9; for(int i=0; i<n; ++i) s9.append(" "); s9.append("|"); - - out<<"|----------------------------------------------------------------------" - <<"---------------------|" - <<std::endl; - out<<"| TRT container | "<<m_trtname.key() <<s7 <<std::endl; - out<<"| Tool for propagation | "<<m_proptool .type()<<s1 <<std::endl; - out<<"| Tool for updator | "<<m_updatortool .type()<<s10<<std::endl; - out<<"| Tool for rio on trackD | "<<m_riontrackD.type()<<s8 <<std::endl; - out<<"| Tool for rio on trackN | "<<m_riontrackN.type()<<s9 <<std::endl; - out<<"| Tool for road builder | "<<m_roadtool .type()<<s6 <<std::endl; - out<<"| Magnetic field mode | "<<fieldmode[mode]<<s3<<std::endl; - out<<"| Segments find mode | " - <<std::setw(12)<<m_segmentFindMode - <<" |"<<std::endl; - out<<"| TRT road half width (mm)| " - <<std::setw(12)<<std::setprecision(5)<<m_roadwidth - <<" |"<<std::endl; - out<<"| Min number DriftCircles | " - <<std::setw(12)<<m_minNumberDCs - <<" |"<<std::endl; - out<<"| Use drift time ? | " - <<std::setw(12)<<m_usedriftrad - <<" |"<<std::endl; - out<<"| Z vertex half width | " - <<std::setw(12)<<m_zVertexWidth - <<" |"<<std::endl; - out<<"| Scalefactor hit error | " - <<std::setw(12)<<m_scale_error - <<" |"<<std::endl; - out<<"| Max impact parameter | " - <<std::setw(12)<<m_impact - <<" |"<<std::endl; - out<<"|----------------------------------------------------------------------" - <<"---------------------|" - <<std::endl; + std::string lineSeparator(90,'-'); + lineSeparator = "|" + lineSeparator + "|\n"; + const auto & w12 = std::setw(12); + const auto & sp5 = std::setprecision(5); + const std::string spaces = " |\n"; + out<< lineSeparator; + out<<"| TRT container | "<< pad(m_trtname.key()); + out<<"| Tool for propagation | "<< pad(m_proptool.type()); + out<<"| Tool for updator | "<< pad(m_updatortool.type()); + out<<"| Tool for rio on trackD | "<< pad(m_riontrackD.type()); + out<<"| Tool for rio on trackN | "<< pad(m_riontrackN.type()); + out<<"| Tool for road builder | "<< pad(m_roadtool.type()); + out<<"| Magnetic field mode | "<< pad(fieldmode[mode]); + out<<"| Segments find mode | "<< w12 << m_segmentFindMode << spaces; + out<<"| TRT road half width (mm)| "<< w12 << sp5<< m_roadwidth << spaces; + out<<"| Min number DriftCircles | "<< w12 << m_minNumberDCs << spaces; + out<<"| Use drift time ? | "<< w12 << m_usedriftrad << spaces; + out<<"| Z vertex half width | "<< w12 << m_zVertexWidth << spaces; + out<<"| Scalefactor hit error | "<< w12 << m_scale_error <<spaces; + out<<"| Max impact parameter | "<< w12 << m_impact <<spaces; + out<< lineSeparator; return out; } @@ -332,21 +291,20 @@ InDet::TRT_TrackExtensionTool_xk::newEvent(const EventContext& ctx) const ? m_fieldprop : Trk::MagneticFieldProperties(Trk::NoField )); - std::unique_ptr<EventData> event_data(new EventData(trtcontainer.cptr(), m_maxslope)); + auto event_data = std::make_unique<EventData>(EventData(trtcontainer.cptr(), m_maxslope)); event_data->m_trajectory.set(fieldprop, fieldCondObj); event_data->m_trajectory.set (m_trtid, - &(*m_proptool), - &(*m_updatortool), - &(*m_riontrackD), - &(*m_riontrackN), + m_proptool.get(), + m_updatortool.get(), + m_riontrackD.get(), + m_riontrackN.get(), m_roadwidth, m_zVertexWidth, m_impact, m_scale_error, m_minTRTSegmentpT); event_data->m_measurement.reserve(200); - - return std::unique_ptr<InDet::ITRT_TrackExtensionTool::IEventData>(event_data.release()); + return event_data; } /////////////////////////////////////////////////////////////////// @@ -360,25 +318,17 @@ InDet::TRT_TrackExtensionTool_xk::extendTrack(const EventContext& ctx, { InDet::TRT_TrackExtensionTool_xk::EventData & event_data=InDet::TRT_TrackExtensionTool_xk::EventData::getPrivateEventData(virt_event_data); - event_data.m_measurement.clear(); - - const DataVector<const Trk::TrackStateOnSurface>* - tsos = Tr.trackStateOnSurfaces(); - - const Trk::TrackParameters* - par = (*(tsos->rbegin()))->trackParameters(); if(!par ) return event_data.m_measurement; - const Trk::TrackParameters* - parb = (*(tsos->begin()))->trackParameters(); - - + const DataVector<const Trk::TrackStateOnSurface>* tsos = Tr.trackStateOnSurfaces(); + const Trk::TrackParameters* par = tsos->back()->trackParameters(); //tsos owns this + if(!par ) return event_data.m_measurement; + const Trk::TrackParameters* parb = tsos->front()->trackParameters(); //tsos owns this if(parb && par!=parb) { - const Amg::Vector3D& g1 = par ->position(); const Amg::Vector3D& g2 = parb->position(); if((g2.x()*g2.x()+g2.y()*g2.y()) > (g1.x()*g1.x()+g1.y()*g1.y())) par=parb; } - return extendTrackFromParameters(ctx, *par, event_data); + return extendTrackFromParameters(ctx, par, event_data); } /////////////////////////////////////////////////////////////////// @@ -387,7 +337,7 @@ InDet::TRT_TrackExtensionTool_xk::extendTrack(const EventContext& ctx, std::vector<const Trk::MeasurementBase*>& InDet::TRT_TrackExtensionTool_xk::extendTrack(const EventContext& ctx, - const Trk::TrackParameters& par, + const Trk::TrackParameters * par, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const { InDet::TRT_TrackExtensionTool_xk::EventData & @@ -398,7 +348,7 @@ InDet::TRT_TrackExtensionTool_xk::extendTrack(const EventContext& ctx, std::vector<const Trk::MeasurementBase*>& InDet::TRT_TrackExtensionTool_xk::extendTrackFromParameters(const EventContext& ctx, - const Trk::TrackParameters& par, + const Trk::TrackParameters * par, InDet::TRT_TrackExtensionTool_xk::EventData &event_data) const { event_data.m_measurement.clear(); @@ -412,15 +362,15 @@ InDet::TRT_TrackExtensionTool_xk::extendTrackFromParameters(const EventContext& Trk::TrackSegment* InDet::TRT_TrackExtensionTool_xk::findSegment(const EventContext& ctx, - const Trk::TrackParameters& par, + const Trk::TrackParameters * par, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const { InDet::TRT_TrackExtensionTool_xk::EventData & event_data=InDet::TRT_TrackExtensionTool_xk::EventData::getPrivateEventData(virt_event_data); int nCut = m_minNumberDCs; - if(m_parameterization) {nCut = m_selectortool->minNumberDCs(&par); if(nCut<m_minNumberDCs) nCut=m_minNumberDCs;} - + if(m_parameterization) {nCut = m_selectortool->minNumberDCs(par); + if(nCut<m_minNumberDCs) nCut=m_minNumberDCs;} // Get AtlasFieldCache MagField::AtlasFieldCache fieldCache; @@ -429,87 +379,75 @@ InDet::TRT_TrackExtensionTool_xk::findSegment(const EventContext& ctx, const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; if (fieldCondObj == nullptr) { ATH_MSG_ERROR("InDet::TRT_TrackExtensionTool_xk::findSegment: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key()); - return 0; + return nullptr; } fieldCondObj->getInitializedCache (fieldCache); - // TRT detector elements road builder // - std::vector<const InDetDD::TRT_BaseElement*> DE; - m_roadtool->detElementsRoad(ctx, fieldCache, par, Trk::alongMomentum,DE); + std::vector<const InDetDD::TRT_BaseElement*> detectorElements; + m_roadtool->detElementsRoad(ctx, fieldCache, *par, Trk::alongMomentum,detectorElements); - if(int(DE.size())< nCut) return 0; + if(int(detectorElements.size())< nCut) return nullptr; // Array pointers to surface preparation // - std::list<const Trk::Surface*> surfaces; - int roadsize = 0; - std::vector<const InDetDD::TRT_BaseElement*>::iterator d,de=DE.end(); - for(d=DE.begin(); d!=de; ++d) { - surfaces.push_back(&(*d)->surface()); if(++roadsize==399) break; - } + auto surfaces = listOfSurfacesFromVectorOfElements(detectorElements); // Global position on surfaces production // - Trk::PatternTrackParameters Tp; if(!Tp.production(&par)) return 0; + Trk::PatternTrackParameters Tp; + if(!Tp.production(par)) return nullptr; std::list< std::pair<Amg::Vector3D,double> > gpos; m_proptool->globalPositions(ctx, Tp, surfaces, gpos, m_fieldprop); // Initiate trajectory // - - event_data.m_trajectory.initiateForTRTSeed(gpos,DE,event_data.m_trtcontainer,Tp); - - if(event_data.m_trajectory.naElements() < nCut) return 0; + event_data.m_trajectory.initiateForTRTSeed(gpos,detectorElements,event_data.m_trtcontainer,Tp); + if(event_data.m_trajectory.naElements() < nCut) return nullptr; event_data.m_maxslope = .0002 ; - if(event_data.m_trajectory.isFirstElementBarrel()) { - if(m_usedriftrad) event_data.m_trajectory.trackFindingWithDriftTime (event_data.m_maxslope); else event_data.m_trajectory.trackFindingWithoutDriftTime(event_data.m_maxslope); - if(!event_data.m_trajectory.searchStartStop()) {return 0;} - } - else { - + if(!event_data.m_trajectory.searchStartStop()) {return nullptr;} + } else { event_data.m_trajectory.trackFindingWithoutDriftTime(event_data.m_maxslope); - if(!event_data.m_trajectory.searchStartStop()) { return 0;} + if(!event_data.m_trajectory.searchStartStop()) { return nullptr;} event_data.m_trajectory.radiusCorrection(); if(m_usedriftrad) event_data.m_trajectory.trackFindingWithDriftTimeBL (event_data.m_maxslope); else event_data.m_trajectory.trackFindingWithoutDriftTimeBL(event_data.m_maxslope); - if(!event_data.m_trajectory.searchStartStop()) { return 0;} + if(!event_data.m_trajectory.searchStartStop()) { return nullptr;} } // Track associate with clusters and holes // event_data.m_trajectory.buildTrajectoryForTRTSeed(m_usedriftrad); - event_data.m_maxslope = m_maxslope; // Trajectory quality test // int nc = event_data.m_trajectory.nclusters(); int nh = event_data.m_trajectory.nholes (); - if( nc < nCut || (1000*nc) < (700*(nc+nh)) ) return 0; + if( nc < nCut || (1000*nc) < (700*(nc+nh)) ) return nullptr; if (m_segmentFindMode==0) { if(!event_data.m_trajectory.trackParametersEstimationForPerigeeWithVertexConstraint()) - return 0; + return nullptr; } else if(m_segmentFindMode==1) { if(!event_data.m_trajectory.trackParametersEstimationForFirstPointWithVertexConstraint()) - return 0; + return nullptr; } else if(m_segmentFindMode==2) { if(!event_data.m_trajectory.trackParametersEstimationForFirstPoint()) - return 0; + return nullptr; } else { if(!event_data.m_trajectory.fitter()) - return 0; + return nullptr; } - if(event_data.m_trajectory.nclusters() < nCut) return 0; + if(event_data.m_trajectory.nclusters() < nCut) return nullptr; // Trk::TrackSegment production // @@ -517,14 +455,14 @@ InDet::TRT_TrackExtensionTool_xk::findSegment(const EventContext& ctx, } /////////////////////////////////////////////////////////////////// -// Test possiblity extend track to TRT for pixles+sct tracks +// Test possiblity extend track to TRT for pixels+sct tracks /////////////////////////////////////////////////////////////////// -bool InDet::TRT_TrackExtensionTool_xk::isGoodExtension(const EventContext& ctx, - const Trk::TrackParameters& par, +bool +InDet::TRT_TrackExtensionTool_xk::isGoodExtension(const EventContext& ctx, + const Trk::TrackParameters * par, InDet::TRT_TrackExtensionTool_xk::EventData &event_data) const { - // Get AtlasFieldCache MagField::AtlasFieldCache fieldCache; @@ -532,36 +470,29 @@ bool InDet::TRT_TrackExtensionTool_xk::isGoodExtension(const EventContext& ctx, const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; if (fieldCondObj == nullptr) { ATH_MSG_ERROR("InDet::TRT_TrackExtensionTool_xk::findSegment: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key()); - return 0; + return false; } fieldCondObj->getInitializedCache (fieldCache); - - // TRT detector elements road builder // - std::vector<const InDetDD::TRT_BaseElement*> DE; - m_roadtool->detElementsRoad(ctx, fieldCache, par,Trk::alongMomentum,DE); - if(int(DE.size()) < m_minNumberDCs) return false; - + std::vector<const InDetDD::TRT_BaseElement*> detectorElements; + m_roadtool->detElementsRoad(ctx, fieldCache, *par,Trk::alongMomentum,detectorElements); + if(int(detectorElements.size()) < m_minNumberDCs) return false; // Array pointers to surface preparation // - std::list<const Trk::Surface*> surfaces; - int roadsize = 0; - std::vector<const InDetDD::TRT_BaseElement*>::iterator d,de=DE.end(); - for(d=DE.begin(); d!=de; ++d) { - surfaces.push_back(&(*d)->surface()); if(++roadsize==399) break; - } - + auto surfaces = listOfSurfacesFromVectorOfElements(detectorElements); + // Global position on surfaces production // - Trk::PatternTrackParameters Tp; if(!Tp.production(&par)) return false; + Trk::PatternTrackParameters Tp; + if(!Tp.production(par)) return false; std::list< std::pair<Amg::Vector3D,double> > gpos; m_proptool->globalPositions(ctx, Tp,surfaces,gpos,m_fieldprop); // Initiate trajectory // - event_data.m_trajectory.initiateForPrecisionSeed(gpos,DE,event_data.m_trtcontainer,Tp); + event_data.m_trajectory.initiateForPrecisionSeed(gpos,detectorElements,event_data.m_trtcontainer,Tp); if(event_data.m_trajectory.naElements() < m_minNumberDCs) return false; // Track finding @@ -584,22 +515,24 @@ bool InDet::TRT_TrackExtensionTool_xk::isGoodExtension(const EventContext& ctx, // and new track production /////////////////////////////////////////////////////////////////// -Trk::Track* InDet::TRT_TrackExtensionTool_xk::newTrack(const EventContext& ctx, - const Trk::Track& Tr, - InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const +Trk::Track* +InDet::TRT_TrackExtensionTool_xk::newTrack(const EventContext& ctx, + const Trk::Track& Tr, + InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const { InDet::TRT_TrackExtensionTool_xk::EventData & event_data=InDet::TRT_TrackExtensionTool_xk::EventData::getPrivateEventData(virt_event_data); - const DataVector<const Trk::TrackStateOnSurface>* - tsos = Tr.trackStateOnSurfaces(); + const DataVector<const Trk::TrackStateOnSurface>* tsos = Tr.trackStateOnSurfaces(); // Test conditions to start track extension to TRT // - const Trk::TrackParameters* - pe = (*(tsos->rbegin()))->trackParameters(); if(!pe) return 0; if(!pe->covariance()) return 0; - const Trk::TrackParameters* - pb = (*(tsos->begin ()))->trackParameters(); if(!pb) return 0; if(!pb->covariance()) return 0; + const Trk::TrackParameters* pe = tsos->back()->trackParameters(); + if(!pe) return 0; + if(!pe->covariance()) return 0; + const Trk::TrackParameters* pb = tsos->front()->trackParameters(); + if(!pb) return 0; + if(!pb->covariance()) return 0; // Number PIX and SCT clusters cuts // @@ -607,7 +540,7 @@ Trk::Track* InDet::TRT_TrackExtensionTool_xk::newTrack(const EventContext& ctx, // Test possibility extend track and new track production // - if(isGoodExtension(ctx, *pe,event_data)) return event_data.m_trajectory.convert(Tr); + if(isGoodExtension(ctx, pe,event_data)) return event_data.m_trajectory.convert(Tr); return 0; } @@ -615,20 +548,15 @@ Trk::Track* InDet::TRT_TrackExtensionTool_xk::newTrack(const EventContext& ctx, // Number of SCT clusters test for start extension /////////////////////////////////////////////////////////////////// -bool InDet::TRT_TrackExtensionTool_xk::numberPIXandSCTclustersCut(const Trk::Track& Tr) const +bool +InDet::TRT_TrackExtensionTool_xk::numberPIXandSCTclustersCut(const Trk::Track& Tr) const { if(m_minNumberSCT <=0 && m_minNumberPIX <=0) return true; - - const DataVector<const Trk::TrackStateOnSurface>* - tsos = Tr.trackStateOnSurfaces(); - - DataVector<const Trk::TrackStateOnSurface>::const_iterator - s = tsos->begin(), se = tsos->end(); - + const DataVector<const Trk::TrackStateOnSurface>*tsos = Tr.trackStateOnSurfaces(); + DataVector<const Trk::TrackStateOnSurface>::const_iterator s = tsos->begin(), se = tsos->end(); int npix = 0; int nsct = 0; for(; s!=se; ++s) { - if((*s)->type(Trk::TrackStateOnSurface::Measurement)) { const Trk::MeasurementBase* mb = (*s)->measurementOnTrack(); if(!mb) continue; @@ -638,8 +566,8 @@ bool InDet::TRT_TrackExtensionTool_xk::numberPIXandSCTclustersCut(const Trk::Tra if(!rd) continue; const InDet::SiCluster* si = dynamic_cast<const InDet::SiCluster*>(rd); if(si) { - if(dynamic_cast<const InDet::SCT_Cluster*>(si)) ++nsct; - else ++npix; + if(dynamic_cast<const InDet::SCT_Cluster*>(si)) ++nsct; + else ++npix; } else return false; } diff --git a/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/src/TRT_TrackSegmentsMaker_ATLxk.cxx b/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/src/TRT_TrackSegmentsMaker_ATLxk.cxx index 70312a4e196f..d496feca36f1 100755 --- a/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/src/TRT_TrackSegmentsMaker_ATLxk.cxx +++ b/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/src/TRT_TrackSegmentsMaker_ATLxk.cxx @@ -17,6 +17,7 @@ #include "TrkSurfaces/CylinderBounds.h" #include "TrkSurfaces/RectangleBounds.h" #include "TrkSurfaces/DiscBounds.h" +#include "TrkEventPrimitives/FitQuality.h" #include "GeoModelInterfaces/IGeoModelTool.h" #include "InDetRIO_OnTrack/TRT_DriftCircleOnTrack.h" #include "TRT_ReadoutGeometry/TRT_Numerology.h" @@ -215,7 +216,7 @@ InDet::TRT_TrackSegmentsMaker_ATLxk::newEvent(const EventContext &ctx) const int ns = m_trtid->straw((*c)->identify()); const Amg::Vector3D& sc = (*c)->detectorElement()->strawCenter(ns); - float Fs = atan2(sc.y(),sc.x()); if(Fs<0.) Fs+=pi2; + float Fs = std::atan2(sc.y(),sc.x()); if(Fs<0.) Fs+=pi2; event_data->m_circles[n].set((*c),Fs,ad); // Loop through all dz/dr for given cluster @@ -299,7 +300,7 @@ InDet::TRT_TrackSegmentsMaker_ATLxk::newRegion int ns = m_trtid->straw((*c)->identify()); const Amg::Vector3D& sc = (*c)->detectorElement()->strawCenter(ns); - float Fs = atan2(sc.y(),sc.x()); if(Fs<0.) Fs+=pi2; + float Fs = std::atan2(sc.y(),sc.x()); if(Fs<0.) Fs+=pi2; event_data->m_circles[n].set((*c),Fs,ad); // Loop through all dz/dr for given cluster @@ -694,10 +695,10 @@ void InDet::TRT_TrackSegmentsMaker_ATLxk::findLocaly(const EventContext &ctx, double pin = 1./(pT*std::sqrt((1.+condData.m_dzdr[ndzdr]*condData.m_dzdr[ndzdr]))); Amg::Vector3D PSV(0.,0.,0.); Trk::PerigeeSurface PS(PSV); - auto Tp = PS.createUniqueTrackParameters(0.,0.,fm,atan2(1.,condData.m_dzdr[ndzdr]),pin,0); + auto Tp = PS.createUniqueTrackParameters(0.,0.,fm, std::atan2(1.,condData.m_dzdr[ndzdr]),pin,0); ++event_data.m_nlocal; - Trk::TrackSegment* seg = m_extensionTool->findSegment(ctx, *Tp, *(event_data.m_extEventData) ); + Trk::TrackSegment* seg = m_extensionTool->findSegment(ctx, Tp.get(), *(event_data.m_extEventData) ); if(!seg) return; // Momentum cut -- GitLab