ATLAS Offline Software
Loading...
Searching...
No Matches
Trk::PRDtoTrackMapTool Class Referencefinal

Concrete Implementation of the IPRD_AssociationTool interface. More...

#include <PRDtoTrackMapTool.h>

Inheritance diagram for Trk::PRDtoTrackMapTool:
Collaboration diagram for Trk::PRDtoTrackMapTool:

Classes

class  PRDtoTrackMap

Public Member Functions

 PRDtoTrackMapTool (const std::string &, const std::string &, const IInterface *)
virtual ~PRDtoTrackMapTool ()=default
virtual StatusCode initialize () override
virtual std::unique_ptr< Trk::PRDtoTrackMapcreatePRDtoTrackMap () const override
virtual std::unique_ptr< Trk::PRDtoTrackMapreduceToStorableMap (std::unique_ptr< Trk::PRDtoTrackMap > &&obj_in) const override
StatusCode addPRDs (Trk::PRDtoTrackMap &virt_prd_to_track_map, const Trk::Track &track) const override
 add the PRDs from this track to the store
virtual std::vector< const PrepRawData * > getPrdsOnTrack (Trk::PRDtoTrackMap &virt_prd_to_track_map, const Track &track) const override
 returns a vector of PRDs belonging to the passed track.
virtual IPRDtoTrackMapTool::TrackSet findConnectedTracks (Trk::PRDtoTrackMap &virt_prd_to_track_map, const Track &track) const override

Protected Member Functions

void ensureType (Trk::PRDtoTrackMap &virt_prd_to_track_map) const

Private Attributes

ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}

Detailed Description

Concrete Implementation of the IPRD_AssociationTool interface.

Definition at line 24 of file PRDtoTrackMapTool.h.

Constructor & Destructor Documentation

◆ PRDtoTrackMapTool()

Trk::PRDtoTrackMapTool::PRDtoTrackMapTool ( const std::string & t,
const std::string & n,
const IInterface * p )

Definition at line 16 of file PRDtoTrackMapTool.cxx.

19 : base_class(t,n,p)
20{
21}

◆ ~PRDtoTrackMapTool()

virtual Trk::PRDtoTrackMapTool::~PRDtoTrackMapTool ( )
virtualdefault

Member Function Documentation

◆ addPRDs()

StatusCode Trk::PRDtoTrackMapTool::addPRDs ( Trk::PRDtoTrackMap & virt_prd_to_track_map,
const Trk::Track & track ) const
override

add the PRDs from this track to the store

Parameters
trackall PRDs from 'track' will be added to PRDtoTrackMapTool's internal store.

Definition at line 47 of file PRDtoTrackMapTool.cxx.

48{
49 ensureType(virt_prd_to_track_map);
50 PRDtoTrackMap &prd_to_track_map = static_cast<PRDtoTrackMap&>(virt_prd_to_track_map);
51
52 // test caching
53 PRDtoTrackMap::TrackPrepRawDataMap::const_iterator itvec = prd_to_track_map.m_trackPrepRawDataMap.find(&track);
54 if (itvec!=prd_to_track_map.m_trackPrepRawDataMap.end())
55 {
56 ATH_MSG_ERROR ("track already found in cache, should not happen");
57 return StatusCode::FAILURE;
58 }
59 // add all prds on track to map
60 std::vector< const Trk::PrepRawData* > prds = getPrdsOnTrack(prd_to_track_map, track );
61 for(const Trk::PrepRawData*a_prd : prds) {
62 if (prd_to_track_map.m_prepRawDataTrackMap.insert(std::make_pair(a_prd, &track) ) == prd_to_track_map.m_prepRawDataTrackMap.end()) {
63 ATH_MSG_ERROR ("failed to associate track to prd.");
64 }
65 }
66
67 // cache this using m_trackPrepRawDataMap
68 prd_to_track_map.m_trackPrepRawDataMap.insert( std::make_pair(&track, std::move(prds)) );
69
70 ATH_MSG_DEBUG ("Added PRDs from Track at ("<<&track<<") - map now has size: \t"<<
71 prd_to_track_map.m_prepRawDataTrackMap.size());
72 return StatusCode::SUCCESS;
73}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
void ensureType(Trk::PRDtoTrackMap &virt_prd_to_track_map) const
virtual std::vector< const PrepRawData * > getPrdsOnTrack(Trk::PRDtoTrackMap &virt_prd_to_track_map, const Track &track) const override
returns a vector of PRDs belonging to the passed track.
TrackPrepRawDataMap m_trackPrepRawDataMap
holds the PRDs associated with each Track (i.e.

◆ createPRDtoTrackMap()

std::unique_ptr< Trk::PRDtoTrackMap > Trk::PRDtoTrackMapTool::createPRDtoTrackMap ( ) const
overridevirtual

Definition at line 28 of file PRDtoTrackMapTool.cxx.

28 {
29 return std::make_unique<Trk::PRDtoTrackMapTool::PRDtoTrackMap>();
30}

◆ ensureType()

void Trk::PRDtoTrackMapTool::ensureType ( Trk::PRDtoTrackMap & virt_prd_to_track_map) const
protected

Definition at line 36 of file PRDtoTrackMapTool.cxx.

37{
38 if (virt_prd_to_track_map.getType() != typeid(PRDtoTrackMapTool::PRDtoTrackMap)) {
39 ATH_MSG_FATAL( "Type mismap between tool and map. Expecting " << typeid(PRDtoTrackMap).name()
40 << " but got " << virt_prd_to_track_map.getType().name()
41 << " . The tool can only handle a map created by the same tool. ");
42 throw std::logic_error("Type mismap between tool and map");
43 }
44 assert( dynamic_cast<PRDtoTrackMap *>(&virt_prd_to_track_map) != nullptr );
45}
#define ATH_MSG_FATAL(x)
virtual const std::type_info & getType() const

◆ findConnectedTracks()

Trk::PRDtoTrackMapTool::TrackSet Trk::PRDtoTrackMapTool::findConnectedTracks ( Trk::PRDtoTrackMap & virt_prd_to_track_map,
const Track & track ) const
overridevirtual

Definition at line 77 of file PRDtoTrackMapTool.cxx.

78{
79 ensureType(virt_prd_to_track_map);
80 PRDtoTrackMap &prd_to_track_map = static_cast<PRDtoTrackMap&>(virt_prd_to_track_map);
81
82 TrackSet connectedTracks;
83
84 std::vector< const Trk::PrepRawData* > prds = getPrdsOnTrack(prd_to_track_map, track);
85 for (const Trk::PrepRawData* a_prd : prds )
86 {
87 PRDtoTrackMap::PrepRawDataTrackMapRange range = prd_to_track_map.onTracks(*a_prd);
88
89 // TODO use remove_copy_if instead.
90 for ( ; range.first!=range.second; ++(range.first) )
91 {
92 const Track* conTrack = (range.first)->second;
93 // don't copy this track!
94 if (conTrack!=&track) {
95 // this does actually not allow for double entries
96 connectedTracks.insert(conTrack);
97 ATH_MSG_VERBOSE ("Track "<<&track<<" \tshares PRD "<<a_prd<<" \twith track:"<<conTrack);
98 }
99 }
100 ATH_MSG_VERBOSE ("Added in connected tracks for PRD:"<<a_prd<<
101 "\tsize of list now:"<<connectedTracks.size());
102 }
103
104 return connectedTracks;
105}
#define ATH_MSG_VERBOSE(x)
std::pair< PrepRawDataTrackMap::iterator, PrepRawDataTrackMap::iterator > PrepRawDataTrackMapRange

◆ getPrdsOnTrack()

std::vector< const Trk::PrepRawData * > Trk::PRDtoTrackMapTool::getPrdsOnTrack ( Trk::PRDtoTrackMap & virt_prd_to_track_map,
const Track & track ) const
overridevirtual

returns a vector of PRDs belonging to the passed track.

It's basically for the convenience of users and is created purely from the passed track. i.e. there is no caching if you do it multiple times on the same track, you're being inefficient!!

Parameters
trackthis Track will be iterated through and all PrepRawData added to a vector
Returns
vector of PrepRawData* belonging to 'track'. The PrepRawData should NOT be deleted
  • they belong to the Track (and thus the event).

Accept only non muon hits or muon precision hits

Definition at line 109 of file PRDtoTrackMapTool.cxx.

111{
112 using PRDs_t = std::vector<const Trk::PrepRawData *>;
113
114 ensureType(virt_prd_to_track_map);
115 PRDtoTrackMap &prd_to_track_map = static_cast<PRDtoTrackMap&>(virt_prd_to_track_map);
116
117 // test caching
118 PRDtoTrackMap::TrackPrepRawDataMap::const_iterator itvec = prd_to_track_map.m_trackPrepRawDataMap.find(&track);
119 if (itvec!=prd_to_track_map.m_trackPrepRawDataMap.end())
120 {
121 ATH_MSG_VERBOSE ("found track in cache, return cached PRD vector for track");
122 return itvec->second;
123 }
124
125 if (!track.measurementsOnTrack()) {
126 ATH_MSG_WARNING ("Track has no RoTs");
127 return {};
128 }
129
130 // FIXME can I do this without copying the vector?
131 /* transform(
132 track.measurementsOnTrack()->begin(),
133 track.measurementsOnTrack()->end() ,
134 back_inserter(vec),
135 bind2nd(CreatePRD_VectorFromTrack(), &track) );*/
136
137 PRDs_t vec;
138 vec.reserve(track.measurementsOnTrack()->size());
139
140 auto add_prd = [&vec, this] (const Trk::RIO_OnTrack* rot) {
141 if (!rot) return;
142 const PrepRawData* prd = rot->prepRawData();
143 if (!prd) return;
144 const Identifier rot_id = prd->identify();
146 if ( m_idHelperSvc->isMuon(rot_id) && !m_idHelperSvc->isMdt(rot_id) && !m_idHelperSvc->isMM(rot_id) && !m_idHelperSvc->issTgc(rot_id) &&
147 (!m_idHelperSvc->isCsc(rot_id) || m_idHelperSvc->measuresPhi(rot_id)) ) return;
148 vec.push_back(prd);
149 };
150 for (const MeasurementBase* meas : *track.measurementsOnTrack()) {
151 const Trk::RIO_OnTrack* rot = nullptr;
153 rot = static_cast<const RIO_OnTrack*>(meas);
154 }
155 if (rot) {
156 add_prd(rot);
157 continue;
158 }
159 const Trk::CompetingRIOsOnTrack* competingROT = nullptr;
161 competingROT = static_cast<const Trk::CompetingRIOsOnTrack*>(meas);
162 }
163 if (!competingROT) { continue;}
164 const unsigned int numROTs = competingROT->numberOfContainedROTs();
165 for( unsigned int i=0;i<numROTs;++i ){
166 const Trk::RIO_OnTrack* rot = &competingROT->rioOnTrack(i);
167 add_prd(rot);
168 }
169 }
170 ATH_MSG_DEBUG (" Getting "<<vec.size()<<" PRDs from track at:"<<&track);
171
172 return vec;
173}
#define ATH_MSG_WARNING(x)
std::vector< size_t > vec
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.
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc

◆ initialize()

StatusCode Trk::PRDtoTrackMapTool::initialize ( )
overridevirtual

Definition at line 23 of file PRDtoTrackMapTool.cxx.

23 {
24 ATH_CHECK(m_idHelperSvc.retrieve());
25 return StatusCode::SUCCESS;
26}
#define ATH_CHECK
Evaluate an expression and check for errors.

◆ reduceToStorableMap()

std::unique_ptr< Trk::PRDtoTrackMap > Trk::PRDtoTrackMapTool::reduceToStorableMap ( std::unique_ptr< Trk::PRDtoTrackMap > && obj_in) const
overridevirtual

Definition at line 32 of file PRDtoTrackMapTool.cxx.

32 {
33 return std::move(obj_in);
34}

Member Data Documentation

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> Trk::PRDtoTrackMapTool::m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
private

Definition at line 63 of file PRDtoTrackMapTool.h.

63{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};

The documentation for this class was generated from the following files: