ATLAS Offline Software
MuPatHitTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "MuPatHitTool.h"
6 
21 #include "TrkTrack/Track.h"
23 
24 namespace Muon {
25 
26  MuPatHitTool::MuPatHitTool(const std::string& t, const std::string& n, const IInterface* p) : AthAlgTool(t, n, p) {
27  declareInterface<MuPatHitTool>(this);
28  }
29 
30  MuPatHitTool::~MuPatHitTool() = default;
31 
33  ATH_CHECK(m_idHelperSvc.retrieve());
34  ATH_CHECK(m_mdtRotCreator.retrieve());
35  ATH_CHECK(m_cscRotCreator.retrieve(DisableTool{m_cscRotCreator.empty()}));
36  ATH_CHECK(m_edmHelperSvc.retrieve());
37  ATH_CHECK(m_printer.retrieve());
38  ATH_CHECK(m_pullCalculator.retrieve());
39  ATH_CHECK(m_propagator.retrieve());
40 
41  return StatusCode::SUCCESS;
42  }
43 
44  bool MuPatHitTool::create(const EventContext& ctx, const MuonSegment& seg, MuPatHitList& hitList) const {
45  ATH_MSG_DEBUG(" creating hit list from segment " << std::endl << m_printer->print(seg));
46 
47  // create parameters with very large momentum and no charge
48  double momentum{1.e8}, charge{0.};
49  std::unique_ptr<const Trk::TrackParameters> pars{m_edmHelperSvc->createTrackParameters(seg, momentum, charge)};
50  if (!pars) {
51  ATH_MSG_WARNING(" could not create track parameters for segment ");
52  return false;
53  }
54 
55  return create(ctx, *pars, seg.containedMeasurements(), hitList);
56  }
57 
58  bool MuPatHitTool::create(const EventContext& ctx, const Trk::TrackParameters& pars,
59  const std::vector<const Trk::MeasurementBase*>& measVec, MuPatHitList& hitList) const {
60  // loop over hits
61  for (const Trk::MeasurementBase* meas : measVec) {
62  // create hit info
63  MuPatHit::Info hitInfo = getHitInfo(*meas);
64 
65  const Identifier& id = hitInfo.id;
66  if (hitInfo.type == MuPatHit::UnknownType) {
67  ATH_MSG_WARNING(" unknown hit type " << m_idHelperSvc->toString(id));
68  continue;
69  }
70 
71  // create broad measurement
72  std::unique_ptr<const Trk::MeasurementBase> broadMeas = createBroadMeasurement(*meas, hitInfo);
73  if (!broadMeas) {
74  ATH_MSG_WARNING(" could not create broad measurement " << m_idHelperSvc->toString(id));
75  continue;
76  }
77  // extrapolate
78  std::unique_ptr<const Trk::TrackParameters> exPars;
79  if (pars.associatedSurface() == broadMeas->associatedSurface()) {
80  exPars = pars.uniqueClone();
81  ATH_MSG_VERBOSE(" start parameters and measurement expressed at same surface, cloning parameters ");
82  } else {
83  exPars = m_propagator->propagate(ctx, pars, broadMeas->associatedSurface(), Trk::anyDirection, false, m_magFieldProperties);
84  if (!exPars) { continue; } // !exPars
85  }
86 
87  // create hit and insert it into list
88  ATH_MSG_VERBOSE(" inserting hit " << m_idHelperSvc->toString(id) << " " << m_printer->print(*exPars));
89  std::unique_ptr<MuPatHit> hit = std::make_unique<MuPatHit>(std::move(exPars), meas->uniqueClone(), std::move(broadMeas), hitInfo);
90  hitList.push_back(std::move(hit));
91  }
92 
93  const SortByDirectionMuPatHits isLargerCal{pars};
94  std::stable_sort(hitList.begin(), hitList.end(), isLargerCal);
95  return true;
96  }
97 
98  bool MuPatHitTool::create(const Trk::Track& track, MuPatHitList& hitList) const {
99  // loop over hits
100  for (const Trk::TrackStateOnSurface* tsit : *track.trackStateOnSurfaces()) {
101  // do not take into account scatteres and holes for now
102  if (tsit->type(Trk::TrackStateOnSurface::Scatterer) ||
103  tsit->type(Trk::TrackStateOnSurface::Hole)) continue;
104 
105  const Trk::MeasurementBase* meas = tsit->measurementOnTrack();
106  if (!meas) continue;
107 
108  const Trk::TrackParameters* pars = tsit->trackParameters();
109  if (!pars) continue;
110 
111  // create hit info
112  MuPatHit::Info hitInfo = getHitInfo(*meas);
113 
115 
116  const Identifier& id = hitInfo.id;
117 
118  if (!m_idHelperSvc->isMuon(id)) continue;
119 
120  if (hitInfo.type == MuPatHit::UnknownType) {
121  ATH_MSG_WARNING(" unknown hit type " << m_idHelperSvc->toString(id));
122  continue;
123  }
124 
125  // create broad measurement
126  std::unique_ptr<const Trk::MeasurementBase> broadMeas = createBroadMeasurement(*meas, hitInfo);
127  if (!broadMeas) {
128  ATH_MSG_WARNING(" could not create broad measurement " << m_idHelperSvc->toString(id));
129  continue;
130  }
131 
132  // create hit and insert it into list
133  std::unique_ptr<MuPatHit> hit = std::make_unique<MuPatHit>(pars->uniqueClone(), meas->uniqueClone(), std::move(broadMeas), hitInfo);
134  ATH_MSG_VERBOSE(" inserting hit " << m_printer->print(*meas) << (hitInfo.status == MuPatHit::Outlier ? " Outlier" : ""));
135  double residual{0.}, pull{0.};
137  hit->setResidual(residual,pull);
138  hitList.push_back(std::move(hit));
139  }
140 
141  const Trk::TrackParameters* pars = track.perigeeParameters();
142  const SortByDirectionMuPatHits isLargerCal{*pars};
143  std::stable_sort(hitList.begin(), hitList.end(), isLargerCal);
144 
145  return true;
146  }
147 
148  MuPatHitList MuPatHitTool::merge(const MuPatHitList& hitList1, const MuPatHitList& hitList2) {
149  // copy first list into outList
150  MuPatHitList tmpList{};
151  tmpList.reserve(hitList1.size() + hitList2.size());
152 
153  if (!hitList1.empty()) {
154  const Trk::TrackParameters& pars{hitList1.front()->parameters()};
155  const SortByDirectionMuPatHits isLargerCal{pars};
156  std::merge(hitList1.begin(), hitList1.end(), hitList2.begin(), hitList2.end(),
157  std::back_inserter(tmpList), isLargerCal);
158  } else {
159  return hitList2;
160  }
162  outList.reserve(tmpList.size());
163  std::set<Identifier> used_hits{};
165  std::copy_if(std::make_move_iterator(tmpList.begin()), std::make_move_iterator(tmpList.end()), std::back_inserter(outList),
166  [&used_hits](const MuPatHitPtr& pathit) { return used_hits.insert(pathit->info().id).second; });
167 
168  return outList;
169  }
170 
171  bool MuPatHitTool::extract(const MuPatHitList& hitList, std::vector<const Trk::MeasurementBase*>& measVec, bool usePreciseHits,
172  bool /*getReducedTrack*/) {
173  // make sure the vector is sufficiently large
174  measVec.reserve(hitList.size());
175 
176  // loop over hit list
177  for (const MuPatHitPtr& hit : hitList) {
178  if (hit->info().status != MuPatHit::OnTrack) { continue; }
179  const Trk::MeasurementBase* meas = usePreciseHits ? &hit->preciseMeasurement() : &hit->broadMeasurement();
180  measVec.push_back(meas);
181  }
182  return true;
183  }
184 
185  bool MuPatHitTool::remove(const Identifier& id, MuPatHitList& hitList) {
186  // loop over hit list
187  MuPatHitIt lit = hitList.begin(), lit_end = hitList.end();
188  for (; lit != lit_end; ++lit) {
189  const MuPatHit& hit = **lit;
190  if (hit.info().id == id) {
191  hitList.erase(lit);
192  return true;
193  }
194  }
195  // if we get here the hit was not found
196  return false;
197  }
198 
199  bool MuPatHitTool::remove(const Trk::MeasurementBase& meas, MuPatHitList& hitList) const {
200  // loop over hit list
201  const Identifier meas_id = m_edmHelperSvc->getIdentifier(meas);
202  MuPatHitIt lit = hitList.begin(), lit_end = hitList.end();
203  for (; lit != lit_end; ++lit) {
204  const MuPatHit& hit = **lit;
205  if (m_edmHelperSvc->getIdentifier(hit.preciseMeasurement()) == meas_id ||
206  m_edmHelperSvc->getIdentifier(hit.broadMeasurement()) == meas_id) {
207  hitList.erase(lit);
208  return true;
209  }
210  }
211  // if we get here the hit was not found
212  return false;
213  }
214 
216  if (m_idHelperSvc->isMdt(id))
217  return MuPatHit::MDT;
218  else if (m_idHelperSvc->isTgc(id))
219  return MuPatHit::TGC;
220  else if (m_idHelperSvc->isCsc(id))
221  return MuPatHit::CSC;
222  else if (m_idHelperSvc->isRpc(id))
223  return MuPatHit::RPC;
224  else if (m_idHelperSvc->isMM(id))
225  return MuPatHit::MM;
226  else if (m_idHelperSvc->issTgc(id))
227  return MuPatHit::sTGC;
228  else if (m_idHelperSvc->isMuon(id))
229  return MuPatHit::PREC;
230  return MuPatHit::UnknownType;
231  }
232 
234  MuPatHit::Info hitInfo{};
235  hitInfo.id = m_edmHelperSvc->getIdentifier(meas);
236  // for clusters store layer id instead of channel id
237  hitInfo.measuresPhi = true; // assume that all PseudoMeasurements measure phi!!
238  hitInfo.type = MuPatHit::Pseudo;
239  hitInfo.status = MuPatHit::OnTrack;
240  if (hitInfo.id.is_valid() && m_idHelperSvc->isMuon(hitInfo.id)) {
241  hitInfo.type = getHitType(hitInfo.id);
242  hitInfo.measuresPhi = m_idHelperSvc->measuresPhi(hitInfo.id);
243  hitInfo.isSmall = m_idHelperSvc->isSmallChamber(hitInfo.id);
244  hitInfo.stIdx = m_idHelperSvc->stationIndex(hitInfo.id);
245  hitInfo.isEndcap = m_idHelperSvc->isEndcap(hitInfo.id);
246  if (hitInfo.type != MuPatHit::MDT && hitInfo.type != MuPatHit::MM) hitInfo.id = m_idHelperSvc->layerId(hitInfo.id);
247  }
248  return hitInfo;
249  }
250 
251  std::unique_ptr<const Trk::MeasurementBase> MuPatHitTool::createBroadMeasurement(const Trk::MeasurementBase& meas,
252  const MuPatHit::Info& hitInfo) const {
253  // don't change errors for Pseudo measurements
254  if (hitInfo.type == MuPatHit::MDT) {
255  const MdtDriftCircleOnTrack* mdt = dynamic_cast<const MdtDriftCircleOnTrack*>(&meas);
256  if (!mdt) {
257  ATH_MSG_WARNING(" found hit with a MDT Identifier that is not a MdtDriftCircleOnTrack "
258  << m_idHelperSvc->toString(hitInfo.id));
259  return nullptr;
260  }
261  ATH_MSG_DEBUG(" creating broad MdtDriftCircleOnTrack ");
262 
263  return std::unique_ptr<const Trk::MeasurementBase>(m_mdtRotCreator->updateError(*mdt));
264 
265  } else if (hitInfo.type == MuPatHit::CSC && !hitInfo.measuresPhi) {
266  if (m_cscRotCreator.empty()) {
267  // Configured to not use CSC's
268  return nullptr;
269  }
270  const CscClusterOnTrack* csc = dynamic_cast<const CscClusterOnTrack*>(&meas);
271  if (!csc) {
272  ATH_MSG_WARNING(" found hit with CSC identifier that is not a CscClusterOnTrack " << m_idHelperSvc->toString(hitInfo.id));
273  return nullptr;
274  }
275  ATH_MSG_DEBUG(" creating broad CscClusterOnTrack ");
276 
277  return std::unique_ptr<const Trk::MeasurementBase>(
278  m_cscRotCreator->createRIO_OnTrack(*csc->prepRawData(), csc->globalPosition()));
279  }
280 
281  // don't change errors for CSC phi hits, TGC, RPC and Pseudo measurements
282  return meas.uniqueClone();
283  }
284 
285  bool MuPatHitTool::update(const Trk::Track& track, MuPatHitList& hitList) const {
286  const DataVector<const Trk::MeasurementBase>* measurements = track.measurementsOnTrack();
287  if (!measurements) return false;
288 
289  std::set<Identifier> ids;
290 
293  for (; mit != mit_end; ++mit) {
294  Identifier id = m_edmHelperSvc->getIdentifier(**mit);
295  if (!id.is_valid()) continue;
296 
297  if (!m_idHelperSvc->isMdt(id)) id = m_idHelperSvc->layerId(id);
298 
299  ids.insert(id);
300  }
301 
302  // loop over hit list
303  MuPatHitIt lit = hitList.begin(), lit_end = hitList.end();
304  for (; lit != lit_end; ++lit) {
305  MuPatHit& hit = **lit;
306  if (!ids.count(hit.info().id)) {
307  hit.info().status = MuPatHit::Outlier;
308  continue;
309  }
310  }
311  return true;
312  }
313 
314  std::string MuPatHitTool::print(const MuPatHitList& hitList, bool printPos, bool printDir, bool printMom) const {
315  std::ostringstream sout;
316  DistanceAlongParameters distCal{};
317 
318  // for nicely aligned printout, get max width of Id printout
319  std::vector<std::string> idStrings;
320  std::vector<std::string> dataStrings;
321  idStrings.reserve(hitList.size());
322  unsigned int idWidth = 0;
323  std::string result = "first ";
324  bool isLarger = true;
325  double distance = 0;
326  MuPatHitCit it = hitList.begin();
327  MuPatHitCit it_end = hitList.end();
328  MuPatHitCit itNext = hitList.begin();
329 
330  const Trk::TrackParameters& pars{hitList.front()->parameters()};
331  const SortByDirectionMuPatHits isLargerCal{pars};
332 
333  if (itNext != it_end) ++itNext;
334  for (; it != it_end; ++it, ++itNext) {
335 
336  Identifier id = m_edmHelperSvc->getIdentifier((*it)->measurement());
337  std::string idStr = id.is_valid() ? m_idHelperSvc->toString(id) : "pseudo-measurement";
338  idStrings.push_back(idStr);
339  if (idStr.length() > idWidth) idWidth = idStr.length();
340  const Trk::TrackParameters& pars = (*it)->parameters();
341  std::ostringstream dataOss;
342  if (printPos) {
343  dataOss << "r " << std::fixed << std::setprecision(0) << std::setw(5) << pars.position().perp() << " z " << std::fixed
344  << std::setprecision(0) << std::setw(6) << pars.position().z();
345  }
346  if (printDir) {
347  dataOss << " theta " << std::fixed << std::setprecision(5) << std::setw(7) << pars.momentum().theta() << " phi "
348  << std::fixed << std::setprecision(3) << std::setw(6) << pars.momentum().phi();
349  }
350  if (printMom) {
351  dataOss << " q*p(GeV) " << std::scientific << std::setprecision(3) << std::setw(10)
352  << pars.momentum().mag() * pars.charge() / 1000.;
353  }
354 
355 
356  dataOss << " " << result << " dist " << distance;
357  dataStrings.push_back(dataOss.str());
358  if (itNext != it_end) {
359  isLarger = isLargerCal(*it, *itNext);
360 
361  distance = distCal(*it, *itNext);
362  result = isLarger ? "larger " : "smaller";
363 
364  if (isLarger == isLargerCal(*itNext, *it)) {
365  result = "duplicate";
366  } else if (!isLarger) {
367  result += " sorting problem ";
368  }
369  }
370  }
371 
372  // second loop to print out aligned strings
373  unsigned int n = idStrings.size();
374  for (unsigned int i = 0; i < n; ++i) {
375  sout << " " << std::left << std::setw(idWidth) << idStrings[i] << std::right << " " << dataStrings[i];
376  if (i != n - 1) sout << std::endl;
377  }
378 
379  return sout.str();
380  }
381  bool MuPatHitTool::isSorted(const MuPatHitList& hitList) {
382  MuPatHitCit it = hitList.begin();
383  MuPatHitCit it_end = hitList.end();
384  MuPatHitCit itNext = it;
385  if (itNext != it_end) ++itNext;
386  bool isLarger = true;
387  const Trk::TrackParameters& pars{hitList.front()->parameters()};
388  const SortByDirectionMuPatHits isLargerCal{pars};
389  for (; itNext != it_end; ++it, ++itNext) {
390  isLarger = isLargerCal(*it, *itNext);
391  bool sameSurface = (isLarger == isLargerCal(*it, *itNext)); // same surface
392  if (!isLarger && !sameSurface) return false;
393  if (sameSurface) return false;
394  }
395  return true;
396  }
398  double& residualPull) const {
399  std::optional<Trk::ResidualPull> resPull(
400  m_pullCalculator->residualPull(tsos->measurementOnTrack(), tsos->trackParameters(), type));
401  if (resPull) {
402  residual = resPull->residual().front();
403  residualPull = resPull->pull().front();
404  } else {
405  residual = residualPull = -999;
406  }
407  }
408 } // namespace Muon
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
Trk::TrackStateOnSurface::trackParameters
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
Muon::MuPatHitTool::createBroadMeasurement
std::unique_ptr< const Trk::MeasurementBase > createBroadMeasurement(const Trk::MeasurementBase &preciseMeas, const MuPatHit::Info &hitInfo) const
calculate broad measurement for a give precise measurement
Definition: MuPatHitTool.cxx:251
get_generator_info.result
result
Definition: get_generator_info.py:21
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
TrackParameters.h
MeasurementBase.h
Muon::MuPatHit
Definition: MuPatHit.h:30
Muon::MuPatHitTool::merge
static MuPatHitList merge(const MuPatHitList &hitList1, const MuPatHitList &hitList2)
merge two MuPatHitLists into a new one
Definition: MuPatHitTool.cxx:148
Muon::MuonClusterOnTrack::globalPosition
virtual const Amg::Vector3D & globalPosition() const override
Returns global position.
Definition: MuonClusterOnTrack.cxx:93
Muon::MuPatHitTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuPatHitTool.h:140
Muon::MuPatHit::info
const Info & info() const
returns a reference to the hit info
Definition: MuPatHit.cxx:51
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Muon::MuPatHit::TGC
@ TGC
Definition: MuPatHit.h:32
MuonEDMPrinterTool.h
Muon::MuPatHitTool::update
bool update(const Trk::Track &track, MuPatHitList &hitList) const
update hit list for a give track
Definition: MuPatHitTool.cxx:285
ClusterSeg::residual
@ residual
Definition: ClusterNtuple.h:20
Muon::MuPatHitTool::m_cscRotCreator
ToolHandle< IMuonClusterOnTrackCreator > m_cscRotCreator
Definition: MuPatHitTool.h:123
Trk::ResidualPull::Unbiased
@ Unbiased
RP with track state that has measurement not included.
Definition: ResidualPull.h:57
skel.it
it
Definition: skel.GENtoEVGEN.py:423
Muon::MuPatHit::Pseudo
@ Pseudo
Definition: MuPatHit.h:32
CompetingMuonClustersOnTrack.h
Trk::TrackStateOnSurface::measurementOnTrack
const MeasurementBase * measurementOnTrack() const
returns MeasurementBase const overload
Muon::MuPatHitTool::m_magFieldProperties
Trk::MagneticFieldProperties m_magFieldProperties
magnetic field properties
Definition: MuPatHitTool.h:152
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
MdtDriftCircleOnTrack.h
MuPatHitTool.h
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
Muon::MuPatHitTool::m_mdtRotCreator
ToolHandle< IMdtDriftCircleOnTrackCreator > m_mdtRotCreator
Definition: MuPatHitTool.h:118
Muon::MuPatHitTool::m_propagator
ToolHandle< Trk::IPropagator > m_propagator
Definition: MuPatHitTool.h:113
MuonTrackMakerStlTools.h
Muon::MuPatHitTool::getHitType
MuPatHit::Type getHitType(const Identifier &id) const
get hit type
Definition: MuPatHitTool.cxx:215
Muon::MuPatHit::CSC
@ CSC
Definition: MuPatHit.h:32
Muon::MuPatHitTool::print
std::string print(const MuPatHitList &hitList, bool printPos=true, bool printDir=true, bool printMom=true) const
print the list of hits, with optional parts of the printout (position,direction,momentum)
Definition: MuPatHitTool.cxx:314
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
Track.h
MagneticFieldProperties.h
Muon::MuPatHit::PREC
@ PREC
Definition: MuPatHit.h:32
RpcClusterOnTrack.h
Muon::MuPatHitTool::calculateResiduals
void calculateResiduals(const Trk::TrackStateOnSurface *tsos, Trk::ResidualPull::ResidualType type, double &residual, double &residualPull) const
calculate the residuals
Definition: MuPatHitTool.cxx:397
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
Muon::MuPatHitTool::m_pullCalculator
ToolHandle< Trk::IResidualPullCalculator > m_pullCalculator
Definition: MuPatHitTool.h:129
Muon::MuPatHit::Info
Definition: MuPatHit.h:36
Trk::TrackStateOnSurface::Hole
@ Hole
A hole on the track - this is defined in the following way.
Definition: TrackStateOnSurface.h:128
lumiFormat.i
int i
Definition: lumiFormat.py:92
Muon::MuPatHit::RPC
@ RPC
Definition: MuPatHit.h:32
Muon::MuPatHit::broadMeasurement
const Trk::MeasurementBase & broadMeasurement() const
returns broad measurement
Definition: MuPatHit.cxx:50
Muon::MuPatHitCit
MuPatHitList::const_iterator MuPatHitCit
Definition: MuPatHit.h:27
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
Muon::MuPatHit::OnTrack
@ OnTrack
Definition: MuPatHit.h:33
beamspotman.n
n
Definition: beamspotman.py:731
SortMuPatHits.h
Trk::MeasurementBase::uniqueClone
std::unique_ptr< MeasurementBase > uniqueClone() const
NVI Clone giving up unique pointer.
Definition: MeasurementBase.h:77
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
Muon::SortByDirectionMuPatHits
Default for both collision and cosmic parameter sorting.
Definition: SortMuPatHits.h:97
Trk::Segment::containedMeasurements
const std::vector< const Trk::MeasurementBase * > & containedMeasurements() const
returns the vector of Trk::MeasurementBase objects
Definition: TrkEvent/TrkSegment/TrkSegment/Segment.h:166
Muon::MuPatHit::Info::status
Status status
Flag whether the hit is on Tack or not.
Definition: MuPatHit.h:46
CscClusterOnTrack.h
PseudoMeasurementOnTrack.h
Muon::MuPatHit::UnknownType
@ UnknownType
Definition: MuPatHit.h:32
AnalysisUtils::copy_if
Out copy_if(In first, const In &last, Out res, const Pred &p)
Definition: IFilterUtils.h:30
python.StandardJetMods.pull
pull
Definition: StandardJetMods.py:264
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Muon::MuPatHit::MDT
@ MDT
Definition: MuPatHit.h:32
Trk::ParametersBase
Definition: ParametersBase.h:55
Muon::MuPatHit::MM
@ MM
Definition: MuPatHit.h:32
DataVector< const Trk::MeasurementBase >
Muon::MuPatHitPtr
std::shared_ptr< MuPatHit > MuPatHitPtr
Definition: MuPatHit.h:25
Muon::MuPatHitTool::initialize
StatusCode initialize() override
initialize method, method taken from bass-class AlgTool
Definition: MuPatHitTool.cxx:32
Muon::MuPatHitIt
MuPatHitList::iterator MuPatHitIt
Definition: MuPatHit.h:28
Trk::MeasurementBase
Definition: MeasurementBase.h:58
Muon::MuPatHitTool::m_printer
PublicToolHandle< MuonEDMPrinterTool > m_printer
Definition: MuPatHitTool.h:134
IMuonEDMHelperSvc.h
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
Trk::MeasurementBase::associatedSurface
virtual const Surface & associatedSurface() const =0
Interface method to get the associated Surface.
python.subdetectors.mmg.ids
ids
Definition: mmg.py:8
Muon::MuPatHit::Type
Type
Definition: MuPatHit.h:32
Muon::MdtDriftCircleOnTrack
This class represents the corrected MDT measurements, where the corrections include the effects of wi...
Definition: MdtDriftCircleOnTrack.h:37
charge
double charge(const T &p)
Definition: AtlasPID.h:494
Muon::MuPatHitList
std::vector< MuPatHitPtr > MuPatHitList
Definition: MuPatHit.h:26
Muon::CscClusterOnTrack::prepRawData
virtual const CscPrepData * prepRawData() const override final
Returns the CscPrepData - is a CscPrepData in this scope.
Definition: CscClusterOnTrack.h:154
Muon::MuPatHitTool::isSorted
static bool isSorted(const MuPatHitList &hitList)
check whether the list is correctly sorted
Definition: MuPatHitTool.cxx:381
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
Muon::MuPatHitTool::m_edmHelperSvc
ServiceHandle< IMuonEDMHelperSvc > m_edmHelperSvc
Definition: MuPatHitTool.h:145
Muon::MuPatHit::Info::type
Type type
Measurement type as defined above.
Definition: MuPatHit.h:42
Muon::CscClusterOnTrack
Class to represent the calibrated clusters created from CSC strips.
Definition: CscClusterOnTrack.h:47
Muon::MuPatHit::Outlier
@ Outlier
Definition: MuPatHit.h:33
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
zebraShift.outList
list outList
Definition: zebraShift.py:103
Muon::MuPatHitTool::getHitInfo
MuPatHit::Info getHitInfo(const Trk::MeasurementBase &meas) const
get hit info
Definition: MuPatHitTool.cxx:233
Muon::MuPatHit::preciseMeasurement
const Trk::MeasurementBase & preciseMeasurement() const
returns precise measurement
Definition: MuPatHit.cxx:49
python.utility.LHE.merge
def merge(input_file_pattern, output_file)
Merge many input LHE files into a single output file.
Definition: LHE.py:17
Muon::MuPatHit::Info::id
Identifier id
Identifier of the measurement. Is invalid in cases of pseudo measurements.
Definition: MuPatHit.h:39
Trk::TrackStateOnSurface::Scatterer
@ Scatterer
This represents a scattering point on the track, and so will contain TrackParameters and MaterialEffe...
Definition: TrackStateOnSurface.h:113
Muon::MuPatHitTool::remove
static bool remove(const Identifier &id, MuPatHitList &hitList)
remove hit with a give Identifier
Definition: MuPatHitTool.cxx:185
Muon::MuPatHitTool::create
bool create(const EventContext &ctx, const MuonSegment &seg, MuPatHitList &hitList) const
create a MCTBList from a MuonSegment
Definition: MuPatHitTool.cxx:44
MuonSegment.h
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Muon::MuonSegment
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:45
AthAlgTool
Definition: AthAlgTool.h:26
RpcPrepData.h
Muon::DistanceAlongParameters
Definition: SortMuPatHits.h:16
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
Muon::MuPatHitTool::MuPatHitTool
MuPatHitTool(const std::string &, const std::string &, const IInterface *)
default AlgTool constructor
Definition: MuPatHitTool.cxx:26
Trk::ResidualPull::ResidualType
ResidualType
Definition: ResidualPull.h:53
TrackStateOnSurface.h
Muon::MuPatHit::sTGC
@ sTGC
Definition: MuPatHit.h:32
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
Muon::MuPatHitTool::~MuPatHitTool
~MuPatHitTool()
destructor
Muon::MuPatHitTool::extract
static bool extract(const MuPatHitList &hitList, std::vector< const Trk::MeasurementBase * > &measVec, bool usePreciseHits=true, bool getReducedTrack=false)
merge two MuPatHitLists into a new one.
Definition: MuPatHitTool.cxx:171
Muon::MuPatHit::Info::measuresPhi
bool measuresPhi
Does the hit constrain phi?
Definition: MuPatHit.h:56