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/DAPHNEFrame.hpp"
10 : #include "fddetdataformats/DAPHNEEthFrame.hpp"
11 : #include "fddetdataformats/DAPHNEEthStreamFrame.hpp"
12 : #include "fddetdataformats/WIBEthFrame.hpp"
13 : #include "fddetdataformats/TDEEthFrame.hpp"
14 : #include "daqdataformats/Fragment.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 0 : void print_hex_fragment(daqdataformats::Fragment const& frag) {
28 0 : uint64_t* data = static_cast<uint64_t*>(frag.get_data());
29 0 : size_t data_size = (frag.get_size() - sizeof(daqdataformats::FragmentHeader))/8;
30 :
31 0 : for ( size_t i(0); i<data_size; ++i) {
32 0 : fmt::print("{:06d} 0x{:016x}\n", i, data[i]);
33 : }
34 :
35 0 : }
36 :
37 : namespace wibeth {
38 : extern uint32_t get_n_frames(daqdataformats::Fragment const& frag);
39 : extern py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment const& frag);
40 : extern py::array_t<uint16_t> np_array_adc_data(void* data, uint32_t n_frames);
41 : extern py::array_t<uint64_t> np_array_timestamp(daqdataformats::Fragment const& frag);
42 : extern py::array_t<uint64_t> np_array_timestamp_data(void* data, uint32_t n_frames);
43 : }
44 :
45 :
46 : namespace daphne {
47 : extern uint32_t get_n_frames(daqdataformats::Fragment const& frag);
48 : extern py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment& frag);
49 : extern py::array_t<uint8_t> np_array_channels(daqdataformats::Fragment& 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& frag);
52 : extern py::array_t<uint64_t> np_array_timestamp_data(void* data, int nframes);
53 : extern py::array_t<uint8_t> np_array_channels_data(void* data, int nframes);
54 :
55 : extern uint32_t get_n_frames_stream(daqdataformats::Fragment const& frag);
56 : extern py::array_t<uint16_t> np_array_adc_stream(daqdataformats::Fragment& frag);
57 : extern py::array_t<uint8_t> np_array_channels_stream(daqdataformats::Fragment& frag);
58 : extern py::array_t<uint16_t> np_array_adc_stream_data(void* data, int nframes);
59 : extern py::array_t<uint64_t> np_array_timestamp_stream(daqdataformats::Fragment& frag);
60 : extern py::array_t<uint64_t> np_array_timestamp_stream_data(void* data, int nframes);
61 : extern py::array_t<uint8_t> np_array_channels_stream_data(void* data, int nframes);
62 :
63 : }
64 :
65 : namespace daphneeth {
66 : extern uint32_t get_n_frames(daqdataformats::Fragment const& frag);
67 : extern py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment& frag);
68 : extern py::array_t<uint8_t> np_array_channels(daqdataformats::Fragment& frag);
69 : extern py::array_t<uint16_t> np_array_adc_data(void* data, int nframes);
70 : extern py::array_t<uint64_t> np_array_timestamp(daqdataformats::Fragment& frag);
71 : extern py::array_t<uint64_t> np_array_timestamp_data(void* data, int nframes);
72 : extern py::array_t<uint8_t> np_array_channels_data(void* data, int nframes);
73 :
74 : extern uint32_t get_n_frames_stream(daqdataformats::Fragment const& frag);
75 : extern py::array_t<uint16_t> np_array_adc_stream(daqdataformats::Fragment& frag);
76 : extern py::array_t<uint8_t> np_array_channels_stream(daqdataformats::Fragment& frag);
77 : extern py::array_t<uint16_t> np_array_adc_stream_data(void* data, int nframes);
78 : extern py::array_t<uint64_t> np_array_timestamp_stream(daqdataformats::Fragment& frag);
79 : extern py::array_t<uint64_t> np_array_timestamp_stream_data(void* data, int nframes);
80 : extern py::array_t<uint8_t> np_array_channels_stream_data(void* data, int nframes);
81 :
82 : }
83 :
84 : namespace tde {
85 : extern uint32_t get_n_frames(daqdataformats::Fragment const& frag);
86 : extern py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment const& frag);
87 : extern py::array_t<uint16_t> np_array_adc_data(void* data, uint32_t n_frames);
88 : extern py::array_t<long double> np_array_timestamp(daqdataformats::Fragment const& frag);
89 : extern py::array_t<long double> np_array_timestamp_data(void* data, uint32_t n_frames);
90 :
91 : }
92 :
93 : namespace unpack {
94 : namespace python {
95 :
96 : void
97 0 : register_unpack(py::module& m) {
98 :
99 0 : m.def("print_hex_fragment", &print_hex_fragment);
100 :
101 0 : py::module_ wibeth_module = m.def_submodule("wibeth");
102 0 : wibeth_module.def("get_n_frames", &wibeth::get_n_frames);
103 0 : wibeth_module.def("np_array_adc", &wibeth::np_array_adc);
104 0 : wibeth_module.def("np_array_timestamp", &wibeth::np_array_timestamp);
105 0 : wibeth_module.def("np_array_adc_data", &wibeth::np_array_adc_data);
106 0 : wibeth_module.def("np_array_timestamp_data", &wibeth::np_array_timestamp_data);
107 :
108 0 : py::module_ daphne_module = m.def_submodule("daphne");
109 0 : daphne_module.def("get_n_frames", &daphne::get_n_frames);
110 0 : daphne_module.def("np_array_adc", &daphne::np_array_adc);
111 0 : daphne_module.def("np_array_timestamp", &daphne::np_array_timestamp);
112 0 : daphne_module.def("np_array_adc_data", &daphne::np_array_adc_data);
113 0 : daphne_module.def("np_array_timestamp_data", &daphne::np_array_timestamp_data);
114 0 : daphne_module.def("np_array_channels_data", &daphne::np_array_channels_data);
115 0 : daphne_module.def("np_array_channels", &daphne::np_array_channels);
116 :
117 0 : daphne_module.def("get_n_frames_stream", &daphne::get_n_frames_stream);
118 0 : daphne_module.def("np_array_adc_stream", &daphne::np_array_adc_stream);
119 0 : daphne_module.def("np_array_timestamp_stream", &daphne::np_array_timestamp_stream);
120 0 : daphne_module.def("np_array_adc_stream_data", &daphne::np_array_adc_stream_data);
121 0 : daphne_module.def("np_array_timestamp_stream_data", &daphne::np_array_timestamp_stream_data);
122 0 : daphne_module.def("np_array_channels_stream_data", &daphne::np_array_channels_stream_data);
123 0 : daphne_module.def("np_array_channels_stream", &daphne::np_array_channels_stream);
124 :
125 0 : py::module_ daphneeth_module = m.def_submodule("daphneeth");
126 0 : daphneeth_module.def("get_n_frames", &daphneeth::get_n_frames);
127 0 : daphneeth_module.def("np_array_adc", &daphneeth::np_array_adc);
128 0 : daphneeth_module.def("np_array_timestamp", &daphneeth::np_array_timestamp);
129 0 : daphneeth_module.def("np_array_adc_data", &daphneeth::np_array_adc_data);
130 0 : daphneeth_module.def("np_array_timestamp_data", &daphneeth::np_array_timestamp_data);
131 0 : daphneeth_module.def("np_array_channels_data", &daphneeth::np_array_channels_data);
132 0 : daphneeth_module.def("np_array_channels", &daphneeth::np_array_channels);
133 :
134 0 : daphneeth_module.def("get_n_frames_stream", &daphneeth::get_n_frames_stream);
135 0 : daphneeth_module.def("np_array_adc_stream", &daphneeth::np_array_adc_stream);
136 0 : daphneeth_module.def("np_array_timestamp_stream", &daphneeth::np_array_timestamp_stream);
137 0 : daphneeth_module.def("np_array_adc_stream_data", &daphneeth::np_array_adc_stream_data);
138 0 : daphneeth_module.def("np_array_timestamp_stream_data", &daphneeth::np_array_timestamp_stream_data);
139 0 : daphneeth_module.def("np_array_channels_stream_data", &daphneeth::np_array_channels_stream_data);
140 0 : daphneeth_module.def("np_array_channels_stream", &daphneeth::np_array_channels_stream);
141 :
142 0 : py::module_ tde_module = m.def_submodule("tde");
143 0 : tde_module.def("get_n_frames", &tde::get_n_frames);
144 0 : tde_module.def("np_array_adc", &tde::np_array_adc);
145 0 : tde_module.def("np_array_timestamp", &tde::np_array_timestamp);
146 0 : tde_module.def("np_array_adc_data", &tde::np_array_adc_data);
147 0 : tde_module.def("np_array_timestamp_data", &tde::np_array_timestamp_data);
148 :
149 0 : }
150 :
151 : } // namespace python
152 : } // namespace rawdatautils
153 : } // namespace dunedaq
154 : }
|