ATLAS Offline Software
MuonInsideOutRecoTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
12 #include "xAODTracking/Vertex.h"
13 
14 namespace MuonCombined {
15 
16  MuonInsideOutRecoTool::MuonInsideOutRecoTool(const std::string& type, const std::string& name, const IInterface* parent) :
18  declareInterface<IMuonCombinedInDetExtensionTool>(this);
19  declareInterface<MuonInsideOutRecoTool>(this);
20  }
21 
23  ATH_CHECK(m_idHelperSvc.retrieve());
24  ATH_CHECK(m_edmHelperSvc.retrieve());
25  ATH_CHECK(m_printer.retrieve());
26  ATH_CHECK(m_segmentFinder.retrieve());
27  ATH_CHECK(m_segmentMatchingTool.retrieve());
28  ATH_CHECK(m_ambiguityResolver.retrieve());
30  ATH_CHECK(m_trackFitter.retrieve());
32  // trigger does not use primary vertex
33  ATH_CHECK(m_vertexKey.initialize(!m_vertexKey.empty()));
34  ATH_CHECK(m_trackSummaryTool.retrieve());
35  ATH_CHECK(m_recoValidationTool.retrieve(DisableTool{m_recoValidationTool.empty()}));
36  return StatusCode::SUCCESS;
37  }
38 
40  TrackCollection* combTracks, TrackCollection* meTracks, Trk::SegmentCollection* segments,
41  const EventContext& ctx) const {
42  ATH_MSG_WARNING("This version is deprecated, please use extendWithPRDs for MuGirl");
44  extendWithPRDs(inDetCandidates, tagMap, prdData, combTracks, meTracks, segments, ctx);
45  }
46 
49  TrackCollection* meTracks, Trk::SegmentCollection* segments, const EventContext& ctx) const {
50  ATH_MSG_DEBUG(" extending " << inDetCandidates.size());
51  for (const InDetCandidate* it : inDetCandidates) { handleCandidate(*it, tagMap, prdData, combTracks, meTracks, segments, ctx); }
52  }
53 
56  TrackCollection* meTracks, Trk::SegmentCollection* segColl, const EventContext& ctx) const {
57  if (m_ignoreSiAssocated && indetCandidate.isSiliconAssociated()) {
58  ATH_MSG_DEBUG(" skip silicon associated track for extension ");
59  return;
60  }
61 
62  const xAOD::TrackParticle& indetTrackParticle = indetCandidate.indetTrackParticle();
63  if (!indetTrackParticle.track() || indetTrackParticle.pt() < m_idTrackMinPt) return;
64 
65  // get intersections which precision layers in the muon system
66  const Muon::MuonSystemExtension* muonSystemExtension = indetCandidate.getExtension();
67  if (!muonSystemExtension) {
68  ATH_MSG_VERBOSE("No MuonSystemExtension, aborting ");
69  return;
70  }
71  // fill validation content
72  if (!m_recoValidationTool.empty()) m_recoValidationTool->addTrackParticle(indetTrackParticle, *muonSystemExtension);
73 
74  // loop over intersections, get segments
75  std::vector<Muon::MuonLayerRecoData> allLayers;
76 
77  const std::vector<Muon::MuonSystemExtension::Intersection>& layerIntersections = muonSystemExtension->layerIntersections();
78  ATH_MSG_DEBUG(" ID track: pt " << indetTrackParticle.pt() << " eta " << indetTrackParticle.eta() << " phi "
79  << indetTrackParticle.phi() << " layers " << layerIntersections.size());
80 
81  for (const Muon::MuonSystemExtension::Intersection& layer_intersect : layerIntersections) {
82  // vector to store segments
83  std::vector<std::shared_ptr<const Muon::MuonSegment>> segments;
84 
85  // find segments for intersection
86  Muon::MuonLayerPrepRawData layerPrepRawData;
87  if (!getLayerData(layer_intersect.layerSurface, layerPrepRawData, prdData)) {
88  ATH_MSG_VERBOSE("Failed to get layer data");
89  continue;
90  }
91  m_segmentFinder->find(ctx, layer_intersect, layerPrepRawData, segments);
92  if (segments.empty()) continue;
93 
94  // fill validation content
95  if (!m_recoValidationTool.empty()) {
96  for (const std::shared_ptr<const Muon::MuonSegment>& seg : segments) m_recoValidationTool->add(layer_intersect, *seg, 0);
97  }
98 
99  // match segments to intersection
100  std::vector<std::shared_ptr<const Muon::MuonSegment>> selectedSegments;
101  m_segmentMatchingTool->select(ctx, layer_intersect, segments, selectedSegments);
102  if (selectedSegments.empty()) continue;
103 
104  // fill validation content
105  if (!m_recoValidationTool.empty()) {
106  for (const auto& seg : selectedSegments) m_recoValidationTool->add(layer_intersect, *seg, 1);
107  }
108 
109  // add to total list
110  allLayers.emplace_back(layer_intersect, std::move(selectedSegments));
111  }
112 
113  if (msgLvl(MSG::DEBUG)) {
114  msg(MSG::DEBUG) << " Layers with segments " << allLayers.size();
115  for (auto& layer : allLayers) {
116  for (auto& seg : layer.segments) { msg(MSG::DEBUG) << std::endl << m_printer->print(*seg); }
117  }
118  msg(MSG::DEBUG) << endmsg;
119  }
120 
121  // find best candidate and exit if none found
122  std::pair<std::unique_ptr<const Muon::MuonCandidate>, std::unique_ptr<Trk::Track>> bestCandidate =
123  findBestCandidate(ctx, indetTrackParticle, allLayers);
124  if (!bestCandidate.first) { return; }
125 
126  // add candidate to indet candidate
127  addTag(ctx, indetCandidate, tagMap, *bestCandidate.first, bestCandidate.second, combTracks, meTracks, segColl);
128  }
129 
130  std::pair<std::unique_ptr<const Muon::MuonCandidate>, std::unique_ptr<Trk::Track>> MuonInsideOutRecoTool::findBestCandidate(
131  const EventContext& ctx, const xAOD::TrackParticle& indetTrackParticle,
132  const std::vector<Muon::MuonLayerRecoData>& allLayers) const {
133  // resolve ambiguities
134  std::vector<Muon::MuonCandidate> resolvedCandidates;
135  m_ambiguityResolver->resolveOverlaps(ctx, allLayers, resolvedCandidates);
136 
137  // fit candidates
139  typedef std::pair<std::unique_ptr<Trk::Track>, std::unique_ptr<const Muon::MuonCandidate>> candidatePair;
140  std::vector<candidatePair> trackCandidateLookup;
141  for (Muon::MuonCandidate& candidate : resolvedCandidates) {
142  std::unique_ptr<Trk::Track> track = m_candidateTrackBuilder->buildCombinedTrack(ctx, *indetTrackParticle.track(), candidate);
144  if (!track || !track->isValid() || !track->fitQuality()->numberDoF()) continue;
145 
146  tracks.push_back(track.get());
147  trackCandidateLookup.emplace_back(std::move(track), std::make_unique<Muon::MuonCandidate>(std::move(candidate)));
148  }
149 
150  ATH_MSG_DEBUG("found " << tracks.size() << " combined tracks");
151 
152  // first handle easy cases of zero or one track
153  if (tracks.empty()) return {nullptr, nullptr};
154 
155  Trk::Track* selectedTrack = nullptr;
156  if (tracks.size() == 1) {
157  selectedTrack = tracks.front();
158  } else {
159  // more than 1 track call ambiguity solver and select first track
160  std::unique_ptr<const TrackCollection> resolvedTracks(m_trackAmbiguityResolver->process(&tracks));
161  if (!resolvedTracks || resolvedTracks->empty()) {
162  ATH_MSG_WARNING("Ambiguity resolver returned no tracks. Arbitrarily using the first track of initial collection.");
163  selectedTrack = tracks.front();
164  } else {
165  TrackCollection::iterator it = std::find(tracks.begin(), tracks.end(), resolvedTracks->front());
166  if (it != tracks.end()) {
167  selectedTrack = *it;
168  } else {
169  ATH_MSG_ERROR("Ambiguity resolver returned an unknown track. Arbitrarily using the first track of initial collection.");
170  selectedTrack = tracks.front();
171  }
172  }
173  }
174  // get candidate
176  std::find_if(trackCandidateLookup.begin(), trackCandidateLookup.end(),
177  [selectedTrack](candidatePair& ele) { return ele.first.get() == selectedTrack; });
178 
179  if (look_itr == trackCandidateLookup.end() || !look_itr->second) {
180  ATH_MSG_WARNING("candidate lookup failed, this should not happen");
181  return {nullptr, nullptr};
182  }
183  // generate a track summary for this candidate
184  if (m_trackSummaryTool.isEnabled()) { m_trackSummaryTool->computeAndReplaceTrackSummary(*selectedTrack, false); }
185 
186  return std::make_pair(std::move(look_itr->second), std::move(look_itr->first));
187  }
188 
189  void MuonInsideOutRecoTool::addTag(const EventContext& ctx, const InDetCandidate& indetCandidate, InDetCandidateToTagMap* tagMap,
190  const Muon::MuonCandidate& candidate, std::unique_ptr<Trk::Track>& selectedTrack,
191  TrackCollection* combTracks, TrackCollection* meTracks, Trk::SegmentCollection* segments) const {
192  const xAOD::TrackParticle& idTrackParticle = indetCandidate.indetTrackParticle();
193  Amg::Vector3D origin{0., 0., 0.};
194 
195  const xAOD::Vertex* matchedVertex = nullptr;
196  if (!m_vertexKey.empty()) {
198  if (!vertices.isValid()) {
199  ATH_MSG_WARNING("No vertex container with key = " << m_vertexKey.key() << " found");
200  } else {
201  for (const auto* const vx : *vertices) {
202  for (const auto& tpLink : vx->trackParticleLinks()) {
203  if (*tpLink == &idTrackParticle) {
204  matchedVertex = vx;
205  break;
206  }
207  if (matchedVertex) break;
208  }
209  }
210  }
211  }
212  if (matchedVertex) {
213  origin = Amg::Vector3D{matchedVertex->x(), matchedVertex->y(), matchedVertex->z()};
214  ATH_MSG_DEBUG(" found matched vertex " << origin);
215  } else {
216  origin = Amg::Vector3D{-idTrackParticle.d0() * std::sin(idTrackParticle.phi()) + idTrackParticle.vx(),
217  idTrackParticle.d0() * std::cos(idTrackParticle.phi()) + idTrackParticle.vy(),
218  idTrackParticle.z0() + idTrackParticle.vz()};
219  ATH_MSG_DEBUG(" NO matched vertex take track perigee " << origin);
220  }
221 
222  ATH_MSG_VERBOSE("selectedTrack:");
223  if (msgLevel(MSG::VERBOSE)) {
224  int tsos = 0;
225  for (const Trk::TrackStateOnSurface* it : *selectedTrack->trackStateOnSurfaces()) {
226  ++tsos;
227  if (it->trackParameters()) {
228  ATH_MSG_VERBOSE("check tsos " << tsos << " r " << it->trackParameters()->position().perp() << " z "
229  << it->trackParameters()->position().z() << " p "
230  << it->trackParameters()->momentum().mag());
231  }
232  }
233  }
234 
235  std::vector<const Muon::MuonSegment*> segLinks;
236  for (const Muon::MuonLayerIntersection& layer : candidate.layerIntersections) {
237  std::unique_ptr<Muon::MuonSegment> copy = std::make_unique<Muon::MuonSegment>(*layer.segment);
238  segLinks.push_back(copy.get());
239  segments->push_back(std::move(copy));
240  }
242  //cppcheck-suppress invalidLifetime
243  std::sort(segLinks.begin(), segLinks.end(), [this](const Muon::MuonSegment* seg_a, const Muon::MuonSegment* seg_b) -> bool {
244  using chamIdx = Muon::MuonStationIndex::ChIndex;
245  chamIdx ch_a = m_idHelperSvc->chamberIndex(m_edmHelperSvc->chamberId(*seg_a));
246  chamIdx ch_b = m_idHelperSvc->chamberIndex(m_edmHelperSvc->chamberId(*seg_b));
247  Muon::MuonStationIndex::StIndex st_a = Muon::MuonStationIndex::toStationIndex(ch_a);
248  Muon::MuonStationIndex::StIndex st_b = Muon::MuonStationIndex::toStationIndex(ch_b);
249  if (st_a != st_b) return st_a < st_b;
251  if (ch_a == chamIdx::CSL || ch_a == chamIdx::CSS || ch_b == chamIdx::CSS || ch_b == chamIdx::CSL)
252  return (ch_a == chamIdx::CSL) + 2 * (ch_a == chamIdx::CSS) > (ch_b == chamIdx::CSL) + 2 * (ch_b == chamIdx::CSS);
253  return ch_a < ch_b;
254  });
255 
256  if (msgLevel(MSG::DEBUG)) {
257  std::stringstream sstr;
258  for (const Muon::MuonSegment* muo_seg : segLinks) {
259  auto chIdx = m_idHelperSvc->chamberIndex(m_edmHelperSvc->chamberId(*muo_seg));
260  auto thIdx = m_idHelperSvc->technologyIndex(m_edmHelperSvc->chamberId(*muo_seg));
261  sstr << Muon::MuonStationIndex::chName(chIdx) << " (" << Muon::MuonStationIndex::technologyName(thIdx) << "), ";
262  }
263  ATH_MSG_DEBUG("Selected segments " << segLinks.size() << " " << sstr.str());
264  }
265 
266  // perform standalone refit
267  std::unique_ptr<Trk::Track> standaloneRefit{m_trackFitter->standaloneRefit(ctx, *selectedTrack, origin)};
268 
269  combTracks->push_back(std::move(selectedTrack));
270  ElementLink<TrackCollection> comblink(*combTracks, combTracks->size() - 1);
271 
272  // create tag and set SA refit
273  MuGirlTag* tag = new MuGirlTag(comblink, segLinks);
274  if (standaloneRefit) {
275  meTracks->push_back(std::move(standaloneRefit));
276  ElementLink<TrackCollection> melink(*meTracks, meTracks->size() - 1);
277  tag->setUpdatedExtrapolatedTrack(melink);
278  }
279 
280  // add tag to IndetCandidateToTagMap
281  tagMap->addEntry(&indetCandidate, tag);
282  }
283 
286  // get technologies in the given layer
288  const std::set<Muon::MuonStationIndex::TechnologyIndex>& technologiesInStation = m_idHelperSvc->technologiesInStation(stIndex);
289  if (msgLevel(MSG::DEBUG)) {
290  std::string techString;
291  for (const Muon::MuonStationIndex::TechnologyIndex& tech : technologiesInStation)
292  techString += " " + Muon::MuonStationIndex::technologyName(tech);
293  ATH_MSG_DEBUG("getLayerData: sector " << surf.sector << " " << Muon::MuonStationIndex::regionName(surf.regionIndex) << " "
294  << Muon::MuonStationIndex::layerName(surf.layerIndex) << " technologies " << techString);
295  }
296 
297  bool isok{false};
298  // loop over technologies and get data
299  for (const Muon::MuonStationIndex::TechnologyIndex& it : technologiesInStation) {
300  // get collections, keep track of failures
302  isok |= getLayerDataTech<Muon::MdtPrepData>(it, surf, prdData.mdtPrds, layerPrepRawData.mdts);
303 
304  else if (it == Muon::MuonStationIndex::RPC)
305  isok |= getLayerDataTech<Muon::RpcPrepData>(it, surf, prdData.rpcPrds, layerPrepRawData.rpcs);
306 
307  else if (it == Muon::MuonStationIndex::TGC)
308  isok |= getLayerDataTech<Muon::TgcPrepData>(it, surf, prdData.tgcPrds, layerPrepRawData.tgcs);
309 
310  else if (it == Muon::MuonStationIndex::CSCI)
311  isok |= getLayerDataTech<Muon::CscPrepData>(it, surf, prdData.cscPrds, layerPrepRawData.cscs);
312 
313  else if (it == Muon::MuonStationIndex::STGC)
314  isok |= getLayerDataTech<Muon::sTgcPrepData>(it, surf, prdData.stgcPrds, layerPrepRawData.stgcs);
315 
316  else if (it == Muon::MuonStationIndex::MM)
317  isok |= getLayerDataTech<Muon::MMPrepData>(it, surf, prdData.mmPrds, layerPrepRawData.mms);
318  }
319 
320  if (msgLvl(MSG::DEBUG)) {
321  msg(MSG::DEBUG) << " Got data: sector " << surf.sector << " " << Muon::MuonStationIndex::regionName(surf.regionIndex) << " "
323  if (!layerPrepRawData.mdts.empty()) msg(MSG::DEBUG) << " MDTs " << layerPrepRawData.mdts.size();
324  if (!layerPrepRawData.rpcs.empty()) msg(MSG::DEBUG) << " RPCs " << layerPrepRawData.rpcs.size();
325  if (!layerPrepRawData.tgcs.empty()) msg(MSG::DEBUG) << " TGCs " << layerPrepRawData.tgcs.size();
326  if (!layerPrepRawData.cscs.empty()) msg(MSG::DEBUG) << " CSCs " << layerPrepRawData.cscs.size();
327  if (!layerPrepRawData.stgcs.empty()) msg(MSG::DEBUG) << " STGCs " << layerPrepRawData.stgcs.size();
328  if (!layerPrepRawData.mms.empty()) msg(MSG::DEBUG) << " MMs " << layerPrepRawData.mms.size();
329  msg(MSG::DEBUG) << endmsg;
330  }
331  return isok;
332  }
333 
334  template <class COL>
337  std::vector<const Muon::MuonPrepDataCollection<COL>*>& output) const {
338  if (!input || input->size() == 0) return false;
339  // get technologies in the given layer
340  unsigned int sectorLayerHash = Muon::MuonStationIndex::sectorLayerHash(surf.regionIndex, surf.layerIndex);
341 
342  // get hashes
343  const Muon::MuonLayerHashProviderTool::HashVec hashes = m_layerHashProvider->getHashes(surf.sector, technology, sectorLayerHash);
344 
345  // skip empty inputs
346  if (hashes.empty()) return false;
347 
348  // loop over hashes
349  for (Muon::MuonLayerHashProviderTool::HashVec::const_iterator it = hashes.begin(); it != hashes.end(); ++it) {
350  // skip if not found
351  const auto* colIt = input->indexFindPtr(*it);
352  if (!colIt) { continue; }
353  ATH_MSG_VERBOSE(" adding " << m_idHelperSvc->toStringChamber(colIt->identify()) << " size " << colIt->size());
354  // else add
355  output.push_back(colIt);
356  }
357  return output.size();
358  }
359 } // namespace MuonCombined
python.root_lsr_rank.hashes
hashes
Definition: root_lsr_rank.py:34
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Muon::MuonStationIndex::chName
static const std::string & chName(ChIndex index)
convert ChIndex into a string
Definition: MuonStationIndex.cxx:157
Muon::MuonCandidate
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonLayerEvent/MuonLayerEvent/MuonCandidate.h:14
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:73
MuonCombined::MuonInsideOutRecoTool::m_ignoreSiAssocated
Gaudi::Property< bool > m_ignoreSiAssocated
Definition: MuonInsideOutRecoTool.h:112
xAOD::Vertex_v1::x
float x() const
Returns the x position.
Muon::MuonStationIndex::toStationIndex
static StIndex toStationIndex(ChIndex index)
convert ChIndex into StIndex
Definition: MuonStationIndex.cxx:43
Muon::MuonPrepDataContainer
Template for Muon PRD containers (which are basically collections of MuonPrepDataCollections).
Definition: MuonPrepDataContainer.h:42
MuonCombined::InDetCandidate::getExtension
const Muon::MuonSystemExtension * getExtension() const
Definition: InDetCandidate.cxx:46
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
xAOD::TrackParticle_v1::vx
float vx() const
The x origin for the parameters.
Muon::MuonLayerSurface::layerIndex
MuonStationIndex::LayerIndex layerIndex
Definition: MuonLayerSurface.h:30
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
MuonCombined::InDetCandidateToTagMap
Definition: InDetCandidateToTagMap.h:15
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
Trk::Track::trackStateOnSurfaces
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
xAOD::TrackParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TrackParticle_v1.cxx:77
MuonCombined::MuonInsideOutRecoTool::m_ambiguityResolver
ToolHandle< Muon::IMuonLayerAmbiguitySolverTool > m_ambiguityResolver
Definition: MuonInsideOutRecoTool.h:98
xAOD::TrackParticle_v1::vz
float vz() const
The z origin for the parameters.
Muon::MuonStationIndex::sectorLayerHash
static unsigned int sectorLayerHash(DetectorRegionIndex detectorRegionIndex, LayerIndex layerIndex)
create a hash out of region and layer
Definition: MuonStationIndex.cxx:226
skel.it
it
Definition: skel.GENtoEVGEN.py:396
xAOD::TrackParticle_v1::z0
float z0() const
Returns the parameter.
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
MuonCombined::InDetCandidate
Definition: InDetCandidate.h:18
Muon::MuonLayerPrepRawData::tgcs
std::vector< const TgcPrepDataCollection * > tgcs
Definition: MuonLayerPrepRawData.h:25
Muon::MuonLayerPrepRawData
Struct to hold all PrepRawData collections in a given layer.
Definition: MuonLayerPrepRawData.h:22
MuonCombined::MuonInsideOutRecoTool::extendWithPRDs
virtual void extendWithPRDs(const InDetCandidateCollection &inDetCandidates, InDetCandidateToTagMap *tagMap, IMuonCombinedInDetExtensionTool::MuonPrdData prdData, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments, const EventContext &ctx) const override
IMuonCombinedInDetExtensionTool interface: extend ID candidate with PRDs for segment-finding.
Definition: MuonInsideOutRecoTool.cxx:47
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Muon::MuonStationIndex::MM
@ MM
Definition: MuonStationIndex.h:56
MuonCombined::MuonInsideOutRecoTool::m_segmentMatchingTool
ToolHandle< Muon::IMuonLayerSegmentMatchingTool > m_segmentMatchingTool
Definition: MuonInsideOutRecoTool.h:96
Muon::MuonLayerSurface::regionIndex
MuonStationIndex::DetectorRegionIndex regionIndex
Definition: MuonLayerSurface.h:29
xAOD::TrackParticle_v1::d0
float d0() const
Returns the parameter.
Muon::MuonLayerPrepRawData::stgcs
std::vector< const sTgcPrepDataCollection * > stgcs
Definition: MuonLayerPrepRawData.h:27
MuonCombined::MuonInsideOutRecoTool::handleCandidate
void handleCandidate(const InDetCandidate &inDetCandidate, InDetCandidateToTagMap *tagMap, const IMuonCombinedInDetExtensionTool::MuonPrdData &prdData, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments, const EventContext &ctx) const
handle a single candidate
Definition: MuonInsideOutRecoTool.cxx:54
MuonCombined::MuonInsideOutRecoTool::m_segmentFinder
ToolHandle< Muon::IMuonLayerSegmentFinderTool > m_segmentFinder
Definition: MuonInsideOutRecoTool.h:94
MuonCombined::InDetCandidateToTagMap::addEntry
void addEntry(const InDetCandidate *idcand, TagBase *tag)
Definition: InDetCandidateToTagMap.cxx:8
Muon::MuonStationIndex::regionName
static const std::string & regionName(DetectorRegionIndex index)
convert DetectorRegionIndex into a string
Definition: MuonStationIndex.cxx:176
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
MuonCombined::IMuonCombinedInDetExtensionTool::MuonPrdData::cscPrds
const Muon::CscPrepDataContainer * cscPrds
Definition: IMuonCombinedInDetExtensionTool.h:32
DataModel_detail::iterator
(Non-const) Iterator class for DataVector/DataList.
Definition: DVLIterator.h:184
MuonCombined::MuonInsideOutRecoTool::m_recoValidationTool
ToolHandle< Muon::IMuonRecoValidationTool > m_recoValidationTool
Definition: MuonInsideOutRecoTool.h:109
MuonCombined::MuonInsideOutRecoTool::m_trackFitter
ToolHandle< Rec::ICombinedMuonTrackBuilder > m_trackFitter
Definition: MuonInsideOutRecoTool.h:102
Muon::MuonLayerPrepRawData::mdts
std::vector< const MdtPrepDataCollection * > mdts
Definition: MuonLayerPrepRawData.h:23
Muon::MuonStationIndex::STGC
@ STGC
Definition: MuonStationIndex.h:56
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MuonCombined::MuonInsideOutRecoTool::getLayerData
bool getLayerData(const Muon::MuonLayerSurface &surf, Muon::MuonLayerPrepRawData &layerPrepRawData, IMuonCombinedInDetExtensionTool::MuonPrdData prdData) const
access data in layer
Definition: MuonInsideOutRecoTool.cxx:284
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Muon::MuonLayerSurface
types
Definition: MuonLayerSurface.h:15
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
MuonCombined::MuonInsideOutRecoTool::findBestCandidate
std::pair< std::unique_ptr< const Muon::MuonCandidate >, std::unique_ptr< Trk::Track > > findBestCandidate(const EventContext &ctx, const xAOD::TrackParticle &indetTrackParticle, const std::vector< Muon::MuonLayerRecoData > &allLayers) const
find the best candidate for a given set of segments
Definition: MuonInsideOutRecoTool.cxx:130
MuonCombined::MuonInsideOutRecoTool::m_idTrackMinPt
Gaudi::Property< double > m_idTrackMinPt
Definition: MuonInsideOutRecoTool.h:111
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
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
DataVector::front
const T * front() const
Access the first element in the collection as an rvalue.
test_pyathena.parent
parent
Definition: test_pyathena.py:15
MuonCombined::MuonInsideOutRecoTool::m_edmHelperSvc
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc
Definition: MuonInsideOutRecoTool.h:91
MuonCombined::MuonInsideOutRecoTool::m_vertexKey
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexKey
Definition: MuonInsideOutRecoTool.h:115
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
xAOD::Vertex_v1::z
float z() const
Returns the z position.
Muon::MuonStationIndex::CSCI
@ CSCI
Definition: MuonStationIndex.h:56
MuonCombined::MuonInsideOutRecoTool::addTag
void addTag(const EventContext &ctx, const InDetCandidate &indetCandidate, InDetCandidateToTagMap *tagMap, const Muon::MuonCandidate &candidate, std::unique_ptr< Trk::Track > &selectedTrack, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments) const
add muon candidate to indet candidate
Definition: MuonInsideOutRecoTool.cxx:189
MuonCombined::MuonInsideOutRecoTool::m_printer
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
Definition: MuonInsideOutRecoTool.h:93
Muon::MuonPrepDataCollection
Template to hold collections of MuonPrepRawData objects.
Definition: MuonPrepDataCollection.h:46
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
Vertex.h
python.compareTCTs.isok
isok
Definition: compareTCTs.py:350
merge.output
output
Definition: merge.py:17
MuonSystemExtension.h
xAOD::TrackParticle_v1::vy
float vy() const
The y origin for the parameters.
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
MuonCombined::MuonInsideOutRecoTool::getLayerDataTech
bool getLayerDataTech(Muon::MuonStationIndex::TechnologyIndex technology, const Muon::MuonLayerSurface &surf, const Muon::MuonPrepDataContainerT< COL > *input, std::vector< const Muon::MuonPrepDataCollection< COL > * > &output) const
access data in layer for a given technology
Definition: MuonInsideOutRecoTool.cxx:335
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonCombined::MuonInsideOutRecoTool::MuonInsideOutRecoTool
MuonInsideOutRecoTool(const std::string &type, const std::string &name, const IInterface *parent)
Default AlgTool functions.
Definition: MuonInsideOutRecoTool.cxx:16
Muon::MuonLayerSurface::sector
int sector
Definition: MuonLayerSurface.h:28
Muon::MuonLayerPrepRawData::cscs
std::vector< const CscPrepDataCollection * > cscs
Definition: MuonLayerPrepRawData.h:26
MuonCombined::MuonInsideOutRecoTool::m_candidateTrackBuilder
ToolHandle< Muon::IMuonCandidateTrackBuilderTool > m_candidateTrackBuilder
Definition: MuonInsideOutRecoTool.h:100
MuonCombined::MuGirlTag
TagBase implementation for a combined fit.
Definition: MuGirlTag.h:23
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
MuonCombined::MuonInsideOutRecoTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonInsideOutRecoTool.h:90
Muon::MuonStationIndex::MDT
@ MDT
Definition: MuonStationIndex.h:56
MuonCombined::InDetCandidate::indetTrackParticle
const xAOD::TrackParticle & indetTrackParticle() const
access TrackParticle
Definition: InDetCandidate.cxx:27
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
MuonCombined::InDetCandidate::isSiliconAssociated
bool isSiliconAssociated() const
Returns true if this candidate was formed from a special far forward InDet track.
Definition: InDetCandidate.cxx:35
Muon::MuonLayerHashProviderTool::HashVec
std::vector< IdentifierHash > HashVec
define data structure
Definition: MuonLayerHashProviderTool.h:27
MuonCombined::MuonInsideOutRecoTool::m_layerHashProvider
ToolHandle< Muon::MuonLayerHashProviderTool > m_layerHashProvider
Definition: MuonInsideOutRecoTool.h:106
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
MuonCombined::MuonInsideOutRecoTool::initialize
virtual StatusCode initialize() override
Definition: MuonInsideOutRecoTool.cxx:22
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
MuonCombined
The MuonTagToSegMap is an auxillary construct that links the MuonSegments associated with a combined ...
Definition: IMuonSystemExtensionTool.h:23
Muon::MuonLayerPrepRawData::rpcs
std::vector< const RpcPrepDataCollection * > rpcs
Definition: MuonLayerPrepRawData.h:24
MuonCandidate.h
DEBUG
#define DEBUG
Definition: page_access.h:11
Muon::MuonStationIndex::TGC
@ TGC
Definition: MuonStationIndex.h:56
xAOD::Vertex_v1::y
float y() const
Returns the y position.
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
MuonCombined::MuonInsideOutRecoTool::m_trackAmbiguityResolver
ToolHandle< Trk::ITrackAmbiguityProcessorTool > m_trackAmbiguityResolver
Definition: MuonInsideOutRecoTool.h:104
MuonCombined::MuonInsideOutRecoTool::m_trackSummaryTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
Definition: MuonInsideOutRecoTool.h:108
Muon::MuonStationIndex::RPC
@ RPC
Definition: MuonStationIndex.h:56
Muon::MuonSystemExtension::layerIntersections
const std::vector< Intersection > & layerIntersections() const
access to the intersections with the layers.
Definition: MuonSystemExtension.h:62
Muon::MuonLayerPrepRawData::mms
std::vector< const MMPrepDataCollection * > mms
Definition: MuonLayerPrepRawData.h:28
MuonSegment.h
Muon::MuonStationIndex::StIndex
StIndex
enum to classify the different station layers in the muon spectrometer
Definition: MuonStationIndex.h:23
Muon::MuonSystemExtension::Intersection
data per intersection
Definition: MuonSystemExtension.h:21
MuonLayerPrepRawData.h
MuonCombined::IMuonCombinedInDetExtensionTool::MuonPrdData::rpcPrds
const Muon::RpcPrepDataContainer * rpcPrds
Definition: IMuonCombinedInDetExtensionTool.h:30
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
calibdata.copy
bool copy
Definition: calibdata.py:27
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
MuGirlTag.h
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
xAOD::TrackParticle_v1::track
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
Definition: TrackParticle_v1.cxx:805
MuonCombined::IMuonCombinedInDetExtensionTool::MuonPrdData
Definition: IMuonCombinedInDetExtensionTool.h:27
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
Muon::MuonSegment
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:45
MuonCombined::IMuonCombinedInDetExtensionTool::MuonPrdData::tgcPrds
const Muon::TgcPrepDataContainer * tgcPrds
Definition: IMuonCombinedInDetExtensionTool.h:31
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
AthAlgTool
Definition: AthAlgTool.h:26
MuonCombined::IMuonCombinedInDetExtensionTool::MuonPrdData::mmPrds
const Muon::MMPrepDataContainer * mmPrds
Definition: IMuonCombinedInDetExtensionTool.h:34
MuonCombined::MuonInsideOutRecoTool::extend
virtual void extend(const InDetCandidateCollection &inDetCandidates, InDetCandidateToTagMap *tagMap, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments, const EventContext &ctx) const override
IMuonCombinedInDetExtensionTool interface: deprecated.
Definition: MuonInsideOutRecoTool.cxx:39
MuonInsideOutRecoTool.h
Muon::MuonStationIndex::TechnologyIndex
TechnologyIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:54
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
MuonCombined::IMuonCombinedInDetExtensionTool::MuonPrdData::stgcPrds
const Muon::sTgcPrepDataContainer * stgcPrds
Definition: IMuonCombinedInDetExtensionTool.h:33
Muon::MuonCandidate::layerIntersections
std::vector< MuonLayerIntersection > layerIntersections
MuonLayerIntersections.
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonLayerEvent/MuonLayerEvent/MuonCandidate.h:20
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
Muon::MuonLayerIntersection
Definition: MuonLayerIntersection.h:13
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
xAOD::TrackParticle_v1::phi
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
MuonCombined::IMuonCombinedInDetExtensionTool::MuonPrdData::mdtPrds
const Muon::MdtPrepDataContainer * mdtPrds
Definition: IMuonCombinedInDetExtensionTool.h:29
Muon::MuonStationIndex::technologyName
static const std::string & technologyName(TechnologyIndex index)
convert LayerIndex into a string
Definition: MuonStationIndex.cxx:209