ATLAS Offline Software
ActsEMBremCollectionBuilder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "StoreGate/ReadHandle.h"
13 #include "Acts/Surfaces/PerigeeSurface.hpp"
14 
16 
18 
20  const std::string &name, ISvcLocator *pSvcLocator)
21  : AthReentrantAlgorithm(name, pSvcLocator) {}
22 
25 
27  m_actsTrackLinkKey.key();
28  ATH_CHECK(m_actsTrackLinkKey.initialize());
30 
32  ATH_CHECK(m_actsFitter.retrieve());
34 
35  std::string backendname{};
36  try {
38  }
39  catch (const std::runtime_error &ee){
40  backendname = m_refittedTracksKey.key() + "_int";
41  }
43 
44  return StatusCode::SUCCESS;
45 }
46 
48  ATH_MSG_INFO("====> GSF fitting Statistics ============");
49  ATH_MSG_INFO("Input Tracks: " << m_nInputTracks);
50  ATH_MSG_INFO("Output Tracks " << m_nRefittedTracks);
51  ATH_MSG_INFO("<========================================");
52  return StatusCode::SUCCESS;
53 }
54 
55 StatusCode ActsEMBremCollectionBuilder::execute(const EventContext &ctx) const {
56  SG::ReadHandle<xAOD::TrackParticleContainer> selectedTrackParticles(
58  ATH_CHECK(selectedTrackParticles.isValid());
59 
60  Acts::VectorTrackContainer trackBackend;
61  Acts::VectorMultiTrajectory trackStateBackend;
62  ActsTrk::MutableTrackContainer trackContainer( std::move(trackBackend),
63  std::move(trackStateBackend) );
64 
65  std::vector<const xAOD::TrackParticle *> siliconTrackParticles;
66  siliconTrackParticles.reserve(16);
67 
68  for (const xAOD::TrackParticle *trackParticle : *selectedTrackParticles) {
69  int nSiliconHits_trk =
70  summaryValueInt(*trackParticle, xAOD::numberOfSCTHits, 0);
71  nSiliconHits_trk +=
72  summaryValueInt(*trackParticle, xAOD::numberOfPixelHits, 0);
73  if (nSiliconHits_trk >= m_MinNoSiHits) {
74  siliconTrackParticles.push_back(trackParticle);
75  }
76  }
77 
78  ATH_CHECK(refitActsTracks(ctx, siliconTrackParticles, trackContainer));
79 
80  // make const
81  Acts::ConstVectorTrackContainer ctrackBackend( std::move(trackContainer.container()) );
82  Acts::ConstVectorMultiTrajectory ctrackStateBackend( std::move(trackContainer.trackStateContainer()) );
83  std::unique_ptr<ActsTrk::TrackContainer> outputTracks = std::make_unique<ActsTrk::TrackContainer>( std::move(ctrackBackend),
84  std::move(ctrackStateBackend) );
85 
87 
88  if (refittedTrackHandle.record(std::move(outputTracks)).isFailure()) {
89  ATH_MSG_ERROR("Failed to record refitted ACTS tracks with key "
91  return StatusCode::FAILURE;
92  }
93 
94  const size_t inputCount = selectedTrackParticles->size();
95  const size_t refittedCount = trackContainer.size();
96 
97  m_nInputTracks.fetch_add(inputCount, std::memory_order_relaxed);
98  m_nRefittedTracks.fetch_add(refittedCount, std::memory_order_relaxed);
99 
100  return StatusCode::SUCCESS;
101 }
102 
104  const EventContext &ctx,
105  const std::vector<const xAOD::TrackParticle *> &input,
107  // Get Beam pos and make pSurface
109  ATH_CHECK( beamSpotHandle.isValid() );
110  const InDet::BeamSpotData* beamSpotData = beamSpotHandle.cptr();
111 
112  // Beam Spot Position
113  Acts::Vector3 beamPos( beamSpotData->beamPos().x() * Acts::UnitConstants::mm,
114  beamSpotData->beamPos().y() * Acts::UnitConstants::mm,
115  0 );
116 
117  // Construct a perigee surface as the target surface
118  std::shared_ptr<Acts::PerigeeSurface> pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(beamPos);
119 
120 
121  for (const xAOD::TrackParticle *in : input) {
124  decoHandleActsTrackLink(m_actsTrackLinkKey, ctx);
125  const ElementLink<ActsTrk::TrackContainer> &actsTrackLink =
126  decoHandleActsTrackLink(*in);
127 
128  if (!actsTrackLink.isValid()) {
129  ATH_MSG_WARNING("Invalid ElementLink to ACTS track for track particle ");
130  continue;
131  }
132 
133  std::optional<ActsTrk::TrackContainer::ConstTrackProxy> optional_track =
134  *actsTrackLink;
135  if (!optional_track.has_value()) {
137  "Could not retrieve track from valid ElementLink for track particle");
138  continue;
139  }
140 
141  ActsTrk::TrackContainer::ConstTrackProxy actstrack = optional_track.value();
142 
143  ATH_CHECK(m_actsFitter->fit(ctx, actstrack, trackContainer, *pSurface.get()));
144  }
145  return StatusCode::SUCCESS;
146 }
ActsEMBremCollectionBuilder::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: ActsEMBremCollectionBuilder.h:81
python.SystemOfUnits.mm
float mm
Definition: SystemOfUnits.py:98
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ActsEMBremCollectionBuilder::m_actsTrackLinkKey
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_actsTrackLinkKey
Definition: ActsEMBremCollectionBuilder.h:63
ActsEMBremCollectionBuilder::ActsEMBremCollectionBuilder
ActsEMBremCollectionBuilder(const std::string &name, ISvcLocator *pSvcLocator)
Definition: ActsEMBremCollectionBuilder.cxx:19
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
TruthParticleContainer.h
ActsTrk::MutableTrackContainer
Acts::TrackContainer< MutableTrackBackend, MutableTrackStateBackend, Acts::detail::ValueHolder > MutableTrackContainer
Definition: TrackContainer.h:26
xAOD::TrackParticleContainer
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
Definition: Event/xAOD/xAODTracking/xAODTracking/TrackParticleContainer.h:14
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:210
ActsTrk::prefixFromTrackContainerName
std::string prefixFromTrackContainerName(const std::string &tracks)
Parse TrackContainer name to get the prefix for backends The name has to contain XYZTracks,...
Definition: TrackContainerHandlesHelper.cxx:20
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:260
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
ActsTrk::MutableTrackContainerHandlesHelper::initialize
StatusCode initialize(const std::string &prefix)
Sets up the handles.
Definition: TrackContainerHandlesHelper.cxx:47
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:74
ActsEMBremCollectionBuilder.h
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:274
ActsEMBremCollectionBuilder::m_nRefittedTracks
std::atomic_uint m_nRefittedTracks
Definition: ActsEMBremCollectionBuilder.h:84
WriteHandle.h
Handle class for recording to StoreGate.
EgammaxAODHelpers.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
TrackParticleAuxContainer.h
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
ActsEMBremCollectionBuilder::m_refittedTracksBackendHandles
ActsTrk::MutableTrackContainerHandlesHelper m_refittedTracksBackendHandles
Definition: ActsEMBremCollectionBuilder.h:75
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
ActsEMBremCollectionBuilder::refitActsTracks
StatusCode refitActsTracks(const EventContext &ctx, const std::vector< const xAOD::TrackParticle * > &input, ActsTrk::MutableTrackContainer &trackContainer) const
Definition: ActsEMBremCollectionBuilder.cxx:103
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
python.TrackLeptonConfig.trackContainer
string trackContainer
Definition: TrackLeptonConfig.py:23
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
ActsEMBremCollectionBuilder::m_actsFitter
ToolHandle< ActsTrk::IFitterTool > m_actsFitter
Definition: ActsEMBremCollectionBuilder.h:60
ActsEMBremCollectionBuilder::m_nInputTracks
std::atomic_uint m_nInputTracks
Definition: ActsEMBremCollectionBuilder.h:83
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
xAOD::EgammaHelpers::summaryValueInt
int summaryValueInt(const xAOD::TrackParticle &tp, const xAOD::SummaryType &info, int deflt=-999)
return the summary value for a TrackParticle or default value (-999) (to be used mostly in python whe...
Definition: EgammaxAODHelpers.cxx:161
InDet::BeamSpotData::beamPos
const Amg::Vector3D & beamPos() const noexcept
Definition: BeamSpotData.h:68
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
errorcheck.h
Helpers for checking error return status codes and reporting errors.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
ActsEMBremCollectionBuilder::m_MinNoSiHits
Gaudi::Property< int > m_MinNoSiHits
@Cut on minimum silicon hits
Definition: ActsEMBremCollectionBuilder.h:56
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
ActsEMBremCollectionBuilder::initialize
virtual StatusCode initialize() override final
Definition: ActsEMBremCollectionBuilder.cxx:23
InDet::BeamSpotData
Definition: BeamSpotData.h:21
ActsEMBremCollectionBuilder::m_refittedTracksKey
SG::WriteHandleKey< ActsTrk::TrackContainer > m_refittedTracksKey
Definition: ActsEMBremCollectionBuilder.h:77
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ActsEMBremCollectionBuilder::execute
virtual StatusCode execute(const EventContext &ctx) const override final
Definition: ActsEMBremCollectionBuilder.cxx:55
ActsEMBremCollectionBuilder::m_trackingGeometryTool
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
Definition: ActsEMBremCollectionBuilder.h:72
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:269
ActsEMBremCollectionBuilder::finalize
virtual StatusCode finalize() override final
Definition: ActsEMBremCollectionBuilder.cxx:47
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ReadHandle.h
Handle class for reading from StoreGate.
TruthParticle.h
ActsEMBremCollectionBuilder::m_selectedTrackParticleContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_selectedTrackParticleContainerKey
Names of input output collections.
Definition: ActsEMBremCollectionBuilder.h:68
TrackParticleContainer.h
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:71