source: Sophya/trunk/SophyaLib/HiStats/histos.h@ 926

Last change on this file since 926 was 926, checked in by ansari, 25 years ago

documentation cmv 13/4/00

File size: 7.0 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2//
3// $Id: histos.h,v 1.4 2000-04-13 18:38:33 ansari Exp $
4//
5
6#ifndef HISTOS_SEEN
7#define HISTOS_SEEN
8
9#include "objfio.h"
10#include <iostream.h>
11#include <stdio.h>
12#include "peida.h"
13#include "tvector.h"
14#include "ppersist.h"
15#include "anydataobj.h"
16
17namespace SOPHYA {
18
19class GeneralFit;
20
21//! 1 dimension histograms
22class Histo : public AnyDataObj {
23 friend class ObjFileIO<Histo>;
24public:
25
26 // CREATOR / DESTRUCTOR
27 Histo();
28 Histo(float xMin, float xMax, int nBin=100);
29 Histo(const Histo& H);
30 virtual ~Histo();
31
32 // OPTIONS
33 void Errors();
34
35 // UPDATING or SETTING
36 void Zero();
37 void Add(float x, float w = 1.);
38 void AddBin(int numBin, float w = 1.);
39 void SetBin(float x, float w = 1.);
40 void SetBin(int numBin, float w = 1.);
41 void SetErr2(float x, double e2);
42 void SetErr2(int numBin, double e2);
43 void SetErr(float x, float e);
44 void SetErr(int numBin, float e);
45
46 // Operators
47 Histo& operator = (const Histo& h);
48 Histo& operator *= (double b);
49 Histo& operator /= (double b);
50 Histo& operator += (double b);
51 Histo& operator -= (double b);
52 friend Histo operator * (const Histo& a, double b);
53 friend Histo operator * (double b, const Histo& a);
54 friend Histo operator / (const Histo& a, double b);
55 friend Histo operator + (const Histo& a, double b);
56 friend Histo operator + (double b, const Histo& a);
57 friend Histo operator - (const Histo& a, double b);
58 friend Histo operator - (double b, const Histo& a);
59 Histo& operator += (const Histo& a);
60 Histo& operator -= (const Histo& a);
61 Histo& operator *= (const Histo& a);
62 Histo& operator /= (const Histo& a);
63 friend Histo operator + (const Histo& a, const Histo& b);
64 friend Histo operator - (const Histo& a, const Histo& b);
65 friend Histo operator * (const Histo& a, const Histo& b);
66 friend Histo operator / (const Histo& a, const Histo& b);
67
68 // get/put dans/depuis un vector
69 void GetAbsc(Vector& v);
70 void GetValue(Vector& v);
71 void GetError2(Vector& v);
72 void GetError(Vector& v);
73 void PutValue(Vector& v, int ierr=0);
74 void PutValueAdd(Vector &v, int ierr=0);
75 void PutError2(Vector& v);
76 void PutError2Add(Vector& v);
77 void PutError(Vector& v);
78
79 // INLINES
80 //! Retourne l'abscisse minimum
81 inline float XMin() const {return min;}
82 //! Retourne l'abscisse maximum
83 inline float XMax() const {return max;}
84 //! Retourne le nombre de bins
85 inline int_4 NBins() const {return bins;}
86 //! Retourne la largeur du bin
87 inline float BinWidth() const {return binWidth;}
88 //! Retourne le pointeur sur le tableaux des contenus
89 inline float* Bins() const {return data;}
90 //! Retourne le contenu du bin i
91 inline float operator()(int i) const {return data[i];}
92 //! Remplit le contenu du bin i
93 inline float& operator()(int i) {return data[i];}
94 //! retourne "true" si il y a des erreurs stoquees
95 inline bool HasErrors() { if(err2) return true; else return false;}
96 //! Retourne l'erreur du bin i
97 inline float Error(int i) const
98 {if(err2) {if(err2[i]>0.) return sqrt(err2[i]); else return 0.;}
99 else return 0.;}
100 //! Retourne l'erreur au carre du bin i
101 inline double Error2(int i) const
102 {if(err2) return err2[i]; else return 0.;}
103 //! Remplit l'erreur au carre du bin i
104 inline double& Error2(int i) {return err2[i];}
105 //! Retourne la somme ponderee
106 inline float NData() const {return (float) nHist;}
107 //! Retourne le nombre d'entrees
108 inline float NEntries() const {return nEntries;}
109 //! Retourne le nombre d'overflow
110 inline float NOver() const {return over;}
111 //! Retourne le nombre d'underflow
112 inline float NUnder() const {return under;}
113
114 //! Retourne l'abscisse du bord inferieur du bin i
115 inline float BinLowEdge(int i) const {return min + i*binWidth;}
116 //! Retourne l'abscisse du centre du bin i
117 inline float BinCenter(int i) const {return min + (i+0.5)*binWidth;}
118 //! Retourne l'abscisse du bord superieur du bin i
119 inline float BinHighEdge(int i) const {return min + (i+1)*binWidth;}
120 //! Retourne le numero du bin contenant l'abscisse x
121 inline int_4 FindBin(float x) const
122 {return (int_4) floorf((x - min) / binWidth);}
123
124 // Info, statistique et calculs sur les histogrammes
125 int BinNonNul() const;
126 int ErrNonNul() const;
127 int IMax() const;
128 int IMin() const;
129 float VMax() const;
130 float VMin() const;
131 float Mean() const;
132 float Sigma() const;
133 float MeanLH(int il,int ih) const;
134 float SigmaLH(int il,int ih) const;
135 float Mean(float x0, float dx) const;
136 float Sigma(float x0, float dx) const;
137 float CleanedMean() const;
138 float CleanedMean(float& sigma) const;
139 int BinPercent(float per) const;
140 int BinPercent(float x,float per,int& imin,int& imax);
141 int BinPercent(float x,float per,float& xmin,float& xmax);
142 void HInteg(float norm = 0.);
143 void HDeriv();
144 void HRebin(int nbinew);
145
146 int MaxiLocal(float& maxi,int& imax,float& maxn,int& imaxn);
147 float FitMax(int degree=2, float frac=0.5f, int debug=0) const;
148 float FindWidth(float xmax,float frac=0.5f, int debug=0) const;
149 float FindWidth(float frac=0.5f, int debug=0) const;
150 int EstimeMax(float& xm,int SzPav = 3);
151 int EstimeMax(int& im,float& xm,int SzPav = 3);
152 void EstimeWidthS(float frac,float& widthG,float& widthD);
153
154 // Fit
155 int Fit(GeneralFit& gfit,unsigned short typ_err=0);
156 Histo FitResidus(GeneralFit& gfit);
157 Histo FitFunction(GeneralFit& gfit);
158
159 // Print et Display ASCII
160 void PrintF(FILE * fp, int dyn = 100, float hmin = 1., float hmax = -1.,
161 int pflag = 0, int il = 1, int ih = -1);
162 void Print(int dyn = 100, float hmin = 1., float hmax = -1.,
163 int pflag = 0, int il = 1, int ih = -1);
164
165protected:
166 void Delete();
167
168 float* data; //!< donnees
169 double* err2; //!< erreurs carrees
170 float under; //!< underflow
171 float over; //!< overflow
172 double nHist; //!< somme ponderee des entrees
173 int_4 nEntries; //!< nombre d'entrees
174 int_4 bins; //!< nombre de bins
175 float min; //!< abscisse minimum
176 float max; //!< abscisse maximum
177 float binWidth; //!< largeur du bin
178};
179
180
181inline POutPersist& operator << (POutPersist& os, Histo & obj)
182{ ObjFileIO<Histo> fio(&obj); fio.Write(os); return(os); }
183inline PInPersist& operator >> (PInPersist& is, Histo & obj)
184{ ObjFileIO<Histo> fio(&obj); fio.Read(is); return(is); }
185
186// Classe pour la gestion de persistance
187// ObjFileIO<Histo>
188
189
190} // Fin du namespace
191
192#endif // HISTOS_SEEN
Note: See TracBrowser for help on using the repository browser.