ATLAS Offline Software
Loading...
Searching...
No Matches
Muon::MuonAmbiTrackSelectionTool Class Reference

This tool cross checks the hits on a track with the hits already stored. More...

#include <MuonAmbiTrackSelectionTool.h>

Inheritance diagram for Muon::MuonAmbiTrackSelectionTool:
Collaboration diagram for Muon::MuonAmbiTrackSelectionTool:

Public Member Functions

 MuonAmbiTrackSelectionTool (const std::string &, const std::string &, const IInterface *)
virtual ~MuonAmbiTrackSelectionTool ()
 default destructor
virtual StatusCode initialize () override
 standard Athena-Algorithm method
virtual std::tuple< Trk::Track *, bool > getCleanedOutTrack (const Trk::Track *track, const Trk::TrackScore score, Trk::ClusterSplitProbabilityContainer &splitProbContainer, Trk::PRDtoTrackMap &prd_to_track_map, int trackId=-1, int subtrackId=-1) const override
 Performs cleaning of a track from already used hits.
 DeclareInterfaceID (IAmbiTrackSelectionTool, 1, 0)
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

PublicToolHandle< Muon::MuonEDMPrinterToolm_printer
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc
Gaudi::Property< double > m_maxOverlapFraction {this, "MaxOverlapFraction", 0.1}
 maximum hit overlap fraction between two track, if higher track will be rejected
Gaudi::Property< bool > m_keepPartial {this, "KeepPartialOverlaps", true}
 flag to keep partial overlaps
Gaudi::Property< bool > m_keepMoreThanOne {this, "KeepMoreThanOneShare", true}
 flag to keep overlaps which share more than one presicion layer
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

This tool cross checks the hits on a track with the hits already stored.

Shared hits are allowed to some extent und under certain conditions (e.g. the track score is high enough), additional shared hits are removed if necessary. This tool does not delete any tracks. If the client is going to discard tracks entered into this tool, the tracks have to be deleted by this client.

Author
Niels van Eldik niels.nosp@m..van.nosp@m..eldi.nosp@m.k@ce.nosp@m.rn.ch

Definition at line 34 of file MuonAmbiTrackSelectionTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ MuonAmbiTrackSelectionTool()

Muon::MuonAmbiTrackSelectionTool::MuonAmbiTrackSelectionTool ( const std::string & t,
const std::string & n,
const IInterface * p )

Definition at line 21 of file MuonAmbiTrackSelectionTool.cxx.

21 :
22 AthAlgTool(t, n, p) {
23 declareInterface<IAmbiTrackSelectionTool>(this);
24}
AthAlgTool()
Default constructor:

◆ ~MuonAmbiTrackSelectionTool()

virtual Muon::MuonAmbiTrackSelectionTool::~MuonAmbiTrackSelectionTool ( )
inlinevirtual

default destructor

Definition at line 39 of file MuonAmbiTrackSelectionTool.h.

39{};

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ DeclareInterfaceID()

Trk::IAmbiTrackSelectionTool::DeclareInterfaceID ( IAmbiTrackSelectionTool ,
1 ,
0  )
inherited

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ getCleanedOutTrack()

std::tuple< Trk::Track *, bool > Muon::MuonAmbiTrackSelectionTool::getCleanedOutTrack ( const Trk::Track * track,
const Trk::TrackScore score,
Trk::ClusterSplitProbabilityContainer & splitProbContainer,
Trk::PRDtoTrackMap & prd_to_track_map,
int trackId = -1,
int subtrackId = -1 ) const
overridevirtual

Performs cleaning of a track from already used hits.

Parameters
trackthe input track to be checked and cleaned.
scorethe score tha twas given to the input track
prd_to_track_mapa map to identify shared hits.
clusterSplitProbMapmap which associates pixel cluster to cluster splitting probabilities.
trackIdunique track identifier (used by track observer tool)
subtrackIdunique track identifier for cleaned out track (used by track observer tool)
Returns
tuple where the first element is a potiner to a new track or a nullptr and the second element is a flag which is set to false if the input track is to be rejected. The second element of the returned tuple is false if the input input track is to be rejected. The input track is rejected if it does not fulfil quality criteria or if a new cleaned track is created replacing the input track. The second element of the returned tuple is true if the input track does not reuire cleaning, fulfils the quality criteria and should be kept.

Do not trigger the warning if the segment consists purely of phi hits

Implements Trk::IAmbiTrackSelectionTool.

Definition at line 36 of file MuonAmbiTrackSelectionTool.cxx.

38 {
39 unsigned int numshared{0}, numhits{0}, numPhiHits{0};
40
41 if (!track) {
42 return std::make_tuple(nullptr, false); // "reject" invalid input track
43 }
44
45 ATH_MSG_VERBOSE("New Track " << m_printer->print(*track));
46 ATH_MSG_VERBOSE("trackId " << trackId << ", subtrackId " << subtrackId);
47
48 std::map<Muon::MuonStationIndex::StIndex, int> sharedPrecisionPerLayer;
49 std::map<Muon::MuonStationIndex::StIndex, int> precisionPerLayer;
50 auto is_shared = [&sharedPrecisionPerLayer, &precisionPerLayer, this, &numshared, &numhits, &prd_to_track_map,
51 &numPhiHits](const Trk::RIO_OnTrack *rot) {
52 if (!rot || !rot->prepRawData()) return;
53 const Identifier rot_id = rot->prepRawData()->identify();
54 numPhiHits += m_idHelperSvc->isMuon(rot_id) && m_idHelperSvc->measuresPhi(rot_id);
55 if (!m_idHelperSvc->isMdt(rot_id) && !m_idHelperSvc->isMM(rot_id) && !m_idHelperSvc->issTgc(rot_id) &&
56 (!m_idHelperSvc->isCsc(rot_id) || m_idHelperSvc->measuresPhi(rot_id))) {
57 ATH_MSG_VERBOSE("Measurement " << m_printer->print(*rot) << " is not a precision one");
58 return;
59 }
60 const Muon::MuonStationIndex::StIndex stIndex = m_idHelperSvc->stationIndex(rot_id);
61 ++precisionPerLayer[stIndex];
62 ++numhits;
63 if (!prd_to_track_map.isUsed(*(rot->prepRawData()))) { return; }
64
65 ATH_MSG_VERBOSE("Track overlap found! " << m_idHelperSvc->toString(rot_id));
66 ++numshared;
67 ++sharedPrecisionPerLayer[stIndex];
68 };
69 for (const Trk::TrackStateOnSurface *iTsos : *track->trackStateOnSurfaces()) {
70 // get measurment from TSOS
71 const Trk::MeasurementBase *meas = iTsos->measurementOnTrack();
72 if (!meas) continue;
73
74 // only look at measurements
75 if (!iTsos->type(Trk::TrackStateOnSurface::Measurement)) continue;
76 const Trk::RIO_OnTrack *rot = dynamic_cast<const Trk::RIO_OnTrack *>(meas);
77 if (!rot) {
78 // we are only interested in precision hits since only they have the resolution to distinguish between
79 // close-by tracks so we only take competing ROTs if they are CSC eta hits
80 const Trk::CompetingRIOsOnTrack *competingROT = dynamic_cast<const Trk::CompetingRIOsOnTrack *>(meas);
81 if (competingROT) {
82 const unsigned int numROTs = competingROT->numberOfContainedROTs();
83 for (unsigned int i = 0; i < numROTs; ++i) {
84 const Trk::RIO_OnTrack *comp_rot = &competingROT->rioOnTrack(i);
85 is_shared(comp_rot);
86 }
87 }
88 } else {
89 is_shared(rot);
90 }
91 }
92 if (!numhits) {
94 if (!numPhiHits)
95 ATH_MSG_WARNING("Got track without Muon hits " << m_printer->print(*track) << std::endl
96 << m_printer->printMeasurements(*track));
97 return std::make_tuple(nullptr, false); // reject input track
98 }
99 const double overlapFraction = (double)numshared / (double)numhits;
100
101 ATH_MSG_VERBOSE("Track " << m_printer->print(*track) << " has " << numhits << " hit, shared " << numshared << " overlap fraction "
102 << overlapFraction << " layers " << precisionPerLayer.size() << " shared " << sharedPrecisionPerLayer.size());
103
104 if (overlapFraction > m_maxOverlapFraction) {
105 if (m_keepPartial) {
106 if (sharedPrecisionPerLayer.empty()) {
107 ATH_MSG_DEBUG("Track is not sharing precision hits, keeping ");
108 return std::make_tuple(nullptr, true); // keep input track
109 }
110 if (overlapFraction < 0.25 && precisionPerLayer.size() > 2 && precisionPerLayer.size() - sharedPrecisionPerLayer.size() == 1) {
111 ATH_MSG_DEBUG("Three station track differing by one precision layer, keeping ");
112 return std::make_tuple(nullptr, true); // keep input track
113 }
114 if (overlapFraction < 0.35 && precisionPerLayer.size() > 2 && precisionPerLayer.size() - sharedPrecisionPerLayer.size() > 1 &&
116 ATH_MSG_DEBUG("Three station track differing by more than one precision layer, keeping ");
117 return std::make_tuple(nullptr, true); // keep input track
118 }
119 }
120 return std::make_tuple(nullptr, false); // reject input track
121 }
122
123 return std::make_tuple(nullptr, true); // keep input track
124}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
Gaudi::Property< bool > m_keepPartial
flag to keep partial overlaps
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Gaudi::Property< double > m_maxOverlapFraction
maximum hit overlap fraction between two track, if higher track will be rejected
Gaudi::Property< bool > m_keepMoreThanOne
flag to keep overlaps which share more than one presicion layer
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.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
StIndex
enum to classify the different station layers in the muon spectrometer

◆ initialize()

StatusCode Muon::MuonAmbiTrackSelectionTool::initialize ( )
overridevirtual

standard Athena-Algorithm method

Definition at line 28 of file MuonAmbiTrackSelectionTool.cxx.

28 {
29 ATH_CHECK(m_printer.retrieve());
30 ATH_CHECK(m_idHelperSvc.retrieve());
31
32 return StatusCode::SUCCESS;
33}
#define ATH_CHECK
Evaluate an expression and check for errors.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> Muon::MuonAmbiTrackSelectionTool::m_idHelperSvc
private
Initial value:
{
this,
"MuonIdHelperSvc",
"Muon::MuonIdHelperSvc/MuonIdHelperSvc",
}

Definition at line 55 of file MuonAmbiTrackSelectionTool.h.

55 {
56 this,
57 "MuonIdHelperSvc",
58 "Muon::MuonIdHelperSvc/MuonIdHelperSvc",
59 };

◆ m_keepMoreThanOne

Gaudi::Property<bool> Muon::MuonAmbiTrackSelectionTool::m_keepMoreThanOne {this, "KeepMoreThanOneShare", true}
private

flag to keep overlaps which share more than one presicion layer

Definition at line 68 of file MuonAmbiTrackSelectionTool.h.

68{this, "KeepMoreThanOneShare", true};

◆ m_keepPartial

Gaudi::Property<bool> Muon::MuonAmbiTrackSelectionTool::m_keepPartial {this, "KeepPartialOverlaps", true}
private

flag to keep partial overlaps

Definition at line 65 of file MuonAmbiTrackSelectionTool.h.

65{this, "KeepPartialOverlaps", true};

◆ m_maxOverlapFraction

Gaudi::Property<double> Muon::MuonAmbiTrackSelectionTool::m_maxOverlapFraction {this, "MaxOverlapFraction", 0.1}
private

maximum hit overlap fraction between two track, if higher track will be rejected

Definition at line 62 of file MuonAmbiTrackSelectionTool.h.

62{this, "MaxOverlapFraction", 0.1};

◆ m_printer

PublicToolHandle<Muon::MuonEDMPrinterTool> Muon::MuonAmbiTrackSelectionTool::m_printer
private
Initial value:
{
this,
"Printer",
"Muon::MuonEDMPrinterTool/MuonEDMPrinterTool",
}

Definition at line 50 of file MuonAmbiTrackSelectionTool.h.

50 {
51 this,
52 "Printer",
53 "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool",
54 };

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


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