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/ReadoutLogging.hpp"
15 : #include "datahandlinglibs/DataHandlingIssues.hpp"
16 : //#include "datahandlinglibs/sourceemulatorconfig/Nljs.hpp"
17 : #include "datahandlinglibs/models/SourceEmulatorModel.hpp"
18 : #include "appmodel/DataReaderModule.hpp"
19 :
20 : //#include "fdreadoutlibs/DUNEWIBSuperChunkTypeAdapter.hpp"
21 : #include "fdreadoutlibs/DUNEWIBEthTypeAdapter.hpp"
22 : #include "fdreadoutlibs/DAPHNESuperChunkTypeAdapter.hpp"
23 : #include "fdreadoutlibs/DAPHNEStreamSuperChunkTypeAdapter.hpp"
24 : #include "fdreadoutlibs/TDEEthTypeAdapter.hpp"
25 : #include "fdreadoutlibs/CRTBernTypeAdapter.hpp"
26 : #include "fdreadoutlibs/CRTGrenobleTypeAdapter.hpp"
27 : #include "fdreadoutlibs/DAPHNEEthTypeAdapter.hpp"
28 : #include "fdreadoutlibs/DAPHNEEthStreamTypeAdapter.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 = fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter::expected_tick_difference;
79 0 : static constexpr double daphnestream_dropout_rate = 0.0;
80 0 : static constexpr double daphnestream_rate_khz = 62500./daphnestream_time_tick_diff/fdreadoutlibs::types::kDAPHNEStreamNumFrames;
81 0 : static constexpr int daphnestream_frames_per_tick = 1;
82 :
83 0 : static constexpr int daphne_time_tick_diff = fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter::expected_tick_difference;
84 0 : static constexpr double daphne_dropout_rate = 0.0;
85 0 : static constexpr double daphne_rate_khz = 62500./daphne_time_tick_diff/fdreadoutlibs::types::kDAPHNENumFrames;
86 0 : static constexpr int daphne_frames_per_tick = 1;
87 :
88 0 : static constexpr int daphneeth_time_tick_diff = fdreadoutlibs::types::DAPHNEEthTypeAdapter::expected_tick_difference;
89 0 : static constexpr double daphneeth_dropout_rate = 0.0;
90 0 : static constexpr double daphneeth_rate_khz = 62500./daphneeth_time_tick_diff;
91 0 : static constexpr int daphneeth_frames_per_tick = 1;
92 :
93 0 : static constexpr int daphneethstream_time_tick_diff = fdreadoutlibs::types::DAPHNEEthStreamTypeAdapter::expected_tick_difference;
94 0 : static constexpr double daphneethstream_dropout_rate = 0.0;
95 0 : static constexpr double daphneethstream_rate_khz = 62500./daphneethstream_time_tick_diff/fdreadoutlibs::types::kDAPHNEEthStreamNumFrames;
96 0 : static constexpr int daphneethstream_frames_per_tick = 1;
97 :
98 0 : static constexpr int wibeth_time_tick_diff = fdreadoutlibs::types::DUNEWIBEthTypeAdapter::expected_tick_difference;;
99 0 : static constexpr double wibeth_dropout_rate = 0.0;
100 0 : static constexpr double wibeth_rate_khz = 62500./wibeth_time_tick_diff;
101 0 : static constexpr int wibeth_frames_per_tick = 1;
102 :
103 0 : static constexpr int tdeeth_time_tick_diff = fdreadoutlibs::types::TDEEthTypeAdapter::expected_tick_difference;
104 0 : static constexpr double tdeeth_dropout_rate = 0.0;
105 0 : static constexpr double tdeeth_rate_khz = 62500./tdeeth_time_tick_diff;
106 0 : static constexpr int tdeeth_frames_per_tick = 1;
107 :
108 0 : static constexpr int crtbern_time_tick_diff = 625;
109 0 : static constexpr double crtbern_dropout_rate = 0.0;
110 0 : static constexpr double crtbern_rate_khz = 100;
111 0 : static constexpr int crtbern_frames_per_tick = 1;
112 :
113 0 : static constexpr int crtgrenoble_time_tick_diff = 625;
114 0 : static constexpr double crtgrenoble_dropout_rate = 0.0;
115 0 : static constexpr double crtgrenoble_rate_khz = 100;
116 0 : static constexpr int crtgrenoble_frames_per_tick = 1;
117 :
118 0 : static constexpr double emu_frame_error_rate = 0.0;
119 :
120 0 : auto datatype = conf->get_data_type();
121 0 : TLOG() << "Choosing specialization for SourceEmulator with raw_input"
122 0 : << " [uid:" << conf->UID() << " , data_type:" << datatype << ']';
123 :
124 : // IF WIBETH
125 0 : if (datatype.find("WIBEthFrame") != std::string::npos) {
126 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake wibeth link";
127 0 : auto source_emu_model =
128 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DUNEWIBEthTypeAdapter>>(
129 0 : conf->UID(),
130 : run_marker,
131 : wibeth_time_tick_diff,
132 : wibeth_dropout_rate,
133 : emu_frame_error_rate,
134 : wibeth_rate_khz,
135 0 : wibeth_frames_per_tick);
136 0 : register_node(conf->UID(), source_emu_model);
137 0 : return source_emu_model;
138 0 : }
139 :
140 : // IF PDS
141 0 : if (datatype.find("PDSFrame") != std::string::npos) {
142 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds link";
143 0 : auto source_emu_model =
144 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter>>(
145 0 : conf->UID(),
146 : run_marker,
147 : daphne_time_tick_diff,
148 : daphne_dropout_rate,
149 : emu_frame_error_rate,
150 : daphne_rate_khz,
151 0 : daphne_frames_per_tick);
152 0 : register_node(conf->UID(), source_emu_model);
153 0 : return source_emu_model;
154 0 : }
155 :
156 : // IF PDS Ethernet
157 0 : if (datatype.find("DAPHNEEthFrame") != std::string::npos) {
158 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds link";
159 0 : auto source_emu_model =
160 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNEEthTypeAdapter>>(
161 0 : conf->UID(),
162 : run_marker,
163 : daphneeth_time_tick_diff,
164 : daphneeth_dropout_rate,
165 : emu_frame_error_rate,
166 : daphneeth_rate_khz,
167 0 : daphneeth_frames_per_tick);
168 0 : register_node(conf->UID(), source_emu_model);
169 0 : return source_emu_model;
170 0 : }
171 :
172 : // IF PDSStream
173 0 : if (datatype.find("PDSStreamFrame") != std::string::npos) {
174 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds stream link";
175 0 : auto source_emu_model =
176 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter>>(
177 0 : conf->UID(),
178 : run_marker,
179 : daphnestream_time_tick_diff,
180 : daphnestream_dropout_rate,
181 : emu_frame_error_rate,
182 : daphnestream_rate_khz,
183 0 : daphnestream_frames_per_tick);
184 0 : register_node(conf->UID(), source_emu_model);
185 0 : return source_emu_model;
186 0 : }
187 :
188 : // IF PDS Eth Stream
189 0 : if (datatype.find("DAPHNEEthStreamFrame") != std::string::npos) {
190 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds stream link";
191 0 : auto source_emu_model =
192 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNEEthStreamTypeAdapter>>(
193 0 : conf->UID(),
194 : run_marker,
195 : daphneethstream_time_tick_diff,
196 : daphneethstream_dropout_rate,
197 : emu_frame_error_rate,
198 : daphneethstream_rate_khz,
199 0 : daphneethstream_frames_per_tick);
200 0 : register_node(conf->UID(), source_emu_model);
201 0 : return source_emu_model;
202 0 : }
203 :
204 : // IF TDEEth
205 0 : if (datatype.find("TDEEthFrame") != std::string::npos) {
206 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake tde link";
207 0 : auto source_emu_model =
208 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::TDEEthTypeAdapter>>(
209 0 : conf->UID(),
210 : run_marker,
211 : tdeeth_time_tick_diff,
212 : tdeeth_dropout_rate,
213 : emu_frame_error_rate,
214 : tdeeth_rate_khz,
215 0 : tdeeth_frames_per_tick);
216 0 : register_node(conf->UID(), source_emu_model);
217 0 : return source_emu_model;
218 0 : }
219 :
220 : // IF CRTBern
221 0 : if (datatype.find("CRTBernFrame") != std::string::npos) {
222 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake crt bern link";
223 0 : auto source_emu_model =
224 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::CRTBernTypeAdapter>>(
225 0 : conf->UID(),
226 : run_marker,
227 : crtbern_time_tick_diff,
228 : crtbern_dropout_rate,
229 : emu_frame_error_rate,
230 : crtbern_rate_khz,
231 0 : crtbern_frames_per_tick);
232 0 : register_node(conf->UID(), source_emu_model);
233 0 : return source_emu_model;
234 0 : }
235 :
236 : // IF CRTGrenoble
237 0 : if (datatype.find("CRTGrenobleFrame") != std::string::npos) {
238 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake crt grenoble link";
239 0 : auto source_emu_model =
240 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::CRTGrenobleTypeAdapter>>(
241 0 : conf->UID(),
242 : run_marker,
243 : crtgrenoble_time_tick_diff,
244 : crtgrenoble_dropout_rate,
245 : emu_frame_error_rate,
246 : crtgrenoble_rate_khz,
247 0 : crtgrenoble_frames_per_tick);
248 0 : register_node(conf->UID(), source_emu_model);
249 0 : return source_emu_model;
250 0 : }
251 :
252 0 : return nullptr;
253 0 : }
254 :
255 : } // namespace fdreadoutmodules
256 : } // namespace dunedaq
257 :
258 0 : DEFINE_DUNE_DAQ_MODULE(dunedaq::fdreadoutmodules::FDFakeReaderModule)
|