File indexing completed on 2024-05-31 04:19:42
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include "IOPool/Streamer/interface/FRDEventMessage.h"
0013 #include "FWCore/Utilities/interface/Exception.h"
0014
0015 using namespace edm::streamer;
0016
0017
0018
0019
0020 FRDEventMsgView::FRDEventMsgView(void* buf)
0021 : buf_((uint8*)buf),
0022 payload_(nullptr),
0023 size_(0),
0024 version_(0),
0025 flags_(0),
0026 run_(0),
0027 lumi_(0),
0028 event_(0),
0029 eventSize_(0),
0030 paddingSize_(0),
0031 adler32_(0),
0032 crc32c_(0) {
0033 uint32* bufPtr = static_cast<uint32*>(buf);
0034
0035
0036
0037
0038 version_ = *(uint16*)bufPtr;
0039
0040 if (version_ < 2 || version_ > 6) {
0041 throw cms::Exception("FRDEventMsgView") << "FRD version " << version_ << " is not supported";
0042 }
0043
0044
0045
0046 flags_ = *((uint16*)bufPtr + 1);
0047
0048 if (version_ < 6 && flags_) {
0049 throw cms::Exception("FRDEventMsgView") << "FRD flags can not be used in version " << version_;
0050 }
0051
0052 size_ = sizeof(uint32);
0053 ++bufPtr;
0054
0055
0056 run_ = *bufPtr;
0057 size_ += sizeof(uint32);
0058 ++bufPtr;
0059
0060
0061 if (version_ >= 2) {
0062 lumi_ = *bufPtr;
0063 size_ += sizeof(uint32);
0064 ++bufPtr;
0065 }
0066
0067
0068 if (version_ == 4) {
0069 uint64 eventLow = *bufPtr;
0070 size_ += sizeof(uint32);
0071 ++bufPtr;
0072
0073 uint64 eventHigh = *bufPtr;
0074 size_ += sizeof(uint32);
0075 ++bufPtr;
0076
0077 event_ = (eventHigh << 32) | eventLow;
0078
0079 } else {
0080 event_ = *bufPtr;
0081 size_ += sizeof(uint32);
0082 ++bufPtr;
0083 }
0084
0085 if (version_ >= 3) {
0086
0087 eventSize_ = *bufPtr;
0088 size_ += sizeof(uint32) + eventSize_;
0089 ++bufPtr;
0090
0091 if (version_ >= 5) {
0092 crc32c_ = *bufPtr;
0093 size_ += sizeof(uint32);
0094 ++bufPtr;
0095 } else {
0096
0097 paddingSize_ = *bufPtr;
0098 size_ += sizeof(uint32) + paddingSize_;
0099 ++bufPtr;
0100
0101 adler32_ = *bufPtr;
0102 size_ += sizeof(uint32);
0103 ++bufPtr;
0104 }
0105 } else {
0106 for (int idx = 0; idx < 1024; idx++) {
0107 size_ += sizeof(uint32);
0108 size_ += *bufPtr;
0109 eventSize_ += *bufPtr;
0110 ++bufPtr;
0111 }
0112 }
0113
0114 payload_ = (void*)bufPtr;
0115 }