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 }