00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "Event/DaqPmtChannel.h"
00010
00011 #include "FeeReadoutFormat/FeeHead.h"
00012 #include "FeeReadoutFormat/FeeHit.h"
00013 #include "FeeReadoutFormat/FeeReadout.h"
00014 #include "FeeReadoutFormat/FeeTraits.h"
00015
00016 using DayaBay::DaqPmtChannel;
00017 using DybDaq::FeeHead;
00018 using DybDaq::FeeHit;
00019 using DybDaq::FeeReadout;
00020
00021 DaqPmtChannel::DaqPmtChannel(const DayaBay::FeeChannelId& channelId,
00022 FeeReadout& feeReadout) :
00023 m_feeHits(0),
00024 m_feeReadout(&feeReadout),
00025 m_channelId(channelId) {
00026 }
00027
00028 DaqPmtChannel::DaqPmtChannel(const FeeHit& feeHit,
00029 const DayaBay::FeeChannelId& channelId) :
00030 m_feeHits(0),
00031 m_feeReadout(0),
00032 m_channelId(channelId) {
00033 addHit(feeHit);
00034 }
00035
00036 DaqPmtChannel::~DaqPmtChannel() {
00037 if (0 != m_feeHits) {
00038 delete m_feeHits;
00039 }
00040 }
00041
00042 unsigned int DaqPmtChannel::hitCount() const {
00043 return feeHits().size();
00044 }
00045
00046 unsigned int DaqPmtChannel::peakCycle(const unsigned int hit) const {
00047 return feeHits().at(hit)->peakCycle();
00048 }
00049
00050 bool DaqPmtChannel::isHighGainAdc(const unsigned int hit) const {
00051 return !(feeHits().at(hit)->isHighRangeAdc());
00052 }
00053
00054 unsigned int DaqPmtChannel::preAdcRaw(const unsigned int hit) const {
00055 return feeHits().at(hit)->preAdc();
00056 }
00057
00058 float DaqPmtChannel::preAdcAvg(const unsigned int hit) const {
00059 if(feeHits().at(hit)->feeTraits().majorVersion() == 0
00060 && feeHits().at(hit)->feeTraits().minorVersion() < 2){
00061 return float(this->preAdcRaw(hit));
00062 }
00063 return float(this->preAdcRaw(hit)) / 4.0;
00064 }
00065
00066 unsigned int DaqPmtChannel::adc(const unsigned int hit) const {
00067 return feeHits().at(hit)->adc();
00068 }
00069
00070 float DaqPmtChannel::deltaAdc(const unsigned int hit) const {
00071 return this->adc(hit) - this->preAdcAvg(hit);
00072 }
00073
00074 unsigned int DaqPmtChannel::tdc(const unsigned int hit) const {
00075 return feeHits().at(hit)->tdc();
00076 }
00077
00078 const DaqPmtChannel::FeeHitPtrList& DaqPmtChannel::feeHits() const {
00079 if (0 == m_feeHits) {
00080 FeeHitPtrList** hits = const_cast<FeeHitPtrList**>(&m_feeHits);
00081 *(hits) = new FeeHitPtrList();
00082 }
00083 return *m_feeHits;
00084 }
00085
00086 void DaqPmtChannel::addHit(const unsigned int hitNumber,
00087 const unsigned int peakCycle,
00088 const bool isHighGainAdc,
00089 const unsigned int pedestal,
00090 const unsigned int charge,
00091 const unsigned int time) {
00092 const FeeHit& feeHit = m_feeReadout->addHit(m_channelId.connector() - 1,
00093 peakCycle,
00094 !isHighGainAdc,
00095 pedestal,
00096 charge,
00097 hitNumber,
00098 time);
00099 addHit(feeHit);
00100 }
00101
00102 void DaqPmtChannel::addHit(const FeeHit& feeHit) {
00103
00104 feeHits();
00105 m_feeHits->push_back(&feeHit);
00106 }