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

TrimRangeTestResultStreamer_v1.cpp

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

Generated on Thu Jul 15 09:51:01 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5