Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-13 09:22:00

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
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 }  // namespace ActsExamples