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 "fddetdataformats/WIBFrame.hpp"
10 : #include "fddetdataformats/WIB2Frame.hpp"
11 : #include "fddetdataformats/DAPHNEFrame.hpp"
12 : #include "fddetdataformats/DAPHNEEthFrame.hpp"
13 : #include "fddetdataformats/DAPHNEEthStreamFrame.hpp"
14 : #include "fddetdataformats/WIBEthFrame.hpp"
15 : #include "fddetdataformats/TDEEthFrame.hpp"
16 : #include "daqdataformats/Fragment.hpp"
17 :
18 : #include <pybind11/numpy.h>
19 : #include <pybind11/pybind11.h>
20 : #include <pybind11/stl.h>
21 :
22 : #include <fmt/core.h>
23 :
24 : namespace py = pybind11;
25 :
26 : namespace dunedaq {
27 : namespace rawdatautils {
28 :
29 0 : void print_hex_fragment(daqdataformats::Fragment const& frag) {
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 :
37 0 : }
38 :
39 :
40 : namespace wib {
41 : extern py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment& frag);
42 : extern py::array_t<uint16_t> np_array_adc_data(void* data, int nframes);
43 : extern py::array_t<uint64_t> np_array_timestamp(daqdataformats::Fragment& frag);
44 : extern py::array_t<uint64_t> np_array_timestamp_data(void* data, int nframes);
45 : }
46 :
47 : namespace wib2 {
48 : extern uint32_t get_n_frames(daqdataformats::Fragment const& frag);
49 : extern py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment const& frag);
50 : extern py::array_t<uint16_t> np_array_adc_data(void* data, int nframes);
51 : extern py::array_t<uint64_t> np_array_timestamp(daqdataformats::Fragment const& frag);
52 : extern py::array_t<uint64_t> np_array_timestamp_data(void* data, int nframes);
53 : }
54 :
55 : namespace wibeth {
56 : extern uint32_t get_n_frames(daqdataformats::Fragment const& frag);
57 : extern py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment const& frag);
58 : extern py::array_t<uint16_t> np_array_adc_data(void* data, uint32_t n_frames);
59 : extern py::array_t<uint64_t> np_array_timestamp(daqdataformats::Fragment const& frag);
60 : extern py::array_t<uint64_t> np_array_timestamp_data(void* data, uint32_t n_frames);
61 : }
62 :
63 :
64 : namespace daphne {
65 : extern uint32_t get_n_frames(daqdataformats::Fragment const& frag);
66 : extern py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment& frag);
67 : extern py::array_t<uint8_t> np_array_channels(daqdataformats::Fragment& frag);
68 : extern py::array_t<uint16_t> np_array_adc_data(void* data, int nframes);
69 : extern py::array_t<uint64_t> np_array_timestamp(daqdataformats::Fragment& frag);
70 : extern py::array_t<uint64_t> np_array_timestamp_data(void* data, int nframes);
71 : extern py::array_t<uint8_t> np_array_channels_data(void* data, int nframes);
72 :
73 : extern uint32_t get_n_frames_stream(daqdataformats::Fragment const& frag);
74 : extern py::array_t<uint16_t> np_array_adc_stream(daqdataformats::Fragment& frag);
75 : extern py::array_t<uint8_t> np_array_channels_stream(daqdataformats::Fragment& frag);
76 : extern py::array_t<uint16_t> np_array_adc_stream_data(void* data, int nframes);
77 : extern py::array_t<uint64_t> np_array_timestamp_stream(daqdataformats::Fragment& frag);
78 : extern py::array_t<uint64_t> np_array_timestamp_stream_data(void* data, int nframes);
79 : extern py::array_t<uint8_t> np_array_channels_stream_data(void* data, int nframes);
80 :
81 : }
82 :
83 : namespace daphneeth {
84 : extern uint32_t get_n_frames(daqdataformats::Fragment const& frag);
85 : extern py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment& frag);
86 : extern py::array_t<uint8_t> np_array_channels(daqdataformats::Fragment& frag);
87 : extern py::array_t<uint16_t> np_array_adc_data(void* data, int nframes);
88 : extern py::array_t<uint64_t> np_array_timestamp(daqdataformats::Fragment& frag);
89 : extern py::array_t<uint64_t> np_array_timestamp_data(void* data, int nframes);
90 : extern py::array_t<uint8_t> np_array_channels_data(void* data, int nframes);
91 :
92 : extern uint32_t get_n_frames_stream(daqdataformats::Fragment const& frag);
93 : extern py::array_t<uint16_t> np_array_adc_stream(daqdataformats::Fragment& frag);
94 : extern py::array_t<uint8_t> np_array_channels_stream(daqdataformats::Fragment& frag);
95 : extern py::array_t<uint16_t> np_array_adc_stream_data(void* data, int nframes);
96 : extern py::array_t<uint64_t> np_array_timestamp_stream(daqdataformats::Fragment& frag);
97 : extern py::array_t<uint64_t> np_array_timestamp_stream_data(void* data, int nframes);
98 : extern py::array_t<uint8_t> np_array_channels_stream_data(void* data, int nframes);
99 :
100 : }
101 :
102 : namespace tde {
103 : extern uint32_t get_n_frames(daqdataformats::Fragment const& frag);
104 : extern py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment const& frag);
105 : extern py::array_t<uint16_t> np_array_adc_data(void* data, uint32_t n_frames);
106 : extern py::array_t<long double> np_array_timestamp(daqdataformats::Fragment const& frag);
107 : extern py::array_t<long double> np_array_timestamp_data(void* data, uint32_t n_frames);
108 :
109 : }
110 :
111 : namespace unpack {
112 : namespace python {
113 :
114 : void
115 0 : register_unpack(py::module& m) {
116 :
117 0 : m.def("print_hex_fragment", &print_hex_fragment);
118 :
119 0 : py::module_ wib_module = m.def_submodule("wib");
120 0 : wib_module.def("np_array_adc", &wib::np_array_adc);
121 0 : wib_module.def("np_array_timestamp", &wib::np_array_timestamp);
122 0 : wib_module.def("np_array_adc_data", &wib::np_array_adc_data);
123 0 : wib_module.def("np_array_timestamp_data", &wib::np_array_timestamp_data);
124 :
125 0 : py::module_ wib2_module = m.def_submodule("wib2");
126 0 : wib2_module.def("get_n_frames", &wib2::get_n_frames);
127 0 : wib2_module.def("np_array_adc", &wib2::np_array_adc);
128 0 : wib2_module.def("np_array_timestamp", &wib2::np_array_timestamp);
129 0 : wib2_module.def("np_array_adc_data", &wib2::np_array_adc_data);
130 0 : wib2_module.def("np_array_timestamp_data", &wib2::np_array_timestamp_data);
131 :
132 0 : py::module_ wibeth_module = m.def_submodule("wibeth");
133 0 : wibeth_module.def("get_n_frames", &wibeth::get_n_frames);
134 0 : wibeth_module.def("np_array_adc", &wibeth::np_array_adc);
135 0 : wibeth_module.def("np_array_timestamp", &wibeth::np_array_timestamp);
136 0 : wibeth_module.def("np_array_adc_data", &wibeth::np_array_adc_data);
137 0 : wibeth_module.def("np_array_timestamp_data", &wibeth::np_array_timestamp_data);
138 :
139 0 : py::module_ daphne_module = m.def_submodule("daphne");
140 0 : daphne_module.def("get_n_frames", &daphne::get_n_frames);
141 0 : daphne_module.def("np_array_adc", &daphne::np_array_adc);
142 0 : daphne_module.def("np_array_timestamp", &daphne::np_array_timestamp);
143 0 : daphne_module.def("np_array_adc_data", &daphne::np_array_adc_data);
144 0 : daphne_module.def("np_array_timestamp_data", &daphne::np_array_timestamp_data);
145 0 : daphne_module.def("np_array_channels_data", &daphne::np_array_channels_data);
146 0 : daphne_module.def("np_array_channels", &daphne::np_array_channels);
147 :
148 0 : daphne_module.def("get_n_frames_stream", &daphne::get_n_frames_stream);
149 0 : daphne_module.def("np_array_adc_stream", &daphne::np_array_adc_stream);
150 0 : daphne_module.def("np_array_timestamp_stream", &daphne::np_array_timestamp_stream);
151 0 : daphne_module.def("np_array_adc_stream_data", &daphne::np_array_adc_stream_data);
152 0 : daphne_module.def("np_array_timestamp_stream_data", &daphne::np_array_timestamp_stream_data);
153 0 : daphne_module.def("np_array_channels_stream_data", &daphne::np_array_channels_stream_data);
154 0 : daphne_module.def("np_array_channels_stream", &daphne::np_array_channels_stream);
155 :
156 0 : py::module_ daphneeth_module = m.def_submodule("daphneeth");
157 0 : daphneeth_module.def("get_n_frames", &daphneeth::get_n_frames);
158 0 : daphneeth_module.def("np_array_adc", &daphneeth::np_array_adc);
159 0 : daphneeth_module.def("np_array_timestamp", &daphneeth::np_array_timestamp);
160 0 : daphneeth_module.def("np_array_adc_data", &daphneeth::np_array_adc_data);
161 0 : daphneeth_module.def("np_array_timestamp_data", &daphneeth::np_array_timestamp_data);
162 0 : daphneeth_module.def("np_array_channels_data", &daphneeth::np_array_channels_data);
163 0 : daphneeth_module.def("np_array_channels", &daphneeth::np_array_channels);
164 :
165 0 : daphneeth_module.def("get_n_frames_stream", &daphneeth::get_n_frames_stream);
166 0 : daphneeth_module.def("np_array_adc_stream", &daphneeth::np_array_adc_stream);
167 0 : daphneeth_module.def("np_array_timestamp_stream", &daphneeth::np_array_timestamp_stream);
168 0 : daphneeth_module.def("np_array_adc_stream_data", &daphneeth::np_array_adc_stream_data);
169 0 : daphneeth_module.def("np_array_timestamp_stream_data", &daphneeth::np_array_timestamp_stream_data);
170 0 : daphneeth_module.def("np_array_channels_stream_data", &daphneeth::np_array_channels_stream_data);
171 0 : daphneeth_module.def("np_array_channels_stream", &daphneeth::np_array_channels_stream);
172 :
173 0 : py::module_ tde_module = m.def_submodule("tde");
174 0 : tde_module.def("get_n_frames", &tde::get_n_frames);
175 0 : tde_module.def("np_array_adc", &tde::np_array_adc);
176 0 : tde_module.def("np_array_timestamp", &tde::np_array_timestamp);
177 0 : tde_module.def("np_array_adc_data", &tde::np_array_adc_data);
178 0 : tde_module.def("np_array_timestamp_data", &tde::np_array_timestamp_data);
179 :
180 0 : }
181 :
182 : } // namespace python
183 : } // namespace rawdatautils
184 : } // namespace dunedaq
185 : }
|