File indexing completed on 2023-10-25 09:53:46
0001 #ifndef IOPool_Streamer_FRDFileHeader_h
0002 #define IOPool_Streamer_FRDFileHeader_h
0003
0004 #include <array>
0005 #include <cstddef>
0006 #include <cstdint>
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 constexpr std::array<unsigned char, 4> FRDFileHeader_id{{0x52, 0x41, 0x57, 0x5f}};
0022 constexpr std::array<unsigned char, 4> FRDFileVersion_1{{0x30, 0x30, 0x30, 0x31}};
0023 constexpr std::array<unsigned char, 4> FRDFileVersion_2{{0x30, 0x30, 0x30, 0x32}};
0024
0025 struct FRDFileHeaderIdentifier {
0026 FRDFileHeaderIdentifier(const std::array<uint8_t, 4>& id, const std::array<uint8_t, 4>& version)
0027 : id_(id), version_(version) {}
0028
0029 std::array<uint8_t, 4> id_;
0030 std::array<uint8_t, 4> version_;
0031 };
0032
0033 struct FRDFileHeaderContent_v1 {
0034 FRDFileHeaderContent_v1(uint16_t eventCount, uint32_t lumiSection, uint64_t fileSize)
0035 : headerSize_(sizeof(FRDFileHeaderContent_v1) + sizeof(FRDFileHeaderIdentifier)),
0036 eventCount_(eventCount),
0037 lumiSection_(lumiSection),
0038 fileSize_(fileSize) {}
0039
0040 uint16_t headerSize_;
0041 uint16_t eventCount_;
0042 uint32_t lumiSection_;
0043 uint64_t fileSize_;
0044 };
0045
0046 struct FRDFileHeader_v1 {
0047 FRDFileHeader_v1(uint16_t eventCount, uint32_t lumiSection, uint64_t fileSize)
0048 : id_(FRDFileHeader_id, FRDFileVersion_1), c_(eventCount, lumiSection, fileSize) {}
0049
0050 FRDFileHeaderIdentifier id_;
0051 FRDFileHeaderContent_v1 c_;
0052 };
0053
0054 struct FRDFileHeaderContent_v2 {
0055 FRDFileHeaderContent_v2(
0056 uint16_t dataType, uint16_t eventCount, uint32_t runNumber, uint32_t lumiSection, uint64_t fileSize)
0057 : headerSize_(sizeof(FRDFileHeaderContent_v2) + sizeof(FRDFileHeaderIdentifier)),
0058 dataType_(dataType),
0059 eventCount_(eventCount),
0060 runNumber_(runNumber),
0061 lumiSection_(lumiSection),
0062 fileSize_(fileSize) {}
0063
0064 uint16_t headerSize_;
0065 uint16_t dataType_;
0066 uint32_t eventCount_;
0067 uint32_t runNumber_;
0068 uint32_t lumiSection_;
0069 uint64_t fileSize_;
0070 };
0071
0072 struct FRDFileHeader_v2 {
0073 FRDFileHeader_v2(uint16_t dataType, uint16_t eventCount, uint32_t runNumber, uint32_t lumiSection, uint64_t fileSize)
0074 : id_(FRDFileHeader_id, FRDFileVersion_2), c_(dataType, eventCount, runNumber, lumiSection, fileSize) {}
0075
0076 FRDFileHeaderIdentifier id_;
0077 FRDFileHeaderContent_v2 c_;
0078 };
0079
0080 inline uint16_t getFRDFileHeaderVersion(const std::array<uint8_t, 4>& id, const std::array<uint8_t, 4>& version) {
0081 size_t i;
0082 for (i = 0; i < 4; i++)
0083 if (id[i] != FRDFileHeader_id[i])
0084 return 0;
0085 uint16_t ret = 0;
0086 for (i = 0; i < 4; i++) {
0087 if (version[i] > '9' || version[i] < '0')
0088 return 0;
0089 ret = ret * 10 + (uint16_t)(version[i] - '0');
0090 }
0091 return ret;
0092 }
0093
0094 #endif