50 std::vector<const confmodel::DaqModule*> modules;
61 throw(BadConf(
ERS_HERE,
"No TPPM configuration in TPReplayApplication given"));
64 const std::string tprm_uid(tprm_conf->UID());
65 const std::string tprm_class = tprm_conf->get_template_for();
66 auto tpm_obj = obj_fac.
create(tprm_class, tprm_uid);
67 tpm_obj.
set_obj(
"configuration", &(tprm_conf->config_object()));
72 const int total_planes = tprm_conf->get_total_planes();
77 const auto plane_filtering = tprm_conf->get_filter_out_plane();
78 if (plane_filtering.size() >= 3) {
80 "TPReplayApplication: too many planes configured for filtering! At most 2 planes can be filtered!"));
88 throw(BadConf(
ERS_HERE,
"TP handler configuration object is missing"));
90 std::string tph_class =
"";
91 if (tph_conf !=
nullptr) {
92 tph_class = tph_conf->get_template_for();
96 std::vector<conffwk::ConfigObject> TPHs;
97 std::vector<std::string> TPHs_uids;
101 if (tpsrc_ids.size() <
static_cast<size_t>(total_planes)) {
102 throw(BadConf(
ERS_HERE,
"Not enough TP source IDs provided"));
105 const auto tph_conf_obj = tph_conf->config_object();
106 for (
int i = 0; i < total_planes; i++) {
107 std::string tp_uid =
"tphandler-tpreplay-" + std::to_string(i + 1);
108 TPHs_uids.push_back(tp_uid);
109 auto tph_obj = obj_fac.
create(tph_class, tp_uid);
110 tph_obj.
set_by_val<uint32_t>(
"source_id", tpsrc_ids[i]->get_sid());
111 tph_obj.set_by_val<uint32_t>(
"detector_id", 1);
112 tph_obj.set_by_val<
bool>(
"post_processing_enabled",
true);
113 tph_obj.set_obj(
"module_configuration", &tph_conf_obj);
114 TPHs.push_back(tph_obj);
124 auto destination_class = rule->get_destination_class();
125 auto data_type = rule->get_descriptor()->get_data_type();
126 if (destination_class ==
"TriggerDataHandlerModule" && data_type ==
"TriggerPrimitiveVector") {
127 tp_inputq_desc = rule->get_descriptor();
130 if (!tp_inputq_desc) {
131 throw(BadConf(
ERS_HERE,
"No matching queue descriptor found for TP input"));
135 std::vector<conffwk::ConfigObject> TP_queues;
136 for (
int i = 0; i < total_planes; i++) {
137 std::string tp_q_uid =
"tpinput-" + std::to_string(i + 1);
139 TP_queues.push_back(tp_q_obj);
149 auto endpoint_class = rule->get_endpoint_class();
150 auto data_type = rule->get_descriptor()->get_data_type();
151 if (data_type ==
"TriggerActivity") {
152 ta_net_desc = rule->get_descriptor();
153 }
else if (data_type ==
"DataRequest") {
154 dr_net_desc = rule->get_descriptor();
157 if (!ta_net_desc || !dr_net_desc) {
158 throw(BadConf(
ERS_HERE,
"Missing network descriptors for TA or DR"));
162 std::vector<conffwk::ConfigObject> ta_net_objects;
163 std::vector<conffwk::ConfigObject> dr_net_objects;
166 for (
int i = 0; i < total_planes; i++) {
168 const std::string ta_stream_uid = ta_net_desc->
get_uid_base() +
UID() +
"-" + std::to_string(i + 1);
169 auto ta_net_obj = obj_fac.
create_net_obj(ta_net_desc, ta_stream_uid);
170 ta_net_obj.
set_obj(
"associated_service", &ta_service_obj);
171 ta_net_objects.push_back(ta_net_obj);
175 for (
int i = 0; i < total_planes; i++) {
178 std::ostringstream oss;
179 oss <<
UID() <<
"-1000" << std::setfill(
'0') << std::setw(2)
181 const std::string dr_stream_uid = oss.str();
182 auto dr_net_obj = obj_fac.
create_net_obj(dr_net_desc, dr_stream_uid);
183 dr_net_obj.
set_obj(
"associated_service", &dr_service_obj);
184 dr_net_objects.push_back(dr_net_obj);
191 std::vector<const conffwk::ConfigObject*> raw_tp_queues;
192 for (
const auto& tp_queue : TP_queues) {
193 raw_tp_queues.push_back(&tp_queue);
195 tpm_obj.set_objs(
"outputs", raw_tp_queues);
197 for (
int i = 0; i < total_planes; i++) {
199 const std::vector<const conffwk::ConfigObject*> temp_inputs = { &TP_queues[i], &dr_net_objects[i] };
200 const std::vector<const conffwk::ConfigObject*> temp_outputs = { &ta_net_objects[i] };
201 TPHs[i].set_objs(
"inputs", temp_inputs);
202 TPHs[i].set_objs(
"outputs", temp_outputs);
207 for (
int i = 0; i < total_planes; i++) {