Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-06-06 08:35:12

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2024 Minjung Kim, Barak Schmookler
0003 #pragma once
0004 
0005 #include "algorithms/tracking/AmbiguitySolver.h"
0006 #include "algorithms/tracking/AmbiguitySolverConfig.h"
0007 #include "extensions/jana/JOmniFactory.h"
0008 #include "extensions/spdlog/SpdlogMixin.h"
0009 #include <ActsExamples/EventData/Track.hpp>
0010 #include <JANA/JEvent.h>
0011 #include <memory>
0012 #include <string>
0013 #include <utility>
0014 #include <vector>
0015 
0016 namespace eicrecon {
0017 
0018 class AmbiguitySolver_factory
0019     : public JOmniFactory<AmbiguitySolver_factory, AmbiguitySolverConfig> {
0020 
0021 private:
0022   using AlgoT = eicrecon::AmbiguitySolver;
0023   std::unique_ptr<AlgoT> m_algo;
0024 
0025   Input<ActsExamples::ConstTrackContainer> m_acts_tracks_input{this};
0026   PodioInput<edm4eic::Measurement2D> m_measurements_input{this};
0027   Output<ActsExamples::ConstTrackContainer> m_acts_tracks_output{this};
0028   Output<ActsExamples::Trajectories> m_acts_trajectories_output{this};
0029 
0030   ParameterRef<std::uint32_t> m_maximumSharedHits{this, "maximumSharedHits",
0031                                                   config().maximum_shared_hits,
0032                                                   "Maximum number of shared hits allowed"};
0033   ParameterRef<std::uint32_t> m_maximumIterations{
0034       this, "maximumIterations", config().maximum_iterations, "Maximum number of iterations"};
0035   ParameterRef<std::size_t> m_nMeasurementsMin{
0036       this, "nMeasurementsMin", config().n_measurements_min,
0037       "Number of measurements required for further reconstruction"};
0038 
0039 public:
0040   void Configure() {
0041     m_algo = std::make_unique<AlgoT>();
0042     m_algo->applyConfig(config());
0043     m_algo->init(logger());
0044   }
0045 
0046   void ChangeRun(int32_t /* run_number */) {}
0047 
0048   void Process(int32_t /* run_number */, uint64_t /* event_number */) {
0049     std::tie(m_acts_tracks_output(), m_acts_trajectories_output()) =
0050         m_algo->process(m_acts_tracks_input(), *m_measurements_input());
0051   }
0052 };
0053 
0054 } // namespace eicrecon