ATLAS Offline Software
Loading...
Searching...
No Matches
MuonInDetToMuonSystemExtensionAlg Class Reference

The MuonInDetToMuonSystemExtensionAlg processes further the InDetCandidates created by the MuonCombinedInDetCandidateAlg. More...

#include <MuonInDetToMuonSystemExtensionAlg.h>

Inheritance diagram for MuonInDetToMuonSystemExtensionAlg:
Collaboration diagram for MuonInDetToMuonSystemExtensionAlg:

Classes

struct  InDetCandidateCache
struct  MuidCoCache
 Helper struct to cache the MuidCo track and it's associated segments while keeping the association InDetCandidate <– > muidCo Tag. More...

Public Member Functions

 ~MuonInDetToMuonSystemExtensionAlg ()=default
StatusCode initialize () override
StatusCode execute (const EventContext &ctx) const override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
virtual void setFilterPassed (bool state, const EventContext &ctx) const
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 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

using MuidCoVector = std::vector<MuidCoCache>
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

StatusCode selectCandidates (const EventContext &ctx, InDetCandidateCache &cache) const
 Select the MuidCo candidates and put the associated id tracks on a block list.
StatusCode findHitSectors (const EventContext &ctx, InDetCandidateCache &output_cache) const
 Find the sectors in the MS with muon signals.
StatusCode findSegments (const EventContext &ctx, InDetCandidateCache &output_cache) const
 Select good segments.
bool hasMatchingSegment (const MuonCombined::InDetCandidate &id_cand, const InDetCandidateCache &cache) const
 Searches for segments within theta < 0.2 && sharing the same sector.
bool hasMatchingSeed (const MuonCombined::InDetCandidate &id_cand, const InDetCandidateCache &cache) const
 Searches for hough seeds within theta < 0.2 && sharing the same sector.
StatusCode create (const EventContext &ctx, InDetCandidateCache &cache) const
 Create the InDetCandidaes with system extensions.
StatusCode createStaus (const EventContext &ctx, const InDetCandidateCollection *ext_candidates, const MuidCoVector &tag_map) const
void maskHits (const Muon::MuonSegment *muon_seg, InDetCandidateCache &output_cache) const
 Mask the hits of the corresponding muon segment as used.
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

SG::ReadHandleKey< InDetCandidateCollectionm_inputCandidate {this, "InputInDetCandidates", "InDetCandidates"}
SG::WriteHandleKey< InDetCandidateCollectionm_bulkInDetCandKey {this, "WriteInDetCandidates", "InDetCandidatesSystemExtened"}
 Collection of InDet candidates written for MuGirl and MuonSegmentTag.
SG::WriteHandleKey< InDetCandidateCollectionm_stauInDetCandKey {this, "WriteStauCandidates", ""}
 Collection of InDet candidates written for MuGirlStau.
SG::ReadHandleKey< Muon::HoughDataPerSectorVecm_houghDataPerSectorVecKey
 Use the hough data to find sectors in the speectrometer traversed by a muon.
SG::ReadHandleKey< Trk::SegmentCollectionm_segmentKey
 Let's exploit the segments to get rid of as much tracks as possible.
PublicToolHandle< Muon::IMuonSegmentSelectionToolm_segmentSelector
ToolHandle< Muon::IMuonSystemExtensionToolm_muonSystemExtensionTool {this, "MuonSystemExtensionTool", "", "Muon system extension tool"}
 The system extension tool extrapolates the candidate through the spectrometer.
SG::ReadHandleKey< MuonCombined::InDetCandidateToTagMapm_combTagMap {this, "CombinedTagMap", "muidcoTagMap", "Combined muon tag map"}
 That is the collection of MuidCo candidates.
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
ServiceHandle< Muon::IMuonEDMHelperSvcm_edmHelperSvc
Gaudi::Property< bool > m_restrictExtension {this, "UseOnlyHitSectors", false}
 Restrict the extrapolation of ID tracks to sectors in the MS where at least a hit is recorded.
Gaudi::Property< int > m_houghMin {this, "minHoughHits", 4, "Minimum number of hits required for a hough maximum to be accepted"}
 The hough maxima always contain at least 2 hits.
Gaudi::Property< int > m_segmentQuality {this, "segQuality", 1, "Quality cut on the segment."}
Gaudi::Property< bool > m_excludeNSW {this, "noNSWforSeeding", false, "Ignore hits/segments from the NSW"}
 Prelimnary studies have shown that the NSWs generate a massive amount of fake candidates.
Gaudi::Property< float > m_extThreshold {this, "ExtensionPtThreshold", 2500}
 Minimum pt threshold of the IdCandidate to be extrapolated through the spectrometer.
Gaudi::Property< bool > m_extendSAF {this, "ExtendSAF", false}
 Shall SAF tracks be equiped with a muon system extension used by MuGirl later.
Gaudi::Property< bool > m_extendBulk {this, "ExtendBulk", true}
 Shall ordinary ID tracks be equiped with a muon system extension used by MuGirl later.
const Muon::MuonSectorMapping m_sector_mapping {}
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
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

The MuonInDetToMuonSystemExtensionAlg processes further the InDetCandidates created by the MuonCombinedInDetCandidateAlg.

The idea is that the latter is only selecting the Id tracks based on the outcome of the Id selection tool and whether a CaloExtension could be successfully attached. This information is full sufficient to run the MuonCombinedAlg and the MuonCalo algorithms, but not the SegmentTagging or muGirl. InDetCandidates, not combined to a full muon track by MuidCo (STACO generates to much noise) are copied and then equipped with the muonSystem extension.

Definition at line 34 of file MuonInDetToMuonSystemExtensionAlg.h.

Member Typedef Documentation

◆ MuidCoVector

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ ~MuonInDetToMuonSystemExtensionAlg()

MuonInDetToMuonSystemExtensionAlg::~MuonInDetToMuonSystemExtensionAlg ( )
default

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64{
65 return 0;
66}

◆ create()

StatusCode MuonInDetToMuonSystemExtensionAlg::create ( const EventContext & ctx,
InDetCandidateCache & cache ) const
private

Create the InDetCandidaes with system extensions.

We want these tracks to be extrapolated through the spectrometer reject those no meeting the basic requirements

Prepare the system extension

The candidate already has somehow a system extension --> it's just a matter of copying it

The system extension does not own the MuonEntryLayerIntersection()-> it's fine

If the id candidate has a matching segment, then we know that this track can be potentially reconstructed by MuTagIMO

Definition at line 100 of file MuonInDetToMuonSystemExtensionAlg.cxx.

100 {
102 for (const MuonCombined::InDetCandidate* candidate : *out_cache.input_candidates) {
103 if (out_cache.excluded_trks.count(candidate)) {
104 ATH_MSG_VERBOSE("Inner detector track " << candidate->toString() << " has already been used by MuidCo");
105 continue;
106 }
109 if (candidate->indetTrackParticle().pt() < m_extThreshold || (!m_extendSAF && candidate->isSiliconAssociated()) ||
110 (!m_extendBulk && !candidate->isSiliconAssociated())) {
111 ATH_MSG_VERBOSE("Inner detector track " << candidate->toString() << " is too soft");
112 continue;
113 }
114
116 Muon::IMuonSystemExtensionTool::SystemExtensionCache cache;
117 cache.candidate = std::make_unique<MuonCombined::InDetCandidate>(candidate->indetTrackParticleLink());
119 cache.candidate->setExtension(candidate->getCaloExtension());
120
121 const Muon::MuonSystemExtension* extension = candidate->getExtension();
123 if (extension) {
125 std::vector<Muon::MuonSystemExtension::Intersection> intersects = extension->layerIntersections();
126 cache.candidate->setExtension(
127 std::make_unique<Muon::MuonSystemExtension>(&extension->muonEntryLayerIntersection(), std::move(intersects)));
128 } else {
130 const bool seg_match = !m_restrictExtension || hasMatchingSegment(*candidate, out_cache);
131
132 if (!seg_match && !hasMatchingSeed(*candidate, out_cache)) continue;
133 cache.useHitSectors = !seg_match;
134 cache.sectorsWithHits = &out_cache.hit_sectors;
135 cache.createSystemExtension = true;
136 cache.requireSystemExtension = true;
137
138 if (!m_muonSystemExtensionTool->muonSystemExtension(ctx, cache)) {
139 ATH_MSG_VERBOSE("Extension failed");
140 continue;
141 }
142 }
143 out_cache.outputContainer->push_back(std::move(cache.candidate));
144 }
145 if (msgLevel(MSG::DEBUG)) {
146 std::stringstream sstr;
147 for (const MuonCombined::InDetCandidate* extended : *out_cache.outputContainer) {
148 sstr << " * " << extended->toString() << std::endl;
149 }
150 if (!out_cache.excluded_trks.empty()) {
151 sstr << std::endl << " ======== The following tracks were already successfully combined ======== " << std::endl;
152 for (const MuonCombined::InDetCandidate* combined : out_cache.excluded_trks) {
153 sstr << " = " << combined->toString() << std::endl;
154 }
155 }
156 if (out_cache.excluded_trks.size() + out_cache.outputContainer->size() != out_cache.input_candidates->size()) {
157 sstr << std::endl << " ++++++++ The following candidates were not extrapolated ++++++++ " << std::endl;
158 const InDetCandidateCollection::const_iterator begin = out_cache.outputContainer->begin();
159 const InDetCandidateCollection::const_iterator end = out_cache.outputContainer->end();
160
161 for (const MuonCombined::InDetCandidate* rejected : *out_cache.input_candidates) {
162 if (out_cache.excluded_trks.count(rejected) ||
163 std::find_if(begin, end,
164 [rejected](const MuonCombined::InDetCandidate* extended) { return (*rejected) == (*extended); }) != end)
165 continue;
166 sstr << " + " << rejected->toString() << std::endl;
167 }
168 }
169 ATH_MSG_DEBUG("Extrapolated " << out_cache.outputContainer->size() << " out of " << out_cache.input_candidates->size()
170 << " tracks through the spectrometer" << std::endl
171 << std::endl
172 << sstr.str());
173 }
174 return StatusCode::SUCCESS;
175}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
void setExtension(std::unique_ptr< Muon::MuonSystemExtension > extension)
bool isSiliconAssociated() const
Returns true if this candidate was formed from a special far forward InDet track.
const Trk::CaloExtension * getCaloExtension() const
const xAOD::TrackParticle & indetTrackParticle() const
access TrackParticle
void setSiliconAssociated(bool)
Pass true if this candiate was created from a special far forward InDet track.
const Muon::MuonSystemExtension * getExtension() const
std::string toString() const
print candidate to string
const ElementLink< xAOD::TrackParticleContainer > & indetTrackParticleLink() const
access TrackParticleLink
Gaudi::Property< bool > m_extendSAF
Shall SAF tracks be equiped with a muon system extension used by MuGirl later.
bool hasMatchingSeed(const MuonCombined::InDetCandidate &id_cand, const InDetCandidateCache &cache) const
Searches for hough seeds within theta < 0.2 && sharing the same sector.
bool hasMatchingSegment(const MuonCombined::InDetCandidate &id_cand, const InDetCandidateCache &cache) const
Searches for segments within theta < 0.2 && sharing the same sector.
ToolHandle< Muon::IMuonSystemExtensionTool > m_muonSystemExtensionTool
The system extension tool extrapolates the candidate through the spectrometer.
Gaudi::Property< bool > m_restrictExtension
Restrict the extrapolation of ID tracks to sectors in the MS where at least a hit is recorded.
Gaudi::Property< bool > m_extendBulk
Shall ordinary ID tracks be equiped with a muon system extension used by MuGirl later.
Gaudi::Property< float > m_extThreshold
Minimum pt threshold of the IdCandidate to be extrapolated through the spectrometer.
const Trk::TrackParameters & muonEntryLayerIntersection() const
access to intersection with the muon entry layer
const std::vector< Intersection > & layerIntersections() const
access to the intersections with the layers.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
bool requireSystemExtension
Require that the muon system extension was successful.
bool createSystemExtension
Try to create the muon system extension.
const std::map< MuonStationIndex::DetectorRegionIndex, std::set< int > > * sectorsWithHits
Cache the sectors which have a recorded hit.
bool useHitSectors
Switch to restrict the intersection search only to the sectors with hits.
std::unique_ptr< MuonCombined::InDetCandidate > candidate
Inner detector candidate.

◆ createStaus()

StatusCode MuonInDetToMuonSystemExtensionAlg::createStaus ( const EventContext & ctx,
const InDetCandidateCollection * ext_candidates,
const MuidCoVector & tag_map ) const
private

This will copy the existing candidates to the new container without calling the system extension tool

For the staus it is quite unclear what is the overlap between MuidCo and MuGirlStau. So in order to be on the safe side we add the MuidCo candidate tracks as well, but we also try to avoid the extrapolator like a cat does for a bubble bath. By taking the perigee parameters of the associated muon segments, we have a much much shorter path to extrapolate the track to the MuonLayerInterSection surfaces.

Definition at line 337 of file MuonInDetToMuonSystemExtensionAlg.cxx.

338 {
339 if (m_stauInDetCandKey.empty()) {
340 ATH_MSG_VERBOSE("No candidates for stau reconstruction will be written");
341 return StatusCode::SUCCESS;
342 }
343 ATH_MSG_DEBUG("Now find the candidates to be considered for MuGirlStau");
344 InDetCandidateCache stau_cache{};
345 stau_cache.input_candidates = ext_candidates;
346
348 ATH_CHECK(create(ctx, stau_cache));
354 for (const MuidCoCache& idMuidCo : tag_map) {
355 Muon::IMuonSystemExtensionTool::SystemExtensionCache cache;
356 cache.candidate = std::make_unique<MuonCombined::InDetCandidate>(idMuidCo.id_trk->indetTrackParticleLink());
357 cache.candidate->setSiliconAssociated(idMuidCo.id_trk->isSiliconAssociated());
358 cache.candidate->setExtension(idMuidCo.id_trk->getCaloExtension());
359 cache.useHitSectors = false;
360 cache.createSystemExtension = true;
361 cache.requireSystemExtension = true;
362
363 if (!m_muonSystemExtensionTool->muonLayerInterSections(ctx, *idMuidCo.cmb_trk, cache)) {
364 ATH_MSG_DEBUG("Could not determine the intersections. Although that should be possible");
365 continue;
366 }
367 stau_cache.outputContainer->push_back(std::move(cache.candidate));
368 }
369
370 SG::WriteHandle<InDetCandidateCollection> indetCandidateCollection(m_stauInDetCandKey, ctx);
371 // sort candidates beofre storing, otherwise ordering in container of stau segments can be inconsistent
372 std::sort(stau_cache.outputContainer->begin(),stau_cache.outputContainer->end(),[](const MuonCombined::InDetCandidate*a, const MuonCombined::InDetCandidate*b){
373 return a->indetTrackParticle().pt() < b->indetTrackParticle().pt();});
374 ATH_CHECK(indetCandidateCollection.record(std::move(stau_cache.outputContainer)));
375 return StatusCode::SUCCESS;
376}
#define ATH_CHECK
Evaluate an expression and check for errors.
static Double_t a
StatusCode create(const EventContext &ctx, InDetCandidateCache &cache) const
Create the InDetCandidaes with system extensions.
SG::WriteHandleKey< InDetCandidateCollection > m_stauInDetCandKey
Collection of InDet candidates written for MuGirlStau.
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
const InDetCandidateCollection * input_candidates
Collection of the InDet candidates to consider.
Helper struct to cache the MuidCo track and it's associated segments while keeping the association In...

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

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

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode MuonInDetToMuonSystemExtensionAlg::execute ( const EventContext & ctx) const
override

Definition at line 47 of file MuonInDetToMuonSystemExtensionAlg.cxx.

47 {
48 ATH_MSG_DEBUG("Cakes are availablei in "<<ctx.eventID().event_number());
49 InDetCandidateCache output_cache{};
50
51 SG::ReadHandle<InDetCandidateCollection> input_container{m_inputCandidate, ctx};
52 if (!input_container.isValid()) {
53 ATH_MSG_FATAL("Failed to retrieve " << m_inputCandidate.fullKey());
54 return StatusCode::FAILURE;
55 }
56 output_cache.input_candidates = input_container.cptr();
57 ATH_CHECK(selectCandidates(ctx, output_cache));
58
60 ATH_CHECK(findSegments(ctx, output_cache));
61 ATH_CHECK(findHitSectors(ctx, output_cache));
62 }
63
64 ATH_MSG_DEBUG("Find the inner detector candidates to be used for MuGirl / Segment tagging");
65 ATH_CHECK(create(ctx, output_cache));
66 SG::WriteHandle<InDetCandidateCollection> indetCandidateCollection(m_bulkInDetCandKey, ctx);
67 ATH_CHECK(indetCandidateCollection.record(std::move(output_cache.outputContainer)));
68
69 ATH_CHECK(createStaus(ctx, indetCandidateCollection.ptr(), output_cache.tag_map));
70
71 return StatusCode::SUCCESS;
72}
#define ATH_MSG_FATAL(x)
StatusCode findSegments(const EventContext &ctx, InDetCandidateCache &output_cache) const
Select good segments.
StatusCode findHitSectors(const EventContext &ctx, InDetCandidateCache &output_cache) const
Find the sectors in the MS with muon signals.
StatusCode selectCandidates(const EventContext &ctx, InDetCandidateCache &cache) const
Select the MuidCo candidates and put the associated id tracks on a block list.
StatusCode createStaus(const EventContext &ctx, const InDetCandidateCollection *ext_candidates, const MuidCoVector &tag_map) const
SG::ReadHandleKey< InDetCandidateCollection > m_inputCandidate
SG::WriteHandleKey< InDetCandidateCollection > m_bulkInDetCandKey
Collection of InDet candidates written for MuGirl and MuonSegmentTag.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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

◆ extraOutputDeps()

const DataObjIDColl & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

90{
91 // If we didn't find any symlinks to add, just return the collection
92 // from the base class. Otherwise, return the extended collection.
93 if (!m_extendedExtraObjects.empty()) {
95 }
97}
An algorithm that can be simultaneously executed in multiple threads.

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ findHitSectors()

StatusCode MuonInDetToMuonSystemExtensionAlg::findHitSectors ( const EventContext & ctx,
InDetCandidateCache & output_cache ) const
private

Find the sectors in the MS with muon signals.

Helper function to cound whether all three stations are actually complete

The phi-hit vector has a size of 3 representing the forward-backward and barrel sections

Hits built into a MuidCo track

Subtract the hits used by MuidCo from the hough seeds

Find the chamber with the largest number of hits

Average the theta

Loop over the maxima & find the hit sectors

Remove all hits from the seed that are built into a segment

If the seed has still more than the minimum. Then let's mark the sector as hit

Cache the eta value additionally

Definition at line 177 of file MuonInDetToMuonSystemExtensionAlg.cxx.

177 {
178 SG::ReadHandle<Muon::HoughDataPerSectorVec> readHandle{m_houghDataPerSectorVecKey, ctx};
179 if (!readHandle.isValid()) {
180 ATH_MSG_FATAL("Failed to retrieve the prep data container " << m_houghDataPerSectorVecKey.fullKey());
181 return StatusCode::FAILURE;
182 }
183 const std::vector<Muon::HoughDataPerSec>& hough_data = readHandle->vec;
185 auto count_finished = [&output_cache]() -> unsigned int {
186 unsigned int n{0};
187 for (const auto& sector_hits : output_cache.hit_sectors) { n += sector_hits.second.size() >= num_sectors; }
188 return n;
189 };
190
193 using namespace Muon::MuonStationIndex;
194 for (int det_region = 0; det_region < toInt(DetectorRegionIndex::DetectorRegionIndexMax); ++det_region) {
195 const RegionIndex region_index = static_cast<RegionIndex>(det_region);
196 for (int layer = 0; layer < toInt(LayerIndex::LayerIndexMax); ++layer) {
197 const LayerIndex layer_index = static_cast<LayerIndex>(layer);
198 const unsigned int hash = sectorLayerHash(region_index, layer_index);
200 const std::set<Identifier>& masked_hits = output_cache.consumed_hits[hash];
201
203 auto num_hough_hits = [&masked_hits, this](const std::shared_ptr<MuonHough::MuonLayerHough::Maximum>& hough_maximum) {
204 std::map<Identifier, hough_chamber> chamber_counts;
205 for (const std::shared_ptr<MuonHough::Hit>& hough_hit : hough_maximum->hits) {
206 const Trk::PrepRawData* prep = prepData(hough_hit);
207 const Identifier chId = prep->identify();
208 if (masked_hits.count(chId) || (m_excludeNSW && (m_idHelperSvc->isMM(chId) || m_idHelperSvc->issTgc(chId)))) {
209 ATH_MSG_VERBOSE("Do not reuse hit " << m_idHelperSvc->toString(chId));
210 continue;
211 }
212 ATH_MSG_VERBOSE("Count hough hit " << m_idHelperSvc->toString(chId));
213 // Split the seeds into the chambers
214 hough_chamber& chamber = chamber_counts[m_idHelperSvc->chamberId(chId)];
215 ++chamber.nhits;
216 const Amg::Vector3D glob_pos = prep->detectorElement()->center(chId);
217 chamber.eta += glob_pos.eta();
218 chamber.sectors.insert(m_sector_mapping.getSector(glob_pos.phi()));
219 }
221 hough_chamber N{};
222 for (auto& ch_it : chamber_counts) {
223 if (N.nhits < ch_it.second.nhits) { N = std::move(ch_it.second); }
224 }
226 N.eta /= std::max(N.nhits, 1);
227 return N;
228 };
229
230 for (const Muon::HoughDataPerSec& sector_data : hough_data) {
231 const Muon::HoughDataPerSec::MaximumVec& eta_hits = sector_data.maxVec[hash];
233 for (const std::shared_ptr<MuonHough::MuonLayerHough::Maximum>& maxima : eta_hits) {
235 const hough_chamber effect_hits = num_hough_hits(maxima);
237 if (m_houghMin > effect_hits.nhits) continue;
238 ATH_MSG_VERBOSE("Hough maximum in " << Muon::MuonStationIndex::regionName(region_index) << ", "
240 << ", hits: " << effect_hits.nhits);
241
242 for (const int sector : effect_hits.sectors) {
243 output_cache.hit_sectors[region_index].insert(sector);
245 output_cache.eta_seeds[sector].push_back(effect_hits.eta);
246 }
247 }
248 if (count_finished() >= toInt(RegionIndex::DetectorRegionIndexMax)) {
249 ATH_MSG_VERBOSE("The MS is filled up with Hough seeds. We do not need to search for them any longer");
250 break;
251 }
252 }
253 }
254 for (auto& theta_pair : output_cache.eta_seeds) { std::sort(theta_pair.second.begin(), theta_pair.second.end()); }
255 }
256 output_cache.consumed_hits.clear();
257 return StatusCode::SUCCESS;
258}
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Gaudi::Property< int > m_houghMin
The hough maxima always contain at least 2 hits.
Gaudi::Property< bool > m_excludeNSW
Prelimnary studies have shown that the NSWs generate a massive amount of fake candidates.
SG::ReadHandleKey< Muon::HoughDataPerSectorVec > m_houghDataPerSectorVecKey
Use the hough data to find sectors in the speectrometer traversed by a muon.
virtual const TrkDetElementBase * detectorElement() const =0
return the detector element corresponding to this PRD The pointer will be zero if the det el is not d...
Identifier identify() const
return the identifier
virtual const Amg::Vector3D & center() const =0
Return the center of the element.
Eigen::Matrix< double, 3, 1 > Vector3D
const std::string & layerName(LayerIndex index)
convert LayerIndex into a string
constexpr int toInt(const EnumType enumVal)
unsigned int sectorLayerHash(DetectorRegionIndex detectorRegionIndex, LayerIndex layerIndex)
create a hash out of region and layer
const std::string & regionName(DetectorRegionIndex index)
convert DetectorRegionIndex into a string
LayerIndex
enum to classify the different layers in the muon spectrometer
@ layer
Definition HitInfo.h:79
std::vector< std::shared_ptr< MuonHough::MuonLayerHough::Maximum > > MaximumVec

◆ findSegments()

StatusCode MuonInDetToMuonSystemExtensionAlg::findSegments ( const EventContext & ctx,
InDetCandidateCache & output_cache ) const
private

Select good segments.

Check if the segment is part of a MuidCo muon

Mask all hits from the Hough seeds

Definition at line 259 of file MuonInDetToMuonSystemExtensionAlg.cxx.

259 {
260 SG::ReadHandle<Trk::SegmentCollection> segmentContainer{m_segmentKey, ctx};
261 if (!segmentContainer.isValid()) {
262 ATH_MSG_FATAL("Failed to retrieve the Muon segment container " << m_segmentKey.fullKey());
263 return StatusCode::FAILURE;
264 }
265 for (const Trk::Segment* trk_segment : *segmentContainer) {
266 // Which in reality is a Muon segment
267 const Muon::MuonSegment* muon_segment = dynamic_cast<const Muon::MuonSegment*>(trk_segment);
268 if (!muon_segment) {
269 ATH_MSG_WARNING("How can it be that a Muon segment is not a muon segment?");
270 continue;
271 }
272 // Check if the segment satisfies the quality criteria
273 if (m_segmentSelector->quality(*muon_segment) < m_segmentQuality) continue;
275 if (output_cache.combined_segs.count(muon_segment)) {
276 ATH_MSG_VERBOSE("Segment was already used in combined fit");
277 continue;
278 }
279 if (m_excludeNSW && std::find_if(muon_segment->containedMeasurements().begin(),muon_segment->containedMeasurements().end(),
280 [this](const Trk::MeasurementBase* meas ){
281 const Identifier meas_id = m_edmHelperSvc->getIdentifier(*meas);
282 return meas_id.is_valid() && (m_idHelperSvc->isMM(meas_id) || m_idHelperSvc->issTgc(meas_id));
283 })!= muon_segment->containedMeasurements().end()) continue;
284
286 maskHits(muon_segment, output_cache);
287 output_cache.candidate_segments.push_back(muon_segment);
288 }
289 output_cache.combined_segs.clear();
290 return StatusCode::SUCCESS;
291}
#define ATH_MSG_WARNING(x)
SG::ReadHandleKey< Trk::SegmentCollection > m_segmentKey
Let's exploit the segments to get rid of as much tracks as possible.
PublicToolHandle< Muon::IMuonSegmentSelectionTool > m_segmentSelector
void maskHits(const Muon::MuonSegment *muon_seg, InDetCandidateCache &output_cache) const
Mask the hits of the corresponding muon segment as used.
const std::vector< const Trk::MeasurementBase * > & containedMeasurements() const
returns the vector of Trk::MeasurementBase objects

◆ hasMatchingSeed()

bool MuonInDetToMuonSystemExtensionAlg::hasMatchingSeed ( const MuonCombined::InDetCandidate & id_cand,
const InDetCandidateCache & cache ) const
private

Searches for hough seeds within theta < 0.2 && sharing the same sector.

Definition at line 321 of file MuonInDetToMuonSystemExtensionAlg.cxx.

322 {
324 const double etaID = ms_entry->position().eta();
325 std::vector<int> id_sectors;
326 m_sector_mapping.getSectors(ms_entry->position().phi(), id_sectors);
327 for (const int& sect : id_sectors) {
328 std::map<int, std::vector<double>>::const_iterator theta_itr = cache.eta_seeds.find(sect);
329 if (theta_itr == cache.eta_seeds.end()) continue;
330 if (std::find_if(theta_itr->second.begin(), theta_itr->second.end(),
331 [&etaID](const double eta_seed) { return std::abs(etaID - eta_seed) < 0.1; }) != theta_itr->second.end())
332 return true;
333 }
334 return false;
335}
const TrackParameters * muonEntryLayerIntersection() const
access to intersection with the muon entry layer return nullptr if the intersection failed
const Amg::Vector3D & position() const
Access method for the position.
ParametersBase< TrackParametersDim, Charged > TrackParameters

◆ hasMatchingSegment()

bool MuonInDetToMuonSystemExtensionAlg::hasMatchingSegment ( const MuonCombined::InDetCandidate & id_cand,
const InDetCandidateCache & cache ) const
private

Searches for segments within theta < 0.2 && sharing the same sector.

Definition at line 292 of file MuonInDetToMuonSystemExtensionAlg.cxx.

293 {
295 const double ThetaID = ms_entry->position().theta();
296 std::vector<int> id_sectors;
297 m_sector_mapping.getSectors(ms_entry->position().phi(), id_sectors);
298 auto sector_match = [&id_sectors, this](const Amg::Vector3D& seg_pos) -> bool {
299 std::vector<int> seg_sectors;
300 m_sector_mapping.getSectors(seg_pos.phi(), seg_sectors);
301 return std::find_if(id_sectors.begin(), id_sectors.end(), [&seg_sectors](const int id_sec) {
302 return std::find(seg_sectors.begin(), seg_sectors.end(), id_sec) != seg_sectors.end();
303 }) != id_sectors.end();
304 };
305 for (const Muon::MuonSegment* itSeg : cache.candidate_segments) {
306 const Amg::Vector3D pos = itSeg->globalPosition();
307 const double dTheta = pos.theta() - ThetaID;
308 const bool theta_match = std::abs(dTheta) < 0.2;
309 if (!theta_match) {
310 ATH_MSG_VERBOSE("dTheta cut failed");
311 continue;
312 }
313 if (!sector_match(pos)) {
314 ATH_MSG_VERBOSE("dPhi cut failed");
315 continue;
316 }
317 return true;
318 }
319 return false;
320}
virtual const Amg::Vector3D & globalPosition() const override final
global position

◆ initialize()

StatusCode MuonInDetToMuonSystemExtensionAlg::initialize ( )
override

Definition at line 32 of file MuonInDetToMuonSystemExtensionAlg.cxx.

32 {
34 ATH_CHECK(m_idHelperSvc.retrieve());
35 ATH_CHECK(m_edmHelperSvc.retrieve());
36 ATH_CHECK(m_combTagMap.initialize());
37 ATH_CHECK(m_inputCandidate.initialize());
38 ATH_CHECK(m_bulkInDetCandKey.initialize());
40 if (m_restrictExtension) { ATH_MSG_INFO("Use the Hough seeds to determine the sectors in the MS worth for being extrapolated to"); }
44 return StatusCode::SUCCESS;
45}
#define ATH_MSG_INFO(x)
SG::ReadHandleKey< MuonCombined::InDetCandidateToTagMap > m_combTagMap
That is the collection of MuidCo candidates.
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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.

◆ isClonable()

◆ maskHits()

void MuonInDetToMuonSystemExtensionAlg::maskHits ( const Muon::MuonSegment * muon_seg,
InDetCandidateCache & output_cache ) const
private

Mask the hits of the corresponding muon segment as used.

Definition at line 378 of file MuonInDetToMuonSystemExtensionAlg.cxx.

378 {
379 const Identifier seg_id = m_edmHelperSvc->chamberId(*muon_seg);
380 const LayerIndex layer_index = m_idHelperSvc->layerIndex(seg_id);
381 const RegionIndex region_index = m_idHelperSvc->regionIndex(seg_id);
382 const unsigned int hash = Muon::MuonStationIndex::sectorLayerHash(region_index, layer_index);
383 std::set<Identifier>& id_set = output_cache.consumed_hits[hash];
384 for (const Trk::MeasurementBase* meas : muon_seg->containedMeasurements()) {
385 const Identifier meas_id = m_edmHelperSvc->getIdentifier(*meas);
386 id_set.insert(meas_id);
387 }
388}

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

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

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ selectCandidates()

StatusCode MuonInDetToMuonSystemExtensionAlg::selectCandidates ( const EventContext & ctx,
InDetCandidateCache & cache ) const
private

Select the MuidCo candidates and put the associated id tracks on a block list.

Definition at line 73 of file MuonInDetToMuonSystemExtensionAlg.cxx.

73 {
74 SG::ReadHandle<MuonCombined::InDetCandidateToTagMap> tag_map{m_combTagMap, ctx};
75 if (!tag_map.isValid()) {
76 ATH_MSG_FATAL("Failed to retrieve the tag map from " << tag_map.fullKey());
77 return StatusCode::FAILURE;
78 }
79 if (tag_map->empty()) {
80 ATH_MSG_DEBUG("No combined candidates in this event");
81 return StatusCode::SUCCESS;
82 }
83
84 for (const auto& combined_tags : *tag_map) {
85 if (combined_tags.second->author() != xAOD::Muon::MuidCo) {
86 ATH_MSG_WARNING("Found a non MuidCo tag.... Please check " << combined_tags.second->toString());
87 continue;
88 }
89 const MuonCombined::CombinedFitTag* cmb_tag = dynamic_cast<const MuonCombined::CombinedFitTag*>(combined_tags.second.get());
90 MuidCoCache cache{combined_tags.first, cmb_tag};
91 out_cache.tag_map.push_back(std::move(cache));
92 out_cache.excluded_trks.insert(combined_tags.first);
93 for (const Muon::MuonSegment* muon_seg : cmb_tag->associatedSegments()) {
94 out_cache.combined_segs.insert(muon_seg);
95 maskHits(muon_seg, out_cache);
96 }
97 }
98 return StatusCode::SUCCESS;
99}
std::vector< const Muon::MuonSegment * > associatedSegments() const override
access to associated segments, empty vector if non available
const DataObjID & fullKey() const
Return the key as a DataObjID.

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

77{
78 return BaseAlg::sysExecute (ctx);
79}

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in HypoBase, and InputMakerBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

107 {
109
110 if (sc.isFailure()) {
111 return sc;
112 }
113
114 ServiceHandle<ICondSvc> cs("CondSvc",name());
115 for (auto h : outputHandles()) {
116 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
117 // do this inside the loop so we don't create the CondSvc until needed
118 if ( cs.retrieve().isFailure() ) {
119 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
120 return StatusCode::SUCCESS;
121 }
122 if (cs->regHandle(this,*h).isFailure()) {
124 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
125 << " with CondSvc");
126 }
127 }
128 }
129 return sc;
130}
#define ATH_MSG_ERROR(x)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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 }

Member Data Documentation

◆ m_bulkInDetCandKey

SG::WriteHandleKey<InDetCandidateCollection> MuonInDetToMuonSystemExtensionAlg::m_bulkInDetCandKey {this, "WriteInDetCandidates", "InDetCandidatesSystemExtened"}
private

Collection of InDet candidates written for MuGirl and MuonSegmentTag.

Definition at line 46 of file MuonInDetToMuonSystemExtensionAlg.h.

46{this, "WriteInDetCandidates", "InDetCandidatesSystemExtened"};

◆ m_combTagMap

SG::ReadHandleKey<MuonCombined::InDetCandidateToTagMap> MuonInDetToMuonSystemExtensionAlg::m_combTagMap {this, "CombinedTagMap", "muidcoTagMap", "Combined muon tag map"}
private

That is the collection of MuidCo candidates.

Definition at line 63 of file MuonInDetToMuonSystemExtensionAlg.h.

63{this, "CombinedTagMap", "muidcoTagMap", "Combined muon tag map"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_edmHelperSvc

ServiceHandle<Muon::IMuonEDMHelperSvc> MuonInDetToMuonSystemExtensionAlg::m_edmHelperSvc
private
Initial value:
{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
"Handle to the service providing the IMuonEDMHelperSvc interface"}

Definition at line 67 of file MuonInDetToMuonSystemExtensionAlg.h.

67 {this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
68 "Handle to the service providing the IMuonEDMHelperSvc interface"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_excludeNSW

Gaudi::Property<bool> MuonInDetToMuonSystemExtensionAlg::m_excludeNSW {this, "noNSWforSeeding", false, "Ignore hits/segments from the NSW"}
private

Prelimnary studies have shown that the NSWs generate a massive amount of fake candidates.

Definition at line 113 of file MuonInDetToMuonSystemExtensionAlg.h.

113{this, "noNSWforSeeding", false, "Ignore hits/segments from the NSW"};

◆ m_extendBulk

Gaudi::Property<bool> MuonInDetToMuonSystemExtensionAlg::m_extendBulk {this, "ExtendBulk", true}
private

Shall ordinary ID tracks be equiped with a muon system extension used by MuGirl later.

Definition at line 119 of file MuonInDetToMuonSystemExtensionAlg.h.

119{this, "ExtendBulk", true};

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_extendSAF

Gaudi::Property<bool> MuonInDetToMuonSystemExtensionAlg::m_extendSAF {this, "ExtendSAF", false}
private

Shall SAF tracks be equiped with a muon system extension used by MuGirl later.

Definition at line 117 of file MuonInDetToMuonSystemExtensionAlg.h.

117{this, "ExtendSAF", false};

◆ m_extThreshold

Gaudi::Property<float> MuonInDetToMuonSystemExtensionAlg::m_extThreshold {this, "ExtensionPtThreshold", 2500}
private

Minimum pt threshold of the IdCandidate to be extrapolated through the spectrometer.

Definition at line 115 of file MuonInDetToMuonSystemExtensionAlg.h.

115{this, "ExtensionPtThreshold", 2500};

◆ m_houghDataPerSectorVecKey

SG::ReadHandleKey<Muon::HoughDataPerSectorVec> MuonInDetToMuonSystemExtensionAlg::m_houghDataPerSectorVecKey
private
Initial value:
{this, "LayerHoughKey", "HoughDataPerSectorVec",
"HoughDataPerSectorVec key"}

Use the hough data to find sectors in the speectrometer traversed by a muon.

Definition at line 51 of file MuonInDetToMuonSystemExtensionAlg.h.

51 {this, "LayerHoughKey", "HoughDataPerSectorVec",
52 "HoughDataPerSectorVec key"};

◆ m_houghMin

Gaudi::Property<int> MuonInDetToMuonSystemExtensionAlg::m_houghMin {this, "minHoughHits", 4, "Minimum number of hits required for a hough maximum to be accepted"}
private

The hough maxima always contain at least 2 hits.

If a muon track passes through a chamber one expects more than that. Apply a minimum cuts on the hits in the hough maximum to reject background --> needs to be further tuned

Definition at line 109 of file MuonInDetToMuonSystemExtensionAlg.h.

109{this, "minHoughHits", 4, "Minimum number of hits required for a hough maximum to be accepted"};

◆ m_idHelperSvc

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

Definition at line 65 of file MuonInDetToMuonSystemExtensionAlg.h.

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

◆ m_inputCandidate

SG::ReadHandleKey<InDetCandidateCollection> MuonInDetToMuonSystemExtensionAlg::m_inputCandidate {this, "InputInDetCandidates", "InDetCandidates"}
private

Definition at line 43 of file MuonInDetToMuonSystemExtensionAlg.h.

43{this, "InputInDetCandidates", "InDetCandidates"};

◆ m_muonSystemExtensionTool

ToolHandle<Muon::IMuonSystemExtensionTool> MuonInDetToMuonSystemExtensionAlg::m_muonSystemExtensionTool {this, "MuonSystemExtensionTool", "", "Muon system extension tool"}
private

The system extension tool extrapolates the candidate through the spectrometer.

Definition at line 61 of file MuonInDetToMuonSystemExtensionAlg.h.

61{this, "MuonSystemExtensionTool", "", "Muon system extension tool"};

◆ m_restrictExtension

Gaudi::Property<bool> MuonInDetToMuonSystemExtensionAlg::m_restrictExtension {this, "UseOnlyHitSectors", false}
private

Restrict the extrapolation of ID tracks to sectors in the MS where at least a hit is recorded.

Definition at line 106 of file MuonInDetToMuonSystemExtensionAlg.h.

106{this, "UseOnlyHitSectors", false};

◆ m_sector_mapping

const Muon::MuonSectorMapping MuonInDetToMuonSystemExtensionAlg::m_sector_mapping {}
private

Definition at line 121 of file MuonInDetToMuonSystemExtensionAlg.h.

121{};

◆ m_segmentKey

SG::ReadHandleKey<Trk::SegmentCollection> MuonInDetToMuonSystemExtensionAlg::m_segmentKey
private
Initial value:
{this, "MuonSegmentLocation", "TrackMuonSegments",
"name of muon segment container"}

Let's exploit the segments to get rid of as much tracks as possible.

Definition at line 54 of file MuonInDetToMuonSystemExtensionAlg.h.

54 {this, "MuonSegmentLocation", "TrackMuonSegments",
55 "name of muon segment container"};

◆ m_segmentQuality

Gaudi::Property<int> MuonInDetToMuonSystemExtensionAlg::m_segmentQuality {this, "segQuality", 1, "Quality cut on the segment."}
private

Definition at line 111 of file MuonInDetToMuonSystemExtensionAlg.h.

111{this, "segQuality", 1, "Quality cut on the segment."};

◆ m_segmentSelector

PublicToolHandle<Muon::IMuonSegmentSelectionTool> MuonInDetToMuonSystemExtensionAlg::m_segmentSelector
private
Initial value:
{this, "MuonSegmentSelectionTool",
"Muon::MuonSegmentSelectionTool/MuonSegmentSelectionTool"}

Definition at line 57 of file MuonInDetToMuonSystemExtensionAlg.h.

57 {this, "MuonSegmentSelectionTool",
58 "Muon::MuonSegmentSelectionTool/MuonSegmentSelectionTool"};

◆ m_stauInDetCandKey

SG::WriteHandleKey<InDetCandidateCollection> MuonInDetToMuonSystemExtensionAlg::m_stauInDetCandKey {this, "WriteStauCandidates", ""}
private

Collection of InDet candidates written for MuGirlStau.

Definition at line 48 of file MuonInDetToMuonSystemExtensionAlg.h.

48{this, "WriteStauCandidates", ""};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.


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