41 const EventContext& ctx)
const {
46 if (input ==
nullptr) {
48 return StatusCode::FAILURE;
52 const std::size_t nTracks = input->size();
57 auto output = std::make_unique<xAOD::TrackParticleContainer>();
58 auto outputAux = std::make_unique<xAOD::AuxContainerBase>();
60 ATH_CHECK(outputHandle.record(std::move(output), std::move(outputAux)));
61 return StatusCode::SUCCESS;
73 traccc::edm::track_collection<traccc::default_algebra>::buffer
74 inputHostBuffer(std::vector<unsigned int>(input->size(), 0u),
76 traccc::edm::track_collection<traccc::default_algebra>::buffer
77 inputDeviceBuffer(std::vector<unsigned int>(input->size(), 0u),
79 hostCopy->setup(inputHostBuffer)->wait();
80 deviceCopy->setup(inputDeviceBuffer)->ignore();
83 traccc::edm::track_collection<traccc::default_algebra>::device inputHost{
85 for (
unsigned int i = 0; i < input->size(); ++i) {
86 inputHost[i].params().set_theta(input->at(i)->theta());
87 inputHost[i].params().set_phi(input->at(i)->phi());
88 inputHost[i].params().set_qop(input->at(i)->qOverP());
92 (*deviceCopy)(inputHostBuffer, inputDeviceBuffer)->ignore();
95 traccc::edm::track_collection<traccc::default_algebra>::buffer
96 outputDeviceBuffer(std::vector<unsigned int>(input->size(), 0u),
98 deviceCopy->setup(outputDeviceBuffer)->ignore();
99 traccc::edm::track_collection<traccc::default_algebra>::host
100 outputHostCollection(
m_hostMR->mr());
106 (*deviceCopy)(outputDeviceBuffer, outputHostCollection)->wait();
109 auto outputAux = std::make_unique<xAOD::AuxContainerBase>();
111 auto output = std::make_unique<xAOD::TrackParticleContainer>();
112 for (std::size_t i = 0; i < nTracks; ++i) {
113 output->push_back(std::make_unique<xAOD::TrackParticle>());
115 output->setStore(outputAux.get());
116 for (std::size_t i = 0; i < nTracks; ++i) {
118 track->setDefiningParameters(input->at(i)->d0(), input->at(i)->z0(),
119 outputHostCollection[i].params().phi(),
120 outputHostCollection[i].params().theta(),
121 outputHostCollection[i].params().qop());
126 ATH_CHECK(outputHandle.record(std::move(output), std::move(outputAux)));
129 return StatusCode::SUCCESS;
ToolHandle< AthDevice::IMemoryResourceTool > m_deviceMR
Device memory resource tool to use.
virtual StatusCode execute(const EventContext &ctx) const override
Function executing the algorithm.
ToolHandle< AthDevice::ICopyTool > m_deviceCopyTool
Device copy tool to use.
ToolHandle< AthDevice::IMemoryResourceTool > m_hostMR
Host memory resource tool to use.
ToolHandle< AthCUDA::IStreamTool > m_streamTool
Stream tool to use.
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_inputKey
The input container.
ToolHandle< AthDevice::ICopyTool > m_hostCopyTool
Host copy tool to use.
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_outputKey
The output container.
virtual StatusCode initialize() override
Function initialising the algorithm.
StatusCode calibrateOnGPU(cudaStream_t stream, const traccc::edm::track_collection< traccc::default_algebra >::const_view &input, traccc::edm::track_collection< traccc::default_algebra >::view &output)
Perform the transformation on an NVIDIA GPU.
void copyAuxStoreThinned(const SG::IConstAuxStore &orig, SG::IAuxStore ©, const SG::ThinningInfo *info)
Helper to copy an aux store while applying thinning.