FitObjectStreamer_v1.cpp

00001 #include "FitObjectStreamer_v1.h"
00002 #include "../FitObject.h"
00003 #include "../AllFitObject.h"
00004 #include <is/info.h>
00005 
00006 using std::auto_ptr;
00007 using namespace Sct;
00008 using namespace boost;
00009 
00010 namespace SctData {
00011 namespace IO {
00012 
00013 unsigned FitObjectStreamer_v1::s_version=1;
00014 unsigned ErfFitObjectStreamer_v1::s_version=1;
00015 unsigned ErfcFitObjectStreamer_v1::s_version=1;
00016 unsigned GausFitObjectStreamer_v1::s_version=1;
00017 unsigned TopHatFitObjectStreamer_v1::s_version=1;
00018 
00019 
00020 /* READ NOTES ON STREAMERS AND VERSIONS BEFORE EDITING THIS FILE! */
00021 
00022 bool FitObjectStreamer_v1::inMap = IOManager::addToMap("SctData::FitObject",  std::auto_ptr<Streamer>(new FitObjectStreamer_v1()));
00023 
00024 shared_ptr<Streamable> FitObjectStreamer_v1::read(IStream&, IOManager const&) const throw(LogicError, IoError) {
00025   throw LogicError("Cannot make a FitObject - abstract class",__FILE__,__LINE__);
00026 }
00027 
00028 void FitObjectStreamer_v1::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00029     //Dynamic cast should always be safe
00030     const FitObject& fo = dynamic_cast<const FitObject&>(ob);
00031 
00032 //   Version 1:
00033     out << fo.getChiSquared() << fo.getNDF();
00034     for (int i=0; i<fo.getNPar(); ++i) {
00035         out << fo.getParameter(i) << fo.getParError(i) << fo.isFixed(i);
00036     }
00037 
00038     for (int i=0; i<fo.getNDim(); ++i) {
00039         out << fo.getVarMin(i) << fo.getVarMax(i);
00040     }
00041     /* Version 2:
00042     //We do our own buffering here:
00043     unsigned int doubleSize = fo.getNPar() * 2 + fo.getNDim() * 2 + 1;
00044     unsigned int dimStart = fo.getNPar() * 2 + 1;
00045     double doubleArray[doubleSize];
00046     unsigned int boolSize = fo.getNPar();
00047     bool boolArray[boolSize];
00048     
00049     doubleArray[0] = fo.getChiSquared();
00050     for (int i=0; i<fo.getNPar(); ++i) {
00051     doubleArray[2*i+1] = fo.getParameter(i);
00052     doubleArray[2*i+2] = fo.getParError(i);
00053     boolArray[i] = fo.isFixed(i);
00054     }
00055     for (int i=0; i<fo.getNDim(); ++i) {
00056     doubleArray[dimStart + i*2] = fo.getVarMin(i);
00057     doubleArray[dimStart + i*2 + 1] = fo.getVarMax(i);
00058     }
00059     
00060     out.put(doubleArray, doubleSize);
00061     out.put(boolArray, boolSize);*/
00062 }
00063 
00064 void FitObjectStreamer_v1::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00065     //Dynamic cast should always be safe
00066     //cout << "Dynamic_cast read called" << endl;
00067     FitObject& fo = dynamic_cast<FitObject&>(ob);
00068     read(in, fo, manager);
00069 }
00070 
00071 void FitObjectStreamer_v1::read(IStream& in, FitObject& fo, const IOManager& manager) const throw(LogicError, IoError) {    
00072 //Version 1
00073     int ndf;
00074     double chi2;
00075     bool fixed;
00076     int ndim = fo.getNDim();
00077     int npar = fo.getNPar();
00078     in >> chi2 >> ndf;
00079     fo.setChiSquared(chi2);
00080     fo.setNDF(ndf);
00081 
00082     for (int i=0; i<npar; i++) {
00083         double param, paramError;
00084         in >> param >> paramError >> fixed;
00085         fo.setParameter(i, param);
00086         fo.setParError(i, paramError);
00087     fo.fixParameter(i, fixed);
00088     }
00089 
00090     
00091     for (int i=0; i<ndim; i++) {
00092         double varMin, varMax;
00093         in >> varMin >> varMax;
00094         fo.setVarMin(i, varMin);
00095         fo.setVarMax(i, varMax);
00096     }
00097 /* Version 2    
00098     unsigned int doubleSize = fo.getNPar() * 2 + fo.getNDim() * 2 + 1;
00099     unsigned int dimStart = fo.getNPar() * 2 + 1;
00100     double doubleArray[doubleSize];
00101     unsigned int boolSize = fo.getNPar();
00102     bool boolArray[boolSize];    
00103     
00104     in.get(doubleArray, doubleSize);
00105     in.get(boolArray, boolSize);
00106     
00107     fo.setChiSquared(doubleArray[0]);
00108     for (int i=0; i<fo.getNPar(); ++i) {
00109     fo.setParameter(i, doubleArray[2*i+1]);
00110     fo.setParError(i, doubleArray[2*i+2]);
00111     fo.fixParameter(i, boolArray[i]);
00112     }
00113     for (int i=0; i<fo.getNDim(); ++i) {
00114     fo.setVarMin(i, doubleArray[dimStart + i*2]);
00115     fo.setVarMax(i, doubleArray[dimStart + i*2 + 1]);
00116     }
00117     */
00118 }
00119 
00120 bool ErfcFitObjectStreamer_v1::inMap = IOManager::addToMap("SctData::ErfcFitObject",  auto_ptr<Streamer>(new ErfcFitObjectStreamer_v1()));
00121 
00122 shared_ptr<Streamable> ErfcFitObjectStreamer_v1::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00123     shared_ptr<ErfcFitObject> f = ErfcFitObject::create();
00124     FitObjectStreamer_v1::read(in, *f, manager);
00125     return f;
00126 }
00127 
00128 void ErfcFitObjectStreamer_v1::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00129     FitObjectStreamer_v1::read(in, ob, manager);
00130 }
00131 
00132 
00133 bool ErfFitObjectStreamer_v1::inMap = IOManager::addToMap("SctData::ErfFitObject",  auto_ptr<Streamer>(new ErfFitObjectStreamer_v1()));
00134 
00135 shared_ptr<Streamable> ErfFitObjectStreamer_v1::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00136     shared_ptr<Streamable> f (new ErfFitObject());
00137     FitObjectStreamer_v1::read(in, *f, manager);
00138     return f;
00139 }
00140 
00141 void ErfFitObjectStreamer_v1::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00142     FitObjectStreamer_v1::read(in, ob, manager);
00143 }
00144 
00145 
00146 
00147 bool GausFitObjectStreamer_v1::inMap = IOManager::addToMap("SctData::GausFitObject",  auto_ptr<Streamer>(new GausFitObjectStreamer_v1()));
00148 
00149 shared_ptr<Streamable> GausFitObjectStreamer_v1::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00150     shared_ptr<Streamable> f (new GausFitObject());
00151     FitObjectStreamer_v1::read(in, *f, manager);
00152     return f;
00153 }
00154 
00155 void GausFitObjectStreamer_v1::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00156     FitObjectStreamer_v1::read(in, ob, manager);
00157 }
00158 
00159 
00160 
00161 bool TopHatFitObjectStreamer_v1::inMap = IOManager::addToMap("SctData::TopHatFitObject",  auto_ptr<Streamer>(new TopHatFitObjectStreamer_v1()));
00162 
00163 shared_ptr<Streamable> TopHatFitObjectStreamer_v1::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00164     shared_ptr<Streamable> f (new TopHatFitObject());
00165     FitObjectStreamer_v1::read(in, *f, manager);
00166     return f;
00167 }
00168 
00169 void TopHatFitObjectStreamer_v1::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00170     FitObjectStreamer_v1::read(in, ob, manager);
00171 }
00172 
00173 }
00174 }

Generated on Mon Feb 6 14:01:20 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6