00001 #include "../DoubleTriggerNoiseTestResult.h"
00002 #include "DoubleTriggerNoiseTestResultStreamer_v2.h"
00003 #include <vector>
00004
00005 using namespace Sct;
00006
00007 namespace SctData {
00008 namespace IO {
00009
00010
00011 unsigned DoubleTriggerNoiseTestResultStreamer_v2::s_version=2;
00012
00013 DoubleTriggerNoiseTestResultStreamer_v2::DoubleTriggerNoiseTestResultStreamer_v2() throw() {
00014 }
00015
00016 bool DoubleTriggerNoiseTestResultStreamer_v2::inMap = IOManager::addToMap("SctData::DoubleTriggerNoiseTestResult", auto_ptr<Streamer>(new DoubleTriggerNoiseTestResultStreamer_v2()));
00017
00018 shared_ptr<Streamable> DoubleTriggerNoiseTestResultStreamer_v2::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00019 shared_ptr<Streamable> ad (new DoubleTriggerNoiseTestResult());
00020 read(in, *ad, manager);
00021 return ad;
00022 }
00023
00024 void DoubleTriggerNoiseTestResultStreamer_v2::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00025
00026 manager.writeImpl(out, ob, "SctData::TestResult");
00027 const DoubleTriggerNoiseTestResult& result=dynamic_cast<const DoubleTriggerNoiseTestResult&>(ob);
00028
00029 float* vals=new float[nChipModule];
00030 for (unsigned ichip=0; ichip<nChipModule; ++ichip){
00031 vals[ichip]=result.getPedestalOccupancy(ichip);
00032 }
00033 out.put(vals,nChipModule);
00034
00035 for (unsigned ichip=0; ichip<nChipModule; ++ichip){
00036 vals[ichip]=result.getPeakOccupancy(ichip);
00037 }
00038 out.put(vals,nChipModule);
00039 delete[] vals;
00040 }
00041
00042 void DoubleTriggerNoiseTestResultStreamer_v2::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00043 manager.readImpl(in, ob, "SctData::TestResult");
00044 DoubleTriggerNoiseTestResult& result=dynamic_cast<DoubleTriggerNoiseTestResult&>(ob);
00045
00046 float* peaks;
00047 float* peds;
00048
00049 unsigned length;
00050 in.get(&peds, length);
00051 if (length!=nChipModule) throw StreamCorruptedException("Wrong size of data",__FILE__, __LINE__);
00052 for (unsigned ichip=0; ichip<nChipModule; ++ichip){
00053 result.setPedestalOccupancy(ichip, peds[ichip]);
00054 }
00055
00056 in.get(&peaks, length);
00057 if (length!=nChipModule) throw StreamCorruptedException("Wrong size of data",__FILE__, __LINE__);
00058 for (unsigned ichip=0; ichip<nChipModule; ++ichip){
00059 result.setPeakOccupancy(ichip, peaks[ichip]);
00060 }
00061 delete[] peds;
00062 delete[] peaks;
00063 }
00064
00065 }
00066 }