00001 #include "../NPtGainTestResult.h"
00002 #include "../RootStreamableAdapter.h"
00003 #include "../ResponseCurve.h"
00004 #include "NPtGainTestResultStreamer.h"
00005
00006 #include <TF1.h>
00007 #include <vector>
00008
00009 using namespace Sct;
00010
00011 namespace SctData {
00012 namespace IO {
00013
00014
00015 NPtGainTestResultStreamer::NPtGainTestResultStreamer() throw() {}
00016
00017 bool NPtGainTestResultStreamer::inMap = IOManager::addToMap("SctData::NPtGainTestResult", auto_ptr<Streamer>(new NPtGainTestResultStreamer()));
00018
00019
00020 shared_ptr<Streamable> NPtGainTestResultStreamer::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00021 shared_ptr<Streamable> ad (new NPtGainTestResult());
00022 read(in, *ad, manager);
00023 return ad;
00024 }
00025
00026 void NPtGainTestResultStreamer::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00027
00028
00029 TestResultStreamer::write(out, ob, manager);
00030
00031 const NPtGainTestResult& mytest = dynamic_cast <const NPtGainTestResult&>(ob);
00032
00033 out << mytest.getNChipData();
00034 for (unsigned int i = 0; i < mytest.getNChipData(); ++i) {
00035 writeData(out, mytest.getChipData(i), manager);
00036 }
00037
00038 out << mytest.getNChannelData();
00039 for (unsigned int i = 0; i < mytest.getNChannelData(); ++i) {
00040 writeData(out, mytest.getChannelData(i), manager);
00041 }
00042 }
00043
00044 void NPtGainTestResultStreamer::writeData(OStream& out, const NPtGainTestResultData& ob, const IOManager& manager) const throw(LogicError, IoError) {
00045 manager.writeImpl(out, *ob.rc, false);
00046 manager.writeImpl(out, RootStreamableAdapter(*ob.graph), false);
00047 out << ob.gain << ob.noise << ob.offset;
00048 }
00049
00050 void NPtGainTestResultStreamer::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00051 TestResultStreamer::read(in, ob, manager);
00052
00053 NPtGainTestResult& mytest = dynamic_cast < NPtGainTestResult & >(ob);
00054
00055 unsigned int n = 0;
00056 in >> n;
00057 mytest.setChipDataSize(n);
00058
00059 for (unsigned int i = 0; i<n; ++i) {
00060 readData(in, mytest, mytest.getChipData(i), manager);
00061 }
00062
00063 in >> n;
00064 mytest.setChannelDataSize(n);
00065 for (unsigned int i = 0; i<n; ++i) {
00066 readData(in, mytest, mytest.getChannelData(i), manager);
00067 }
00068 }
00069
00070 void NPtGainTestResultStreamer::readData(IStream& in, NPtGainTestResult& mytest, NPtGainTestResultData& ob, const IOManager& manager) const throw(LogicError, IoError) {
00071
00072 shared_ptr<Streamable> str = manager.readImpl(in, "SctData::ResponseCurve");
00073 shared_ptr<ResponseCurve> rc = boost::dynamic_pointer_cast<ResponseCurve>(str) ;
00074 ob.rc = rc;
00075
00076
00077 ob.graph = shared_ptr<TGraph>(new TGraph());
00078 RootStreamableAdapter ad2(*ob.graph);
00079 manager.readImpl(in, ad2, false);
00080
00081
00082 in >> ob.gain >> ob.noise >> ob.offset;
00083 }
00084 }
00085
00086
00087 }
00088