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