ATLAS Offline Software
Loading...
Searching...
No Matches
ITkAlignMonResidualsAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
8
9
10namespace ActsTrk {
11
13 ISvcLocator* pSvcLocator)
14 : AthMonitorAlgorithm(name, pSvcLocator)
15 {}
16
18 ATH_MSG_DEBUG("Initializing " << name() << " ...");
19
20 ATH_MSG_DEBUG("Monitoring settings ...");
22
23 ATH_CHECK(m_trackParticlesKey.initialize());
24
25 // Decorators
36
37 ATH_CHECK(m_measurement_det.initialize());
38 ATH_CHECK(m_measurement_region.initialize());
39 ATH_CHECK(m_measurement_type.initialize());
40 ATH_CHECK(m_measurement_layer.initialize());
47
48 // Monitoring tools
53
56
58 }
59
60 StatusCode ITkAlignMonResidualsAlg::fillHistograms(const EventContext& ctx) const {
61 ATH_MSG_DEBUG("Filling histograms for "<<name()<< "...");
62
63 // Retrieve the track particles
64
66 ATH_CHECK(trackParticlesHandle.isValid());
67 const xAOD::TrackParticleContainer *trackparticles = trackParticlesHandle.cptr();
68
79
80 ATH_CHECK(decorator_measurement_det.initialize());
81 ATH_CHECK(decorator_measurement_region.isValid());
82 ATH_CHECK(decorator_measurement_type.isValid());
83 ATH_CHECK(decorator_measurement_iLayer.isValid());
84 ATH_CHECK(decorator_hitResiduals_residualLocX.isValid());
85 ATH_CHECK(decorator_hitResiduals_pullLocX.isValid());
86 ATH_CHECK(decorator_hitResiduals_residualLocY.isValid());
87 ATH_CHECK(decorator_hitResiduals_pullLocY.isValid());
88 ATH_CHECK(decorator_hitResiduals_phiWidth.isValid());
89 ATH_CHECK(decorator_hitResiduals_etaWidth.isValid());
90
91 for (const xAOD::TrackParticle* track : *trackparticles) {
92 const std::vector<int>& result_det = decorator_measurement_det(*track);
93 if (result_det.empty()) continue;
94
95 const std::vector<int>& result_region = decorator_measurement_region(*track);
96 const std::vector<int>& result_measureType = decorator_measurement_type(*track);
97 const std::vector<int>& result_layer = decorator_measurement_iLayer(*track);
98 const std::vector<float>& result_residualLocX = decorator_hitResiduals_residualLocX(*track);
99 const std::vector<float>& result_pullLocX = decorator_hitResiduals_pullLocX(*track);
100 const std::vector<float>& result_residualLocY = decorator_hitResiduals_residualLocY(*track);
101 const std::vector<float>& result_pullLocY = decorator_hitResiduals_pullLocY(*track);
102 // const std::vector<int>& result_phiWidth = decorator_hitResiduals_phiWidth(*track);
103 // const std::vector<int>& result_etaWidth = decorator_hitResiduals_etaWidth(*track);
104 // const float eta = track->eta();
105
106 // NP: this should be fine... resiudal filled with -1 if not hit
107 if (result_det.size() != result_residualLocX.size()) {
108 ATH_MSG_WARNING("Vectors of results are not matched in size!");
109 }
110
111 const auto resultSize = result_region.size();
112 for (unsigned int idx = 0; idx < resultSize; ++idx) {
113
114 const int measureType = result_measureType.at(idx);
115 const int det = result_det.at(idx);
116 const int layer = result_layer.at(idx);
117 const int region = result_region.at(idx);
118 //const int width = result_phiWidth.at(idx);
119 //const int etaWidth = result_etaWidth.at(idx);
120 const float residualX = result_residualLocX.at(idx);
121 const float pullLocX = result_pullLocX.at(idx);
122 const float residualY = result_residualLocY.at(idx);
123 const float pullLocY = result_pullLocY.at(idx);
124
125 if (det == -1) continue;
126 if (region == -1) continue;
127
128 // Unbiased residuals only for the moment
129 if (measureType == 4) {
130
131 //1 PIXEL, 2 STRIP
132 if (det == 1 || det == 0 ) {// PIXEL or PIXEL LY 0
133 if (region == 0) { // BARREL
134 //std::cout<<"Filling pixel layer "<<layer<<std::endl;
135 auto pix_b_residualsx_m = Monitored::Scalar<float>("m_pix_residualsx", residualX);
136 auto pix_b_residualsy_m = Monitored::Scalar<float>("m_pix_residualsy", residualY);
137 auto pix_b_pullsx_m = Monitored::Scalar<float>("m_pix_pullsx", pullLocX);
138 auto pix_b_pullsy_m = Monitored::Scalar<float>("m_pix_pullsy", pullLocY);
139
140 fill(m_tools[m_pixResidualX[layer]], pix_b_residualsx_m);
141 fill(m_tools[m_pixResidualY[layer]], pix_b_residualsy_m);
142 fill(m_tools[m_pixPullX[layer]], pix_b_pullsx_m);
143 fill(m_tools[m_pixPullY[layer]], pix_b_pullsy_m);
144
145 } //Barrel
146 } // Pixel
147
148 else if (det == 2) { // Strips
149 if (region == 0) { // BARREL
150 auto strip_b_residualsx_m = Monitored::Scalar<float>("m_strip_residualsx", residualX);
151 auto strip_b_pullsx_m = Monitored::Scalar<float>("m_strip_pullsx", pullLocX);
152 fill(m_tools[m_stripResidualX[layer]], strip_b_residualsx_m);
153 fill(m_tools[m_stripPullX[layer]], strip_b_pullsx_m);
154 }
155 }
156 } // measure type
157 } // resultSize
158 } // loop on track
159
160 return StatusCode::SUCCESS;
161
162 } // fill histograms
163
164} //name space ActsTrk
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Handle class for reading a decoration on an object.
Gaudi::Property< std::string > m_monGroupName
virtual StatusCode initialize() override
initialize
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_measurement_layer
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_residualLocY
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_pullLocX
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_measurement_type
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticlesKey
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_etaWidth
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_measurement_region
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_pullLocY
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_residualLocX
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_measurement_det
ITkAlignMonResidualsAlg(const std::string &name, ISvcLocator *pSvcLocator)
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_phiWidth
virtual StatusCode initialize() override
initialize
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Declare a monitored scalar variable.
Handle class for reading a decoration on an object.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &&variables) const
Fills a vector of variables to a group by reference.
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
std::vector< V > buildToolMap(const ToolHandleArray< GenericMonitoringTool > &tools, const std::string &baseName, int nHist)
Builds an array of indices (base case)
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".