EICrecon
JANA based reconstruction for the EPIC detector
Loading...
Searching...
No Matches
JOmniFactoryGeneratorT.h
Go to the documentation of this file.
1// Copyright 2023, Jefferson Science Associates, LLC.
2// Subject to the terms in the LICENSE file found in the top-level directory.
3// Created by Nathan Brei
4
5#pragma once
6
7#include <JANA/JFactorySet.h>
8#include <JANA/JFactoryGenerator.h>
9#include <vector>
10
11template <class FactoryT> class JOmniFactoryGeneratorT : public JFactoryGenerator {
12public:
13 using FactoryConfigType = typename FactoryT::ConfigType;
14
15private:
16 struct TypedWiring {
17 std::string m_tag;
18 std::vector<std::string> m_default_input_tags;
19 std::vector<std::string> m_default_output_tags;
20 FactoryConfigType m_default_cfg;
21 };
22
23 struct UntypedWiring {
24 std::string m_tag;
25 std::vector<std::string> m_default_input_tags;
26 std::vector<std::string> m_default_output_tags;
27 std::map<std::string, std::string> m_config_params;
28 };
29
30public:
31 explicit JOmniFactoryGeneratorT(std::string tag, std::vector<std::string> default_input_tags,
32 std::vector<std::string> default_output_tags,
34 m_app = app;
35 m_wirings.push_back({.m_tag = tag,
36 .m_default_input_tags = default_input_tags,
37 .m_default_output_tags = default_output_tags,
38 .m_default_cfg = cfg});
39 };
40
41 explicit JOmniFactoryGeneratorT(std::string tag, std::vector<std::string> default_input_tags,
42 std::vector<std::string> default_output_tags, JApplication* app) {
43 m_app = app;
44 m_wirings.push_back({.m_tag = tag,
45 .m_default_input_tags = default_input_tags,
46 .m_default_output_tags = default_output_tags,
47 .m_default_cfg = {}});
48 }
49
50 explicit JOmniFactoryGeneratorT(JApplication* app) : m_app(app) {}
51
52 void AddWiring(std::string tag, std::vector<std::string> default_input_tags,
53 std::vector<std::string> default_output_tags, FactoryConfigType cfg) {
54
55 m_wirings.push_back({.m_tag = tag,
56 .m_default_input_tags = default_input_tags,
57 .m_default_output_tags = default_output_tags,
58 .m_default_cfg = cfg});
59 }
60
61 void AddWiring(std::string tag, std::vector<std::string> default_input_tags,
62 std::vector<std::string> default_output_tags,
63 std::map<std::string, std::string> config_params) {
64
65 // Create throwaway factory so we can populate its config using our map<string,string>.
66 FactoryT factory;
67 factory.ConfigureAllParameters(config_params);
68 auto config = factory.config();
69
70 m_wirings.push_back({.m_tag = tag,
71 .m_default_input_tags = default_input_tags,
72 .m_default_output_tags = default_output_tags,
73 .m_default_cfg = config});
74 }
75
76 void GenerateFactories(JFactorySet* factory_set) override {
77
78 for (const auto& wiring : m_wirings) {
79
80 FactoryT* factory = new FactoryT;
81 factory->SetApplication(m_app);
82 factory->SetPluginName(this->GetPluginName());
83 factory->SetFactoryName(JTypeInfo::demangle<FactoryT>());
84 factory->config() = wiring.m_default_cfg;
85
86 // Set up all of the wiring prereqs so that Init() can do its thing
87 // Specifically, it needs valid input/output tags, a valid logger, and
88 // valid default values in its Config object
89 factory->PreInit(wiring.m_tag, wiring.m_default_input_tags, wiring.m_default_output_tags);
90
91 // Factory is ready
92 factory_set->Add(factory);
93 }
94 }
95
96private:
97 std::vector<TypedWiring> m_wirings;
98 JApplication* m_app;
99};
Definition JOmniFactoryGeneratorT.h:11
void AddWiring(std::string tag, std::vector< std::string > default_input_tags, std::vector< std::string > default_output_tags, FactoryConfigType cfg)
Definition JOmniFactoryGeneratorT.h:52
JOmniFactoryGeneratorT(JApplication *app)
Definition JOmniFactoryGeneratorT.h:50
JOmniFactoryGeneratorT(std::string tag, std::vector< std::string > default_input_tags, std::vector< std::string > default_output_tags, JApplication *app)
Definition JOmniFactoryGeneratorT.h:41
void GenerateFactories(JFactorySet *factory_set) override
Definition JOmniFactoryGeneratorT.h:76
void AddWiring(std::string tag, std::vector< std::string > default_input_tags, std::vector< std::string > default_output_tags, std::map< std::string, std::string > config_params)
Definition JOmniFactoryGeneratorT.h:61
typename FactoryT::ConfigType FactoryConfigType
Definition JOmniFactoryGeneratorT.h:13
JOmniFactoryGeneratorT(std::string tag, std::vector< std::string > default_input_tags, std::vector< std::string > default_output_tags, FactoryConfigType cfg, JApplication *app)
Definition JOmniFactoryGeneratorT.h:31