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