00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "FadcReadoutFormat/FadcTraits.h"
00010
00011 #include <map>
00012
00013 #include "FadcReadoutFormat/FadcTraits_v1_2.h"
00014 #include "FadcReadoutFormat/FadcTraits_v1_5.h"
00015
00016 using DybDaq::FadcTraits;
00017
00018
00019 const unsigned int FadcTraits::kHead = 0;
00020 const unsigned int FadcTraits::kData = FadcTraits::kHead + 1;
00021 const unsigned int FadcTraits::kFoot = FadcTraits::kData + 1;
00022
00023 const unsigned int FadcTraits::kHeadTriggerNumber = 0;
00024 const unsigned int FadcTraits::kMajorVersion = FadcTraits::kHeadTriggerNumber + 1;
00025 const unsigned int FadcTraits::kMinorVersion = FadcTraits::kMajorVersion + 1;
00026
00027 const unsigned int FadcTraits::kTriggerType = FadcTraits::kMinorVersion + 1;
00028 const unsigned int FadcTraits::kNoData = FadcTraits::kTriggerType + 1;
00029
00030 const unsigned int FadcTraits::kChannelId = FadcTraits::kNoData + 1;
00031 const unsigned int FadcTraits::kHighDataByte = FadcTraits::kChannelId + 1;
00032 const unsigned int FadcTraits::kMiddleDataByte = FadcTraits::kHighDataByte + 1;
00033 const unsigned int FadcTraits::kLowDataByte = FadcTraits::kMiddleDataByte + 1;
00034
00035 const unsigned int FadcTraits::kFootTriggerNumber = FadcTraits::kLowDataByte + 1;
00036 const unsigned int FadcTraits::kFootDataLength = FadcTraits::kFootTriggerNumber + 1;
00037
00038
00039 const unsigned int FadcTraits::kHeadMarker = FadcTraits::kFootDataLength + 1;
00040 const unsigned int FadcTraits::kAdcDataMarker = FadcTraits::kHeadMarker + 1;
00041 const unsigned int FadcTraits::kFootMarker = FadcTraits::kAdcDataMarker + 1;
00042
00043
00044 const unsigned int FadcTraits::kProtectionStatus = FadcTraits::kFootMarker + 1;
00045 const unsigned int FadcTraits::kScaleEnabled = FadcTraits::kProtectionStatus + 1;
00046 const unsigned int FadcTraits::kDuringPrevious = FadcTraits::kScaleEnabled + 1;
00047
00048
00049 static std::map<const char*, FadcTraits*> m_allTraits;
00050
00051 FadcTraits::FadcTraits() {
00052 }
00053
00054 FadcTraits::~FadcTraits() {
00055 }
00056
00057 const FadcTraits& FadcTraits::defaultTraits() {
00058 if (0 == m_allTraits.size()) {
00059 m_allTraits.insert(std::pair<const char*, FadcTraits*>(FadcTraits_v1_2::key(),new FadcTraits_v1_2()));
00060 m_allTraits.insert(std::pair<const char*, FadcTraits*>(FadcTraits_v1_5::key(),new FadcTraits_v1_5()));
00061 }
00062 return *m_allTraits[FadcTraits_v1_5::key()];
00063 }
00064
00065 const FadcTraits* FadcTraits::readTraits(const char*& buffer) {
00066 unsigned int major = 0;
00067 const unsigned int minor = readUnsignedInt(buffer,
00068 defaultTraits(),
00069 FadcTraits::kMinorVersion);
00070
00071 const FadcTraits* result = 0;
00072 if (0U == major && 0U == minor) {
00073 result = m_allTraits[FadcTraits_v1_2::key()];
00074 } else if (0U == major && 1U == minor) {
00075 result = m_allTraits[FadcTraits_v1_2::key()];
00076 }
00077 return result;
00078 }
00079
00080 unsigned int FadcTraits::illegalMarker() const {
00081 return 0xffffffffU;
00082 }
00083
00084 unsigned int FadcTraits::illegalField() const {
00085 return 0xffffffffU;
00086 }
00087
00088 const char* FadcTraits::triggerTypeAsString(unsigned int triggerType) const {
00089 if (triggerType >= triggerTypeEnd()) {
00090 return "Unknown";
00091 }
00092 return triggerTypeStrings()[triggerType];
00093 }