1 | // Simple specific histo-like classes
|
---|
2 | // R. Ansari - Avril-Mai 2010
|
---|
3 |
|
---|
4 | #include "qhist.h"
|
---|
5 |
|
---|
6 | // -----------------------------------
|
---|
7 | // -- Classe ressemblant a un histo 2D
|
---|
8 | // -----------------------------------
|
---|
9 |
|
---|
10 | /* --Methode-- */
|
---|
11 | QHis1D::QHis1D()
|
---|
12 | : nx_(0),xmin_(0.),xmax_(0.),
|
---|
13 | nhis_(0), nunder_(0), nover_(0),
|
---|
14 | swunder_(0.), swover_(0.)
|
---|
15 | {
|
---|
16 | }
|
---|
17 |
|
---|
18 | /* --Methode-- */
|
---|
19 | QHis1D::QHis1D(QHis1D const& a)
|
---|
20 | : nx_(a.nx_),xmin_(a.xmin_),xmax_(a.xmax_), aw_(a.aw_),
|
---|
21 | nhis_(a.nhis_), nunder_(a.nunder_), nover_(a.nover_),
|
---|
22 | swunder_(a.swunder_), swover_(a.swover_)
|
---|
23 | {
|
---|
24 | }
|
---|
25 |
|
---|
26 | /* --Methode-- */
|
---|
27 | QHis1D::QHis1D(r_8 xMin,r_8 xMax,int_4 nxb)
|
---|
28 | : nx_(0),xmin_(0.),xmax_(0.),
|
---|
29 | nhis_(0), nunder_(0), nover_(0),
|
---|
30 | swunder_(0.), swover_(0.)
|
---|
31 | {
|
---|
32 | Define(xMin, xMax, nxb);
|
---|
33 | }
|
---|
34 |
|
---|
35 | /* --Methode-- */
|
---|
36 | void QHis1D::Define(r_8 xMin,r_8 xMax,int_4 nxb)
|
---|
37 | {
|
---|
38 | nx_=nxb;
|
---|
39 | xmin_=xMin; xmax_=xMax;
|
---|
40 | dxb_=(xmax_-xmin_)/(double)nx_;
|
---|
41 | sa_size_t sz[5]; sz[0]=nx_;
|
---|
42 | aw_.ReSize(1,sz);
|
---|
43 | nhis_=nunder_=nover_=0;
|
---|
44 | swunder_=swover_=0.;
|
---|
45 | return;
|
---|
46 | }
|
---|
47 |
|
---|
48 | /* --Methode-- */
|
---|
49 | sa_size_t QHis1D::Add(r_8 x, r_8 w)
|
---|
50 | {
|
---|
51 | sa_size_t ix = (sa_size_t)((x-xmin_)/dxb_);
|
---|
52 | if (ix<0) {
|
---|
53 | nunder_++; swunder_+=w;
|
---|
54 | return 0.;
|
---|
55 | }
|
---|
56 | if (ix>=nx_) {
|
---|
57 | nover_++; swover_+=w;
|
---|
58 | return 0.;
|
---|
59 | }
|
---|
60 | nhis_++;
|
---|
61 | aw_(ix) += w;
|
---|
62 | return nhis_;
|
---|
63 | }
|
---|
64 |
|
---|
65 | Histo QHis1D::Convert()
|
---|
66 | {
|
---|
67 | Histo h(xmin_,xmax_,nx_);
|
---|
68 | for(sa_size_t i=0; i<nx_; i++) h(i) = aw_(i);
|
---|
69 | cout << "QHis1D::Convert()/Info: Nx" << nx_ << " NUnder=" << nunder_ << " NHis=" << nhis_
|
---|
70 | << " NOver=" << nover_ << "\n"
|
---|
71 | << " SumWUnder=" << swunder_ << " SumW=" << aw_.Sum() << " SumWOver=" << swover_ << endl;
|
---|
72 | return h;
|
---|
73 | }
|
---|
74 |
|
---|
75 | // -----------------------------------
|
---|
76 | // -- Classe ressemblant a un histo 2D
|
---|
77 | // -----------------------------------
|
---|
78 | QHis2D::QHis2D()
|
---|
79 | : nx(0),ny(0),xmin(0),xmax(0),ymin(0),ymax(0),sumw0(0.)
|
---|
80 | {
|
---|
81 | ixb0 = jyb0 = 0;
|
---|
82 | }
|
---|
83 | QHis2D::QHis2D(r_8 xMin,r_8 xMax,int_4 nxb,r_8 yMin,r_8 yMax,int_4 nyb)
|
---|
84 | : nx(0),ny(0),xmin(0),xmax(0),ymin(0),ymax(0),sumw0(0.)
|
---|
85 | {
|
---|
86 | Define(xMin, xMax, nxb, yMin, yMax, nyb);
|
---|
87 | }
|
---|
88 | void QHis2D::Define(r_8 xMin,r_8 xMax,int_4 nxb,r_8 yMin,r_8 yMax,int_4 nyb)
|
---|
89 | {
|
---|
90 | nx=nxb; ny=nyb;
|
---|
91 | xmin=xMin; xmax=xMax;
|
---|
92 | ymin=yMin; ymax=yMax;
|
---|
93 | dxb=(xmax-xmin)/(double)nx;
|
---|
94 | dyb=(ymax-ymin)/(double)ny;
|
---|
95 | sa_size_t sz[5]; sz[0]=nx; sz[1]=ny;
|
---|
96 | aw.ReSize(2,sz);
|
---|
97 | SetZeroBin();
|
---|
98 | sumw0=0.;
|
---|
99 | return;
|
---|
100 | }
|
---|
101 | double QHis2D::Add(r_8 x, r_8 y, r_8 w, bool fgfh)
|
---|
102 | {
|
---|
103 | sa_size_t ix = (sa_size_t)((x-xmin)/dxb);
|
---|
104 | sa_size_t jy = (sa_size_t)((y-ymin)/dyb);
|
---|
105 | if ((ix<0)||(ix>=nx)||(jy<0)||(jy>=ny)) return 0.;
|
---|
106 | double rw = ((ix==ixb0)&&(jy==jyb0)) ? w : 0.;
|
---|
107 | sumw0 += rw;
|
---|
108 | if (fgfh) aw(ix,jy) += w;
|
---|
109 | return rw;
|
---|
110 | }
|
---|
111 | void QHis2D::SetZeroBin(r_8 x, r_8 y)
|
---|
112 | {
|
---|
113 | ixb0 = (sa_size_t)((x-xmin)/dxb);
|
---|
114 | jyb0 = (sa_size_t)((y-ymin)/dyb);
|
---|
115 | }
|
---|
116 | Histo2D QHis2D::Convert()
|
---|
117 | {
|
---|
118 | int_4 imn,jmn,imx,jmx;
|
---|
119 | r_8 min = aw(0,0);
|
---|
120 | r_8 max = aw(0,0);
|
---|
121 | imn=jmn=imx=jmx=0;
|
---|
122 | Histo2D h2(xmin,xmax,nx,ymin,ymax,ny);
|
---|
123 | for(int_4 j=0; j<ny; j++)
|
---|
124 | for(int_4 i=0; i<nx; i++) {
|
---|
125 | h2(i,j) = aw(i,j);
|
---|
126 | if (aw(i,j)>max) {
|
---|
127 | imx=i; jmx=j; max=aw(i,j);
|
---|
128 | }
|
---|
129 | if (aw(i,j)<min) {
|
---|
130 | imn=i; jmn=j; min=aw(i,j);
|
---|
131 | }
|
---|
132 | }
|
---|
133 | cout << "QHis2D::Convert()/Info: Nx,Ny=" << nx << "," << ny << " SumW=" << sumw0
|
---|
134 | << "\n ... Max:" << imx << "," << jmx << " ->" << max
|
---|
135 | << " @" << imx*dxb+xmin << "," << jmx*dyb+ymin
|
---|
136 | << "\n ...Min:" << imn << "," << jmn << " ->" << min
|
---|
137 | << " @" << imn*dxb+xmin << "," << jmn*dyb+ymin << endl;
|
---|
138 | return h2;
|
---|
139 | }
|
---|