49 std::vector<const confmodel::DaqModule*> modules;
60 throw(BadConf(
ERS_HERE,
"No TPPM configuration in TPReplayApplication given"));
63 const std::string tprm_uid(tprm_conf->UID());
64 const std::string tprm_class = tprm_conf->get_template_for();
65 auto tpm_obj = obj_fac.
create(tprm_class, tprm_uid);
66 tpm_obj.
set_obj(
"configuration", &(tprm_conf->config_object()));
71 const int total_planes = tprm_conf->get_total_planes();
76 const auto plane_filtering = tprm_conf->get_filter_out_plane();
77 if (plane_filtering.size() >= 3) {
79 "TPReplayApplication: too many planes configured for filtering! At most 2 planes can be filtered!"));
87 throw(BadConf(
ERS_HERE,
"TP handler configuration object is missing"));
89 std::string tph_class =
"";
90 if (tph_conf !=
nullptr) {
91 tph_class = tph_conf->get_template_for();
95 std::vector<conffwk::ConfigObject> TPHs;
96 std::vector<std::string> TPHs_uids;
100 if (tpsrc_ids.size() <
static_cast<size_t>(total_planes)) {
101 throw(BadConf(
ERS_HERE,
"Not enough TP source IDs provided"));
104 const auto tph_conf_obj = tph_conf->config_object();
105 for (
int i = 0; i < total_planes; i++) {
106 std::string tp_uid =
"tphandler-tpreplay-" + std::to_string(i + 1);
107 TPHs_uids.push_back(tp_uid);
108 auto tph_obj = obj_fac.
create(tph_class, tp_uid);
109 tph_obj.
set_by_val<uint32_t>(
"source_id", tpsrc_ids[i]->get_sid());
110 tph_obj.set_by_val<uint32_t>(
"detector_id", 1);
111 tph_obj.set_by_val<
bool>(
"post_processing_enabled",
true);
112 tph_obj.set_obj(
"module_configuration", &tph_conf_obj);
113 TPHs.push_back(tph_obj);
123 auto destination_class = rule->get_destination_class();
124 auto data_type = rule->get_descriptor()->get_data_type();
125 if (destination_class ==
"TriggerDataHandlerModule" && data_type ==
"TriggerPrimitiveVector") {
126 tp_inputq_desc = rule->get_descriptor();
129 if (!tp_inputq_desc) {
130 throw(BadConf(
ERS_HERE,
"No matching queue descriptor found for TP input"));
134 std::vector<conffwk::ConfigObject> TP_queues;
135 for (
int i = 0; i < total_planes; i++) {
136 std::string tp_q_uid =
"tpinput-" + std::to_string(i + 1);
138 TP_queues.push_back(tp_q_obj);
148 auto endpoint_class = rule->get_endpoint_class();
149 auto data_type = rule->get_descriptor()->get_data_type();
150 if (data_type ==
"TriggerActivity") {
151 ta_net_desc = rule->get_descriptor();
152 }
else if (data_type ==
"DataRequest") {
153 dr_net_desc = rule->get_descriptor();
156 if (!ta_net_desc || !dr_net_desc) {
157 throw(BadConf(
ERS_HERE,
"Missing network descriptors for TA or DR"));
161 std::vector<conffwk::ConfigObject> ta_net_objects;
162 std::vector<conffwk::ConfigObject> dr_net_objects;
165 for (
int i = 0; i < total_planes; i++) {
167 const std::string ta_stream_uid = ta_net_desc->
get_uid_base() +
UID() +
"-" + std::to_string(i + 1);
168 auto ta_net_obj = obj_fac.
create_net_obj(ta_net_desc, ta_stream_uid);
169 ta_net_obj.
set_obj(
"associated_service", &ta_service_obj);
170 ta_net_objects.push_back(ta_net_obj);
174 for (
int i = 0; i < total_planes; i++) {
177 std::ostringstream oss;
178 oss <<
UID() <<
"-1000" << std::setfill(
'0') << std::setw(2)
180 const std::string dr_stream_uid = oss.str();
181 auto dr_net_obj = obj_fac.
create_net_obj(dr_net_desc, dr_stream_uid);
182 dr_net_obj.
set_obj(
"associated_service", &dr_service_obj);
183 dr_net_objects.push_back(dr_net_obj);
190 std::vector<const conffwk::ConfigObject*> raw_tp_queues;
191 for (
const auto& tp_queue : TP_queues) {
192 raw_tp_queues.push_back(&tp_queue);
194 tpm_obj.set_objs(
"outputs", raw_tp_queues);
196 for (
int i = 0; i < total_planes; i++) {
198 const std::vector<const conffwk::ConfigObject*> temp_inputs = { &TP_queues[i], &dr_net_objects[i] };
199 const std::vector<const conffwk::ConfigObject*> temp_outputs = { &ta_net_objects[i] };
200 TPHs[i].set_objs(
"inputs", temp_inputs);
201 TPHs[i].set_objs(
"outputs", temp_outputs);
206 for (
int i = 0; i < total_planes; i++) {