ATLAS Offline Software
MuPatCandidateTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 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  // cppcheck-suppress invalidLifetime; false positive
158  Identifier id = m_edmHelperSvc->getIdentifier(*meas);
159  if (!id.is_valid()) {
160  fakePhiHits.push_back(meas);
161  continue;
162  }
163 
164  // skip ID hits
165  if (!m_idHelperSvc->isMuon(id)) continue;
166 
167  Identifier chId = m_idHelperSvc->chamberId(id);
168  MuonStationIndex::ChIndex chIndex = m_idHelperSvc->chamberIndex(chId);
169  MuonStationIndex::StIndex stIndex = m_idHelperSvc->stationIndex(chId);
170  if (!hasEndcap) hasEndcap = m_idHelperSvc->isEndcap(id);
171 
172  bool measuresPhi = false;
173 
174  bool isMdt = m_idHelperSvc->isMdt(id);
175  bool isCsc = m_idHelperSvc->isCsc(id);
176  bool isNSW = m_idHelperSvc->isMM(id) || m_idHelperSvc->issTgc(id);
177  // only add precision hits
178  if (isMdt || isCsc || isNSW) {
179  entry.addChamber(chIndex); // will also add stationIndex
180  entry.chamberIds().insert(chId);
181  }
182  if (isMdt) {
183  // if in MDT recreation mode, recreate MDT using ROT creator. Store the pointer as we have to delete it ourselfs.
184  if (recreateMDT) {
185  if ( !m_doMdtRecreation) {
187  " recreation of MDTs requiered although not configured via jobO, ignoring request. Please check jobO ");
188  } else {
189  const MdtDriftCircleOnTrack* mdt = dynamic_cast<const MdtDriftCircleOnTrack*>(meas);
190  if (!mdt) {
191  ATH_MSG_WARNING(" found MdtDriftCircleOnTrack without MDT identifier " << m_idHelperSvc->toString(id));
192  continue;
193  }
194  ATH_MSG_DEBUG(" recreating MdtDriftCircleOnTrack ");
195  std::unique_ptr<const MdtDriftCircleOnTrack> newMdt{
196  m_mdtRotCreator->createRIO_OnTrack(*mdt->prepRawData(), mdt->globalPosition())};
197  meas = newMdt.get();
198  entry.addToTrash(std::move(newMdt));
199  }
200  }
201 
202  const bool isSmall = m_idHelperSvc->isSmallChamber(id);
203  hasSmall |= isSmall;
204  hasLarge |= !isSmall;
205 
206  if (isSmall != previssmall && !is_first_meas && stIndex == prevstIndex) hassloverlap = true;
207 
208  is_first_meas = false;
209  previssmall = isSmall;
210  prevstIndex = stIndex;
211 
212  unsigned int ml = m_idHelperSvc->mdtIdHelper().multilayer(id);
213  nmdtHitsMl1 += (ml ==1);
214  nmdtHitsMl2 += (ml ==2);
215  } else {
216  measuresPhi = m_idHelperSvc->measuresPhi(id);
217 
218  const bool isRpc = m_idHelperSvc->isRpc(id);
219  const bool isTgc = m_idHelperSvc->isTgc(id);
220  nrpcHitsPhi += (measuresPhi && isRpc);
221  nrpcHitsEta += (!measuresPhi && isRpc);
222 
223  ntgcHitsPhi += (measuresPhi && isTgc);
224  ntgcHitsEta += (!measuresPhi && isTgc);
225 
226  ncscHitsPhi+= (measuresPhi && isCsc);
227  ncscHitsEta+= (!measuresPhi && isCsc);
228  if (isCsc && recreateCSC) {
229  const CscClusterOnTrack* csc = dynamic_cast<const CscClusterOnTrack*>(meas);
230  if (!csc) {
231  ATH_MSG_WARNING(" found CscClusterOnTrack without CSC identifier " << m_idHelperSvc->toString(id));
232  continue;
233  }
234  ATH_MSG_DEBUG(" recreating CscClusterOnTrack ");
235  std::unique_ptr<const MuonClusterOnTrack> newCsc{m_cscRotCreator->createRIO_OnTrack(*csc->prepRawData(), csc->globalPosition())};
236  meas = newCsc.get();
237  entry.addToTrash(std::move(newCsc));
238  }
239 
240 
241  // if selected create competing ROTs for trigger hits
242  if (createComp && (isRpc || isTgc)) {
243  if (measuresPhi && m_createCompetingROTsPhi) {
244  // cppcheck-suppress invalidLifetime; false positive
245  addCluster(*meas, triggerHitsPhi);
246  continue;
247  } else if (!measuresPhi && m_createCompetingROTsEta) {
248  // cppcheck-suppress invalidLifetime; false positive
249  addCluster(*meas, triggerHitsEta);
250  continue;
251  }
252  }
253  }
254 
255  // cppcheck-suppress invalidLifetime; false positive
256  allHits.push_back(meas);
257 
258  if (measuresPhi) {
259  // cppcheck-suppress invalidLifetime; false positive
260  phiHits.push_back(meas);
261  } else {
262  // cppcheck-suppress invalidLifetime; false positive
263  etaHits.push_back(meas);
264  }
265  }
266 
267  if (createComp) {
268  if (m_createCompetingROTsEta && !triggerHitsEta.empty()) createAndAddCompetingROTs(triggerHitsEta, etaHits, allHits, entry);
269  if (m_createCompetingROTsPhi && !triggerHitsPhi.empty()) createAndAddCompetingROTs(triggerHitsPhi, phiHits, allHits, entry);
270  }
271 
272  entry.nmdtHitsMl1 = nmdtHitsMl1;
273  entry.nmdtHitsMl2 = nmdtHitsMl2;
274  entry.ncscHitsEta = ncscHitsEta;
275  entry.ncscHitsPhi = ncscHitsPhi;
276  entry.nrpcHitsEta = nrpcHitsEta;
277  entry.nrpcHitsPhi = nrpcHitsPhi;
278  entry.ntgcHitsEta = ntgcHitsEta;
279  entry.ntgcHitsPhi = ntgcHitsPhi;
280  if (!triggerHitsEta.empty() && etaHits.empty()) ATH_MSG_WARNING("did not find any eta hits");
281  entry.setEtaHits(etaHits);
282  if (!triggerHitsPhi.empty() && phiHits.empty()) ATH_MSG_WARNING("did not find any phi hits");
283  entry.setPhiHits(phiHits);
284  entry.setFakePhiHits(fakePhiHits);
285  entry.setAllHits(allHits);
286  entry.hasEndcap(hasEndcap);
287  entry.hasSmallChamber(hasSmall);
288  entry.hasLargeChamber(hasLarge);
289  entry.hasSLOverlap(hassloverlap);
290  }
291 
292  void MuPatCandidateTool::addCluster(const Trk::MeasurementBase& meas, std::vector<const MuonClusterOnTrack*>& rots) const {
293  const MuonClusterOnTrack* clus = dynamic_cast<const MuonClusterOnTrack*>(&meas);
294  if (clus)
295  rots.push_back(clus);
296  else {
297  const CompetingMuonClustersOnTrack* compclus = dynamic_cast<const CompetingMuonClustersOnTrack*>(&meas);
298  if (compclus) {
299  rots.insert(rots.end(), compclus->containedROTs().begin(), compclus->containedROTs().end());
300  } else {
301  Identifier id = m_edmHelperSvc->getIdentifier(meas);
302  ATH_MSG_WARNING(" Trigger Measurement is not a MuonClusterOnTrack or CompetingMuonClustersOnTrack!! "
303  << m_idHelperSvc->toString(id));
304  }
305  }
306  }
307 
308  void MuPatCandidateTool::createAndAddCompetingROTs(const std::vector<const MuonClusterOnTrack*>& rots,
310  MuPatCandidateBase& trash_bin) const {
311  typedef std::map<Identifier, std::vector<const MuonClusterOnTrack*> > IdClusMap;
312  typedef IdClusMap::iterator IdClusIt;
313  IdClusMap idClusters;
314 
315  // loop over hits and sort by detector element
316  for (const MuonClusterOnTrack* clus : rots) {
317  Identifier id = clus->identify();
318  Identifier detId = m_idHelperSvc->detElId(id);
319  idClusters[detId].push_back(clus);
320  }
321 
322  ATH_MSG_DEBUG(" creating CompetingMuonClustersOnTrack for " << idClusters.size() << " chambers ");
323 
324  IdClusIt chit = idClusters.begin();
325  IdClusIt chit_end = idClusters.end();
326  for (; chit != chit_end; ++chit) {
327  if (msgLvl(MSG::VERBOSE)) {
328  msg(MSG::VERBOSE )<<__FILE__<<":"<<__LINE__ << " in " << m_idHelperSvc->toStringDetEl(chit->first) << " clusters: " << chit->second.size()
329  << std::endl;
330  for (const MuonClusterOnTrack* cl_it : chit->second) {
331  msg(MSG::VERBOSE) << " " << m_idHelperSvc->toString(cl_it->identify());
332 
333  // hack to get correct print-out
334  if (cl_it == chit->second.back())
335  msg(MSG::VERBOSE) << endmsg;
336  else
337  msg(MSG::VERBOSE) << std::endl;
338  }
339  }
340 
341  if (chit->second.empty()) {
342  ATH_MSG_WARNING(" empty list, could not create CompetingMuonClustersOnTrack in chamber "
343  << m_idHelperSvc->toString(chit->first));
344  continue;
345  }
346 
347  // only create competing ROT if there is more than one PRD
348  if (chit->second.size() == 1) {
349  hits.push_back(chit->second.front());
350  allHits.push_back(chit->second.front());
351  continue;
352  }
353 
354  // create list of PRDs
355  std::list<const Trk::PrepRawData*> prds;
356  std::vector<const MuonClusterOnTrack*>::iterator cl_it = chit->second.begin();
357  std::vector<const MuonClusterOnTrack*>::iterator cl_it_end = chit->second.end();
358  for (; cl_it != cl_it_end; ++cl_it) {
359  const Trk::PrepRawData* prd = (*cl_it)->prepRawData();
360  if (prd) {
361  prds.push_back(prd);
362  } else {
363  ATH_MSG_WARNING("MuonClusterOnTrack has no PRD.");
364  }
365  }
366 
367  std::unique_ptr<const CompetingMuonClustersOnTrack> comprot = m_compClusterCreator->createBroadCluster(prds, 0);
368  if (!comprot) {
369  ATH_MSG_WARNING(" could not create CompetingMuonClustersOnTrack in chamber " << m_idHelperSvc->toString(chit->first));
370  continue;
371  }
372  hits.push_back(comprot.get());
373  allHits.push_back(comprot.get());
374 
375  // add to garbage collection
376  trash_bin.addToTrash(std::move(comprot));
377  }
378  }
379 
381  // loop over track and get the chambers on the track
382  const Trk::TrackStates* states = candidate.track().trackStateOnSurfaces();
383  if (!states) return false;
384 
385  std::set<MuonStationIndex::ChIndex> chambers;
386 
387  // loop over TSOSs
388  for (const Trk::TrackStateOnSurface* tsos : *states) {
389  // only look at measurements
390  if (!tsos->type(Trk::TrackStateOnSurface::Measurement) || tsos->type(Trk::TrackStateOnSurface::Outlier)) continue;
391 
392  // check whether state is a measurement
393  const Trk::MeasurementBase* meas = tsos->measurementOnTrack();
394  if (!meas) continue;
395 
396  // get chamber index
397  Identifier id = m_edmHelperSvc->getIdentifier(*meas);
398  if (!id.is_valid() || !m_idHelperSvc->isMuon(id)) continue;
399 
400  // don't include trigger hits
401  if (m_idHelperSvc->isTrigger(id)) continue;
402 
403  chambers.insert(m_idHelperSvc->chamberIndex(id));
404 
405  ATH_MSG_VERBOSE(" in recal " << m_idHelperSvc->toString(id));
406  }
407  if (msgLvl(MSG::VERBOSE)) {
408  ATH_MSG_VERBOSE(" recalculateCandidateSegmentContent, old chambers " << candidate.chambers().size() << " new chambers "
409  << chambers.size());
410  for (const MuonStationIndex::ChIndex& chit : candidate.chambers()) {
411  if (!chambers.count(chit)) { ATH_MSG_VERBOSE(" removing chamber index from candidate " << MuonStationIndex::chName(chit)); }
412  }
413  }
414 
415  // reset chamber content
416  bool bRemovedSegments = candidate.resetChambersOnCandidate(chambers);
417 
418  // recalculate hit list
419  candidate.hitList().clear();
420  m_hitHandler->create(candidate.track(), candidate.hitList());
421  // update the hit summary
422  updateHits(candidate, candidate.track().measurementsOnTrack()->stdcont());
423 
424  ATH_MSG_VERBOSE("Print content after recalculateCandidateSegmentContent() -- "<<m_hitHandler->print(candidate.hitList()));
425 
426  return bRemovedSegments;
427  }
428 
429  std::set<const MuonGM::MuonReadoutElement*> MuPatCandidateTool::readoutElements(const MuPatCandidateBase& entry) const {
430  std::set<const MuonGM::MuonReadoutElement*> roEls;
431 
432  MuPatHitCit it = entry.hitList().begin();
433  MuPatHitCit it_end = entry.hitList().end();
434  for (; it != it_end; ++it) {
435  if (!(*it)->info().id.is_valid()) continue;
436  // only want MDT or CSC detEls
437  if (!m_idHelperSvc->isMdt((*it)->info().id) && !m_idHelperSvc->isCsc((*it)->info().id)) continue;
438 
439  const Trk::MeasurementBase& meas = (*it)->measurement();
440  const Trk::RIO_OnTrack* rot = dynamic_cast<const Trk::RIO_OnTrack*>(&meas);
441  if (!rot) {
442  const CompetingMuonClustersOnTrack* crot = dynamic_cast<const CompetingMuonClustersOnTrack*>(&meas);
443  if (crot) {
444  const std::vector<const MuonClusterOnTrack*>& rots = crot->containedROTs();
445  if (!rots.empty()) rot = rots.front();
446  }
447  }
448  if (rot) {
449  const MuonGM::MuonReadoutElement* roEl = dynamic_cast<const MuonGM::MuonReadoutElement*>(rot->detectorElement());
450  if (roEl) roEls.insert(roEl);
451  }
452  }
453  return roEls;
454  }
455 
456  std::string MuPatCandidateTool::print(const MuPatSegment& segment, int level) const {
457  std::ostringstream oss;
458  oss << segment.name << ": " << m_printer->print(*segment.segment) << " q " << segment.quality;
459  if (level == 0) return oss.str();
460 
461  if (segment.hitList().size() >= 2) {
462  DistanceAlongParameters distCal{};
463  oss << " length " << distCal(segment.hitList().front(), segment.hitList().back());
464  }
465  oss << std::endl << m_hitHandler->print(segment.hitList(), true, false, false);
466  return oss.str();
467  }
468 
469  std::string MuPatCandidateTool::print(const std::vector<MuPatSegment*>& segments, int level) const {
470  std::vector<MuPatSegment*>::const_iterator it = segments.begin();
471  std::vector<MuPatSegment*>::const_iterator it_end = segments.end();
472  std::ostringstream oss;
473  oss << " Segment candidate vector: " << segments.size();
474  for (; it != it_end; ++it) oss << std::endl << print(**it, level);
475 
476  return oss.str();
477  }
478 
479  std::string MuPatCandidateTool::print(const MuPatTrack& track, int level) const {
480  std::ostringstream oss;
481  oss << m_printer->print(track.track()) << std::endl << m_printer->printStations(track.track());
482 
483  if (level == 0) return oss.str();
484 
485  const std::vector<MuPatSegment*>& segs = track.segments();
486  oss << std::endl << print(segs, 0);
487 
488  return oss.str();
489  }
490 
491  std::string MuPatCandidateTool::print(const std::vector<std::unique_ptr<MuPatTrack> >& tracks, int level) const {
492  std::ostringstream oss;
493  oss << "MuPatTracks " << tracks.size() << std::endl;
494  std::vector<std::unique_ptr<MuPatTrack> >::const_iterator tit = tracks.begin();
495  std::vector<std::unique_ptr<MuPatTrack> >::const_iterator tit_end = tracks.end();
496  for (; tit != tit_end; ++tit) oss << " " << print(**tit, level) << std::endl;
497 
498  return oss.str();
499  }
500 
501  std::string MuPatCandidateTool::print(const MuPatCandidateBase& candidate, int level) const {
502  const MuPatSegment* seg = dynamic_cast<const MuPatSegment*>(&candidate);
503  if (seg) return print(*seg, level);
504 
505  const MuPatTrack* track = dynamic_cast<const MuPatTrack*>(&candidate);
506  if (track) return print(*track, level);
507 
508  return "Unknown candidate type";
509  }
510 
511 } // 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:456
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
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:396
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:45
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:308
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
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
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
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
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:429
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
Trk::RIO_OnTrack::identify
Identifier identify() const
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:152
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
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:380
Muon::MuPatCandidateTool::addCluster
void addCluster(const Trk::MeasurementBase &meas, std::vector< const MuonClusterOnTrack * > &rots) const
extract MuonClusterOnTrack('s) from measurement
Definition: MuPatCandidateTool.cxx:292
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
Identifier
Definition: IdentifierFieldParser.cxx:14