ATLAS Offline Software
MuonEDMPrinterTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include <algorithm>
8 #include <iostream>
9 
28 #include "TrkTrack/Track.h"
32 namespace Muon {
33 
34 
35 MuonEDMPrinterTool::MuonEDMPrinterTool(const std::string& ty, const std::string& na, const IInterface* pa)
36  : AthAlgTool(ty, na, pa)
37 {
38  declareInterface<MuonEDMPrinterTool>(this);
39 }
40 
43 {
44  ATH_CHECK(m_idHelperSvc.retrieve());
45  ATH_CHECK(m_edmHelperSvc.retrieve());
46  ATH_CHECK(m_pullCalculator.retrieve());
47 
49  ATH_CHECK(m_mdtKey.initialize());
50  ATH_CHECK(m_rpcKey.initialize());
51  ATH_CHECK(m_tgcKey.initialize());
52 
53  return StatusCode::SUCCESS;
54 }
55 
56 std::string
58 {
59 
60  std::ostringstream sout;
61  // create detailed track summary
62  typedef Trk::MuonTrackSummary::ChamberHitSummary ChamberHitSummary;
63 
64  sout << "Hits: eta " << summary.netaHits() << " phi " << summary.nphiHits() << " holes " << summary.nholes()
65  << " outliers " << summary.noutliers() << " pseudo " << summary.npseudoMeasurements() << " scatterers "
66  << summary.nscatterers() << " close Hits " << summary.ncloseHits() << std::endl;
67 
68 
69  const std::vector<ChamberHitSummary>& chamberHitSummary = summary.chamberHitSummary();
70  sout.setf(std::ios::left);
71  std::vector<ChamberHitSummary>::const_iterator chit = chamberHitSummary.begin();
72  std::vector<ChamberHitSummary>::const_iterator chit_end = chamberHitSummary.end();
73  std::vector<ChamberHitSummary>::const_iterator chit_last = chit_end - 1;
74  for (; chit != chit_end; ++chit) {
75  const Identifier& chId = chit->chamberId();
76  bool isMdt = m_idHelperSvc->isMdt(chId);
77 
78  sout << " " << std::setw(35) << m_idHelperSvc->toStringChamber(chId);
79 
80  const ChamberHitSummary::Projection& first = isMdt ? chit->mdtMl1() : chit->etaProjection();
81  const ChamberHitSummary::Projection& second = isMdt ? chit->mdtMl2() : chit->phiProjection();
82 
83 
84  std::string firstString = isMdt ? "ml1 " : "eta ";
85  std::string secondString = isMdt ? "ml2 " : "phi ";
86 
87  sout << " Hits: " << firstString << std::setw(3) << first.nhits << " " << secondString << std::setw(3)
88  << second.nhits;
89 
90  if (first.nholes || second.nholes) {
91  sout << " Holes: ";
92  if (first.nholes != 0) sout << firstString << std::setw(3) << first.nholes;
93  if (second.nholes != 0) {
94  if (first.nholes != 0) sout << " ";
95  sout << secondString << std::setw(3) << second.nholes;
96  }
97  }
98  if (first.noutliers || second.noutliers) {
99  sout << " Outliers: ";
100  if (first.noutliers != 0) sout << firstString << std::setw(3) << first.noutliers << " ";
101  if (second.noutliers != 0) {
102  if (first.noutliers != 0) sout << " ";
103  sout << secondString << std::setw(3) << second.noutliers;
104  }
105  }
106 
107  if (first.ndeltas || second.ndeltas) {
108  sout << " Deltas: ";
109  if (first.ndeltas != 0) sout << firstString << std::setw(3) << first.ndeltas << " ";
110  if (second.ndeltas != 0) {
111  if (first.ndeltas != 0) sout << " ";
112  sout << secondString << std::setw(3) << second.ndeltas;
113  }
114  }
115 
116  if (first.ncloseHits || second.ncloseHits) {
117  sout << " Close Hits: ";
118  if (first.ncloseHits != 0) sout << firstString << std::setw(3) << first.ncloseHits << " ";
119  if (second.ncloseHits != 0) {
120  if (first.ncloseHits != 0) sout << " ";
121  sout << secondString << std::setw(3) << second.ncloseHits;
122  }
123  }
124 
125  if (chit != chit_last) sout << std::endl;
126  }
127 
128  return sout.str();
129 }
130 
131 
132 std::string
134 {
135 
136  const Trk::MuonTrackSummary* muonSummary = nullptr;
137 
138  // check if the track already has a MuonTrackSummary, if not calculate it using the helper
139  const Trk::TrackSummary* summary = track.trackSummary();
140  if (summary) muonSummary = summary->muonTrackSummary();
141  if (!muonSummary) {
142  ATH_MSG_WARNING("No muon summary is present");
143  return "";
144  }
145 
146  return print(*muonSummary);
147 }
148 
149 
150 std::string
152 {
153  std::ostringstream sout;
154  const Trk::TrackStates* states = track.trackStateOnSurfaces();
155  if (!states) return "";
159  Trk::TrackStates::const_iterator it2_end = states->end();
160  // Build map of AEOTs and the measurements they affect
161  std::multimap<const Trk::MeasurementBase*, const Trk::AlignmentEffectsOnTrack*> measAndTheirAlignmentEffects;
162  const Trk::MeasurementBase* m = nullptr;
163  const Trk::AlignmentEffectsOnTrack* aeot = nullptr;
164  for (; it != it_end; ++it) {
165  aeot = (*it)->alignmentEffectsOnTrack();
166  if (aeot) {
167  // Now get the list of identifiers which this AEOT impacts.
168  const std::vector<Identifier>& identifiers = aeot->vectorOfAffectedTSOS();
169  it2 = states->begin();
170  it2_end = states->end();
171  for (; it2 != it2_end; ++it2) {
172  m = (*it2)->measurementOnTrack();
173  if (m) {
174  Identifier id = m_edmHelperSvc->getIdentifier(*m);
175  if ((id.is_valid() && (std::find(identifiers.begin(), identifiers.end(), id) != identifiers.end()))
176  || (aeot->effectsLastFromNowOn() && it2 > it))
177  {
178  // Either this measurement is explicitly listed, OR it is in a TSOS after an AEOT whose effects
179  // last from now on.
180  measAndTheirAlignmentEffects.insert(
181  std::pair<const Trk::MeasurementBase*, const Trk::AlignmentEffectsOnTrack*>(m, aeot));
182  }
183  }
184  }
185  }
186  }
187  // std::cout << " measAndTheirAlignmentEffects " << measAndTheirAlignmentEffects.size() << std::endl;
188 
189  // Reset
190  it = states->begin();
191  it_end = states->end();
192  // first loop to get width of Id's for nice alignment
193  std::vector<std::string> idStrings;
194  std::vector<std::string> dataStrings;
195  unsigned int idWidth = 0;
196  for (; it != it_end; ++it) {
197  m = (*it)->measurementOnTrack();
198  if (m) {
199  // Identifier part
200  std::string idStr = printId(*m);
201  idStrings.push_back(idStr);
202  if (idStr.length() > idWidth) idWidth = idStr.length();
203  // Data part
204  const Trk::TrackParameters* trackParameters = (*it)->trackParameters();
205  std::string dataStr = printData(*m);
206  if (trackParameters) {
208  measAndTheirAlignmentEffects.begin();
209  itMap = measAndTheirAlignmentEffects.find(m);
210  if (itMap != measAndTheirAlignmentEffects.end()) {
211  std::vector<const Trk::AlignmentEffectsOnTrack*> aeotos;
212  aeotos.push_back(itMap->second);
213  ++itMap;
214  if (itMap != measAndTheirAlignmentEffects.end() && itMap->first == m)
215  aeotos.push_back(itMap->second);
216  std::optional<Trk::ResidualPull> resPull{m_pullCalculator->residualPull(
217  m, trackParameters, Trk::ResidualPull::Unbiased, Trk::TrackState::unidentified, aeotos)};
218  if (resPull) dataStr += print(*resPull);
219  if (resPull) dataStr += " (AEOT)";
220  } else {
221  std::optional<Trk::ResidualPull> resPull{
222  m_pullCalculator->residualPull(m, trackParameters, Trk::ResidualPull::Unbiased)};
223  if (resPull) dataStr += print(*resPull);
224  }
225  }
226  if ((*it)->type(Trk::TrackStateOnSurface::Outlier)) {
227  dataStr += " (Outlier)";
228  } else if ((*it)->type(Trk::TrackStateOnSurface::Hole)) {
229  dataStr += " (Hole)";
230  }
231  dataStrings.push_back(dataStr);
232  }
233  aeot = (*it)->alignmentEffectsOnTrack();
234  if (aeot) {
235  std::string idStr = " AEOT ";
236  idStrings.push_back(idStr);
237  std::ostringstream souta;
238  souta << std::setprecision(3) << " deltaTranslation (mm) " << aeot->deltaTranslation() << " error "
239  << aeot->sigmaDeltaTranslation() << " deltaAngle (mrad) " << 1000 * aeot->deltaAngle() << " error "
240  << 1000 * aeot->sigmaDeltaAngle();
241  dataStrings.push_back(souta.str());
242  }
243  }
244 
245  // second loop to print out aligned strings
246  unsigned int n = idStrings.size();
247  for (unsigned int i = 0; i < n; ++i) {
248  sout << std::left << std::setw(idWidth) << idStrings[i] << std::right << " " << dataStrings[i];
249  if (i != n - 1) sout << std::endl;
250  }
251 
252  return sout.str();
253 }
254 
255 
256 std::string
258 {
259  if (track.info().patternRecoInfo(Trk::TrackInfo::STACO)) return "STACO";
260  if (track.info().patternRecoInfo(Trk::TrackInfo::StacoLowPt)) return "StacoLowPt";
261  if (track.info().patternRecoInfo(Trk::TrackInfo::Muonboy)) return "Muonboy";
262  if (track.info().patternRecoInfo(Trk::TrackInfo::MuTag)) return "MuTag";
263  if (track.info().patternRecoInfo(Trk::TrackInfo::MuidComb)
264  || track.info().patternRecoInfo(Trk::TrackInfo::MuidCombined))
265  return "MuidCombined";
266  if (track.info().patternRecoInfo(Trk::TrackInfo::MuidStandAlone)) return "MuidStandAlone";
267  if (track.info().patternRecoInfo(Trk::TrackInfo::Moore)) return "Moore";
268  if (track.info().patternRecoInfo(Trk::TrackInfo::MuGirl)) return "MuGirl";
269  if (track.info().patternRecoInfo(Trk::TrackInfo::MuGirlUnrefitted)) return "MuGirlUnrefitted";
270  if (track.info().patternRecoInfo(Trk::TrackInfo::MuidVertexAssociator)) return "MuidVertexAssociator";
271  if (track.info().patternRecoInfo(Trk::TrackInfo::MuGirlLowBeta)) return "MuGirlLowBeta";
272  return "Unknown";
273 }
274 
275 std::string
277 {
278 
279  std::ostringstream sout;
280 
281  sout << printPatRec(track);
282 
283  const Trk::FitQuality* fq = track.fitQuality();
284  if (fq) {
285  sout << std::setprecision(4) << " : chi2 " << fq->chiSquared() << " ndof " << fq->numberDoF();
286  } else {
287  sout << " no fit Quality ";
288  }
289  const Trk::Perigee* pp = track.perigeeParameters();
290  if (pp) {
291  sout << " " << print(*pp);
292  } else {
293  sout << " no perigee ";
294  }
295  sout <<std::endl;
296  sout<<"----- Track states -------"<<std::endl;
297  unsigned int n{1};
298  for (const Trk::TrackStateOnSurface* tsos : *track.trackStateOnSurfaces()) {
299  if (tsos->measurementOnTrack()) sout<<" **** "<<std::setw(3)<<n<<" Measurement: "<<print(*tsos->measurementOnTrack())<<std::endl;
300  if (tsos->materialEffectsOnTrack()) sout<<" **** "<<std::setw(3)<<n<<" Material: "<<print(*tsos->materialEffectsOnTrack())<<std::endl;
301  if (tsos->alignmentEffectsOnTrack()) sout<<" **** "<<std::setw(3)<<n<<" AEOT: "<<print(*tsos->alignmentEffectsOnTrack())<<std::endl;
302  if (tsos->trackParameters()) sout<<" **** "<<std::setw(3)<<n<<" Parameters: "<<print(*tsos->trackParameters())<<std::endl;
303  ++n;
304  }
305  sout<<"-----------------------------"<<std::endl;
306 
307  return sout.str();
308 }
309 
310 
311 std::string
313 {
314 
315  std::ostringstream sout;
316 
317  // get first none-trigger id
318  Identifier chid = m_edmHelperSvc->chamberId(segment);
319  int nphi = 0;
320  int ntrigEta = 0;
321  int neta = 0;
322 
323  const MuonGM::MdtReadoutElement* mdtDetEl = nullptr;
324  Identifier shortestTubeId;
325  double shortestTubeLen = 1e9;
326 
327  std::vector<const Trk::MeasurementBase*>::const_iterator hit = segment.containedMeasurements().begin();
328  std::vector<const Trk::MeasurementBase*>::const_iterator hit_end = segment.containedMeasurements().end();
329  for (; hit != hit_end; ++hit) {
330  Identifier id;
331  const Trk::RIO_OnTrack* rot = dynamic_cast<const Trk::RIO_OnTrack*>(*hit);
332  if (rot)
333  id = rot->identify();
334  else {
335  const CompetingMuonClustersOnTrack* crot = dynamic_cast<const CompetingMuonClustersOnTrack*>(*hit);
336  if (crot) id = crot->containedROTs().front()->identify();
337  }
338  if (!id.is_valid()) continue;
339  bool measuresPhi = m_idHelperSvc->measuresPhi(id);
340  bool isTrigger = m_idHelperSvc->isTrigger(id);
341  if (measuresPhi)
342  ++nphi;
343  else if (!isTrigger)
344  ++neta;
345 
346  if (!isTrigger) {
347  const MdtDriftCircleOnTrack* mdt = dynamic_cast<const MdtDriftCircleOnTrack*>(rot);
348  if (mdt && mdt->prepRawData()) {
349  double tubelen = 0.5 * mdt->prepRawData()->detectorElement()->tubeLength(id);
350  if (tubelen < shortestTubeLen) {
351  shortestTubeId = id;
352  shortestTubeLen = tubelen;
353  mdtDetEl = mdt->prepRawData()->detectorElement();
354  }
355  }
356  } else {
357  if (!measuresPhi) ++ntrigEta;
358  }
359  }
360 
361  sout << m_idHelperSvc->toStringChamber(chid);
362 
363  const Trk::FitQuality* fq = segment.fitQuality();
364  if (fq) {
365  sout << std::setprecision(2) << " chi2 " << std::setw(7) << fq->chiSquared();
366  } else {
367  sout << " no fit Quality ";
368  }
369 
370  sout << " neta " << std::setw(2) << neta << " nphi " << std::setw(2) << nphi << " nTrigEta " << std::setw(2)
371  << ntrigEta;
372 
373  const MuonSegmentQuality* q = dynamic_cast<const MuonSegmentQuality*>(fq);
374  if (q) sout << std::setw(2) << " nholes " << q->numberOfHoles();
375 
376 
377  sout << " theta " << std::fixed << std::setprecision(5) << std::setw(7) << segment.globalDirection().theta()
378  << " phi " << std::fixed << std::setprecision(3) << std::setw(6) << segment.globalDirection().phi();
379 
380  if (segment.hasFittedT0())
381  sout << " T0 " << std::fixed << std::setprecision(2) << std::setw(5) << segment.time() << " err "
382  << std::setw(5) << segment.errorTime();
383 
384  if (mdtDetEl) {
385  double posAlongTube = std::abs((mdtDetEl->globalToLocalTransf(shortestTubeId)*segment.globalPosition()).z());
386  double distFromEdge = posAlongTube - shortestTubeLen;
387  if (distFromEdge < -100.)
388  sout << " inside chamber";
389  else if (distFromEdge < -1.)
390  sout << " close to edge";
391  else if (distFromEdge < 0.0001)
392  sout << " on edge";
393  else
394  sout << " outside chamber";
395  }
396  return sout.str();
397 }
398 
399 std::string
401 {
402 
403  std::ostringstream sout;
404 
405  Identifier id = prd.identify();
406  sout << m_idHelperSvc->toString(id) << " ";
407 
408  const Amg::Vector3D* pos = nullptr;
409  const MuonCluster* cl = dynamic_cast<const MuonCluster*>(&prd);
410  if (cl)
411  pos = &cl->globalPosition();
412  else {
413  const MdtPrepData* mdt = dynamic_cast<const MdtPrepData*>(&prd);
414  if (mdt)
415  pos = &mdt->detectorElement()->surface(id).center();
416  else {
417  const CscStripPrepData* strip = dynamic_cast<const CscStripPrepData*>(&prd);
418  if (strip) pos = &strip->globalPosition();
419  }
420  }
421  if (!pos)
422  sout << " unknown type of muon prepdata " << std::endl;
423  else {
424  double h_r = pos->perp();
425  double h_z = pos->z();
426  double h_phi = pos->phi();
427  double h_theta = pos->theta();
428  double error = std::sqrt(prd.localCovariance()(0, 0));
429 
430  // add time for RPC
431  double rpcTime = 0.0;
432  const RpcPrepData* rpc = dynamic_cast<const RpcPrepData*>(&prd);
433  if (rpc) rpcTime = rpc->time();
434 
435  sout << "r " << std::fixed << std::setprecision(0) << std::setw(5) << h_r << " z " << std::fixed
436  << std::setprecision(0) << std::setw(5) << h_z << " theta " << std::fixed << std::setprecision(3)
437  << std::setw(4) << h_theta << " phi " << std::fixed << std::setprecision(3) << std::setw(4) << h_phi
438  << " error " << std::fixed << std::setprecision(2) << std::setw(5) << error;
439  if (rpc) sout << " time " << std::fixed << std::setprecision(2) << std::setw(5) << rpcTime;
440  }
441  return sout.str();
442 }
443 
444 std::string
446 {
447  return printId(measurement) + " " + printData(measurement);
448 }
449 
450 
451 std::string
452 MuonEDMPrinterTool::print(const std::vector<const Trk::MeasurementBase*>& measurements) const
453 {
454 
455  std::ostringstream sout;
456 
457  // first loop to get width of Id's for nice alignment
458  std::vector<std::string> idStrings;
459  std::vector<std::string> dataStrings;
460  unsigned int idWidth = 0;
461 
462  std::vector<const Trk::MeasurementBase*>::const_iterator hit = measurements.begin();
463  std::vector<const Trk::MeasurementBase*>::const_iterator hit_end = measurements.end();
464  // std::vector< const Trk::MeasurementBase* >::const_iterator hit_last = hit_end;
465  for (; hit != hit_end; ++hit) {
466  if (!*hit) {
467  sout << " WARNING, zero pointer detected in MeasurementBase vector!!! " << std::endl;
468  continue;
469  }
470  // Identifier part
471  std::string idStr = printId(**hit);
472  idStrings.push_back(idStr);
473  if (idStr.length() > idWidth) idWidth = idStr.length();
474  // Data part
475  std::string dataStr = printData(**hit);
476  dataStrings.push_back(dataStr);
477  }
478 
479 
480  // second loop to print out aligned strings
481  unsigned int n = idStrings.size();
482  for (unsigned int i = 0; i < n; ++i) {
483  sout << std::left << std::setw(idWidth) << idStrings[i] << std::right << " " << dataStrings[i];
484  if (i != n - 1) sout << std::endl;
485  }
486 
487  return sout.str();
488 }
489 
490 std::string
491 MuonEDMPrinterTool::print(const std::vector<const MuonSegment*>& segs) const
492 {
493 
494  std::ostringstream sout;
495 
496  std::vector<const MuonSegment*>::const_iterator it = segs.begin();
497  std::vector<const MuonSegment*>::const_iterator it_end = segs.end();
498  std::vector<const MuonSegment*>::const_iterator it_last = it_end;
499  --it_last;
500  for (; it != it_end; ++it) {
501  if (!*it) {
502  sout << " WARNING, zero pointer detected in MuonSegment vector!!! " << std::endl;
503  continue;
504  }
505  sout << print(**it);
506  if (it != it_last) sout << std::endl;
507  }
508 
509  return sout.str();
510 }
511 
512 std::string
513 MuonEDMPrinterTool::print(std::vector<std::unique_ptr<MuonSegment> >& segs) const
514 {
515 
516  std::ostringstream sout;
517 
518  std::vector<std::unique_ptr<MuonSegment> >::iterator it = segs.begin();
519  std::vector<std::unique_ptr<MuonSegment> >::iterator it_end = segs.end();
520  std::vector<std::unique_ptr<MuonSegment> >::iterator it_last = it_end;
521  --it_last;
522  for (; it != it_end; ++it) {
523  if (!*it) {
524  sout << " WARNING, zero pointer detected in MuonSegment vector!!! " << std::endl;
525  continue;
526  }
527  sout << print(**it);
528  if (it != it_last) sout << std::endl;
529  }
530 
531  return sout.str();
532 }
533 
534 std::string
536 {
537  std::ostringstream sout;
538 
539  sout << "MuonSegmentCombinationCollection with combis " << combiCol.size() << std::endl;
543  --it_last;
544  for (; it != it_end; ++it) {
545  if (!*it) {
546  sout << " WARNING, zero pointer detected in MuonSegmentCombinationCollection!!! " << std::endl;
547  continue;
548  }
549  sout << print(**it);
550  if (it != it_last) sout << std::endl;
551  }
552  return sout.str();
553 }
554 
555 std::string
557 {
558  std::ostringstream sout;
559 
560  unsigned int nstations = combi.numberOfStations();
561  sout << "SegmentCombination with stations " << nstations << std::endl;
562 
563  // loop over chambers in combi
564  for (unsigned int i = 0; i < nstations; ++i) {
565 
566  // loop over segments in station
568 
569  // check if not empty
570  if (!stationSegs || stationSegs->empty()) continue;
571 
572  // get chamber identifier, chamber index and station index
573  // Identifier chid = m_edmHelperSvc->chamberId( *stationSegs->front() );
574  sout << print(*stationSegs);
575  if (i != nstations - 1) sout << std::endl;
576  }
577 
578  return sout.str();
579 }
580 
581 std::string
583 {
584  std::ostringstream sout;
585 
586  unsigned int nhits = pattern.numberOfContainedPrds();
587  sout << "MuonPattern with " << nhits << " hits" << std::setprecision(5) << " theta "
588  << pattern.globalDirection().theta() << " phi " << pattern.globalDirection().phi() << std::setprecision(1)
589  << " r " << std::setw(5) << (int)pattern.globalPosition().perp() << " z " << std::setw(5)
590  << (int)pattern.globalPosition().z() << std::endl;
591  for (unsigned int i = 0; i < nhits; ++i) {
592  const Trk::PrepRawData* prd = pattern.prd(i);
593  if (!prd) {
594  sout << " ERROR found zero pointer on MuonPattern " << std::endl;
595  continue;
596  }
597  sout << " " << print(*prd);
598  if (i < nhits - 1) sout << std::endl;
599  }
600  return sout.str();
601 }
602 
603 std::string
605 {
606  std::ostringstream sout;
607 
608  sout << "MuonPatternCollection with " << patCol.size() << " patterns " << std::endl;
610  MuonPatternCollection::const_iterator it_end = patCol.end();
611  MuonPatternCollection::const_iterator it_last = it_end;
612  --it_last;
613  for (; it != it_end; ++it) {
614  if (!*it) {
615  sout << " WARNING, zero pointer detected in MuonPatternCollection!!! " << std::endl;
616  continue;
617  }
618  sout << " " << print(**it);
619  if (it != it_last) sout << std::endl;
620  }
621  return sout.str();
622 }
623 
624 std::string
626 {
627  std::ostringstream sout;
628 
629  sout << "MuonPrdPatternCollection with " << patCol.size() << " patterns " << std::endl;
633  --it_last;
634  for (; it != it_end; ++it) {
635  if (!*it) {
636  sout << " WARNING, zero pointer detected in MuonPatternCollection!!! " << std::endl;
637  continue;
638  }
639  sout << " " << print(**it);
640  if (it != it_last) sout << std::endl;
641  }
642  return sout.str();
643 }
644 
645 std::string
647 {
648  std::ostringstream sout;
649 
650  sout << "MuonPatternCombinationCollection with combis " << combiCol.size() << std::endl;
654  --it_last;
655  for (; it != it_end; ++it) {
656  if (!*it) {
657  sout << " WARNING, zero pointer detected in MuonPatternCombinationCollection!!! " << std::endl;
658  continue;
659  }
660  sout << print(**it);
661  if (it != it_last) sout << std::endl;
662  }
663  return sout.str();
664 }
665 
666 std::string
668 {
669  std::ostringstream sout;
670 
671  unsigned int nchambers = combi.chamberData().size();
672  sout << "MuonPatternCombination with " << nchambers << " chambers ";
673  const Trk::TrackParameters* pars = combi.trackParameter();
674  if (pars) {
675  sout << " " << print(*pars);
676  } else {
677  sout << " -> combi has no parameters ";
678  }
679  if (!combi.chamberData().empty()) sout << std::endl;
680  std::vector<MuonPatternChamberIntersect>::const_iterator chit = combi.chamberData().begin();
681  std::vector<MuonPatternChamberIntersect>::const_iterator chit_end = combi.chamberData().end();
682  std::vector<MuonPatternChamberIntersect>::const_iterator chit_last = chit_end;
683  --chit_last;
684  for (; chit != chit_end; ++chit) {
685  const MuonPatternChamberIntersect& chamberIntersect = *chit;
686  sout << print(chamberIntersect);
687  if (chit != chit_last) sout << std::endl;
688  }
689  return sout.str();
690 }
691 
692 std::string
694 {
695  std::ostringstream sout;
696 
697  std::string chIdString("Unknown id");
698  double chTheta(-99.);
699  double chPhi(-99.);
700  // if the intersect is not empty use the Identifier of first hit as chamber ID
701  const Trk::PrepRawData* firstPrd = nullptr;
702  if (!intersect.prepRawDataVec().empty() && intersect.prepRawDataVec().front()) {
703  firstPrd = intersect.prepRawDataVec().front();
704  chIdString = m_idHelperSvc->toStringChamber(firstPrd->identify());
705  chTheta = firstPrd->detectorElement()->center().theta();
706  chPhi = firstPrd->detectorElement()->center().phi();
707  } else {
708  return chIdString;
709  }
710  Identifier chId = m_idHelperSvc->chamberId(firstPrd->identify());
711  int neta = 0;
712  int nphi = 0;
713  bool isMdt = false;
714 
715  unsigned int nchannelsEta = 0;
716  unsigned int nchannelsPhi = 0;
717  std::set<const Trk::TrkDetElementBase*> detEls;
718  std::vector<const Trk::PrepRawData*>::const_iterator hit = intersect.prepRawDataVec().begin();
719  std::vector<const Trk::PrepRawData*>::const_iterator hit_end = intersect.prepRawDataVec().end();
720  for (; hit != hit_end; ++hit) {
721  const Trk::PrepRawData* prd = *hit;
722  if (!prd) {
723  sout << " ERROR found zero pointer on MuonPatternChamberIntersect " << std::endl;
724  continue;
725  }
726  const Identifier& id = prd->identify();
727  if (m_idHelperSvc->measuresPhi(id))
728  ++nphi;
729  else
730  ++neta;
731  if (!isMdt && m_idHelperSvc->isMdt(id)) isMdt = true;
732 
733  if (!detEls.count(prd->detectorElement())) {
734  detEls.insert(prd->detectorElement());
735 
736  if (isMdt && detEls.empty()) {
737 
739  const MuonGM::MuonDetectorManager* MuonDetMgr{*DetectorManagerHandle};
740  if (MuonDetMgr == nullptr) {
741  ATH_MSG_DEBUG("Cannot retrieve DetectorManager ");
742  } else {
743 
744  Identifier idml1 = m_idHelperSvc->mdtIdHelper().channelID(id, 1, 1, 1);
745  Identifier idml2 = m_idHelperSvc->mdtIdHelper().channelID(id, 2, 1, 1);
746  const MuonGM::MdtReadoutElement* detEl1 = MuonDetMgr->getMdtReadoutElement(idml1);
747  const MuonGM::MdtReadoutElement* detEl2 = nullptr;
748  if (m_idHelperSvc->mdtIdHelper().numberOfMultilayers(id) == 2) {
749  detEl2 = MuonDetMgr->getMdtReadoutElement(idml2);
750  } else {
751  ATH_MSG_DEBUG("A single multilayer for this station " << m_idHelperSvc->toString(id));
752  }
753  if (detEl1 ) {
754  detEls.insert(detEl1);
755  nchannelsEta += detEl1->getNLayers() * detEl1->getNtubesperlayer();
756  } else {
757  ATH_MSG_DEBUG("Couldn't find first detector element ");
758  }
759  if (detEl2 ) {
760  detEls.insert(detEl2);
761  nchannelsEta += detEl2->getNLayers() * detEl2->getNtubesperlayer();
762  }
763  }
764  } else if (m_idHelperSvc->isTgc(id)) {
765  const MuonGM::TgcReadoutElement* detEl =
766  dynamic_cast<const MuonGM::TgcReadoutElement*>(prd->detectorElement());
767  if (detEl) {
768  for (int i = 1; i <= detEl->nGasGaps(); ++i) {
769  nchannelsEta += detEl->nWireGangs(i);
770  nchannelsPhi += detEl->nStrips(i);
771  }
772  }
773  } else if (m_idHelperSvc->isRpc(id)) {
774  const MuonGM::RpcReadoutElement* detEl =
775  dynamic_cast<const MuonGM::RpcReadoutElement*>(prd->detectorElement());
776  if (detEl) {
777  nchannelsPhi += detEl->nGasGapPerLay() * detEl->NphiStripPanels() * detEl->NphiStrips();
778  nchannelsEta += detEl->NetaStrips();
779  }
780  }
781  }
782  }
783 
784  unsigned int nchHitsEta = 0;
785  unsigned int nchHitsPhi = 0;
786 
787 
788  if (isMdt) {
790  const MdtPrepDataContainer* mdtPrdContainer = nullptr;
791  if (!rh_mdt.isValid()) {
792  ATH_MSG_DEBUG("Cannot retrieve " << m_mdtKey.key());
793  } else {
794  mdtPrdContainer = rh_mdt.cptr();
795  IdentifierHash hash_id;
796  m_idHelperSvc->mdtIdHelper().get_module_hash(chId, hash_id);
797  const auto *coll = mdtPrdContainer->indexFindPtr(hash_id);
798  if (coll != nullptr)
799  nchHitsEta = coll->size();
800  else
801  ATH_MSG_DEBUG("Collection not found: hash " << hash_id);
802  }
803  } else if (m_idHelperSvc->isRpc(chId)) {
805  const RpcPrepDataContainer* rpcPrdContainer = nullptr;
806  if (!rh_rpc.isValid()) {
807  ATH_MSG_DEBUG("Cannot retrieve " << m_rpcKey.key());
808  } else {
809  rpcPrdContainer = rh_rpc.cptr();
810  IdentifierHash hash_id;
811  m_idHelperSvc->rpcIdHelper().get_module_hash(chId, hash_id);
812  const auto *coll = rpcPrdContainer->indexFindPtr(hash_id);
813  if (coll != nullptr) {
814  RpcPrepDataCollection::const_iterator rpcIt = coll->begin();
815  RpcPrepDataCollection::const_iterator rpcIt_end = coll->end();
816  for (; rpcIt != rpcIt_end; ++rpcIt) {
817  if (m_idHelperSvc->measuresPhi((*rpcIt)->identify()))
818  ++nchHitsPhi;
819  else
820  ++nchHitsEta;
821  }
822  } else
823  ATH_MSG_DEBUG("Collection not found: hash " << hash_id);
824  }
825  } else if (m_idHelperSvc->isTgc(chId)) {
827  const TgcPrepDataContainer* tgcPrdContainer = nullptr;
828  if (!rh_tgc.isValid()) {
829  ATH_MSG_DEBUG("Cannot retrieve " << m_tgcKey.key());
830  } else {
831  tgcPrdContainer = rh_tgc.cptr();
832  IdentifierHash hash_id;
833  m_idHelperSvc->tgcIdHelper().get_module_hash(chId, hash_id);
834  const auto *coll = tgcPrdContainer->indexFindPtr(hash_id);
835  if (coll != nullptr) {
836  TgcPrepDataCollection::const_iterator tgcIt = coll->begin();
837  TgcPrepDataCollection::const_iterator tgcIt_end = coll->end();
838  for (; tgcIt != tgcIt_end; ++tgcIt) {
839  if (m_idHelperSvc->measuresPhi((*tgcIt)->identify()))
840  ++nchHitsPhi;
841  else
842  ++nchHitsEta;
843  }
844  } else
845  ATH_MSG_DEBUG("Collection not found: hash " << hash_id);
846  }
847  }
848 
849  sout.setf(std::ios::left);
850  sout << std::setw(33) << chIdString << " neta " << std::setw(3) << neta;
851  if (!isMdt)
852  sout << " nphi " << std::setw(3) << nphi;
853  else
854  sout << " ";
855 
856  double scaleEta = nchannelsEta != 0 ? 1. / nchannelsEta : 0.;
857  double scalePhi = nchannelsPhi != 0 ? 1. / nchannelsPhi : 0.;
858  sout << " occupancy eta " << std::fixed << std::setprecision(2) << std::setw(5) << scaleEta * nchHitsEta;
859  if (!isMdt)
860  sout << " phi " << std::fixed << std::setw(5) << scalePhi * nchHitsPhi;
861  else
862  sout << " ";
863 
864  sout << std::setprecision(2) << " pat theta " << std::setw(5) << intersect.intersectDirection().theta()
865  << " ch theta " << std::setw(5) << chTheta << " ch phi " << std::setw(6) << chPhi << std::setprecision(1)
866  << " r " << std::setw(5) << (int)intersect.intersectPosition().perp() << " z " << std::setw(5)
867  << (int)intersect.intersectPosition().z();
868 
869  return sout.str();
870 }
871 
872 std::string
874 {
875  std::ostringstream sout;
876  sout << "r " << std::fixed << std::setprecision(0) << std::setw(5)
877  << pars.position().perp()
878  << " z " << std::fixed << std::setprecision(0) << std::setw(6) << pars.position().z() << " theta "
879  << std::fixed << std::setprecision(5) << std::setw(7) << pars.momentum().theta()<< " eta "
880  << std::fixed << std::setprecision(5) << std::setw(7) << pars.momentum().eta() << " phi " << std::fixed
881  << std::setprecision(3) << std::setw(6) << pars.momentum().phi() << " q*p(GeV) " << std::scientific
882  << std::setprecision(3) << std::setw(10) << pars.momentum().mag() * pars.charge() * 1e-3 << " pT(GeV) "
883  << std::scientific << std::setprecision(3) << std::setw(9) << pars.momentum().perp() * 1e-3;
884 
885  return sout.str();
886 }
887 
888 std::string
890 {
891  std::ostringstream sout;
892 
893  const std::vector<double>& residual = resPull.residual();
894  const std::vector<double>& pull = resPull.pull();
895  for (unsigned int i = 0; i < residual.size(); ++i) {
896  if (residual[i] != 999. && residual[i] != -999.)
897  sout << " residual " << std::setprecision(3) << std::setw(8) << residual[i] << " ";
898  }
899  sout << " pull ";
900  for (unsigned int i = 0; i < pull.size(); ++i) sout << std::setprecision(3) << std::setw(8) << pull[i] << " ";
901  return sout.str();
902 }
903 
904 
905 std::string
907 {
908  std::ostringstream sout;
909 
910  // print position of hit
911  double h_r = measurement.globalPosition().perp();
912  double h_z = measurement.globalPosition().z();
913  double h_phi = measurement.globalPosition().phi();
914  double h_theta = measurement.globalPosition().theta();
915  double error = std::sqrt(measurement.localCovariance()(0, 0));
916  const Trk::LocalParameters& lpars = measurement.localParameters();
917  double local_pos = lpars.contains(Trk::locX) ? lpars[Trk::locX] : (lpars.contains(Trk::locY) ? lpars[Trk::locY] : 0.);
918  sout << "r " << std::fixed << std::setprecision(0) << std::setw(5) << h_r << " z " << std::fixed
919  << std::setprecision(0) << std::setw(5) << h_z << " phi " << std::fixed << std::setprecision(3) << std::setw(4)
920  << h_phi << " theta " << std::fixed << std::setprecision(3) << std::setw(4) << h_theta
921  << " lPos " << std::fixed << std::setprecision(2) << std::setw(5) << local_pos
922  << " error " << std::fixed << std::setprecision(2) << std::setw(5) << error;
923 
924 
925  // print measurement data
926  const Trk::RIO_OnTrack* rot = dynamic_cast<const Trk::RIO_OnTrack*>(&measurement);
927  if (rot) {
928  // add drift time for MDT
929  const MdtDriftCircleOnTrack* mdt = dynamic_cast<const MdtDriftCircleOnTrack*>(rot);
930  if (mdt) {
931  sout << " r_drift " << std::fixed << std::setprecision(2) << std::setw(5) << mdt->driftRadius();
932 
933  } else {
934  // add time for RPC
935  const RpcClusterOnTrack* rpc = dynamic_cast<const RpcClusterOnTrack*>(rot);
936  if (rpc) {
937  const RpcPrepData* rpcPRD = rpc->prepRawData();
938  if (rpcPRD) {
939  sout << " time " << std::fixed << std::setprecision(2) << std::setw(5) << rpcPRD->time();
940  }
941  }
942  }
943  } else { // !rot
944  // if we get here: not a ROT, maybe a CROT
945  const CompetingMuonClustersOnTrack* crot = dynamic_cast<const CompetingMuonClustersOnTrack*>(&measurement);
946  if (crot) {
947  unsigned int nlayers = 0;
948  unsigned int nhits = 0;
949  std::set<Identifier> layers;
950  std::vector<double> rpcTimes;
951  const std::vector<const MuonClusterOnTrack*>& rots = crot->containedROTs();
952  nhits = rots.size();
953  rpcTimes.reserve(nhits);
954  std::vector<const MuonClusterOnTrack*>::const_iterator itR = rots.begin(), itR_end = rots.end();
955  for (; itR != itR_end; ++itR) {
956  Identifier layerId = m_idHelperSvc->layerId((*itR)->identify());
957  layers.insert(layerId);
958  const RpcClusterOnTrack* rpc = dynamic_cast<const RpcClusterOnTrack*>(*itR);
959  const RpcPrepData* rpcPRD = rpc ? rpc->prepRawData() : nullptr;
960  if (rpcPRD) rpcTimes.push_back(rpcPRD->time());
961  }
962  nlayers = layers.size();
963  sout << " CompRot: hits " << nhits << " layers " << nlayers;
964  // add time for RPC
965  if (!rpcTimes.empty()) {
966  sout << (rpcTimes.size() == 1 ? " time" : " times") << std::fixed << std::setprecision(2);
967  std::vector<double>::iterator itD = rpcTimes.begin(), itD_end = rpcTimes.end();
968  for (; itD != itD_end; ++itD) sout << " " << std::setw(5) << *itD;
969  }
970  } // if crot
971  } // else !rot
972 
973  return sout.str();
974 } // printData( Trk::MeasurementBase )
975 
976 
977 std::string
979 {
980  std::string idStr;
981  Identifier id = m_edmHelperSvc->getIdentifier(measurement);
982  if (!id.is_valid()) {
983  const Trk::PseudoMeasurementOnTrack* pseudo = dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(&measurement);
984  if (pseudo)
985  idStr = "pseudo measurement";
986  else
987  idStr = "no Identifier";
988  } else if (!m_idHelperSvc->isMuon(id)) {
989  idStr = "Id hit";
990  } else {
991  idStr = m_idHelperSvc->toString(id);
992  }
993 
994  return idStr;
995 }
996 
998  std::stringstream mat_string{};
999  const Trk::MaterialEffectsOnTrack* matOnTrk = dynamic_cast<const Trk::MaterialEffectsOnTrack*>(&mat);
1000  if (matOnTrk) {
1001  const Trk::ScatteringAngles* scatAng = matOnTrk->scatteringAngles();
1002  if (scatAng) {
1003  mat_string<<" dPhi: "<<scatAng->deltaPhi()<<" +- "<<scatAng->sigmaDeltaPhi()<< " / ";
1004  mat_string<<" dTheta: "<<scatAng->deltaTheta()<<" +- "<<scatAng->sigmaDeltaTheta()<<" ";
1005  }
1006  const Trk::EnergyLoss* eloss = matOnTrk->energyLoss();
1007  if (eloss) {
1008  mat_string<<" deltaE: "<<eloss->deltaE();
1009  if (std::abs(std::abs(eloss->sigmaMinusDeltaE()) - std::abs(eloss->sigmaPlusDeltaE())) > std::numeric_limits<float>::epsilon()) {
1010  mat_string<<" +/- "<<eloss->sigmaPlusDeltaE()<<"/"<<eloss->sigmaMinusDeltaE();
1011  } else {
1012  mat_string<<" +- "<<eloss->sigmaDeltaE();
1013  }
1014  mat_string<<" Ion: "<<eloss->meanIoni()<<" +- "<<eloss->sigmaIoni();
1015  mat_string<<" Rad: "<<eloss->meanRad()<<" +- "<<eloss->sigmaRad();
1016  mat_string<<" Length "<<eloss->length();
1017  }
1018  mat_string<<" ";
1019 
1020  }
1021  return mat_string.str();
1022 }
1024  std::stringstream aeot_string;
1025  aeot_string<<"dTrans: "<<aeot.deltaTranslation()<<" +- "<<aeot.sigmaDeltaTranslation();
1026  aeot_string<<" dAngle: "<<aeot.deltaAngle()<<" +- "<<aeot.sigmaDeltaAngle();
1027  return aeot_string.str();
1028 }
1029 
1030 std::string MuonEDMPrinterTool::print(const Trk::TrackStateOnSurface& tsos) const {
1031  std::stringstream tsos_str{};
1032  if (tsos.measurementOnTrack()) tsos_str<<"Measurement: "<<print(*tsos.measurementOnTrack())<<"\t";
1033  if (tsos.materialEffectsOnTrack()) tsos_str<<"Material "<<print(*tsos.materialEffectsOnTrack())<<"\t";
1034  if (tsos.trackParameters()) tsos_str<<"Parameters: "<<print(*tsos.trackParameters())<<"\t";
1035 
1036  return tsos_str.str();
1037 }
1038 } // namespace Muon
Muon::MuonSegmentQuality
Definition: MuonSegmentQuality.h:34
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Trk::AlignmentEffectsOnTrack::effectsLastFromNowOn
bool effectsLastFromNowOn() const
Returns true if the effects of this AlignmentEffectsOnTrack apply to all remaining TrackStatesOnSurfa...
Definition: AlignmentEffectsOnTrack.h:68
Trk::ScatteringAngles::deltaPhi
double deltaPhi() const
returns the
Definition: ScatteringAngles.h:82
mergePhysValFiles.pattern
pattern
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:26
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
Muon::MuonPatternCombination::chamberData
const std::vector< MuonPatternChamberIntersect > & chamberData() const
access to the MuonPatternChamberIntersect associated with the MuonPatternCombination
Definition: MuonPatternCombination.h:60
MuonCluster.h
Trk::EnergyLoss::sigmaMinusDeltaE
double sigmaMinusDeltaE() const
returns the negative side
Trk::LocalParameters
Definition: LocalParameters.h:98
Trk::TrackStateOnSurface::trackParameters
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
Trk::TrackInfo::MuidCombined
@ MuidCombined
MuidCombined.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:180
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
Muon::MuonPrepDataContainer
Template for Muon PRD containers (which are basically collections of MuonPrepDataCollections).
Definition: MuonPrepDataContainer.h:42
Muon::MuonEDMPrinterTool::m_mdtKey
SG::ReadHandleKey< MdtPrepDataContainer > m_mdtKey
Definition: MuonEDMPrinterTool.h:161
Muon::MuonEDMPrinterTool::printData
std::string printData(const Trk::MeasurementBase &measurement) const
print data part of Muon MeasurementBase to string
Definition: MuonEDMPrinterTool.cxx:906
Muon::MuonSegmentCombination
Definition: MuonSegmentCombination.h:30
MuonGM::MdtReadoutElement::getNLayers
int getNLayers() const
Returns the number of tube layers inside the multilayer.
AlignmentEffectsOnTrack.h
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
MuonGM::RpcReadoutElement::NphiStripPanels
int NphiStripPanels() const
returns the number of phi strip panels (1 or 2)
MuonPatternChamberIntersect.h
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
MuonGM::MdtReadoutElement::tubeLength
double tubeLength(const int tubeLayer, const int tube) const
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Muon::MdtDriftCircleOnTrack::prepRawData
virtual const MdtPrepData * prepRawData() const override final
Returns the PrepRawData used to create this corrected measurement.
Definition: MdtDriftCircleOnTrack.h:257
Trk::locX
@ locX
Definition: ParamDefs.h:43
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
Muon::MuonEDMPrinterTool::MuonEDMPrinterTool
MuonEDMPrinterTool(const std::string &, const std::string &, const IInterface *)
constructor
Definition: MuonEDMPrinterTool.cxx:35
MuonTrackSummary.h
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:44
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
MuonEDMPrinterTool.h
Muon::MuonEDMPrinterTool::m_tgcKey
SG::ReadHandleKey< TgcPrepDataContainer > m_tgcKey
Definition: MuonEDMPrinterTool.h:173
ClusterSeg::residual
@ residual
Definition: ClusterNtuple.h:20
MuonGM::RpcReadoutElement::nGasGapPerLay
int nGasGapPerLay() const
returns the number of gasgaps
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
mat
GeoMaterial * mat
Definition: LArDetectorConstructionTBEC.cxx:53
Trk::AlignmentEffectsOnTrack::vectorOfAffectedTSOS
const std::vector< Identifier > & vectorOfAffectedTSOS() const
Returns a vector of the affected TSOS in the track.
Definition: AlignmentEffectsOnTrack.h:115
MuonEDMHelperSvc.h
Trk::PrepRawData::localCovariance
const Amg::MatrixX & localCovariance() const
return const ref to the error matrix
Trk::TrackInfo::MuidStandAlone
@ MuidStandAlone
MuidStandalone.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:165
Trk::ResidualPull::Unbiased
@ Unbiased
RP with track state that has measurement not included.
Definition: ResidualPull.h:57
module_driven_slicing.layers
layers
Definition: module_driven_slicing.py:114
Trk::LocalParameters::contains
bool contains(ParamDefs par) const
The simple check for the clients whether the parameter is contained.
Trk::ResidualPull::pull
const std::vector< double > & pull() const
return pull vector
skel.it
it
Definition: skel.GENtoEVGEN.py:423
Trk::EnergyLoss::sigmaDeltaE
double sigmaDeltaE() const
returns the symmatric error
CompetingMuonClustersOnTrack.h
CscStripPrepData.h
Muon::MuonSegmentCombination::stationSegments
SegmentVec * stationSegments(unsigned int index) const
Access to segments in a given station.
Definition: MuonSegmentCombination.h:114
Trk::ScatteringAngles
represents a deflection of the track caused through multiple scattering in material.
Definition: ScatteringAngles.h:26
Trk::TrackStateOnSurface::measurementOnTrack
const MeasurementBase * measurementOnTrack() const
returns MeasurementBase const overload
MuonGM::RpcReadoutElement
An RpcReadoutElement corresponds to a single RPC module; therefore typicaly a barrel muon station con...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/RpcReadoutElement.h:54
Trk::TrackInfo::Muonboy
@ Muonboy
Tracks from MuonBoy.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:117
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
Trk::EnergyLoss::sigmaRad
double sigmaRad() const
Muon::RpcClusterOnTrack
Class to represent calibrated clusters formed from RPC strips.
Definition: RpcClusterOnTrack.h:35
MdtPrepData.h
MuonSegmentQuality.h
Trk::AlignmentEffectsOnTrack::deltaAngle
double deltaAngle() const
returns the
Definition: AlignmentEffectsOnTrack.h:103
Trk::ResidualPull
This class containes residual and pull information.
Definition: ResidualPull.h:46
Muon::CompetingMuonClustersOnTrack
Definition: CompetingMuonClustersOnTrack.h:54
MdtDriftCircleOnTrack.h
Trk::MaterialEffectsBase
base class to integrate material effects on Trk::Track in a flexible way.
Definition: MaterialEffectsBase.h:35
Trk::EnergyLoss::meanIoni
double meanIoni() const
Trk::Surface::center
const Amg::Vector3D & center() const
Returns the center position of the Surface.
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
Trk::AlignmentEffectsOnTrack
Class to represent misalignments or 'discontinuities' on tracks These have a surface where the z axis...
Definition: AlignmentEffectsOnTrack.h:24
Trk::TrackState::unidentified
@ unidentified
Definition: TrackStateDefs.h:27
PrepRawData.h
MuonGM::TgcReadoutElement::nGasGaps
int nGasGaps() const
Returns the number of gas gaps associated with the readout element (2 or 3)
Trk::MuonTrackSummary::ChamberHitSummary
structure to hold information per chamber in the muon system
Definition: MuonTrackSummary.h:32
MuonSegmentCombination.h
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
MuonGM::MdtReadoutElement::globalToLocalTransf
Amg::Transform3D globalToLocalTransf(const int tubeLayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:400
MaterialEffectsOnTrack.h
Trk::PseudoMeasurementOnTrack
Class to handle pseudo-measurements in fitters and on track objects.
Definition: PseudoMeasurementOnTrack.h:44
Muon::RpcPrepData::time
float time() const
Returns the time.
Definition: RpcPrepData.h:197
Muon::MuonEDMPrinterTool::m_edmHelperSvc
ServiceHandle< IMuonEDMHelperSvc > m_edmHelperSvc
Definition: MuonEDMPrinterTool.h:142
Muon::CscStripPrepData
Class representing the raw data of one CSC strip (for clusters look at Muon::CscPrepData).
Definition: CscStripPrepData.h:40
Muon::MuonPattern
Basic class for patterns in the muon spectrometer consistig out of a list of Trk::PrepRawData objects...
Definition: MuonPattern.h:23
Trk::MaterialEffectsOnTrack
represents the full description of deflection and e-loss of a track in material.
Definition: MaterialEffectsOnTrack.h:40
Trk::EnergyLoss::length
double length() const
RpcClusterOnTrack.h
Trk::ScatteringAngles::sigmaDeltaTheta
double sigmaDeltaTheta() const
returns the
Definition: ScatteringAngles.h:100
Muon::MuonEDMPrinterTool::print
std::string print(const Trk::Track &track) const
print track parameters to string
Definition: MuonEDMPrinterTool.cxx:276
ResidualPull.h
MuonGM::MdtReadoutElement
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:50
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::RpcPrepData
Class to represent RPC measurements.
Definition: RpcPrepData.h:35
Trk::TrackStateOnSurface::materialEffectsOnTrack
const MaterialEffectsBase * materialEffectsOnTrack() const
return material effects const overload
Muon::MuonPatternChamberIntersect
This class holds information needed for the Moore and MoMu pattern recognition for a muon chamber.
Definition: MuonPatternChamberIntersect.h:38
Trk::TrackInfo::MuGirlUnrefitted
@ MuGirlUnrefitted
Tracks from MuGirl not refitted with iPat.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:120
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
beamspotman.n
n
Definition: beamspotman.py:731
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
MuonGM::RpcReadoutElement::NphiStrips
int NphiStrips() const
returns the number of phi strips
MuonPatternCombination.h
Trk::EnergyLoss::deltaE
double deltaE() const
returns the
MuonGM::TgcReadoutElement
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/TgcReadoutElement.h:42
PseudoMeasurementOnTrack.h
Trk::TrackInfo::MuidVertexAssociator
@ MuidVertexAssociator
MuidVertexAssociator.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:183
Trk::TrackInfo::MuGirlLowBeta
@ MuGirlLowBeta
MuGirlLowBeta.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:192
python.StandardJetMods.pull
pull
Definition: StandardJetMods.py:264
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::MuonTrackSummary
Detailed track summary for the muon system Give access to hit counts per chamber.
Definition: MuonTrackSummary.h:26
Muon::MuonEDMPrinterTool::m_rpcKey
SG::ReadHandleKey< RpcPrepDataContainer > m_rpcKey
Definition: MuonEDMPrinterTool.h:167
Trk::TrackInfo::STACO
@ STACO
Tracks produced by STACO.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:123
Trk::FitQuality
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition: FitQuality.h:97
TrackSummary.h
Trk::ParametersBase
Definition: ParametersBase.h:55
Muon::MdtDriftCircleOnTrack::driftRadius
double driftRadius() const
Returns the value of the drift radius.
Definition: MdtDriftCircleOnTrack.h:277
MuonGM::TgcReadoutElement::nStrips
int nStrips(int gasGap) const
Returns the number of strips in a given gas gap.
DataVector< const Trk::TrackStateOnSurface >
Trk::EnergyLoss::meanRad
double meanRad() const
MuonGM::RpcReadoutElement::NetaStrips
int NetaStrips() const
returns the number of eta strips
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
MuonGM::TgcReadoutElement::nWireGangs
int nWireGangs(int gasGap) const
Returns the number of wire gangs (Random grouping of wires) in a given gas gap.
Muon::MuonEDMPrinterTool::m_pullCalculator
ToolHandle< Trk::IResidualPullCalculator > m_pullCalculator
Definition: MuonEDMPrinterTool.h:149
Trk::MeasurementBase::localCovariance
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Definition: MeasurementBase.h:138
Trk::PrepRawData
Definition: PrepRawData.h:62
Trk::MeasurementBase
Definition: MeasurementBase.h:58
Muon::RpcClusterOnTrack::prepRawData
virtual const RpcPrepData * prepRawData() const override final
Returns the RpcPrepData - is a TRT_DriftCircle in this scope.
Definition: RpcClusterOnTrack.h:127
createDCubeDigitHistograms.rpcTime
rpcTime
Definition: createDCubeDigitHistograms.py:64
Trk::PrepRawData::identify
Identifier identify() const
return the identifier
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
Trk::TrackSummary
A summary of the information contained by a track.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:287
Trk::EnergyLoss
This class describes energy loss material effects in the ATLAS tracking EDM.
Definition: EnergyLoss.h:34
Muon::MdtDriftCircleOnTrack
This class represents the corrected MDT measurements, where the corrections include the effects of wi...
Definition: MdtDriftCircleOnTrack.h:37
Trk::MeasurementBase::globalPosition
virtual const Amg::Vector3D & globalPosition() const =0
Interface method to get the global Position.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Muon::MdtPrepData
Class to represent measurements from the Monitored Drift Tubes.
Definition: MdtPrepData.h:37
Muon::CompetingMuonClustersOnTrack::containedROTs
const std::vector< const MuonClusterOnTrack * > & containedROTs() const
returns the vector of SCT_ClusterOnTrack objects .
Definition: CompetingMuonClustersOnTrack.h:184
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Muon::MuonEDMPrinterTool::initialize
StatusCode initialize()
AlgTool initilize.
Definition: MuonEDMPrinterTool.cxx:42
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
Trk::MeasurementBase::localParameters
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
Definition: MeasurementBase.h:132
Trk::TrackInfo::Moore
@ Moore
Moore (MoMu)
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:177
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
IdentifiableContainerMT::indexFindPtr
virtual const T * indexFindPtr(IdentifierHash hashId) const override final
return pointer on the found entry or null if out of range using hashed index - fast version,...
Definition: IdentifiableContainerMT.h:292
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
Trk::MaterialEffectsOnTrack::energyLoss
const EnergyLoss * energyLoss() const
returns the energy loss object.
InDetSimDataHelpers::identifiers
std::vector< Identifier > identifiers(const InDetSimDataCollection &coll)
Definition: InDetSimDataDict.h:15
Trk::TrackInfo::StacoLowPt
@ StacoLowPt
Tracks produced by StacoLowpt.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:126
Muon::MuonEDMPrinterTool::printId
std::string printId(const Trk::MeasurementBase &measurement) const
print identifier part of Muon MeasurementBase to string
Definition: MuonEDMPrinterTool.cxx:978
Amg::intersect
std::optional< double > intersect(const AmgVector(N)&posA, const AmgVector(N)&dirA, const AmgVector(N)&posB, const AmgVector(N)&dirB)
Calculates the closest approach of two lines.
Definition: GeoPrimitivesHelpers.h:302
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:49
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Muon::MuonSegmentCombination::SegmentVec
std::vector< std::unique_ptr< MuonSegment > > SegmentVec
Definition: MuonSegmentCombination.h:32
Muon::MuonPatternCombination::trackParameter
const Trk::TrackParameters * trackParameter() const
access to the global position, direction and if available momentum of the road, the pointer might be ...
Definition: MuonPatternCombination.h:58
DeMoScan.first
bool first
Definition: DeMoScan.py:534
Trk::MaterialEffectsOnTrack::scatteringAngles
const ScatteringAngles * scatteringAngles() const
returns the MCS-angles object.
MuonGM::MdtReadoutElement::surface
virtual const Trk::Surface & surface() const override final
Return surface associated with this detector element.
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:875
Trk::RIO_OnTrack::identify
virtual Identifier identify() const final
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:155
Trk::ScatteringAngles::sigmaDeltaPhi
double sigmaDeltaPhi() const
returns the
Definition: ScatteringAngles.h:94
MuonPattern.h
Trk::TrackInfo::MuTag
@ MuTag
Tracks produced by MuTag.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:129
extractSporadic.q
list q
Definition: extractSporadic.py:98
Trk::TrackInfo::MuGirl
@ MuGirl
MuGirl.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:186
Trk::FitQuality::chiSquared
double chiSquared() const
returns the of the overall track fit
Definition: FitQuality.h:56
Trk::AlignmentEffectsOnTrack::sigmaDeltaTranslation
double sigmaDeltaTranslation() const
returns the
Definition: AlignmentEffectsOnTrack.h:97
MuonSegment.h
Muon::MuonCluster
Class representing clusters in the muon system.
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonCluster.h:37
Trk::FitQuality::numberDoF
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition: FitQuality.h:60
Trk::AlignmentEffectsOnTrack::deltaTranslation
double deltaTranslation() const
returns the
Definition: AlignmentEffectsOnTrack.h:91
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Trk::ResidualPull::residual
const std::vector< double > & residual() const
return residual vector
Muon::MuonEDMPrinterTool::m_DetectorManagerKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_DetectorManagerKey
Definition: MuonEDMPrinterTool.h:155
Muon::MuonSegment
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:45
Trk::ScatteringAngles::deltaTheta
double deltaTheta() const
returns the
Definition: ScatteringAngles.h:88
AthAlgTool
Definition: AthAlgTool.h:26
Muon::MuonEDMPrinterTool::printPatRec
static std::string printPatRec(const Trk::Track &track)
produce a string indicating who produced the track
Definition: MuonEDMPrinterTool.cxx:257
RpcPrepData.h
IdentifierHash
Definition: IdentifierHash.h:38
Muon::MuonPatternCombination
The MuonPatternCombination class provides the means to store the output of the initial global pattern...
Definition: MuonPatternCombination.h:29
get_generator_info.error
error
Definition: get_generator_info.py:40
MuonGM::MdtReadoutElement::getNtubesperlayer
int getNtubesperlayer() const
Returns the number of tubes in each tube layer.
error
Definition: IImpactPoint3dEstimator.h:70
Trk::TrkDetElementBase::center
virtual const Amg::Vector3D & center() const =0
Return the center of the element.
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:26
Muon::MuonSegmentCombination::numberOfStations
unsigned int numberOfStations() const
Number of stations with segment.
Definition: MuonSegmentCombination.h:108
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
Muon::MdtPrepData::detectorElement
virtual const MuonGM::MdtReadoutElement * detectorElement() const override
Returns the detector element corresponding to this PRD.
Definition: MdtPrepData.h:156
Muon::MuonEDMPrinterTool::printStations
std::string printStations(const Trk::Track &track) const
print stations on track to string
Definition: MuonEDMPrinterTool.cxx:133
Trk::EnergyLoss::sigmaPlusDeltaE
double sigmaPlusDeltaE() const
returns the positive side
Muon::MuonEDMPrinterTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonEDMPrinterTool.h:137
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
Muon::MuonEDMPrinterTool::printMeasurements
std::string printMeasurements(const Trk::Track &track) const
print measurements on track to string
Definition: MuonEDMPrinterTool.cxx:151
NSWL1::PadTriggerAdapter::segment
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)
Definition: PadTriggerAdapter.cxx:5
Trk::EnergyLoss::sigmaIoni
double sigmaIoni() const
Trk::AlignmentEffectsOnTrack::sigmaDeltaAngle
double sigmaDeltaAngle() const
returns the
Definition: AlignmentEffectsOnTrack.h:109
Trk::PrepRawData::detectorElement
virtual const TrkDetElementBase * detectorElement() const =0
return the detector element corresponding to this PRD The pointer will be zero if the det el is not d...
Trk::TrackInfo::MuidComb
@ MuidComb
Back compatibility with older ESD versions.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:174
SCT_Monitoring::summary
@ summary
Definition: SCT_MonitoringNumbers.h:65