ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
MuonSpectrometer
MuonAlignment
MuonAlignError
MuonAlignErrorTool
src
tests
AlignmentErrorTestAlg.cxx
Go to the documentation of this file.
1
#include "
AlignmentErrorTestAlg.h
"
2
3
#include <format>
4
5
#include "
AthenaBaseComps/AthMsgStreamMacros.h
"
6
#include "
MuonAlignErrorBase/AlignmentRotationDeviation.h
"
7
#include "
MuonAlignErrorBase/AlignmentTranslationDeviation.h
"
8
#include "
TrkCompetingRIOsOnTrack/CompetingRIOsOnTrack.h
"
9
#include "
TrkRIO_OnTrack/RIO_OnTrack.h
"
10
#include "
TrkToolInterfaces/ITrkAlignmentDeviationTool.h
"
11
12
namespace
MuonAlign
{
13
14
AlignmentErrorTestAlg::AlignmentErrorTestAlg
(
const
std::string& name,
15
ISvcLocator* pSvcLocator)
16
:
AthAlgorithm
(name, pSvcLocator) {}
17
18
StatusCode
AlignmentErrorTestAlg::initialize
() {
19
ATH_CHECK
(
m_alignmentErrorTool
.retrieve());
20
ATH_CHECK
(
m_idTool
.retrieve());
21
ATH_CHECK
(
m_trackCollection
.initialize());
22
ATH_CHECK
(
m_eventInfoKey
.initialize());
23
return
StatusCode::SUCCESS;
24
}
25
26
StatusCode
AlignmentErrorTestAlg::execute
(
const
EventContext& ctx) {
27
SG::ReadHandle<::TrackCollection>
trackCollection{
m_trackCollection
, ctx};
28
if
(!trackCollection.
isValid
()) {
29
throw
std::runtime_error(
"Cannot retrieve track collection"
);
30
}
31
32
SG::ReadHandle<xAOD::EventInfo>
eventInfo(
m_eventInfoKey
, ctx);
33
if
(eventInfo.
isValid
()) {
34
ATH_MSG_INFO
(
"Reading event "
<< eventInfo->eventNumber()
35
<<
" from run "
<< eventInfo->runNumber()
36
<<
" with timestamp "
<< eventInfo->timeStamp());
37
}
38
39
ATH_MSG_INFO
(
"Retrieved track collection with "
<< trackCollection->size()
40
<<
" entries"
);
41
42
auto
getListOfHits = [](
const
Trk::Track
* track) -> std::vector<const Trk::RIO_OnTrack*> {
43
std::vector<const Trk::RIO_OnTrack*> ret;
44
for
(
const
auto
*tsos : *(track->trackStateOnSurfaces())) {
45
if
(!tsos->type(
Trk::TrackStateOnSurface::Measurement
)) {
46
continue
;
47
}
48
const
Trk::MeasurementBase
* meas = tsos->measurementOnTrack();
49
const
auto
* rot =
dynamic_cast<
const
Trk::RIO_OnTrack
*
>
(meas);
50
if
(!rot) {
51
const
auto
* crot =
dynamic_cast<
const
Trk::CompetingRIOsOnTrack
*
>
(meas);
52
if
(crot) {
53
unsigned
int
index
= crot->indexOfMaxAssignProb();
54
rot = &(crot->rioOnTrack(
index
));
55
}
56
}
57
if
(!rot)
continue
;
58
ret.emplace_back(rot);
59
}
60
return
ret;
61
};
62
63
auto
makeChamberString = [&](
const
std::vector<const Trk::RIO_OnTrack*>& hits) -> std::string {
64
std::set<std::string> chambers;
65
for
(
const
auto
* rot : hits) {
66
MuonCalib::MuonFixedLongId
calibId =
67
m_idTool
->idToFixedLongId(rot->identify());
68
if
(calibId.
isValid
()) {
69
chambers.emplace(calibId.
stationNameString
());
70
}
71
}
72
std::string chambers_str;
73
bool
first =
true
;
74
for
(
const
auto
&
str
: chambers) {
75
if
(!first) {
76
chambers_str.append(
","
);
77
}
78
chambers_str.append(
str
);
79
first =
false
;
80
}
81
return
chambers_str;
82
};
83
84
int
itrack = 0;
85
for
(
const
Trk::Track
* track : *trackCollection) {
86
ATH_MSG_INFO
(
"Track "
<< itrack++);
87
ATH_MSG_INFO
(
"Collected chambers: "
<< makeChamberString(getListOfHits(track)));
88
std::vector<Trk::AlignmentDeviation*> deviations;
89
m_alignmentErrorTool
->makeAlignmentDeviations(*track, deviations);
90
for
(
const
Trk::AlignmentDeviation
* np : deviations) {
91
const
auto
& hits = np->getListOfHits();
92
if
(
const
auto
* tdev =
93
dynamic_cast<
const
MuonAlign::AlignmentTranslationDeviation
*
>
(np)) {
94
Amg::Vector3D
u = tdev->getU();
95
double
sigma = tdev->getSigma();
96
ATH_MSG_INFO
(
97
std::format(
"TranslationNP U = {:14.6f} {:14.6f} {:14.6f}"
98
" sigma = {:8.6f} chambers = {}"
,
99
u.x(), u.y(), u.z(), sigma, makeChamberString(hits)));
100
}
else
if
(
const
auto
* rdev =
101
dynamic_cast<
const
MuonAlign::AlignmentRotationDeviation
*
>
(np)) {
102
Amg::Vector3D
c = rdev->getCenter();
103
Amg::Vector3D
a
= rdev->getAxis();
104
double
sigma = rdev->getSigma();
105
ATH_MSG_INFO
(std::format(
106
"RotationNP C = {:14.6f} {:14.6f} {:14.6f} "
107
"A = {:14.6f} {:14.6f} {:14.6f} sigma = {:11.9f} chambers = {}"
,
108
c.x(), c.y(), c.z(),
a
.x(),
a
.y(),
a
.z(), sigma, makeChamberString(hits)));
109
}
else
{
110
throw
std::runtime_error(
"Deviation type is not implemented"
);
111
}
112
}
113
}
114
115
return
StatusCode::SUCCESS;
116
}
117
118
}
// namespace MuonAlign
AlignmentErrorTestAlg.h
AlignmentRotationDeviation.h
AlignmentTranslationDeviation.h
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
AthMsgStreamMacros.h
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
CompetingRIOsOnTrack.h
ITrkAlignmentDeviationTool.h
a
static Double_t a
Definition
LArPhysWaveHECTool.cxx:38
RIO_OnTrack.h
AthAlgorithm::AthAlgorithm
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition
AthAlgorithm.cxx:10
MuonAlign::AlignmentErrorTestAlg::m_alignmentErrorTool
ToolHandle< Trk::ITrkAlignmentDeviationTool > m_alignmentErrorTool
Definition
AlignmentErrorTestAlg.h:23
MuonAlign::AlignmentErrorTestAlg::m_trackCollection
SG::ReadHandleKey<::TrackCollection > m_trackCollection
Definition
AlignmentErrorTestAlg.h:26
MuonAlign::AlignmentErrorTestAlg::m_idTool
ToolHandle< MuonCalib::IIdToFixedIdTool > m_idTool
Definition
AlignmentErrorTestAlg.h:25
MuonAlign::AlignmentErrorTestAlg::initialize
StatusCode initialize() override
Definition
AlignmentErrorTestAlg.cxx:18
MuonAlign::AlignmentErrorTestAlg::execute
StatusCode execute(const EventContext &ctx) override
Execute method.
Definition
AlignmentErrorTestAlg.cxx:26
MuonAlign::AlignmentErrorTestAlg::AlignmentErrorTestAlg
AlignmentErrorTestAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition
AlignmentErrorTestAlg.cxx:14
MuonAlign::AlignmentErrorTestAlg::m_eventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Definition
AlignmentErrorTestAlg.h:28
MuonAlign::AlignmentRotationDeviation
Definition
AlignmentRotationDeviation.h:11
MuonAlign::AlignmentTranslationDeviation
Definition
AlignmentTranslationDeviation.h:11
MuonCalib::MuonFixedLongId
Definition
MuonFixedLongId.h:50
MuonCalib::MuonFixedLongId::stationNameString
std::string_view stationNameString() const
Definition
MuonFixedLongId.h:886
MuonCalib::MuonFixedLongId::isValid
bool isValid() const
check validity of the identifier.
Definition
MuonFixedLongId.h:770
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Trk::AlignmentDeviation
An object decorating a track and holding degrees of freedom reflecting alignment accuracy.
Definition
AlignmentDeviation.h:20
Trk::CompetingRIOsOnTrack
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
Definition
CompetingRIOsOnTrack.h:64
Trk::MeasurementBase
This class is the pure abstract base class for all fittable tracking measurements.
Definition
MeasurementBase.h:58
Trk::RIO_OnTrack
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
Definition
RIO_OnTrack.h:70
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition
TrackStateOnSurface.h:101
Trk::Track
The ATLAS Track class.
Definition
Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition
GeoPrimitives.h:47
MuonAlign
Definition
AlignmentRotationDeviation.h:10
index
Definition
index.py:1
str
Definition
BTagTrackIpAccessor.cxx:11
Generated on
for ATLAS Offline Software by
1.17.0