00001 #include "Event/ReadoutPmtCrate.h"
00002
00003 DayaBay::ReadoutPmtCrate::~ReadoutPmtCrate(){
00004 delete m_triggerDataPkg;
00005 }
00006
00007 std::ostream& DayaBay::ReadoutPmtCrate::fillStream(std::ostream& s) const
00008 {
00009 size_t siz = m_channelReadout.size();
00010
00011 s << "{ "
00012 << siz << " readouts : " << std::endl;
00013 s << "TriggerDataPackage: ";
00014 if (m_triggerDataPkg){ s << *m_triggerDataPkg << std::endl;}
00015 else{ s << "NOT SET!" << std::endl;}
00016 s << std::endl;
00017 PmtChannelReadouts::const_iterator it, done = m_channelReadout.end();
00018 for (it=m_channelReadout.begin(); it != done; ++it) {
00019 s << (it->first) << (it->second) << std::endl;
00020 }
00021 s << "FADC Readouts:" << &m_fadcReadout << std::endl;
00022 FadcReadouts::const_iterator fadcIt, facd_done = m_fadcReadout.end();
00023 for (fadcIt=m_fadcReadout.begin();fadcIt!=facd_done;++fadcIt){
00024 s << "\t" << (fadcIt->first) << (fadcIt->second) << std::endl;
00025 }
00026 s << "}";
00027 return s;
00028 }
00029
00030 DayaBay::ReadoutPmtCrate::ReadoutPmtCrate(const DayaBay::ReadoutPmtCrate& rh)
00031 : Readout(rh)
00032 {
00033 DayaBay::ReadoutPmtCrate::PmtChannelReadouts channels = rh.channelReadout();
00034 DayaBay::ReadoutPmtCrate::PmtChannelReadouts::iterator it, done = channels.end();
00035 for (it = channels.begin(); it != done; ++it) {
00036 it->second.setReadout(this);
00037 }
00038 this->setChannelReadout(channels);
00039
00041 DayaBay::ReadoutTriggerDataPkg *trigDatPkg = new DayaBay::ReadoutTriggerDataPkg(*(rh.triggerDataPkg()));
00042 trigDatPkg->setReadout(this);
00043 this->setTriggerDataPkg(trigDatPkg);
00044 this->setFadcReadout(rh.fadcReadout());
00045 }
00046
00047 DayaBay::ReadoutPmtCrate& DayaBay::ReadoutPmtCrate::operator=(const DayaBay::ReadoutPmtCrate& rh)
00048 {
00049 if (this == &rh) return *this;
00050
00051 (Readout&)(*this) = (Readout&)(rh);
00052
00053 DayaBay::ReadoutPmtCrate::PmtChannelReadouts channels = rh.channelReadout();
00054 DayaBay::ReadoutPmtCrate::PmtChannelReadouts::iterator it, done = channels.end();
00055 for (it = channels.begin(); it != done; ++it) {
00056 it->second.setReadout(this);
00057 }
00058 this->setChannelReadout(channels);
00059
00061 DayaBay::ReadoutTriggerDataPkg *trigDatPkg = new DayaBay::ReadoutTriggerDataPkg(*(rh.triggerDataPkg()));
00062 trigDatPkg->setReadout(this);
00063 this->setTriggerDataPkg(trigDatPkg);
00064 this->setFadcReadout(rh.fadcReadout());
00065 return *this;
00066 }
00067
00068 const DayaBay::DaqCrate* DayaBay::ReadoutPmtCrate::daqCrate(const unsigned int run,
00069 const unsigned int event,
00070 const unsigned int ltbSlot) const {
00071 DaqPmtCrate* result = new DaqPmtCrate(detector(),
00072 run,
00073 event);
00074 if (0 == m_triggerDataPkg) {
00075 result->addLtb(dummyLtb(),
00076 ltbSlot);
00077 } else {
00078 result->addLtb(m_triggerDataPkg->daqLtb(),
00079 ltbSlot);
00080 }
00081
00082 const PmtChannelReadouts::const_iterator finished = m_channelReadout.end();
00083 for (PmtChannelReadouts::const_iterator channel = m_channelReadout.begin();
00084 finished != channel;
00085 ++channel) {
00086 const DayaBay::FeeChannelId& id = channel->first;
00087 DayaBay::DaqPmtChannel& daqChannel = result->channel(id);
00088 const DayaBay::ReadoutPmtChannel& content = channel->second;
00089 const unsigned int endHits = content.size();
00090 for (unsigned int hit = 0;
00091 endHits != hit;
00092 ++hit) {
00093 daqChannel.addHit(hit + 1,
00094 content.adcCycle(hit),
00095 content.adcRange(hit) == DayaBay::FeeGain::kHigh,
00096 content.pedestal(hit),
00097 content.adc(hit),
00098 content.tdc(hit));
00099 }
00100 }
00101 return result;
00102 }
00103
00104 const DayaBay::DaqLtb* DayaBay::ReadoutPmtCrate::dummyLtb() const {
00105 DaqLtb* result = new DaqLtb(triggerNumber(),
00106 1,
00107 0,
00108 detector());
00109 DaqLtbFrame* frame = new DaqLtbFrame(0,
00110 triggerType(),
00111 triggerTime(),
00112 0,
00113 0,
00114 false,
00115 false,
00116 false,
00117 0,
00118 detector());
00119 result->addFrame(frame);
00120 return result;
00121 }