00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "PerReadoutEvent/PerDaqPmtCrate.h"
00010
00011 #include "Conventions/Electronics.h"
00012 #include "PerReadoutEvent/PerUintValue.h"
00013
00014 using DayaBay::DaqPmtChannel;
00015 using DayaBay::FeeChannelId;
00016 using DayaBay::DaqPmtCrate;
00017
00018 DaqPmtCrate::PmtChannelPtrList* PerDaqPmtCrate::m_channels = new DaqPmtCrate::PmtChannelPtrList();
00019
00020 PerDaqPmtCrate::PerDaqPmtCrate(const DybDaq::EventReadout* eventReadout) :
00021 DayaBay::DaqPmtCrate(eventReadout),
00022 m_returnedPeaks(0),
00023 m_returnedAdcs(0),
00024 m_returnedPreAdcs(0),
00025 m_returnedGains(0),
00026 m_returnedTdcs(0) {
00027 }
00028
00029 PerDaqPmtCrate::PerDaqPmtCrate(const PerDaqPmtCrate& rhs) :
00030 DayaBay::DaqPmtCrate(rhs),
00031 m_returnedPeaks(0),
00032 m_returnedAdcs(0),
00033 m_returnedPreAdcs(0),
00034 m_returnedGains(0),
00035 m_returnedTdcs(0) {
00036 }
00037
00038 PerDaqPmtCrate::~PerDaqPmtCrate() {
00039 if (0 != m_returnedTdcs) {
00040 const std::vector<const PerUintValue*>::const_iterator finished = m_returnedTdcs->end();
00041 for (std::vector<const PerUintValue*>::const_iterator iterator = m_returnedTdcs->begin();
00042 finished != iterator;
00043 ++iterator) {
00044 delete (PerUintValue*)(*iterator);
00045 }
00046 delete m_returnedTdcs;
00047 }
00048 if (0 != m_returnedGains) {
00049 const std::vector<const PerUintValue*>::const_iterator finished = m_returnedGains->end();
00050 for (std::vector<const PerUintValue*>::const_iterator iterator = m_returnedGains->begin();
00051 finished != iterator;
00052 ++iterator) {
00053 delete (PerUintValue*)(*iterator);
00054 }
00055 delete m_returnedGains;
00056 }
00057 if (0 != m_returnedAdcs) {
00058 const std::vector<const PerUintValue*>::const_iterator finished = m_returnedAdcs->end();
00059 for (std::vector<const PerUintValue*>::const_iterator iterator = m_returnedAdcs->begin();
00060 finished != iterator;
00061 ++iterator) {
00062 delete (PerUintValue*)(*iterator);
00063 }
00064 delete m_returnedAdcs;
00065 }
00066 if (0 != m_returnedPreAdcs) {
00067 const std::vector<const PerUintValue*>::const_iterator finished = m_returnedPreAdcs->end();
00068 for (std::vector<const PerUintValue*>::const_iterator iterator = m_returnedPreAdcs->begin();
00069 finished != iterator;
00070 ++iterator) {
00071 delete (PerUintValue*)(*iterator);
00072 }
00073 delete m_returnedPreAdcs;
00074 }
00075 if (0 != m_returnedPeaks) {
00076 const std::vector<const PerUintValue*>::const_iterator finished = m_returnedPeaks->end();
00077 for (std::vector<const PerUintValue*>::const_iterator iterator = m_returnedPeaks->begin();
00078 finished != iterator;
00079 ++iterator) {
00080 delete (PerUintValue*)(*iterator);
00081 }
00082 delete m_returnedPeaks;
00083 }
00084 }
00085
00086 const DaqPmtChannel& PerDaqPmtCrate::channel(const DayaBay::FeeChannelId& channelId) const {
00087 return DaqPmtCrate::channel(channelId);
00088 }
00089
00090 const DaqPmtCrate::PmtChannelPtrList& PerDaqPmtCrate::channel(int board, int chan) const {
00091 m_channels->clear();
00092 m_channels->push_back(const_cast<DayaBay::DaqPmtChannel*>(&(channel(FeeChannelId(board, chan, (Site::Site_t)0, (DetectorId::DetectorId_t)0)))));
00093 return *m_channels;
00094 }
00095
00096 const PerDaqPmtCrate::AdcPeakValues& PerDaqPmtCrate::peaks(int board, int chan, int highGain) const {
00097 if (0 != m_returnedPeaks) {
00098 delete m_returnedPeaks;
00099 }
00100 m_returnedPeaks = new std::vector<const PerUintValue*>();
00101
00102 const DaqPmtChannel& channelToUse = channel(FeeChannelId(board, chan, (Site::Site_t)0, (DetectorId::DetectorId_t)0));
00103 if (0 != &channelToUse) {
00104 const unsigned int finished = channelToUse.hitCount();
00105 for(unsigned int hit = 0; finished != hit; ++hit) {
00106 if (0 == highGain && !channelToUse.isHighGainAdc(hit)) {
00107 m_returnedPeaks->push_back(new PerUintValue(channelToUse.peakCycle(hit)));
00108 } else if (1 == highGain && channelToUse.isHighGainAdc(hit)) {
00109 m_returnedPeaks->push_back(new PerUintValue(channelToUse.peakCycle(hit)));
00110 }
00111 }
00112 }
00113 return *m_returnedPeaks;
00114 }
00115
00116 const PerDaqPmtCrate::AdcValues& PerDaqPmtCrate::adcs(int board, int chan, int highGain) const {
00117 if (0 != m_returnedAdcs) {
00118 delete m_returnedAdcs;
00119 }
00120 m_returnedAdcs = new std::vector<const PerUintValue*>();
00121
00122 const DaqPmtChannel& channelToUse = channel(FeeChannelId(board, chan, (Site::Site_t)0, (DetectorId::DetectorId_t)0));
00123 if (0 != &channelToUse) {
00124 const unsigned int finished = channelToUse.hitCount();
00125 for(unsigned int hit = 0; finished != hit; ++hit) {
00126 if (0 == highGain && !channelToUse.isHighGainAdc(hit)) {
00127 m_returnedAdcs->push_back(new PerUintValue(channelToUse.adc(hit)));
00128 } else if (1 == highGain && channelToUse.isHighGainAdc(hit)) {
00129 m_returnedAdcs->push_back(new PerUintValue(channelToUse.adc(hit)));
00130 }
00131 }
00132 }
00133 return *m_returnedAdcs;
00134 }
00135
00136 const PerDaqPmtCrate::PreAdcValues& PerDaqPmtCrate::preAdcRaws(int board, int chan, int highGain) const {
00137 if (0 != m_returnedPreAdcs) {
00138 delete m_returnedPreAdcs;
00139 }
00140 m_returnedPreAdcs = new std::vector<const PerUintValue*>();
00141
00142 const DaqPmtChannel& channelToUse = channel(FeeChannelId(board, chan, (Site::Site_t)0, (DetectorId::DetectorId_t)0));
00143 if (0 != &channelToUse) {
00144 const unsigned int finished = channelToUse.hitCount();
00145 for(unsigned int hit = 0; finished != hit; ++hit) {
00146 if (0 == highGain && !channelToUse.isHighGainAdc(hit)) {
00147 m_returnedPreAdcs->push_back(new PerUintValue(channelToUse.preAdcRaw(hit)));
00148 } else if (1 == highGain && channelToUse.isHighGainAdc(hit)) {
00149 m_returnedPreAdcs->push_back(new PerUintValue(channelToUse.preAdcRaw(hit)));
00150 }
00151 }
00152 }
00153 return *m_returnedPreAdcs;
00154 }
00155
00156 const PerDaqPmtCrate::GainValues& PerDaqPmtCrate::gains(int board, int chan) const {
00157 if (0 != m_returnedGains) {
00158 delete m_returnedGains;
00159 }
00160 m_returnedGains = new std::vector<const PerUintValue*>();
00161
00162 const DaqPmtChannel& channelToUse = channel(FeeChannelId(board, chan, (Site::Site_t)0, (DetectorId::DetectorId_t)0));
00163 if (0 != &channelToUse) {
00164 const unsigned int finished = channelToUse.hitCount();
00165 for(unsigned int hit = 0; finished != hit; ++hit) {
00166 if (!channelToUse.isHighGainAdc(hit)) {
00167 m_returnedGains->push_back(new PerUintValue(0));
00168 } else {
00169 m_returnedGains->push_back(new PerUintValue(1));
00170 }
00171 }
00172 }
00173 return *m_returnedGains;
00174 }
00175
00176 const PerDaqPmtCrate::TdcValues& PerDaqPmtCrate::tdcs(int board, int chan, int highGain) const {
00177 if (0 != m_returnedTdcs) {
00178 delete m_returnedTdcs;
00179 }
00180 m_returnedTdcs = new std::vector<const PerUintValue*>();
00181
00182 const DaqPmtChannel& channelToUse = channel(FeeChannelId(board, chan, (Site::Site_t)0, (DetectorId::DetectorId_t)0));
00183 if (0 != &channelToUse) {
00184 const unsigned int finished = channelToUse.hitCount();
00185 for(unsigned int hit = 0; finished != hit; ++hit) {
00186 if (0 == highGain && !channelToUse.isHighGainAdc(hit)) {
00187 m_returnedTdcs->push_back(new PerUintValue(channelToUse.tdc(hit)));
00188 } else if (1 == highGain && channelToUse.isHighGainAdc(hit)) {
00189 m_returnedTdcs->push_back(new PerUintValue(channelToUse.tdc(hit)));
00190 }
00191 }
00192 }
00193 return *m_returnedTdcs;
00194 }