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