File indexing completed on 2026-03-31 07:48:29
0001
0002
0003
0004 #pragma once
0005
0006 #include <ActsExamples/EventData/Track.hpp>
0007 #include <JANA/JEvent.h>
0008 #include <memory>
0009 #include <string>
0010 #include <utility>
0011 #include <vector>
0012
0013 #include "algorithms/tracking/ActsTrackMerger.h"
0014 #include "extensions/jana/JOmniFactory.h"
0015
0016 namespace eicrecon {
0017
0018
0019
0020
0021
0022
0023
0024
0025 class ActsTrackMerger_factory : public JOmniFactory<ActsTrackMerger_factory, NoConfig> {
0026 public:
0027 using AlgoT = eicrecon::ActsTrackMerger;
0028
0029 private:
0030 std::unique_ptr<AlgoT> m_algo;
0031
0032 Input<Acts::ConstVectorMultiTrajectory> m_acts_track_states1_input{this};
0033 Input<Acts::ConstVectorTrackContainer> m_acts_tracks1_input{this};
0034 Input<Acts::ConstVectorMultiTrajectory> m_acts_track_states2_input{this};
0035 Input<Acts::ConstVectorTrackContainer> m_acts_tracks2_input{this};
0036 Output<Acts::ConstVectorMultiTrajectory> m_acts_track_states_output{this};
0037 Output<Acts::ConstVectorTrackContainer> m_acts_tracks_output{this};
0038
0039 public:
0040 void Configure() {
0041 m_algo = std::make_unique<AlgoT>(this->GetPrefix());
0042 m_algo->level((algorithms::LogLevel)logger()->level());
0043 m_algo->applyConfig(config());
0044 m_algo->init();
0045 }
0046
0047 void Process(int32_t , uint64_t ) {
0048 auto track_states1_vec = m_acts_track_states1_input();
0049 auto tracks1_vec = m_acts_tracks1_input();
0050 auto track_states2_vec = m_acts_track_states2_input();
0051 auto tracks2_vec = m_acts_tracks2_input();
0052
0053 assert(!track_states1_vec.empty() && "ConstVectorMultiTrajectory vector 1 should not be empty");
0054 assert(track_states1_vec.front() != nullptr &&
0055 "ConstVectorMultiTrajectory pointer 1 should not be null");
0056 assert(!tracks1_vec.empty() && "ConstVectorTrackContainer vector 1 should not be empty");
0057 assert(tracks1_vec.front() != nullptr &&
0058 "ConstVectorTrackContainer pointer 1 should not be null");
0059 assert(!track_states2_vec.empty() && "ConstVectorMultiTrajectory vector 2 should not be empty");
0060 assert(track_states2_vec.front() != nullptr &&
0061 "ConstVectorMultiTrajectory pointer 2 should not be null");
0062 assert(!tracks2_vec.empty() && "ConstVectorTrackContainer vector 2 should not be empty");
0063 assert(tracks2_vec.front() != nullptr &&
0064 "ConstVectorTrackContainer pointer 2 should not be null");
0065
0066 m_algo->process(AlgoT::Input{track_states1_vec.front(), tracks1_vec.front(),
0067 track_states2_vec.front(), tracks2_vec.front()},
0068 AlgoT::Output{&m_acts_track_states_output().emplace_back(),
0069 &m_acts_tracks_output().emplace_back()});
0070 }
0071 };
0072
0073 }