Main Page   Modules   Namespace List   Class Hierarchy   Data Structures   File List   Namespace Members   Data Fields   Globals   Related Pages  

TrimRangeTestResultStreamer.cpp

Go to the documentation of this file.
00001 #include "Sct/VersionNotSupportedException.h"
00002 #include "Sct/IoExceptions.h"
00003 
00004 #include "../TrimRangeTestResult.h"
00005 #include "TrimRangeTestResultStreamer.h"
00006 
00007 #include <TF1.h>
00008 #include <vector>
00009 
00010 using namespace Sct;
00011 
00012 namespace SctData {
00013 namespace IO {
00014 
00015 
00016 TrimRangeTestResultStreamer::TrimRangeTestResultStreamer() throw() {}
00017 
00018 bool TrimRangeTestResultStreamer::inMap = IOManager::addToMap("SctData::TrimRangeTestResult", auto_ptr<Streamer>(new TrimRangeTestResultStreamer()));
00019 
00020 
00021 shared_ptr<Streamable> TrimRangeTestResultStreamer::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00022     shared_ptr<Streamable> ad (new TrimRangeTestResult());
00023     read(in, *ad, manager);
00024     return ad;
00025 }
00026 
00027 void TrimRangeTestResultStreamer::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00028     //cout << "TrimRangeTestResultIS::publishGuts" << endl;
00029     //Let superclass do its work
00030     TestResultStreamer::write(out, ob, manager);
00031 
00032     const TrimRangeTestResult& mytest = dynamic_cast <const TrimRangeTestResult&>(ob);
00033     int version =1;
00034     out << version; // version
00035 
00036     out << (int) mytest.chipTrimData.size();
00037     for (unsigned int i = 0; i < mytest.chipTrimData.size(); ++i) {
00038         writeData(out, *mytest.chipTrimData[i], manager);
00039     }
00040 
00041     out << (int) mytest.chipTrim.size();
00042     for (unsigned int i = 0; i < mytest.chipTrim.size(); ++i) {
00043         writeTrim(out, *mytest.chipTrim[i], manager);
00044     }
00045 
00046     out << mytest.charge << mytest.type << mytest.algorithm;
00047 }
00048 
00049 void TrimRangeTestResultStreamer::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00050     TestResultStreamer::read(in, ob, manager);
00051 
00052     TrimRangeTestResult& mytest = dynamic_cast < TrimRangeTestResult & >(ob);
00053 
00054     int version;
00055     in >> version; 
00056     if (version!=1){
00057     ostringstream os;
00058     os << "TrimRangeTestResult version " << version;
00059     throw VersionNotSupportedException(os.str(), __FILE__, __LINE__);
00060     }
00061 
00062     int n = 0;
00063     in >> n;
00064     mytest.chipTrimData.resize(nChipModule);
00065     for (unsigned int i = 0; i<nChipModule; ++i) {
00066     mytest.chipTrimData[i] = shared_ptr<TrimRangeTestResult::ChipTrimData>(new TrimRangeTestResult::ChipTrimData() );
00067         readData(in, mytest, const_cast<TrimRangeTestResult::ChipTrimData&>(*mytest.chipTrimData[i]), manager);
00068     }
00069 
00070     in >> n;
00071     mytest.chipTrim.resize(nChipModule);
00072     for (unsigned int i = 0; i<nChipModule; ++i) {
00073     mytest.chipTrim[i] = shared_ptr<TrimRangeTestResult::ChipTrim>(new TrimRangeTestResult::ChipTrim() );
00074         readTrim(in, mytest, const_cast<TrimRangeTestResult::ChipTrim&>(*mytest.chipTrim[i]), manager);
00075     }
00076 
00077     in >> mytest.charge >> mytest.type >> mytest.algorithm;
00078 }
00079 
00080     void TrimRangeTestResultStreamer::writeTrim(OStream& out, const TrimRangeTestResult::ChipTrim& trim, const IOManager& manager) const throw(Sct::LogicError, Sct::IoError){
00081     out << trim.target << (int) trim.range;
00082     if (trim.channelTrim.size()!=nChannelChip){
00083         ostringstream os;
00084         os << "TrimRangeTestResultStreamer::writeTrim, bad size " << trim.channelTrim.size();
00085         throw StreamCorruptedException(os.str(), __FILE__, __LINE__ );
00086     }
00087     out << (int) trim.channelTrim.size();
00088     for (unsigned i=0; i<trim.channelTrim.size(); ++i){
00089         Stat<TrimRangeTestResult::Trim> t=trim.channelTrim.getAt(i);
00090         int trim_i = t.value.trim;
00091         out << t.valid << trim_i << t.value.vthr;
00092     }
00093     }
00094 
00095     void TrimRangeTestResultStreamer::readTrim(IStream& in, TrimRangeTestResult& mytest, TrimRangeTestResult::ChipTrim& trim, const IOManager& manager) const throw(Sct::LogicError, Sct::IoError){
00096     in >> trim.target;
00097     int range; in >> range ; trim.range=range;
00098     int size; in >> size; trim.channelTrim.resize(nChipModule);
00099     if (size!=nChannelChip){
00100         ostringstream os;
00101         os << "TrimRangeTestResultStreamer::readTrim, bad size " << trim.channelTrim.size();
00102         throw StreamCorruptedException(os.str(), __FILE__, __LINE__ );
00103     }
00104     for (unsigned i=0; i<nChannelChip; ++i){
00105         Stat<TrimRangeTestResult::Trim>& t=trim.channelTrim.modifyAt(i);
00106         int trim_i;
00107         in >> t.valid >> trim_i >> t.value.vthr;
00108         t.value.trim=trim_i;
00109     }
00110     }
00111 
00112 void TrimRangeTestResultStreamer::writeData(OStream& out, const TrimRangeTestResult::ChipTrimData& chiptrim, const IOManager& manager) const throw(LogicError, IoError) {
00113     out << (int) chiptrim.channelData.size();
00114     for (unsigned i=0; i<chiptrim.channelData.size(); ++i){
00115     Stat<TrimRangeTestResult::TrimData> d=chiptrim.channelData.getAt(i);
00116     
00117     out << d.valid << d.value.p0 << d.value.p1;
00118     out << (int) d.value.graph.size();
00119     for (unsigned ipt=0; ipt<d.value.graph.size(); ++ipt){
00120         out << d.value.graph[ipt].first << d.value.graph[ipt].second;
00121     }
00122     }
00123 }
00124 
00125 void TrimRangeTestResultStreamer::readData(IStream& in, TrimRangeTestResult& mytest, TrimRangeTestResult::ChipTrimData& chipTrim, const IOManager& manager) const throw(LogicError, IoError) {
00126     int size; in >> size; 
00127     chipTrim.channelData.resize(nChannelChip);
00128     for (unsigned i=0; i<nChannelChip; ++i){
00129     Stat<TrimRangeTestResult::TrimData>& d=chipTrim.channelData.modifyAt(i);
00130     in >> d.valid >> d.value.p0 >> d.value.p1;
00131     
00132     in >> size; d.value.graph.resize(size);
00133     for (int ipt=0; ipt<size; ++ipt){
00134         float first, second;
00135         in >> first; in >> second;
00136         d.value.graph[ipt]=pair<float,float>(first,second);
00137     }
00138     }
00139 }
00140 }
00141 
00142 
00143 } 
00144 

Generated on Mon Dec 15 19:36:22 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3