14#include "Acts/Surfaces/PerigeeSurface.hpp"
21 const std::string &name, ISvcLocator *pSvcLocator)
43 std::string backendname{};
47 catch (
const std::runtime_error &ee){
52 return StatusCode::SUCCESS;
56 ATH_MSG_INFO(
"====> GSF fitting Statistics ============");
59 ATH_MSG_INFO(
"<========================================");
60 return StatusCode::SUCCESS;
67 m_nInputTracks.fetch_add(selectedTrackParticles->size(), std::memory_order_relaxed);
77 Acts::VectorTrackContainer trackBackend;
78 Acts::VectorMultiTrajectory trackStateBackend;
80 std::move(trackStateBackend) );
82 std::vector<const xAOD::TrackParticle *> originals;
83 originals.reserve(selectedTrackParticles->size());
87 Acts::ConstVectorTrackContainer ctrackBackend( std::move(trackContainer.container()) );
88 Acts::ConstVectorMultiTrajectory ctrackStateBackend( std::move(trackContainer.trackStateContainer()) );
89 std::unique_ptr<ActsTrk::TrackContainer> outputActsTracks = std::make_unique<ActsTrk::TrackContainer>( std::move(ctrackBackend),
90 std::move(ctrackStateBackend) );
96 if (refittedTrackHandle.
record(std::move(outputActsTracks)).isFailure()) {
97 ATH_MSG_ERROR(
"Failed to record refitted ACTS tracks with key "
99 return StatusCode::FAILURE;
105 if (outTrackParticleHandle.
record(std::make_unique<xAOD::TrackParticleContainer>(),
106 std::make_unique<xAOD::TrackParticleAuxContainer>()).isFailure()) {
107 ATH_MSG_ERROR(
"Failed to record GSF TrackParticles with key "
109 return StatusCode::FAILURE;
115 return StatusCode::SUCCESS;
119 const EventContext &ctx,
122 std::vector<const xAOD::TrackParticle*>& originals,
125 Acts::Vector3 beamPos( beamSpotData->
beamPos().x() * Acts::UnitConstants::mm,
126 beamSpotData->
beamPos().y() * Acts::UnitConstants::mm,
130 std::shared_ptr<Acts::PerigeeSurface> pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(beamPos);
144 decoHandleActsTrackLink(*in);
146 if (!actsTrackLink.
isValid()) {
147 ATH_MSG_WARNING(
"Invalid ElementLink to ACTS track for track particle ");
151 std::optional<ActsTrk::TrackContainer::ConstTrackProxy> optional_track =
153 if (!optional_track.has_value()) {
155 "Could not retrieve track from valid ElementLink for track particle");
159 ActsTrk::TrackContainer::ConstTrackProxy actstrack = optional_track.value();
162 originals.push_back(in);
164 return StatusCode::SUCCESS;
168 const EventContext &ctx,
170 const std::vector<const xAOD::TrackParticle*>& originals,
177 static const SG::AuxElement::Accessor<ElementLink<xAOD::TrackParticleContainer>>
178 originalTPLink(
"originalTrackParticle");
180 for (
const auto [track, originalTP] : Acts::zip(actsContainer, originals)) {
189 originalTPs, originalTP->index(), ctx);
191 return StatusCode::SUCCESS;
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...
#define ATH_CHECK
Evaluate an expression and check for errors.
ElementLink()
Default constructor.
#define ATH_MSG_WARNING(x)
Helpers for checking error return status codes and reporting errors.
Handle class for reading from StoreGate.
Handle class for adding a decoration to an object.
Handle class for recording to StoreGate.
ToolHandle< ActsTrk::ITrackToTrackParticleCnvTool > m_cnvTool
Gaudi::Property< int > m_MinNoSiHits
@Cut on minimum silicon hits
ActsEMBremCollectionBuilder(const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode execute(const EventContext &ctx) const override final
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_actsTrackOutLinkKey
SG::WriteHandleKey< ActsTrk::TrackContainer > m_refittedTracksKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_outputTrackParticlesKey
std::atomic_uint m_nRefittedTracks
StatusCode refitActsTracks(const EventContext &ctx, const xAOD::TrackParticleContainer &input, ActsTrk::MutableTrackContainer &trackContainer, std::vector< const xAOD::TrackParticle * > &originals, const InDet::BeamSpotData *beamSpotData) const
ActsTrk::MutableTrackContainerHandlesHelper m_refittedTracksBackendHandles
std::atomic_uint m_nInputTracks
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
StatusCode convertTracks(const EventContext &ctx, const ActsTrk::TrackContainer &actsContainer, const std::vector< const xAOD::TrackParticle * > &originals, const xAOD::TrackParticleContainer &originalTPs, xAOD::TrackParticleContainer &outputTPs, const InDet::BeamSpotData *beamSpotData) const
virtual StatusCode initialize() override final
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_actsTrackLinkKey
virtual StatusCode finalize() override final
ToolHandle< ActsTrk::IFitterTool > m_actsFitter
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_selectedTrackParticleContainerKey
Names of input output collections.
An algorithm that can be simultaneously executed in multiple threads.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
ElementLink implementation for ROOT usage.
bool isValid() const
Check if the element can be found.
const Amg::Vector3D & beamPos() const noexcept
const_pointer_type cptr()
Handle class for reading a decoration on an object.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Handle class for adding a decoration to an object.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
std::string prefixFromTrackContainerName(const std::string &tracks)
Parse TrackContainer name to get the prefix for backends The name has to contain XYZTracks,...
Acts::TrackContainer< MutableTrackBackend, MutableTrackStateBackend, Acts::detail::ValueHolder > MutableTrackContainer
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
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...
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].