Changeset 1092 in Sophya for trunk/SophyaLib/HiStats/histos2.h
- Timestamp:
- Jul 26, 2000, 3:15:52 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/HiStats/histos2.h
r1053 r1092 28 28 29 29 // CREATOR / DESTRUCTOR 30 Histo2D( float xMin, float xMax, int nxBin31 ,float yMin, float yMax, intnyBin);30 Histo2D(r_8 xMin,r_8 xMax,int_4 nxBin,r_8 yMin,r_8 yMax,int_4 nyBin); 31 Histo2D(r_4 xMin,r_4 xMax,int_4 nxBin,r_4 yMin,r_4 yMax,int_4 nyBin); 32 32 Histo2D(const Histo2D& h); 33 33 Histo2D(); 34 virtual 34 virtual ~Histo2D(); 35 35 36 36 // OPTIONS 37 void 37 void Errors(); 38 38 39 39 // UPDATING 40 void 41 void Add(float x, float y, floatw = 1.);40 void Zero(); 41 void Add(r_8 x, r_8 y, r_8 w = 1.); 42 42 43 43 // Operators 44 44 Histo2D& operator = (const Histo2D& h); 45 Histo2D& operator *= ( doubleb);46 Histo2D& operator /= ( doubleb);47 Histo2D& operator += ( doubleb);48 Histo2D& operator -= ( doubleb);45 Histo2D& operator *= (r_8 b); 46 Histo2D& operator /= (r_8 b); 47 Histo2D& operator += (r_8 b); 48 Histo2D& operator -= (r_8 b); 49 49 Histo2D& operator += (const Histo2D& a); 50 50 Histo2D& operator -= (const Histo2D& a); … … 58 58 void GetError2(TMatrix<r_8>& v); 59 59 void GetError(TMatrix<r_8>& v); 60 void PutValue(TMatrix<r_8>& v, int ierr=0);61 void PutValueAdd(TMatrix<r_8>& v, int ierr=0);60 void PutValue(TMatrix<r_8>& v, int_4 ierr=0); 61 void PutValueAdd(TMatrix<r_8>& v, int_4 ierr=0); 62 62 void PutError2(TMatrix<r_8>& v); 63 63 void PutError2Add(TMatrix<r_8>& v); … … 66 66 // INLINES 67 67 //! Retourne l'abscisse minimum. 68 inline float XMin() const {return xmin;}68 inline r_8 XMin() const {return mXmin;} 69 69 //! Retourne l'abscisse maximum. 70 inline float XMax() const {return xmax;}70 inline r_8 XMax() const {return mXmax;} 71 71 //! Retourne l'ordonnee minimum. 72 inline float YMin() const {return ymin;}72 inline r_8 YMin() const {return mYmin;} 73 73 //! Retourne l'ordonnee maximum. 74 inline float YMax() const {return ymax;}74 inline r_8 YMax() const {return mYmax;} 75 75 //! Retourne le nombre de bins selon X. 76 inline int_4 NBinX() const {return nx;}76 inline int_4 NBinX() const {return mNx;} 77 77 //! Retourne le nombre de bins selon Y. 78 inline int_4 NBinY() const {return ny;}78 inline int_4 NBinY() const {return mNy;} 79 79 //! Retourne la largeur du bin selon X. 80 inline float WBinX() const {return wbinx;}80 inline r_8 WBinX() const {return mWBinx;} 81 81 //! Retourne la largeur du bin selon Y. 82 inline float WBinY() const {return wbiny;}82 inline r_8 WBinY() const {return mWBiny;} 83 83 //! Retourne le pointeur sur le tableaux des contenus. 84 inline float* Bins() const {return data;}84 inline r_8* Bins() const {return mData;} 85 85 //! Retourne le contenu du bin i,j. 86 inline float operator()(int i,int j) const {return data[j*nx+i];}86 inline r_8 operator()(int_4 i,int_4 j) const {return mData[j*mNx+i];} 87 87 //! Remplit le contenu du bin i,j. 88 inline float& operator()(int i,int j) {return data[j*nx+i];}88 inline r_8& operator()(int_4 i,int_4 j) {return mData[j*mNx+i];} 89 89 //! retourne "true" si il y a des erreurs stoquees 90 inline bool HasErrors() { if(err2) return true; else return false;}90 inline bool HasErrors() { if(mErr2) return true; else return false;} 91 91 //! Retourne l'erreur du bin i,j. 92 inline float Error(int i,intj) const93 {if(err2)94 {if(err2[j*nx+i]>0.) return sqrt(err2[j*nx+i]); else return 0.;}95 92 inline r_8 Error(int_4 i,int_4 j) const 93 {if(mErr2) 94 {if(mErr2[j*mNx+i]>0.) return sqrt(mErr2[j*mNx+i]); else return 0.;} 95 else return 0.;} 96 96 //! Remplit l'erreur au carre du bin i,j. 97 inline double Error2(int i,intj) const98 {if(err2) return err2[j*nx+i]; else return 0.;}97 inline r_8 Error2(int_4 i,int_4 j) const 98 {if(mErr2) return mErr2[j*mNx+i]; else return 0.;} 99 99 //! Remplit l'erreur au carre du bin i,j. 100 inline double& Error2(int i,int j) {return err2[j*nx+i];}100 inline r_8& Error2(int_4 i,int_4 j) {return mErr2[j*mNx+i];} 101 101 //! Retourne la somme ponderee. 102 inline float NData() const {return (float)nHist;}102 inline r_8 NData() const {return nHist;} 103 103 //! Retourne le nombre d'entrees. 104 inline int_4 104 inline int_4 NEntries() const {return nEntries;} 105 105 //! Retourne l'abscisse et l'ordonnee du coin inferieur du bin i,j. 106 inline void BinLowEdge(int i,int j,float& x,float& y) 107 {x = xmin + i*wbinx; y = ymin + j*wbiny;} 106 inline void BinLowEdge(int_4 i,int_4 j,r_8& x,r_8& y) 107 {x = mXmin + i*mWBinx; y = mYmin + j*mWBiny;} 108 //! Retourne l'abscisse et l'ordonnee du coin inferieur du bin i,j. 109 inline void BinLowEdge(int_4 i,int_4 j,r_4& xf,r_4& yf) 110 {r_8 x,y; BinLowEdge(i,j,x,y); xf=x; yf=y;} 108 111 //! Retourne l'abscisse et l'ordonnee du centre du bin i,j. 109 inline void BinCenter(int i,int j,float& x,float& y) 110 {x = xmin + (i+0.5)*wbinx; y = ymin + (j+0.5)*wbiny;} 112 inline void BinCenter(int_4 i,int_4 j,r_8& x,r_8& y) 113 {x = mXmin + (i+0.5)*mWBinx; y = mYmin + (j+0.5)*mWBiny;} 114 //! Retourne l'abscisse et l'ordonnee du centre du bin i,j. 115 inline void BinCenter(int_4 i,int_4 j,r_4& xf,r_4& yf) 116 {r_8 x,y; BinCenter(i,j,x,y); xf=x; yf=y;} 111 117 //! Retourne l'abscisse et l'ordonnee du coin superieur du bin i,j. 112 inline void BinHighEdge(int i,int j,float& x,float& y) 113 {x = xmin + (i+1)*wbinx; y = ymin + (j+1)*wbiny;} 118 inline void BinHighEdge(int_4 i,int_4 j,r_8& x,r_8& y) 119 {x = mXmin + (i+1)*mWBinx; y = mYmin + (j+1)*mWBiny;} 120 //! Retourne l'abscisse et l'ordonnee du coin superieur du bin i,j. 121 inline void BinHighEdge(int_4 i,int_4 j,r_4& xf,r_4& yf) 122 {r_8 x,y; BinHighEdge(i,j,x,y); xf=x; yf=y;} 114 123 //! Retourne les numeros du bin contenant l'abscisse et l'ordonnee x,y. 115 inline void FindBin( float x,float y,int& i,int& j)116 { i = (int) floorf((x - xmin)/wbinx); j = (int) floorf((y - ymin)/wbiny);}124 inline void FindBin(r_8 x,r_8 y,int_4& i,int_4& j) 125 {i=(int_4) floor((x-mXmin)/mWBinx); j=(int_4) floor((y-mYmin)/mWBiny);} 117 126 118 127 // Info, statistique et calculs sur les histogrammes 119 float NOver(int i=-1,intj=-1) const;120 int 121 int 122 void IJMax(int& imax,int& jmax,int il=1,int ih= -1,int jl=1,intjh= -1);123 void IJMin(int& imax,int& jmax,int il=1,int ih= -1,int jl=1,intjh= -1);124 float VMax(int il=1,int ih= -1,int jl=1,intjh= -1) const;125 float VMin(int il=1,int ih= -1,int jl=1,intjh= -1) const;126 int EstimeMax(float& xm,float& ym,intSzPav = 3127 ,int il=1,int ih= -1,int jl=1,intjh= -1);128 int EstimeMax(int im,int jm,float& xm,float& ym,intSzPav = 3);129 int FindMax(int& im,int& jm,int SzPav = 3,floatDz = 0.130 ,int il=1,int ih= -1,int jl=1,intjh= -1);128 r_8 NOver(int_4 i=-1,int_4 j=-1) const; 129 int_4 BinNonNul() const; 130 int_4 ErrNonNul() const; 131 void IJMax(int_4& imax,int_4& jmax,int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1); 132 void IJMin(int_4& imax,int_4& jmax,int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1); 133 r_8 VMax(int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1) const; 134 r_8 VMin(int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1) const; 135 int_4 EstimeMax(r_8& xm,r_8& ym,int_4 SzPav = 3 136 ,int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1); 137 int_4 EstimeMax(int_4 im,int_4 jm,r_8& xm,r_8& ym,int_4 SzPav = 3); 138 int_4 FindMax(int_4& im,int_4& jm,int_4 SzPav = 3,r_8 Dz = 0. 139 ,int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1); 131 140 132 141 // Fit 133 int 134 Histo2D 135 Histo2D 142 int_4 Fit(GeneralFit& gfit,unsigned short typ_err=0); 143 Histo2D FitResidus(GeneralFit& gfit); 144 Histo2D FitFunction(GeneralFit& gfit); 136 145 137 146 // Print et Display ASCII 138 void 139 void Print(float min=1.,floatmax=-1.140 ,int il=1,int ih= -1,int jl=1,intjh= -1);147 void PrintStatus(); 148 void Print(r_8 min=1.,r_8 max=-1. 149 ,int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1); 141 150 142 151 // PROJECTIONS 143 void 144 void 145 void 146 void 147 void 148 void 149 void 150 void 151 void 152 void SetProjX(); 153 void SetProjY(); 154 void SetProj(); 155 void DelProjX(); 156 void DelProjY(); 157 void DelProj(); 158 void ZeroProjX(); 159 void ZeroProjY(); 160 void ZeroProj(); 152 161 //! Retourne le pointeur sur l'histo 1D de la projection selon X. 153 inline Histo* HProjX() const {return hprojx;}162 inline Histo* HProjX() const {return mHprojx;} 154 163 //! Retourne le pointeur sur l'histo 1D de la projection selon Y. 155 inline Histo* HProjY() const {return hprojy;}156 void 164 inline Histo* HProjY() const {return mHprojy;} 165 void ShowProj(); 157 166 158 167 // BANDES 159 168 //! Retourne le nombre de bandes selon X 160 inline int NBandX() const {return lbandx.size();}169 inline int_4 NBandX() const {return mLBandx.size();} 161 170 //! Retourne le nombre de bandes selon Y 162 inline int NBandY() const {return lbandy.size();}163 int SetBandX(float ybmin,floatybmax);164 int SetBandY(float xbmin,floatxbmax);165 void 166 void 167 void 168 void 169 Histo* HBandX(intn) const;170 Histo* HBandY(intn) const;171 void GetBandX(int n,float& ybmin,float& ybmax) const;172 void GetBandY(int n,float& xbmin,float& xbmax) const;173 void ShowBand(intlp = 0);171 inline int_4 NBandY() const {return mLBandy.size();} 172 int_4 SetBandX(r_8 ybmin,r_8 ybmax); 173 int_4 SetBandY(r_8 xbmin,r_8 xbmax); 174 void DelBandX(); 175 void DelBandY(); 176 void ZeroBandX(); 177 void ZeroBandY(); 178 Histo* HBandX(int_4 n) const; 179 Histo* HBandY(int_4 n) const; 180 void GetBandX(int_4 n,r_8& ybmin,r_8& ybmax) const; 181 void GetBandY(int_4 n,r_8& xbmin,r_8& xbmax) const; 182 void ShowBand(int_4 lp = 0); 174 183 175 184 // SLICES 176 185 //! Retourne le nombre de slices selon X 177 inline int NSliX() const {return lslix.size();}186 inline int_4 NSliX() const {return mLSlix.size();} 178 187 //! Retourne le nombre de slices selon Y 179 inline int NSliY() const {return lsliy.size();}180 int SetSliX(intnsli);181 int SetSliY(intnsli);182 void 183 void 184 void 185 void 186 Histo* HSliX(intn) const;187 Histo* HSliY(intn) const;188 void ShowSli(intlp = 0);188 inline int_4 NSliY() const {return mLSliy.size();} 189 int_4 SetSliX(int_4 nsli); 190 int_4 SetSliY(int_4 nsli); 191 void DelSliX(); 192 void DelSliY(); 193 void ZeroSliX(); 194 void ZeroSliY(); 195 Histo* HSliX(int_4 n) const; 196 Histo* HSliY(int_4 n) const; 197 void ShowSli(int_4 lp = 0); 189 198 190 199 #ifndef __DECCXX … … 193 202 //! structure de definition des bandes 194 203 struct bande_slice { 195 int num; //!< nombre de bandes196 float min;//!< limite minimum pour remplir la bande197 float max;//!< limite maximum pour remplir la bande198 Histo* H; //!< pointer sur l Histo 1D de la bande204 int_4 num; //!< nombre de bandes 205 r_8 min; //!< limite minimum pour remplir la bande 206 r_8 max; //!< limite maximum pour remplir la bande 207 Histo* H; //!< pointer sur l Histo 1D de la bande 199 208 STRUCTCOMP(bande_slice) 200 209 }; … … 205 214 void Delete(); 206 215 207 float* data; //!< donnees208 double* err2; //!< erreurs carrees209 210 float over[3][3]; //!< overflow table211 double nHist;//!< somme ponderee des entrees212 int_4 nEntries;//!< nombre d'entrees213 214 int_4 nx; //!< nombre de bins en X215 int_4 ny; //!< nombre de bins en Y216 int_4 nxy; //!< nombre de bins total217 float xmin; //!< abscisse minimum218 float xmax; //!< abscisse maximum219 float ymin; //!< ordonnee minimum220 float ymax; //!< ordonnee maximum221 float wbinx; //!< largeur du bin en X222 float wbiny; //!< largeur du bin en Y223 224 bande_slice b_s;225 226 Histo* hprojx; //!< pointer sur Histo des proj X227 Histo* hprojy; //!< pointer sur Histo des proj Y228 229 list<bande_slice> lbandx; //!< liste des bandes selon X230 list<bande_slice> lbandy; //!< liste des bandes selon Y216 r_8* mData; //!< donnees 217 r_8* mErr2; //!< erreurs carrees 218 219 r_8 mOver[3][3]; //!< overflow table 220 r_8 nHist; //!< somme ponderee des entrees 221 int_4 nEntries; //!< nombre d'entrees 222 223 int_4 mNx; //!< nombre de bins en X 224 int_4 mNy; //!< nombre de bins en Y 225 int_4 mNxy; //!< nombre de bins total 226 r_8 mXmin; //!< abscisse minimum 227 r_8 mXmax; //!< abscisse maximum 228 r_8 mYmin; //!< ordonnee minimum 229 r_8 mYmax; //!< ordonnee maximum 230 r_8 mWBinx; //!< largeur du bin en X 231 r_8 mWBiny; //!< largeur du bin en Y 232 233 bande_slice mB_s; 234 235 Histo* mHprojx; //!< pointer sur Histo des proj X 236 Histo* mHprojy; //!< pointer sur Histo des proj Y 237 238 list<bande_slice> mLBandx; //!< liste des bandes selon X 239 list<bande_slice> mLBandy; //!< liste des bandes selon Y 231 240 232 list<bande_slice> lslix; //!< liste des slices selon X233 list<bande_slice> lsliy; //!< liste des slices selon Y241 list<bande_slice> mLSlix; //!< liste des slices selon X 242 list<bande_slice> mLSliy; //!< liste des slices selon Y 234 243 235 244 }; … … 250 259 // ObjFileIO<Histo2D> 251 260 252 /*! \ingroup HiStats \fn operator*(const Histo2D&, double)261 /*! \ingroup HiStats \fn operator*(const Histo2D&,r_8) 253 262 \brief Operateur H2 = H1 * b */ 254 inline Histo2D operator * (const Histo2D& a, doubleb)263 inline Histo2D operator * (const Histo2D& a, r_8 b) 255 264 { 256 265 Histo2D result(a); … … 258 267 } 259 268 260 /*! \ingroup HiStats \fn operator*( double,const Histo2D&)269 /*! \ingroup HiStats \fn operator*(r_8,const Histo2D&) 261 270 \brief Operateur H2 = b * H1 */ 262 inline Histo2D operator * ( doubleb, const Histo2D& a)271 inline Histo2D operator * (r_8 b, const Histo2D& a) 263 272 { 264 273 Histo2D result(a); … … 266 275 } 267 276 268 /*! \ingroup HiStats \fn operator/(const Histo2D&, double)277 /*! \ingroup HiStats \fn operator/(const Histo2D&,r_8) 269 278 \brief Operateur H2 = H1 / b */ 270 inline Histo2D operator / (const Histo2D& a, doubleb)279 inline Histo2D operator / (const Histo2D& a, r_8 b) 271 280 { 272 281 Histo2D result(a); … … 274 283 } 275 284 276 /*! \ingroup HiStats \fn operator+(const Histo2D&, double)285 /*! \ingroup HiStats \fn operator+(const Histo2D&,r_8) 277 286 \brief Operateur H2 = H1 + b */ 278 inline Histo2D operator + (const Histo2D& a, doubleb)287 inline Histo2D operator + (const Histo2D& a, r_8 b) 279 288 { 280 289 Histo2D result(a); … … 282 291 } 283 292 284 /*! \ingroup HiStats \fn operator+( double,const Histo2D&)293 /*! \ingroup HiStats \fn operator+(r_8,const Histo2D&) 285 294 \brief Operateur H2 = b + H1 */ 286 inline Histo2D operator + ( doubleb, const Histo2D& a)295 inline Histo2D operator + (r_8 b, const Histo2D& a) 287 296 { 288 297 Histo2D result(a); … … 290 299 } 291 300 292 /*! \ingroup HiStats \fn operator-(const Histo2D&, double)301 /*! \ingroup HiStats \fn operator-(const Histo2D&,r_8) 293 302 \brief Operateur H2 = H1 - b */ 294 inline Histo2D operator - (const Histo2D& a, doubleb)303 inline Histo2D operator - (const Histo2D& a, r_8 b) 295 304 { 296 305 Histo2D result(a); … … 298 307 } 299 308 300 /*! \ingroup HiStats \fn operator-( double,const Histo2D&)309 /*! \ingroup HiStats \fn operator-(r_8,const Histo2D&) 301 310 \brief Operateur H2 = b - H1 */ 302 inline Histo2D operator - ( doubleb, const Histo2D& a)311 inline Histo2D operator - (r_8 b, const Histo2D& a) 303 312 { 304 313 Histo2D result(a);
Note:
See TracChangeset
for help on using the changeset viewer.