ATLAS Offline Software
Loading...
Searching...
No Matches
TrackMatchingLookup.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef INDETTRACKPERFMON_TRACKMATCHINGLOOKUP_H
6#define INDETTRACKPERFMON_TRACKMATCHINGLOOKUP_H
7
15
19
21#include <unordered_map>
22
23// local includes
25
26namespace IDTPM {
27
31 template< typename T, typename R=T >
33
34 public:
35
37 typedef std::unordered_map< const T*, const R* > mapTtoR_t;
38 typedef std::unordered_map< const R*, std::vector<const T*> > mapRtoT_t;
39 typedef std::unordered_map< const T*, float > mapTtoDist_t;
40
42 TrackMatchingLookupBase( const std::string& anaTag_s );
43
46
49
51 unsigned getMapsSize( bool getRefN = false ) const {
52 return getRefN ? m_mapRefToTest.size() : m_mapTestToRef.size(); }
53
55 const R* getMatchedRef( const T& t ) const;
56
58 const std::vector<const T*>& getMatchedTest( const R& r ) const;
59
61 float getDist( const T& t ) const;
62
64 bool isTestInMaps( const T& t ) const;
65
67 bool isRefInMaps( const R& r ) const;
68
70 StatusCode updateMaps( const T& t, const R& r, float dist = 0. );
71
73 void clearMaps();
74
76 std::string printMaps( const std::vector<const T*>& testVec,
77 const std::vector<const R*>& refVec,
78 std::string_view chainRoiName_s ) const;
79
80 private:
81
83 std::string m_anaTag;
84
87
90
93
95 std::vector<const T*> m_nullTest{};
96
97 }; // class TrackMatchingLookupBase
98
99
104 public TrackMatchingLookupBase< xAOD::TrackParticle >,
105 public virtual ITrackMatchingLookup {
106
107 public:
108
110 TrackMatchingLookup_trk( const std::string& anaTag_s ) :
111 TrackMatchingLookupBase< xAOD::TrackParticle >( anaTag_s ) {
112 anaTag( anaTag_s );
113 }
114
117
119 virtual unsigned getNmatches( bool getRefN ) const override { return getMapsSize( getRefN ); }
120
123 const xAOD::TrackParticle& t ) const override { return getMatchedRef(t); }
124
126 const xAOD::TruthParticle& ) const override {
127 ATH_MSG_WARNING( "getMatchedRefTrack: Truth->Track disabled" );
128 return nullptr;
129 }
130
132 const xAOD::TrackParticle& ) const override {
133 ATH_MSG_WARNING( "getMatchedRefTruth: Track->Truth disabled" );
134 return nullptr;
135 }
136
138 virtual const std::vector< const xAOD::TrackParticle* >& getMatchedTestTracks(
139 const xAOD::TrackParticle& r ) const override { return getMatchedTest(r); }
140
141 virtual const std::vector< const xAOD::TrackParticle* >& getMatchedTestTracks(
142 const xAOD::TruthParticle& ) const override {
143 ATH_MSG_WARNING( "getMatchedTestTracks: Tracks<-Truth disabled" );
144 return m_nullTrackVec;
145 }
146
147 virtual const std::vector< const xAOD::TruthParticle* >& getMatchedTestTruths(
148 const xAOD::TrackParticle& ) const override {
149 ATH_MSG_WARNING( "getMatchedTestTruths: Truths<-Track disabled" );
150 return m_nullTruthVec;
151 }
152
154 virtual bool isTestMatched( const xAOD::TrackParticle& t ) const override {
155 return isTestInMaps(t);
156 }
157
158 virtual bool isTestMatched( const xAOD::TruthParticle& ) const override {
159 ATH_MSG_WARNING( "isTestMatched: Truth->X disabled" );
160 return false;
161 }
162
164 virtual bool isRefMatched( const xAOD::TrackParticle& r ) const override {
165 return isRefInMaps(r);
166 }
167
168 virtual bool isRefMatched( const xAOD::TruthParticle& ) const override {
169 ATH_MSG_WARNING( "isRefMatched: X<-Truth disabled" );
170 return false;
171 }
172
174 virtual StatusCode update( const xAOD::TrackParticle& t,
175 const xAOD::TrackParticle& r,
176 float dist ) override {
177 ATH_CHECK( updateMaps( t, r, dist ) );
178 return StatusCode::SUCCESS;
179 }
180
181 virtual StatusCode update( const xAOD::TrackParticle&,
182 const xAOD::TruthParticle&,
183 float ) override {
184 ATH_MSG_WARNING( "update: Track->Truth disabled" );
185 return StatusCode::SUCCESS;
186 }
187
188 virtual StatusCode update( const xAOD::TruthParticle&,
189 const xAOD::TrackParticle&,
190 float ) override {
191 return StatusCode::SUCCESS;
192 ATH_MSG_WARNING( "update: Truth->Track disabled" );
193 }
194
196 virtual void clear() override {
197 ATH_MSG_DEBUG( "Deleting whole cache..." );
198 chainRoiName("");
199 clearMaps();
200 }
201
203 virtual std::string printInfo(
204 const std::vector< const xAOD::TrackParticle* >& testVec,
205 const std::vector< const xAOD::TrackParticle* >& refVec ) const override {
206 return printMaps( testVec, refVec, chainRoiName() );
207 }
208
209 virtual std::string printInfo(
210 const std::vector< const xAOD::TrackParticle* >&,
211 const std::vector< const xAOD::TruthParticle* >& ) const override {
212 ATH_MSG_WARNING( "printInfo: Track->Truth matches disabled" );
213 return std::string("--> No matches found");
214 }
215
216 virtual std::string printInfo(
217 const std::vector< const xAOD::TruthParticle* >&,
218 const std::vector< const xAOD::TrackParticle* >& ) const override {
219 ATH_MSG_WARNING( "printInfo: Truth->Track matches disabled" );
220 return std::string("--> No matches found");
221 }
222
223 }; // class TrackMatchingLookup_trk
224
225
230 public TrackMatchingLookupBase< xAOD::TrackParticle, xAOD::TruthParticle >,
231 public virtual ITrackMatchingLookup {
232
233 public:
234
236 TrackMatchingLookup_trkTruth( const std::string& anaTag_s ) :
237 TrackMatchingLookupBase< xAOD::TrackParticle, xAOD::TruthParticle >( anaTag_s ) {
238 anaTag( anaTag_s );
239 }
240
243
245 virtual unsigned getNmatches( bool getRefN ) const override { return getMapsSize( getRefN ); }
246
249 const xAOD::TrackParticle& ) const override {
250 ATH_MSG_WARNING( "getMatchedRefTrack: Track->Track disabled" );
251 return nullptr;
252 }
253
255 const xAOD::TruthParticle& ) const override {
256 ATH_MSG_WARNING( "getMatchedRefTrack: Truth->Track disabled" );
257 return nullptr;
258 }
259
261 const xAOD::TrackParticle& t) const override { return getMatchedRef(t); }
262
264 virtual const std::vector< const xAOD::TrackParticle* >& getMatchedTestTracks(
265 const xAOD::TrackParticle& ) const override {
266 ATH_MSG_WARNING( "getMatchedTestTracks: Track<-Track disabled" );
267 return m_nullTrackVec;
268 }
269
270 virtual const std::vector< const xAOD::TrackParticle* >& getMatchedTestTracks(
271 const xAOD::TruthParticle& r ) const override { return getMatchedTest(r); }
272
273 virtual const std::vector< const xAOD::TruthParticle* >& getMatchedTestTruths(
274 const xAOD::TrackParticle& ) const override {
275 ATH_MSG_WARNING( "getMatchedTestTruths: Truths<-Track disabled" );
276 return m_nullTruthVec;
277 }
278
280 virtual bool isTestMatched( const xAOD::TrackParticle& t ) const override {
281 return isTestInMaps(t);
282 }
283
284 virtual bool isTestMatched( const xAOD::TruthParticle& ) const override {
285 ATH_MSG_WARNING( "isTestMatched: Truth->X disabled" );
286 return false;
287 }
288
290 virtual bool isRefMatched( const xAOD::TrackParticle& ) const override {
291 ATH_MSG_WARNING( "isRefMatched: X<-Track disabled" );
292 return false;
293 }
294
295 virtual bool isRefMatched( const xAOD::TruthParticle& r ) const override {
296 return isRefInMaps(r);
297 }
298
300 virtual StatusCode update( const xAOD::TrackParticle&,
301 const xAOD::TrackParticle&,
302 float ) override {
303 ATH_MSG_WARNING( "update: Track->Track disabled" );
304 return StatusCode::SUCCESS;
305 }
306
307 virtual StatusCode update( const xAOD::TrackParticle& t,
308 const xAOD::TruthParticle& r,
309 float dist ) override {
310 ATH_CHECK( updateMaps( t, r, dist ) );
311 return StatusCode::SUCCESS;
312 }
313
314 virtual StatusCode update( const xAOD::TruthParticle&,
315 const xAOD::TrackParticle&,
316 float ) override {
317 return StatusCode::SUCCESS;
318 ATH_MSG_WARNING( "update: Truth->Track disabled" );
319 }
320
322 virtual void clear() override {
323 ATH_MSG_DEBUG( "Deleting whole cache..." );
324 chainRoiName("");
325 clearMaps();
326 }
327
329 virtual std::string printInfo(
330 const std::vector< const xAOD::TrackParticle* >&,
331 const std::vector< const xAOD::TrackParticle* >& ) const override {
332 ATH_MSG_WARNING( "printInfo: Track->Track matches disabled" );
333 return std::string("--> No matches found");
334 }
335
336 virtual std::string printInfo(
337 const std::vector< const xAOD::TrackParticle* >& testVec,
338 const std::vector< const xAOD::TruthParticle* >& refVec ) const override {
339 return printMaps( testVec, refVec, chainRoiName() );
340 }
341
342 virtual std::string printInfo(
343 const std::vector< const xAOD::TruthParticle* >&,
344 const std::vector< const xAOD::TrackParticle* >& ) const override {
345 ATH_MSG_WARNING( "printInfo: Truth->Track matches disabled" );
346 return std::string("--> No matches found");
347 }
348
349 }; // class TrackMatchingLookup_trkTruth
350
351
356 public TrackMatchingLookupBase< xAOD::TruthParticle, xAOD::TrackParticle >,
357 public virtual ITrackMatchingLookup {
358
359 public:
360
362 TrackMatchingLookup_truthTrk( const std::string& anaTag_s ) :
363 TrackMatchingLookupBase< xAOD::TruthParticle, xAOD::TrackParticle >( anaTag_s ) {
364 anaTag( anaTag_s );
365 }
366
369
371 virtual unsigned getNmatches( bool getRefN ) const override { return getMapsSize( getRefN ); }
372
375 const xAOD::TrackParticle& ) const override {
376 ATH_MSG_WARNING( "getMatchedRefTrack: Track->Track disabled" );
377 return nullptr;
378 }
379
381 const xAOD::TruthParticle& t ) const override { return getMatchedRef(t); }
382
384 const xAOD::TrackParticle& ) const override {
385 ATH_MSG_WARNING( "getMatchedRefTruth: Track->Truth disabled" );
386 return nullptr;
387 }
388
390 virtual const std::vector< const xAOD::TrackParticle* >& getMatchedTestTracks(
391 const xAOD::TrackParticle& ) const override {
392 ATH_MSG_WARNING( "getMatchedTestTruths: Track<-Track disabled" );
393 return m_nullTrackVec;
394 }
395
396 virtual const std::vector< const xAOD::TrackParticle* >& getMatchedTestTracks(
397 const xAOD::TruthParticle& ) const override {
398 ATH_MSG_WARNING( "getMatchedTestTracks: Tracks<-Truth disabled" );
399 return m_nullTrackVec;
400 }
401
402 virtual const std::vector< const xAOD::TruthParticle* >& getMatchedTestTruths(
403 const xAOD::TrackParticle& r ) const override { return getMatchedTest(r); }
404
406 virtual bool isTestMatched( const xAOD::TrackParticle& ) const override {
407 ATH_MSG_WARNING( "isTestMatched: Track->X disabled" );
408 return false;
409 }
410
411 virtual bool isTestMatched( const xAOD::TruthParticle& t ) const override {
412 return isTestInMaps(t);
413 }
414
416 virtual bool isRefMatched( const xAOD::TrackParticle& r ) const override {
417 return isRefInMaps(r);
418 }
419
420 virtual bool isRefMatched( const xAOD::TruthParticle& ) const override {
421 ATH_MSG_WARNING( "isRefMatched: X<-Truth disabled" );
422 return false;
423 }
424
426 virtual StatusCode update( const xAOD::TrackParticle&,
427 const xAOD::TrackParticle&,
428 float ) override {
429 return StatusCode::SUCCESS;
430 ATH_MSG_WARNING( "update: Track->Track disabled" );
431 }
432
433 virtual StatusCode update( const xAOD::TrackParticle&,
434 const xAOD::TruthParticle&,
435 float ) override {
436 ATH_MSG_WARNING( "update: Track->Truth disabled" );
437 return StatusCode::SUCCESS;
438 }
439
440 virtual StatusCode update( const xAOD::TruthParticle& t,
441 const xAOD::TrackParticle& r,
442 float dist ) override {
443 ATH_CHECK( updateMaps( t, r, dist ) );
444 return StatusCode::SUCCESS;
445 }
446
448 virtual void clear() override {
449 ATH_MSG_DEBUG( "Deleting whole cache..." );
450 chainRoiName("");
451 clearMaps();
452 }
453
455 virtual std::string printInfo(
456 const std::vector< const xAOD::TrackParticle* >&,
457 const std::vector< const xAOD::TrackParticle* >& ) const override {
458 ATH_MSG_WARNING( "printInfo: Track->Track matches disabled" );
459 return std::string("--> No matches found");
460 }
461
462 virtual std::string printInfo(
463 const std::vector< const xAOD::TrackParticle* >&,
464 const std::vector< const xAOD::TruthParticle* >& ) const override {
465 ATH_MSG_WARNING( "printInfo: Track->Truth matches disabled" );
466 return std::string("--> No matches found");
467 }
468
469 virtual std::string printInfo(
470 const std::vector< const xAOD::TruthParticle* >& testVec,
471 const std::vector< const xAOD::TrackParticle* >& refVec ) const override {
472 return printMaps( testVec, refVec, chainRoiName() );
473 }
474
475 }; // class TrackMatchingLookup_truthTrk
476
477} // namespace IDTPM
478
480
481#endif // > !INDETTRACKPERFMON_TRACKMATCHINGLOOKUP_H
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Interace for TrackMatchingLookup objects (templated)
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
std::vector< const xAOD::TrackParticle * > m_nullTrackVec
null vectors
std::vector< const xAOD::TruthParticle * > m_nullTruthVec
const std::string & chainRoiName() const
const std::string & anaTag() const
matching properties
StatusCode updateMaps(const T &t, const R &r, float dist=0.)
update maps with a new entry
bool isTestInMaps(const T &t) const
return true if test is matched
~TrackMatchingLookupBase()=default
Destructor.
std::vector< const T * > m_nullTest
null Vectors
std::unordered_map< const R *, std::vector< const T * > > mapRtoT_t
TrackMatchingLookupBase & operator=(const TrackMatchingLookupBase< T, R > &)=delete
= operator (disabled)
std::string m_anaTag
analysis tag
void clearMaps()
clear lookup tables
const std::vector< const T * > & getMatchedTest(const R &r) const
get matched test vector from map
std::unordered_map< const T *, float > mapTtoDist_t
float getDist(const T &t) const
get distance parameter for matched test
TrackMatchingLookupBase(const std::string &anaTag_s)
Constructor.
mapTtoR_t m_mapTestToRef
Mapping test to its uniquely associated reference.
mapRtoT_t m_mapRefToTest
Mapping reference to its (possibly multiple) associated test(s)
const R * getMatchedRef(const T &t) const
get matched reference from map
mapTtoDist_t m_mapTestToDist
Mapping test to its uniquely associated reference.
std::string printMaps(const std::vector< const T * > &testVec, const std::vector< const R * > &refVec, std::string_view chainRoiName_s) const
print info about matching and reverse matchings
bool isRefInMaps(const R &r) const
return true if reference is matched
unsigned getMapsSize(bool getRefN=false) const
get the overall number of matches
std::unordered_map< const T *, const R * > mapTtoR_t
useful typedefs
virtual StatusCode update(const xAOD::TrackParticle &, const xAOD::TrackParticle &, float) override
update
virtual StatusCode update(const xAOD::TruthParticle &, const xAOD::TrackParticle &, float) override
Truth -> Track.
virtual bool isTestMatched(const xAOD::TruthParticle &) const override
virtual const xAOD::TrackParticle * getMatchedRefTrack(const xAOD::TrackParticle &) const override
getMatchedRefTrack
virtual const xAOD::TruthParticle * getMatchedRefTruth(const xAOD::TrackParticle &t) const override
Track -> Truth.
virtual bool isRefMatched(const xAOD::TruthParticle &r) const override
~TrackMatchingLookup_trkTruth()=default
Destructor.
virtual std::string printInfo(const std::vector< const xAOD::TruthParticle * > &, const std::vector< const xAOD::TrackParticle * > &) const override
Truth -> Track.
virtual const std::vector< const xAOD::TrackParticle * > & getMatchedTestTracks(const xAOD::TruthParticle &r) const override
vec Track <- Truth
virtual const std::vector< const xAOD::TruthParticle * > & getMatchedTestTruths(const xAOD::TrackParticle &) const override
vec Truth <- Track
virtual const xAOD::TrackParticle * getMatchedRefTrack(const xAOD::TruthParticle &) const override
Truth -> Track.
virtual const std::vector< const xAOD::TrackParticle * > & getMatchedTestTracks(const xAOD::TrackParticle &) const override
getMatchedTestTracks
TrackMatchingLookup_trkTruth(const std::string &anaTag_s)
Constructor.
virtual bool isRefMatched(const xAOD::TrackParticle &) const override
isRefMatched
virtual StatusCode update(const xAOD::TrackParticle &t, const xAOD::TruthParticle &r, float dist) override
Track -> Truth.
virtual bool isTestMatched(const xAOD::TrackParticle &t) const override
isTestMatched
virtual std::string printInfo(const std::vector< const xAOD::TrackParticle * > &, const std::vector< const xAOD::TrackParticle * > &) const override
printInfo
virtual void clear() override
clear
virtual std::string printInfo(const std::vector< const xAOD::TrackParticle * > &testVec, const std::vector< const xAOD::TruthParticle * > &refVec) const override
Track -> Truth.
virtual unsigned getNmatches(bool getRefN) const override
getNmatches
virtual const xAOD::TrackParticle * getMatchedRefTrack(const xAOD::TruthParticle &) const override
Truth -> Track.
virtual StatusCode update(const xAOD::TrackParticle &t, const xAOD::TrackParticle &r, float dist) override
update
virtual bool isTestMatched(const xAOD::TruthParticle &) const override
virtual StatusCode update(const xAOD::TrackParticle &, const xAOD::TruthParticle &, float) override
Track -> Truth.
virtual bool isTestMatched(const xAOD::TrackParticle &t) const override
isTestMatched
virtual bool isRefMatched(const xAOD::TruthParticle &) const override
virtual const std::vector< const xAOD::TruthParticle * > & getMatchedTestTruths(const xAOD::TrackParticle &) const override
vec Truth <- Track
virtual void clear() override
clear
virtual unsigned getNmatches(bool getRefN) const override
getNmatches
virtual const std::vector< const xAOD::TrackParticle * > & getMatchedTestTracks(const xAOD::TrackParticle &r) const override
getMatchedTestTracks
virtual bool isRefMatched(const xAOD::TrackParticle &r) const override
isRefMatched
virtual std::string printInfo(const std::vector< const xAOD::TrackParticle * > &testVec, const std::vector< const xAOD::TrackParticle * > &refVec) const override
printInfo
virtual const xAOD::TrackParticle * getMatchedRefTrack(const xAOD::TrackParticle &t) const override
getMatchedRefTrack
~TrackMatchingLookup_trk()=default
Destructor.
virtual std::string printInfo(const std::vector< const xAOD::TruthParticle * > &, const std::vector< const xAOD::TrackParticle * > &) const override
Truth -> Track.
virtual const std::vector< const xAOD::TrackParticle * > & getMatchedTestTracks(const xAOD::TruthParticle &) const override
vec Track <- Truth
virtual std::string printInfo(const std::vector< const xAOD::TrackParticle * > &, const std::vector< const xAOD::TruthParticle * > &) const override
Track -> Truth.
virtual StatusCode update(const xAOD::TruthParticle &, const xAOD::TrackParticle &, float) override
Truth -> Track.
TrackMatchingLookup_trk(const std::string &anaTag_s)
Constructor.
virtual const xAOD::TruthParticle * getMatchedRefTruth(const xAOD::TrackParticle &) const override
Track -> Truth.
virtual const std::vector< const xAOD::TruthParticle * > & getMatchedTestTruths(const xAOD::TrackParticle &r) const override
vec Truth <- Track
virtual std::string printInfo(const std::vector< const xAOD::TruthParticle * > &testVec, const std::vector< const xAOD::TrackParticle * > &refVec) const override
Truth -> Track.
virtual bool isTestMatched(const xAOD::TruthParticle &t) const override
virtual StatusCode update(const xAOD::TrackParticle &, const xAOD::TrackParticle &, float) override
update
virtual const std::vector< const xAOD::TrackParticle * > & getMatchedTestTracks(const xAOD::TrackParticle &) const override
getMatchedTestTracks
virtual std::string printInfo(const std::vector< const xAOD::TrackParticle * > &, const std::vector< const xAOD::TrackParticle * > &) const override
printInfo
virtual void clear() override
clear
virtual bool isRefMatched(const xAOD::TruthParticle &) const override
virtual const xAOD::TruthParticle * getMatchedRefTruth(const xAOD::TrackParticle &) const override
Track -> Truth.
virtual StatusCode update(const xAOD::TruthParticle &t, const xAOD::TrackParticle &r, float dist) override
Truth -> Track.
virtual std::string printInfo(const std::vector< const xAOD::TrackParticle * > &, const std::vector< const xAOD::TruthParticle * > &) const override
Track -> Truth.
virtual bool isTestMatched(const xAOD::TrackParticle &) const override
isTestMatched
virtual unsigned getNmatches(bool getRefN) const override
getNmatches
virtual const std::vector< const xAOD::TrackParticle * > & getMatchedTestTracks(const xAOD::TruthParticle &) const override
vec Track <- Truth
virtual const xAOD::TrackParticle * getMatchedRefTrack(const xAOD::TruthParticle &t) const override
Truth -> Track.
TrackMatchingLookup_truthTrk(const std::string &anaTag_s)
Constructor.
virtual StatusCode update(const xAOD::TrackParticle &, const xAOD::TruthParticle &, float) override
Track -> Truth.
virtual bool isRefMatched(const xAOD::TrackParticle &r) const override
isRefMatched
~TrackMatchingLookup_truthTrk()=default
Destructor.
virtual const xAOD::TrackParticle * getMatchedRefTrack(const xAOD::TrackParticle &) const override
getMatchedRefTrack
int r
Definition globals.cxx:22
Athena include(s).
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TruthParticle_v1 TruthParticle
Typedef to implementation.