File indexing completed on 2025-06-30 07:55:48
0001
0002
0003
0004 #pragma once
0005
0006 #include <spdlog/spdlog.h>
0007
0008
0009 #include <edm4eic/TrajectoryCollection.h>
0010 #include <edm4eic/TrackParametersCollection.h>
0011 #include <edm4eic/TrackCollection.h>
0012 #include <edm4eic/MCRecoTrackParticleAssociationCollection.h>
0013 #include <edm4hep/MCParticleCollection.h>
0014 #include <algorithms/fardetectors/FarDetectorMLReconstruction.h>
0015 #include <algorithms/fardetectors/FarDetectorMLReconstructionConfig.h>
0016
0017 #include "extensions/jana/JOmniFactory.h"
0018 #include <extensions/spdlog/SpdlogMixin.h>
0019 #include <spdlog/logger.h>
0020 #include <Evaluator/DD4hepUnits.h>
0021
0022 namespace eicrecon {
0023
0024 class FarDetectorMLReconstruction_factory
0025 : public JOmniFactory<FarDetectorMLReconstruction_factory, FarDetectorMLReconstructionConfig> {
0026
0027 public:
0028 using AlgoT = eicrecon::FarDetectorMLReconstruction;
0029
0030 private:
0031 std::unique_ptr<AlgoT> m_algo;
0032
0033 PodioInput<edm4eic::TrackParameters> m_trackparam_input{this};
0034 PodioInput<edm4hep::MCParticle> m_beamelectrons_input{this};
0035 PodioInput<edm4eic::Track> m_fittedtracks_input{this};
0036 PodioInput<edm4eic::MCRecoTrackParticleAssociation> m_fittedtrackassoc_input{this};
0037 PodioOutput<edm4eic::Trajectory> m_trajectory_output{this};
0038 PodioOutput<edm4eic::TrackParameters> m_trackparam_output{this};
0039 PodioOutput<edm4eic::Track> m_track_output{this};
0040 PodioOutput<edm4eic::MCRecoTrackParticleAssociation> m_trackassoc_output{this};
0041
0042 ParameterRef<std::string> m_modelPath{this, "modelPath", config().modelPath};
0043 ParameterRef<std::string> m_methodName{this, "methodName", config().methodName};
0044
0045 ParameterRef<bool> m_requireBeamElectron{this, "requireBeamElectron",
0046 config().requireBeamElectron};
0047
0048 public:
0049 void Configure() {
0050 m_algo = std::make_unique<AlgoT>(GetPrefix());
0051 m_algo->level(static_cast<algorithms::LogLevel>(logger()->level()));
0052 m_algo->applyConfig(config());
0053 m_algo->init();
0054 }
0055
0056 void ChangeRun(int32_t ) {}
0057
0058 void Process(int32_t , uint64_t ) {
0059 m_algo->process({m_trackparam_input(), m_beamelectrons_input(), m_fittedtracks_input(),
0060 m_fittedtrackassoc_input()},
0061 {m_trajectory_output().get(), m_trackparam_output().get(),
0062 m_track_output().get(), m_trackassoc_output().get()});
0063 }
0064 };
0065
0066 }