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

In This Package:

LtbTraits.cc

Go to the documentation of this file.
00001 /*
00002  *  LtbTraits.cc
00003  *  LtbReadoutFormat
00004  *
00005  *  Created by Simon Patton on 7/21/10.
00006  *  Copyright 2010 DayaBay Collaboration. All rights reserved.
00007  *
00008  */
00009 
00010 #include <map>
00011 
00012 #include "LtbReadoutFormat/LtbTraits_v3_8.h"
00013 #include "LtbReadoutFormat/LtbTraits_v4_1.h"
00014 #include "LtbReadoutFormat/LtbTraits_v4_3.h"
00015 
00016 #include "LtbReadoutFormat/LtbTime.h"
00017 #include "LtbReadoutFormat/LtbTraits.h"
00018 
00019 using DybDaq::LtbTime;
00020 using DybDaq::LtbTraits;
00021 using DybDaq::LtbTraits_v3_8;
00022 using DybDaq::LtbTraits_v4_1;
00023 using std::string;
00024 
00025 // Components in this format
00026 const unsigned int LtbTraits::kHead = 0;
00027 const unsigned int LtbTraits::kFrameFront = LtbTraits::kHead + 1;
00028 const unsigned int LtbTraits::kTime = LtbTraits::kFrameFront + 1;
00029 const unsigned int LtbTraits::kFrameBack = LtbTraits::kTime + 1;
00030 const unsigned int LtbTraits::kFoot = LtbTraits::kFrameBack + 1;
00031 const unsigned int LtbTraits::kUnixTime = LtbTraits::kFoot + 1;
00032 const unsigned int LtbTraits::kGpsTime = LtbTraits::kUnixTime + 1;
00033 
00034 // Known triggers
00035 const unsigned int LtbTraits::kManualTrigger = 0;
00036 const unsigned int LtbTraits::kCrossTrigger = LtbTraits::kManualTrigger + 1;
00037 const unsigned int LtbTraits::kPeriodicTrigger = LtbTraits::kCrossTrigger + 1;
00038 const unsigned int LtbTraits::kPedestalTrigger = LtbTraits::kPeriodicTrigger + 1;
00039 const unsigned int LtbTraits::kCalibTrigger = LtbTraits::kPedestalTrigger + 1;
00040 const unsigned int LtbTraits::kMultiplicityTrigger = LtbTraits::kCalibTrigger + 4;
00041 const unsigned int LtbTraits::kEsumAdcTrg = LtbTraits::kMultiplicityTrigger + 1;
00042 const unsigned int LtbTraits::kHighEsumCompTrg = LtbTraits::kEsumAdcTrg + 1;
00043 const unsigned int LtbTraits::kLowEsumCompTrg = LtbTraits::kHighEsumCompTrg + 1;
00044 const unsigned int LtbTraits::kAllEsumCompTrg = LtbTraits::kLowEsumCompTrg + 1;
00045 
00046 // Head
00047 const unsigned int LtbTraits::kRawTriggerTotal = 0;
00048 const unsigned int LtbTraits::kRawTriggersSaved = LtbTraits::kRawTriggerTotal + 1;
00049 const unsigned int LtbTraits::kLtbStatus = LtbTraits::kRawTriggersSaved + 1;
00050 const unsigned int LtbTraits::kLocalTriggerNumber = LtbTraits::kLtbStatus + 1;
00051 
00052 // Frame
00053 const unsigned int LtbTraits::kFrameNumber = LtbTraits::kLocalTriggerNumber + 1;
00054 const unsigned int LtbTraits::kReadoutType = LtbTraits::kFrameNumber + 1;
00055 const unsigned int LtbTraits::kTriggerMask = LtbTraits::kReadoutType + 1;
00056 const unsigned int LtbTraits::kYear = LtbTraits::kTriggerMask + 1;
00057 const unsigned int LtbTraits::kMonth = LtbTraits::kYear + 1;
00058 const unsigned int LtbTraits::kDay = LtbTraits::kMonth + 1;
00059 const unsigned int LtbTraits::kHour = LtbTraits::kDay + 1;
00060 const unsigned int LtbTraits::kMinutes = LtbTraits::kHour + 1;
00061 const unsigned int LtbTraits::kSeconds = LtbTraits::kMinutes + 1;
00062 const unsigned int LtbTraits::kTicks = LtbTraits::kSeconds + 1;
00063 const unsigned int LtbTraits::kHitSum = LtbTraits::kTicks + 1;
00064 const unsigned int LtbTraits::kTotalEsum = LtbTraits::kHitSum + 1;
00065 const unsigned int LtbTraits::kHighEsum = LtbTraits::kTotalEsum + 1;
00066 const unsigned int LtbTraits::kLowEsum = LtbTraits::kHighEsum + 1;
00067 const unsigned int LtbTraits::kEnergySum = LtbTraits::kLowEsum + 1;
00068 const unsigned int LtbTraits::kCrossTriggerSource = LtbTraits::kEnergySum + 1;
00069 
00070 // Foot
00071 const unsigned int LtbTraits::kFootDataLength = LtbTraits::kCrossTriggerSource + 1;
00072 
00073 // New in 4.1
00074 
00075 // Head
00076 const unsigned int LtbTraits::kClockError = LtbTraits::kFootDataLength + 1;
00077 const unsigned int LtbTraits::kVersion = LtbTraits::kClockError + 1;
00078 
00079 // Frame
00080 const unsigned int LtbTraits::kAccumulationStatus = LtbTraits::kVersion + 1;
00081 const unsigned int LtbTraits::kValidGps = LtbTraits::kAccumulationStatus + 1;
00082 const unsigned int LtbTraits::kUsingUtc = LtbTraits::kValidGps + 1;
00083 const unsigned int LtbTraits::kValidClockSystem = LtbTraits::kUsingUtc + 1;
00084 const unsigned int LtbTraits::kHighNanoseconds = LtbTraits::kValidClockSystem + 1;
00085 const unsigned int LtbTraits::kLowNanoseconds = LtbTraits::kHighNanoseconds + 1;
00086 const unsigned int LtbTraits::kHighUnixTime = LtbTraits::kLowNanoseconds + 1;
00087 const unsigned int LtbTraits::kLowUnixTime = LtbTraits::kHighUnixTime + 1;
00088 const unsigned int LtbTraits::kHighAccumulation = LtbTraits::kLowUnixTime + 1;
00089 const unsigned int LtbTraits::kLowAccumulation = LtbTraits::kHighAccumulation + 1;
00090 const unsigned int LtbTraits::kFeeBufferFull = LtbTraits::kLowAccumulation + 1;
00091 const unsigned int LtbTraits::kLtbBufferFull = LtbTraits::kFeeBufferFull + 1;
00092 const unsigned int LtbTraits::kBlockedTriggerCount = LtbTraits::kLtbBufferFull + 1;
00093 
00094 static const unsigned int kLengthOfDataTime = 21;
00095 
00096 static std::map<const char*, LtbTraits*> m_allTraits;
00097 
00098 LtbTraits::LtbTraits() {
00099 }
00100 
00101 LtbTraits::~LtbTraits() {
00102 }
00103 
00104 const LtbTraits& LtbTraits::defaultTraits() {
00105     if (0 == m_allTraits.size()) {
00106         m_allTraits.insert(std::pair<const char*, LtbTraits*>(LtbTraits_v3_8::key(),new LtbTraits_v3_8()));
00107         m_allTraits.insert(std::pair<const char*, LtbTraits*>(LtbTraits_v4_1::key(),new LtbTraits_v4_1()));
00108         m_allTraits.insert(std::pair<const char*, LtbTraits*>(LtbTraits_v4_3::key(),new LtbTraits_v4_3()));
00109     }
00110     return *m_allTraits[LtbTraits_v4_3::key()];
00111 }
00112 
00113 const LtbTraits* LtbTraits::readTraits(const char*& buffer) {
00114     const unsigned int vers = readUnsignedInt(buffer,
00115                                             defaultTraits(),
00116                                             LtbTraits::kVersion);
00117     unsigned int major = 0;
00118     unsigned int minor = 0;
00119     if (0x0 == vers) {
00120         major = 3;
00121         minor = 8;
00122     } else if (0x2 == vers) {
00123         major = 4;
00124         minor = 1;
00125     } else if (0x3 == vers) {
00126         major = 4;
00127         minor = 3;
00128     }
00129 
00130     const LtbTraits* result = 0;
00131     if (4 > major) {
00132         result = m_allTraits[LtbTraits_v3_8::key()];
00133     } else if (4U == major && 1U == minor) {
00134         result = m_allTraits[LtbTraits_v4_1::key()];
00135     } else if (4U == major && 3U == minor) {
00136         result = m_allTraits[LtbTraits_v4_3::key()];
00137     }        
00138     return result;
00139 }
00140 
00141 unsigned int LtbTraits::illegalMarker() const {
00142     return 0xffffffffU;
00143 }
00144 
00145 unsigned int LtbTraits::illegalField() const {
00146     return 0xffffffffU;
00147 }
00148 
00149 const LtbTraits::TriggerLines* LtbTraits::triggerLines(const unsigned int mask) const {
00150     TriggerLines* result = new TriggerLines();
00151     unsigned int bit = 1;
00152     for (unsigned int line = 0; line != triggerLineEnd(); ++ line) {
00153         if (mask & bit) {
00154             const char* name = triggerLineAsString(line);
00155             if (0 != name) {
00156                 result->push_back(name);
00157             }
00158         }
00159         bit = bit << 1;
00160     }
00161     return result;
00162 }
00163 
00164 const char* LtbTraits::triggerLineAsString(unsigned int line) const {
00165     return triggerLineStrings()[line];
00166 }
00167 
00168 unsigned int LtbTraits::triggerLineBit(const unsigned int line) const {
00169     return triggerLineBits()[line];
00170 }
00171 
00172 const string LtbTraits::dateTimeAsString(const LtbTraits::LtbDateTime& time) const {
00173     const time_t unixTime = time.unixTime();
00174     struct tm* tmStruct = gmtime(&unixTime);
00175     
00176     char* dateTime = new char[kLengthOfDataTime];
00177     if (0 == strftime(dateTime,
00178                       kLengthOfDataTime,
00179                       "%Y-%m-%dT%H:%M:%SZ",
00180                       tmStruct)) {
00181         return "0000-00-00T00:00:00Z";
00182     };
00183     dateTime[kLengthOfDataTime - 1] = 0;
00184     string result(dateTime);
00185     delete dateTime;
00186     return result;
00187 }
00188 
00189 const LtbTraits::LtbDateTime* LtbTraits::makeDateTime(const time_t& time) const {
00190     return new LtbDateTime(time,
00191                            0,
00192                            0,
00193                            *this);
00194 }
00195 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

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