HIPO  4.3.0
High Performance Output data format for experimental physics
constants.h
Go to the documentation of this file.
1 #pragma once
2 #include <cstdint>
3 
4 namespace hipo {
5 
6 // --- Magic numbers ---
7 inline constexpr uint32_t HIPO_FILE_UNIQUE_WORD = 0x4F504948; // "HIPO" in LE
8 inline constexpr uint32_t HEADER_MAGIC = 0xc0da0100; // endianness marker
9 inline constexpr uint32_t HEADER_MAGIC_BE = 0x0001dac0; // big-endian marker
10 
11 // --- Header sizes (in 32-bit words) ---
12 inline constexpr int FILE_HEADER_WORDS = 14;
13 inline constexpr int RECORD_HEADER_WORDS = 14;
14 inline constexpr int FILE_HEADER_SIZE = FILE_HEADER_WORDS * 4; // 56 bytes
15 inline constexpr int RECORD_HEADER_SIZE = RECORD_HEADER_WORDS * 4; // 56 bytes
16 inline constexpr int EVENT_HEADER_SIZE = 16;
17 inline constexpr int BANK_STRUCTURE_SIZE = 8;
18 
19 // --- File header field offsets (byte offsets) ---
20 inline constexpr int FH_UNIQUE_WORD_OFFSET = 0; // word 1
21 inline constexpr int FH_FILE_NUMBER_OFFSET = 4; // word 2
22 inline constexpr int FH_HEADER_LENGTH_OFFSET = 8; // word 3 (in words)
23 inline constexpr int FH_RECORD_COUNT_OFFSET = 12; // word 4
24 inline constexpr int FH_INDEX_ARRAY_LEN_OFFSET = 16; // word 5 (in bytes)
25 inline constexpr int FH_BIT_INFO_OFFSET = 20; // word 6
26 inline constexpr int FH_USER_HEADER_LEN_OFFSET = 24; // word 7 (in bytes)
27 inline constexpr int FH_MAGIC_NUMBER_OFFSET = 28; // word 8
28 inline constexpr int FH_USER_REGISTER_OFFSET = 32; // words 9-10 (64-bit)
29 inline constexpr int FH_TRAILER_POS_OFFSET = 40; // words 11-12 (64-bit)
30 inline constexpr int FH_USER_INT1_OFFSET = 48; // word 13
31 inline constexpr int FH_USER_INT2_OFFSET = 52; // word 14
32 
33 // --- Record header field offsets (byte offsets) ---
34 inline constexpr int RH_RECORD_LENGTH_OFFSET = 0; // word 1
35 inline constexpr int RH_RECORD_NUMBER_OFFSET = 4; // word 2
36 inline constexpr int RH_HEADER_LENGTH_OFFSET = 8; // word 3 (in words)
37 inline constexpr int RH_EVENT_COUNT_OFFSET = 12; // word 4
38 inline constexpr int RH_INDEX_ARRAY_LEN_OFFSET = 16; // word 5 (in bytes)
39 inline constexpr int RH_BIT_INFO_OFFSET = 20; // word 6
40 inline constexpr int RH_USER_HEADER_LEN_OFFSET = 24; // word 7
41 inline constexpr int RH_MAGIC_NUMBER_OFFSET = 28; // word 8
42 inline constexpr int RH_DATA_LENGTH_OFFSET = 32; // word 9
43 inline constexpr int RH_COMP_WORD_OFFSET = 36; // word 10
44 inline constexpr int RH_USER_WORD1_OFFSET = 40; // words 11-12 (64-bit)
45 inline constexpr int RH_USER_WORD2_OFFSET = 48; // words 13-14 (64-bit)
46 
47 // --- Event header field offsets (byte offsets) ---
48 inline constexpr int EH_MAGIC_OFFSET = 0;
49 inline constexpr int EH_SIZE_OFFSET = 4;
50 inline constexpr int EH_TAG_OFFSET = 8;
51 inline constexpr int EH_RESERVED_OFFSET = 12;
52 
53 // --- Dictionary identifiers ---
54 inline constexpr int DICT_GROUP = 120;
55 inline constexpr int DICT_ITEM = 2;
56 inline constexpr int DICT_JSON_ITEM = 1;
57 inline constexpr int CONFIG_GROUP = 32555;
58 inline constexpr int CONFIG_KEY_ITEM = 1;
59 inline constexpr int CONFIG_STRING_ITEM = 2;
60 inline constexpr int FILE_INDEX_GROUP = 32111;
61 inline constexpr int FILE_INDEX_ITEM = 1;
62 
63 // --- Header type (bits[28-31] of bit-info in file header) ---
64 enum class header_type : uint8_t {
65  evio_record = 0,
66  evio_file = 1,
67  evio_ext_file = 2,
68  hipo_record = 4,
69  hipo_file = 5,
70  hipo_ext_file = 6,
71  hipo_trailer = 7,
72 };
73 
74 // --- Compression type (bits[28-31] of compression word) ---
75 enum class compression_type : uint8_t {
76  none = 0,
77  lz4 = 1,
78  lz4_best = 2,
79  gzip = 3,
80 };
81 
82 // --- Bit-info word layout ---
83 // File header bit-info:
84 // bits[0-7] = version
85 // bit[8] = has dictionary (first record)
86 // bit[9] = has "first event" (in every split file)
87 // bit[10] = file trailer with index exists
88 // bits[11-19] = reserved
89 // bits[20-21] = pad1 (user header padding)
90 // bits[22-23] = pad2 (data padding)
91 // bits[24-25] = pad3 (compressed data padding)
92 // bits[26-27] = reserved
93 // bits[28-31] = general header type
94 //
95 // Record header bit-info:
96 // bits[0-7] = version
97 // bit[8] = last record
98 // bit[9] = reserved
99 // bit[10] = has-dictionary (record has dictionary in user header)
100 // bit[11] = has-first-event
101 // bits[20-21] = pad1
102 // bits[22-23] = pad2
103 // bits[24-25] = pad3
104 inline constexpr uint32_t BITINFO_VERSION_MASK = 0x000000FF;
105 inline constexpr int BITINFO_VERSION_BITS = 8;
106 inline constexpr int BITINFO_HAS_DICTIONARY_BIT = 8;
107 inline constexpr int BITINFO_HAS_FIRST_EVENT_BIT = 9;
108 inline constexpr int BITINFO_TRAILER_WITH_INDEX_BIT = 10;
109 inline constexpr int BITINFO_PAD1_SHIFT = 20;
110 inline constexpr int BITINFO_PAD2_SHIFT = 22;
111 inline constexpr int BITINFO_PAD3_SHIFT = 24;
112 inline constexpr uint32_t BITINFO_PAD_MASK = 0x3;
113 inline constexpr int BITINFO_HEADER_TYPE_SHIFT = 28;
114 
115 // --- Compression word layout ---
116 // bits[28-31] = compression type
117 // bits[0-27] = compressed data length in 32-bit WORDS (not bytes!)
118 inline constexpr uint32_t COMP_TYPE_MASK = 0xF0000000;
119 inline constexpr int COMP_TYPE_SHIFT = 28;
120 inline constexpr uint32_t COMP_LENGTH_MASK = 0x0FFFFFFF;
121 
122 // --- Bank/node structure word layout ---
123 // The 32-bit size word at offset +4 in a structure header:
124 // bits[0-23] = total size (format + data)
125 // bits[24-31] = format descriptor length
126 inline constexpr uint32_t STRUCT_SIZE_MASK = 0x00FFFFFF;
127 inline constexpr uint32_t STRUCT_FORMAT_MASK = 0xFF000000;
128 inline constexpr int STRUCT_FORMAT_SHIFT = 24;
129 inline constexpr uint32_t STRUCT_FORMAT_BYTE = 0x000000FF; // after shift
130 
131 // --- Protocol version ---
132 inline constexpr int HIPO_VERSION = 6;
133 
134 } // namespace hipo
Definition: bank.cpp:47
constexpr uint32_t COMP_LENGTH_MASK
Definition: constants.h:120
constexpr uint32_t HIPO_FILE_UNIQUE_WORD
Definition: constants.h:7
constexpr uint32_t HEADER_MAGIC_BE
Definition: constants.h:9
constexpr uint32_t STRUCT_FORMAT_BYTE
Definition: constants.h:129
constexpr int BANK_STRUCTURE_SIZE
Definition: constants.h:17
constexpr int BITINFO_PAD3_SHIFT
Definition: constants.h:111
constexpr int FH_USER_INT2_OFFSET
Definition: constants.h:31
constexpr int FILE_INDEX_ITEM
Definition: constants.h:61
constexpr int FH_USER_HEADER_LEN_OFFSET
Definition: constants.h:26
constexpr uint32_t BITINFO_PAD_MASK
Definition: constants.h:112
constexpr int EH_MAGIC_OFFSET
Definition: constants.h:48
constexpr int BITINFO_PAD1_SHIFT
Definition: constants.h:109
constexpr int FH_INDEX_ARRAY_LEN_OFFSET
Definition: constants.h:24
constexpr int FILE_HEADER_WORDS
Definition: constants.h:12
constexpr int RECORD_HEADER_SIZE
Definition: constants.h:15
constexpr int RECORD_HEADER_WORDS
Definition: constants.h:13
constexpr int DICT_GROUP
Definition: constants.h:54
constexpr int RH_INDEX_ARRAY_LEN_OFFSET
Definition: constants.h:38
constexpr int CONFIG_GROUP
Definition: constants.h:57
compression_type
Definition: constants.h:75
constexpr int EH_SIZE_OFFSET
Definition: constants.h:49
constexpr int CONFIG_KEY_ITEM
Definition: constants.h:58
constexpr int BITINFO_HAS_DICTIONARY_BIT
Definition: constants.h:106
constexpr int RH_EVENT_COUNT_OFFSET
Definition: constants.h:37
constexpr int STRUCT_FORMAT_SHIFT
Definition: constants.h:128
constexpr int RH_USER_WORD2_OFFSET
Definition: constants.h:45
constexpr int FH_USER_INT1_OFFSET
Definition: constants.h:30
constexpr int FH_RECORD_COUNT_OFFSET
Definition: constants.h:23
constexpr int EVENT_HEADER_SIZE
Definition: constants.h:16
constexpr int BITINFO_PAD2_SHIFT
Definition: constants.h:110
header_type
Definition: constants.h:64
constexpr int RH_BIT_INFO_OFFSET
Definition: constants.h:39
constexpr int RH_USER_HEADER_LEN_OFFSET
Definition: constants.h:40
constexpr int RH_RECORD_NUMBER_OFFSET
Definition: constants.h:35
constexpr int COMP_TYPE_SHIFT
Definition: constants.h:119
constexpr int RH_HEADER_LENGTH_OFFSET
Definition: constants.h:36
constexpr int RH_MAGIC_NUMBER_OFFSET
Definition: constants.h:41
constexpr int EH_TAG_OFFSET
Definition: constants.h:50
constexpr int RH_RECORD_LENGTH_OFFSET
Definition: constants.h:34
constexpr uint32_t HEADER_MAGIC
Definition: constants.h:8
constexpr int FH_FILE_NUMBER_OFFSET
Definition: constants.h:21
constexpr int FILE_INDEX_GROUP
Definition: constants.h:60
constexpr int FH_UNIQUE_WORD_OFFSET
Definition: constants.h:20
constexpr int DICT_JSON_ITEM
Definition: constants.h:56
constexpr int EH_RESERVED_OFFSET
Definition: constants.h:51
constexpr int FILE_HEADER_SIZE
Definition: constants.h:14
constexpr uint32_t BITINFO_VERSION_MASK
Definition: constants.h:104
constexpr int FH_BIT_INFO_OFFSET
Definition: constants.h:25
constexpr int RH_USER_WORD1_OFFSET
Definition: constants.h:44
constexpr int BITINFO_HAS_FIRST_EVENT_BIT
Definition: constants.h:107
constexpr int RH_COMP_WORD_OFFSET
Definition: constants.h:43
constexpr int FH_HEADER_LENGTH_OFFSET
Definition: constants.h:22
constexpr int BITINFO_VERSION_BITS
Definition: constants.h:105
constexpr int FH_USER_REGISTER_OFFSET
Definition: constants.h:28
constexpr uint32_t STRUCT_FORMAT_MASK
Definition: constants.h:127
constexpr int FH_MAGIC_NUMBER_OFFSET
Definition: constants.h:27
constexpr int BITINFO_HEADER_TYPE_SHIFT
Definition: constants.h:113
constexpr int FH_TRAILER_POS_OFFSET
Definition: constants.h:29
constexpr uint32_t COMP_TYPE_MASK
Definition: constants.h:118
constexpr int HIPO_VERSION
Definition: constants.h:132
constexpr int DICT_ITEM
Definition: constants.h:55
constexpr int RH_DATA_LENGTH_OFFSET
Definition: constants.h:42
constexpr int BITINFO_TRAILER_WITH_INDEX_BIT
Definition: constants.h:108
constexpr uint32_t STRUCT_SIZE_MASK
Definition: constants.h:126
constexpr int CONFIG_STRING_ITEM
Definition: constants.h:59