ATLAS Offline Software
MuPatCandidateTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "MuPatCandidateTool.h"
6 
7 #include <cstdlib> // for std::abs( int )
8 #include <set>
9 #include <sstream>
10 #include <string>
11 
13 #include "MuPatHitTool.h"
30 #include "TrkTrack/Track.h"
31 
32 namespace Muon {
33 
34  MuPatCandidateTool::MuPatCandidateTool(const std::string& t, const std::string& n, const IInterface* p) : AthAlgTool(t, n, p) {
35  declareInterface<MuPatCandidateTool>(this);
36  }
37 
39  ATH_CHECK(m_idHelperSvc.retrieve());
40  ATH_CHECK(m_mdtRotCreator.retrieve());
41  if (!m_cscRotCreator.empty()) {
42  if (!m_idHelperSvc->hasCSC())
44  "The current layout does not have any CSC chamber but you gave a CscRotCreator, ignoring it, but double-check "
45  "configuration");
46  else
47  ATH_CHECK(m_cscRotCreator.retrieve());
48  }
49  ATH_CHECK(m_compClusterCreator.retrieve());
50  ATH_CHECK(m_hitHandler.retrieve());
51  ATH_CHECK(m_edmHelperSvc.retrieve());
52  ATH_CHECK(m_printer.retrieve());
53  ATH_CHECK(m_segmentSelector.retrieve());
54 
55  return StatusCode::SUCCESS;
56  }
57 
58  std::unique_ptr<MuPatSegment> MuPatCandidateTool::createSegInfo(const EventContext& ctx, const MuonSegment& segment) const {
59  Identifier chid = m_edmHelperSvc->chamberId(segment);
60  if (m_idHelperSvc->isTrigger(chid)) {
61  ATH_MSG_WARNING("Trigger hit only segments not supported " << m_idHelperSvc->toStringChamber(chid));
62  return nullptr;
63  }
64  std::unique_ptr<MuPatSegment> info = std::make_unique<MuPatSegment>();
65  info->segment = &segment;
66  info->chid = chid;
67  info->chIndex = m_idHelperSvc->chamberIndex(info->chid);
68  std::set<Identifier> chIds = m_edmHelperSvc->chamberIds(segment);
69  for (const Identifier& id : chIds) {
70  MuonStationIndex::ChIndex chIdx = m_idHelperSvc->chamberIndex(id);
71  info->addChamber(chIdx);
72  // set default name
73  if (!info->name.empty()) info->name += "+";
74  // stationname_eta_phi
75  std::ostringstream oss;
76  oss << MuonStationIndex::chName(chIdx) << "_" << m_idHelperSvc->stationEta(id) << "_" << m_idHelperSvc->stationPhi(id);
77  info->name += oss.str();
78  }
79  info->stIndex = m_idHelperSvc->stationIndex(info->chid);
80  info->isEndcap = m_idHelperSvc->isEndcap(info->chid);
81  info->isMdt = m_idHelperSvc->isMdt(info->chid);
82  info->usedInFit = 0;
83  info->quality = m_segmentSelector->quality(segment);
84  info->segQuality = dynamic_cast<const MuonSegmentQuality*>(segment.fitQuality());
85 
86  info->segPars.reset(m_edmHelperSvc->createTrackParameters(segment, 5000., 0.));
87  if (!info->segPars) { ATH_MSG_WARNING(" failed to create track parameter for segment "); }
88 
89  updateHits(*info, info->segment->containedMeasurements(), m_doMdtRecreation, m_doCscRecreation, true);
90  m_hitHandler->create(ctx, segment, info->hitList());
91  return info;
92  }
93 
94  bool MuPatCandidateTool::extendWithSegment(MuPatTrack& can, MuPatSegment& segInfo, std::unique_ptr<Trk::Track>& track) const {
95  // add segment to candidate
96  can.addSegment(&segInfo, track);
98  }
99 
100  std::unique_ptr<MuPatTrack> MuPatCandidateTool::copyCandidate(MuPatTrack* canIn) {
101  // copy and update hits
102  std::unique_ptr<MuPatTrack> can = std::make_unique<MuPatTrack>(*canIn);
103  return can;
104  }
105 
106  std::unique_ptr<MuPatTrack> MuPatCandidateTool::createCandidate(MuPatSegment& segInfo, std::unique_ptr<Trk::Track>& track) const {
107  // create the new candidate
108  std::unique_ptr<MuPatTrack> candidate = std::make_unique< MuPatTrack>(&segInfo, track);
110  return candidate;
111  }
112 
113  bool MuPatCandidateTool::updateTrack(MuPatTrack& candidate, std::unique_ptr<Trk::Track>& track) const {
114  candidate.updateTrack(track);
115  return recalculateCandidateSegmentContent(candidate);
116  }
117 
118  std::unique_ptr<MuPatTrack> MuPatCandidateTool::createCandidate(MuPatSegment& segInfo1, MuPatSegment& segInfo2,
119  std::unique_ptr<Trk::Track>& track) const {
120  // create the new candidate
121  std::unique_ptr<MuPatTrack> candidate = std::make_unique<MuPatTrack>(&segInfo1, &segInfo2, track);
123  return candidate;
124  }
125 
126  std::unique_ptr<MuPatTrack> MuPatCandidateTool::createCandidate(std::unique_ptr<Trk::Track>& track) const {
127  // create a dummy segment vector
128  std::vector<MuPatSegment*> segments;
129 
130  // create the new candidate
131  std::unique_ptr<MuPatTrack> candidate = std::make_unique<MuPatTrack>(segments, track);
133  return candidate;
134  }
135 
137  bool recreateMDT, bool recreateCSC, bool createComp) const {
138  MeasVec etaHits{}, phiHits{}, fakePhiHits{}, allHits{};
139 
140  unsigned int nmdtHitsMl1{0}, nmdtHitsMl2{0}, ncscHitsEta{0}, ncscHitsPhi{0}, nrpcHitsEta{0}, nrpcHitsPhi{0}, ntgcHitsEta{0},
141  ntgcHitsPhi{0};
142 
143  entry.clearChambers(); // also clears stations and chamberIds
144 
145  bool hasEndcap{false}, hasSmall{false}, hasLarge{false}, hassloverlap{false}, previssmall{false};
147 
149 
150  // vector to store trigger hits in case we have special treatment for them
151  std::vector<const MuonClusterOnTrack*> triggerHitsPhi;
152  std::vector<const MuonClusterOnTrack*> triggerHitsEta;
153 
154  // loop over hits
155  bool is_first_meas = true;
156  for (const Trk::MeasurementBase* meas : measurements) {
157  Identifier id = m_edmHelperSvc->getIdentifier(*meas);
158  if (!id.is_valid()) {
159  fakePhiHits.push_back(meas);
160  continue;
161  }
162 
163  // skip ID hits
164  if (!m_idHelperSvc->isMuon(id)) continue;
165 
166  Identifier chId = m_idHelperSvc->chamberId(id);
167  MuonStationIndex::ChIndex chIndex = m_idHelperSvc->chamberIndex(chId);
168  MuonStationIndex::StIndex stIndex = m_idHelperSvc->stationIndex(chId);
169  if (!hasEndcap) hasEndcap = m_idHelperSvc->isEndcap(id);
170 
171  bool measuresPhi = false;
172 
173  bool isMdt = m_idHelperSvc->isMdt(id);
174  bool isCsc = m_idHelperSvc->isCsc(id);
175  bool isNSW = m_idHelperSvc->isMM(id) || m_idHelperSvc->issTgc(id);
176  // only add precision hits
177  if (isMdt || isCsc || isNSW) {
178  entry.addChamber(chIndex); // will also add stationIndex
179  entry.chamberIds().insert(chId);
180  }
181  if (isMdt) {
182  // if in MDT recreation mode, recreate MDT using ROT creator. Store the pointer as we have to delete it ourselfs.
183  if (recreateMDT) {
184  if ( !m_doMdtRecreation) {
186  " recreation of MDTs requiered although not configured via jobO, ignoring request. Please check jobO ");
187  } else {
188  const MdtDriftCircleOnTrack* mdt = dynamic_cast<const MdtDriftCircleOnTrack*>(meas);
189  if (!mdt) {
190  ATH_MSG_WARNING(" found MdtDriftCircleOnTrack without MDT identifier " << m_idHelperSvc->toString(id));
191  continue;
192  }
193  ATH_MSG_DEBUG(" recreating MdtDriftCircleOnTrack ");
194  std::unique_ptr<const MdtDriftCircleOnTrack> newMdt{
195  m_mdtRotCreator->createRIO_OnTrack(*mdt->prepRawData(), mdt->globalPosition())};
196  meas = newMdt.get();
197  entry.addToTrash(std::move(newMdt));
198  }
199  }
200 
201  const bool isSmall = m_idHelperSvc->isSmallChamber(id);
202  hasSmall |= isSmall;
203  hasLarge |= !isSmall;
204 
205  if (isSmall != previssmall && !is_first_meas && stIndex == prevstIndex) hassloverlap = true;
206 
207  is_first_meas = false;
208  previssmall = isSmall;
209  prevstIndex = stIndex;
210 
211  unsigned int ml = m_idHelperSvc->mdtIdHelper().multilayer(id);
212  nmdtHitsMl1 += (ml ==1);
213  nmdtHitsMl2 += (ml ==2);
214  } else {
215  measuresPhi = m_idHelperSvc->measuresPhi(id);
216 
217  const bool isRpc = m_idHelperSvc->isRpc(id);
218  const bool isTgc = m_idHelperSvc->isTgc(id);
219  nrpcHitsPhi += (measuresPhi && isRpc);
220  nrpcHitsEta += (!measuresPhi && isRpc);
221 
222  ntgcHitsPhi += (measuresPhi && isTgc);
223  ntgcHitsEta += (!measuresPhi && isTgc);
224 
225  ncscHitsPhi+= (measuresPhi && isCsc);
226  ncscHitsEta+= (!measuresPhi && isCsc);
227  if (isCsc && recreateCSC) {
228  const CscClusterOnTrack* csc = dynamic_cast<const CscClusterOnTrack*>(meas);
229  if (!csc) {
230  ATH_MSG_WARNING(" found CscClusterOnTrack without CSC identifier " << m_idHelperSvc->toString(id));
231  continue;
232  }
233  ATH_MSG_DEBUG(" recreating CscClusterOnTrack ");
234  std::unique_ptr<const MuonClusterOnTrack> newCsc{m_cscRotCreator->createRIO_OnTrack(*csc->prepRawData(), csc->globalPosition())};
235  meas = newCsc.get();
236  entry.addToTrash(std::move(newCsc));
237  }
238 
239 
240  // if selected create competing ROTs for trigger hits
241  if (createComp && (isRpc || isTgc)) {
242  if (measuresPhi && m_createCompetingROTsPhi) {
243  // cppcheck-suppress invalidLifetime; false positive
244  addCluster(*meas, triggerHitsPhi);
245  continue;
246  } else if (!measuresPhi && m_createCompetingROTsEta) {
247  // cppcheck-suppress invalidLifetime; false positive
248  addCluster(*meas, triggerHitsEta);
249  continue;
250  }
251  }
252  }
253 
254  // cppcheck-suppress invalidLifetime; false positive
255  allHits.push_back(meas);
256 
257  if (measuresPhi) {
258  // cppcheck-suppress invalidLifetime; false positive
259  phiHits.push_back(meas);
260  } else {
261  // cppcheck-suppress invalidLifetime; false positive
262  etaHits.push_back(meas);
263  }
264  }
265 
266  if (createComp) {
267  if (m_createCompetingROTsEta && !triggerHitsEta.empty()) createAndAddCompetingROTs(triggerHitsEta, etaHits, allHits, entry);
268  if (m_createCompetingROTsPhi && !triggerHitsPhi.empty()) createAndAddCompetingROTs(triggerHitsPhi, phiHits, allHits, entry);
269  }
270 
271  entry.nmdtHitsMl1 = nmdtHitsMl1;
272  entry.nmdtHitsMl2 = nmdtHitsMl2;
273  entry.ncscHitsEta = ncscHitsEta;
274  entry.ncscHitsPhi = ncscHitsPhi;
275  entry.nrpcHitsEta = nrpcHitsEta;
276  entry.nrpcHitsPhi = nrpcHitsPhi;
277  entry.ntgcHitsEta = ntgcHitsEta;
278  entry.ntgcHitsPhi = ntgcHitsPhi;
279  if (!triggerHitsEta.empty() && etaHits.empty()) ATH_MSG_WARNING("did not find any eta hits");
280  entry.setEtaHits(etaHits);
281  if (!triggerHitsPhi.empty() && phiHits.empty()) ATH_MSG_WARNING("did not find any phi hits");
282  entry.setPhiHits(phiHits);
283  entry.setFakePhiHits(fakePhiHits);
284  entry.setAllHits(allHits);
285  entry.hasEndcap(hasEndcap);
286  entry.hasSmallChamber(hasSmall);
287  entry.hasLargeChamber(hasLarge);
288  entry.hasSLOverlap(hassloverlap);
289  }
290 
291  void MuPatCandidateTool::addCluster(const Trk::MeasurementBase& meas, std::vector<const MuonClusterOnTrack*>& rots) const {
292  const MuonClusterOnTrack* clus = dynamic_cast<const MuonClusterOnTrack*>(&meas);
293  if (clus)
294  rots.push_back(clus);
295  else {
296  const CompetingMuonClustersOnTrack* compclus = dynamic_cast<const CompetingMuonClustersOnTrack*>(&meas);
297  if (compclus) {
298  rots.insert(rots.end(), compclus->containedROTs().begin(), compclus->containedROTs().end());
299  } else {
300  Identifier id = m_edmHelperSvc->getIdentifier(meas);
301  ATH_MSG_WARNING(" Trigger Measurement is not a MuonClusterOnTrack or CompetingMuonClustersOnTrack!! "
302  << m_idHelperSvc->toString(id));
303  }
304  }
305  }
306 
307  void MuPatCandidateTool::createAndAddCompetingROTs(const std::vector<const MuonClusterOnTrack*>& rots,
309  MuPatCandidateBase& trash_bin) const {
310  typedef std::map<Identifier, std::vector<const MuonClusterOnTrack*> > IdClusMap;
311  typedef IdClusMap::iterator IdClusIt;
312  IdClusMap idClusters;
313 
314  // loop over hits and sort by detector element
315  for (const MuonClusterOnTrack* clus : rots) {
316  Identifier id = clus->identify();
317  Identifier detId = m_idHelperSvc->detElId(id);
318  idClusters[detId].push_back(clus);
319  }
320 
321  ATH_MSG_DEBUG(" creating CompetingMuonClustersOnTrack for " << idClusters.size() << " chambers ");
322 
323  IdClusIt chit = idClusters.begin();
324  IdClusIt chit_end = idClusters.end();
325  for (; chit != chit_end; ++chit) {
326  if (msgLvl(MSG::VERBOSE)) {
327  msg(MSG::VERBOSE )<<__FILE__<<":"<<__LINE__ << " in " << m_idHelperSvc->toStringDetEl(chit->first) << " clusters: " << chit->second.size()
328  << std::endl;
329  for (const MuonClusterOnTrack* cl_it : chit->second) {
330  msg(MSG::VERBOSE) << " " << m_idHelperSvc->toString(cl_it->identify());
331 
332  // hack to get correct print-out
333  if (cl_it == chit->second.back())
334  msg(MSG::VERBOSE) << endmsg;
335  else
336  msg(MSG::VERBOSE) << std::endl;
337  }
338  }
339 
340  if (chit->second.empty()) {
341  ATH_MSG_WARNING(" empty list, could not create CompetingMuonClustersOnTrack in chamber "
342  << m_idHelperSvc->toString(chit->first));
343  continue;
344  }
345 
346  // only create competing ROT if there is more than one PRD
347  if (chit->second.size() == 1) {
348  hits.push_back(chit->second.front());
349  allHits.push_back(chit->second.front());
350  continue;
351  }
352 
353  // create list of PRDs
354  std::list<const Trk::PrepRawData*> prds;
355  std::vector<const MuonClusterOnTrack*>::iterator cl_it = chit->second.begin();
356  std::vector<const MuonClusterOnTrack*>::iterator cl_it_end = chit->second.end();
357  for (; cl_it != cl_it_end; ++cl_it) {
358  const Trk::PrepRawData* prd = (*cl_it)->prepRawData();
359  if (prd) {
360  prds.push_back(prd);
361  } else {
362  ATH_MSG_WARNING("MuonClusterOnTrack has no PRD.");
363  }
364  }
365 
366  std::unique_ptr<const CompetingMuonClustersOnTrack> comprot = m_compClusterCreator->createBroadCluster(prds, 0);
367  if (!comprot) {
368  ATH_MSG_WARNING(" could not create CompetingMuonClustersOnTrack in chamber " << m_idHelperSvc->toString(chit->first));
369  continue;
370  }
371  hits.push_back(comprot.get());
372  allHits.push_back(comprot.get());
373 
374  // add to garbage collection
375  trash_bin.addToTrash(std::move(comprot));
376  }
377  }
378 
380  // loop over track and get the chambers on the track
381  const Trk::TrackStates* states = candidate.track().trackStateOnSurfaces();
382  if (!states) return false;
383 
384  std::set<MuonStationIndex::ChIndex> chambers;
385 
386  // loop over TSOSs
387  for (const Trk::TrackStateOnSurface* tsos : *states) {
388  // only look at measurements
389  if (!tsos->type(Trk::TrackStateOnSurface::Measurement) || tsos->type(Trk::TrackStateOnSurface::Outlier)) continue;
390 
391  // check whether state is a measurement
392  const Trk::MeasurementBase* meas = tsos->measurementOnTrack();
393  if (!meas) continue;
394 
395  // get chamber index
396  Identifier id = m_edmHelperSvc->getIdentifier(*meas);
397  if (!id.is_valid() || !m_idHelperSvc->isMuon(id)) continue;
398 
399  // don't include trigger hits
400  if (m_idHelperSvc->isTrigger(id)) continue;
401 
402  chambers.insert(m_idHelperSvc->chamberIndex(id));
403 
404  ATH_MSG_VERBOSE(" in recal " << m_idHelperSvc->toString(id));
405  }
406  if (msgLvl(MSG::VERBOSE)) {
407  ATH_MSG_VERBOSE(" recalculateCandidateSegmentContent, old chambers " << candidate.chambers().size() << " new chambers "
408  << chambers.size());
409  for (const MuonStationIndex::ChIndex& chit : candidate.chambers()) {
410  if (!chambers.count(chit)) { ATH_MSG_VERBOSE(" removing chamber index from candidate " << MuonStationIndex::chName(chit)); }
411  }
412  }
413 
414  // reset chamber content
415  bool bRemovedSegments = candidate.resetChambersOnCandidate(chambers);
416 
417  // recalculate hit list
418  candidate.hitList().clear();
419  m_hitHandler->create(candidate.track(), candidate.hitList());
420  // update the hit summary
421  updateHits(candidate, candidate.track().measurementsOnTrack()->stdcont());
422 
423  ATH_MSG_VERBOSE("Print content after recalculateCandidateSegmentContent() -- "<<m_hitHandler->print(candidate.hitList()));
424 
425  return bRemovedSegments;
426  }
427 
428  std::set<const MuonGM::MuonReadoutElement*> MuPatCandidateTool::readoutElements(const MuPatCandidateBase& entry) const {
429  std::set<const MuonGM::MuonReadoutElement*> roEls;
430 
431  MuPatHitCit it = entry.hitList().begin();
432  MuPatHitCit it_end = entry.hitList().end();
433  for (; it != it_end; ++it) {
434  if (!(*it)->info().id.is_valid()) continue;
435  // only want MDT or CSC detEls
436  if (!m_idHelperSvc->isMdt((*it)->info().id) && !m_idHelperSvc->isCsc((*it)->info().id)) continue;
437 
438  const Trk::MeasurementBase& meas = (*it)->measurement();
439  const Trk::RIO_OnTrack* rot = dynamic_cast<const Trk::RIO_OnTrack*>(&meas);
440  if (!rot) {
441  const CompetingMuonClustersOnTrack* crot = dynamic_cast<const CompetingMuonClustersOnTrack*>(&meas);
442  if (crot) {
443  const std::vector<const MuonClusterOnTrack*>& rots = crot->containedROTs();
444  if (!rots.empty()) rot = rots.front();
445  }
446  }
447  if (rot) {
448  const MuonGM::MuonReadoutElement* roEl = dynamic_cast<const MuonGM::MuonReadoutElement*>(rot->detectorElement());
449  if (roEl) roEls.insert(roEl);
450  }
451  }
452  return roEls;
453  }
454 
455  std::string MuPatCandidateTool::print(const MuPatSegment& segment, int level) const {
456  std::ostringstream oss;
457  oss << segment.name << ": " << m_printer->print(*segment.segment) << " q " << segment.quality;
458  if (level == 0) return oss.str();
459 
460  if (segment.hitList().size() >= 2) {
461  DistanceAlongParameters distCal{};
462  oss << " length " << distCal(segment.hitList().front(), segment.hitList().back());
463  }
464  oss << std::endl << m_hitHandler->print(segment.hitList(), true, false, false);
465  return oss.str();
466  }
467 
468  std::string MuPatCandidateTool::print(const std::vector<MuPatSegment*>& segments, int level) const {
469  std::vector<MuPatSegment*>::const_iterator it = segments.begin();
470  std::vector<MuPatSegment*>::const_iterator it_end = segments.end();
471  std::ostringstream oss;
472  oss << " Segment candidate vector: " << segments.size();
473  for (; it != it_end; ++it) oss << std::endl << print(**it, level);
474 
475  return oss.str();
476  }
477 
478  std::string MuPatCandidateTool::print(const MuPatTrack& track, int level) const {
479  std::ostringstream oss;
480  oss << m_printer->print(track.track()) << std::endl << m_printer->printStations(track.track());
481 
482  if (level == 0) return oss.str();
483 
484  const std::vector<MuPatSegment*>& segs = track.segments();
485  oss << std::endl << print(segs, 0);
486 
487  return oss.str();
488  }
489 
490  std::string MuPatCandidateTool::print(const std::vector<std::unique_ptr<MuPatTrack> >& tracks, int level) const {
491  std::ostringstream oss;
492  oss << "MuPatTracks " << tracks.size() << std::endl;
493  std::vector<std::unique_ptr<MuPatTrack> >::const_iterator tit = tracks.begin();
494  std::vector<std::unique_ptr<MuPatTrack> >::const_iterator tit_end = tracks.end();
495  for (; tit != tit_end; ++tit) oss << " " << print(**tit, level) << std::endl;
496 
497  return oss.str();
498  }
499 
500  std::string MuPatCandidateTool::print(const MuPatCandidateBase& candidate, int level) const {
501  const MuPatSegment* seg = dynamic_cast<const MuPatSegment*>(&candidate);
502  if (seg) return print(*seg, level);
503 
504  const MuPatTrack* track = dynamic_cast<const MuPatTrack*>(&candidate);
505  if (track) return print(*track, level);
506 
507  return "Unknown candidate type";
508  }
509 
510 } // namespace Muon
grepfile.info
info
Definition: grepfile.py:38
Muon::MuonSegmentQuality
Definition: MuonSegmentQuality.h: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::MuonStationIndex::StUnknown
@ StUnknown
Definition: MuonStationIndex.h:24
Muon::MuPatCandidateBase::addToTrash
void addToTrash(std::unique_ptr< const Trk::MeasurementBase > meas)
adds the measurement to the garbage container.
Definition: MuPatCandidateBase.cxx:91
Muon::MuPatCandidateTool::print
std::string print(const MuPatSegment &segment, int level=0) const
print the measurements on the track to string
Definition: MuPatCandidateTool.cxx:455
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
TrackParameters.h
MeasurementBase.h
Muon::MuonClusterOnTrack::globalPosition
virtual const Amg::Vector3D & globalPosition() const override
Returns global position.
Definition: MuonClusterOnTrack.cxx:93
Muon::MuPatCandidateBase
track candidate entry object.
Definition: MuPatCandidateBase.h:46
Trk::MagneticFieldProperties
Definition: MagneticFieldProperties.h:31
Muon::MdtDriftCircleOnTrack::prepRawData
virtual const MdtPrepData * prepRawData() const override final
Returns the PrepRawData used to create this corrected measurement.
Definition: MdtDriftCircleOnTrack.h:257
MuPatCandidateTool.h
Trk::Track::trackStateOnSurfaces
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
Muon::MuPatCandidateBase::chambers
const std::set< MuonStationIndex::ChIndex > & chambers() const
returns set with contained chamberIndices
Definition: MuPatCandidateBase.cxx:31
skel.it
it
Definition: skel.GENtoEVGEN.py:423
Muon::MuPatCandidateTool::m_mdtRotCreator
ToolHandle< IMdtDriftCircleOnTrackCreator > m_mdtRotCreator
Definition: MuPatCandidateTool.h:153
CompetingMuonClustersOnTrack.h
Muon::MuPatCandidateTool::m_cscRotCreator
ToolHandle< IMuonClusterOnTrackCreator > m_cscRotCreator
Definition: MuPatCandidateTool.h:155
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
MuPatCandidateBase.h
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
Muon::MuPatCandidateTool::MeasVec
std::vector< const Trk::MeasurementBase * > MeasVec
Definition: MuPatCandidateTool.h:51
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Muon::CompetingMuonClustersOnTrack
Definition: CompetingMuonClustersOnTrack.h:54
MdtDriftCircleOnTrack.h
MuPatHitTool.h
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
Muon::MuPatCandidateTool::m_createCompetingROTsEta
Gaudi::Property< bool > m_createCompetingROTsEta
Definition: MuPatCandidateTool.h:169
Muon::MdtDriftCircleOnTrack::globalPosition
virtual const Amg::Vector3D & globalPosition() const override final
Returns the global Position.
Definition: MdtDriftCircleOnTrack.cxx:108
MuPatSegment.h
MuonTrackMakerStlTools.h
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
Muon::MuPatCandidateTool::m_doCscRecreation
Gaudi::Property< bool > m_doCscRecreation
Definition: MuPatCandidateTool.h:171
Muon::MuPatCandidateTool::createAndAddCompetingROTs
void createAndAddCompetingROTs(const std::vector< const MuonClusterOnTrack * > &rots, MeasVec &hits, MeasVec &allHits, MuPatCandidateBase &entry) const
create CompetingMuonClustersOnTracks from ROTs and add them to the MeasVec.
Definition: MuPatCandidateTool.cxx:307
MuonGM::MuonReadoutElement
Base class for the XxxReadoutElement, with Xxx = Mdt, Rpc, Tgc, Csc.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:40
Trk::TrackStateOnSurface::Outlier
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
Definition: TrackStateOnSurface.h:122
Muon::MuPatCandidateTool::MuPatCandidateTool
MuPatCandidateTool(const std::string &, const std::string &, const IInterface *)
default AlgTool constructor
Definition: MuPatCandidateTool.cxx:34
Track.h
MagneticFieldProperties.h
Muon::MuPatCandidateTool::createSegInfo
std::unique_ptr< MuPatSegment > createSegInfo(const EventContext &ctx, const MuonSegment &segment) const
create a MuPatSegment object from a segment
Definition: MuPatCandidateTool.cxx:58
TileDCSDataPlotter.tit
tit
Definition: TileDCSDataPlotter.py:890
Muon::MuPatTrack::resetChambersOnCandidate
bool resetChambersOnCandidate(const std::set< MuonStationIndex::ChIndex > &chambers)
reset chambers on the candidate.
Definition: MuPatTrack.cxx:239
Muon::MuPatCandidateTool::updateTrack
bool updateTrack(MuPatTrack &candidate, std::unique_ptr< Trk::Track > &track) const
set the new track in the candidate, and update candidate contents.
Definition: MuPatCandidateTool.cxx:113
PlotPulseshapeFromCool.can
can
Definition: PlotPulseshapeFromCool.py:91
ResidualPull.h
EventPrimitivesToStringConverter.h
Muon::MuPatCandidateTool::updateHits
void updateHits(MuPatCandidateBase &entry, const MeasVec &measurements, bool recreateMDT=false, bool recreateCSC=false, bool createComp=false) const
update hits for a MuPatCandidateBase
Definition: MuPatCandidateTool.cxx:136
Muon::MuPatHitCit
MuPatHitList::const_iterator MuPatHitCit
Definition: MuPatHit.h:27
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
beamspotman.n
n
Definition: beamspotman.py:731
SortMuPatHits.h
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
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
urldecode::states
states
Definition: urldecode.h:39
LArG4ShowerLibProcessing.hits
hits
Definition: LArG4ShowerLibProcessing.py:136
Muon::MuPatCandidateTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuPatCandidateTool.h:160
CscClusterOnTrack.h
MuPatTrack.h
PseudoMeasurementOnTrack.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonReadoutElement.h
DataVector< const Trk::TrackStateOnSurface >
Muon::MuPatCandidateTool::initialize
virtual StatusCode initialize() override
initialize method, method taken from bass-class AlgTool
Definition: MuPatCandidateTool.cxx:38
Muon::MuPatCandidateTool::copyCandidate
static std::unique_ptr< MuPatTrack > copyCandidate(MuPatTrack *canIn)
copy a candidate without copying the track (lazy pointer copy)
Definition: MuPatCandidateTool.cxx:100
Muon::MuPatCandidateTool::m_segmentSelector
ToolHandle< Muon::IMuonSegmentSelectionTool > m_segmentSelector
Definition: MuPatCandidateTool.h:165
Trk::PrepRawData
Definition: PrepRawData.h:62
Trk::MeasurementBase
Definition: MeasurementBase.h:58
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
Muon::MuPatCandidateTool::m_compClusterCreator
ToolHandle< IMuonCompetingClustersOnTrackCreator > m_compClusterCreator
Definition: MuPatCandidateTool.h:157
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
Muon::MuPatCandidateTool::m_printer
PublicToolHandle< MuonEDMPrinterTool > m_printer
Definition: MuPatCandidateTool.h:163
Muon::MdtDriftCircleOnTrack
This class represents the corrected MDT measurements, where the corrections include the effects of wi...
Definition: MdtDriftCircleOnTrack.h:37
Muon::MuPatTrack::updateTrack
void updateTrack(std::unique_ptr< Trk::Track > &newTrack)
update track.
Definition: MuPatTrack.cxx:210
Muon::MuPatCandidateTool::m_edmHelperSvc
ServiceHandle< IMuonEDMHelperSvc > m_edmHelperSvc
Definition: MuPatCandidateTool.h:161
Muon::MuPatCandidateTool::m_createCompetingROTsPhi
Gaudi::Property< bool > m_createCompetingROTsPhi
Definition: MuPatCandidateTool.h:168
Muon::CompetingMuonClustersOnTrack::containedROTs
const std::vector< const MuonClusterOnTrack * > & containedROTs() const
returns the vector of SCT_ClusterOnTrack objects .
Definition: CompetingMuonClustersOnTrack.h:184
Muon::MuPatCandidateTool::m_doMdtRecreation
Gaudi::Property< bool > m_doMdtRecreation
Definition: MuPatCandidateTool.h:170
MuonDetectorManager.h
Muon::CscClusterOnTrack::prepRawData
virtual const CscPrepData * prepRawData() const override final
Returns the CscPrepData - is a CscPrepData in this scope.
Definition: CscClusterOnTrack.h:154
Muon::MuPatSegment
segment candidate object.
Definition: MuPatSegment.h:43
Muon::MuPatCandidateTool::readoutElements
std::set< const MuonGM::MuonReadoutElement * > readoutElements(const MuPatCandidateBase &entry) const
get list of the readout elements of the hits on the entry
Definition: MuPatCandidateTool.cxx:428
Trk::Track::measurementsOnTrack
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
Definition: Tracking/TrkEvent/TrkTrack/src/Track.cxx:178
Muon::CscClusterOnTrack
Class to represent the calibrated clusters created from CSC strips.
Definition: CscClusterOnTrack.h:47
Muon::MuPatTrack::track
Trk::Track & track() const
access to track
Definition: MuPatTrack.h:175
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Muon::MuPatCandidateBase::hitList
const MuPatHitList & hitList() const
returns a reference to the hit list
Definition: MuPatCandidateBase.h:108
Muon::MuPatTrack
track candidate object.
Definition: MuPatTrack.h:37
Muon::MuPatCandidateTool::extendWithSegment
bool extendWithSegment(MuPatTrack &can, MuPatSegment &segInfo, std::unique_ptr< Trk::Track > &track) const
extend a track candidate with a segment
Definition: MuPatCandidateTool.cxx:94
Muon::MuPatCandidateTool::createCandidate
std::unique_ptr< MuPatTrack > createCandidate(MuPatSegment &segInfo, std::unique_ptr< Trk::Track > &track) const
create a track candidate from one segment
Definition: MuPatCandidateTool.cxx:106
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
Trk::RIO_OnTrack::identify
virtual Identifier identify() const final
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:155
Muon::MuonStationIndex::ChIndex
ChIndex
enum to classify the different chamber layers in the muon spectrometer
Definition: MuonStationIndex.h:15
MuonSegment.h
Muon::MuonStationIndex::StIndex
StIndex
enum to classify the different station layers in the muon spectrometer
Definition: MuonStationIndex.h:23
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Trk::RIO_OnTrack::detectorElement
virtual const TrkDetElementBase * detectorElement() const =0
returns the detector element, assoicated with the PRD of this class
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
Muon::MuonSegment
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:45
AthAlgTool
Definition: AthAlgTool.h:26
Muon::DistanceAlongParameters
Definition: SortMuPatHits.h:16
Muon::MuPatCandidateTool::recalculateCandidateSegmentContent
bool recalculateCandidateSegmentContent(MuPatTrack &candidate) const
recalculate the chamber indices on the candidate and reset them.
Definition: MuPatCandidateTool.cxx:379
Muon::MuPatCandidateTool::addCluster
void addCluster(const Trk::MeasurementBase &meas, std::vector< const MuonClusterOnTrack * > &rots) const
extract MuonClusterOnTrack('s) from measurement
Definition: MuPatCandidateTool.cxx:291
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
Muon::MuonClusterOnTrack
Base class for Muon cluster RIO_OnTracks.
Definition: MuonClusterOnTrack.h:34
NSWL1::PadTriggerAdapter::segment
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)
Definition: PadTriggerAdapter.cxx:5
Muon::MuPatCandidateTool::m_hitHandler
ToolHandle< MuPatHitTool > m_hitHandler
Definition: MuPatCandidateTool.h:164