ATLAS Offline Software
MuonInDetToMuonSystemExtensionAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 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  InDetCandidateCache output_cache{};
51 
53  if (!input_container.isValid()) {
54  ATH_MSG_FATAL("Failed to retrieve " << m_inputCandidate.fullKey());
55  return StatusCode::FAILURE;
56  }
57  output_cache.input_candidates = input_container.cptr();
58  ATH_CHECK(selectCandidates(ctx, output_cache));
59 
60  if (m_restrictExtension) {
61  ATH_CHECK(findSegments(ctx, output_cache));
62  ATH_CHECK(findHitSectors(ctx, output_cache));
63  }
64 
65  ATH_MSG_DEBUG("Find the inner detector candidates to be used for MuGirl / Segment tagging");
66  ATH_CHECK(create(ctx, output_cache));
68  ATH_CHECK(indetCandidateCollection.record(std::move(output_cache.outputContainer)));
69 
70  ATH_CHECK(createStaus(ctx, indetCandidateCollection.ptr(), output_cache.tag_map));
71 
72  return StatusCode::SUCCESS;
73 }
76  if (!tag_map.isValid()) {
77  ATH_MSG_FATAL("Failed to retrieve the tag map from " << tag_map.fullKey());
78  return StatusCode::FAILURE;
79  }
80  if (tag_map->empty()) {
81  ATH_MSG_DEBUG("No combined candidates in this event");
82  return StatusCode::SUCCESS;
83  }
84 
85  for (const auto& combined_tags : *tag_map) {
86  if (combined_tags.second->author() != xAOD::Muon::MuidCo) {
87  ATH_MSG_WARNING("Found a non MuidCo tag.... Please check " << combined_tags.second->toString());
88  continue;
89  }
90  const MuonCombined::CombinedFitTag* cmb_tag = dynamic_cast<const MuonCombined::CombinedFitTag*>(combined_tags.second.get());
91  MuidCoCache cache{combined_tags.first, cmb_tag};
92  out_cache.tag_map.push_back(std::move(cache));
93  out_cache.excluded_trks.insert(combined_tags.first);
94  for (const Muon::MuonSegment* muon_seg : cmb_tag->associatedSegments()) {
95  out_cache.combined_segs.insert(muon_seg);
96  maskHits(muon_seg, out_cache);
97  }
98  }
99  return StatusCode::SUCCESS;
100 }
103  for (const MuonCombined::InDetCandidate* candidate : *out_cache.input_candidates) {
104  if (out_cache.excluded_trks.count(candidate)) {
105  ATH_MSG_VERBOSE("Inner detector track " << candidate->toString() << " has already been used by MuidCo");
106  continue;
107  }
110  if (candidate->indetTrackParticle().pt() < m_extThreshold || (!m_extendSAF && candidate->isSiliconAssociated()) ||
111  (!m_extendBulk && !candidate->isSiliconAssociated())) {
112  ATH_MSG_VERBOSE("Inner detector track " << candidate->toString() << " is too soft");
113  continue;
114  }
115 
118  cache.candidate = std::make_unique<MuonCombined::InDetCandidate>(candidate->indetTrackParticleLink());
119  cache.candidate->setSiliconAssociated(candidate->isSiliconAssociated());
120  cache.candidate->setExtension(candidate->getCaloExtension());
121 
122  const Muon::MuonSystemExtension* extension = candidate->getExtension();
124  if (extension) {
126  std::vector<Muon::MuonSystemExtension::Intersection> intersects = extension->layerIntersections();
127  cache.candidate->setExtension(
128  std::make_unique<Muon::MuonSystemExtension>(&extension->muonEntryLayerIntersection(), std::move(intersects)));
129  } else {
131  const bool seg_match = !m_restrictExtension || hasMatchingSegment(*candidate, out_cache);
132 
133  if (!seg_match && !hasMatchingSeed(*candidate, out_cache)) continue;
134  cache.useHitSectors = !seg_match;
135  cache.sectorsWithHits = &out_cache.hit_sectors;
136  cache.createSystemExtension = true;
137  cache.requireSystemExtension = true;
138 
139  if (!m_muonSystemExtensionTool->muonSystemExtension(ctx, cache)) {
140  ATH_MSG_VERBOSE("Extension failed");
141  continue;
142  }
143  }
144  out_cache.outputContainer->push_back(std::move(cache.candidate));
145  }
146  if (msgLevel(MSG::DEBUG)) {
147  std::stringstream sstr;
148  for (const MuonCombined::InDetCandidate* extended : *out_cache.outputContainer) {
149  sstr << " * " << extended->toString() << std::endl;
150  }
151  if (!out_cache.excluded_trks.empty()) {
152  sstr << std::endl << " ======== The following tracks were already successfully combined ======== " << std::endl;
153  for (const MuonCombined::InDetCandidate* combined : out_cache.excluded_trks) {
154  sstr << " = " << combined->toString() << std::endl;
155  }
156  }
157  if (out_cache.excluded_trks.size() + out_cache.outputContainer->size() != out_cache.input_candidates->size()) {
158  sstr << std::endl << " ++++++++ The following candidates were not extrapolated ++++++++ " << std::endl;
161 
162  for (const MuonCombined::InDetCandidate* rejected : *out_cache.input_candidates) {
163  if (out_cache.excluded_trks.count(rejected) ||
164  std::find_if(begin, end,
165  [rejected](const MuonCombined::InDetCandidate* extended) { return (*rejected) == (*extended); }) != end)
166  continue;
167  sstr << " + " << rejected->toString() << std::endl;
168  }
169  }
170  ATH_MSG_DEBUG("Extrapolated " << out_cache.outputContainer->size() << " out of " << out_cache.input_candidates->size()
171  << " tracks through the spectrometer" << std::endl
172  << std::endl
173  << sstr.str());
174  }
175  return StatusCode::SUCCESS;
176 }
177 
180  if (!readHandle.isValid()) {
181  ATH_MSG_FATAL("Failed to retrieve the prep data container " << m_houghDataPerSectorVecKey.fullKey());
182  return StatusCode::FAILURE;
183  }
184  const std::vector<Muon::HoughDataPerSec>& hough_data = readHandle->vec;
186  auto count_finished = [&output_cache]() -> unsigned int {
187  unsigned int n{0};
188  for (const auto& sector_hits : output_cache.hit_sectors) { n += sector_hits.second.size() >= num_sectors; }
189  return n;
190  };
191 
194  for (int det_region = 0; det_region < Muon::MuonStationIndex::DetectorRegionIndexMax; ++det_region) {
195  const RegionIndex region_index = static_cast<RegionIndex>(det_region);
197  const LayerIndex layer_index = static_cast<LayerIndex>(layer);
198  const unsigned int hash = Muon::MuonStationIndex::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) << ", "
239  << Muon::MuonStationIndex::layerName(layer_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() >= 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 }
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 }
293  const InDetCandidateCache& cache) const {
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 }
322  const InDetCandidateCache& cache) const {
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 }
336 
338  const MuidCoVector& tag_map) const {
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) {
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  ATH_CHECK(indetCandidateCollection.record(std::move(stau_cache.outputContainer)));
372  return StatusCode::SUCCESS;
373 }
374 
376  const Identifier seg_id = m_edmHelperSvc->chamberId(*muon_seg);
377  const LayerIndex layer_index = m_idHelperSvc->layerIndex(seg_id);
378  const RegionIndex region_index = m_idHelperSvc->regionIndex(seg_id);
379  const unsigned int hash = Muon::MuonStationIndex::sectorLayerHash(region_index, layer_index);
380  std::set<Identifier>& id_set = output_cache.consumed_hits[hash];
381  for (const Trk::MeasurementBase* meas : muon_seg->containedMeasurements()) {
382  const Identifier meas_id = m_edmHelperSvc->getIdentifier(*meas);
383  id_set.insert(meas_id);
384  }
385 }
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
max
#define max(a, b)
Definition: cfImp.cxx:41
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:79
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
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:93
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:375
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:82
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:337
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
MuonInDetToMuonSystemExtensionAlg::findSegments
StatusCode findSegments(const EventContext &ctx, InDetCandidateCache &output_cache) const
Select good segments.
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:259
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: TrkEvent/TrkSegment/TrkSegment/Segment.h:166
Trk::Segment
Definition: 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:74
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:581
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:321
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:292
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:195
MuonInDetToMuonSystemExtensionAlg::findHitSectors
StatusCode findHitSectors(const EventContext &ctx, InDetCandidateCache &output_cache) const
Find the sectors in the MS with muon signals.
Definition: MuonInDetToMuonSystemExtensionAlg.cxx:178
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:101
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:86
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:85
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...