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

In This Package:

DaqLtbFrame.cc

Go to the documentation of this file.
00001 /*
00002  *  DaqLtbFrame.cc
00003  *  DaqEvent
00004  *
00005  *  Created by Simon Patton on 08/31/2010.
00006  *  Copyright 2010 DayaBay Collaboration. All rights reserved.
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*>(&ltbFrame)),
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     // FIXME: Need to add all Esum trigger types to offline convention
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         // FIXME: Need to add all Esum trigger types to offline convention
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             // TODO: Write this
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 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:24:28 2011 for DaqEvent by doxygen 1.4.7