AARE
Data analysis library for PSI hybrid detectors
Loading...
Searching...
No Matches
ZmqHeader.hpp
Go to the documentation of this file.
1#pragma once
2#include "aare/core/Frame.hpp"
4
5#include "simdjson.h"
6#include <array>
7#include <cstdint>
8#include <map>
9#include <string>
10namespace simdjson {
15template <> simdjson_inline simdjson::simdjson_result<std::array<int, 4>> simdjson::ondemand::value::get() noexcept {
16 ondemand::array array;
17 auto error = get_array().get(array);
18 if (error) {
19 return error;
20 }
21 std::array<int, 4> arr;
22 int i = 0;
23 for (auto v : array) {
24 int64_t val;
25 error = v.get_int64().get(val);
26
27 if (error) {
28 return error;
29 }
30 arr[i++] = val;
31 }
32 return arr;
33}
34
39template <> simdjson_inline simdjson::simdjson_result<uint32_t> simdjson::ondemand::value::get() noexcept {
40 size_t val;
41 auto error = get_uint64().get(val);
42 if (error) {
43 return error;
44 }
45 if (val > std::numeric_limits<uint32_t>::max()) {
46 return 1;
47 }
48 return static_cast<uint32_t>(val);
49}
50
54template <>
55simdjson_inline simdjson::simdjson_result<std::map<std::string, std::string>>
56simdjson::ondemand::value::get() noexcept {
57 std::map<std::string, std::string> map;
58 ondemand::object obj;
59 auto error = get_object().get(obj);
60 if (error) {
61 return error;
62 }
63 for (auto field : obj) {
64 simdjson::ondemand::raw_json_string tmp;
65 error = field.key().get(tmp);
66 if (error) {
67 return error;
68 }
69 error = field.value().get(tmp);
70 if (error) {
71 return error;
72 }
73 std::string_view key_view = field.unescaped_key();
74 std::string key_str(key_view.data(), key_view.size());
75 std::string_view value_view = field.value().get_string();
76 map[key_str] = {value_view.data(), value_view.size()};
77 }
78 return map;
79}
80
81} // namespace simdjson
82
83namespace aare {
84
86struct ZmqHeader {
88 bool data{true};
89 uint32_t jsonversion{0};
90 uint32_t dynamicRange{0};
91 uint64_t fileIndex{0};
93 uint32_t ndetx{0};
95 uint32_t ndety{0};
97 uint32_t npixelsx{0};
99 uint32_t npixelsy{0};
101 uint32_t imageSize{0};
103 uint64_t acqIndex{0};
105 uint64_t frameIndex{0};
107 double progress{0};
109 std::string fname;
111 uint64_t frameNumber{0};
112 uint32_t expLength{0};
113 uint32_t packetNumber{0};
114 uint64_t detSpec1{0};
115 uint64_t timestamp{0};
116 uint16_t modId{0};
117 uint16_t row{0};
118 uint16_t column{0};
119 uint16_t detSpec2{0};
120 uint32_t detSpec3{0};
121 uint16_t detSpec4{0};
122 uint8_t detType{0};
123 uint8_t version{0};
125 int flipRows{0};
127 uint32_t quad{0};
129 bool completeImage{false};
131 std::map<std::string, std::string> addJsonHeader;
133 std::array<int, 4> rx_roi{};
134
136 std::string to_string() const;
137 void from_string(std::string &s);
138 // compare operator
139 bool operator==(const ZmqHeader &other) const;
140};
141
142} // namespace aare
Frame class to represent a single frame of data model class should be able to work with streams comin...
Definition CircularFifo.hpp:11
Definition ZmqHeader.hpp:10
Definition ZmqHeader.hpp:86
uint8_t detType
Definition ZmqHeader.hpp:122
uint8_t version
Definition ZmqHeader.hpp:123
std::string to_string() const
Definition ZmqHeader.cpp:68
uint32_t expLength
Definition ZmqHeader.hpp:112
uint32_t packetNumber
Definition ZmqHeader.hpp:113
uint16_t row
Definition ZmqHeader.hpp:117
uint32_t dynamicRange
Definition ZmqHeader.hpp:90
uint64_t detSpec1
Definition ZmqHeader.hpp:114
bool operator==(const ZmqHeader &other) const
Definition ZmqHeader.cpp:187
int flipRows
Definition ZmqHeader.hpp:125
uint32_t npixelsy
Definition ZmqHeader.hpp:99
uint16_t modId
Definition ZmqHeader.hpp:116
uint32_t ndetx
Definition ZmqHeader.hpp:93
uint32_t imageSize
Definition ZmqHeader.hpp:101
uint32_t ndety
Definition ZmqHeader.hpp:95
uint16_t detSpec4
Definition ZmqHeader.hpp:121
uint32_t quad
Definition ZmqHeader.hpp:127
uint16_t detSpec2
Definition ZmqHeader.hpp:119
void from_string(std::string &s)
Definition ZmqHeader.cpp:111
uint16_t column
Definition ZmqHeader.hpp:118
uint64_t fileIndex
Definition ZmqHeader.hpp:91
uint64_t timestamp
Definition ZmqHeader.hpp:115
bool completeImage
Definition ZmqHeader.hpp:129
uint32_t npixelsx
Definition ZmqHeader.hpp:97
bool data
Definition ZmqHeader.hpp:88
uint32_t jsonversion
Definition ZmqHeader.hpp:89
std::map< std::string, std::string > addJsonHeader
Definition ZmqHeader.hpp:131
uint64_t frameNumber
Definition ZmqHeader.hpp:111
uint64_t frameIndex
Definition ZmqHeader.hpp:105
uint64_t acqIndex
Definition ZmqHeader.hpp:103
uint32_t detSpec3
Definition ZmqHeader.hpp:120
std::array< int, 4 > rx_roi
Definition ZmqHeader.hpp:133
std::string fname
Definition ZmqHeader.hpp:109
double progress
Definition ZmqHeader.hpp:107