00001 #include "Sct/OutOfRangeError.h"
00002 #include "TGraphAsymmErrorsStreamer.h"
00003
00004 #include "../RootStreamableAdapter.h"
00005
00007 #include "../TGraphAsymmErrorsFix.h"
00008 #include <TClass.h>
00009
00010 using namespace Sct;
00011
00012 namespace SctData {
00013 namespace IO {
00014
00015 TGraphAsymmErrorsStreamer::TGraphAsymmErrorsStreamer() throw() {}
00016 bool TGraphAsymmErrorsStreamer::inMap = IOManager::addToMap(TGraphAsymmErrors::Class()->GetName(), auto_ptr<Streamer>(new TGraphAsymmErrorsStreamer()));
00017
00018 void TGraphAsymmErrorsStreamer::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00020 TGraphStreamer::write(out, ob, manager);
00021 const RootStreamableAdapter& ad = dynamic_cast<const RootStreamableAdapter&>(ob);
00022 TGraphAsymmErrors* g = dynamic_cast<TGraphAsymmErrors*>(ad.getObject());
00023
00024 double* error = g->GetEXhigh();
00025 out.put(error, g->GetN());
00026 error = g->GetEXlow();
00027 out.put(error, g->GetN());
00028
00029 error = g->GetEYhigh();
00030 out.put(error, g->GetN());
00031 error = g->GetEYlow();
00032 out.put(error, g->GetN());
00033 }
00034
00035 void TGraphAsymmErrorsStreamer::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00037 TGraphStreamer::read(in, ob, manager);
00038 RootStreamableAdapter& ad = dynamic_cast<RootStreamableAdapter&>(ob);
00039 TGraphAsymmErrors* g = dynamic_cast<TGraphAsymmErrors*>(ad.getObject());
00040
00041 double* exl=0, *exh=0, *eyl=0, *eyh=0;
00042 size_t size = 0;
00043 in.get(&exh, size);
00044 if ((int) size != g->GetN())
00045 throw OutOfRangeError<int>("TGraphAsymmErrors A", __FILE__, __LINE__ ,size, g->GetN(), g->GetN());
00046
00047 in.get(&exl, size);
00048 if ((int) size != g->GetN())
00049 throw OutOfRangeError<int>("TGraphAsymmErrors B", __FILE__, __LINE__ ,size, g->GetN(), g->GetN());
00050
00051 in.get(&eyh, size);
00052 if ((int) size != g->GetN())
00053 throw OutOfRangeError<int>("TGraphAsymmErrors C", __FILE__, __LINE__ ,size, g->GetN(), g->GetN());
00054
00055 in.get(&eyl, size);
00056 if ((int) size != g->GetN())
00057 throw OutOfRangeError<int>("TGraphAsymmErrors D", __FILE__, __LINE__ ,size, g->GetN(), g->GetN());
00058
00059 for (int i=0; i<g->GetN(); ++i) {
00060 g->SetPointError(i, exl[i], exh[i], eyl[i], eyh[i]);
00061 }
00062
00063 delete [] exl;
00064 delete [] exh;
00065 delete [] eyl;
00066 delete [] eyh;
00067 }
00068
00069
00070 shared_ptr<Streamable> TGraphAsymmErrorsStreamer::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00071 shared_ptr<Streamable> ad (new RootStreamableAdapter(*new TGraphAsymmErrorsFix()));
00072
00073 read(in, *ad, manager);
00074 return ad;
00075 }
00076 }
00077
00078 }
00079