[3783] | 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 | }
|
---|