source: Sophya/trunk/Cosmo/RadioBeam/qhist.cc@ 4043

Last change on this file since 4043 was 3783, checked in by ansari, 15 years ago

Ajout des programmes calcpk.cc calcpk2.cc syncube.cc tjyk.cc (voir fichier README) Reza 15/06/2010

File size: 3.4 KB
Line 
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-- */
11QHis1D::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-- */
19QHis1D::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-- */
27QHis1D::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-- */
36void 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-- */
49sa_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
65Histo 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// -----------------------------------
78QHis2D::QHis2D()
79 : nx(0),ny(0),xmin(0),xmax(0),ymin(0),ymax(0),sumw0(0.)
80{
81 ixb0 = jyb0 = 0;
82}
83QHis2D::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}
88void 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}
101double 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}
111void 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}
116Histo2D 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}
Note: See TracBrowser for help on using the repository browser.