14#include "ext/functional"
26 StatusCode
sc = AlgTool::initialize();
27 if (
sc.isFailure())
return sc;
30 return StatusCode::SUCCESS;
35 if (!
m_prdToTrackMap.key().empty())
throw std::runtime_error(
"Cannot modify(addPRDs) the PRDtoTrackMap that was read from storegate!");
42 TrackPrepRawDataMap::const_iterator itvec = maps.m_trackPrepRawDataMap.find(&track);
43 if (itvec!=maps.m_trackPrepRawDataMap.end())
45 ATH_MSG_ERROR (
"track already found in cache, should not happen");
46 return StatusCode::FAILURE;
49 std::vector< const Trk::PrepRawData* > prds =
getPrdsOnTrack( maps, track );
51 maps.m_prepRawDataTrackMap.emplace(prd, &track);
55 maps.m_trackPrepRawDataMap.emplace(&track, prds);
57 ATH_MSG_DEBUG (
"Added PRDs from Track at ("<<&track<<
") - map now has size: \t"<<
58 maps.m_prepRawDataTrackMap.size());
59 return StatusCode::SUCCESS;
64 if (!
m_prdToTrackMap.key().empty())
throw std::runtime_error(
"Cannot modify(removePRDs) the PRDtoTrackMap that was read from storegate!");
78 int oldSize = maps.m_prepRawDataTrackMap.size();
81 TrackPrepRawDataMap::iterator itvec = maps.m_trackPrepRawDataMap.find(&track);
82 if (itvec==maps.m_trackPrepRawDataMap.end())
84 ATH_MSG_ERROR (
"Track not found in cache, this should not happen");
85 return StatusCode::FAILURE;
89 std::vector< const Trk::PrepRawData* > prds = itvec->second;
94 range = maps.m_prepRawDataTrackMap.equal_range(prd);
97 ConstPRD_MapIt mapIt = range.first;
98 ConstPRD_MapIt mapItEnd = range.second;
101 for ( ;mapIt!=mapItEnd; ++mapIt)
103 if ( mapIt->second==&track )
105 maps.m_prepRawDataTrackMap.erase( mapIt );
112 maps.m_trackPrepRawDataMap.erase( itvec );
114 ATH_MSG_DEBUG (
"Removed PRDs from track (" <<&track<<
") \t- map has changed "<<
115 "size from \t"<<oldSize <<
" \tto "<<maps.m_prepRawDataTrackMap.size());
116 return StatusCode::SUCCESS;
122 if (!
m_prdToTrackMap.key().empty())
throw std::runtime_error(
"findConnectedTracks not supported when using a PRDtoTrackMap from storegate.");
130 TrackSet connectedTracks;
132 std::vector< const Trk::PrepRawData* > prds =
getPrdsOnTrack(maps, track);
138 for ( ; range.first!=range.second; ++(range.first) )
140 const Track* conTrack = (range.first)->second;
142 if (conTrack!=&track) {
144 connectedTracks.insert(conTrack);
145 ATH_MSG_VERBOSE (
"Track "<<&track<<
" \tshares PRD "<<prd<<
" \twith track:"<<conTrack);
149 "\tsize of list now:"<<connectedTracks.size());
152 return connectedTracks;
156std::vector< const Trk::PrepRawData* >
159 if (!
m_prdToTrackMap.key().empty())
throw std::runtime_error(
"getPrdsOnTrack not supported when using a PRDtoTrackMap from storegate.");
164std::vector< const Trk::PrepRawData* >
168 using PRDs_t = std::vector<const PrepRawData *>;
171 TrackPrepRawDataMap::const_iterator itvec = maps.m_trackPrepRawDataMap.find(&track);
172 if (itvec!=maps.m_trackPrepRawDataMap.end())
174 ATH_MSG_VERBOSE (
"found track in cache, return cached PRD vector for track");
175 return itvec->second;
178 if (track.measurementsOnTrack()==
nullptr) {
184 vec.reserve(track.measurementsOnTrack()->size());
199 for(
unsigned int i=0;i<numROTs;++i ){
225 return maps.m_prepRawDataTrackMap.equal_range(&prd);
230 if (!
m_prdToTrackMap.key().empty())
throw std::runtime_error(
"cannot reset PRDtoTrack map when it is taken from storegate.");
231 m_maps.m_prepRawDataTrackMap.clear();
232 m_maps.m_trackPrepRawDataMap.clear();
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
std::vector< size_t > vec
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
virtual unsigned int numberOfContainedROTs() const =0
Number of RIO_OnTracks to be contained by this CompetingRIOsOnTrack.
virtual const RIO_OnTrack & rioOnTrack(unsigned int) const =0
returns the RIO_OnTrack (also known as ROT) objects depending on the integer.
This class is the pure abstract base class for all fittable tracking measurements.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
Identifier identify() const
return the identifier -extends MeasurementBase