ATLAS Offline Software
Loading...
Searching...
No Matches
ActsTrk::TracccMeasurementConverterAlg Class Reference

Algorithm converting traccc measurements (device buffer) to xAOD clusters (host container). More...

#include <TracccMeasurementConverterAlg.h>

Inheritance diagram for ActsTrk::TracccMeasurementConverterAlg:

Public Member Functions

virtual StatusCode initialize () override
 Function initializing the algorithm.
virtual StatusCode execute (const EventContext &ctx) const override
 Function executing the algorithm.
virtual StatusCode finalize () override
 Function finalizing the algorthm.
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
 Get filter decision:
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 Set filter decision:
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvc > StoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

const PixelID * m_pixelID {nullptr}
 Conversion helpers (to retrieve module design, hash, etc.) {.
const SCT_ID * m_stripID {nullptr}
Gaudi::Property< std::string > m_idHelperName
const InDetDD::PixelDetectorManager * m_pixelManager {nullptr}
const InDetDD::SCT_DetectorManager * m_stripManager {nullptr}
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared
Bolean variable deciding weather the conversion includes cell to cluster association
Gaudi::Property< bool > m_convertClustersWithCells
The input device resident cluster, measurement and cell collection names

{@

SG::ReadHandleKey< traccc::edm::measurement_collection::buffer > m_inputMeasKey
SG::ReadHandleKey< traccc::edm::silicon_cluster_collection::buffer > m_inputClusterKey
SG::ReadHandleKey< traccc::edm::silicon_cell_collection::buffer > m_inputCellsKey
The output host resident cluster container names

{@

SG::WriteHandleKey< xAOD::PixelClusterContainer > m_outputPixelKey
SG::WriteHandleKey< xAOD::SpacePointContainer > m_outputPixelSpacePointsKey
SG::WriteHandleKey< std::vector< unsigned int > > m_outputMeasToPixelSPKey
SG::WriteHandleKey< std::vector< unsigned int > > m_outputMeasToStripClKey
SG::WriteHandleKey< xAOD::StripClusterContainer > m_outputStripKey
The host memory resource tool to use for memory allocations
ToolHandle< AthDevice::IMemoryResourceTool > m_hostMR
The copy tool used for copying data from device
ToolHandle< AthDevice::ICopyTool > m_copy
The map object holding the Athena<->ACTS<->Detray ID maps
Gaudi::Property< std::string > m_geoIdMappingObjectName {this, "GeoIdMapping", "", "ID mapping between the three detector description realms."}
const ActsTrk::GeometryIdMapping * m_idMapping {nullptr}
std::atomic< int > m_nPix = 0
 The object counters for debug prints in finalize method {.
std::atomic< int > m_nStrip = 0
std::atomic< int > m_nMeas = 0

Detailed Description

Algorithm converting traccc measurements (device buffer) to xAOD clusters (host container).

This algorithm retrieves the input traccc measurement collection device buffer from the event store, copies the data to host buffer and converts the traccc measurements to xAOD clusters. In case the clusters require the associated RDOs (e.g. for truth matching), the algorithm also retrieves the traccc cluster collection device buffer from the event store, and uses the cell indices stored in the traccc clusters to construct an RDO list associated with each xAOD cluster.

Author
Neža Ribarič neza..nosp@m.riba.nosp@m.ric@c.nosp@m.ern..nosp@m.ch

Definition at line 56 of file TracccMeasurementConverterAlg.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 376 of file AthCommonDataStore.h.

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode ActsTrk::TracccMeasurementConverterAlg::execute ( const EventContext & ctx) const
overridevirtual

Function executing the algorithm.

Definition at line 141 of file TracccMeasurementConverterAlg.cxx.

142{
143 // ---- Retrieve measurements (always needed) ----
144 auto measurements = SG::makeHandle(m_inputMeasKey, ctx);
145 ATH_CHECK(measurements.isValid());
146
147 auto copy = m_copy->copy(ctx);
148
149 traccc::edm::measurement_collection::buffer traccc_measurements_buffer{
150 copy->get_size(*measurements), m_hostMR->mr()};
151 copy->setup(traccc_measurements_buffer)->ignore();
152 (*copy)(*measurements, traccc_measurements_buffer)->wait();
153
154 traccc::edm::measurement_collection::const_device traccc_measurements(
155 traccc_measurements_buffer);
156
157 // ---- Optionally retrieve clusters and cells ----
158 std::optional<traccc::edm::silicon_cluster_collection::buffer> traccc_clusters_buffer;
159 std::optional<traccc::edm::silicon_cell_collection::buffer> traccc_cells_buffer;
160 std::optional<traccc::edm::silicon_cluster_collection::const_device> traccc_clusters;
161 std::optional<traccc::edm::silicon_cell_collection::const_device> traccc_cells;
162
163 // ---- Create mapping from traccc measurement index to pixel spacepoint index ----
164 // for pixel the index maps to cluster container or spacepoint containe
165 // because every pixel measurement makes one spacepoint
166 std::vector<unsigned int> measToPixelSP(traccc_measurements.size(),
167 std::numeric_limits<unsigned int>::max());
168
169 // ---- Create mapping from traccc measurement index to strip cluster index ----
170 // every strip measurement does not map to one strip spacepoint therefore this map
171 // is only valid between traccc measurements and strip clusters
172 // The reason why we have two maps is that during traccc track conversion
173 // we need to figure out if a track state is coming from pixel or strip
174 // since we don't want to copy/write to SG the measurements twice
175 // we can figure this out by creating two maps at conversion,
176 // then if the meas index is not in pixel map, has to be a strip meas
177 std::vector<unsigned int> measToStripCl(traccc_measurements.size(),
178 std::numeric_limits<unsigned int>::max());
180 ATH_MSG_DEBUG("Read " << traccc_measurements.size() << " traccc measurements from " << m_inputMeasKey.key());
181 ATH_MSG_DEBUG("Read traccc clusters from '"
182 << m_inputClusterKey.key()
183 << "' and will convert them with associated cells.");
184
185 SG::ReadHandle<traccc::edm::silicon_cluster_collection::buffer> clusters{
186 m_inputClusterKey, ctx};
187 ATH_CHECK(clusters.isValid());
188 SG::ReadHandle<traccc::edm::silicon_cell_collection::buffer> cells{
189 m_inputCellsKey, ctx};
190 ATH_CHECK(cells.isValid());
191
192 traccc_clusters_buffer.emplace(copy->get_sizes(*clusters), m_hostMR->mr());
193 copy->setup(*traccc_clusters_buffer)->wait();
194 (*copy)(*clusters, *traccc_clusters_buffer)->wait();
195
196 traccc_cells_buffer.emplace(copy->get_size(*cells), m_hostMR->mr());
197 copy->setup(*traccc_cells_buffer)->wait();
198 (*copy)(*cells, *traccc_cells_buffer)->wait();
199
200 traccc_clusters.emplace(*traccc_clusters_buffer);
201 ATH_MSG_DEBUG("Copied " << traccc_clusters->size() << " clusters.");
202
203 traccc_cells.emplace(*traccc_cells_buffer);
204 ATH_MSG_DEBUG("Copied " << traccc_cells->size() << " cells.");
205 } else {
206 ATH_MSG_DEBUG("Read traccc measurements from '"
207 << m_inputMeasKey.key()
208 << "' and will convert them without associated cells.");
209 }
210
211 // ---- Count pixel vs strip ----
212 const auto [n_pixels, n_strips] = countPixelStrip(traccc_measurements);
213
214 // ---- Create output containers ----
215 auto [pixel_cont, pixel_aux] =
217 auto [pixel_spacepoint_cont, pixel_spacepoint_aux] =
219 auto [strip_cont, strip_aux] =
221
222 // ---- Convert ----
223 auto pixItr = pixel_cont->begin();
224 auto spItr = pixel_spacepoint_cont->begin();
225 auto stripItr = strip_cont->begin();
226
227 std::size_t pixel_idx = 0;
228 std::size_t strip_idx = 0;
229
230 for (std::size_t i = 0; i < traccc_measurements.size(); ++i) {
231 const auto& meas = traccc_measurements.at(i);
232 const uint64_t detrayId = meas.surface_link().value();
233 auto athenaIdOpt = m_idMapping->detrayToAthena(detrayId);
234 if (!athenaIdOpt.has_value()) {
235 ATH_MSG_FATAL("No Athena module found for detray id " << detrayId << " — skipping measurement.");
236 return StatusCode::FAILURE;
237 }
238 const Identifier athenaId = *athenaIdOpt;
239
240 // ---- Pixel ----
241 if (meas.dimensions() == 2u) {
242 xAOD::PixelCluster* xaod_pcl = *pixItr;
243 xAOD::SpacePoint* xaod_sp = *spItr;
244 ++spItr;
245 ++pixItr;
246
247 // once seeding will come into play, we will need to keep track of the
248 // mapping between traccc and xAOD clusters. The reason for this is:
249 // 1. the traccc measurements are all in one collection, and the
250 // xAOD clusters are in two separate collections (pixel and strip)
251 // 2. the traccc spacepoints are not not created in the same order as the traccc measurements
252 measToPixelSP[i] = pixel_idx;
253
254 const IdentifierHash Pixel_ModuleHash =
255 m_pixelID->wafer_hash(athenaId);
256 const InDetDD::SiDetectorElement* pDE =
257 m_pixelManager->getDetectorElement(Pixel_ModuleHash);
258 const InDetDD::PixelModuleDesign* design(
259 dynamic_cast<const InDetDD::PixelModuleDesign*>(
260 &pDE->design()));
261 if(design == nullptr){
262 ATH_MSG_FATAL("Could not retrieve module design for pixel module hash " << Pixel_ModuleHash);
263 return StatusCode::FAILURE;
264 }
265
266 fillPixelCluster(meas, athenaId, m_pixelID, m_pixelManager, *xaod_pcl,
267 pixel_idx + strip_idx);
268
270 const auto cluster = traccc_clusters->at(meas.cluster_index());
271
272 std::vector<Identifier> rdoList;
273 rdoList.reserve(cluster.cell_indices().size());
274 int phiIndicesMax = -1;
275 int etaIndicesMax = -1;
276 int phiIndicesMin = std::numeric_limits<int>::max();
277 int etaIndicesMin = std::numeric_limits<int>::max();
278
279 for (const unsigned int cell_idx : cluster.cell_indices()) {
280 const auto& cell = traccc_cells->at(cell_idx);
281
282 int const phiIndex = cell.channel0();
283 int const etaIndex = cell.channel1();
284
285 phiIndicesMax = std::max(phiIndicesMax, phiIndex);
286 etaIndicesMax = std::max(etaIndicesMax, etaIndex);
287 phiIndicesMin = std::min(phiIndicesMin, phiIndex);
288 etaIndicesMin = std::min(etaIndicesMin, etaIndex);
289
290 Identifier const hit_id =
291 m_pixelID->pixel_id(athenaId, phiIndex, etaIndex);
292 rdoList.push_back(hit_id);
293 }
294
295 double const colWidth = static_cast<double>((etaIndicesMax - etaIndicesMin) + 1);
296 double const rowWidth = static_cast<double>((phiIndicesMax - phiIndicesMin) + 1);
297 double const etaWidth =
298 design->widthFromColumnRange(etaIndicesMin, etaIndicesMax);
299 double const phiWidth = design->widthFromRowRange(phiIndicesMin, phiIndicesMax);
300
301 InDet::SiWidth siWidth(Amg::Vector2D(rowWidth, colWidth),
302 Amg::Vector2D(phiWidth, etaWidth));
303
304 float width0 = phiWidth / rowWidth;
305 float width1 = etaWidth / colWidth;
306 Eigen::Matrix<float, 2, 2> localCovariance =
307 Eigen::Matrix<float, 2, 2>::Zero();
308 localCovariance(0, 0) = width0 * width0 / 12.0f;
309 localCovariance(1, 1) = width1 * width1 / 12.0f;
310
311 Eigen::Matrix<float, 2, 1> localPosition(meas.local_position()[0], meas.local_position()[1]);
312 xaod_pcl->setMeasurement<2>(Pixel_ModuleHash, localPosition,
313 localCovariance);
314
315 std::sort(rdoList.begin(), rdoList.end());
316 xaod_pcl->setIdentifier(rdoList.front().get_compact());
317 xaod_pcl->setRDOlist(std::move(rdoList));
318 xaod_pcl->setChannelsInPhiEta(siWidth.colRow()[0],
319 siWidth.colRow()[1]);
320 float width_phiRZ = static_cast<float>(siWidth.widthPhiRZ()[1]);
321 xaod_pcl->setWidthInEta(width_phiRZ);
322
323 }
324
325 // Using width to scale the cluster covariance for space points.
326 // Read width back from the cluster so that this works with and without cells
327 // only works if 'diameter' strategy is set to channel1 in traccc
328 const float width_phiRZ = xaod_pcl->widthInEta();
329 float covTerm = width_phiRZ * width_phiRZ * (1/12.0f);
330
331 const float localVarEta = xaod_pcl->localCovariance<2>()(1, 1);
332 if( covTerm < localVarEta )
333 covTerm = localVarEta;
334
335 const Amg::Transform3D& Tp = pDE->surface().transform();
336 float const cov_z =
337 6.f * covTerm *
338 static_cast<float>(Tp(0, 2) * Tp(0, 2) + Tp(1, 2) * Tp(1, 2));
339 float const cov_r = 6.f * covTerm *
340 static_cast<float>(Tp(2, 2) * Tp(2, 2));
341 xaod_sp->setSpacePoint(xaod_pcl->identifierHash(),
342 xaod_pcl->globalPosition(), cov_r, cov_z,
343 {xaod_pcl});
344 ++pixel_idx;
345
346 // ---- Strip ----
347 } else {
348 xAOD::StripCluster* xaod_scl = *stripItr;
349 ++stripItr;
350
351 // see comment above for pixel clusters, the same applies here
352 // when we eventually have strip spacepoints
353
354 const IdentifierHash Strip_ModuleHash =
355 m_stripID->wafer_hash(athenaId);
356 const InDetDD::SiDetectorElement* pDE =
357 m_stripManager->getDetectorElement(Strip_ModuleHash);
358
359 fillStripCluster(meas, athenaId, m_stripID, m_stripManager, *xaod_scl,
360 pixel_idx + strip_idx);
361
363 const auto cluster = traccc_clusters->at(meas.cluster_index());
364
365 std::vector<Identifier> rdoList;
366 rdoList.reserve(cluster.cell_indices().size());
367 int phiIndicesMax = -1;
368 int phiIndicesMin = std::numeric_limits<int>::max();
369
370 for (const unsigned int cell_idx : cluster.cell_indices()) {
371 const auto& cell = traccc_cells->at(cell_idx);
372
373 // (m_stripID->barrel_ec(athenaId) != 0) <=> endcap strip
374 // => we are working with polar coordinates (r,phi)
375 // and we have to swap the indices
376 int const phiIndex = (m_stripID->barrel_ec(athenaId) != 0)
377 ? cell.channel1()
378 : cell.channel0();
379
380 phiIndicesMax = std::max(phiIndicesMax, phiIndex);
381 phiIndicesMin = std::min(phiIndicesMin, phiIndex);
382 Identifier const hit_id =
383 m_stripID->strip_id(athenaId, int(phiIndex));
384 rdoList.push_back(hit_id);
385 }
386
387 std::sort(rdoList.begin(), rdoList.end());
388 const int firstStrip = m_stripID->strip(rdoList.front());
389 const int lastStrip = m_stripID->strip(rdoList.back());
390
391 const InDetDD::SCT_ModuleSideDesign* design;
392 if (pDE->isBarrel()) {
393 design = (static_cast<const InDetDD::SCT_ModuleSideDesign*>(
394 &pDE->design()));
395 } else {
396 design = (static_cast<const InDetDD::StripStereoAnnulusDesign*>(
397 &pDE->design()));
398 }
399
400 const int row = m_stripID->row(rdoList.front());
401 const int firstStrip1D = design->strip1Dim(firstStrip, row);
402 const int lastStrip1D = design->strip1Dim(lastStrip, row);
403 const InDetDD::SiCellId cell1(firstStrip1D);
404 const InDetDD::SiCellId cell2(lastStrip1D);
405 const InDetDD::SiLocalPosition firstStripPos(
406 pDE->rawLocalPositionOfCell(cell1));
407 const InDetDD::SiLocalPosition lastStripPos(
408 pDE->rawLocalPositionOfCell(cell2));
409 const InDetDD::SiLocalPosition centre(
410 (firstStripPos + lastStripPos) * 0.5);
411 const std::pair<InDetDD::SiLocalPosition, InDetDD::SiLocalPosition>
412 ends(design->endsOfStrip(centre));
413 const double stripLength(
414 std::abs(ends.first.xEta() - ends.second.xEta()));
415 const double width =
416 design->stripPitch() * (lastStrip - firstStrip + 1);
417
418 double const phiWidth = static_cast<double>((phiIndicesMax - phiIndicesMin) + 1);
419 InDet::SiWidth siWidth(Amg::Vector2D(phiWidth, 1),
420 Amg::Vector2D(width, stripLength));
421
422 xaod_scl->setIdentifier(rdoList.front().get_compact());
423 xaod_scl->setRDOlist(std::move(rdoList));
424 xaod_scl->setChannelsInPhi(siWidth.colRow()[0]);
425
426 }
427 measToStripCl[i] = strip_idx;
428 ++strip_idx;
429 }
430 }
431
432 ATH_MSG_DEBUG("Converted " << pixel_idx << " pixel clusters, " << strip_idx
433 << " strip clusters");
434
435 m_nMeas += traccc_measurements.size();
436 m_nPix += pixel_idx;
437 m_nStrip += strip_idx;
438
439 // ---- Write outputs ----
440 SG::WriteHandle<xAOD::PixelClusterContainer> pixelHandle{m_outputPixelKey,
441 ctx};
442 ATH_CHECK(pixelHandle.record(std::move(pixel_cont), std::move(pixel_aux)));
443
444 SG::WriteHandle<xAOD::SpacePointContainer> spacePointHandle{m_outputPixelSpacePointsKey,
445 ctx};
446 ATH_CHECK(spacePointHandle.record(std::move(pixel_spacepoint_cont), std::move(pixel_spacepoint_aux)));
447
448 SG::WriteHandle<std::vector<unsigned int>> measToPixelSPHandle{m_outputMeasToPixelSPKey, ctx};
449 ATH_CHECK(measToPixelSPHandle.record(std::make_unique<std::vector<unsigned int>>(std::move(measToPixelSP))));
450
451 SG::WriteHandle<std::vector<unsigned int>> measToStripClHandle{m_outputMeasToStripClKey, ctx};
452 ATH_CHECK(measToStripClHandle.record(std::make_unique<std::vector<unsigned int>>(std::move(measToStripCl))));
453
454 SG::WriteHandle<xAOD::StripClusterContainer> stripHandle{m_outputStripKey,
455 ctx};
456 ATH_CHECK(stripHandle.record(std::move(strip_cont), std::move(strip_aux)));
457
458 ATH_MSG_DEBUG("Wrote clusters to " << m_outputPixelKey.key() << " and " << m_outputStripKey.key());
459
460 return StatusCode::SUCCESS;
461}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_FATAL(x,...)
static Double_t Tp(Double_t *t, Double_t *par)
const double width
SG::ReadHandleKey< traccc::edm::measurement_collection::buffer > m_inputMeasKey
SG::WriteHandleKey< xAOD::StripClusterContainer > m_outputStripKey
SG::WriteHandleKey< std::vector< unsigned int > > m_outputMeasToStripClKey
SG::ReadHandleKey< traccc::edm::silicon_cell_collection::buffer > m_inputCellsKey
SG::ReadHandleKey< traccc::edm::silicon_cluster_collection::buffer > m_inputClusterKey
ToolHandle< AthDevice::IMemoryResourceTool > m_hostMR
std::atomic< int > m_nPix
The object counters for debug prints in finalize method {.
const PixelID * m_pixelID
Conversion helpers (to retrieve module design, hash, etc.) {.
SG::WriteHandleKey< std::vector< unsigned int > > m_outputMeasToPixelSPKey
SG::WriteHandleKey< xAOD::PixelClusterContainer > m_outputPixelKey
SG::WriteHandleKey< xAOD::SpacePointContainer > m_outputPixelSpacePointsKey
const InDetDD::SCT_DetectorManager * m_stripManager
const InDetDD::PixelDetectorManager * m_pixelManager
virtual double stripPitch(const SiLocalPosition &chargePos) const =0
give the strip pitch (dependence on position needed for forward)
virtual int strip1Dim(int strip, int row) const override
only relevant for SCT.
virtual std::pair< SiLocalPosition, SiLocalPosition > endsOfStrip(const SiLocalPosition &position) const override=0
give the ends of strips
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
Amg::Vector2D rawLocalPositionOfCell(const SiCellId &cellId) const
Returns position (center) of cell.
Trk::Surface & surface()
Element Surface.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
void setChannelsInPhiEta(int channelsInPhi, int channelsInEta)
Sets the dimensions of the cluster in numbers of channels in phi (x) and eta (y) directions.
ConstVectorMap< 3 > globalPosition() const
Returns the global position of the pixel cluster.
float widthInEta() const
Returns the width of the cluster in phi (x) and eta (y) directions, respectively.
void setRDOlist(const std::vector< Identifier > &rdolist)
Sets the list of identifiers of the channels building the cluster.
void setWidthInEta(float widthInEta)
Sets the width of the cluster in eta (y) direction.
void setSpacePoint(DetectorIDHashType idHash, const Eigen::Matrix< float, 3, 1 > &globPos, float cov_r, float cov_z, std::vector< const xAOD::UncalibratedMeasurement * > &&measurementIndexes)
void setRDOlist(const std::vector< Identifier > &rdolist)
Sets the list of identifiers of the channels building the cluster.
void setChannelsInPhi(int channelsInPhi)
Sets the dimensions of the cluster in numbers of channels in phi (x).
void setMeasurement(const DetectorIDHashType idHash, MeasVector< N > locPos, MeasMatrix< N > locCov)
Sets IdentifierHash, local position and local covariance of the measurement.
ConstMatrixMap< N > localCovariance() const
Returns the local covariance of the measurement.
DetectorIDHashType identifierHash() const
Returns the IdentifierHash of the measurement (corresponds to the detector element IdentifierHash).
void setIdentifier(const DetectorIdentType measId)
Sets the full Identifier of the measurement.
void fillPixelCluster(const MEAS &meas, const Identifier &athenaId, const PixelID *pixelID, const InDetDD::PixelDetectorManager *pixelManager, xAOD::PixelCluster &xaod_pcl, std::size_t combinedIndex)
void fillStripCluster(const MEAS &meas, const Identifier &athenaId, const SCT_ID *stripID, const InDetDD::SCT_DetectorManager *stripManager, xAOD::StripCluster &xaod_scl, std::size_t combinedIndex)
std::pair< std::unique_ptr< ContainerT >, std::unique_ptr< AuxContainerT > > makeOutputContainer(const EventContext &ctx, int n)
std::pair< int, int > countPixelStrip(const traccc::edm::measurement_collection::const_device &measurements)
Count the number of measurements 2D (pixel) vs 1D (strip).
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 2, 1 > Vector2D
uint16_t etaIndex(double eta, bool &inRange)
Definition NSWEncoding.h:38
row
Appending html table to final .html summary file.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
bool copy
Definition calibdata.py:26
unsigned int phiIndex(float phi, float binsize)
calculate phi index for a given phi
Definition EtaPhiLUT.cxx:23
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
StripCluster_v1 StripCluster
Define the version of the strip cluster class.
PixelCluster_v1 PixelCluster
Define the version of the pixel cluster class.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthCommonAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 89 of file AthCommonAlgorithm.cxx.

54{
55 // If we didn't find any symlinks to add, just return the collection
56 // from the base class. Otherwise, return the extended collection.
57 if (!m_extendedExtraObjects.empty()) {
59 }
61}
Common base class for algorithms.

◆ filterPassed()

virtual bool AthCommonAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Get filter decision:

Definition at line 93 of file AthCommonAlgorithm.h.

93 {
94 return execState( ctx ).filterPassed();
95 }
virtual bool filterPassed(const EventContext &ctx) const
Get filter decision:

◆ finalize()

StatusCode ActsTrk::TracccMeasurementConverterAlg::finalize ( )
overridevirtual

Function finalizing the algorthm.

Definition at line 463 of file TracccMeasurementConverterAlg.cxx.

464{
465 ATH_MSG_DEBUG("Finalizing.");
466
467 ATH_MSG_INFO("Received total number of measurements = " << m_nMeas
468 << ", of which pixel clusters = " << m_nPix
469 << " and strip clusters = " << m_nStrip);
470
471 ATH_MSG_DEBUG("Successfully finalized");
472 return StatusCode::SUCCESS;
473}
#define ATH_MSG_INFO(x,...)

◆ initialize()

StatusCode ActsTrk::TracccMeasurementConverterAlg::initialize ( )
overridevirtual

Function initializing the algorithm.

Definition at line 20 of file TracccMeasurementConverterAlg.cxx.

21{
22 ATH_MSG_DEBUG("Initializing.");
23
24 ATH_CHECK(m_hostMR.retrieve());
25 ATH_CHECK(m_copy.retrieve());
26
27 ATH_CHECK(m_inputMeasKey.initialize());
30
31 ATH_CHECK(m_outputPixelKey.initialize());
35 ATH_CHECK(m_outputStripKey.initialize());
36
38 ATH_CHECK(detStore()->retrieve(m_stripID, "SCT_ID"));
39 ATH_CHECK(detStore()->retrieve(m_pixelManager, "ITkPixel"));
40 ATH_CHECK(detStore()->retrieve(m_stripManager, "ITkStrip"));
41
43
44 ATH_MSG_DEBUG("Successfully initialized");
45 return StatusCode::SUCCESS;
46}
Gaudi::Property< std::string > m_geoIdMappingObjectName
const ServiceHandle< StoreGateSvc > & detStore() const

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

virtual bool AthCommonAlgorithm< Gaudi::Algorithm >::isClonable ( ) const
inlineoverridevirtualinherited

Specify if the algorithm is clonable.

Only relevant for non-reentrant algorithms. Actual number of clones needs to be set via the "Cardinality" property.

Reimplemented in AFP_DigiTop, AlgB, AlgT, BCM_Digitization, CscDigitBuilder, CscDigitToCscRDO, G4AtlasAlg, G4RunAlg, HGTD_Digitization, HiveAlgBase, InDet::GNNSeedingTrackMaker, InDet::SCT_Clusterization, InDet::SiSPGNNTrackMaker, InDet::SiSPSeededTrackFinder, InDet::SiTrackerSpacePointFinder, ISF::SimKernelMT, ITk::StripDigitization, ITkPixelCablingAlg, ITkStripCablingAlg, LArHitEMapMaker, LArTTL1Maker, LUCID_DigiTop, LVL1::L1TopoSimulation, MergeCalibHits, MergeGenericMuonSimHitColl, MergeHijingPars, MergeMcEventCollection, MergeTrackRecordCollection, MergeTruthJets, MergeTruthParticles, MuonDigitizer, PileUpMTAlg, PixelDigitization, RoIBResultToxAOD, SCT_ByteStreamErrorsTestAlg, SCT_CablingCondAlgFromCoraCool, SCT_CablingCondAlgFromText, SCT_ConditionsParameterTestAlg, SCT_ConditionsSummaryTestAlg, SCT_ConfigurationConditionsTestAlg, SCT_Digitization, SCT_FlaggedConditionTestAlg, SCT_LinkMaskingTestAlg, SCT_MajorityConditionsTestAlg, SCT_ModuleVetoTestAlg, SCT_MonitorConditionsTestAlg, SCT_PrepDataToxAOD, SCT_RawDataToxAOD, SCT_ReadCalibChipDataTestAlg, SCT_ReadCalibDataTestAlg, SCT_RODVetoTestAlg, SCT_SensorsTestAlg, SCT_SiliconConditionsTestAlg, SCT_StripVetoTestAlg, SCT_TdaqEnabledTestAlg, SCT_TestCablingAlg, SCTEventFlagWriter, SCTRawDataProvider, SCTSiLorentzAngleTestAlg, SCTSiPropertiesTestAlg, SGInputLoader, Simulation::BeamEffectsAlg, TileHitVecToCnt, TileMuonFitter, TilePulseForTileMuonReceiver, TileRawChannelMaker, TRTDigitization, and ZDC_DigiTop.

Definition at line 68 of file AthCommonAlgorithm.h.

68 {
69 return true;
70 }

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 368 of file AthCommonDataStore.h.

369 {
370 h.renounce();
372 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 352 of file AthCommonDataStore.h.

352 {
354 }

◆ setFilterPassed()

virtual void AthCommonAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Set filter decision:

Definition at line 99 of file AthCommonAlgorithm.h.

99 {
101 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const
Set filter decision:

◆ sysExecute()

StatusCode AthCommonAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Reimplemented in AthAnalysisAlgorithm.

Definition at line 80 of file AthCommonAlgorithm.cxx.

41{
42 return BaseAlg::sysExecute (ctx);
43}

◆ sysInitialize()

StatusCode AthCommonAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthHistogramAlgorithm, HypoBase, InputMakerBase, and PyAthena::Alg.

Definition at line 60 of file AthCommonAlgorithm.cxx.

71 {
73
74 if (sc.isFailure()) {
75 return sc;
76 }
77
78 ServiceHandle<ICondSvc> cs("CondSvc",name());
79 for (auto h : outputHandles()) {
80 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
81 // do this inside the loop so we don't create the CondSvc until needed
82 if ( cs.retrieve().isFailure() ) {
83 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
85 }
86 if (cs->regHandle(this,*h).isFailure()) {
88 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
89 << " with CondSvc");
90 }
91 }
92 }
93 return sc;
94}
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
virtual StatusCode sysInitialize() override
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 298 of file AthCommonDataStore.h.

298 {
299 for (auto &a : m_vhka) {
301 for (auto k : keys) {
302 k->setOwner(this);
303 }
304 }
305 }

Member Data Documentation

◆ m_convertClustersWithCells

Gaudi::Property<bool> ActsTrk::TracccMeasurementConverterAlg::m_convertClustersWithCells
private
Initial value:
{
this, "ConvertClustersWithCells", true,
"Whether to associate cells with the clusters."}

Definition at line 71 of file TracccMeasurementConverterAlg.h.

71 {
72 this, "ConvertClustersWithCells", true,
73 "Whether to associate cells with the clusters."};

◆ m_copy

ToolHandle<AthDevice::ICopyTool> ActsTrk::TracccMeasurementConverterAlg::m_copy
private
Initial value:
{
this, "CopyProviderTool", "", "Vecmem copy provider tool"}

Definition at line 111 of file TracccMeasurementConverterAlg.h.

111 {
112 this, "CopyProviderTool", "", "Vecmem copy provider tool"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 381 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 378 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 108 of file AthCommonAlgorithm.h.

◆ m_geoIdMappingObjectName

Gaudi::Property<std::string> ActsTrk::TracccMeasurementConverterAlg::m_geoIdMappingObjectName {this, "GeoIdMapping", "", "ID mapping between the three detector description realms."}
private

Definition at line 114 of file TracccMeasurementConverterAlg.h.

114{this, "GeoIdMapping", "", "ID mapping between the three detector description realms."};

◆ m_hostMR

ToolHandle<AthDevice::IMemoryResourceTool> ActsTrk::TracccMeasurementConverterAlg::m_hostMR
private
Initial value:
{
this, "HostMR", "", "Host memory resource tool"}

Definition at line 108 of file TracccMeasurementConverterAlg.h.

108 {
109 this, "HostMR", "", "Host memory resource tool"};

◆ m_idHelperName

Gaudi::Property<std::string> ActsTrk::TracccMeasurementConverterAlg::m_idHelperName
private
Initial value:
{this, "IDHelperName", "PixelID",
"Pixel-like ID helper name to retrieve from DetectorStore"}

Definition at line 128 of file TracccMeasurementConverterAlg.h.

128 {this, "IDHelperName", "PixelID",
129 "Pixel-like ID helper name to retrieve from DetectorStore"};

◆ m_idMapping

const ActsTrk::GeometryIdMapping* ActsTrk::TracccMeasurementConverterAlg::m_idMapping {nullptr}
private

Definition at line 115 of file TracccMeasurementConverterAlg.h.

115{nullptr};

◆ m_inputCellsKey

SG::ReadHandleKey<traccc::edm::silicon_cell_collection::buffer> ActsTrk::TracccMeasurementConverterAlg::m_inputCellsKey
private
Initial value:
{
this, "InputCells", "TracccCells",
"Input traccc cell collection buffer"}

Definition at line 83 of file TracccMeasurementConverterAlg.h.

83 {
84 this, "InputCells", "TracccCells",
85 "Input traccc cell collection buffer"};

◆ m_inputClusterKey

SG::ReadHandleKey<traccc::edm::silicon_cluster_collection::buffer> ActsTrk::TracccMeasurementConverterAlg::m_inputClusterKey
private
Initial value:
{
this, "InputClusters", "TracccClusters",
"Input traccc cluster collection buffer"}

Definition at line 80 of file TracccMeasurementConverterAlg.h.

80 {
81 this, "InputClusters", "TracccClusters",
82 "Input traccc cluster collection buffer"};

◆ m_inputMeasKey

SG::ReadHandleKey<traccc::edm::measurement_collection::buffer> ActsTrk::TracccMeasurementConverterAlg::m_inputMeasKey
private
Initial value:
{
this, "InputMeasurements", "TracccMeasurements",
"Input traccc measurement collection buffer"}

Definition at line 77 of file TracccMeasurementConverterAlg.h.

77 {
78 this, "InputMeasurements", "TracccMeasurements",
79 "Input traccc measurement collection buffer"};

◆ m_nMeas

std::atomic<int> ActsTrk::TracccMeasurementConverterAlg::m_nMeas = 0
mutableprivate

Definition at line 121 of file TracccMeasurementConverterAlg.h.

◆ m_nPix

std::atomic<int> ActsTrk::TracccMeasurementConverterAlg::m_nPix = 0
mutableprivate

The object counters for debug prints in finalize method {.

Definition at line 119 of file TracccMeasurementConverterAlg.h.

◆ m_nStrip

std::atomic<int> ActsTrk::TracccMeasurementConverterAlg::m_nStrip = 0
mutableprivate

Definition at line 120 of file TracccMeasurementConverterAlg.h.

◆ m_outputMeasToPixelSPKey

SG::WriteHandleKey<std::vector<unsigned int> > ActsTrk::TracccMeasurementConverterAlg::m_outputMeasToPixelSPKey
private
Initial value:
{
this, "OutputMeasToPixelSP", "ITkTracccMeasToPixelSP",
"Output mapping from traccc measurement index to pixel spacepoint index"}

Definition at line 96 of file TracccMeasurementConverterAlg.h.

96 {
97 this, "OutputMeasToPixelSP", "ITkTracccMeasToPixelSP",
98 "Output mapping from traccc measurement index to pixel spacepoint index"};

◆ m_outputMeasToStripClKey

SG::WriteHandleKey<std::vector<unsigned int> > ActsTrk::TracccMeasurementConverterAlg::m_outputMeasToStripClKey
private
Initial value:
{
this, "OutputMeasToStripCl", "ITkTracccMeasToStripCl",
"Output mapping from traccc measurement index to strip cluster index"}

Definition at line 99 of file TracccMeasurementConverterAlg.h.

99 {
100 this, "OutputMeasToStripCl", "ITkTracccMeasToStripCl",
101 "Output mapping from traccc measurement index to strip cluster index"};

◆ m_outputPixelKey

SG::WriteHandleKey<xAOD::PixelClusterContainer> ActsTrk::TracccMeasurementConverterAlg::m_outputPixelKey
private
Initial value:
{
this, "OutputPixelClusters", "ITkTracccPixelClusters",
"Output xAOD pixel cluster container"}

Definition at line 90 of file TracccMeasurementConverterAlg.h.

90 {
91 this, "OutputPixelClusters", "ITkTracccPixelClusters",
92 "Output xAOD pixel cluster container"};

◆ m_outputPixelSpacePointsKey

SG::WriteHandleKey<xAOD::SpacePointContainer> ActsTrk::TracccMeasurementConverterAlg::m_outputPixelSpacePointsKey
private
Initial value:
{
this, "OutputPixelSpacePoints", "ITkTracccPixelSpacepoints",
"Output xAOD pixel space point container"}

Definition at line 93 of file TracccMeasurementConverterAlg.h.

93 {
94 this, "OutputPixelSpacePoints", "ITkTracccPixelSpacepoints",
95 "Output xAOD pixel space point container"};

◆ m_outputStripKey

SG::WriteHandleKey<xAOD::StripClusterContainer> ActsTrk::TracccMeasurementConverterAlg::m_outputStripKey
private
Initial value:
{
this, "OutputStripClusters", "ITkTracccStripClusters",
"Output xAOD strip cluster container"}

Definition at line 102 of file TracccMeasurementConverterAlg.h.

102 {
103 this, "OutputStripClusters", "ITkTracccStripClusters",
104 "Output xAOD strip cluster container"};

◆ m_pixelID

const PixelID* ActsTrk::TracccMeasurementConverterAlg::m_pixelID {nullptr}
private

Conversion helpers (to retrieve module design, hash, etc.) {.

Definition at line 126 of file TracccMeasurementConverterAlg.h.

126{nullptr};

◆ m_pixelManager

const InDetDD::PixelDetectorManager* ActsTrk::TracccMeasurementConverterAlg::m_pixelManager {nullptr}
private

Definition at line 131 of file TracccMeasurementConverterAlg.h.

131{nullptr};

◆ m_stripID

const SCT_ID* ActsTrk::TracccMeasurementConverterAlg::m_stripID {nullptr}
private

Definition at line 127 of file TracccMeasurementConverterAlg.h.

127{nullptr};

◆ m_stripManager

const InDetDD::SCT_DetectorManager* ActsTrk::TracccMeasurementConverterAlg::m_stripManager {nullptr}
private

Definition at line 132 of file TracccMeasurementConverterAlg.h.

132{nullptr};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 387 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 386 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: