Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-06-30 07:55:48

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2024, Simon Gardner
0003 
0004 #pragma once
0005 
0006 #include <spdlog/spdlog.h>
0007 
0008 // Event Model related classes
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 /* run_number */) {}
0057 
0058   void Process(int32_t /* run_number */, uint64_t /* event_number */) {
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 } // namespace eicrecon