ATLAS Offline Software
InDetToXAODSpacePointConversion.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
9 
10 namespace InDet {
11 
13  ISvcLocator *pSvcLocator)
14  : AthReentrantAlgorithm(name, pSvcLocator)
15  {}
16 
18  {
19  ATH_MSG_DEBUG("Initializing " << name() << " ...");
20 
22 
26 
30 
31  return StatusCode::SUCCESS;
32  }
33 
35  {
36  ATH_MSG_DEBUG("Executing " << name() << " ...");
37 
38  // Conds
40  const InDet::BeamSpotData* beamSpot = *beamSpotHandle;
41  auto vertex = beamSpot->beamVtx().position();
42 
43  // Convert
44  if (m_processPixel.value()) {
45  ATH_CHECK( convertPixel(ctx) );
46  }
47 
48  if (m_processStrip.value()) {
49  ATH_CHECK( convertStrip(ctx, vertex) );
51  }
52 
53  return StatusCode::SUCCESS;
54  }
55 
57  {
58  static const SG::AuxElement::Accessor< ElementLink< ::SpacePointCollection > > linkAcc("pixelSpacePointLink");
59 
60  // Input
62  ATH_CHECK( pixel_handle.isValid() );
63  const ::SpacePointContainer* pixel_container = pixel_handle.cptr();
64 
65  // Output
66  std::unique_ptr< xAOD::SpacePointContainer > pixel_xaod_container = std::make_unique< xAOD::SpacePointContainer >();
67  std::unique_ptr< xAOD::SpacePointAuxContainer > pixel_xaod_aux_container = std::make_unique< xAOD::SpacePointAuxContainer >();
68  pixel_xaod_container->setStore( pixel_xaod_aux_container.get() );
69 
70  pixel_xaod_container->reserve(pixel_container->size());
71  pixel_xaod_aux_container->reserve(pixel_container->size());
72 
73  // Conversion
74  for (const ::SpacePointCollection *spc : *pixel_container) {
75  for (const Trk::SpacePoint *sp : *spc) {
76  const InDet::PixelSpacePoint *indetSP = dynamic_cast<const InDet::PixelSpacePoint *>(sp);
77 
78  pixel_xaod_container->push_back( new xAOD::SpacePoint() );
79  ATH_CHECK( TrackingUtilities::convertTrkToXaodPixelSpacePoint(*indetSP, *pixel_xaod_container->back()) );
80 
81  // Add link to this space point
82  ElementLink< ::SpacePointCollection > link(indetSP, *spc);
83  linkAcc(*pixel_xaod_container->back()) = link;
84  }
85  }
86 
87  // Store
89  ATH_CHECK( pixel_xaod_handle.record( std::move(pixel_xaod_container), std::move(pixel_xaod_aux_container) ) );
90 
91  return StatusCode::SUCCESS;
92  }
93 
95  const Amg::Vector3D& vertex) const
96  {
97  static const SG::AuxElement::Accessor< ElementLink< ::SpacePointCollection > > linkAcc("sctSpacePointLink");
98 
99  // Input
101  ATH_CHECK( strip_handle.isValid() );
102  const ::SpacePointContainer* strip_container = strip_handle.cptr();
103 
104  // Output
105  std::unique_ptr< xAOD::SpacePointContainer > strip_xaod_container = std::make_unique< xAOD::SpacePointContainer >();
106  std::unique_ptr< xAOD::SpacePointAuxContainer > strip_xaod_aux_container = std::make_unique< xAOD::SpacePointAuxContainer >();
107  strip_xaod_container->setStore( strip_xaod_aux_container.get() );
108 
109  strip_xaod_container->reserve(strip_container->size());
110  strip_xaod_aux_container->reserve(strip_container->size());
111 
112  // Conversion
113  for (const ::SpacePointCollection *spc : *strip_container) {
114  for (const Trk::SpacePoint *sp : *spc) {
115  const InDet::SCT_SpacePoint *indetSP = dynamic_cast<const InDet::SCT_SpacePoint *>(sp);
116 
117  strip_xaod_container->push_back( new xAOD::SpacePoint() );
118  ATH_CHECK( TrackingUtilities::convertTrkToXaodStripSpacePoint(*indetSP, vertex, *strip_xaod_container->back()) );
119 
120  // Add link to this space point
121  ElementLink< ::SpacePointCollection > link(indetSP, *spc);
122  linkAcc(*strip_xaod_container->back()) = link;
123  }
124  }
125 
126  // Store
128  ATH_CHECK( strip_xaod_handle.record( std::move(strip_xaod_container), std::move(strip_xaod_aux_container) ) );
129 
130  return StatusCode::SUCCESS;
131  }
132 
133 
135  const Amg::Vector3D& vertex) const
136  {
137  // Inputs
139  ATH_CHECK( strip_overlap_handle.isValid() );
140  const ::SpacePointOverlapCollection* strip_overlap_container = strip_overlap_handle.cptr();
141 
142  // Outputs
143  std::unique_ptr< xAOD::SpacePointContainer > strip_overlap_xaod_container = std::make_unique< xAOD::SpacePointContainer >();
144  std::unique_ptr< xAOD::SpacePointAuxContainer > strip_overlap_xaod_aux_container = std::make_unique< xAOD::SpacePointAuxContainer >();
145  strip_overlap_xaod_container->setStore( strip_overlap_xaod_aux_container.get() );
146 
147  strip_overlap_xaod_container->reserve(strip_overlap_container->size());
148  strip_overlap_xaod_aux_container->reserve(strip_overlap_container->size());
149 
150  // Conversion
151  static const SG::AuxElement::Accessor< ElementLink< ::SpacePointOverlapCollection > > stripSpacePointLinkAcc("stripOverlapSpacePointLink");
152 
153  for (const Trk::SpacePoint *sp : *strip_overlap_container) {
154  const InDet::SCT_SpacePoint *indetSP = dynamic_cast<const InDet::SCT_SpacePoint *>(sp);
155 
156  strip_overlap_xaod_container->push_back( new xAOD::SpacePoint() );
157  ATH_CHECK( TrackingUtilities::convertTrkToXaodStripSpacePoint(*indetSP, vertex, *strip_overlap_xaod_container->back()) );
158 
159  ElementLink< ::SpacePointOverlapCollection > TrkLink(sp, *strip_overlap_container);
160  stripSpacePointLinkAcc( *strip_overlap_xaod_container->back() ) = TrkLink;
161  }
162 
163  // Store
165  ATH_CHECK( strip_overlap_xaod_handle.record( std::move(strip_overlap_xaod_container), std::move(strip_overlap_xaod_aux_container) ) );
166 
167  return StatusCode::SUCCESS;
168  }
169 
170 }
DataVector::reserve
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
InDet::InDetToXAODSpacePointConversion::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: InDetToXAODSpacePointConversion.h:40
Trk::SpacePoint
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:35
InDet::InDetToXAODSpacePointConversion::m_processStrip
Gaudi::Property< bool > m_processStrip
Definition: InDetToXAODSpacePointConversion.h:58
InDet::InDetToXAODSpacePointConversion::InDetToXAODSpacePointConversion
InDetToXAODSpacePointConversion(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Definition: InDetToXAODSpacePointConversion.cxx:12
InDet::InDetToXAODSpacePointConversion::m_outSpacepointsStrip
SG::WriteHandleKey< xAOD::SpacePointContainer > m_outSpacepointsStrip
Definition: InDetToXAODSpacePointConversion.h:52
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:66
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::InDetToXAODSpacePointConversion::m_inSpacepointsStrip
SG::ReadHandleKey< ::SpacePointContainer > m_inSpacepointsStrip
Definition: InDetToXAODSpacePointConversion.h:45
InDet::InDetToXAODSpacePointConversion::m_inSpacepointsPixel
SG::ReadHandleKey< ::SpacePointContainer > m_inSpacepointsPixel
Definition: InDetToXAODSpacePointConversion.h:43
xAOD::SpacePoint_v1
Definition: SpacePoint_v1.h:29
InDet::PixelSpacePoint
Definition: PixelSpacePoint.h:31
TrackingUtilities::convertTrkToXaodPixelSpacePoint
StatusCode convertTrkToXaodPixelSpacePoint(const InDet::PixelSpacePoint &trkSpacePoint, xAOD::SpacePoint &xaodSpacePoint)
Definition: SpacePointConversionUtilities.cxx:12
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:269
InDet::InDetToXAODSpacePointConversion::convertStrip
StatusCode convertStrip(const EventContext &ctx, const Amg::Vector3D &vertex) const
Definition: InDetToXAODSpacePointConversion.cxx:94
xAOD::AuxContainerBase::reserve
virtual void reserve(size_t size) override
Reserve a given size for the arrays.
Definition: AuxContainerBase.cxx:513
InDet::InDetToXAODSpacePointConversion::m_outSpacepointsPixel
SG::WriteHandleKey< xAOD::SpacePointContainer > m_outSpacepointsPixel
Definition: InDetToXAODSpacePointConversion.h:50
InDet::InDetToXAODSpacePointConversion::convertPixel
StatusCode convertPixel(const EventContext &ctx) const
Definition: InDetToXAODSpacePointConversion.cxx:56
InDet::InDetToXAODSpacePointConversion::m_outSpacepointsOverlap
SG::WriteHandleKey< xAOD::SpacePointContainer > m_outSpacepointsOverlap
Definition: InDetToXAODSpacePointConversion.h:54
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
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DataVector::back
const T * back() const
Access the last element in the collection as an rvalue.
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TrackingUtilities::convertTrkToXaodStripSpacePoint
StatusCode convertTrkToXaodStripSpacePoint(const InDet::SCT_SpacePoint &trkSpacePoint, const Amg::Vector3D &vertex, xAOD::SpacePoint &xaodSpacePoint)
Definition: SpacePointConversionUtilities.cxx:43
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
SiCluster.h
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
InDet::SCT_SpacePoint
Definition: SCT_SpacePoint.h:31
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
InDet::BeamSpotData
Definition: BeamSpotData.h:21
xAOD::SpacePointContainer
SpacePointContainer_v1 SpacePointContainer
Define the version of the space point container.
Definition: Event/xAOD/xAODInDetMeasurement/xAODInDetMeasurement/SpacePointContainer.h:14
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
InDet::InDetToXAODSpacePointConversion::m_inSpacepointsOverlap
SG::ReadHandleKey< ::SpacePointOverlapCollection > m_inSpacepointsOverlap
Definition: InDetToXAODSpacePointConversion.h:47
InDet::InDetToXAODSpacePointConversion::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: InDetToXAODSpacePointConversion.cxx:34
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:402
SpacePointConversionUtilities.h
InDet::InDetToXAODSpacePointConversion::m_processPixel
Gaudi::Property< bool > m_processPixel
Definition: InDetToXAODSpacePointConversion.h:57
InDet::InDetToXAODSpacePointConversion::convertStripOverlap
StatusCode convertStripOverlap(const EventContext &ctx, const Amg::Vector3D &vertex) const
Definition: InDetToXAODSpacePointConversion.cxx:134
InDetToXAODSpacePointConversion.h
InDet::InDetToXAODSpacePointConversion::initialize
virtual StatusCode initialize() override
Definition: InDetToXAODSpacePointConversion.cxx:17