DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
DAPHNEUnpacker.cpp
Go to the documentation of this file.
1
12
13#include <cstdint>
14#include <pybind11/numpy.h>
15
16namespace py = pybind11;
18
24}
25
32
33
39py::array_t<uint8_t> np_array_channels_stream_data(void* data, int nframes){
40
41 const auto channels_per_daphne = fddetdataformats::DAPHNEStreamFrame::s_channels_per_frame;
42 py::array_t<uint8_t> channels(channels_per_daphne * nframes);
43 auto ptr = static_cast<uint8_t*>(channels.request().ptr);
44
45 for (size_t i=0; i<(size_t)nframes; ++i) {
46 auto fr = reinterpret_cast<fddetdataformats::DAPHNEStreamFrame*>(static_cast<char*>(data) + i * sizeof(fddetdataformats::DAPHNEStreamFrame));
47
48 ptr[i*channels_per_daphne + 0] = fr->get_channel0();
49 ptr[i*channels_per_daphne + 1] = fr->get_channel1();
50 ptr[i*channels_per_daphne + 2] = fr->get_channel2();
51 ptr[i*channels_per_daphne + 3] = fr->get_channel3();
52
53 }
54 channels.resize({nframes, channels_per_daphne});
55
56 return channels;
57}
58
63py::array_t<uint8_t> np_array_channels_data(void* data, int nframes){
64
65 py::array_t<uint8_t> channels(nframes);
66 auto ptr = static_cast<uint8_t*>(channels.request().ptr);
67
68 for (size_t i=0; i<(size_t)nframes; ++i) {
69 auto fr = reinterpret_cast<fddetdataformats::DAPHNEFrame*>(static_cast<char*>(data) + i * sizeof(fddetdataformats::DAPHNEFrame));
70 ptr[i] = fr->get_channel();
71 }
72
73 return channels;
74}
75
81
88
89
95py::array_t<uint16_t> np_array_adc_data(void* data, int nframes){
96
97 const auto adcs_per_channel = fddetdataformats::DAPHNEFrame::s_num_adcs;
98
99 py::array_t<uint16_t> ret(nframes * adcs_per_channel);
100 auto ptr = static_cast<uint16_t*>(ret.request().ptr);
101 for (size_t i=0; i<(size_t)nframes; ++i) {
102 auto fr = reinterpret_cast<fddetdataformats::DAPHNEFrame*>(static_cast<char*>(data) + i * sizeof(fddetdataformats::DAPHNEFrame));
103 //auto fr = reinterpret_cast<fddetdataformats::DAPHNEFrame*>(static_cast<char*>(data) + i * sizeof(fddetdataformats::DAPHNEFrame));
104 for (size_t j=0; j<adcs_per_channel; ++j) {
105 ptr[i*adcs_per_channel + j] = fr->get_adc(j);
106 }
107 //for (size_t j=0; j<channels_per_daphne; ++j)
108
109 }
110 ret.resize({nframes, adcs_per_channel});
111
112 return ret;
113}
114
120py::array_t<uint16_t> np_array_adc_stream_data(void* data, int nframes){
121
122 const auto channels_per_daphne = fddetdataformats::DAPHNEStreamFrame::s_channels_per_frame;
124
125
126 py::array_t<uint16_t> ret(channels_per_daphne * nframes * adcs_per_channel);
127 auto ptr = static_cast<uint16_t*>(ret.request().ptr);
128 for (size_t i=0; i<(size_t)nframes; ++i) {
129 auto fr = reinterpret_cast<fddetdataformats::DAPHNEStreamFrame*>(static_cast<char*>(data) + i * sizeof(fddetdataformats::DAPHNEStreamFrame));
130 for (size_t j=0; j<adcs_per_channel; ++j)
131 for (size_t k=0; k<channels_per_daphne; ++k)
132 ptr[channels_per_daphne * (adcs_per_channel * i + j) + k] = fr->get_adc(j,k);
133 }
134 ret.resize({nframes*adcs_per_channel, channels_per_daphne});
135
136 return ret;
137}
138
145py::array_t<uint64_t> np_array_timestamp_data(void* data, int nframes){
146
147 py::array_t<uint64_t> ret(nframes);
148 auto ptr = static_cast<uint64_t*>(ret.request().ptr);
149 for (size_t i=0; i<(size_t)nframes; ++i) {
150 auto fr = reinterpret_cast<fddetdataformats::DAPHNEFrame*>(static_cast<char*>(data) + i * sizeof(fddetdataformats::DAPHNEFrame));
151 ptr[i] = fr->get_timestamp();
152 }
153
154 return ret;
155}
156
162py::array_t<uint64_t> np_array_timestamp_stream_data(void* data, int nframes) {
163
165 const size_t ticks_per_adc = 1;
166
167 py::array_t<uint64_t> ret(nframes*adcs_per_channel);
168
169 auto ptr = static_cast<uint64_t*>(ret.request().ptr);
170 for (size_t i=0; i<(size_t)nframes; ++i) {
171 auto fr = reinterpret_cast<fddetdataformats::DAPHNEStreamFrame*>(static_cast<char*>(data) + i * sizeof(fddetdataformats::DAPHNEStreamFrame));
172 for (size_t j=0; j<adcs_per_channel; ++j)
173 ptr[i*adcs_per_channel+j] = fr->get_timestamp()+j*ticks_per_adc;
174 }
175
176 return ret;
177}
178
179
184py::array_t<uint16_t> np_array_adc(daqdataformats::Fragment& frag){
186}
187
195
196
204
212
213
214} // namespace dunedaq::rawdatautils::daphne // NOLINT
C++ Representation of a DUNE Fragment, wrapping the flat byte array that is the Fragment's "actual" f...
Definition Fragment.hpp:38
void * get_data() const
Get a pointer to the data payload in the Fragmnet.
Definition Fragment.hpp:254
fragment_size_t get_size() const
Get the total size of the Fragment.
Definition Fragment.hpp:242
uint64_t get_timestamp() const
Get the 64-bit timestamp of the frame.
uint8_t get_channel0() const
Get the channel 0 from the DAPHNE Stream frame header
uint16_t get_adc(uint i, uint chn) const
Get the i ADC value of chn in the frame.
py::array_t< uint16_t > np_array_adc_stream(daqdataformats::Fragment &frag)
Unpacks a Fragment containing DAPHNEStreamFrames into a numpy array with the ADC values and dimensi...
py::array_t< uint8_t > np_array_channels_stream(daqdataformats::Fragment &frag)
Unpacks channel numbers for Fragment that contains DAPHNEStreamFrames into a numpy array with dimensi...
py::array_t< uint64_t > np_array_timestamp_stream_data(void *data, int nframes)
Unpacks data containing DAPHNEStreamFrames into a numpy array with the timestamps with dimension (n...
py::array_t< uint16_t > np_array_adc_stream_data(void *data, int nframes)
Unpacks data containing DAPHNEStreamFrames into a numpy array with the ADC values and dimension (nu...
py::array_t< uint64_t > np_array_timestamp_stream(daqdataformats::Fragment &frag)
Unpacks the timestamps in a Fragment containing DAPHNEStreamFrames into a numpy array with dimensio...
uint32_t get_n_frames(daqdataformats::Fragment const &frag)
Gets number of DAPHNEFrames in a fragment
py::array_t< uint8_t > np_array_channels_data(void *data, int nframes)
Unpacks channel numbers for DAPHNEFrames into a numpy array with dimensions (nframes)
uint32_t get_n_frames_stream(daqdataformats::Fragment const &frag)
Gets number of DAPHNEStreamFrames in a fragment
py::array_t< uint8_t > np_array_channels_stream_data(void *data, int nframes)
Unpacks channel numbers for DAPHNEStreamFrames into a numpy array with dimensions (nframes,...
py::array_t< uint8_t > np_array_channels(daqdataformats::Fragment &frag)
Unpacks channel numbers for Fragment that contains DAPHNEFrames into a numpy array with dimensions
py::array_t< uint64_t > np_array_timestamp_data(void *data, int nframes)
Unpacks data containing DAPHNEFrames into a numpy array with the timestamps with dimension (number of...
py::array_t< uint64_t > np_array_timestamp(daqdataformats::Fragment &frag)
Unpacks the timestamps in a Fragment containing WIBFrames into a numpy array with dimension (number o...
py::array_t< uint16_t > np_array_adc(daqdataformats::Fragment &frag)
Unpacks a Fragment containing DAPHNEFrames into a numpy array with the ADC values and dimension (numb...
py::array_t< uint16_t > np_array_adc_data(void *data, int nframes)
Unpacks data containing DAPHNEFrames into a numpy array with the ADC values and dimension (number of ...
The header for a DUNE Fragment.