#include "sopnamsp.h" #include "machdefs.h" #include #include #include #include "histinit.h" #include "histerr.h" #include "perrors.h" /*! \class SOPHYA::HistoErr \ingroup HiStats Classe d'histogrammes 1D avec erreurs donnees par l'utilisateur */ /********* Methode *********/ /*! Constructeur par defaut */ HistoErr::HistoErr(void) : Histo(), mNData(NULL), mCorrel(0) { } /********* Methode *********/ /*! Constructeur d'un histo de nBin bins allant de xMin a xMax */ HistoErr::HistoErr(r_8 xMin, r_8 xMax, int_4 nBin) : Histo(), mNData(NULL) { CreateOrResize(xMin,xMax,nBin); } /********* Methode *********/ /*! Constructeur par copie */ HistoErr::HistoErr(const HistoErr& H) : Histo(H), mNData((H.mBins>0)? new r_8[H.mBins] : NULL), mCorrel(H.mCorrel) { if(mNData>0) memcpy(mNData,H.mNData,mBins*sizeof(r_8)); } /********* Methode *********/ /*! Destructeur */ HistoErr::~HistoErr(void) { Delete(); } /********* Methode *********/ /*! Gestion de l'allocation */ void HistoErr::CreateOrResize(r_8 xMin, r_8 xMax, int_4 nBin) { //cout<<"HistoErr::CreateOrResize()"<=0 && numBin& v) const { v.Realloc(mBins); for(int_4 i=0;i &v) { int_4 n = (v.NElts()0) for(int_4 i=0;i=mBins) mOver += hfrom.mData[i]; else { mData[numBin] += hfrom.mData[i]; mNData[numBin] += hfrom.mNData[i]; mErr2[numBin] += hfrom.mErr2[i]; nHist += hfrom.mData[i]; nEntries++; } } mCorrel = hfrom.mCorrel; } /********* Methode *********/ /*! Operateur egal HistoErr = HistoErr */ HistoErr& HistoErr::operator = (const HistoErr& h) { if(this==&h) return *this; Delete(); if(h.mBins<=0) return *this; // Copy the "Histo" part (Histo)(*this) = Histo::operator=(h); // Copy the "entries by bin" table allocate_mNData(h.mBins); memcpy(mNData,h.mNData,mBins*sizeof(r_8)); mCorrel = h.mCorrel; return *this; } /********* Methode *********/ /*! Print info */ void HistoErr::Show(ostream & os) const { Histo::Show(os); os <<" ncorrel="< , pour SGI-CC en particulier */ void ObjFileIO::ReadSelf(PInPersist& is) { string strg; if(dobj==NULL) dobj=new HistoErr; else dobj->Delete(); // Lecture entete is.GetStr(strg); // Nombre d'appels a ToCorrel/FromCorrel is.Get(dobj->mCorrel); // Lecture des donnees HistoErr is.Get(dobj->mBins); dobj->allocate_mNData(dobj->mBins); is.Get(dobj->mNData, dobj->mBins); // Lecture de l'histogramme is >> (Histo&)(*dobj); return; } DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */ void ObjFileIO::WriteSelf(POutPersist& os) const { if(dobj == NULL) return; string strg; // Ecriture entete strg = "HistErr"; os.PutStr(strg); // Nombre d'appels a ToCorrel/FromCorrel os.Put(dobj->mCorrel); // Ecriture des valeurs os.Put(dobj->mBins); // Ecriture des donnees HistoErr nombre d entree par bin os.Put(dobj->mNData, dobj->mBins); // Ecriture de l'histogramme os << (Histo&)(*dobj); return; } #ifdef __CXX_PRAGMA_TEMPLATES__ #pragma define_template ObjFileIO #endif #if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES) template class SOPHYA::ObjFileIO; #endif