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

In This Package:

FileTraits.cc

Go to the documentation of this file.
00001 /*
00002  *  FileTraits.cc
00003  *  RawFileReading
00004  *
00005  *  Created by Simon Patton on 7/19/10.
00006  *  Copyright 2010 DayaBay Collaboration. All rights reserved.
00007  *
00008  */
00009 #include "FileReadoutFormat/FileTraits.h"
00010 
00011 #include <map>
00012 
00013 #include "FileReadoutFormat/FileTraits_v0_6.h"
00014 #include "FileReadoutFormat/FileTraits_v0_7.h"
00015 #include "FileReadoutFormat/FileTraits_v0_8.h"
00016 #include "FileReadoutFormat/FileTraits_v0_9.h"
00017 
00018 using DybDaq::FileTraits;
00019 using std::string;
00020 
00021 const unsigned int FileTraits::kIllegalRecord = 0xffffffffU;
00022 const unsigned int FileTraits::kFileStartRecord = 0;
00023 const unsigned int FileTraits::kFileNameStrings = FileTraits::kFileStartRecord + 1;
00024 const unsigned int FileTraits::kMetadataStrings = FileTraits::kFileNameStrings + 1;
00025 const unsigned int FileTraits::kRunParametersRecord = FileTraits::kMetadataStrings + 1;
00026 const unsigned int FileTraits::kCalibrationParametersRecord = FileTraits::kRunParametersRecord + 1;
00027 const unsigned int FileTraits::kDataSeparatorRecord = FileTraits::kCalibrationParametersRecord + 1;
00028 const unsigned int FileTraits::kFileEndRecord = FileTraits::kDataSeparatorRecord + 1;
00029 const unsigned int FileTraits::kFileEndMarker = FileTraits::kFileEndRecord + 1;
00030 
00031 //
00032 
00033 const unsigned int FileTraits::kIllegalField = 0xffffffffU;
00034 const unsigned int FileTraits::kMarker = 0;
00035 const unsigned int FileTraits::kRecordSize = FileTraits::kMarker + 1;
00036 
00037 //
00038 
00039 const unsigned int FileTraits::kMajorVersion = FileTraits::kRecordSize + 1;
00040 const unsigned int FileTraits::kMinorVersion = FileTraits::kMajorVersion + 1;
00041 const unsigned int FileTraits::kFileNumber = FileTraits::kMinorVersion + 1;
00042 const unsigned int FileTraits::kFileOpenDate = FileTraits::kFileNumber + 1;
00043 const unsigned int FileTraits::kFileOpenTime = FileTraits::kFileOpenDate + 1;
00044 const unsigned int FileTraits::kDataBlockLimit = FileTraits::kFileOpenTime + 1;
00045 const unsigned int FileTraits::kMegabyteLimit = FileTraits::kDataBlockLimit + 1;
00046 //
00047 const unsigned int FileTraits::kFirstNameLength = FileTraits::kMegabyteLimit + 1;
00048 //
00049 const unsigned int FileTraits::kMetadataCount = FileTraits::kFirstNameLength + 1;
00050 const unsigned int FileTraits::kFirstMetadataLength = FileTraits::kMetadataCount + 1;
00051 //
00052 const unsigned int FileTraits::kFileRunNumber = FileTraits::kFirstMetadataLength + 1;
00053 const unsigned int FileTraits::kRecordEnabled = FileTraits::kFileRunNumber + 1;
00054 const unsigned int FileTraits::kRunTriggerType = FileTraits::kRecordEnabled + 1;
00055 const unsigned int FileTraits::kRunDetectorMask = FileTraits::kRunTriggerType + 1;
00056 //
00057 const unsigned int FileTraits::kCalibrationDetectorId = FileTraits::kRunDetectorMask + 1;
00058 const unsigned int FileTraits::kCalibrationAxis = FileTraits::kCalibrationDetectorId + 1;
00059 const unsigned int FileTraits::kCalibrationSourceId = FileTraits::kCalibrationAxis + 1;
00060 const unsigned int FileTraits::kCalibrationZPosition = FileTraits::kCalibrationSourceId + 1;
00061 const unsigned int FileTraits::kCalibrationDuration = FileTraits::kCalibrationZPosition + 1;
00062 const unsigned int FileTraits::kCalibrationLedFrequency = FileTraits::kCalibrationDuration + 1;
00063 const unsigned int FileTraits::kCalibrationLtbMode = FileTraits::kCalibrationLedFrequency + 1;
00064 //
00065 const unsigned int FileTraits::kBlockNumber = FileTraits::kCalibrationLtbMode + 1;
00066 const unsigned int FileTraits::kBlockLength = FileTraits::kBlockNumber + 1;
00067 //
00068 const unsigned int FileTraits::kFileCloseDate = FileTraits::kBlockLength + 1;
00069 const unsigned int FileTraits::kFileCloseTime = FileTraits::kFileCloseDate + 1;
00070 const unsigned int FileTraits::kFileEventCount = FileTraits::kFileCloseTime + 1;
00071 const unsigned int FileTraits::kFilePayloadSize = FileTraits::kFileEventCount + 1;
00072 const unsigned int FileTraits::kRunEventCount = FileTraits::kFilePayloadSize + 1;
00073 const unsigned int FileTraits::kRunPayloadSize = FileTraits::kRunEventCount + 1;
00074 const unsigned int FileTraits::kFileEndStatus = FileTraits::kRunPayloadSize + 1;
00075 const unsigned int FileTraits::kEndFileMarker = FileTraits::kFileEndStatus + 1;
00076 
00077 // New in v0_7
00078 
00079 const unsigned int FileTraits::kCalibrationAdNumber = FileTraits::kEndFileMarker + 1;
00080 const unsigned int FileTraits::kCalibrationLedNumber1 = FileTraits::kCalibrationAdNumber + 1;
00081 const unsigned int FileTraits::kCalibrationLedNumber2 = FileTraits::kCalibrationLedNumber1 + 1;
00082 const unsigned int FileTraits::kCalibrationLedVoltage1 = FileTraits::kCalibrationLedNumber2 + 1;
00083 const unsigned int FileTraits::kCalibrationLedVoltage2 = FileTraits::kCalibrationLedVoltage1 + 1;
00084 const unsigned int FileTraits::kCalibrationLedPulseSeparation = FileTraits::kCalibrationLedVoltage2 + 1;
00085 
00086 // New in v0_8
00087 
00088 const unsigned int FileTraits::kCalibrationSourceIdA = FileTraits::kCalibrationLedPulseSeparation + 1;
00089 const unsigned int FileTraits::kCalibrationZPositionA = FileTraits::kCalibrationSourceIdA + 1;
00090 const unsigned int FileTraits::kCalibrationSourceIdB = FileTraits::kCalibrationZPositionA + 1;
00091 const unsigned int FileTraits::kCalibrationZPositionB = FileTraits::kCalibrationSourceIdB + 1;
00092 const unsigned int FileTraits::kCalibrationSourceIdC = FileTraits::kCalibrationZPositionB + 1;
00093 const unsigned int FileTraits::kCalibrationZPositionC = FileTraits::kCalibrationSourceIdC + 1;
00094 const unsigned int FileTraits::kCalibrationMotorPower = FileTraits::kCalibrationZPositionC + 1;
00095 const unsigned int FileTraits::kCalibrationCameraPower = FileTraits::kCalibrationMotorPower + 1;
00096 const unsigned int FileTraits::kCalibrationLedFlashing = FileTraits::kCalibrationCameraPower + 1;
00097 
00098 // New in v0_9
00099 
00100 const unsigned int FileTraits::kCalibrationHomeA = FileTraits::kCalibrationCameraPower + 1;
00101 const unsigned int FileTraits::kCalibrationHomeB = FileTraits::kCalibrationHomeA + 1;
00102 const unsigned int FileTraits::kCalibrationHomeC = FileTraits::kCalibrationHomeB + 1;
00103 
00104 static const unsigned int kLengthOfDateTime = 25;
00105 static std::map<const char*, FileTraits*> m_allTraits;
00106 
00107 FileTraits::FileTraits() {
00108 }
00109 
00110 FileTraits::~FileTraits() {
00111 }
00112 
00113 const FileTraits& FileTraits::defaultTraits() {
00114     if (0 == m_allTraits.size()) {
00115         m_allTraits.insert(std::pair<const char*, FileTraits*>(FileTraits_v0_6::key(),new FileTraits_v0_6()));
00116         m_allTraits.insert(std::pair<const char*, FileTraits*>(FileTraits_v0_7::key(),new FileTraits_v0_7()));
00117         m_allTraits.insert(std::pair<const char*, FileTraits*>(FileTraits_v0_8::key(),new FileTraits_v0_8()));
00118         m_allTraits.insert(std::pair<const char*, FileTraits*>(FileTraits_v0_9::key(),new FileTraits_v0_9()));
00119     }
00120     return *m_allTraits[FileTraits_v0_9::key()];
00121 }
00122 
00123 const FileTraits* FileTraits::readTraits(const char*& buffer) {
00124     const FileTraits& traits = defaultTraits(); 
00125     const unsigned int major = readUnsignedInt(buffer,
00126                                                traits,
00127                                                kMajorVersion);
00128     const unsigned int minor = readUnsignedInt(buffer,
00129                                                traits,
00130                                                kMinorVersion);
00131     const FileTraits* result = 0;
00132     if (0U == major && 6U == minor) {
00133         result = m_allTraits[FileTraits_v0_6::key()];
00134     } else if (0U == major && 7U == minor) {
00135         result = m_allTraits[FileTraits_v0_7::key()];
00136     } else if (0U == major && 8U == minor) {
00137         result = m_allTraits[FileTraits_v0_8::key()];
00138     } else if (0U == major && 9U == minor) {
00139         result = m_allTraits[FileTraits_v0_9::key()];
00140     }
00141     return result;
00142 }
00143 
00144 unsigned int FileTraits::illegalMarker() const {
00145     return 0xffffffffU;
00146 }
00147 
00148 unsigned int FileTraits::illegalField() const {
00149     return 0xffffffffU;
00150 }
00151 
00152 unsigned int FileTraits::recordSize(unsigned int marker) const {
00153         if (marker >= markersEnd()) {
00154                 return 0U;
00155         }
00156         return recordSizes()[marker];
00157 }
00158 
00159 const FileTraits::DetectorList* FileTraits::detectorList(const unsigned int mask) const {
00160     DetectorList* result = new DetectorList();
00161     unsigned int bit = 1;
00162     for (unsigned int line = 0; line != detectorListEnd(); ++ line) {
00163         if (mask & bit) {
00164             result->push_back(detectorAsString(line));
00165         }
00166         bit = bit << 1;
00167     }
00168     return result;
00169 }
00170 
00171 const char* FileTraits::detectorAsString(unsigned int line) const {
00172         if (line >= detectorListEnd()) {
00173                 return "Unknown";
00174         }
00175     return detectorStrings()[line];
00176 }
00177 
00178 const string FileTraits::dateTimeAsString(const FileDateTime& time) const {
00179     char* dateTime = new char[kLengthOfDateTime];
00180     if (0 == strftime(dateTime,
00181                       kLengthOfDateTime,
00182                       "%Y-%m-%dT%H:%M:%S+0800",
00183                       &time)) {
00184         return "0000-00-00T00:00:00+0800";
00185     };
00186     dateTime[kLengthOfDateTime - 1] = 0;
00187     string result(dateTime);
00188     delete dateTime;
00189     return result;
00190 }
00191 
00192 const FileTraits::FileDateTime* FileTraits::makeDateTime(const time_t& time) const {
00193     FileDateTime* result = new FileDateTime(*(gmtime(&time)));
00194     return result;
00195 }
00196 
00197 unsigned int FileTraits::firstNameLengthOffset() const {
00198     return index(FileTraits::kFirstNameLength);
00199 }
00200 
00201 unsigned int FileTraits::firstMetadataLengthOffset() const {
00202     return index(FileTraits::kFirstMetadataLength);
00203 }
| 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