| 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 | } | 
|---|