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 0 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DUNEWIBEthTypeAdapter, "WIBEthFrame")
46 0 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter, "PDSFrame")
47 0 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter, "PDSStreamFrame")
48 0 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DAPHNEEthTypeAdapter, "DAPHNEEthFrame")
49 0 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::TDEEthTypeAdapter, "TDEEthFrame")
50 0 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::CRTBernTypeAdapter, "CRTBernFrame")
51 0 : 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(std::string q_id, 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 datatypes = dunedaq::iomanager::IOManager::get()->get_datatypes(q_id);
121 0 : if (datatypes.size() != 1) {
122 0 : ers::error(dunedaq::datahandlinglibs::GenericConfigurationError(ERS_HERE,
123 0 : "Multiple output data types specified! Expected only a single type!"));
124 : }
125 0 : std::string raw_dt{ *datatypes.begin() };
126 0 : TLOG() << "Choosing specialization for SourceEmulator with raw_input"
127 0 : << " [uid:" << q_id << " , data_type:" << raw_dt << ']';
128 :
129 : // IF WIBETH
130 0 : if (raw_dt.find("WIBEthFrame") != std::string::npos) {
131 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake wibeth link";
132 0 : auto source_emu_model =
133 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DUNEWIBEthTypeAdapter>>(
134 0 : q_id, run_marker, wibeth_time_tick_diff, wibeth_dropout_rate, emu_frame_error_rate, wibeth_rate_khz, wibeth_frames_per_tick);
135 0 : register_node(q_id, source_emu_model);
136 0 : return source_emu_model;
137 0 : }
138 :
139 : // IF PDS
140 0 : if (raw_dt.find("PDSFrame") != std::string::npos) {
141 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds link";
142 0 : auto source_emu_model =
143 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter>>(
144 0 : q_id, run_marker, daphne_time_tick_diff, daphne_dropout_rate, emu_frame_error_rate, daphne_rate_khz, daphne_frames_per_tick);
145 0 : register_node(q_id, source_emu_model);
146 0 : return source_emu_model;
147 0 : }
148 :
149 : // IF PDS Ethernet
150 0 : if (raw_dt.find("DAPHNEEthFrame") != std::string::npos) {
151 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds link";
152 0 : auto source_emu_model =
153 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNEEthTypeAdapter>>(
154 0 : q_id, run_marker, daphneeth_time_tick_diff, daphneeth_dropout_rate, emu_frame_error_rate, daphneeth_rate_khz, daphneeth_frames_per_tick);
155 0 : register_node(q_id, source_emu_model);
156 0 : return source_emu_model;
157 0 : }
158 :
159 : // IF PDSStream
160 0 : if (raw_dt.find("PDSStreamFrame") != std::string::npos) {
161 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds stream link";
162 0 : auto source_emu_model =
163 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter>>(
164 0 : q_id, run_marker, daphnestream_time_tick_diff, daphnestream_dropout_rate, emu_frame_error_rate, daphnestream_rate_khz, daphnestream_frames_per_tick);
165 0 : register_node(q_id, source_emu_model);
166 0 : return source_emu_model;
167 0 : }
168 :
169 : // IF PDS Eth Stream
170 0 : if (raw_dt.find("DAPHNEEthStreamFrame") != std::string::npos) {
171 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake pds stream link";
172 0 : auto source_emu_model =
173 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::DAPHNEEthStreamTypeAdapter>>(
174 0 : q_id, run_marker, daphneethstream_time_tick_diff, daphneethstream_dropout_rate, emu_frame_error_rate, daphneethstream_rate_khz, daphneethstream_frames_per_tick);
175 0 : register_node(q_id, source_emu_model);
176 0 : return source_emu_model;
177 0 : }
178 :
179 : // IF TDEEth
180 0 : if (raw_dt.find("TDEEthFrame") != std::string::npos) {
181 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake tde link";
182 0 : auto source_emu_model =
183 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::TDEEthTypeAdapter>>(
184 : q_id,
185 : run_marker,
186 : tdeeth_time_tick_diff,
187 : tdeeth_dropout_rate,
188 : emu_frame_error_rate,
189 : tdeeth_rate_khz,
190 0 : tdeeth_frames_per_tick);
191 0 : register_node(q_id, source_emu_model);
192 0 : return source_emu_model;
193 0 : }
194 :
195 : // IF CRTBern
196 0 : if (raw_dt.find("CRTBernFrame") != std::string::npos) {
197 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake crt bern link";
198 0 : auto source_emu_model =
199 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::CRTBernTypeAdapter>>(
200 0 : q_id, run_marker, crtbern_time_tick_diff, crtbern_dropout_rate, emu_frame_error_rate, crtbern_rate_khz, crtbern_frames_per_tick);
201 0 : register_node(q_id, source_emu_model);
202 0 : return source_emu_model;
203 0 : }
204 :
205 : // IF CRTGrenoble
206 0 : if (raw_dt.find("CRTGrenobleFrame") != std::string::npos) {
207 0 : TLOG_DEBUG(TLVL_WORK_STEPS) << "Creating fake crt grenoble link";
208 0 : auto source_emu_model =
209 : std::make_shared<datahandlinglibs::SourceEmulatorModel<fdreadoutlibs::types::CRTGrenobleTypeAdapter>>(
210 0 : q_id, run_marker, crtgrenoble_time_tick_diff, crtgrenoble_dropout_rate, emu_frame_error_rate, crtgrenoble_rate_khz, crtgrenoble_frames_per_tick);
211 0 : register_node(q_id, source_emu_model);
212 0 : return source_emu_model;
213 0 : }
214 :
215 0 : return nullptr;
216 0 : }
217 :
218 : } // namespace fdreadoutmodules
219 : } // namespace dunedaq
220 :
221 0 : DEFINE_DUNE_DAQ_MODULE(dunedaq::fdreadoutmodules::FDFakeReaderModule)
|