ATLAS Offline Software
AlignmentErrorTestAlg.cxx
Go to the documentation of this file.
2 
3 #include <fmt/format.h>
4 
11 
12 namespace MuonAlign {
13 
15  ISvcLocator* pSvcLocator)
16  : AthAlgorithm(name, pSvcLocator) {}
17 
19  ATH_CHECK(m_alignmentErrorTool.retrieve());
20  ATH_CHECK(m_idTool.retrieve());
21  ATH_CHECK(m_trackCollection.initialize());
23  return StatusCode::SUCCESS;
24 }
25 
27  const EventContext& ctx = getContext();
29  if (!trackCollection.isValid()) {
30  throw std::runtime_error("Cannot retrieve track collection");
31  }
32 
34  if (eventInfo.isValid()) {
35  ATH_MSG_INFO("Reading event " << eventInfo->eventNumber()
36  << " from run " << eventInfo->runNumber()
37  << " with timestamp " << eventInfo->timeStamp());
38  }
39 
40  ATH_MSG_INFO("Retrieved track collection with " << trackCollection->size()
41  << " entries");
42 
43  auto getListOfHits = [](const Trk::Track* track) -> std::vector<const Trk::RIO_OnTrack*> {
44  std::vector<const Trk::RIO_OnTrack*> ret;
45  for (const auto *tsos : *(track->trackStateOnSurfaces())) {
46  if (!tsos->type(Trk::TrackStateOnSurface::Measurement)) {
47  continue;
48  }
49  const Trk::MeasurementBase* meas = tsos->measurementOnTrack();
50  const auto* rot = dynamic_cast<const Trk::RIO_OnTrack*>(meas);
51  if (!rot) {
52  const auto* crot = dynamic_cast<const Trk::CompetingRIOsOnTrack*>(meas);
53  if (crot) {
54  unsigned int index = crot->indexOfMaxAssignProb();
55  rot = &(crot->rioOnTrack(index));
56  }
57  }
58  if (!rot) continue;
59  ret.emplace_back(rot);
60  }
61  return ret;
62  };
63 
64  auto makeChamberString = [&](const std::vector<const Trk::RIO_OnTrack*>& hits) -> std::string {
65  std::set<std::string> chambers;
66  for (const auto* rot : hits) {
68  m_idTool->idToFixedLongId(rot->identify());
69  if (calibId.isValid()) {
70  chambers.emplace(calibId.stationNameString());
71  }
72  }
73  std::string chambers_str;
74  bool first = true;
75  for (const auto& str : chambers) {
76  if (!first) {
77  chambers_str.append(",");
78  }
79  chambers_str.append(str);
80  first = false;
81  }
82  return chambers_str;
83  };
84 
85  int itrack = 0;
86  for (const Trk::Track* track : *trackCollection) {
87  ATH_MSG_INFO("Track " << itrack++);
88  ATH_MSG_INFO("Collected chambers: " << makeChamberString(getListOfHits(track)));
89  std::vector<Trk::AlignmentDeviation*> deviations;
90  m_alignmentErrorTool->makeAlignmentDeviations(*track, deviations);
91  for (const Trk::AlignmentDeviation* np : deviations) {
92  const auto& hits = np->getListOfHits();
93  if (const auto* tdev =
94  dynamic_cast<const MuonAlign::AlignmentTranslationDeviation*>(np)) {
95  Amg::Vector3D u = tdev->getU();
96  double sigma = tdev->getSigma();
98  fmt::format("TranslationNP U = {:14.6f} {:14.6f} {:14.6f}"
99  " sigma = {:8.6f} chambers = {}",
100  u.x(), u.y(), u.z(), sigma, makeChamberString(hits)));
101  } else if (const auto* rdev =
102  dynamic_cast<const MuonAlign::AlignmentRotationDeviation*>(np)) {
103  Amg::Vector3D c = rdev->getCenter();
104  Amg::Vector3D a = rdev->getAxis();
105  double sigma = rdev->getSigma();
107  "RotationNP C = {:14.6f} {:14.6f} {:14.6f} "
108  "A = {:14.6f} {:14.6f} {:14.6f} sigma = {:11.9f} chambers = {}",
109  c.x(), c.y(), c.z(), a.x(), a.y(), a.z(), sigma, makeChamberString(hits)));
110  } else {
111  throw std::runtime_error("Deviation type is not implemented");
112  }
113  }
114  }
115 
116  return StatusCode::SUCCESS;
117 }
118 
119 } // namespace MuonAlign
MuonAlign::AlignmentRotationDeviation
Definition: AlignmentRotationDeviation.h:11
pdg_comparison.sigma
sigma
Definition: pdg_comparison.py:324
vtune_athena.format
format
Definition: vtune_athena.py:14
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
AthMsgStreamMacros.h
CompetingRIOsOnTrack.h
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
index
Definition: index.py:1
MuonCalib::MuonFixedLongId::isValid
bool isValid() const
check validity of the identifier.
Definition: MuonFixedLongId.h:770
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
PlotPulseshapeFromCool.np
np
Definition: PlotPulseshapeFromCool.py:64
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:83
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
MuonAlign::AlignmentErrorTestAlg::AlignmentErrorTestAlg
AlignmentErrorTestAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: AlignmentErrorTestAlg.cxx:14
AlignmentTranslationDeviation.h
MuonCalib::MuonFixedLongId
Definition: MuonFixedLongId.h:50
MuonCalib::MuonFixedLongId::stationNameString
std::string_view stationNameString() const
Definition: MuonFixedLongId.h:886
MuonAlign
Definition: AlignmentRotationDeviation.h:10
MuonAlign::AlignmentErrorTestAlg::execute
StatusCode execute() override
Definition: AlignmentErrorTestAlg.cxx:26
MuonAlign::AlignmentTranslationDeviation
Definition: AlignmentTranslationDeviation.h:11
MuonAlign::AlignmentErrorTestAlg::m_idTool
ToolHandle< MuonCalib::IIdToFixedIdTool > m_idTool
Definition: AlignmentErrorTestAlg.h:25
ret
T ret(T t)
Definition: rootspy.cxx:260
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
LArG4ShowerLibProcessing.hits
hits
Definition: LArG4ShowerLibProcessing.py:136
Trk::CompetingRIOsOnTrack
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
Definition: CompetingRIOsOnTrack.h:64
AlignmentErrorTestAlg.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
Trk::AlignmentDeviation
An object decorating a track and holding degrees of freedom reflecting alignment accuracy.
Definition: AlignmentDeviation.h:20
AthAlgorithm
Definition: AthAlgorithm.h:47
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Trk::MeasurementBase
Definition: MeasurementBase.h:58
MuonAlign::AlignmentErrorTestAlg::initialize
StatusCode initialize() override
Definition: AlignmentErrorTestAlg.cxx:18
MuonAlign::AlignmentErrorTestAlg::m_trackCollection
SG::ReadHandleKey<::TrackCollection > m_trackCollection
Definition: AlignmentErrorTestAlg.h:26
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
RIO_OnTrack.h
MuonAlign::AlignmentErrorTestAlg::m_eventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Definition: AlignmentErrorTestAlg.h:28
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
AlignmentRotationDeviation.h
MuonAlign::AlignmentErrorTestAlg::m_alignmentErrorTool
ToolHandle< Trk::ITrkAlignmentDeviationTool > m_alignmentErrorTool
Definition: AlignmentErrorTestAlg.h:23
a
TList * a
Definition: liststreamerinfos.cxx:10
DeMoScan.first
bool first
Definition: DeMoScan.py:534
xAOD::EventInfo_v1::timeStamp
uint32_t timeStamp() const
POSIX time in seconds from 1970. January 1st.
str
Definition: BTagTrackIpAccessor.cxx:11
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
python.compressB64.c
def c
Definition: compressB64.py:93
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
ITrkAlignmentDeviationTool.h