00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "Event/DaqLtbFrame.h"
00010
00011 #include "Context/TimeStamp.h"
00012 #include "Conventions/Trigger.h"
00013 #include "LtbReadoutFormat/LtbFrame.h"
00014 #include "LtbReadoutFormat/LtbTime.h"
00015 #include "LtbReadoutFormat/LtbTraits.h"
00016
00017 using DayaBay::DaqLtbFrame;
00018 using DybDaq::LtbFrame;
00019 using DybDaq::LtbTime;
00020 using DybDaq::LtbTraits;
00021
00022 DaqLtbFrame::DaqLtbFrame(const LtbFrame& ltbFrame,
00023 const DayaBay::Detector& detector) :
00024 m_ltbFrame(const_cast<LtbFrame*>(<bFrame)),
00025 m_detector(&detector),
00026 m_triggerTime(0),
00027 m_triggerType(0) {
00028 }
00029
00030 DaqLtbFrame::DaqLtbFrame(const unsigned int readoutType,
00031 const DayaBay::Trigger::TriggerType_t& triggerType,
00032 const TimeStamp& triggerTime,
00033 const unsigned int hitSum,
00034 const unsigned int energySum,
00035 const bool totalEsum,
00036 const bool highEsum,
00037 const bool lowEsum,
00038 const unsigned int crossTriggerSource,
00039 const DayaBay::Detector& detector) :
00040 m_ltbFrame(0),
00041 m_detector(&detector),
00042 m_triggerTime(0),
00043 m_triggerType(0) {
00044 const LtbTraits& traits = LtbTraits::defaultTraits();
00045 const LtbTraits::LtbDateTime* dateTime = traits.makeDateTime(triggerTime.GetSec());
00046 m_ltbFrame = new LtbFrame(readoutType,
00047 0,
00048 *dateTime,
00049 triggerTime.GetNanoSec() * 2,
00050 0,
00051 hitSum,
00052 totalEsum,
00053 highEsum,
00054 lowEsum,
00055 energySum,
00056 crossTriggerSource,
00057 false,
00058 false,
00059 false,
00060 true,
00061 false,
00062 false,
00063 0,
00064 traits);
00065 delete dateTime;
00066 if(0 != (triggerType & DayaBay::Trigger::kManual)) {
00067 m_ltbFrame->setTriggerLine(LtbTraits::kManualTrigger);
00068 }
00069 if(0 != (triggerType & DayaBay::Trigger::kCross)) {
00070 m_ltbFrame->setTriggerLine(LtbTraits::kCrossTrigger);
00071 }
00072 if(0 != (triggerType & DayaBay::Trigger::kPeriodic)) {
00073 m_ltbFrame->setTriggerLine(LtbTraits::kPeriodicTrigger);
00074 }
00075
00076 if(0 != (triggerType & DayaBay::Trigger::kESum)) {
00077 m_ltbFrame->setTriggerLine(LtbTraits::kEsumAdcTrg);
00078 }
00079 if(0 != (triggerType & DayaBay::Trigger::kESum)) {
00080 m_ltbFrame->setTriggerLine(LtbTraits::kHighEsumCompTrg);
00081 }
00082 if(0 != (triggerType & DayaBay::Trigger::kESum)) {
00083 m_ltbFrame->setTriggerLine(LtbTraits::kLowEsumCompTrg);
00084 }
00085 if(0 != (triggerType & DayaBay::Trigger::kESum)) {
00086 m_ltbFrame->setTriggerLine(LtbTraits::kAllEsumCompTrg);
00087 }
00088 }
00089
00090 DaqLtbFrame::~DaqLtbFrame() {
00091 if (0 != m_triggerType) {
00092 delete m_triggerType;
00093 }
00094 if (0 != m_triggerTime) {
00095 delete m_triggerTime;
00096 }
00097 }
00098
00099 DayaBay::Trigger::TriggerType_t DaqLtbFrame::triggerType() const {
00100 if (0 == m_triggerType) {
00101 unsigned int triggerType = DayaBay::Trigger::kUnknown;
00102 if(m_ltbFrame->isTriggerLineSet(LtbTraits::kManualTrigger)) {
00103 triggerType |= DayaBay::Trigger::kManual;
00104 }
00105 if(m_ltbFrame->isTriggerLineSet(LtbTraits::kCrossTrigger)) {
00106 triggerType |= DayaBay::Trigger::kCross;
00107 }
00108 if(m_ltbFrame->isTriggerLineSet(LtbTraits::kPeriodicTrigger)) {
00109 triggerType |= DayaBay::Trigger::kPeriodic;
00110 }
00111 if(m_ltbFrame->isTriggerLineSet(LtbTraits::kMultiplicityTrigger)) {
00112 triggerType |= DayaBay::Trigger::kMult;
00113 }
00114
00115 if(m_ltbFrame->isTriggerLineSet(LtbTraits::kEsumAdcTrg)) {
00116 triggerType |= DayaBay::Trigger::kESum;
00117 }
00118 if(m_ltbFrame->isTriggerLineSet(LtbTraits::kHighEsumCompTrg)) {
00119 triggerType |= DayaBay::Trigger::kESum;
00120 }
00121 if(m_ltbFrame->isTriggerLineSet(LtbTraits::kLowEsumCompTrg)) {
00122 triggerType |= DayaBay::Trigger::kESum;
00123 }
00124 if(m_ltbFrame->isTriggerLineSet(LtbTraits::kAllEsumCompTrg)) {
00125 triggerType |= DayaBay::Trigger::kESum;
00126 }
00127
00128 switch(m_detector->detectorId()) {
00129 case DetectorId::kAD1:
00130 triggerType |= DayaBay::Trigger::kAD1;
00131 break;
00132 case DetectorId::kAD2:
00133 triggerType |= DayaBay::Trigger::kAD2;
00134 break;
00135 case DetectorId::kAD3:
00136 triggerType |= DayaBay::Trigger::kAD3;
00137 break;
00138 case DetectorId::kAD4:
00139 triggerType |= DayaBay::Trigger::kAD4;
00140 break;
00141 case DetectorId::kIWS:
00142 triggerType |= DayaBay::Trigger::kIWS;
00143 break;
00144 case DetectorId::kOWS:
00145 triggerType |= DayaBay::Trigger::kOWS;
00146 break;
00147 default:
00148 break;
00149 }
00150 DayaBay::Trigger::TriggerType_t** type = const_cast<DayaBay::Trigger::TriggerType_t**>(&m_triggerType);
00151 *(type) = new DayaBay::Trigger::TriggerType_t(static_cast<DayaBay::Trigger::TriggerType_t>(triggerType));
00152 }
00153 return *m_triggerType;
00154 }
00155
00156
00157 const TimeStamp& DaqLtbFrame::triggerTime() const {
00158 if (0 == m_triggerTime) {
00159 TimeStamp** triggerTime = const_cast<TimeStamp**>(&m_triggerTime);
00160 if(m_ltbFrame->usingUtc()){
00161
00162 *(triggerTime) = new TimeStamp(0,
00163 0);
00164 } else {
00165 *(triggerTime) = new TimeStamp(m_ltbFrame->dateTime().unixTime(),
00166 ((m_ltbFrame->halfNanoseconds() + m_ltbFrame->accumulation()) / 2));
00167 }
00168 }
00169 return *m_triggerTime;
00170 }
00171
00172 LtbFrame* DaqLtbFrame::ltbFrame() {
00173 return m_ltbFrame;
00174 }
00175
00176 unsigned int DaqLtbFrame::hitSum() const {
00177 return m_ltbFrame->hitSum();
00178 }
00179
00180 bool DaqLtbFrame::totalEsum() const {
00181 return m_ltbFrame->totalEsum();
00182 }
00183
00184 bool DaqLtbFrame::highEsum() const {
00185 return m_ltbFrame->highEsum();
00186 }
00187
00188 bool DaqLtbFrame::lowEsum() const {
00189 return m_ltbFrame->lowEsum();
00190 }
00191
00192 unsigned int DaqLtbFrame::energySum() const {
00193 return m_ltbFrame->energySum();
00194 }