Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 
10 namespace 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 
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());
42  ATH_CHECK(m_hitResiduals_pullLocX.initialize());
44  ATH_CHECK(m_hitResiduals_pullLocY.initialize());
45  ATH_CHECK(m_hitResiduals_phiWidth.initialize());
46  ATH_CHECK(m_hitResiduals_etaWidth.initialize());
47 
48  // Monitoring tools
49  m_pixResidualX = Monitored::buildToolMap<int>(m_tools, "PixResidualX", m_nSiBlayers);
50  m_pixResidualY = Monitored::buildToolMap<int>(m_tools, "PixResidualY", m_nSiBlayers);
51  m_pixPullX = Monitored::buildToolMap<int>(m_tools, "PixPullX", m_nSiBlayers);
52  m_pixPullY = Monitored::buildToolMap<int>(m_tools, "PixPullY", m_nSiBlayers);
53 
54  m_stripResidualX = Monitored::buildToolMap<int>(m_tools, "StripResidualX", m_nSiBlayers);
55  m_stripPullX = Monitored::buildToolMap<int>(m_tools, "StripPullX", m_nSiBlayers);
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
ActsTrk::ITkAlignMonResidualsAlg::m_pixResidualY
std::vector< int > m_pixResidualY
Definition: ITkAlignMonResidualsAlg.h:43
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
TRTCalib_Extractor.det
det
Definition: TRTCalib_Extractor.py:36
ActsTrk::ITkAlignMonResidualsAlg::m_monGroupName
Gaudi::Property< std::string > m_monGroupName
Definition: ITkAlignMonResidualsAlg.h:38
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
ActsTrk::ITkAlignMonResidualsAlg::m_pixResidualX
std::vector< int > m_pixResidualX
Definition: ITkAlignMonResidualsAlg.h:42
ActsTrk::ITkAlignMonResidualsAlg::m_trackParticlesKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticlesKey
Definition: ITkAlignMonResidualsAlg.h:23
ActsTrk::ITkAlignMonResidualsAlg::ITkAlignMonResidualsAlg
ITkAlignMonResidualsAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: ITkAlignMonResidualsAlg.cxx:12
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
ActsTrk::ITkAlignMonResidualsAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: ITkAlignMonResidualsAlg.cxx:60
ActsTrk::ITkAlignMonResidualsAlg::m_measurement_det
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_measurement_det
Definition: ITkAlignMonResidualsAlg.h:26
ActsTrk::ITkAlignMonResidualsAlg::m_hitResiduals_residualLocX
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_residualLocX
Definition: ITkAlignMonResidualsAlg.h:30
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
ActsTrk::ITkAlignMonResidualsAlg::m_measurement_region
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_measurement_region
Definition: ITkAlignMonResidualsAlg.h:27
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
MonitoredCollection.h
ActsTrk::ITkAlignMonResidualsAlg::m_nSiBlayers
static const int m_nSiBlayers
Definition: ITkAlignMonResidualsAlg.h:41
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
ActsTrk::ITkAlignMonResidualsAlg::m_stripResidualX
std::vector< int > m_stripResidualX
Definition: ITkAlignMonResidualsAlg.h:46
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
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
ActsTrk::ITkAlignMonResidualsAlg::m_measurement_type
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_measurement_type
Definition: ITkAlignMonResidualsAlg.h:28
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthMonitorAlgorithm::fill
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.
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
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
ActsTrk::ITkAlignMonResidualsAlg::m_stripPullX
std::vector< int > m_stripPullX
Definition: ITkAlignMonResidualsAlg.h:47
ActsTrk::ITkAlignMonResidualsAlg::m_measurement_layer
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_measurement_layer
Definition: ITkAlignMonResidualsAlg.h:29
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
ActsTrk::ITkAlignMonResidualsAlg::m_pixPullX
std::vector< int > m_pixPullX
Definition: ITkAlignMonResidualsAlg.h:44
ITkAlignMonResidualsAlg.h
AthMonitorAlgorithm::m_tools
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Definition: AthMonitorAlgorithm.h:338
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
ActsTrk::ITkAlignMonResidualsAlg::m_hitResiduals_pullLocY
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_pullLocY
Definition: ITkAlignMonResidualsAlg.h:33
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ReadDecorHandle.h
Handle class for reading a decoration on an object.
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:55
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
ActsTrk::ITkAlignMonResidualsAlg::m_hitResiduals_residualLocY
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_residualLocY
Definition: ITkAlignMonResidualsAlg.h:32
ActsTrk::ITkAlignMonResidualsAlg::m_hitResiduals_pullLocX
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_pullLocX
Definition: ITkAlignMonResidualsAlg.h:31
ActsTrk::ITkAlignMonResidualsAlg::m_hitResiduals_phiWidth
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_phiWidth
Definition: ITkAlignMonResidualsAlg.h:34
ActsTrk::ITkAlignMonResidualsAlg::initialize
virtual StatusCode initialize() override
initialize
Definition: ITkAlignMonResidualsAlg.cxx:17
ActsTrk::ITkAlignMonResidualsAlg::m_pixPullY
std::vector< int > m_pixPullY
Definition: ITkAlignMonResidualsAlg.h:45
ActsTrk::ITkAlignMonResidualsAlg::m_hitResiduals_etaWidth
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_hitResiduals_etaWidth
Definition: ITkAlignMonResidualsAlg.h:35