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