Changeset 3123 in Sophya for trunk/SophyaLib/HiStats/histerr.h
- Timestamp:
- Jan 10, 2007, 12:53:57 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/HiStats/histerr.h
r3118 r3123 5 5 #include <iostream> 6 6 #include <stdio.h> 7 #include " histos.h"7 #include "tvector.h" 8 8 9 9 namespace SOPHYA { … … 12 12 template <class T> class FitsHandler; 13 13 14 //! 1 dimension histograms with errors given by user 15 class HistoErr : public Histo { 14 15 //! 1 dimensions histograms with errors given by user 16 class HistoErr : public AnyDataObj { 16 17 friend class ObjFileIO<HistoErr>; 17 friend class FitsHandler<Histo >;18 friend class FitsHandler<HistoErr>; 18 19 public: 19 20 20 // CREATOR / DESTRUCTOR21 //! Create or destroy 21 22 HistoErr(void); 22 HistoErr(r_8 x Min, r_8 xMax, int_4 nBin=100);23 HistoErr(r_8 xmin,r_8 xmax,int_4 nx); 23 24 HistoErr(const HistoErr& H); 24 25 virtual ~HistoErr(void); 25 26 26 // UPDATING or SETTING 27 //! Updating or Setting 28 void ReCenterBin(void); 27 29 void Zero(void); 28 //! Addition du contenu de l'histo pour abscisse x poids w et l'erreur e 29 inline void Add(r_8 x, r_8 w, r_8 e) 30 { 31 int_4 numBin = (int_4)floor((x-mMin)/binWidth); 32 if(numBin<0) mUnder += w; 33 else if(numBin>=mBins) mOver += w; 34 else { 35 mData[numBin] += w; mNData[numBin] += 1.; mErr2[numBin] += e*e; 36 nHist += w; nEntries++; 37 } 38 } 39 inline void Add(r_8 x, r_8 w) {Add(x,w,1.);} 40 inline void Add(r_8 x) {Add(x,1.,1.);} 41 //! Addition du contenu de l'histo pour le bin numBin poids w et l'erreur e 42 inline void AddBin(int_4 numBin, r_8 w, r_8 e) 43 { 44 if(numBin<0) mUnder += w; 45 else if(numBin>=mBins) mOver += w; 46 else { 47 mData[numBin] += w; mNData[numBin] += 1.; mErr2[numBin] += e*e; 48 nHist += w; nEntries++; 49 } 50 } 51 inline void AddBin(int_4 numBin, r_8 w) {AddBin(numBin,w,1.);} 52 inline void AddBin(int_4 numBin) {AddBin(numBin,1.,1.);} 53 //! remplissage contenu de l'histo pour le bin numBin poids w et l'erreur e 54 void SetBin(int_4 numBin, r_8 w, r_8 e, r_8 nb); 55 inline void SetBin(int_4 numBin, r_8 w, r_8 e) {SetBin(numBin,w,e,1.);} 56 inline void SetBin(int_4 numBin, r_8 w) {SetBin(numBin,w,1.,1.);} 57 inline void SetBin(int_4 numBin) {SetBin(numBin,1.,1.,1.);} 58 //! remplissage nombre d'entrees pour le bin numBin 59 void SetNentB(int_4 numBin, r_8 nb=1.); 30 31 //! Getting Info 32 int_4 NBins(void) {return nx_;} 33 r_8 XMin(void) {return xmin_;} 34 r_8 XMax(void) {return xmax_;} 35 r_8 BinWidth(void) {return dx_;} 36 37 //! Retourne le contenu du bin 38 inline r_8 operator()(int_4 i) const 39 { 40 if(i<0 || i>=nx_) return 0.; 41 return data_(i); 42 } 43 inline r_8& operator()(int_4 i) 44 { 45 return data_(i); 46 } 47 48 //! Retourne le nombre l'erreur au carre dans le bin 49 inline r_8 Error2(int_4 i) const 50 { 51 if(i<0 || i>=nx_) return 0.; 52 return err2_(i); 53 } 60 54 61 55 //! Retourne le nombre d'entree dans le bin 62 56 inline r_8 NEntBin(int_4 i) const 63 {if(mNData) return mNData[i]; else return 0.;} 57 { 58 if(i<0 || i>=nx_) return 0.; 59 return ndata_(i); 60 } 64 61 65 //! get/put from/to a vector 66 void GetNBin(TVector<r_8>& v) const; 67 void PutNBin(TVector<r_8>& v); 62 //! Retourne l'abscisse et l'ordonnee du coin inferieur du bin i. 63 inline r_8 BinLowEdge(int_4 i) const {return xmin_ + i*dx_;} 64 //! Retourne l'abscisse et l'ordonnee du centre du bin i. 65 inline r_8 BinCenter(int_4 i) const {return xmin_ + (i+0.5)*dx_;} 66 //! Retourne l'abscisse et l'ordonnee du coin superieur du bin i. 67 inline r_8 BinHighEdge(int_4 i) const {return xmin_ + (i+1)*dx_;} 68 //! Retourne les numeros du bin contenant l'abscisse et l'ordonnee x,y. 69 inline int_4 FindBin(r_8 x) const {return (int_4)floor((x-xmin_)/dx_);} 70 71 //! Addition du contenu de l'histo pour abscisse x poids w et l'erreur e 72 inline void Add(r_8 x, r_8 w, r_8 e) 73 { 74 int_4 i = FindBin(x); 75 if(i<0 || i>=nx_) return; 76 data_(i) += w; ndata_(i) += 1.; err2_(i) += e*e; 77 } 78 inline void Add(r_8 x, r_8 w) {Add(x,w,1.);} 79 inline void Add(r_8 x) {Add(x,1.,1.);} 80 81 //! Addition du contenu de l'histo pour le bin i poids w et l'erreur e 82 inline void AddBin(int_4 i, r_8 w, r_8 e) 83 { 84 if(i<0 || i>=nx_) return; 85 data_(i) += w; ndata_(i) += 1.; err2_(i) += e*e; 86 } 87 inline void AddBin(int_4 i, r_8 w) {AddBin(i,w,1.);} 88 inline void AddBin(int_4 i) {AddBin(i,1.,1.);} 89 90 //! remplissage contenu de l'histo pour le bin i poids w et l'erreur e 91 inline void SetBin(int_4 i, r_8 w, r_8 e, r_8 nb) 92 { 93 if(i<0 || i>=nx_) return; 94 data_(i) = w; 95 err2_(i) = e*e; 96 ndata_(i) = nb; 97 } 98 inline void SetBin(int_4 i, r_8 w, r_8 e) {SetBin(i,w,e,1.);} 99 inline void SetBin(int_4 i, r_8 w) {SetBin(i,w,1.,1.);} 100 inline void SetBin(int_4 i) {SetBin(i,1.,1.,1.);} 101 //! remplissage de l'erreur carree pour le bin i 102 void SetErr2(int_4 i, r_8 e2) 103 { 104 if(i<0 || i>=nx_) return; 105 err2_(i) = e2; 106 } 107 //! remplissage nombre d'entrees pour le bin i 108 void SetNentB(int_4 i, r_8 nb) 109 { 110 if(i<0 || i>=nx_) return; 111 ndata_(i) = nb; 112 } 68 113 69 114 //! Compute the correlation histogram … … 76 121 void FillFrHErr(HistoErr& hfrom); 77 122 123 //! Recuperation des matrices elementaires 124 inline void GetData(TVector<r_8>& data) {data = data_;} 125 inline void GetError2(TVector<r_8>& err2) {err2 = err2_;} 126 inline void GetNData(TVector<r_8>& ndata) {ndata = ndata_;} 127 78 128 // Operators 79 129 HistoErr& operator = (const HistoErr& h); … … 84 134 85 135 protected: 86 void CreateOrResize(r_8 xMin, r_8 xMax, int_4 nBin); 87 void Delete(void); 136 void CreateOrResize(r_8 xmin,r_8 xmax,int_4 nx); 88 137 89 r_8* mNData; //!< nombre d'entrees dans chaque bin 138 r_4 xmin_,xmax_,dx_; 139 int_4 nx_; 140 TVector<r_8> data_; 141 TVector<r_8> err2_; 142 TVector<r_8> ndata_; 90 143 int_4 mCorrel; //!< Nombre d'appels a ToCorrel(+1) ou FromCorrel(-1) 91 144 };
Note:
See TracChangeset
for help on using the changeset viewer.