ATLAS Offline Software
Loading...
Searching...
No Matches
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
14namespace 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
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}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
Helper class to provide constant type-safe access to aux data.
static Double_t sp
Header file to be included by clients of the Monitored infrastructure.
This is an Identifier helper class for the Pixel subdetector.
This is an Identifier helper class for the SCT subdetector.
Handle class for reading a decoration on an object.
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Gaudi::Property< bool > m_useOverlap
Gaudi::Property< std::string > m_monGroupName
SG::ReadHandleKey< xAOD::SpacePointContainer > m_spacePointContainerKey
SpacePointAnalysisAlg(const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode initialize() override
initialize
const ServiceHandle< StoreGateSvc > & detStore() const
virtual StatusCode initialize() override
initialize
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
const T * front() const
Access the first element in the collection as an rvalue.
bool empty() const noexcept
Returns true if the collection is empty.
Declare a monitored scalar variable.
This is an Identifier helper class for the Pixel subdetector.
Definition PixelID.h:67
int layer_disk(const Identifier &id) const
Definition PixelID.h:607
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition PixelID.h:360
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition PixelID.h:600
int eta_module(const Identifier &id) const
Definition PixelID.h:632
int phi_module(const Identifier &id) const
Definition PixelID.h:625
This is an Identifier helper class for the SCT subdetector.
Definition SCT_ID.h:68
int layer_disk(const Identifier &id) const
Definition SCT_ID.h:687
int side(const Identifier &id) const
Definition SCT_ID.h:705
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:459
int phi_module(const Identifier &id) const
Definition SCT_ID.h:693
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition SCT_ID.h:681
int eta_module(const Identifier &id) const
Definition SCT_ID.h:699
Helper class to provide constant type-safe access to aux data.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
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...
Eigen::Matrix< double, 3, 1 > Vector3D
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
SpacePointContainer_v1 SpacePointContainer
Define the version of the space point container.