25 :
public JOmniFactory<FarDetectorLinearTracking_factory, FarDetectorLinearTrackingConfig> {
31 std::unique_ptr<AlgoT> m_algo;
33 VariadicPodioInput<edm4eic::Measurement2D> m_hits_input{
this};
34#if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
35 PodioInput<edm4eic::MCRecoTrackerHitLink> m_hits_links_input{
this};
37 PodioInput<edm4eic::MCRecoTrackerHitAssociation> m_hits_association_input{
this};
38 PodioOutput<edm4eic::Track> m_tracks_output{
this};
39#if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
40 PodioOutput<edm4eic::MCRecoTrackParticleLink> m_tracks_links_output{
this};
42 PodioOutput<edm4eic::MCRecoTrackParticleAssociation> m_tracks_association_output{
this};
44 ParameterRef<std::size_t> n_layer{
this,
"numLayers",
config().n_layer};
45 ParameterRef<std::vector<double>> layer_weights{
this,
"layerWeights",
config().layer_weights};
46 ParameterRef<std::size_t> layer_hits_max{
this,
"layerHitsMax",
config().layer_hits_max};
47 ParameterRef<float> chi2_max{
this,
"chi2Max",
config().chi2_max};
51 m_algo = std::make_unique<AlgoT>(
GetPrefix());
52 m_algo->level(
static_cast<algorithms::LogLevel
>(
logger()->level()));
53 m_algo->applyConfig(
config());
60 std::vector<gsl::not_null<const edm4eic::Measurement2DCollection*>> hits;
61 for (
const auto& hit : m_hits_input()) {
62 hits.push_back(gsl::not_null<const edm4eic::Measurement2DCollection*>{hit});
66 auto input = std::make_tuple(hits,
67#
if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
70 m_hits_association_input());
72 m_algo->process(input, {m_tracks_output().get(),
73#if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
74 m_tracks_links_output().get(),
76 m_tracks_association_output().get()});
77 }
catch (std::exception& e) {
78 throw JException(e.what());