00001 #ifndef LTBREADOUTFORMAT_LTBTRAITS_H 00002 #define LTBREADOUTFORMAT_LTBTRAITS_H 00003 00004 /* 00005 * LtbTraits.h 00006 * LtbReadoutFormat 00007 * 00008 * Created by Simon Patton on 7/21/10. 00009 * Copyright 2010 DayaBay Collaboration. All rights reserved. 00010 * 00011 */ 00012 #include <vector> 00013 #include <ctime> 00014 00015 #include "DaqReadoutFormat/DaqTraits.h" 00016 00017 namespace DybDaq { 00018 class LtbTime; 00019 } 00020 00021 namespace DybDaq { 00022 00023 class LtbTraits : public DaqTraits { 00024 00025 public: 00026 00027 typedef std::vector<const char*> TriggerLines; 00028 00029 typedef LtbTime LtbDateTime; 00030 00034 static const unsigned int kHead; 00035 00039 static const unsigned int kFrameFront; 00040 00044 static const unsigned int kTime; 00045 00049 static const unsigned int kFrameBack; 00050 00054 static const unsigned int kFoot; 00055 00059 static const unsigned int kUnixTime; 00060 00064 static const unsigned int kGpsTime; 00065 00066 // Fields 00067 00071 static const unsigned int kRawTriggerTotal; 00072 00076 static const unsigned int kRawTriggersSaved; 00077 00081 static const unsigned int kLtbStatus; 00082 00086 static const unsigned int kLocalTriggerNumber; 00087 00091 static const unsigned int kFrameNumber; 00092 00096 static const unsigned int kReadoutType; 00097 00101 static const unsigned int kTriggerMask; 00102 00106 static const unsigned int kYear; 00107 00111 static const unsigned int kMonth; 00112 00116 static const unsigned int kDay; 00117 00121 static const unsigned int kHour; 00122 00126 static const unsigned int kMinutes; 00127 00131 static const unsigned int kSeconds; 00132 00136 static const unsigned int kTicks; 00137 00141 static const unsigned int kHitSum; 00142 00146 static const unsigned int kTotalEsum; 00147 00151 static const unsigned int kHighEsum; 00152 00156 static const unsigned int kLowEsum; 00157 00161 static const unsigned int kEnergySum; 00162 00166 static const unsigned int kCrossTriggerSource; 00167 00171 static const unsigned int kFootDataLength; 00172 00176 static const unsigned int kClockError; 00177 00181 static const unsigned int kVersion; 00182 00186 static const unsigned int kAccumulationStatus; 00187 00191 static const unsigned int kValidGps; 00192 00196 static const unsigned int kUsingUtc; 00197 00201 static const unsigned int kValidClockSystem; 00202 00206 static const unsigned int kHighNanoseconds; 00207 00211 static const unsigned int kLowNanoseconds; 00212 00216 static const unsigned int kHighUnixTime; 00217 00221 static const unsigned int kLowUnixTime; 00222 00226 static const unsigned int kHighAccumulation; 00227 00231 static const unsigned int kLowAccumulation; 00232 00236 static const unsigned int kFeeBufferFull; 00237 00241 static const unsigned int kLtbBufferFull; 00242 00246 static const unsigned int kBlockedTriggerCount; 00247 00248 // Known trigger lines 00249 00253 static const unsigned int kManualTrigger; 00254 00258 static const unsigned int kCrossTrigger; 00259 00263 static const unsigned int kPeriodicTrigger; 00264 00268 static const unsigned int kPedestalTrigger; 00269 00273 static const unsigned int kCalibTrigger; 00274 00278 static const unsigned int kMultiplicityTrigger; 00279 00283 static const unsigned int kEsumAdcTrg; 00284 00288 static const unsigned int kHighEsumCompTrg; 00289 00293 static const unsigned int kLowEsumCompTrg; 00294 00298 static const unsigned int kAllEsumCompTrg; 00299 00303 static const LtbTraits& defaultTraits(); 00304 00308 static const LtbTraits* readTraits(const char*& buffer); 00309 00313 virtual ~LtbTraits(); 00314 00318 virtual unsigned int illegalMarker() const; 00319 00323 virtual unsigned int illegalField() const; 00324 00328 const std::string dateTimeAsString(const LtbDateTime& time) const; 00329 00333 const LtbDateTime* makeDateTime(const time_t& time) const; 00334 00338 virtual const TriggerLines* triggerLines(const unsigned int mask) const; 00339 00343 virtual const char* triggerLineAsString(unsigned int line) const; 00344 00348 virtual unsigned int triggerLineBit(const unsigned int line) const; 00349 00353 virtual unsigned int headSize() const = 0; 00354 00358 virtual unsigned int frameSize() const = 0; 00359 00363 virtual unsigned int timeSize() const = 0; 00364 00368 virtual unsigned int footSize() const = 0; 00369 00373 virtual void initializeHead(char* buffer) const = 0; 00374 00378 virtual void initializeFrame(char* buffer) const = 0; 00379 00383 virtual void initializeTime(char* buffer) const = 0; 00384 00388 virtual void initializeFoot(char* buffer) const = 0; 00389 00393 virtual unsigned int timeOffset() const = 0; 00394 00395 protected: 00396 00400 LtbTraits(); 00401 00405 virtual unsigned int triggerLineEnd() const = 0; 00406 00410 virtual const char** triggerLineStrings() const = 0; 00411 00415 virtual const unsigned int* triggerLineBits() const = 0; 00416 00417 private: 00418 00422 LtbTraits(LtbTraits& rhs); 00423 00427 LtbTraits& operator=(LtbTraits& rhs); 00428 }; 00429 00430 } 00431 00432 #endif // LTBREADOUTFORMAT_LTBTRAITS_H