| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

FileStartRecord.cc

Go to the documentation of this file.
00001 /*
00002  *  FileStartRecord.cc
00003  *  RawFormat
00004  *
00005  *  Created by Simon Patton on 7/18/10.
00006  *  Copyright 2010 DayaBay Collaboration. All rights reserved.
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 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:08:33 2011 for FileReadoutFormat by doxygen 1.4.7