ATLAS Offline Software
Loading...
Searching...
No Matches
InDet::InDetPRDtoTrackMapToolGangedPixels Class Reference

Concrete Implementation of the IPRD_AssociationTool interface. More...

#include <InDetPRDtoTrackMapToolGangedPixels.h>

Inheritance diagram for InDet::InDetPRDtoTrackMapToolGangedPixels:
Collaboration diagram for InDet::InDetPRDtoTrackMapToolGangedPixels:

Classes

class  PRDtoTrackMap

Public Member Functions

 InDetPRDtoTrackMapToolGangedPixels (const std::string &, const std::string &, const IInterface *)
virtual ~InDetPRDtoTrackMapToolGangedPixels ()
virtual StatusCode initialize () override
virtual StatusCode finalize () override
virtual std::unique_ptr< Trk::PRDtoTrackMapcreatePRDtoTrackMap () const override
virtual std::unique_ptr< Trk::PRDtoTrackMapreduceToStorableMap (std::unique_ptr< Trk::PRDtoTrackMap > &&obj_in) const override
virtual 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 Trk::PrepRawData * > getPrdsOnTrack (Trk::PRDtoTrackMap &virt_prd_to_track_map, const Trk::Track &track) const override
 returns a vector of PRDs belonging to the passed track.
virtual Trk::IPRDtoTrackMapTool::TrackSet findConnectedTracks (Trk::PRDtoTrackMap &virt_prd_to_track_map, const Trk::Track &track) const override
 returns set of tracks which share PRD with this one

Private Member Functions

void ensureType (Trk::PRDtoTrackMap &virt_prd_to_track_map) const

Private Attributes

SG::ReadHandleKey< PixelGangedClusterAmbiguities > m_pixelClusterAmbiguitiesMapName {this, "PixelClusterAmbiguitiesMapName", "PixelClusterAmbiguitiesMap"}
BooleanProperty m_addTRToutliers {this, "addTRToutliers", false}
 add TRT outliers in the addTrack method to avoid splits due to rejected extensions

Detailed Description

Concrete Implementation of the IPRD_AssociationTool interface.

Definition at line 20 of file InDetPRDtoTrackMapToolGangedPixels.h.

Constructor & Destructor Documentation

◆ InDetPRDtoTrackMapToolGangedPixels()

InDet::InDetPRDtoTrackMapToolGangedPixels::InDetPRDtoTrackMapToolGangedPixels ( const std::string & t,
const std::string & n,
const IInterface * p )

Definition at line 19 of file InDetPRDtoTrackMapToolGangedPixels.cxx.

22 : base_class(t,n,p)
23{ }

◆ ~InDetPRDtoTrackMapToolGangedPixels()

InDet::InDetPRDtoTrackMapToolGangedPixels::~InDetPRDtoTrackMapToolGangedPixels ( )
virtualdefault

Member Function Documentation

◆ addPRDs()

StatusCode InDet::InDetPRDtoTrackMapToolGangedPixels::addPRDs ( Trk::PRDtoTrackMap & virt_prd_to_track_map,
const Trk::Track & track ) const
overridevirtual

add the PRDs from this track to the store

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

Definition at line 79 of file InDetPRDtoTrackMapToolGangedPixels.cxx.

80{
81 ensureType(virt_prd_to_track_map);
82 PRDtoTrackMap &prd_to_track_map = static_cast<PRDtoTrackMap&>(virt_prd_to_track_map);
83 // test caching
84 Trk::PRDtoTrackMap::TrackPrepRawDataMap::const_iterator itvec = prd_to_track_map.m_trackPrepRawDataMap.find(&track);
85 if (itvec!=prd_to_track_map.m_trackPrepRawDataMap.end())
86 {
87 ATH_MSG_ERROR("track already found in cache, should not happen");
88 return StatusCode::FAILURE;
89 }
90 // get all prds on 'track'
91 std::vector< const Trk::PrepRawData* > prds = getPrdsOnTrack(prd_to_track_map, track );
92 // loop over PRD
93 for (const Trk::PrepRawData* prd : prds) {
94 prd_to_track_map.m_prepRawDataTrackMap.insert(std::make_pair(prd, &track) );
95 // test ganged ambiguity
97 const PixelCluster* pixel = static_cast<const PixelCluster*> (prd);
98 if (pixel->gangedPixel()) {
99 ATH_MSG_DEBUG( "Found ganged pixel, search for mirror" );
100 std::pair<PixelGangedClusterAmbiguities::const_iterator,
101 PixelGangedClusterAmbiguities::const_iterator> ambi = prd_to_track_map.m_gangedAmbis->equal_range(pixel);
102 for (; ambi.first != ambi.second ; ++(ambi.first) ) {
103 // add ambiguity as used by this track as well
104 if (msgLvl(MSG::DEBUG)) msg() << "Found mirror pixel, add mirror to association map" << endmsg;
105 prd_to_track_map.m_prepRawDataTrackMap.insert(std::make_pair(ambi.first->second, &track) );
106 }
107 }
108 }
109 }
110
111 // cache this using m_trackPrepRawDataMap
112 prd_to_track_map.m_trackPrepRawDataMap.insert( std::make_pair(&track, prds) );
113
114 ATH_MSG_DEBUG("Added PRDs from Track at ("<<&track<<") - map now has size: \t"
115 <<prd_to_track_map.m_prepRawDataTrackMap.size() );
116 return StatusCode::SUCCESS;
117}
#define endmsg
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
virtual std::vector< const Trk::PrepRawData * > getPrdsOnTrack(Trk::PRDtoTrackMap &virt_prd_to_track_map, const Trk::Track &track) const override
returns a vector of PRDs belonging to the passed track.
void ensureType(Trk::PRDtoTrackMap &virt_prd_to_track_map) const
TrackPrepRawDataMap m_trackPrepRawDataMap
holds the PRDs associated with each Track (i.e.
PixelCluster_v1 PixelCluster
Define the version of the pixel cluster class.
MsgStream & msg
Definition testRead.cxx:32

◆ createPRDtoTrackMap()

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

Definition at line 44 of file InDetPRDtoTrackMapToolGangedPixels.cxx.

44 {
45 std::unique_ptr<PRDtoTrackMap> prd_to_track_map( new PRDtoTrackMap(m_pixelClusterAmbiguitiesMapName ) );
46
48 << ", number of entries for this event:"
49 << (prd_to_track_map->m_gangedAmbis.isValid() ? prd_to_track_map->m_gangedAmbis->size() : -1) );
50 return std::unique_ptr<Trk::PRDtoTrackMap>(prd_to_track_map.release());
51}
SG::ReadHandleKey< PixelGangedClusterAmbiguities > m_pixelClusterAmbiguitiesMapName

◆ ensureType()

void InDet::InDetPRDtoTrackMapToolGangedPixels::ensureType ( Trk::PRDtoTrackMap & virt_prd_to_track_map) const
private

Definition at line 67 of file InDetPRDtoTrackMapToolGangedPixels.cxx.

68{
69 if (virt_prd_to_track_map.getType() != typeid(InDetPRDtoTrackMapToolGangedPixels::PRDtoTrackMap)) {
70 ATH_MSG_FATAL( "Type mismap between tool and map. Expecting " << typeid(InDetPRDtoTrackMapToolGangedPixels).name()
71 << " but got " << virt_prd_to_track_map.getType().name()
72 << " . The tool can only handle a map created by the same tool. ");
73 throw std::logic_error("Type mismap between tool and map");
74 }
75 assert( dynamic_cast<InDetPRDtoTrackMapToolGangedPixels::PRDtoTrackMap *>(&virt_prd_to_track_map) != nullptr );
76}
#define ATH_MSG_FATAL(x)
InDetPRDtoTrackMapToolGangedPixels(const std::string &, const std::string &, const IInterface *)
virtual const std::type_info & getType() const

◆ finalize()

StatusCode InDet::InDetPRDtoTrackMapToolGangedPixels::finalize ( )
overridevirtual

Definition at line 39 of file InDetPRDtoTrackMapToolGangedPixels.cxx.

40{
41 return StatusCode::SUCCESS;
42}

◆ findConnectedTracks()

Trk::IPRDtoTrackMapTool::TrackSet InDet::InDetPRDtoTrackMapToolGangedPixels::findConnectedTracks ( Trk::PRDtoTrackMap & virt_prd_to_track_map,
const Trk::Track & track ) const
overridevirtual

returns set of tracks which share PRD with this one

Parameters
trackthis Track must be known to this tool.
Returns
a set of tracks which share PRD/hits with the passed 'track'

Definition at line 121 of file InDetPRDtoTrackMapToolGangedPixels.cxx.

123{
124 ensureType(virt_prd_to_track_map);
125 PRDtoTrackMap &prd_to_track_map = static_cast<PRDtoTrackMap&>(virt_prd_to_track_map);
126
127 TrackSet connectedTracks;
128
129 std::vector< const Trk::PrepRawData* > prds = getPrdsOnTrack(virt_prd_to_track_map, track);
130 for (const Trk::PrepRawData* prd : prds) {
131 Trk::PRDtoTrackMap::ConstPrepRawDataTrackMapRange range = prd_to_track_map.onTracks(*prd);
132 // add them into the list
133 for ( ; range.first!=range.second; ++(range.first) )
134 connectedTracks.insert((range.first)->second);
135
136 // test ganged ambiguity
137
138 if (prd->type(Trk::PrepRawDataType::PixelCluster)) {
139 const PixelCluster* pixel = static_cast<const PixelCluster*> (prd);
140 if (pixel->gangedPixel()) {
141 std::pair<PixelGangedClusterAmbiguities::const_iterator,
142 PixelGangedClusterAmbiguities::const_iterator> ambi = prd_to_track_map.m_gangedAmbis->equal_range(pixel);
143 for (; ambi.first != ambi.second ; ++(ambi.first) ) {
144 range = prd_to_track_map.onTracks( *(ambi.first->second) );
145 // add them into the list
146 for ( ; range.first!=range.second; ++(range.first) )
147 connectedTracks.insert((range.first)->second);
148 }
149 }
150 }
151 }
152
153 // don't forget to remove the input track
154 connectedTracks.erase(&track);
155
156 ATH_MSG_VERBOSE("Added in connected tracks for track "<<&track
157 << "\tsize of list is "<<connectedTracks.size());
158
159 return connectedTracks;
160}
#define ATH_MSG_VERBOSE(x)
std::pair< PrepRawDataTrackMap::const_iterator, PrepRawDataTrackMap::const_iterator > ConstPrepRawDataTrackMapRange

◆ getPrdsOnTrack()

std::vector< const Trk::PrepRawData * > InDet::InDetPRDtoTrackMapToolGangedPixels::getPrdsOnTrack ( Trk::PRDtoTrackMap & virt_prd_to_track_map,
const Trk::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).

Definition at line 164 of file InDetPRDtoTrackMapToolGangedPixels.cxx.

166{
167 ensureType(virt_prd_to_track_map);
168 PRDtoTrackMap &prd_to_track_map = static_cast<PRDtoTrackMap&>(virt_prd_to_track_map);
169 using PRDs_t = std::vector<const Trk::PrepRawData *>;
170
171 // test caching
172 Trk::PRDtoTrackMap::TrackPrepRawDataMap::const_iterator itvec = prd_to_track_map.m_trackPrepRawDataMap.find(&track);
173 if (itvec!=prd_to_track_map.m_trackPrepRawDataMap.end())
174 {
175 ATH_MSG_VERBOSE("found track in cache, return cached PRD vector for track");
176 return itvec->second;
177 }
178
179 if (track.measurementsOnTrack()==nullptr) {
180 ATH_MSG_WARNING("Track has no RoTs");
181 return {}; // return vector optimization
182 }
183
184 // FIXME can I do this without copying the vector?
185 /* transform(
186 track.measurementsOnTrack()->begin(),
187 track.measurementsOnTrack()->end() ,
188 back_inserter(vec),
189 bind2nd(CreatePRD_VectorFromTrack(), &track) );*/
190
191 // output vector
192 PRDs_t vec;
193 // size it
194 vec.reserve(track.measurementsOnTrack()->size());
195
196 // get the PRDs for the measurements on track
197 DataVector<const Trk::MeasurementBase>::const_iterator it = track.measurementsOnTrack()->begin();
198 DataVector<const Trk::MeasurementBase>::const_iterator itEnd = track.measurementsOnTrack()->end();
199 for (;it!=itEnd;++it)
200 {
201 const auto *const meas{*it};
203 const Trk::RIO_OnTrack* rot = static_cast<const Trk::RIO_OnTrack*>(meas);
204 if(rot->prepRawData()) vec.push_back(rot->prepRawData());
205 }
206 }
207 ATH_MSG_DEBUG(" Getting "<<vec.size()<<" PRDs from track at:"<<&track);
208 // new mode, we add the outliers in the TRT
209 if (m_addTRToutliers) {
210 // get the PRDs for the measurements on track
211 for (const Trk::MeasurementBase* meas : *track.outliersOnTrack()){
212 // get the ROT, make sure it is not a pseudo measurement
214 const Trk::RIO_OnTrack* rot = static_cast<const Trk::RIO_OnTrack*>(meas);
215 // check if outlier is TRT ?
217 // add to the list, it is TRT
218 if(rot->prepRawData()) vec.push_back(rot->prepRawData());
219 }
220 }
221 }
222 ATH_MSG_DEBUG(" Getting "<<vec.size()<<" PRDs including TRT outlier from track at:"<<&track);
223 }
224
225 return vec;
226}
#define ATH_MSG_WARNING(x)
std::vector< size_t > vec
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
Definition DataVector.h:838
BooleanProperty m_addTRToutliers
add TRT outliers in the addTrack method to avoid splits due to rejected extensions
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
virtual bool rioType(RIO_OnTrackType::Type type) const =0
Method checking the Rio On Track type.

◆ initialize()

StatusCode InDet::InDetPRDtoTrackMapToolGangedPixels::initialize ( )
overridevirtual

Definition at line 28 of file InDetPRDtoTrackMapToolGangedPixels.cxx.

29{
30 bool has_ambi_map = m_pixelClusterAmbiguitiesMapName.initialize(!m_pixelClusterAmbiguitiesMapName.key().empty()).isSuccess();
31 if (!has_ambi_map && !m_pixelClusterAmbiguitiesMapName.key().empty()) {
32 ATH_MSG_WARNING("Could not retrieve "<< m_pixelClusterAmbiguitiesMapName.key() << " this is ok if pixel is off");
33 // @TODO introduce more robust method e.g. dummy tool if pixel is off ?
34 }
35
36 return StatusCode::SUCCESS;
37}

◆ reduceToStorableMap()

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

Definition at line 53 of file InDetPRDtoTrackMapToolGangedPixels.cxx.

53 {
54 if (obj_in->getType()!=typeid(Trk::PRDtoTrackMap)) {
55 return std::move(obj_in);
56 }
57 if (obj_in->getType()!=typeid(InDet::InDetPRDtoTrackMapToolGangedPixels)) {
58 ATH_MSG_FATAL( "Type mismap between tool and map. Expecting " << typeid(InDet::InDetPRDtoTrackMapToolGangedPixels).name()
59 << " but got " << obj_in->getType().name()
60 << " . The tool can only handle a map created by the same tool. ");
61 }
62 Trk::PRDtoTrackMap *the_obj=static_cast<PRDtoTrackMap *>(obj_in.get());
63 return std::make_unique<Trk::PRDtoTrackMap>(std::move(*the_obj));
64}

Member Data Documentation

◆ m_addTRToutliers

BooleanProperty InDet::InDetPRDtoTrackMapToolGangedPixels::m_addTRToutliers {this, "addTRToutliers", false}
private

add TRT outliers in the addTrack method to avoid splits due to rejected extensions

Definition at line 62 of file InDetPRDtoTrackMapToolGangedPixels.h.

62{this, "addTRToutliers", false};

◆ m_pixelClusterAmbiguitiesMapName

SG::ReadHandleKey<PixelGangedClusterAmbiguities> InDet::InDetPRDtoTrackMapToolGangedPixels::m_pixelClusterAmbiguitiesMapName {this, "PixelClusterAmbiguitiesMapName", "PixelClusterAmbiguitiesMap"}
private

Definition at line 59 of file InDetPRDtoTrackMapToolGangedPixels.h.

59{this, "PixelClusterAmbiguitiesMapName", "PixelClusterAmbiguitiesMap"};

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