Line data Source code
1 : /**
2 : * @file unpack.cpp Python bindings for python unpackers of data
3 : *
4 : * This is part of the DUNE DAQ Software Suite, copyright 2020.
5 : * Licensing/copyright details are in the COPYING file that you should have
6 : * received with this code.
7 : */
8 :
9 : #include "daqdataformats/Fragment.hpp"
10 : #include "fddetdataformats/DAPHNEEthFrame.hpp"
11 : #include "fddetdataformats/DAPHNEEthStreamFrame.hpp"
12 : #include "fddetdataformats/DAPHNEFrame.hpp"
13 : #include "fddetdataformats/TDEEthFrame.hpp"
14 : #include "fddetdataformats/WIBEthFrame.hpp"
15 :
16 : #include <pybind11/numpy.h>
17 : #include <pybind11/pybind11.h>
18 : #include <pybind11/stl.h>
19 :
20 : #include <fmt/core.h>
21 :
22 : namespace py = pybind11;
23 :
24 : namespace dunedaq {
25 : namespace rawdatautils {
26 :
27 : void
28 0 : print_hex_fragment(daqdataformats::Fragment const& frag)
29 : {
30 0 : uint64_t* data = static_cast<uint64_t*>(frag.get_data());
31 0 : size_t data_size = (frag.get_size() - sizeof(daqdataformats::FragmentHeader)) / 8;
32 :
33 0 : for (size_t i(0); i < data_size; ++i) {
34 0 : fmt::print("{:06d} 0x{:016x}\n", i, data[i]);
35 : }
36 0 : }
37 :
38 : namespace wibeth {
39 : extern uint32_t
40 : get_n_frames(daqdataformats::Fragment const& frag);
41 : extern py::array_t<uint16_t>
42 : np_array_adc(daqdataformats::Fragment const& frag);
43 : extern py::array_t<uint16_t>
44 : np_array_adc_data(void* data, uint32_t n_frames);
45 : extern py::array_t<uint64_t>
46 : np_array_timestamp(daqdataformats::Fragment const& frag);
47 : extern py::array_t<uint64_t>
48 : np_array_timestamp_data(void* data, uint32_t n_frames);
49 : }
50 :
51 : namespace daphne {
52 : extern uint32_t
53 : get_n_frames(daqdataformats::Fragment const& frag);
54 : extern py::array_t<uint16_t>
55 : np_array_adc(daqdataformats::Fragment& frag);
56 : extern py::array_t<uint8_t>
57 : np_array_channels(daqdataformats::Fragment& frag);
58 : extern py::array_t<uint16_t>
59 : np_array_adc_data(void* data, int nframes);
60 : extern py::array_t<uint64_t>
61 : np_array_timestamp(daqdataformats::Fragment& frag);
62 : extern py::array_t<uint64_t>
63 : np_array_timestamp_data(void* data, int nframes);
64 : extern py::array_t<uint8_t>
65 : np_array_channels_data(void* data, int nframes);
66 :
67 : extern uint32_t
68 : get_n_frames_stream(daqdataformats::Fragment const& frag);
69 : extern py::array_t<uint16_t>
70 : np_array_adc_stream(daqdataformats::Fragment& frag);
71 : extern py::array_t<uint8_t>
72 : np_array_channels_stream(daqdataformats::Fragment& frag);
73 : extern py::array_t<uint16_t>
74 : np_array_adc_stream_data(void* data, int nframes);
75 : extern py::array_t<uint64_t>
76 : np_array_timestamp_stream(daqdataformats::Fragment& frag);
77 : extern py::array_t<uint64_t>
78 : np_array_timestamp_stream_data(void* data, int nframes);
79 : extern py::array_t<uint8_t>
80 : np_array_channels_stream_data(void* data, int nframes);
81 :
82 : }
83 :
84 : namespace daphneeth {
85 : extern uint32_t
86 : get_n_frames(daqdataformats::Fragment const& frag);
87 : extern py::array_t<uint16_t>
88 : np_array_adc(daqdataformats::Fragment& frag);
89 : extern py::array_t<uint8_t>
90 : np_array_channels(daqdataformats::Fragment& frag);
91 : extern py::array_t<uint16_t>
92 : np_array_adc_data(void* data, int nframes);
93 : extern py::array_t<uint64_t>
94 : np_array_timestamp(daqdataformats::Fragment& frag);
95 : extern py::array_t<uint64_t>
96 : np_array_timestamp_data(void* data, int nframes);
97 : extern py::array_t<uint8_t>
98 : np_array_channels_data(void* data, int nframes);
99 :
100 : extern uint32_t
101 : get_n_frames_stream(daqdataformats::Fragment const& frag);
102 : extern py::array_t<uint16_t>
103 : np_array_adc_stream(daqdataformats::Fragment& frag);
104 : extern py::array_t<uint8_t>
105 : np_array_channels_stream(daqdataformats::Fragment& frag);
106 : extern py::array_t<uint16_t>
107 : np_array_adc_stream_data(void* data, int nframes);
108 : extern py::array_t<uint64_t>
109 : np_array_timestamp_stream(daqdataformats::Fragment& frag);
110 : extern py::array_t<uint64_t>
111 : np_array_timestamp_stream_data(void* data, int nframes);
112 : extern py::array_t<uint8_t>
113 : np_array_channels_stream_data(void* data, int nframes);
114 :
115 : }
116 :
117 : namespace tde {
118 : extern uint32_t
119 : get_n_frames(daqdataformats::Fragment const& frag);
120 : extern py::array_t<uint16_t>
121 : np_array_adc(daqdataformats::Fragment const& frag);
122 : extern py::array_t<uint16_t>
123 : np_array_adc_data(void* data, uint32_t n_frames);
124 : extern py::array_t<long double>
125 : np_array_timestamp(daqdataformats::Fragment const& frag);
126 : extern py::array_t<long double>
127 : np_array_timestamp_data(void* data, uint32_t n_frames);
128 :
129 : }
130 :
131 : namespace unpack {
132 : namespace python {
133 :
134 : void
135 0 : register_unpack(py::module& m)
136 : {
137 :
138 0 : m.def("print_hex_fragment", &print_hex_fragment);
139 :
140 0 : py::module_ wibeth_module = m.def_submodule("wibeth");
141 0 : wibeth_module.def("get_n_frames", &wibeth::get_n_frames);
142 0 : wibeth_module.def("np_array_adc", &wibeth::np_array_adc);
143 0 : wibeth_module.def("np_array_timestamp", &wibeth::np_array_timestamp);
144 0 : wibeth_module.def("np_array_adc_data", &wibeth::np_array_adc_data);
145 0 : wibeth_module.def("np_array_timestamp_data", &wibeth::np_array_timestamp_data);
146 :
147 0 : py::module_ daphne_module = m.def_submodule("daphne");
148 0 : daphne_module.def("get_n_frames", &daphne::get_n_frames);
149 0 : daphne_module.def("np_array_adc", &daphne::np_array_adc);
150 0 : daphne_module.def("np_array_timestamp", &daphne::np_array_timestamp);
151 0 : daphne_module.def("np_array_adc_data", &daphne::np_array_adc_data);
152 0 : daphne_module.def("np_array_timestamp_data", &daphne::np_array_timestamp_data);
153 0 : daphne_module.def("np_array_channels_data", &daphne::np_array_channels_data);
154 0 : daphne_module.def("np_array_channels", &daphne::np_array_channels);
155 :
156 0 : daphne_module.def("get_n_frames_stream", &daphne::get_n_frames_stream);
157 0 : daphne_module.def("np_array_adc_stream", &daphne::np_array_adc_stream);
158 0 : daphne_module.def("np_array_timestamp_stream", &daphne::np_array_timestamp_stream);
159 0 : daphne_module.def("np_array_adc_stream_data", &daphne::np_array_adc_stream_data);
160 0 : daphne_module.def("np_array_timestamp_stream_data", &daphne::np_array_timestamp_stream_data);
161 0 : daphne_module.def("np_array_channels_stream_data", &daphne::np_array_channels_stream_data);
162 0 : daphne_module.def("np_array_channels_stream", &daphne::np_array_channels_stream);
163 :
164 0 : py::module_ daphneeth_module = m.def_submodule("daphneeth");
165 0 : daphneeth_module.def("get_n_frames", &daphneeth::get_n_frames);
166 0 : daphneeth_module.def("np_array_adc", &daphneeth::np_array_adc);
167 0 : daphneeth_module.def("np_array_timestamp", &daphneeth::np_array_timestamp);
168 0 : daphneeth_module.def("np_array_adc_data", &daphneeth::np_array_adc_data);
169 0 : daphneeth_module.def("np_array_timestamp_data", &daphneeth::np_array_timestamp_data);
170 0 : daphneeth_module.def("np_array_channels_data", &daphneeth::np_array_channels_data);
171 0 : daphneeth_module.def("np_array_channels", &daphneeth::np_array_channels);
172 :
173 0 : daphneeth_module.def("get_n_frames_stream", &daphneeth::get_n_frames_stream);
174 0 : daphneeth_module.def("np_array_adc_stream", &daphneeth::np_array_adc_stream);
175 0 : daphneeth_module.def("np_array_timestamp_stream", &daphneeth::np_array_timestamp_stream);
176 0 : daphneeth_module.def("np_array_adc_stream_data", &daphneeth::np_array_adc_stream_data);
177 0 : daphneeth_module.def("np_array_timestamp_stream_data", &daphneeth::np_array_timestamp_stream_data);
178 0 : daphneeth_module.def("np_array_channels_stream_data", &daphneeth::np_array_channels_stream_data);
179 0 : daphneeth_module.def("np_array_channels_stream", &daphneeth::np_array_channels_stream);
180 :
181 0 : py::module_ tde_module = m.def_submodule("tde");
182 0 : tde_module.def("get_n_frames", &tde::get_n_frames);
183 0 : tde_module.def("np_array_adc", &tde::np_array_adc);
184 0 : tde_module.def("np_array_timestamp", &tde::np_array_timestamp);
185 0 : tde_module.def("np_array_adc_data", &tde::np_array_adc_data);
186 0 : tde_module.def("np_array_timestamp_data", &tde::np_array_timestamp_data);
187 0 : }
188 :
189 : } // namespace python
190 : } // namespace rawdatautils
191 : } // namespace dunedaq
192 : }
|