File indexing completed on 2025-12-13 09:22:00
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "ActsExamples/Io/EDM4hep/EDM4hepMultiTrajectoryOutputConverter.hpp"
0010
0011 #include "ActsExamples/Io/EDM4hep/EDM4hepUtil.hpp"
0012 #include "ActsExamples/Validation/TrackClassification.hpp"
0013
0014 #include <stdexcept>
0015
0016 #include <edm4hep/TrackCollection.h>
0017 #include <podio/Frame.h>
0018
0019 namespace ActsExamples {
0020
0021 EDM4hepMultiTrajectoryOutputConverter::EDM4hepMultiTrajectoryOutputConverter(
0022 const EDM4hepMultiTrajectoryOutputConverter::Config& config,
0023 Acts::Logging::Level level)
0024 : PodioOutputConverter("EDM4hepMultiTrajectoryOutputConverter", level),
0025 m_cfg(config) {
0026 if (m_cfg.inputTrajectories.empty()) {
0027 throw std::invalid_argument("Missing input trajectories collection");
0028 }
0029
0030 if (m_cfg.inputMeasurementParticlesMap.empty()) {
0031 throw std::invalid_argument{"Missing input hit to particle map"};
0032 }
0033
0034 if (m_cfg.outputTracks.empty()) {
0035 throw std::invalid_argument("Missing output tracks collection");
0036 }
0037
0038 m_inputMeasurementParticlesMap.initialize(m_cfg.inputMeasurementParticlesMap);
0039 m_outputTracks.initialize(m_cfg.outputTracks);
0040 m_inputTrajectories.initialize(m_cfg.inputTrajectories);
0041 }
0042
0043 ProcessCode EDM4hepMultiTrajectoryOutputConverter::execute(
0044 const AlgorithmContext& context) const {
0045 podio::Frame frame{};
0046
0047 const auto& hitParticlesMap = m_inputMeasurementParticlesMap(context);
0048 const auto& trajectories = m_inputTrajectories(context);
0049
0050 edm4hep::TrackCollection trackCollection;
0051
0052 for (const auto& from : trajectories) {
0053 for (const auto& trackTip : from.tips()) {
0054 auto to = trackCollection.create();
0055 EDM4hepUtil::writeTrajectory(context.geoContext, m_cfg.Bz, from, to,
0056 trackTip, m_cfg.particleHypothesis,
0057 hitParticlesMap);
0058 }
0059 }
0060
0061 m_outputTracks(context, std::move(trackCollection));
0062
0063 return ProcessCode::SUCCESS;
0064 }
0065
0066 std::vector<std::string> EDM4hepMultiTrajectoryOutputConverter::collections()
0067 const {
0068 return {m_cfg.outputTracks};
0069 }
0070
0071 }