HIPO4 C++ Library 4.4.1
Columnar I/O library for CLAS12 physics data
Loading...
Searching...
No Matches
constants.h
Go to the documentation of this file.
1#pragma once
2#include <cstdint>
3
4namespace hipo {
5
6// --- Magic numbers ---
7inline constexpr uint32_t HIPO_FILE_UNIQUE_WORD = 0x4F504948; // "HIPO" in LE
8inline constexpr uint32_t HEADER_MAGIC = 0xc0da0100; // endianness marker
9inline constexpr uint32_t HEADER_MAGIC_BE = 0x0001dac0; // big-endian marker
10
11// --- Header sizes (in 32-bit words) ---
12inline constexpr int FILE_HEADER_WORDS = 14;
13inline constexpr int RECORD_HEADER_WORDS = 14;
14inline constexpr int FILE_HEADER_SIZE = FILE_HEADER_WORDS * 4; // 56 bytes
15inline constexpr int RECORD_HEADER_SIZE = RECORD_HEADER_WORDS * 4; // 56 bytes
16inline constexpr int EVENT_HEADER_SIZE = 16;
17inline constexpr int BANK_STRUCTURE_SIZE = 8;
18
19// --- File header field offsets (byte offsets) ---
20inline constexpr int FH_UNIQUE_WORD_OFFSET = 0; // word 1
21inline constexpr int FH_FILE_NUMBER_OFFSET = 4; // word 2
22inline constexpr int FH_HEADER_LENGTH_OFFSET = 8; // word 3 (in words)
23inline constexpr int FH_RECORD_COUNT_OFFSET = 12; // word 4
24inline constexpr int FH_INDEX_ARRAY_LEN_OFFSET = 16; // word 5 (in bytes)
25inline constexpr int FH_BIT_INFO_OFFSET = 20; // word 6
26inline constexpr int FH_USER_HEADER_LEN_OFFSET = 24; // word 7 (in bytes)
27inline constexpr int FH_MAGIC_NUMBER_OFFSET = 28; // word 8
28inline constexpr int FH_USER_REGISTER_OFFSET = 32; // words 9-10 (64-bit)
29inline constexpr int FH_TRAILER_POS_OFFSET = 40; // words 11-12 (64-bit)
30inline constexpr int FH_USER_INT1_OFFSET = 48; // word 13
31inline constexpr int FH_USER_INT2_OFFSET = 52; // word 14
32
33// --- Record header field offsets (byte offsets) ---
34inline constexpr int RH_RECORD_LENGTH_OFFSET = 0; // word 1
35inline constexpr int RH_RECORD_NUMBER_OFFSET = 4; // word 2
36inline constexpr int RH_HEADER_LENGTH_OFFSET = 8; // word 3 (in words)
37inline constexpr int RH_EVENT_COUNT_OFFSET = 12; // word 4
38inline constexpr int RH_INDEX_ARRAY_LEN_OFFSET = 16; // word 5 (in bytes)
39inline constexpr int RH_BIT_INFO_OFFSET = 20; // word 6
40inline constexpr int RH_USER_HEADER_LEN_OFFSET = 24; // word 7
41inline constexpr int RH_MAGIC_NUMBER_OFFSET = 28; // word 8
42inline constexpr int RH_DATA_LENGTH_OFFSET = 32; // word 9
43inline constexpr int RH_COMP_WORD_OFFSET = 36; // word 10
44inline constexpr int RH_USER_WORD1_OFFSET = 40; // words 11-12 (64-bit)
45inline constexpr int RH_USER_WORD2_OFFSET = 48; // words 13-14 (64-bit)
46
47// --- Event header field offsets (byte offsets) ---
48inline constexpr int EH_MAGIC_OFFSET = 0;
49inline constexpr int EH_SIZE_OFFSET = 4;
50inline constexpr int EH_TAG_OFFSET = 8;
51inline constexpr int EH_RESERVED_OFFSET = 12;
52
53// --- Dictionary identifiers ---
54inline constexpr int DICT_GROUP = 120;
55inline constexpr int DICT_ITEM = 2;
56inline constexpr int DICT_JSON_ITEM = 1;
57inline constexpr int CONFIG_GROUP = 32555;
58inline constexpr int CONFIG_KEY_ITEM = 1;
59inline constexpr int CONFIG_STRING_ITEM = 2;
60inline constexpr int FILE_INDEX_GROUP = 32111;
61inline constexpr int FILE_INDEX_ITEM = 1;
62
63// --- Header type (bits[28-31] of bit-info in file header) ---
64enum 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) ---
75enum 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
104inline constexpr uint32_t BITINFO_VERSION_MASK = 0x000000FF;
105inline constexpr int BITINFO_VERSION_BITS = 8;
106inline constexpr int BITINFO_HAS_DICTIONARY_BIT = 8;
107inline constexpr int BITINFO_HAS_FIRST_EVENT_BIT = 9;
108inline constexpr int BITINFO_TRAILER_WITH_INDEX_BIT = 10;
109inline constexpr int BITINFO_PAD1_SHIFT = 20;
110inline constexpr int BITINFO_PAD2_SHIFT = 22;
111inline constexpr int BITINFO_PAD3_SHIFT = 24;
112inline constexpr uint32_t BITINFO_PAD_MASK = 0x3;
113inline 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!)
118inline constexpr uint32_t COMP_TYPE_MASK = 0xF0000000;
119inline constexpr int COMP_TYPE_SHIFT = 28;
120inline constexpr uint32_t COMP_TYPE_BYTE = 0x0000000F; // after shift
121inline constexpr uint32_t COMP_LENGTH_MASK = 0x0FFFFFFF;
122
123// --- Bank/node structure word layout ---
124// The 32-bit size word at offset +4 in a structure header:
125// bits[0-23] = total size (format + data)
126// bits[24-31] = format descriptor length
127inline constexpr uint32_t STRUCT_SIZE_MASK = 0x00FFFFFF;
128inline constexpr uint32_t STRUCT_FORMAT_MASK = 0xFF000000;
129inline constexpr int STRUCT_FORMAT_SHIFT = 24;
130inline constexpr uint32_t STRUCT_FORMAT_BYTE = 0x000000FF; // after shift
131
132// --- Protocol version ---
133inline constexpr int HIPO_VERSION = 6;
134
135} // namespace hipo
HIPO namespace is used for the classes that read/write files and records.
Definition bank.cpp:45
constexpr uint32_t COMP_LENGTH_MASK
Definition constants.h:121
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:130
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:129
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 uint32_t COMP_TYPE_BYTE
Definition constants.h:120
constexpr int FH_USER_REGISTER_OFFSET
Definition constants.h:28
constexpr uint32_t STRUCT_FORMAT_MASK
Definition constants.h:128
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:133
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:127
constexpr int CONFIG_STRING_ITEM
Definition constants.h:59