DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
fddetdataformats
include
fddetdataformats
WIBEthFrame.hpp
Go to the documentation of this file.
1
13
14
#ifndef FDDETDATAFORMATS_INCLUDE_FDDETDATAFORMATS_WIBETHFRAME_HPP_
15
#define FDDETDATAFORMATS_INCLUDE_FDDETDATAFORMATS_WIBETHFRAME_HPP_
16
17
#include "
fddetdataformats/FrameConcepts.hpp
"
18
#include "
fddetdataformats/Utils.hpp
"
19
20
#include "
detdataformats/DAQEthHeader.hpp
"
21
22
#include <algorithm>
// For std::min
23
#include <cassert>
// For assert()
24
#include <cstdint>
// For uint32_t etc
25
#include <cstdio>
26
#include <cstdlib>
27
#include <stdexcept>
// For std::out_of_range
28
29
namespace
dunedaq::fddetdataformats
{
30
31
// NOLINTBEGIN(build/unsigned)
32
39
struct
WIBEthFrame
40
{
41
42
// The definition of the format is in terms of 64-bit words
43
using
word_t
= uint64_t;
44
45
static
constexpr
int
s_bits_per_adc
= 14;
46
static
constexpr
int
s_bits_per_word
= 8 *
sizeof
(
word_t
);
47
static
constexpr
int
s_time_samples_per_frame
= 64;
48
static
constexpr
int
s_channels_per_half_femb
= 64;
49
static
constexpr
int
s_half_fembs_per_frame
= 1;
50
static
constexpr
int
s_num_channels
=
s_channels_per_half_femb
*
s_half_fembs_per_frame
;
51
static
constexpr
int
s_num_adc_words_per_ts
=
s_num_channels
*
s_bits_per_adc
/
s_bits_per_word
;
52
53
struct
WIBEthHeader
54
{
55
static
constexpr
std::size_t
s_expected_bytes
{8 + 8};
// 8 bytes for the bitfield section, 8 for the extra_data
56
57
word_t
colddata_timestamp_0
: 15;
58
word_t
pad_0
: 1;
59
word_t
colddata_timestamp_1
: 15;
60
word_t
pad_1
: 1;
61
word_t
cd
: 1;
62
word_t
crc_err
: 2;
63
word_t
link_valid
: 2;
64
word_t
lol
: 1;
65
word_t
wib_sync
: 1;
66
word_t
femb_sync
: 2;
67
word_t
pulser
: 1;
68
word_t
calibration
: 1;
69
word_t
ready
: 1;
70
word_t
context
: 8;
71
word_t
version
: 4;
72
word_t
channel
: 8;
73
word_t
extra_data
;
74
};
75
static_assert
(
sizeof
(
WIBEthHeader
) ==
WIBEthHeader::s_expected_bytes
);
76
77
static
constexpr
size_t
s_expected_bytes
{
sizeof
(
detdataformats::DAQEthHeader
) +
78
WIBEthHeader::s_expected_bytes
+
79
s_time_samples_per_frame
*
s_num_adc_words_per_ts
*
sizeof
(
word_t
) };
80
88
uint16_t
get_adc
(
int
i_channel,
int
i_sample = 0)
const
;
89
91
void
set_adc
(
int
i_channel,
int
i_sample, uint16_t adc_val);
92
94
uint64_t
get_timestamp
()
const
{
return
daq_header
.get_timestamp(); }
95
97
void
set_timestamp
(
const
uint64_t new_timestamp) {
daq_header
.timestamp = new_timestamp; }
98
100
uint8_t
get_channel
()
const
{
return
header
.channel; }
101
103
void
set_channel
(
const
uint8_t new_channel) {
header
.channel = new_channel; }
104
105
bool
operator<
(
const
WIBEthFrame
& other)
const
{
106
return
this->
get_timestamp
() < other.
get_timestamp
();
107
}
108
109
detdataformats::DAQEthHeader
daq_header
;
110
WIBEthHeader
header
;
111
word_t
adc_words
[
s_time_samples_per_frame
][
s_num_adc_words_per_ts
];
// NOLINT
112
113
};
114
115
static_assert
(std::endian::native == std::endian::little,
116
"The WIBEthFrame bitfield layout assumes little-endian architecture"
);
117
118
static_assert
(
AdaptableFrameConcept<WIBEthFrame>
,
"WIBEthFrame does not satisfy the AdaptableFrameConcept"
);
119
120
}
// namespace dunedaq::fddetdataformats
121
122
#include "
detail/WIBEthFrame.hxx
"
123
124
// NOLINTEND(build/unsigned)
125
126
#endif
// FDDETDATAFORMATS_INCLUDE_FDDETDATAFORMATS_WIBETHFRAME_HPP_
DAQEthHeader.hpp
FrameConcepts.hpp
WIBEthFrame.hxx
dunedaq::fddetdataformats::AdaptableFrameConcept
Definition
FrameConcepts.hpp:96
Utils.hpp
dunedaq::fddetdataformats
Definition
CRTBernFrame.hpp:29
dunedaq::detdataformats::DAQEthHeader
DAQEthHeader is a versioned and unified structure for every FE electronics.
Definition
DAQEthHeader.hpp:23
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader
Definition
WIBEthFrame.hpp:54
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::pad_1
word_t pad_1
Definition
WIBEthFrame.hpp:60
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::channel
word_t channel
Definition
WIBEthFrame.hpp:72
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::colddata_timestamp_1
word_t colddata_timestamp_1
Definition
WIBEthFrame.hpp:59
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::context
word_t context
Definition
WIBEthFrame.hpp:70
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::wib_sync
word_t wib_sync
Definition
WIBEthFrame.hpp:65
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::pad_0
word_t pad_0
Definition
WIBEthFrame.hpp:58
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::version
word_t version
Definition
WIBEthFrame.hpp:71
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::colddata_timestamp_0
word_t colddata_timestamp_0
Definition
WIBEthFrame.hpp:57
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::cd
word_t cd
Definition
WIBEthFrame.hpp:61
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::lol
word_t lol
Definition
WIBEthFrame.hpp:64
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::crc_err
word_t crc_err
Definition
WIBEthFrame.hpp:62
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::extra_data
word_t extra_data
Definition
WIBEthFrame.hpp:73
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::s_expected_bytes
static constexpr std::size_t s_expected_bytes
Definition
WIBEthFrame.hpp:55
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::calibration
word_t calibration
Definition
WIBEthFrame.hpp:68
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::ready
word_t ready
Definition
WIBEthFrame.hpp:69
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::pulser
word_t pulser
Definition
WIBEthFrame.hpp:67
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::link_valid
word_t link_valid
Definition
WIBEthFrame.hpp:63
dunedaq::fddetdataformats::WIBEthFrame::WIBEthHeader::femb_sync
word_t femb_sync
Definition
WIBEthFrame.hpp:66
dunedaq::fddetdataformats::WIBEthFrame
struct for accessing raw WIB eth frames, as used in ProtoDUNE-II
Definition
WIBEthFrame.hpp:40
dunedaq::fddetdataformats::WIBEthFrame::get_timestamp
uint64_t get_timestamp() const
Get the starting 64-bit timestamp of the frame.
Definition
WIBEthFrame.hpp:94
dunedaq::fddetdataformats::WIBEthFrame::s_half_fembs_per_frame
static constexpr int s_half_fembs_per_frame
Definition
WIBEthFrame.hpp:49
dunedaq::fddetdataformats::WIBEthFrame::set_channel
void set_channel(const uint8_t new_channel)
Set the channel identifier of the frame.
Definition
WIBEthFrame.hpp:103
dunedaq::fddetdataformats::WIBEthFrame::s_bits_per_word
static constexpr int s_bits_per_word
Definition
WIBEthFrame.hpp:46
dunedaq::fddetdataformats::WIBEthFrame::s_bits_per_adc
static constexpr int s_bits_per_adc
Definition
WIBEthFrame.hpp:45
dunedaq::fddetdataformats::WIBEthFrame::adc_words
word_t adc_words[s_time_samples_per_frame][s_num_adc_words_per_ts]
Definition
WIBEthFrame.hpp:111
dunedaq::fddetdataformats::WIBEthFrame::s_expected_bytes
static constexpr size_t s_expected_bytes
Definition
WIBEthFrame.hpp:77
dunedaq::fddetdataformats::WIBEthFrame::get_channel
uint8_t get_channel() const
Get the channel identifier of the frame.
Definition
WIBEthFrame.hpp:100
dunedaq::fddetdataformats::WIBEthFrame::get_adc
uint16_t get_adc(int i_channel, int i_sample=0) const
Get the i_channel-th ADC value in the i_sample-th time sample.
Definition
WIBEthFrame.hxx:5
dunedaq::fddetdataformats::WIBEthFrame::header
WIBEthHeader header
Definition
WIBEthFrame.hpp:110
dunedaq::fddetdataformats::WIBEthFrame::word_t
uint64_t word_t
Definition
WIBEthFrame.hpp:43
dunedaq::fddetdataformats::WIBEthFrame::daq_header
detdataformats::DAQEthHeader daq_header
Definition
WIBEthFrame.hpp:109
dunedaq::fddetdataformats::WIBEthFrame::set_adc
void set_adc(int i_channel, int i_sample, uint16_t adc_val)
Set the i_channel-th ADC value in the i_sample-th time sample to adc_val.
Definition
WIBEthFrame.hxx:15
dunedaq::fddetdataformats::WIBEthFrame::s_time_samples_per_frame
static constexpr int s_time_samples_per_frame
Definition
WIBEthFrame.hpp:47
dunedaq::fddetdataformats::WIBEthFrame::set_timestamp
void set_timestamp(const uint64_t new_timestamp)
Set the starting 64-bit timestamp of the frame.
Definition
WIBEthFrame.hpp:97
dunedaq::fddetdataformats::WIBEthFrame::s_num_channels
static constexpr int s_num_channels
Definition
WIBEthFrame.hpp:50
dunedaq::fddetdataformats::WIBEthFrame::s_num_adc_words_per_ts
static constexpr int s_num_adc_words_per_ts
Definition
WIBEthFrame.hpp:51
dunedaq::fddetdataformats::WIBEthFrame::operator<
bool operator<(const WIBEthFrame &other) const
Definition
WIBEthFrame.hpp:105
dunedaq::fddetdataformats::WIBEthFrame::s_channels_per_half_femb
static constexpr int s_channels_per_half_femb
Definition
WIBEthFrame.hpp:48
Generated on
for DUNE-DAQ by
1.17.0