Line data Source code
1 : /**
2 : * @file FDFakeReaderModule.cpp FDFakeReaderModule class implementation
3 : *
4 : * This is part of the DUNE DAQ , copyright 2020.
5 : * Licensing/copyright details are in the COPYING file that you should have
6 : * received with this code.
7 : */
8 : #include "FDFakeReaderModule.hpp"
9 :
10 : // #include "appfwk/app/Nljs.hpp"
11 : // #include "appfwk/cmd/Nljs.hpp"
12 : #include "logging/Logging.hpp"
13 :
14 : #include "datahandlinglibs/DataHandlingIssues.hpp"
15 : #include "datahandlinglibs/ReadoutLogging.hpp"
16 : // #include "datahandlinglibs/sourceemulatorconfig/Nljs.hpp"
17 : #include "appmodel/DataReaderModule.hpp"
18 : #include "datahandlinglibs/models/SourceEmulatorModel.hpp"
19 :
20 : // #include "fdreadoutlibs/DUNEWIBSuperChunkTypeAdapter.hpp"
21 : #include "fdreadoutlibs/CRTBernTypeAdapter.hpp"
22 : #include "fdreadoutlibs/CRTGrenobleTypeAdapter.hpp"
23 : #include "fdreadoutlibs/DAPHNEEthStreamTypeAdapter.hpp"
24 : #include "fdreadoutlibs/DAPHNEEthTypeAdapter.hpp"
25 : #include "fdreadoutlibs/DAPHNEStreamSuperChunkTypeAdapter.hpp"
26 : #include "fdreadoutlibs/DAPHNESuperChunkTypeAdapter.hpp"
27 : #include "fdreadoutlibs/DUNEWIBEthTypeAdapter.hpp"
28 : #include "fdreadoutlibs/TDEEthTypeAdapter.hpp"
29 :
30 : #include <chrono>
31 : #include <fstream>
32 : #include <iomanip>
33 : #include <limits>
34 : #include <memory>
35 : #include <sstream>
36 : #include <string>
37 : #include <utility>
38 : #include <vector>
39 :
40 : using namespace dunedaq::datahandlinglibs::logging;
41 :
42 : namespace dunedaq {
43 :
44 : // DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DUNEWIBSuperChunkTypeAdapter, "WIB2Frame")
45 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DUNEWIBEthTypeAdapter, "WIBEthFrame")
46 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter, "PDSFrame")
47 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter, "PDSStreamFrame")
48 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DAPHNEEthTypeAdapter, "DAPHNEEthFrame")
49 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::TDEEthTypeAdapter, "TDEEthFrame")
50 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::CRTBernTypeAdapter, "CRTBernFrame")
51 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::CRTGrenobleTypeAdapter, "CRTGrenobleFrame")
52 :
53 : namespace fdreadoutmodules {
54 :
55 0 : FDFakeReaderModule::FDFakeReaderModule(const std::string& name)
56 : : DAQModule(name)
57 0 : , FakeCardReaderBase(name)
58 : {
59 0 : inherited_mod::register_command("conf", &inherited_fcr::do_conf);
60 0 : inherited_mod::register_command("scrap", &inherited_fcr::do_scrap);
61 0 : inherited_mod::register_command("start", &inherited_fcr::do_start);
62 0 : inherited_mod::register_command("stop_trigger_sources", &inherited_fcr::do_stop);
63 0 : }
64 :
65 : void
66 0 : FDFakeReaderModule::init(std::shared_ptr<appfwk::ConfigurationManager> cfg)
67 : {
68 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Entering init() method";
69 0 : inherited_fcr::init(cfg);
70 0 : TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << get_name() << ": Exiting init() method";
71 0 : }
72 :
73 : std::shared_ptr<datahandlinglibs::SourceEmulatorConcept>
74 0 : FDFakeReaderModule::create_source_emulator(const appmodel::DataMoveCallbackConf* conf, std::atomic<bool>& run_marker)
75 : {
76 : //! Values suitable to emulation
77 :
78 0 : static constexpr int daphnestream_time_tick_diff =
79 : fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter::expected_tick_difference;
80 0 : static constexpr double daphnestream_dropout_rate = 0.0;
81 0 : static constexpr double daphnestream_rate_khz =
82 : 62500. / daphnestream_time_tick_diff / fdreadoutlibs::types::kDAPHNEStreamNumFrames;
83 0 : static constexpr int daphnestream_frames_per_tick = 1;
84 :
85 0 : static constexpr int daphne_time_tick_diff =
86 : fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter::expected_tick_difference;
87 0 : static constexpr double daphne_dropout_rate = 0.0;
88 0 : static constexpr double daphne_rate_khz = 62500. / daphne_time_tick_diff / fdreadoutlibs::types::kDAPHNENumFrames;
89 0 : static constexpr int daphne_frames_per_tick = 1;
90 :
91 0 : static constexpr int daphneeth_time_tick_diff = fdreadoutlibs::types::DAPHNEEthTypeAdapter::expected_tick_difference;
92 0 : static constexpr double daphneeth_dropout_rate = 0.0;
93 0 : static constexpr double daphneeth_rate_khz = 62500. / daphneeth_time_tick_diff;
94 0 : static constexpr int daphneeth_frames_per_tick = 1;
95 :
96 0 : static constexpr int daphneethstream_time_tick_diff =
97 : fdreadoutlibs::types::DAPHNEEthStreamTypeAdapter::expected_tick_difference;
98 0 : static constexpr double daphneethstream_dropout_rate = 0.0;
99 0 : static constexpr double daphneethstream_rate_khz =
100 : 62500. / daphneethstream_time_tick_diff / fdreadoutlibs::types::kDAPHNEEthStreamNumFrames;
101 0 : static constexpr int daphneethstream_frames_per_tick = 1;
102 :
103 0 : static constexpr int wibeth_time_tick_diff = fdreadoutlibs::types::DUNEWIBEthTypeAdapter::expected_tick_difference;
104 0 : ;
105 0 : static constexpr double wibeth_dropout_rate = 0.0;
106 0 : static constexpr double wibeth_rate_khz = 62500. / wibeth_time_tick_diff;
107 0 : static constexpr int wibeth_frames_per_tick = 1;
108 :
109 0 : static constexpr int tdeeth_time_tick_diff = fdreadoutlibs::types::TDEEthTypeAdapter::expected_tick_difference;
110 0 : static constexpr double tdeeth_dropout_rate = 0.0;
111 0 : static constexpr double tdeeth_rate_khz = 62500. / tdeeth_time_tick_diff;
112 0 : static constexpr int tdeeth_frames_per_tick = 1;
113 :
114 0 : static constexpr int crtbern_time_tick_diff = 2500;
115 0 : static constexpr double crtbern_dropout_rate = 0.0;
116 0 : static constexpr double crtbern_rate_khz = 25;
117 0 : static constexpr int crtbern_frames_per_tick = 1;
118 :
119 0 : static constexpr int crtgrenoble_time_tick_diff = 2500;
120 0 : static constexpr double crtgrenoble_dropout_rate = 0.0;
121 0 : static constexpr double crtgrenoble_rate_khz = 25;
122 0 : static constexpr int crtgrenoble_frames_per_tick = 1;
123 :
124 0 : static constexpr double emu_frame_error_rate = 0.0;
125 :
126 0 : auto datatype = conf->get_data_type();
127 0 : TLOG() << "Choosing specialization for SourceEmulator with raw_input"
128 0 : << " [uid:" << conf->UID() << " , data_type:" << datatype << ']';
129 :
130 : // IF WIBETH
131 0 : if (datatype.find("WIBEthFrame") != std::string::npos) {
132 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake wibeth link";
133 0 : auto source_emu_model =
134 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DUNEWIBEthTypeAdapter>>(
135 0 : conf->UID(),
136 : run_marker,
137 : wibeth_time_tick_diff,
138 : wibeth_dropout_rate,
139 : emu_frame_error_rate,
140 : wibeth_rate_khz,
141 0 : wibeth_frames_per_tick);
142 0 : register_node(conf->UID(), source_emu_model);
143 0 : return source_emu_model;
144 0 : }
145 :
146 : // IF PDS
147 0 : if (datatype.find("PDSFrame") != std::string::npos) {
148 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds link";
149 0 : auto source_emu_model =
150 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter>>(
151 0 : conf->UID(),
152 : run_marker,
153 : daphne_time_tick_diff,
154 : daphne_dropout_rate,
155 : emu_frame_error_rate,
156 : daphne_rate_khz,
157 0 : daphne_frames_per_tick);
158 0 : register_node(conf->UID(), source_emu_model);
159 0 : return source_emu_model;
160 0 : }
161 :
162 : // IF PDS Ethernet
163 0 : if (datatype.find("DAPHNEEthFrame") != std::string::npos) {
164 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds link";
165 0 : auto source_emu_model =
166 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNEEthTypeAdapter>>(
167 0 : conf->UID(),
168 : run_marker,
169 : daphneeth_time_tick_diff,
170 : daphneeth_dropout_rate,
171 : emu_frame_error_rate,
172 : daphneeth_rate_khz,
173 0 : daphneeth_frames_per_tick);
174 0 : register_node(conf->UID(), source_emu_model);
175 0 : return source_emu_model;
176 0 : }
177 :
178 : // IF PDSStream
179 0 : if (datatype.find("PDSStreamFrame") != std::string::npos) {
180 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds stream link";
181 0 : auto source_emu_model =
182 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter>>(
183 0 : conf->UID(),
184 : run_marker,
185 : daphnestream_time_tick_diff,
186 : daphnestream_dropout_rate,
187 : emu_frame_error_rate,
188 : daphnestream_rate_khz,
189 0 : daphnestream_frames_per_tick);
190 0 : register_node(conf->UID(), source_emu_model);
191 0 : return source_emu_model;
192 0 : }
193 :
194 : // IF PDS Eth Stream
195 0 : if (datatype.find("DAPHNEEthStreamFrame") != std::string::npos) {
196 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds stream link";
197 0 : auto source_emu_model =
198 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNEEthStreamTypeAdapter>>(
199 0 : conf->UID(),
200 : run_marker,
201 : daphneethstream_time_tick_diff,
202 : daphneethstream_dropout_rate,
203 : emu_frame_error_rate,
204 : daphneethstream_rate_khz,
205 0 : daphneethstream_frames_per_tick);
206 0 : register_node(conf->UID(), source_emu_model);
207 0 : return source_emu_model;
208 0 : }
209 :
210 : // IF TDEEth
211 0 : if (datatype.find("TDEEthFrame") != std::string::npos) {
212 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake tde link";
213 0 : auto source_emu_model =
214 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::TDEEthTypeAdapter>>(
215 0 : conf->UID(),
216 : run_marker,
217 : tdeeth_time_tick_diff,
218 : tdeeth_dropout_rate,
219 : emu_frame_error_rate,
220 : tdeeth_rate_khz,
221 0 : tdeeth_frames_per_tick);
222 0 : register_node(conf->UID(), source_emu_model);
223 0 : return source_emu_model;
224 0 : }
225 :
226 : // IF CRTBern
227 0 : if (datatype.find("CRTBernFrame") != std::string::npos) {
228 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake crt bern link";
229 0 : auto source_emu_model =
230 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::CRTBernTypeAdapter>>(
231 0 : conf->UID(),
232 : run_marker,
233 : crtbern_time_tick_diff,
234 : crtbern_dropout_rate,
235 : emu_frame_error_rate,
236 : crtbern_rate_khz,
237 0 : crtbern_frames_per_tick);
238 0 : register_node(conf->UID(), source_emu_model);
239 0 : return source_emu_model;
240 0 : }
241 :
242 : // IF CRTGrenoble
243 0 : if (datatype.find("CRTGrenobleFrame") != std::string::npos) {
244 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake crt grenoble link";
245 0 : auto source_emu_model =
246 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::CRTGrenobleTypeAdapter>>(
247 0 : conf->UID(),
248 : run_marker,
249 : crtgrenoble_time_tick_diff,
250 : crtgrenoble_dropout_rate,
251 : emu_frame_error_rate,
252 : crtgrenoble_rate_khz,
253 0 : crtgrenoble_frames_per_tick);
254 0 : register_node(conf->UID(), source_emu_model);
255 0 : return source_emu_model;
256 0 : }
257 :
258 0 : return nullptr;
259 0 : }
260 :
261 : } // namespace fdreadoutmodules
262 : } // namespace dunedaq
263 :
264 0 : DEFINE_DUNE_DAQ_MODULE(dunedaq::fdreadoutmodules::FDFakeReaderModule)
|