ATLAS Offline Software
SpacePointAnalysisAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
13 
14 namespace ActsTrk {
15  SpacePointAnalysisAlg::SpacePointAnalysisAlg(const std::string& name, ISvcLocator *pSvcLocator)
16  : AthMonitorAlgorithm(name, pSvcLocator)
17  {}
18 
20  ATH_MSG_DEBUG( "Initializing " << name() << " ... " );
21 
22  ATH_MSG_DEBUG("Properties:");
24 
25  ATH_CHECK( m_spacePointContainerKey.initialize() );
26 
27  if (m_usePixel and m_useOverlap)
28  ATH_MSG_INFO("No overlap collection when enabled for pixel space points! Check your configuration if needed.");
29 
30  ATH_MSG_DEBUG("Monitoring settings ...");
32 
34  }
35 
36  StatusCode SpacePointAnalysisAlg::fillHistograms(const EventContext& ctx) const {
37  ATH_MSG_DEBUG(" In " << name() << "::fillHistograms()" );
38 
39  const PixelID *pixelID = nullptr;
40  const SCT_ID *stripID = nullptr;
41 
42  if (m_usePixel)
43  ATH_CHECK(detStore()->retrieve(pixelID, "PixelID"));
44  else
45  ATH_CHECK(detStore()->retrieve(stripID, "SCT_ID"));
46 
48  if (!inputSpacePointContainer.isValid()){
49  ATH_MSG_FATAL("xAOD::SpacePointContainer with key " << m_spacePointContainerKey.key() << " is not available...");
50  return StatusCode::FAILURE;
51  }
52  const xAOD::SpacePointContainer* inputSpacePointCollection = inputSpacePointContainer.cptr();
53  // Early exit if no input collection
54  if ( inputSpacePointCollection->empty() ) {
55  return StatusCode::SUCCESS;
56  }
57 
58  ATH_MSG_DEBUG("Reading decoration to space point collection: bare pointers to clusters");
59  using decoration_type = std::vector<const xAOD::UncalibratedMeasurement*>;
60  static const SG::ConstAccessor<decoration_type> measurementsAcc ("measurements");
61  if ( not measurementsAcc.isAvailable (*inputSpacePointCollection->front()) ) {
62  ATH_MSG_ERROR("Space Point Collection does not have decoration 'measurements', which should contain a vector of bare pointes to clusters");
63  return StatusCode::FAILURE;
64  }
65 
66  auto monitor_nsp = Monitored::Scalar<int>("Nsp", inputSpacePointContainer->size());
67  fill(m_monGroupName.value(), monitor_nsp);
68 
69  // Check we can have access to clusters
70  for (const xAOD::SpacePoint* sp : *inputSpacePointCollection) {
71  const auto& els = sp->measurements();
72  for (const auto* el : els) {
73  [[maybe_unused]] const auto idHash = el->identifierHash();
74  }
75  }
76 
77  auto monitor_barrelEndcap = Monitored::Collection("barrelEndcap", *inputSpacePointCollection,
78  [this, &pixelID, &stripID] (const auto* spacePoint) -> int
79  {
80  const auto idHash = spacePoint->elementIdList()[0];
81  const Identifier id = this->m_usePixel ?
82  pixelID->wafer_id(idHash) : stripID->wafer_id(idHash);
83  return this->m_usePixel ? pixelID->barrel_ec(id) : stripID->barrel_ec(id);
84  });
85  auto monitor_layerDisk = Monitored::Collection("layerDisk", *inputSpacePointCollection,
86  [this, &pixelID, &stripID] (const auto* spacePoint) -> int
87  {
88  const auto idHash = spacePoint->elementIdList()[0];
89  const Identifier id = this->m_usePixel ?
90  pixelID->wafer_id(idHash) : stripID->wafer_id(idHash);
91  return this->m_usePixel ? pixelID->layer_disk(id) : stripID->layer_disk(id);
92  });
93 
94  auto monitor_phiModule = Monitored::Collection("phiModule", *inputSpacePointCollection,
95  [this, &pixelID, &stripID] (const auto* spacePoint) -> int
96  {
97  const auto idHash = spacePoint->elementIdList()[0];
98  const Identifier id = this->m_usePixel ?
99  pixelID->wafer_id(idHash) : stripID->wafer_id(idHash);
100  return this->m_usePixel ? pixelID->phi_module(id) : stripID->phi_module(id);
101  });
102  auto monitor_etaModule = Monitored::Collection("etaModule", *inputSpacePointCollection,
103  [this, &pixelID, &stripID] (const auto* spacePoint) -> int
104  {
105  const auto idHash = spacePoint->elementIdList()[0];
106  const Identifier id = this->m_usePixel ?
107  pixelID->wafer_id(idHash) : stripID->wafer_id(idHash);
108  return this->m_usePixel ? pixelID->eta_module(id) : stripID->eta_module(id);
109  });
110  auto monitor_sideModule = Monitored::Collection("sideModule", *inputSpacePointCollection,
111  [this, &stripID] (const auto* spacePoint) -> int
112  {
113  if (this->m_usePixel) return 0;
114 
115  const auto idHash = spacePoint->elementIdList()[0];
116  const Identifier id = stripID->wafer_id(idHash);
117  return stripID->side(id);
118  });
119 
120  auto monitor_isInnermost = Monitored::Collection("isInnermost", *inputSpacePointCollection,
121  [this, &pixelID] (const auto* spacePoint) -> int
122  {
123  if (not this->m_usePixel) return 0;
124 
125  const auto idHash = spacePoint->elementIdList()[0];
126  const Identifier id = pixelID->wafer_id(idHash);
127  const int layerDisk = pixelID->layer_disk(id);
128  return int(layerDisk==0);
129  });
130  auto monitor_isNextToInnermost = Monitored::Collection("isNextToInnermost", *inputSpacePointCollection,
131  [this, &pixelID] (const auto* spacePoint) -> int
132  {
133  if (not this->m_usePixel) return 0;
134 
135  const auto idHash = spacePoint->elementIdList()[0];
136  const Identifier id = pixelID->wafer_id(idHash);
137 
138  const int brlEc = pixelID->layer_disk(id);
139  const int layerDisk = pixelID->layer_disk(id);
140  return int((layerDisk==1) or (brlEc!=0 and layerDisk==2));
141  });
142  auto monitor_isOverlap = Monitored::Collection("isOverlap", *inputSpacePointCollection,
143  [this] (const auto*) -> int
144  {
145  return this->m_usePixel ? 0 : int(this->m_useOverlap);
146  });
147 
148  auto monitor_eta = Monitored::Collection("eta", *inputSpacePointCollection,
149  [] (const auto* spacePoint) -> double
150  {
151  Amg::Vector3D globalPosition(spacePoint->x(), spacePoint->y(), spacePoint->z());
152  return globalPosition.eta();
153  });
154  auto monitor_perp = Monitored::Collection("perp", *inputSpacePointCollection,
155  [] (const auto* spacePoint) -> double
156  {
157  Amg::Vector3D globalPosition(spacePoint->x(), spacePoint->y(), spacePoint->z());
158  return globalPosition.perp();
159  });
160 
161  auto monitor_globalX = Monitored::Collection("globalX", *inputSpacePointCollection,
162  [] (const auto* spacePoint) -> double
163  { return spacePoint->x(); });
164  auto monitor_globalY = Monitored::Collection("globalY", *inputSpacePointCollection,
165  [] (const auto* spacePoint) -> double
166  { return spacePoint->y(); });
167  auto monitor_globalZ = Monitored::Collection("globalZ", *inputSpacePointCollection,
168  [] (const auto* spacePoint) -> double
169  { return spacePoint->z(); });
170 
171  auto monitor_cov_r = Monitored::Collection("globalCovR", *inputSpacePointCollection,
172  [] (const auto* spacePoint) -> double
173  { return spacePoint->varianceR(); });
174  auto monitor_cov_z = Monitored::Collection("globalCovZ", *inputSpacePointCollection,
175  [] (const auto* spacePoint) -> double
176  { return spacePoint->varianceZ(); });
177 
178  fill(m_monGroupName.value(),
179  monitor_barrelEndcap, monitor_layerDisk,
180  monitor_phiModule, monitor_etaModule, monitor_sideModule,
181  monitor_isInnermost, monitor_isNextToInnermost,
182  monitor_isOverlap,
183  monitor_eta, monitor_perp,
184  monitor_globalX, monitor_globalY, monitor_globalZ,
185  monitor_cov_r, monitor_cov_z);
186 
187  return StatusCode::SUCCESS;
188  }
189 
190 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
ActsTrk::SpacePointAnalysisAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: SpacePointAnalysisAlg.cxx:36
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
ActsTrk::SpacePointAnalysisAlg::initialize
virtual StatusCode initialize() override
initialize
Definition: SpacePointAnalysisAlg.cxx:19
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
PixelID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: PixelID.h:615
ActsTrk::SpacePointAnalysisAlg::m_spacePointContainerKey
SG::ReadHandleKey< xAOD::SpacePointContainer > m_spacePointContainerKey
Definition: SpacePointAnalysisAlg.h:32
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
SpacePointAnalysisAlg.h
xAOD::SpacePoint_v1
Definition: SpacePoint_v1.h:29
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:55
SCT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: SCT_ID.h:728
SCT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: SCT_ID.h:740
PixelID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: PixelID.h:360
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
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
ActsTrk::SpacePointAnalysisAlg::m_usePixel
Gaudi::Property< bool > m_usePixel
Definition: SpacePointAnalysisAlg.h:35
UncalibratedMeasurementContainer.h
DataVector::front
const T * front() const
Access the first element in the collection as an rvalue.
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
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.
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
Monitored.h
Header file to be included by clients of the Monitored infrastructure.
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
PixelID::layer_disk
int layer_disk(const Identifier &id) const
Definition: PixelID.h:622
PixelID::eta_module
int eta_module(const Identifier &id) const
Definition: PixelID.h:647
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ActsTrk::SpacePointAnalysisAlg::SpacePointAnalysisAlg
SpacePointAnalysisAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: SpacePointAnalysisAlg.cxx:15
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
ContainerAccessor.h
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
SCT_ID
Definition: SCT_ID.h:68
ActsTrk::SpacePointAnalysisAlg::m_useOverlap
Gaudi::Property< bool > m_useOverlap
Definition: SpacePointAnalysisAlg.h:36
SCT_ID::eta_module
int eta_module(const Identifier &id) const
Definition: SCT_ID.h:746
SCT_ID::side
int side(const Identifier &id) const
Definition: SCT_ID.h:752
ReadDecorHandle.h
Handle class for reading a decoration on an object.
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MSTrackingVolumeBuilder.cxx:24
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
SCT_ID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int side) const
For a single side of module.
Definition: SCT_ID.h:464
PixelID::phi_module
int phi_module(const Identifier &id) const
Definition: PixelID.h:640
PixelID
Definition: PixelID.h:67
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
ActsTrk::SpacePointAnalysisAlg::m_monGroupName
Gaudi::Property< std::string > m_monGroupName
Definition: SpacePointAnalysisAlg.h:34
Identifier
Definition: IdentifierFieldParser.cxx:14