ATLAS Offline Software
MuonInDetToMuonSystemExtensionAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
11 namespace {
12  constexpr unsigned int num_sectors = 16;
14  using LayerIndex = Muon::MuonStationIndex::LayerIndex;
15 
16  inline const Trk::PrepRawData* prepData(const std::shared_ptr<MuonHough::Hit>& hit) {
17  if (hit->prd) return hit->prd;
18  if (hit->tgc) return hit->tgc->phiCluster.front();
19  return nullptr;
20  }
23  struct hough_chamber {
24  int nhits{0};
25  double eta{0.};
26  std::set<int> sectors;
27  };
28 
29 } // namespace
30 
31 MuonInDetToMuonSystemExtensionAlg::MuonInDetToMuonSystemExtensionAlg(const std::string& name, ISvcLocator* pSvcLocator) :
32  AthReentrantAlgorithm(name, pSvcLocator) {}
33 
36  ATH_CHECK(m_idHelperSvc.retrieve());
37  ATH_CHECK(m_edmHelperSvc.retrieve());
39  ATH_CHECK(m_inputCandidate.initialize());
40  ATH_CHECK(m_bulkInDetCandKey.initialize());
41  ATH_CHECK(m_stauInDetCandKey.initialize(!m_stauInDetCandKey.empty()));
42  if (m_restrictExtension) { ATH_MSG_INFO("Use the Hough seeds to determine the sectors in the MS worth for being extrapolated to"); }
45  if (m_restrictExtension) { ATH_CHECK(m_segmentSelector.retrieve()); }
46  return StatusCode::SUCCESS;
47 }
48 
50  ATH_MSG_DEBUG("Cakes are availablei in "<<ctx.eventID().event_number());
51  InDetCandidateCache output_cache{};
52 
54  if (!input_container.isValid()) {
55  ATH_MSG_FATAL("Failed to retrieve " << m_inputCandidate.fullKey());
56  return StatusCode::FAILURE;
57  }
58  output_cache.input_candidates = input_container.cptr();
59  ATH_CHECK(selectCandidates(ctx, output_cache));
60 
61  if (m_restrictExtension) {
62  ATH_CHECK(findSegments(ctx, output_cache));
63  ATH_CHECK(findHitSectors(ctx, output_cache));
64  }
65 
66  ATH_MSG_DEBUG("Find the inner detector candidates to be used for MuGirl / Segment tagging");
67  ATH_CHECK(create(ctx, output_cache));
69  ATH_CHECK(indetCandidateCollection.record(std::move(output_cache.outputContainer)));
70 
71  ATH_CHECK(createStaus(ctx, indetCandidateCollection.ptr(), output_cache.tag_map));
72 
73  return StatusCode::SUCCESS;
74 }
77  if (!tag_map.isValid()) {
78  ATH_MSG_FATAL("Failed to retrieve the tag map from " << tag_map.fullKey());
79  return StatusCode::FAILURE;
80  }
81  if (tag_map->empty()) {
82  ATH_MSG_DEBUG("No combined candidates in this event");
83  return StatusCode::SUCCESS;
84  }
85 
86  for (const auto& combined_tags : *tag_map) {
87  if (combined_tags.second->author() != xAOD::Muon::MuidCo) {
88  ATH_MSG_WARNING("Found a non MuidCo tag.... Please check " << combined_tags.second->toString());
89  continue;
90  }
91  const MuonCombined::CombinedFitTag* cmb_tag = dynamic_cast<const MuonCombined::CombinedFitTag*>(combined_tags.second.get());
92  MuidCoCache cache{combined_tags.first, cmb_tag};
93  out_cache.tag_map.push_back(std::move(cache));
94  out_cache.excluded_trks.insert(combined_tags.first);
95  for (const Muon::MuonSegment* muon_seg : cmb_tag->associatedSegments()) {
96  out_cache.combined_segs.insert(muon_seg);
97  maskHits(muon_seg, out_cache);
98  }
99  }
100  return StatusCode::SUCCESS;
101 }
104  for (const MuonCombined::InDetCandidate* candidate : *out_cache.input_candidates) {
105  if (out_cache.excluded_trks.count(candidate)) {
106  ATH_MSG_VERBOSE("Inner detector track " << candidate->toString() << " has already been used by MuidCo");
107  continue;
108  }
111  if (candidate->indetTrackParticle().pt() < m_extThreshold || (!m_extendSAF && candidate->isSiliconAssociated()) ||
112  (!m_extendBulk && !candidate->isSiliconAssociated())) {
113  ATH_MSG_VERBOSE("Inner detector track " << candidate->toString() << " is too soft");
114  continue;
115  }
116 
119  cache.candidate = std::make_unique<MuonCombined::InDetCandidate>(candidate->indetTrackParticleLink());
120  cache.candidate->setSiliconAssociated(candidate->isSiliconAssociated());
121  cache.candidate->setExtension(candidate->getCaloExtension());
122 
123  const Muon::MuonSystemExtension* extension = candidate->getExtension();
125  if (extension) {
127  std::vector<Muon::MuonSystemExtension::Intersection> intersects = extension->layerIntersections();
128  cache.candidate->setExtension(
129  std::make_unique<Muon::MuonSystemExtension>(&extension->muonEntryLayerIntersection(), std::move(intersects)));
130  } else {
132  const bool seg_match = !m_restrictExtension || hasMatchingSegment(*candidate, out_cache);
133 
134  if (!seg_match && !hasMatchingSeed(*candidate, out_cache)) continue;
135  cache.useHitSectors = !seg_match;
136  cache.sectorsWithHits = &out_cache.hit_sectors;
137  cache.createSystemExtension = true;
138  cache.requireSystemExtension = true;
139 
140  if (!m_muonSystemExtensionTool->muonSystemExtension(ctx, cache)) {
141  ATH_MSG_VERBOSE("Extension failed");
142  continue;
143  }
144  }
145  out_cache.outputContainer->push_back(std::move(cache.candidate));
146  }
147  if (msgLevel(MSG::DEBUG)) {
148  std::stringstream sstr;
149  for (const MuonCombined::InDetCandidate* extended : *out_cache.outputContainer) {
150  sstr << " * " << extended->toString() << std::endl;
151  }
152  if (!out_cache.excluded_trks.empty()) {
153  sstr << std::endl << " ======== The following tracks were already successfully combined ======== " << std::endl;
154  for (const MuonCombined::InDetCandidate* combined : out_cache.excluded_trks) {
155  sstr << " = " << combined->toString() << std::endl;
156  }
157  }
158  if (out_cache.excluded_trks.size() + out_cache.outputContainer->size() != out_cache.input_candidates->size()) {
159  sstr << std::endl << " ++++++++ The following candidates were not extrapolated ++++++++ " << std::endl;
162 
163  for (const MuonCombined::InDetCandidate* rejected : *out_cache.input_candidates) {
164  if (out_cache.excluded_trks.count(rejected) ||
165  std::find_if(begin, end,
166  [rejected](const MuonCombined::InDetCandidate* extended) { return (*rejected) == (*extended); }) != end)
167  continue;
168  sstr << " + " << rejected->toString() << std::endl;
169  }
170  }
171  ATH_MSG_DEBUG("Extrapolated " << out_cache.outputContainer->size() << " out of " << out_cache.input_candidates->size()
172  << " tracks through the spectrometer" << std::endl
173  << std::endl
174  << sstr.str());
175  }
176  return StatusCode::SUCCESS;
177 }
178 
181  if (!readHandle.isValid()) {
182  ATH_MSG_FATAL("Failed to retrieve the prep data container " << m_houghDataPerSectorVecKey.fullKey());
183  return StatusCode::FAILURE;
184  }
185  const std::vector<Muon::HoughDataPerSec>& hough_data = readHandle->vec;
187  auto count_finished = [&output_cache]() -> unsigned int {
188  unsigned int n{0};
189  for (const auto& sector_hits : output_cache.hit_sectors) { n += sector_hits.second.size() >= num_sectors; }
190  return n;
191  };
192 
195  for (int det_region = 0; det_region < Muon::MuonStationIndex::DetectorRegionIndexMax; ++det_region) {
196  const RegionIndex region_index = static_cast<RegionIndex>(det_region);
198  const LayerIndex layer_index = static_cast<LayerIndex>(layer);
199  const unsigned int hash = Muon::MuonStationIndex::sectorLayerHash(region_index, layer_index);
201  const std::set<Identifier>& masked_hits = output_cache.consumed_hits[hash];
202 
204  auto num_hough_hits = [&masked_hits, this](const std::shared_ptr<MuonHough::MuonLayerHough::Maximum>& hough_maximum) {
205  std::map<Identifier, hough_chamber> chamber_counts;
206  for (const std::shared_ptr<MuonHough::Hit>& hough_hit : hough_maximum->hits) {
207  const Trk::PrepRawData* prep = prepData(hough_hit);
208  const Identifier chId = prep->identify();
209  if (masked_hits.count(chId) || (m_excludeNSW && (m_idHelperSvc->isMM(chId) || m_idHelperSvc->issTgc(chId)))) {
210  ATH_MSG_VERBOSE("Do not reuse hit " << m_idHelperSvc->toString(chId));
211  continue;
212  }
213  ATH_MSG_VERBOSE("Count hough hit " << m_idHelperSvc->toString(chId));
214  // Split the seeds into the chambers
215  hough_chamber& chamber = chamber_counts[m_idHelperSvc->chamberId(chId)];
216  ++chamber.nhits;
217  const Amg::Vector3D glob_pos = prep->detectorElement()->center(chId);
218  chamber.eta += glob_pos.eta();
219  chamber.sectors.insert(m_sector_mapping.getSector(glob_pos.phi()));
220  }
222  hough_chamber N{};
223  for (auto& ch_it : chamber_counts) {
224  if (N.nhits < ch_it.second.nhits) { N = std::move(ch_it.second); }
225  }
227  N.eta /= std::max(N.nhits, 1);
228  return N;
229  };
230 
231  for (const Muon::HoughDataPerSec& sector_data : hough_data) {
232  const Muon::HoughDataPerSec::MaximumVec& eta_hits = sector_data.maxVec[hash];
234  for (const std::shared_ptr<MuonHough::MuonLayerHough::Maximum>& maxima : eta_hits) {
236  const hough_chamber effect_hits = num_hough_hits(maxima);
238  if (m_houghMin > effect_hits.nhits) continue;
239  ATH_MSG_VERBOSE("Hough maximum in " << Muon::MuonStationIndex::regionName(region_index) << ", "
240  << Muon::MuonStationIndex::layerName(layer_index)
241  << ", hits: " << effect_hits.nhits);
242 
243  for (const int sector : effect_hits.sectors) {
244  output_cache.hit_sectors[region_index].insert(sector);
246  output_cache.eta_seeds[sector].push_back(effect_hits.eta);
247  }
248  }
249  if (count_finished() >= RegionIndex::DetectorRegionIndexMax) {
250  ATH_MSG_VERBOSE("The MS is filled up with Hough seeds. We do not need to search for them any longer");
251  break;
252  }
253  }
254  }
255  for (auto& theta_pair : output_cache.eta_seeds) { std::sort(theta_pair.second.begin(), theta_pair.second.end()); }
256  }
257  output_cache.consumed_hits.clear();
258  return StatusCode::SUCCESS;
259 }
262  if (!segmentContainer.isValid()) {
263  ATH_MSG_FATAL("Failed to retrieve the Muon segment container " << m_segmentKey.fullKey());
264  return StatusCode::FAILURE;
265  }
266  for (const Trk::Segment* trk_segment : *segmentContainer) {
267  // Which in reality is a Muon segment
268  const Muon::MuonSegment* muon_segment = dynamic_cast<const Muon::MuonSegment*>(trk_segment);
269  if (!muon_segment) {
270  ATH_MSG_WARNING("How can it be that a Muon segment is not a muon segment?");
271  continue;
272  }
273  // Check if the segment satisfies the quality criteria
274  if (m_segmentSelector->quality(*muon_segment) < m_segmentQuality) continue;
276  if (output_cache.combined_segs.count(muon_segment)) {
277  ATH_MSG_VERBOSE("Segment was already used in combined fit");
278  continue;
279  }
280  if (m_excludeNSW && std::find_if(muon_segment->containedMeasurements().begin(),muon_segment->containedMeasurements().end(),
281  [this](const Trk::MeasurementBase* meas ){
282  const Identifier meas_id = m_edmHelperSvc->getIdentifier(*meas);
283  return meas_id.is_valid() && (m_idHelperSvc->isMM(meas_id) || m_idHelperSvc->issTgc(meas_id));
284  })!= muon_segment->containedMeasurements().end()) continue;
285 
287  maskHits(muon_segment, output_cache);
288  output_cache.candidate_segments.push_back(muon_segment);
289  }
290  output_cache.combined_segs.clear();
291  return StatusCode::SUCCESS;
292 }
294  const InDetCandidateCache& cache) const {
296  const double ThetaID = ms_entry->position().theta();
297  std::vector<int> id_sectors;
298  m_sector_mapping.getSectors(ms_entry->position().phi(), id_sectors);
299  auto sector_match = [&id_sectors, this](const Amg::Vector3D& seg_pos) -> bool {
300  std::vector<int> seg_sectors;
301  m_sector_mapping.getSectors(seg_pos.phi(), seg_sectors);
302  return std::find_if(id_sectors.begin(), id_sectors.end(), [&seg_sectors](const int id_sec) {
303  return std::find(seg_sectors.begin(), seg_sectors.end(), id_sec) != seg_sectors.end();
304  }) != id_sectors.end();
305  };
306  for (const Muon::MuonSegment* itSeg : cache.candidate_segments) {
307  const Amg::Vector3D pos = itSeg->globalPosition();
308  const double dTheta = pos.theta() - ThetaID;
309  const bool theta_match = std::abs(dTheta) < 0.2;
310  if (!theta_match) {
311  ATH_MSG_VERBOSE("dTheta cut failed");
312  continue;
313  }
314  if (!sector_match(pos)) {
315  ATH_MSG_VERBOSE("dPhi cut failed");
316  continue;
317  }
318  return true;
319  }
320  return false;
321 }
323  const InDetCandidateCache& cache) const {
325  const double etaID = ms_entry->position().eta();
326  std::vector<int> id_sectors;
327  m_sector_mapping.getSectors(ms_entry->position().phi(), id_sectors);
328  for (const int& sect : id_sectors) {
329  std::map<int, std::vector<double>>::const_iterator theta_itr = cache.eta_seeds.find(sect);
330  if (theta_itr == cache.eta_seeds.end()) continue;
331  if (std::find_if(theta_itr->second.begin(), theta_itr->second.end(),
332  [&etaID](const double eta_seed) { return std::abs(etaID - eta_seed) < 0.1; }) != theta_itr->second.end())
333  return true;
334  }
335  return false;
336 }
337 
339  const MuidCoVector& tag_map) const {
340  if (m_stauInDetCandKey.empty()) {
341  ATH_MSG_VERBOSE("No candidates for stau reconstruction will be written");
342  return StatusCode::SUCCESS;
343  }
344  ATH_MSG_DEBUG("Now find the candidates to be considered for MuGirlStau");
345  InDetCandidateCache stau_cache{};
346  stau_cache.input_candidates = ext_candidates;
347 
349  ATH_CHECK(create(ctx, stau_cache));
355  for (const MuidCoCache& idMuidCo : tag_map) {
357  cache.candidate = std::make_unique<MuonCombined::InDetCandidate>(idMuidCo.id_trk->indetTrackParticleLink());
358  cache.candidate->setSiliconAssociated(idMuidCo.id_trk->isSiliconAssociated());
359  cache.candidate->setExtension(idMuidCo.id_trk->getCaloExtension());
360  cache.useHitSectors = false;
361  cache.createSystemExtension = true;
362  cache.requireSystemExtension = true;
363 
364  if (!m_muonSystemExtensionTool->muonLayerInterSections(ctx, *idMuidCo.cmb_trk, cache)) {
365  ATH_MSG_FATAL("Could not determine the intersections. Although that should be possible");
366  return StatusCode::FAILURE;
367  }
368  stau_cache.outputContainer->push_back(std::move(cache.candidate));
369  }
370 
371  SG::WriteHandle<InDetCandidateCollection> indetCandidateCollection(m_stauInDetCandKey, ctx);
372  // sort candidates beofre storing, otherwise ordering in container of stau segments can be inconsistent
373  std::sort(stau_cache.outputContainer->begin(),stau_cache.outputContainer->end(),[](const MuonCombined::InDetCandidate*a, const MuonCombined::InDetCandidate*b){
374  return a->indetTrackParticle().pt() < b->indetTrackParticle().pt();});
375  ATH_CHECK(indetCandidateCollection.record(std::move(stau_cache.outputContainer)));
376  return StatusCode::SUCCESS;
377 }
378 
380  const Identifier seg_id = m_edmHelperSvc->chamberId(*muon_seg);
381  const LayerIndex layer_index = m_idHelperSvc->layerIndex(seg_id);
382  const RegionIndex region_index = m_idHelperSvc->regionIndex(seg_id);
383  const unsigned int hash = Muon::MuonStationIndex::sectorLayerHash(region_index, layer_index);
384  std::set<Identifier>& id_set = output_cache.consumed_hits[hash];
385  for (const Trk::MeasurementBase* meas : muon_seg->containedMeasurements()) {
386  const Identifier meas_id = m_edmHelperSvc->getIdentifier(*meas);
387  id_set.insert(meas_id);
388  }
389 }
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:73
MuonInDetToMuonSystemExtensionAlg::m_muonSystemExtensionTool
ToolHandle< Muon::IMuonSystemExtensionTool > m_muonSystemExtensionTool
The system extension tool extrapolates the candidate through the spectrometer.
Definition: MuonInDetToMuonSystemExtensionAlg.h:61
MuonInDetToMuonSystemExtensionAlg::InDetCandidateCache::consumed_hits
std::map< unsigned int, std::set< Identifier > > consumed_hits
Map of hits that were successfully combined to a muon segment Key is the hash made out of region & la...
Definition: MuonInDetToMuonSystemExtensionAlg.h:99
Muon::IMuonSystemExtensionTool::SystemExtensionCache::sectorsWithHits
const std::map< MuonStationIndex::DetectorRegionIndex, std::set< int > > * sectorsWithHits
Cache the sectors which have a recorded hit.
Definition: IMuonSystemExtensionTool.h:47
Muon::MuonStationIndex::LayerIndexMax
@ LayerIndexMax
BEE.
Definition: MuonStationIndex.h:43
MuonInDetToMuonSystemExtensionAlg::m_extThreshold
Gaudi::Property< float > m_extThreshold
Minimum pt threshold of the IdCandidate to be extrapolated through the spectrometer.
Definition: MuonInDetToMuonSystemExtensionAlg.h:115
MuonCombined::InDetCandidate::getExtension
const Muon::MuonSystemExtension * getExtension() const
Definition: InDetCandidate.cxx:46
MuonCombined::CombinedFitTag::associatedSegments
std::vector< const Muon::MuonSegment * > associatedSegments() const override
access to associated segments, empty vector if non available
Definition: CombinedFitTag.cxx:49
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
MuonInDetToMuonSystemExtensionAlg::InDetCandidateCache::outputContainer
std::unique_ptr< InDetCandidateCollection > outputContainer
Output container for the StoreGate.
Definition: MuonInDetToMuonSystemExtensionAlg.h:90
MuonInDetToMuonSystemExtensionAlg::m_combTagMap
SG::ReadHandleKey< MuonCombined::InDetCandidateToTagMap > m_combTagMap
That is the collection of MuidCo candidates.
Definition: MuonInDetToMuonSystemExtensionAlg.h:63
MuonInDetToMuonSystemExtensionAlg::m_segmentSelector
PublicToolHandle< Muon::IMuonSegmentSelectionTool > m_segmentSelector
Definition: MuonInDetToMuonSystemExtensionAlg.h:57
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
MuonInDetToMuonSystemExtensionAlg::m_extendBulk
Gaudi::Property< bool > m_extendBulk
Shall ordinary ID tracks be equiped with a muon system extension used by MuGirl later.
Definition: MuonInDetToMuonSystemExtensionAlg.h:119
MuonInDetToMuonSystemExtensionAlg::MuidCoVector
std::vector< MuidCoCache > MuidCoVector
Definition: MuonInDetToMuonSystemExtensionAlg.h:76
MuonInDetToMuonSystemExtensionAlg::m_houghMin
Gaudi::Property< int > m_houghMin
The hough maxima always contain at least 2 hits.
Definition: MuonInDetToMuonSystemExtensionAlg.h:109
MuonInDetToMuonSystemExtensionAlg::m_bulkInDetCandKey
SG::WriteHandleKey< InDetCandidateCollection > m_bulkInDetCandKey
Collection of InDet candidates written for MuGirl and MuonSegmentTag.
Definition: MuonInDetToMuonSystemExtensionAlg.h:46
calibdata.chamber
chamber
Definition: calibdata.py:32
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
ConstDataVector.h
DataVector adapter that acts like it holds const pointers.
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
Muon::IMuonSystemExtensionTool::SystemExtensionCache::candidate
std::unique_ptr< MuonCombined::InDetCandidate > candidate
Inner detector candidate.
Definition: IMuonSystemExtensionTool.h:44
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
Muon::MuonSectorMapping::getSectors
void getSectors(double phi, std::vector< int > &sectors) const
returns the main sector plus neighboring if the phi position is in an overlap region
Definition: MuonSectorMapping.h:97
TruthParticleContainer.h
EventPrimitivesHelpers.h
Muon::MuonStationIndex::LayerIndex
LayerIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:38
MuonInDetToMuonSystemExtensionAlg::InDetCandidateCache::combined_segs
std::set< const Muon::MuonSegment * > combined_segs
List of segments that were successfully combined to a muon.
Definition: MuonInDetToMuonSystemExtensionAlg.h:87
Muon::MuonStationIndex::sectorLayerHash
static unsigned int sectorLayerHash(DetectorRegionIndex detectorRegionIndex, LayerIndex layerIndex)
create a hash out of region and layer
Definition: MuonStationIndex.cxx:226
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
MuonInDetToMuonSystemExtensionAlg::InDetCandidateCache::tag_map
MuidCoVector tag_map
Combined fit tag map.
Definition: MuonInDetToMuonSystemExtensionAlg.h:85
Muon::IMuonSystemExtensionTool::SystemExtensionCache::requireSystemExtension
bool requireSystemExtension
Require that the muon system extension was successful.
Definition: IMuonSystemExtensionTool.h:56
MuonInDetToMuonSystemExtensionAlg::m_sector_mapping
const Muon::MuonSectorMapping m_sector_mapping
Definition: MuonInDetToMuonSystemExtensionAlg.h:121
MuonCombined::InDetCandidate
Definition: InDetCandidate.h:18
MuonInDetToMuonSystemExtensionAlg::InDetCandidateCache::input_candidates
const InDetCandidateCollection * input_candidates
Collection of the InDet candidates to consider.
Definition: MuonInDetToMuonSystemExtensionAlg.h:80
MuonInDetToMuonSystemExtensionAlg::maskHits
void maskHits(const Muon::MuonSegment *muon_seg, InDetCandidateCache &output_cache) const
Mask the hits of the corresponding muon segment as used.
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:379
MuonCombined::InDetCandidate::indetTrackParticleLink
const ElementLink< xAOD::TrackParticleContainer > & indetTrackParticleLink() const
access TrackParticleLink
Definition: InDetCandidate.cxx:33
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Trk::CaloExtension::muonEntryLayerIntersection
const TrackParameters * muonEntryLayerIntersection() const
access to intersection with the muon entry layer return NULL if the intersection failed
Definition: CaloExtension.h:70
MuonInDetToMuonSystemExtensionAlg::execute
StatusCode execute(const EventContext &ctx) const override
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:49
MuonInDetToMuonSystemExtensionAlg.h
Muon::MuonSectorMapping::getSector
int getSector(double phi) const
returns the sector corresponding to the phi position
Definition: MuonSectorMapping.h:86
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
MuonInDetToMuonSystemExtensionAlg::m_segmentQuality
Gaudi::Property< int > m_segmentQuality
Definition: MuonInDetToMuonSystemExtensionAlg.h:111
MuonInDetToMuonSystemExtensionAlg::InDetCandidateCache
Definition: MuonInDetToMuonSystemExtensionAlg.h:78
Muon::MuonStationIndex::regionName
static const std::string & regionName(DetectorRegionIndex index)
convert DetectorRegionIndex into a string
Definition: MuonStationIndex.cxx:176
MuonInDetToMuonSystemExtensionAlg::m_stauInDetCandKey
SG::WriteHandleKey< InDetCandidateCollection > m_stauInDetCandKey
Collection of InDet candidates written for MuGirlStau.
Definition: MuonInDetToMuonSystemExtensionAlg.h:48
Muon::MuonSystemExtension::muonEntryLayerIntersection
const Trk::TrackParameters & muonEntryLayerIntersection() const
access to intersection with the muon entry layer
Definition: MuonSystemExtension.h:60
MuonInDetToMuonSystemExtensionAlg::m_restrictExtension
Gaudi::Property< bool > m_restrictExtension
Restrict the extrapolation of ID tracks to sectors in the MS where at least a hit is recorded.
Definition: MuonInDetToMuonSystemExtensionAlg.h:106
MuonInDetToMuonSystemExtensionAlg::m_edmHelperSvc
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc
Definition: MuonInDetToMuonSystemExtensionAlg.h:67
MuonInDetToMuonSystemExtensionAlg::createStaus
StatusCode createStaus(const EventContext &ctx, const InDetCandidateCollection *ext_candidates, const MuidCoVector &tag_map) const
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:338
MuonInDetToMuonSystemExtensionAlg::findSegments
StatusCode findSegments(const EventContext &ctx, InDetCandidateCache &output_cache) const
Select good segments.
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:260
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
MuonInDetToMuonSystemExtensionAlg::MuonInDetToMuonSystemExtensionAlg
MuonInDetToMuonSystemExtensionAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:31
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Muon::IMuonSystemExtensionTool::SystemExtensionCache::createSystemExtension
bool createSystemExtension
Try to create the muon system extension.
Definition: IMuonSystemExtensionTool.h:54
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
Muon::TgcClusterObj3D::phiCluster
HitList phiCluster
Definition: TgcHitClustering.h:27
Muon::MuonSystemExtension
Tracking class to hold the extrapolation from a particle from the calo entry to the end of muon syste...
Definition: MuonSystemExtension.h:18
Trk::Segment::containedMeasurements
const std::vector< const Trk::MeasurementBase * > & containedMeasurements() const
returns the vector of Trk::MeasurementBase objects
Definition: Tracking/TrkEvent/TrkSegment/TrkSegment/Segment.h:166
Trk::Segment
Definition: Tracking/TrkEvent/TrkSegment/TrkSegment/Segment.h:56
MuonInDetToMuonSystemExtensionAlg::selectCandidates
StatusCode selectCandidates(const EventContext &ctx, InDetCandidateCache &cache) const
Select the MuidCo candidates and put the associated id tracks on a black list.
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:75
MuonCombined::CombinedFitTag
TagBase implementation for a combined fit.
Definition: CombinedFitTag.h:24
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Muon::MuonStationIndex::layerName
static const std::string & layerName(LayerIndex index)
convert LayerIndex into a string
Definition: MuonStationIndex.cxx:192
Trk::ParametersBase
Definition: ParametersBase.h:55
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
MuonInDetToMuonSystemExtensionAlg::InDetCandidateCache::excluded_trks
std::set< const MuonCombined::InDetCandidate * > excluded_trks
Inner detector tracks to exclude.
Definition: MuonInDetToMuonSystemExtensionAlg.h:83
MuonInDetToMuonSystemExtensionAlg::hasMatchingSeed
bool hasMatchingSeed(const MuonCombined::InDetCandidate &id_cand, const InDetCandidateCache &cache) const
Searches for hough seeds within theta < 0.2 && sharing the same sector.
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:322
MuonInDetToMuonSystemExtensionAlg::InDetCandidateCache::candidate_segments
std::vector< const Muon::MuonSegment * > candidate_segments
Muon segments that could be potentially used for MuGirl / MuTagIMO.
Definition: MuonInDetToMuonSystemExtensionAlg.h:102
MuonCombined::InDetCandidate::toString
std::string toString() const
print candidate to string
Definition: InDetCandidate.cxx:17
MuonInDetToMuonSystemExtensionAlg::hasMatchingSegment
bool hasMatchingSegment(const MuonCombined::InDetCandidate &id_cand, const InDetCandidateCache &cache) const
Searches for segments within theta < 0.2 && sharing the same sector.
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:293
Muon::MuonStationIndex::DetectorRegionIndex
DetectorRegionIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:47
Trk::PrepRawData
Definition: PrepRawData.h:62
Trk::MeasurementBase
Definition: MeasurementBase.h:58
Trk::PrepRawData::identify
Identifier identify() const
return the identifier
MuonSystemExtension.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
MuonInDetToMuonSystemExtensionAlg::findHitSectors
StatusCode findHitSectors(const EventContext &ctx, InDetCandidateCache &output_cache) const
Find the sectors in the MS with muon signals.
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:179
MuonInDetToMuonSystemExtensionAlg::m_excludeNSW
Gaudi::Property< bool > m_excludeNSW
Prelimnary studies have shown that the NSWs generate a massive amount of fake candidates.
Definition: MuonInDetToMuonSystemExtensionAlg.h:113
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonInDetToMuonSystemExtensionAlg::MuidCoCache
Helper struct to cache the MuidCo track and it's associated segments while keeping the association In...
Definition: MuonInDetToMuonSystemExtensionAlg.h:71
MuonCombined::InDetCandidate::getCaloExtension
const Trk::CaloExtension * getCaloExtension() const
Definition: InDetCandidate.cxx:47
Muon::MuonStationIndex::DetectorRegionIndexMax
@ DetectorRegionIndexMax
Definition: MuonStationIndex.h:50
Muon::HoughDataPerSec
Definition: HoughDataPerSec.h:20
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
MuonInDetToMuonSystemExtensionAlg::m_extendSAF
Gaudi::Property< bool > m_extendSAF
Shall SAF tracks be equiped with a muon system extension used by MuGirl later.
Definition: MuonInDetToMuonSystemExtensionAlg.h:117
Muon::IMuonSystemExtensionTool::SystemExtensionCache
Helper struct to pipe all data needed by the tool to equip the Id track with a MuonSystemExtension.
Definition: IMuonSystemExtensionTool.h:41
MuonInDetToMuonSystemExtensionAlg::m_houghDataPerSectorVecKey
SG::ReadHandleKey< Muon::HoughDataPerSectorVec > m_houghDataPerSectorVecKey
Use the hough data to find sectors in the speectrometer traversed by a muon.
Definition: MuonInDetToMuonSystemExtensionAlg.h:51
MuonInDetToMuonSystemExtensionAlg::create
StatusCode create(const EventContext &ctx, InDetCandidateCache &cache) const
Create the InDetCandidaes with system extensions.
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:102
MuonParameters::MuidCo
@ MuidCo
Definition: MuonParamDefs.h:60
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
MuonHough::Hit::tgc
const Muon::TgcClusterObj3D * tgc
Definition: MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonLayerHough/MuonLayerHough/Hit.h:89
a
TList * a
Definition: liststreamerinfos.cxx:10
MuonCombined::InDetCandidate::indetTrackParticle
const xAOD::TrackParticle & indetTrackParticle() const
access TrackParticle
Definition: InDetCandidate.cxx:27
MuonInDetToMuonSystemExtensionAlg::InDetCandidateCache::hit_sectors
std::map< Muon::MuonStationIndex::DetectorRegionIndex, std::set< int > > hit_sectors
Hit sector map.
Definition: MuonInDetToMuonSystemExtensionAlg.h:93
MuonInDetToMuonSystemExtensionAlg::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonInDetToMuonSystemExtensionAlg.h:65
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
MuonCombined::InDetCandidate::isSiliconAssociated
bool isSiliconAssociated() const
Returns true if this candidate was formed from a special far forward InDet track.
Definition: InDetCandidate.cxx:35
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:109
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DEBUG
#define DEBUG
Definition: page_access.h:11
MuonInDetToMuonSystemExtensionAlg::initialize
StatusCode initialize() override
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:34
Muon::MuonSystemExtension::layerIntersections
const std::vector< Intersection > & layerIntersections() const
access to the intersections with the layers.
Definition: MuonSystemExtension.h:62
MuonHough::Hit::prd
const Trk::PrepRawData * prd
access to assiciated hit, either the prd or the tgc pointer is set in athena
Definition: MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonLayerHough/MuonLayerHough/Hit.h:88
Muon::MuonSegment::globalPosition
virtual const Amg::Vector3D & globalPosition() const override final
global position
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:157
Muon::IMuonSystemExtensionTool::SystemExtensionCache::useHitSectors
bool useHitSectors
Switch to restrict the intersection search only to the sectors with hits.
Definition: IMuonSystemExtensionTool.h:52
Muon::MuonSegment
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:45
MuonInDetToMuonSystemExtensionAlg::m_segmentKey
SG::ReadHandleKey< Trk::SegmentCollection > m_segmentKey
Let's exploit the segments to get rid of as much tracks as possible.
Definition: MuonInDetToMuonSystemExtensionAlg.h:54
Trk::TrkDetElementBase::center
virtual const Amg::Vector3D & center() const =0
Return the center of the element.
MuonInDetToMuonSystemExtensionAlg::m_inputCandidate
SG::ReadHandleKey< InDetCandidateCollection > m_inputCandidate
Definition: MuonInDetToMuonSystemExtensionAlg.h:43
MuonInDetToMuonSystemExtensionAlg::InDetCandidateCache::eta_seeds
std::map< int, std::vector< double > > eta_seeds
Definition: MuonInDetToMuonSystemExtensionAlg.h:95
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
Muon::HoughDataPerSec::MaximumVec
std::vector< std::shared_ptr< MuonHough::MuonLayerHough::Maximum > > MaximumVec
Definition: HoughDataPerSec.h:24
Trk::PrepRawData::detectorElement
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
Definition: IdentifierFieldParser.cxx:14