49 std::vector<const confmodel::DaqModule*> modules;
53 std::map<std::string, const confmodel::GeoId*> geo_ids;
58 if (d2d_conn_res->disabled(*
session)) {
59 TLOG_DEBUG(7) <<
"Ignoring disabled DetectorToDaqConnection " << d2d_conn_res->UID();
63 TLOG_DEBUG(6) <<
"Processing DetectorToDaqConnection " << d2d_conn_res->UID();
68 throw(BadConf(
ERS_HERE,
"DaphneApplication contains something other than DetectorToDaqConnection"));
71 if (d2d_conn->get_contains().empty()) {
72 throw(BadConf(
ERS_HERE,
"DetectorToDaqConnection does not contain senders or receivers"));
78 for (
const auto* sender : det_senders) {
80 if ( sender->disabled(*
session) ) {
81 TLOG() <<
"Skipping disabled sender: " << sender->UID();
93 auto ip = felix_sender -> get_control_host();
99 for (
const auto * det_s : streams ) {
101 if ( det_s->disabled(*
session) ) {
102 TLOG() <<
"Skipping disabled DetStream: " << det_s->UID();
106 if (!geo_ids.contains(ip)) {
108 geo_ids[ip] = temp_stream->get_geo_id();
117 for (
const auto & [ip, geo] : geo_ids ) {
119 auto slot = geo->get_slot_id();
121 const auto raw_conf = daphne_conf->get_json().at(ip);
124 std::vector<const conffwk::ConfigObject*> channels;
125 const auto raw_channels = raw_conf[
"channel_analog_conf"];
126 const auto raw_ids = raw_channels[
"ids"].get<std::vector<uint8_t>>();
127 const auto raw_gains = raw_channels[
"gains"].get<std::vector<uint8_t>>();
128 const auto raw_offsets = raw_channels[
"offsets"].get<std::vector<uint16_t>>();
129 const auto raw_trims = raw_channels[
"trims"].get<std::vector<uint16_t>>();
130 for (
size_t i = 0; i < raw_ids.size(); ++i ) {
131 auto id = raw_ids[i];
133 channel_obj.
set_by_val<uint8_t>(
"channel_id", id);
134 channel_obj.
set_by_val<uint8_t>(
"gain", raw_gains[i]);
135 channel_obj.
set_by_val<uint16_t>(
"offset", raw_offsets[i]);
136 channel_obj.
set_by_val<uint16_t>(
"trim", raw_trims[i]);
142 std::vector<const conffwk::ConfigObject*> afes;
143 const auto raw_afes = raw_conf[
"afes"];
144 const auto raw_afe_ids = raw_afes[
"ids"].get<std::vector<size_t>>();
145 const auto raw_afe_attenuators = raw_afes[
"attenuators"].get<std::vector<uint16_t>>();
146 const auto raw_afe_biases = raw_afes[
"v_biases"].get<std::vector<uint16_t>>();
147 const auto raw_adcs = raw_afes[
"adcs"];
148 const auto raw_adc_res = raw_adcs[
"resolution"].get<std::vector<uint16_t>>();
149 const auto raw_adc_format = raw_adcs[
"output_format"].get<std::vector<uint16_t>>();
150 const auto raw_adc_SB = raw_adcs[
"SB_first"].get<std::vector<uint16_t>>();
151 const auto raw_lnas = raw_afes[
"lnas"];
152 const auto raw_lna_clamps = raw_lnas[
"clamp"].get<std::vector<uint8_t>>();
153 const auto raw_lna_gains = raw_lnas[
"gain"].get<std::vector<uint8_t>>();
154 const auto raw_lna_integrators = raw_lnas[
"integrator_disable"].get<std::vector<uint16_t>>();
155 const auto raw_pgas = raw_afes[
"pgas"];
156 const auto raw_pga_cuts = raw_pgas[
"lpf_cut_frequency"].get<std::vector<uint8_t>>();
157 const auto raw_pga_integrators = raw_pgas[
"integrator_disable"].get<std::vector<uint16_t>>();
158 const auto raw_pga_gains = raw_pgas[
"gain"].get<std::vector<uint16_t>>();
159 for (
size_t i = 0; i < raw_afe_ids.size(); ++i ) {
160 auto id = raw_afe_ids[i];
164 adc_obj.
set_by_val<
bool>(
"low_resolution", raw_adc_res[i] > 0);
165 adc_obj.
set_by_val<
bool>(
"output_offset_binary", raw_adc_format[i] > 0 );
166 adc_obj.
set_by_val<
bool>(
"MSB_first", raw_adc_SB[i] > 0);
171 lna_obj.
set_by_val<uint8_t>(
"clamp", raw_lna_clamps[i]);
172 lna_obj.set_by_val<uint8_t>(
"gain", raw_lna_gains[i]);
173 lna_obj.set_by_val<
bool>(
"integrator_disable", raw_lna_integrators[i]>0);
178 pga_obj.
set_by_val<uint8_t>(
"lpf_cut_frequency", raw_pga_cuts[i]);
179 pga_obj.set_by_val<
bool>(
"gain", raw_pga_gains[i]>0);
180 pga_obj.set_by_val<
bool>(
"integrator_disable", raw_pga_integrators[i]>0);
186 afe_obj.set_by_val<uint16_t>(
"attenuator", raw_afe_attenuators[i]);
187 afe_obj.set_by_val<uint16_t>(
"v_bias", raw_afe_biases[i]);
197 board_obj.
set_by_val<uint16_t>(
"bias_ctrl", raw_conf.at(
"bias_ctrl"));
198 board_obj.
set_by_val<uint64_t>(
"self_trigger_threshold", raw_conf.at(
"self_trigger_threshold"));
199 board_obj.
set_by_val<std::vector<uint8_t>>(
"full_stream_channels",
200 raw_conf.at(
"full_stream_channels").
get<std::vector<uint8_t>>());
201 board_obj.
set_by_val<uint64_t>(
"self_trigger_xcorr", raw_conf.at(
"self_trigger_xcorr"));
202 board_obj.
set_by_val<uint32_t>(
"tp_conf", raw_conf.at(
"tp_conf"));
203 board_obj.
set_by_val<uint64_t>(
"compensator", raw_conf.at(
"compensator"));
204 board_obj.
set_by_val<uint64_t>(
"inverter", raw_conf.at(
"inverter"));
205 board_obj.
set_by_val<uint16_t>(
"slot_id", geo->get_slot_id());
206 board_obj.
set_by_val<uint16_t>(
"crate_id", geo->get_crate_id());
207 board_obj.
set_by_val<uint16_t>(
"detector_id", geo->get_detector_id());
208 board_obj.
set_objs(
"active_channels", channels);
209 board_obj.
set_objs(
"active_afes", afes);
210 board_obj.
set_obj(
"default_channel", & daphne_conf->get_default_v2_settings()->get_default_channel()->config_object());
211 board_obj.
set_obj(
"default_afe", & daphne_conf->get_default_v2_settings()->get_default_afe()->config_object());
215 module_obj.
set_by_val<std::string>(
"address", ip);
216 module_obj.set_obj(
"daphne_conf", & daphne_conf ->
config_object() );
217 module_obj.set_obj(
"board_conf", & conf ->
config_object() );
219 auto module = obj_fac.get_dal<appmodel::DaphneV2ControllerModule>(module_obj);
220 modules.push_back(module);