00001 #include "../NoiseOccupancyTestResult.h"
00002 #include "../RootStreamableAdapter.h"
00003 #include "NoiseOccupancyTestResultStreamer_v1.h"
00004
00005 #include <TGraph.h>
00006 #include <TF1.h>
00007
00008 using namespace Sct;
00009
00010 namespace SctData {
00011 namespace IO {
00012
00013
00014 unsigned NoiseOccupancyTestResultStreamer_v1::s_version=1;
00015
00016 NoiseOccupancyTestResultStreamer_v1::NoiseOccupancyTestResultStreamer_v1() throw() {}
00017
00018 bool NoiseOccupancyTestResultStreamer_v1::inMap = IOManager::addToMap("SctData::NoiseOccupancyTestResult", auto_ptr<Streamer>(new NoiseOccupancyTestResultStreamer_v1()));
00019
00020 shared_ptr<Streamable> NoiseOccupancyTestResultStreamer_v1::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00021 shared_ptr<Streamable> ad (new NoiseOccupancyTestResult());
00022 read(in, *ad, manager);
00023 return ad;
00024 }
00025
00026 void NoiseOccupancyTestResultStreamer_v1::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00027
00028 manager.writeImpl(out, ob, "SctData::TestResult");
00029
00030 const NoiseOccupancyTestResult& mytest = dynamic_cast<const NoiseOccupancyTestResult&>(ob);
00031 for (unsigned int ichip=0; ichip<nChipModule; ichip++) {
00032 writeChipResult(out, mytest.getChipResult(ichip), manager);
00033 }
00034 }
00035
00036 void NoiseOccupancyTestResultStreamer_v1::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00037 manager.readImpl(in, ob, "SctData::TestResult");
00038
00039 NoiseOccupancyTestResult& mytest = dynamic_cast<NoiseOccupancyTestResult&>(ob);
00040 for (unsigned int ichip=0; ichip<nChipModule; ichip++) {
00041 readChipResult(in, mytest.getChipResult(ichip), manager);
00042 }
00043 }
00044
00045 void NoiseOccupancyTestResultStreamer_v1::writeChipResult(OStream& out, const ChipNOResult& c, const IOManager& manager) const throw (LogicError, IoError) {
00046 manager.writeImpl(out, RootStreamableAdapter( *c.graph ), true);
00047 manager.writeImpl(out, RootStreamableAdapter( *c.fit ), false);
00048 out << c.mean << c.rms << c.offset;
00049 }
00050
00051 void NoiseOccupancyTestResultStreamer_v1::readChipResult(IStream& in, ChipNOResult& c, const IOManager& manager) const throw(LogicError, IoError) {
00052 shared_ptr<Streamable> ob = manager.readImpl(in);
00053 shared_ptr<RootStreamableAdapter> ad = boost::dynamic_pointer_cast<RootStreamableAdapter>(ob);
00054 c.graph = shared_ptr<TGraph> ( dynamic_cast<TGraph*>(ad->getObject()));
00055
00056 auto_ptr<TF1> f = NoiseOccupancyTestResult::createFitFunction();
00057 RootStreamableAdapter ad2( *f.release() );
00058 manager.readImpl(in, ad2, false);
00059 c.fit = shared_ptr<TF1> ( dynamic_cast<TF1*>(ad2.getObject()) );
00060 in >> c.mean >> c.rms >> c.offset;
00061 }
00062
00063 }
00064 }