File indexing completed on 2026-04-17 07:50:37
0001
0002
0003
0004 #include "ActsTrackMerger.h"
0005
0006 #include <Acts/EventData/MeasurementHelpers.hpp>
0007 #include <Acts/EventData/TrackContainer.hpp>
0008 #include <Acts/EventData/TrackProxy.hpp>
0009 #include <Acts/EventData/TrackStatePropMask.hpp>
0010 #include <Acts/EventData/VectorMultiTrajectory.hpp>
0011 #include <Acts/EventData/VectorTrackContainer.hpp>
0012 #include <ActsExamples/EventData/Track.hpp>
0013 #include <Eigen/LU> // IWYU pragma: keep
0014 #include <any>
0015 #include <gsl/pointers>
0016 #include <memory>
0017 #include <utility>
0018 #include <vector>
0019
0020 namespace eicrecon {
0021
0022 void ActsTrackMerger::process(const Input& input, const Output& output) const {
0023 const auto [input_track_states1, input_tracks1, input_track_states2, input_tracks2] = input;
0024 auto [output_track_states, output_tracks] = output;
0025
0026
0027 std::vector<ActsExamples::ConstTrackContainer> input_containers;
0028
0029
0030 auto trackStateContainer1 =
0031 std::make_shared<Acts::ConstVectorMultiTrajectory>(*input_track_states1);
0032 auto trackContainer1 = std::make_shared<Acts::ConstVectorTrackContainer>(*input_tracks1);
0033 input_containers.emplace_back(trackContainer1, trackStateContainer1);
0034
0035
0036 auto trackStateContainer2 =
0037 std::make_shared<Acts::ConstVectorMultiTrajectory>(*input_track_states2);
0038 auto trackContainer2 = std::make_shared<Acts::ConstVectorTrackContainer>(*input_tracks2);
0039 input_containers.emplace_back(trackContainer2, trackStateContainer2);
0040
0041
0042 auto mergedTrackContainer = std::make_shared<Acts::VectorTrackContainer>();
0043 auto mergedTrackStateContainer = std::make_shared<Acts::VectorMultiTrajectory>();
0044 ActsExamples::TrackContainer mergedTracks(mergedTrackContainer, mergedTrackStateContainer);
0045
0046
0047 for (const auto& inputContainer : input_containers) {
0048
0049 mergedTracks.ensureDynamicColumns(inputContainer);
0050
0051
0052 for (const auto& srcTrack : inputContainer) {
0053 auto destTrack = mergedTracks.makeTrack();
0054 destTrack.copyFrom(srcTrack);
0055 }
0056 }
0057
0058
0059
0060 *output_track_states =
0061 new Acts::ConstVectorMultiTrajectory(std::move(*mergedTrackStateContainer));
0062 *output_tracks = new Acts::ConstVectorTrackContainer(std::move(*mergedTrackContainer));
0063 }
0064
0065 }