gaps-online-software 0.10
online software for the TOF system for the GAPS experiment
Loading...
Searching...
No Matches
telemetry_dataclasses.hpp
1#ifndef GO_TELEMETRY_DATACLASSES_H_INLCUDED
2#define GO_TELEMETRY_DATACLASSES_H_INLCUDED
3
7
8#include "tof_typedefs.h"
9#include "result/result.h"
10#include "events.h"
11#include "errors.hpp"
12
13namespace g = Gaps;
14namespace r = result;
15
16namespace Gaps {
17 namespace Telemetry {
18
19 enum class BfswPacketType : u8 {
20 Unknown = 0,
21 CardHKP = 30,
22 CoolingHK = 40,
23 PDUHK = 50,
24 Tracker = 80,
25 TrackerDAQCntr = 81,
26 GPS = 82,
27 TrkTempLeak = 83,
28 BoringEvent = 90,
29 RBWaveform = 91,
30 AnyTofHK = 92,
31 GcuEvtBldSettings = 93,
32 LabJackHK = 100,
33 MagHK = 108,
34 GcuMon = 110,
35 InterestingEvent = 190,
36 NoGapsTriggerEvent = 191,
37 NoTofDataEvent = 192,
38 Ack = 200,
39 AnyTrackerHK = 255,
40 // unknown/unused stuff
41 TmP33 = 33,
42 TmP34 = 34,
43 TmP37 = 37,
44 TmP38 = 38,
45 TmP55 = 55,
46 TmP64 = 64,
47 //TmP92 = 92,
48 TmP96 = 96,
49 TmP214 = 214,
50 };
51
52 auto bfsw_ptype_to_u8(BfswPacketType pt) -> u8;
53 auto bfsw_ptype_to_str(BfswPacketType pt) -> std::string;
54
55 struct PacketHeader {
56 static constexpr u16 SIZE = 13;
57 static constexpr u16 HEAD = 0x90eb;
58
59 u16 sync {0};
60 BfswPacketType ptype {BfswPacketType::Unknown};
61 u32 timestamp{0};
62 u16 counter {0};
63 u16 length {0};
64 u16 checksum {0};
65
66 auto get_gcutime() -> f64;
67 auto to_string() const -> std::string;
68 static auto from_bytestream(Vec<u8> const &stream, usize &pos)
69 -> r::Result<PacketHeader, g::IOError>;
70 };
71
72 struct Packet {
73 PacketHeader header;
74 Vec<u8> payload;
75 auto to_string() const -> std::string;
76 static auto from_bytestream(Vec<u8> const &stream, usize &pos) -> Packet;
77 };
78
79 struct TrkHit {
80 // using i32 here makes no sense in my eyes, but I defer to
81 // bfsw
82 i32 layer {-1};
83 i32 row {-1};
84 i32 module {-1};
85 i32 channel {-1};
86 i32 adc {-1};
87 i64 oscillator {-1};
88 f64 energy {0};
89
90 auto to_string() const -> std::string;
91 };
92
93 struct TrkEvent {
94 u8 layer;
95 u8 flags1;
96 u32 event_id;
97 u32 event_time;
98 Vec<TrkHit> hits;
99
100 auto to_string() const -> std::string;
101 };
102
103 struct TofMetaData {
104 u32 event_id {0xffffffff};
105 u8 status_version {0xff};
106 bool stats_valid {false};
107 u16 trigger_sources {0};
108 u8 n_hits_umb {0xff};
109 u8 n_hits_cbe {0xff};
110 u8 n_hits_cor {0xff};
111 f32 tot_edep_umb {0};
112 f32 tot_edep_cbe {0};
113 f32 tot_edep_cor {0};
114
115 static auto from_bytestream(Vec<u8> const &stream, usize &pos) -> TofMetaData;
116 auto to_string() const -> std::string;
117 };
118
120 u16 strip_id;
121 u16 adc;
122 //calibrated_hit(uint16_t strip_id, uint16_t adc) : strip_id(strip_id), adc(adc) {}
123 };
124
125 struct TrkMetaData {
126 u64 num_hits {0};
127 u64 row_flags {0};
128 f64 total_energy {0};
129 Vec<TrkCalibratedHit> calibrated_hits;
130 //std::array<uint64_t,8> oscillators = {0,0,0,0,0,0,0,0};
131 };
132
133 struct Cooling {
135 static constexpr u16 SIZE = 105;
136
137 PacketHeader header;
138 u32 frame_counter {0xffffffff};
139 u8 status_1 {0xff};
140 u8 status_2 {0xff};
141 u8 rx_byte_num {0xff};
142 u8 rx_cmd_num {0xff};
143 u64 last_cmd {0xffffffffffffffff};
144 u16 rsv_t {0xffff};
145 u16 rh_on {0xffff};
146 u16 rh_off {0xffff};
147 u16 fpga_board_v_in {0xffff};
148 u16 fpga_board_i_in {0xffff};
149 u16 fpga_board_t {0xffff};
150 u16 fpga_board_p {0xffff};
151 std::array<u16, 64> rtd;
152 u16 sh_current {0xffff};
153 u16 rh_current {0xffff};
154 u16 pw_board1_t {0xffff};
155 u16 pw_board2_t {0xffff};
156 u16 sh1_time_left {0xffff};
157 u16 sh2_time_left {0xffff};
158 u16 sh3_time_left {0xffff};
159
160 auto to_string() const -> std::string;
161
162 static auto from_bytestream(Vec<u8> const &stream, usize &pos)
163 -> r::Result<Cooling, g::IOError>;
164 };
165
167 struct MergedEvent {
168 // bfsw::header header;
169 // uint8_t flags0 {0};
170 // uint64_t row_flags {0};
171 // uint32_t event_id {0xffffffff};
172 // uint8_t num_tof_hits {0};
173 // std::vector<uint8_t> tof_data;
174 // std::vector<tracker_hit> tracker_hits;
175 // std::vector<uint64_t> tracker_oscillators;
176
177 PacketHeader header;
178 u8 version = 0;
179 u8 flags0 = 0;
180 u8 flags1 = 0;
181 Vec<u8> row_flags;
182 u64 creation_time = 0;
183 u32 event_id = 0;
184 u8 n_tof_hits = 0;
185 u16 n_trk_hits = 0;
186 Vec<TrkEvent> tracker_events;
187 Vec<TrkHit> trk_hits;
188 TofEventSummary tof_event;
189 Vec<u8> raw_data;
190 TofMetaData tof_meta;
191 TrkMetaData tracker_meta;
192 Vec<u64> tracker_oscillators = Vec<u64>(10,0) ;
193
194 auto to_string() const -> std::string;
195 static auto from_bytestream(Vec<u8> const &stream, usize &pos)
196 -> r::Result<MergedEvent, g::IOError>;
197 };
198 }
199}
200
201#endif
Definition calibration.h:105
Definition telemetry_dataclasses.hpp:133
static constexpr u16 SIZE
size with packet header
Definition telemetry_dataclasses.hpp:135
The actual merged event sent over telemetry.
Definition telemetry_dataclasses.hpp:167
Definition telemetry_dataclasses.hpp:55
Definition telemetry_dataclasses.hpp:72
Definition telemetry_dataclasses.hpp:103
Definition telemetry_dataclasses.hpp:119
Definition telemetry_dataclasses.hpp:93
Definition telemetry_dataclasses.hpp:79
Definition telemetry_dataclasses.hpp:125
Definition events.h:626
Definition events.h:647