00001 #ifndef FILEREADOUTFORMAT_FILETRAITS_H 00002 #define FILEREADOUTFORMAT_FILETRAITS_H 00003 00004 /* 00005 * FileTraits.h 00006 * FileReadoutFormat 00007 * 00008 * Created by Simon Patton on 7/19/10. 00009 * Copyright 2010 DayaBay Collaboration. All rights reserved. 00010 * 00011 */ 00012 #include <ctime> 00013 00014 #include <vector> 00015 00016 #include "DaqReadoutFormat/DaqTraits.h" 00017 00018 namespace DybDaq { 00019 00020 class FileTraits : public DaqTraits { 00021 00022 public: 00023 00024 typedef std::vector<const char*> DetectorList; 00025 00026 typedef struct tm FileDateTime; 00027 00031 static const unsigned int kIllegalRecord; 00032 00033 // Record constants. 00034 00038 static const unsigned int kFileStartRecord; 00039 00043 static const unsigned int kFileNameStrings; 00044 00048 static const unsigned int kMetadataStrings; 00049 00053 static const unsigned int kRunParametersRecord; 00054 00058 static const unsigned int kCalibrationParametersRecord; 00059 00063 static const unsigned int kDataSeparatorRecord; 00064 00068 static const unsigned int kFileEndRecord; 00069 00073 static const unsigned int kFileEndMarker; 00074 00075 // For fields in all Records. 00076 00080 static const unsigned int kIllegalField; 00081 00085 static const unsigned int kMarker; 00086 00090 static const unsigned int kRecordSize; 00091 00092 // For data_separator_record 00093 00094 // For file_start_record. 00095 00099 static const unsigned int kMajorVersion; 00100 00104 static const unsigned int kMinorVersion; 00105 00109 static const unsigned int kFileNumber; 00110 00114 static const unsigned int kFileOpenDate; 00115 00119 static const unsigned int kFileOpenTime; 00120 00124 static const unsigned int kDataBlockLimit; 00125 00129 static const unsigned int kMegabyteLimit; 00130 00131 // For file_name_strings. 00132 00136 static const unsigned int kFirstNameLength; 00137 00138 // For metadata_strings 00139 00143 static const unsigned int kMetadataCount; 00144 00148 static const unsigned int kFirstMetadataLength; 00149 00150 // For run_parameters_record. 00151 00155 static const unsigned int kFileRunNumber; 00156 00160 static const unsigned int kRecordEnabled; 00161 00165 static const unsigned int kRunTriggerType; 00166 00170 static const unsigned int kRunDetectorMask; 00171 00172 // For calibration_parameters_record 00173 00177 static const unsigned int kCalibrationDetectorId; 00178 00182 static const unsigned int kCalibrationAxis; 00183 00187 static const unsigned int kCalibrationSourceId; 00188 00192 static const unsigned int kCalibrationZPosition; 00193 00197 static const unsigned int kCalibrationDuration; 00198 00202 static const unsigned int kCalibrationLedFrequency; 00203 00207 static const unsigned int kCalibrationLtbMode; 00208 00209 // For data_separator_record 00210 00214 static const unsigned int kBlockNumber; 00215 00219 static const unsigned int kBlockLength; 00220 00221 // For file_end_record 00222 00226 static const unsigned int kFileCloseDate; 00227 00231 static const unsigned int kFileCloseTime; 00232 00236 static const unsigned int kFileEventCount; 00237 00241 static const unsigned int kFilePayloadSize; 00242 00246 static const unsigned int kRunEventCount; 00247 00251 static const unsigned int kRunPayloadSize; 00252 00256 static const unsigned int kFileEndStatus; 00257 00261 static const unsigned int kEndFileMarker; 00262 00263 // New in v0.7 00264 00265 // For calibration_parameters_record 00266 00270 static const unsigned int kCalibrationAdNumber; 00271 00275 static const unsigned int kCalibrationLedNumber1; 00276 00280 static const unsigned int kCalibrationLedNumber2; 00281 00285 static const unsigned int kCalibrationLedVoltage1; 00286 00290 static const unsigned int kCalibrationLedVoltage2; 00291 00295 static const unsigned int kCalibrationLedPulseSeparation; 00296 00297 // New in v0.8 00298 00299 // For calibration_parameters_record 00300 00304 static const unsigned int kCalibrationSourceIdA; 00305 00309 static const unsigned int kCalibrationZPositionA; 00310 00314 static const unsigned int kCalibrationSourceIdB; 00315 00319 static const unsigned int kCalibrationZPositionB; 00320 00324 static const unsigned int kCalibrationSourceIdC; 00325 00329 static const unsigned int kCalibrationZPositionC; 00330 00334 static const unsigned int kCalibrationMotorPower; 00335 00339 static const unsigned int kCalibrationCameraPower; 00340 00344 static const unsigned int kCalibrationLedFlashing; 00345 00346 // New in v0.9 00347 00348 // For calibration_parameters_record 00349 00353 static const unsigned int kCalibrationHomeA; 00354 00358 static const unsigned int kCalibrationHomeB; 00359 00363 static const unsigned int kCalibrationHomeC; 00364 00365 // 00366 00370 static const FileTraits& defaultTraits(); 00371 00375 static const FileTraits* readTraits(const char*& buffer); 00376 00380 virtual ~FileTraits(); 00381 00385 virtual unsigned int illegalMarker() const; 00386 00390 virtual unsigned int illegalField() const; 00391 00395 virtual unsigned int recordSize(unsigned int marker) const; 00396 00400 virtual const DetectorList* detectorList(const unsigned int mask) const; 00401 00405 virtual const char* detectorAsString(unsigned int line) const; 00406 00410 virtual const std::string dateTimeAsString(const FileDateTime& time) const; 00411 00415 const FileDateTime* makeDateTime(const time_t& time) const; 00416 00420 unsigned int firstNameLengthOffset() const; 00421 00425 unsigned int firstMetadataLengthOffset() const; 00426 00427 protected: 00428 00432 FileTraits(); 00433 00437 virtual const unsigned int* recordSizes() const = 0; 00438 00442 virtual unsigned int detectorListEnd() const = 0; 00443 00447 virtual const char** detectorStrings() const = 0; 00448 00449 private: 00450 00454 FileTraits(FileTraits& rhs); 00455 00459 FileTraits& operator=(FileTraits& rhs); 00460 00461 }; 00462 00463 } 00464 00465 #endif // FILEREADOUTFORMAT_FILETRAITS_H