00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "FileReadoutFormat/FileStartRecord.h"
00011
00012 #include "DaqReadoutFormat/ByteBuffer.h"
00013
00014 using DybDaq::ByteBuffer;
00015 using DybDaq::DaqTraits;
00016 using DybDaq::FileTraits;
00017 using DybDaq::FileStartRecord;
00018
00019 static const unsigned int kTmBaseYear = 1900;
00020
00021 FileStartRecord::FileStartRecord(const unsigned int fileNumber,
00022 const FileTraits::FileDateTime& dateTime,
00023 const unsigned int dataBlockLimit,
00024 const unsigned int megabyteLimit,
00025 const FileTraits& traits) :
00026 FileBuffer(new char[traits.recordSize(FileTraits::kFileStartRecord) * kBytesInInt],
00027 traits,
00028 FileTraits::kFileStartRecord) {
00029 m_traits = &traits;
00030 setMajorVersion(traits.majorVersion());
00031 setMinorVersion(traits.minorVersion());
00032 setFileNumber(fileNumber);
00033 setDateTime(dateTime);
00034 setDataBlockLimit(dataBlockLimit);
00035 setMegabyteLimit(megabyteLimit);
00036 }
00037
00038
00039 FileStartRecord::FileStartRecord(const ByteBuffer& byteBuffer,
00040 const FileTraits& traits) :
00041 FileBuffer(byteBuffer,
00042 traits) {
00043 m_traits = &traits;
00044 const char* buffer = byteBuffer.cursor() - (size() * kBytesInInt);
00045 m_traits = FileTraits::readTraits(buffer);
00046 }
00047
00048 FileStartRecord::~FileStartRecord() {
00049 }
00050
00051 const DaqTraits& FileStartRecord::daqTraits() const {
00052 return *m_traits;
00053 }
00054
00055 bool FileStartRecord::isMarked(unsigned int marker) const {
00056 return FileTraits::kFileStartRecord == marker;
00057 }
00058
00059 unsigned int FileStartRecord::majorVersion() const {
00060 return readUnsignedInt(FileTraits::kMajorVersion);
00061 }
00062
00063 unsigned int FileStartRecord::minorVersion() const {
00064 return readUnsignedInt(FileTraits::kMinorVersion);
00065 }
00066
00067 unsigned int FileStartRecord::fileNumber() const {
00068 return readUnsignedInt(FileTraits::kFileNumber);
00069 }
00070
00071 FileTraits::FileDateTime FileStartRecord::dateTime() const {
00072 const unsigned int openDate = date();
00073 const unsigned int openTime = time();
00074 struct tm tmStruct;
00075 tmStruct.tm_sec = openTime % 100U;;
00076 tmStruct.tm_min = (openTime /100U) % 100U;
00077 tmStruct.tm_hour = (openTime /10000U) % 100U;
00078 tmStruct.tm_mday = (openDate / 1000000U) % 100U;
00079 tmStruct.tm_mon = ((openDate / 10000U) % 100U) - 1;
00080 tmStruct.tm_year = (openDate % 10000U) - kTmBaseYear;
00081 tmStruct.tm_wday = 0;
00082 tmStruct.tm_yday = 0;
00083 tmStruct.tm_isdst = 0;
00084 return tmStruct;
00085 }
00086
00087 unsigned int FileStartRecord::dataBlockLimit() const {
00088 return readUnsignedInt(FileTraits::kDataBlockLimit);
00089 }
00090
00091 unsigned int FileStartRecord::megabyteLimit() const {
00092 return readUnsignedInt(FileTraits::kMegabyteLimit);
00093 }
00094
00095 unsigned int FileStartRecord::date() const {
00096 return readUnsignedInt(FileTraits::kFileOpenDate);
00097 }
00098
00099 unsigned int FileStartRecord::time() const {
00100 return readUnsignedInt(FileTraits::kFileOpenTime);
00101 }
00102
00103 unsigned int FileStartRecord::formatComponent() const {
00104 return FileTraits::kFileStartRecord;
00105 }
00106
00107 void FileStartRecord::setMajorVersion(const unsigned int majorVersion) {
00108 writeField(majorVersion,
00109 FileTraits::kMajorVersion);
00110 }
00111
00112 void FileStartRecord::setMinorVersion(const unsigned int minorVersion) {
00113 writeField(minorVersion,
00114 FileTraits::kMinorVersion);
00115 }
00116
00117 void FileStartRecord::setFileNumber(const unsigned int fileNumber) {
00118 writeField(fileNumber,
00119 FileTraits::kFileNumber);
00120 }
00121
00122 void FileStartRecord::setDateTime(const FileTraits::FileDateTime& dateTime) {
00123 setDate(dateTime.tm_year + kTmBaseYear
00124 + (dateTime.tm_mon + 1) * 10000
00125 + dateTime.tm_mday * 1000000);
00126 setTime(dateTime.tm_sec
00127 + dateTime.tm_min * 100
00128 + dateTime.tm_hour * 10000);
00129 }
00130
00131 void FileStartRecord::setDataBlockLimit(const unsigned int dataBlockLimit) {
00132 writeField(dataBlockLimit,
00133 FileTraits::kDataBlockLimit);
00134 }
00135
00136 void FileStartRecord::setMegabyteLimit(const unsigned int megabyteLimit) {
00137 writeField(megabyteLimit,
00138 FileTraits::kMegabyteLimit);
00139 }
00140
00141 void FileStartRecord::setDate(const unsigned int date) {
00142 writeField(date,
00143 FileTraits::kFileOpenDate);
00144 }
00145
00146 void FileStartRecord::setTime(const unsigned int time) {
00147 writeField(time,
00148 FileTraits::kFileOpenTime);
00149 }
00150