Changeset 1092 in Sophya for trunk/SophyaLib/HiStats/histos2.cc


Ignore:
Timestamp:
Jul 26, 2000, 3:15:52 PM (25 years ago)
Author:
ansari
Message:

Histos/Hprof/Histo2D en r_8 cmv 26/7/00

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/HiStats/histos2.cc

    r1064 r1092  
    4343  entre xMin,xMax et yMin,yMax.
    4444*/
    45 Histo2D::Histo2D(float xMin, float xMax, int nxBin
    46                 ,float yMin, float yMax, int nyBin)
    47       : data(new float[nxBin*nyBin]), err2(NULL)
     45Histo2D::Histo2D(r_8 xMin,r_8 xMax,int_4 nxBin,r_8 yMin,r_8 yMax,int_4 nyBin)
     46      : mData(new r_8[nxBin*nyBin]), mErr2(NULL)
    4847      , nHist(0), nEntries(0)
    49       , nx(nxBin), ny(nyBin), nxy(nxBin*nyBin)
    50       , xmin(xMin), xmax(xMax), ymin(yMin), ymax(yMax)
    51       , wbinx((xMax - xMin)/nxBin), wbiny((yMax - yMin)/nyBin)
    52       , hprojx(NULL), hprojy(NULL)
     48      , mNx(nxBin), mNy(nyBin), mNxy(nxBin*nyBin)
     49      , mXmin(xMin), mXmax(xMax), mYmin(yMin), mYmax(yMax)
     50      , mWBinx((xMax - xMin)/nxBin), mWBiny((yMax - yMin)/nyBin)
     51      , mHprojx(NULL), mHprojy(NULL)
    5352{
    5453ASSERT(nxBin>0 && nyBin>0 && xMin<xMax && yMin<yMax);
    55 for(int i=0;i<3;i++) for(int j=0;j<3;j++) over[i][j]=0.;
     54for(int_4 i=0;i<3;i++) for(int_4 j=0;j<3;j++) mOver[i][j]=0.;
    5655Zero();
    57 b_s.H = NULL;
     56mB_s.H = NULL;
    5857END_CONSTRUCTOR
    5958}
    6059
    6160/*!
     61  Createur d'un histogramme 2D ayant nxBin,nyBin bins
     62  entre xMin,xMax et yMin,yMax.
     63*/
     64Histo2D::Histo2D(r_4 xMin,r_4 xMax,int_4 nxBin,r_4 yMin,r_4 yMax,int_4 nyBin)
     65      : mData(new r_8[nxBin*nyBin]), mErr2(NULL)
     66      , nHist(0), nEntries(0)
     67      , mNx(nxBin), mNy(nyBin), mNxy(nxBin*nyBin)
     68      , mXmin((r_8)xMin), mXmax((r_8)xMax), mYmin((r_8)yMin), mYmax((r_8)yMax)
     69      , mWBinx((xMax - xMin)/nxBin), mWBiny((yMax - yMin)/nyBin)
     70      , mHprojx(NULL), mHprojy(NULL)
     71{
     72ASSERT(nxBin>0 && nyBin>0 && xMin<xMax && yMin<yMax);
     73for(int_4 i=0;i<3;i++) for(int_4 j=0;j<3;j++) mOver[i][j]=0.;
     74Zero();
     75mB_s.H = NULL;
     76END_CONSTRUCTOR
     77}
     78
     79/*!
    6280  Constructeur par copie.
    6381*/
    6482Histo2D::Histo2D(const Histo2D& h)
    6583{
    66 int i,j;
    67 data = new float[h.nxy];
    68 memcpy(data, h.data, h.nxy*sizeof(float));
    69 
    70 err2 = NULL;
    71 if(h.err2) {
    72   err2 = new double[h.nxy];
    73   memcpy(err2, h.err2, h.nxy*sizeof(double));
     84int_4 i,j;
     85mData = new r_8[h.mNxy];
     86memcpy(mData, h.mData, h.mNxy*sizeof(r_8));
     87
     88mErr2 = NULL;
     89if(h.mErr2) {
     90  mErr2 = new r_8[h.mNxy];
     91  memcpy(mErr2, h.mErr2, h.mNxy*sizeof(r_8));
    7492}
    7593
    7694nHist = h.nHist; nEntries = h.nEntries;
    77 for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j]=h.over[i][j];
    78 nx = h.nx;  ny = h.ny;  nxy = h.nxy;
    79 xmin = h.xmin; xmax = h.xmax; ymin = h.ymin; ymax = h.ymax;
    80 wbinx = h.wbinx; wbiny = h.wbiny;
    81 b_s.H = NULL;
    82 
    83 hprojx = hprojy = NULL;
    84 if(h.hprojx) {
     95for(i=0;i<3;i++) for(j=0;j<3;j++) mOver[i][j]=h.mOver[i][j];
     96mNx = h.mNx;  mNy = h.mNy;  mNxy = h.mNxy;
     97mXmin = h.mXmin; mXmax = h.mXmax; mYmin = h.mYmin; mYmax = h.mYmax;
     98mWBinx = h.mWBinx; mWBiny = h.mWBiny;
     99mB_s.H = NULL;
     100
     101mHprojx = mHprojy = NULL;
     102if(h.mHprojx) {
    85103  SetProjX();
    86   *hprojx = *(h.hprojx);
    87 }
    88 if(h.hprojy) {
     104  *mHprojx = *(h.mHprojx);
     105}
     106if(h.mHprojy) {
    89107  SetProjY();
    90   *hprojy = *(h.hprojy);
    91 }
    92 
    93 int nb;
    94 float min,max;
     108  *mHprojy = *(h.mHprojy);
     109}
     110
     111int_4 nb;
     112r_8 min,max;
    95113nb = h.NSliX();
    96114if(nb>0) {
     
    130148*/
    131149Histo2D::Histo2D()
    132       : data(NULL), err2(NULL)
     150      : mData(NULL), mErr2(NULL)
    133151      , nHist(0), nEntries(0)
    134       , nx(0), ny(0), nxy(0)
    135       , xmin(0), xmax(0), ymin(0), ymax(0)
    136       , wbinx(0), wbiny(0)
    137       , hprojx(NULL), hprojy(NULL)
    138 {
    139 for(int i=0;i<3;i++) for(int j=0;j<3;j++) over[i][j]=0.;
    140 b_s.H = NULL;
     152      , mNx(0), mNy(0), mNxy(0)
     153      , mXmin(0), mXmax(0), mYmin(0), mYmax(0)
     154      , mWBinx(0), mWBiny(0)
     155      , mHprojx(NULL), mHprojy(NULL)
     156{
     157for(int_4 i=0;i<3;i++) for(int_4 j=0;j<3;j++) mOver[i][j]=0.;
     158mB_s.H = NULL;
    141159END_CONSTRUCTOR
    142160}
     
    148166void Histo2D::Delete()
    149167{
    150   if( data != NULL ) { delete[] data; data = NULL;}
    151 
    152   if( err2 != NULL ) { delete[] err2; err2 = NULL;}
     168  if( mData != NULL ) { delete[] mData; mData = NULL;}
     169
     170  if( mErr2 != NULL ) { delete[] mErr2; mErr2 = NULL;}
    153171
    154172  DelProj();
     
    162180  nHist = 0;
    163181  nEntries = 0;
    164   nx = 0; ny = 0; nxy = 0;
    165   xmin = 0; xmax = 0; ymin = 0; ymax = 0;
    166   wbinx = 0; wbiny = 0;
    167   for(int i=0;i<3;i++) for(int j=0;j<3;j++) over[i][j]=0.;
    168   b_s.H = NULL;
     182  mNx = 0; mNy = 0; mNxy = 0;
     183  mXmin = 0; mXmax = 0; mYmin = 0; mYmax = 0;
     184  mWBinx = 0; mWBiny = 0;
     185  for(int_4 i=0;i<3;i++) for(int_4 j=0;j<3;j++) mOver[i][j]=0.;
     186  mB_s.H = NULL;
    169187}
    170188
     
    184202{
    185203  nHist = nEntries = 0;
    186   for(int i=0;i<3;i++) for(int j=0;j<3;j++) over[i][j]=0.;
    187   memset(data, 0, nxy*sizeof(float));
    188   memset(over, 0, 9*sizeof(float));
    189 
    190   if( err2 != NULL ) memset(err2, 0, nxy*sizeof(double));
     204  for(int_4 i=0;i<3;i++) for(int_4 j=0;j<3;j++) mOver[i][j]=0.;
     205  memset(mData, 0, mNxy*sizeof(r_8));
     206  memset(mOver, 0, 9*sizeof(r_8));
     207
     208  if( mErr2 != NULL ) memset(mErr2, 0, mNxy*sizeof(r_8));
    191209
    192210  ZeroProj();
     
    205223void Histo2D::Errors()
    206224{
    207  if( nxy > 0 ) {
    208    if(err2==NULL) err2 = new double[nxy];
    209    memset(err2, 0, nxy*sizeof(double));
     225 if( mNxy > 0 ) {
     226   if(mErr2==NULL) mErr2 = new r_8[mNxy];
     227   memset(mErr2, 0, mNxy*sizeof(r_8));
    210228 }
    211229}
     
    217235Histo2D& Histo2D::operator = (const Histo2D& h)
    218236{
    219   int i,j,nb;
    220   float min,max;
     237  int_4 i,j,nb;
     238  r_8 min,max;
    221239
    222240  if(this == &h) return *this;
    223   if( h.nxy > nxy ) Delete();
    224   if(!data) data = new float[h.nxy];
    225   if( !h.err2 && err2 ) { delete [] err2; err2=NULL;}
    226   if( h.err2 && !err2 ) err2 = new double[h.nxy];
    227 
    228   for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] = h.over[i][j];
     241  if( h.mNxy > mNxy ) Delete();
     242  if(!mData) mData = new r_8[h.mNxy];
     243  if( !h.mErr2 && mErr2 ) { delete [] mErr2; mErr2=NULL;}
     244  if( h.mErr2 && !mErr2 ) mErr2 = new r_8[h.mNxy];
     245
     246  for(i=0;i<3;i++) for(j=0;j<3;j++) mOver[i][j] = h.mOver[i][j];
    229247  nHist = h.nHist;
    230248  nEntries = h.nEntries;
    231   nx = h.nx;  ny = h.ny;  nxy = h.nxy;
    232   xmin = h.xmin; xmax = h.xmax; wbinx = h.wbinx;
    233   ymin = h.ymin; ymax = h.ymax; wbiny = h.wbiny;
     249  mNx = h.mNx;  mNy = h.mNy;  mNxy = h.mNxy;
     250  mXmin = h.mXmin; mXmax = h.mXmax; mWBinx = h.mWBinx;
     251  mYmin = h.mYmin; mYmax = h.mYmax; mWBiny = h.mWBiny;
    234252 
    235   memcpy(data, h.data, nxy*sizeof(float));
    236   if(err2) memcpy(err2, h.err2, nxy*sizeof(double));
     253  memcpy(mData, h.mData, mNxy*sizeof(r_8));
     254  if(mErr2) memcpy(mErr2, h.mErr2, mNxy*sizeof(r_8));
    237255
    238256  DelProjX();
    239   if(h.hprojx) {
     257  if(h.mHprojx) {
    240258    SetProjX();
    241     *hprojx = *(h.hprojx);
     259    *mHprojx = *(h.mHprojx);
    242260  }
    243261  DelProjY();
    244   if(h.hprojy) {
     262  if(h.mHprojy) {
    245263    SetProjY();
    246     *hprojy = *(h.hprojy);
     264    *mHprojy = *(h.mHprojy);
    247265  }
    248266
     
    288306  Operateur H *= b
    289307*/
    290 Histo2D& Histo2D::operator *= (double b)
    291 {
    292 int i,j;
    293 double b2 = b*b;
    294 for(i=0;i<nxy;i++) {
    295   data[i] *= b;
    296   if(err2) err2[i] *= b2;
    297 }
    298 for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] *= b;
     308Histo2D& Histo2D::operator *= (r_8 b)
     309{
     310int_4 i,j;
     311r_8 b2 = b*b;
     312for(i=0;i<mNxy;i++) {
     313  mData[i] *= b;
     314  if(mErr2) mErr2[i] *= b2;
     315}
     316for(i=0;i<3;i++) for(j=0;j<3;j++) mOver[i][j] *= b;
    299317nHist *= b;
    300318
    301 if(hprojx) *hprojx *= b;
    302 if(hprojy) *hprojy *= b;
     319if(mHprojx) *mHprojx *= b;
     320if(mHprojy) *mHprojy *= b;
    303321if(NSliX()>0) for(i=0; i<NSliX();i++) *HSliX(i) *= b;
    304322if(NSliY()>0) for(i=0; i<NSliY();i++) *HSliY(i) *= b;
     
    312330  Operateur H /= b
    313331*/
    314 Histo2D& Histo2D::operator /= (double b)
    315 {
    316 int i,j;
     332Histo2D& Histo2D::operator /= (r_8 b)
     333{
     334int_4 i,j;
    317335if (b==0.) THROW(inconsistentErr);
    318 double b2 = b*b;
    319 for(i=0;i<nxy;i++) {
    320   data[i] /= b;
    321   if(err2) err2[i] /= b2;
    322 }
    323 for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] /= b;
     336r_8 b2 = b*b;
     337for(i=0;i<mNxy;i++) {
     338  mData[i] /= b;
     339  if(mErr2) mErr2[i] /= b2;
     340}
     341for(i=0;i<3;i++) for(j=0;j<3;j++) mOver[i][j] /= b;
    324342nHist /= b;
    325343
    326 if(hprojx) *hprojx /= b;
    327 if(hprojy) *hprojy /= b;
     344if(mHprojx) *mHprojx /= b;
     345if(mHprojy) *mHprojy /= b;
    328346if(NSliX()>0) for(i=0; i<NSliX();i++) *HSliX(i) /= b;
    329347if(NSliY()>0) for(i=0; i<NSliY();i++) *HSliY(i) /= b;
     
    337355  Operateur H += b
    338356*/
    339 Histo2D& Histo2D::operator += (double b)
    340 {
    341 int i,j;
    342 float min,max;
    343 for(i=0;i<nxy;i++) data[i] += b;
    344 for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] += b;
    345 nHist += nxy*b;
    346 
    347 if(hprojx) *hprojx += b*ny;
    348 if(hprojy) *hprojy += b*nx;
    349 if(NSliX()>0) for(i=0; i<NSliX();i++) *HSliX(i) += b*ny/NSliX();
    350 if(NSliY()>0) for(i=0; i<NSliY();i++) *HSliY(i) += b*nx/NSliY();
     357Histo2D& Histo2D::operator += (r_8 b)
     358{
     359int_4 i,j;
     360r_8 min,max;
     361for(i=0;i<mNxy;i++) mData[i] += b;
     362for(i=0;i<3;i++) for(j=0;j<3;j++) mOver[i][j] += b;
     363nHist += mNxy*b;
     364
     365if(mHprojx) *mHprojx += b*mNy;
     366if(mHprojy) *mHprojy += b*mNx;
     367if(NSliX()>0) for(i=0; i<NSliX();i++) *HSliX(i) += b*mNy/NSliX();
     368if(NSliY()>0) for(i=0; i<NSliY();i++) *HSliY(i) += b*mNx/NSliY();
    351369if(NBandX()>0) for(i=0; i<NBandX();i++) {
    352370  GetBandX(i,min,max);
    353   *HBandX(i) += b*(max-min)/(ymax-ymin)*ny;
     371  *HBandX(i) += b*(max-min)/(mYmax-mYmin)*mNy;
    354372}
    355373if(NBandY()>0) for(i=0; i<NBandY();i++) {
    356374  GetBandY(i,min,max);
    357   *HBandY(i) += b*(max-min)/(xmax-xmin)*nx;
     375  *HBandY(i) += b*(max-min)/(mXmax-mXmin)*mNx;
    358376}
    359377
     
    364382  Operateur H -= b
    365383*/
    366 Histo2D& Histo2D::operator -= (double b)
    367 {
    368 int i,j;
    369 float min,max;
    370 for(i=0;i<nxy;i++) data[i] -= b;
    371 for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] -= b;
    372 nHist -= nxy*b;
    373 
    374 if(hprojx) *hprojx -= b*ny;
    375 if(hprojy) *hprojy -= b*nx;
    376 if(NSliX()>0) for(i=0; i<NSliX();i++) *HSliX(i) -= b*ny/NSliX();
    377 if(NSliY()>0) for(i=0; i<NSliY();i++) *HSliY(i) -= b*nx/NSliY();
     384Histo2D& Histo2D::operator -= (r_8 b)
     385{
     386int_4 i,j;
     387r_8 min,max;
     388for(i=0;i<mNxy;i++) mData[i] -= b;
     389for(i=0;i<3;i++) for(j=0;j<3;j++) mOver[i][j] -= b;
     390nHist -= mNxy*b;
     391
     392if(mHprojx) *mHprojx -= b*mNy;
     393if(mHprojy) *mHprojy -= b*mNx;
     394if(NSliX()>0) for(i=0; i<NSliX();i++) *HSliX(i) -= b*mNy/NSliX();
     395if(NSliY()>0) for(i=0; i<NSliY();i++) *HSliY(i) -= b*mNx/NSliY();
    378396if(NBandX()>0) for(i=0; i<NBandX();i++) {
    379397  GetBandX(i,min,max);
    380   *HBandX(i) -= b*(max-min)/(ymax-ymin)*ny;
     398  *HBandX(i) -= b*(max-min)/(mYmax-mYmin)*mNy;
    381399}
    382400if(NBandY()>0) for(i=0; i<NBandY();i++) {
    383401  GetBandY(i,min,max);
    384   *HBandY(i) -= b*(max-min)/(xmax-xmin)*nx;
     402  *HBandY(i) -= b*(max-min)/(mXmax-mXmin)*mNx;
    385403}
    386404
     
    394412Histo2D& Histo2D::operator += (const Histo2D& a)
    395413{
    396 int i,j;
    397 if(nx!=a.nx || ny!=a.ny) THROW(sizeMismatchErr);
    398 for(i=0;i<nxy;i++) {
    399   data[i] += a.data[i];
    400   if(err2 && a.err2) err2[i] += a.err2[i];
    401 }
    402 for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] += a.over[i][j];
     414int_4 i,j;
     415if(mNx!=a.mNx || mNy!=a.mNy) THROW(sizeMismatchErr);
     416for(i=0;i<mNxy;i++) {
     417  mData[i] += a.mData[i];
     418  if(mErr2 && a.mErr2) mErr2[i] += a.mErr2[i];
     419}
     420for(i=0;i<3;i++) for(j=0;j<3;j++) mOver[i][j] += a.mOver[i][j];
    403421nHist += a.nHist;
    404422nEntries += a.nEntries;
    405423
    406 if(hprojx && a.hprojx) *hprojx += *(a.hprojx);
    407 if(hprojy && a.hprojy) *hprojy += *(a.hprojy);
     424if(mHprojx && a.mHprojx) *mHprojx += *(a.mHprojx);
     425if(mHprojy && a.mHprojy) *mHprojy += *(a.mHprojy);
    408426ZeroSliX();  ZeroSliY();
    409427ZeroBandX(); ZeroBandY();
     
    417435Histo2D& Histo2D::operator -= (const Histo2D& a)
    418436{
    419 int i,j;
    420 if(nx!=a.nx || ny!=a.ny) THROW(sizeMismatchErr);
    421 for(i=0;i<nxy;i++) {
    422   data[i] -= a.data[i];
    423   if(err2 && a.err2) err2[i] += a.err2[i];
    424 }
    425 for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] += a.over[i][j];
     437int_4 i,j;
     438if(mNx!=a.mNx || mNy!=a.mNy) THROW(sizeMismatchErr);
     439for(i=0;i<mNxy;i++) {
     440  mData[i] -= a.mData[i];
     441  if(mErr2 && a.mErr2) mErr2[i] += a.mErr2[i];
     442}
     443for(i=0;i<3;i++) for(j=0;j<3;j++) mOver[i][j] += a.mOver[i][j];
    426444nHist -= a.nHist;
    427445nEntries += a.nEntries;
    428446
    429 if(hprojx && a.hprojx) *hprojx -= *(a.hprojx);
    430 if(hprojy && a.hprojy) *hprojy -= *(a.hprojy);
     447if(mHprojx && a.mHprojx) *mHprojx -= *(a.mHprojx);
     448if(mHprojy && a.mHprojy) *mHprojy -= *(a.mHprojy);
    431449ZeroSliX();  ZeroSliY();
    432450ZeroBandX(); ZeroBandY();
     
    440458Histo2D& Histo2D::operator *= (const Histo2D& a)
    441459{
    442 int i,j;
    443 if(nx!=a.nx || ny!=a.ny) THROW(sizeMismatchErr);
     460int_4 i,j;
     461if(mNx!=a.mNx || mNy!=a.mNy) THROW(sizeMismatchErr);
    444462nHist = 0.;
    445 for(i=0;i<nxy;i++) {
    446   if(err2 && a.err2)
    447       err2[i] = a.data[i]*a.data[i]*err2[i] + data[i]*data[i]*a.err2[i];
    448   data[i] *= a.data[i];
    449   nHist += data[i];
    450 }
    451 for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] *= a.over[i][j];
     463for(i=0;i<mNxy;i++) {
     464  if(mErr2 && a.mErr2)
     465      mErr2[i] = a.mData[i]*a.mData[i]*mErr2[i] + mData[i]*mData[i]*a.mErr2[i];
     466  mData[i] *= a.mData[i];
     467  nHist += mData[i];
     468}
     469for(i=0;i<3;i++) for(j=0;j<3;j++) mOver[i][j] *= a.mOver[i][j];
    452470nEntries += a.nEntries;
    453471
    454 if(hprojx && a.hprojx) *hprojx *= *(a.hprojx);
    455 if(hprojy && a.hprojy) *hprojy *= *(a.hprojy);
     472if(mHprojx && a.mHprojx) *mHprojx *= *(a.mHprojx);
     473if(mHprojy && a.mHprojy) *mHprojy *= *(a.mHprojy);
    456474ZeroSliX();  ZeroSliY();
    457475ZeroBandX(); ZeroBandY();
     
    465483Histo2D& Histo2D::operator /= (const Histo2D& a)
    466484{
    467 int i,j;
    468 if(nx!=a.nx || ny!=a.ny) THROW(sizeMismatchErr);
     485int_4 i,j;
     486if(mNx!=a.mNx || mNy!=a.mNy) THROW(sizeMismatchErr);
    469487nHist = 0.;
    470 for(i=0;i<nxy;i++) {
    471   if(a.data[i]==0.) {
    472     data[i]=0.;
    473     if(err2) err2[i]=0.;
     488for(i=0;i<mNxy;i++) {
     489  if(a.mData[i]==0.) {
     490    mData[i]=0.;
     491    if(mErr2) mErr2[i]=0.;
    474492    continue;
    475493  }
    476   if(err2 && a.err2)
    477       err2[i] = (err2[i] + data[i]/a.data[i]*data[i]/a.data[i]*a.err2[i])
    478                 /(a.data[i]*a.data[i]);
    479   data[i] /= a.data[i];
    480   nHist += data[i];
     494  if(mErr2 && a.mErr2)
     495      mErr2[i] = (mErr2[i] + mData[i]/a.mData[i]*mData[i]/a.mData[i]*a.mErr2[i])
     496                /(a.mData[i]*a.mData[i]);
     497  mData[i] /= a.mData[i];
     498  nHist += mData[i];
    481499}
    482500for(i=0;i<3;i++) for(j=0;j<3;j++)
    483   if(a.over[i][j]!=0.) over[i][j] *= a.over[i][j]; else over[i][j] = 0.;
     501  if(a.mOver[i][j]!=0.) mOver[i][j] *= a.mOver[i][j]; else mOver[i][j] = 0.;
    484502nEntries += a.nEntries;
    485503
    486 if(hprojx && a.hprojx) *hprojx /= *(a.hprojx);
    487 if(hprojy && a.hprojy) *hprojy /= *(a.hprojy);
     504if(mHprojx && a.mHprojx) *mHprojx /= *(a.mHprojx);
     505if(mHprojy && a.mHprojy) *mHprojy /= *(a.mHprojy);
    488506ZeroSliX();  ZeroSliY();
    489507ZeroBandX(); ZeroBandY();
     
    498516void Histo2D::GetXCoor(TVector<r_8> &v)
    499517{
    500 float x,y;
    501 v.Realloc(nx);
    502 for(int i=0;i<nx;i++) {BinLowEdge(i,0,x,y); v(i) = x;}
     518r_8 x,y;
     519v.Realloc(mNx);
     520for(int_4 i=0;i<mNx;i++) {BinLowEdge(i,0,x,y); v(i) = x;}
    503521return;
    504522}
     
    509527void Histo2D::GetYCoor(TVector<r_8> &v)
    510528{
    511 float x,y;
    512 v.Realloc(ny);
    513 for(int i=0;i<ny;i++) {BinLowEdge(0,i,x,y); v(i) = y;}
     529r_8 x,y;
     530v.Realloc(mNy);
     531for(int_4 i=0;i<mNy;i++) {BinLowEdge(0,i,x,y); v(i) = y;}
    514532return;
    515533}
     
    520538void Histo2D::GetValue(TMatrix<r_8> &v)
    521539{
    522 v.Realloc(nx,ny);
    523 for(int i=0;i<nx;i++)
    524   for(int j=0;j<ny;j++) v(i,j) = (*this)(i,j);
     540v.Realloc(mNx,mNy);
     541for(int_4 i=0;i<mNx;i++)
     542  for(int_4 j=0;j<mNy;j++) v(i,j) = (*this)(i,j);
    525543return;
    526544}
     
    531549void Histo2D::GetError2(TMatrix<r_8> &v)
    532550{
    533 int i,j;
    534 v.Realloc(nx,ny);
    535 if(!err2)
    536   {for(i=0;i<nx;i++) for(j=0;j<ny;j++) v(i,j) = 0.; return;}
    537 for(i=0;i<nx;i++) for(j=0;j<ny;j++) v(i,j) = Error2(i,j);
     551int_4 i,j;
     552v.Realloc(mNx,mNy);
     553if(!mErr2)
     554  {for(i=0;i<mNx;i++) for(j=0;j<mNy;j++) v(i,j) = 0.; return;}
     555for(i=0;i<mNx;i++) for(j=0;j<mNy;j++) v(i,j) = Error2(i,j);
    538556return;
    539557}
     
    544562void Histo2D::GetError(TMatrix<r_8> &v)
    545563{
    546 int i,j;
    547 v.Realloc(nx,ny);
    548 if(!err2)
    549   {for(i=0;i<nx;i++) for(j=0;j<ny;j++) v(i,j) = 0.; return;}
    550 for(i=0;i<nx;i++) for(j=0;j<ny;j++) v(i,j) = Error(i,j);
     564int_4 i,j;
     565v.Realloc(mNx,mNy);
     566if(!mErr2)
     567  {for(i=0;i<mNx;i++) for(j=0;j<mNy;j++) v(i,j) = 0.; return;}
     568for(i=0;i<mNx;i++) for(j=0;j<mNy;j++) v(i,j) = Error(i,j);
    551569return;
    552570}
     
    556574  Remplissage du contenu de l'histo avec les valeurs d'un tableau.
    557575*/
    558 void Histo2D::PutValue(TMatrix<r_8> &v, int ierr)
    559 {
    560 int i,j;
    561 //if(v.NRows()!=(uint_4)nx || v.NCol()!=(uint_4)ny) THROW(sizeMismatchErr);
    562 uint_4 nnx = (v.NRows()<(uint_4)nx)? v.NRows(): (uint_4)nx;
    563 uint_4 nny = (v.NCol() <(uint_4)ny)? v.NCol() : (uint_4)ny;
    564 if(nnx>0 && nny>0) for(i=0;i<nnx;i++) for(j=0;j<nny;j++) {
     576void Histo2D::PutValue(TMatrix<r_8> &v, int_4 ierr)
     577{
     578//if(v.NRows()!=(uint_4)mNx || v.NCol()!=(uint_4)mNy) THROW(sizeMismatchErr);
     579uint_4 nnx = (v.NRows()<(uint_4)mNx)? v.NRows(): (uint_4)mNx;
     580uint_4 nny = (v.NCol() <(uint_4)mNy)? v.NCol() : (uint_4)mNy;
     581if(nnx>0 && nny>0) for(uint_4 i=0;i<nnx;i++) for(uint_4 j=0;j<nny;j++) {
    565582  (*this)(i,j) = v(i,j);
    566   if(err2 && ierr) Error2(i,j) = fabs(v(i,j));
     583  if(mErr2 && ierr) Error2(i,j) = fabs(v(i,j));
    567584}
    568585return;
     
    572589  Addition du contenu de l'histo avec les valeurs d'un tableau.
    573590*/
    574 void Histo2D::PutValueAdd(TMatrix<r_8> &v, int ierr)
    575 {
    576 int i,j;
    577 //if(v.NRows()!=(uint_4)nx || v.NCol()!=(uint_4)ny) THROW(sizeMismatchErr);
    578 uint_4 nnx = (v.NRows()<(uint_4)nx)? v.NRows(): (uint_4)nx;
    579 uint_4 nny = (v.NCol() <(uint_4)ny)? v.NCol() : (uint_4)ny;
    580 if(nnx>0 && nny>0) for(i=0;i<nnx;i++) for(j=0;j<nny;j++) {
     591void Histo2D::PutValueAdd(TMatrix<r_8> &v, int_4 ierr)
     592{
     593//if(v.NRows()!=(uint_4)mNx || v.NCol()!=(uint_4)mNy) THROW(sizeMismatchErr);
     594uint_4 nnx = (v.NRows()<(uint_4)mNx)? v.NRows(): (uint_4)mNx;
     595uint_4 nny = (v.NCol() <(uint_4)mNy)? v.NCol() : (uint_4)mNy;
     596if(nnx>0 && nny>0) for(uint_4 i=0;i<nnx;i++) for(uint_4 j=0;j<nny;j++) {
    581597  (*this)(i,j) += v(i,j);
    582   if(err2 && ierr) Error2(i,j) += fabs(v(i,j));
     598  if(mErr2 && ierr) Error2(i,j) += fabs(v(i,j));
    583599}
    584600return;
     
    591607void Histo2D::PutError2(TMatrix<r_8> &v)
    592608{
    593 int i,j;
    594 //if(v.NRows()!=(uint_4)nx || v.NCol()!=(uint_4)ny) THROW(sizeMismatchErr);
    595 uint_4 nnx = (v.NRows()<(uint_4)nx)? v.NRows(): (uint_4)nx;
    596 uint_4 nny = (v.NCol() <(uint_4)ny)? v.NCol() : (uint_4)ny;
     609//if(v.NRows()!=(uint_4)mNx || v.NCol()!=(uint_4)mNy) THROW(sizeMismatchErr);
     610uint_4 nnx = (v.NRows()<(uint_4)mNx)? v.NRows(): (uint_4)mNx;
     611uint_4 nny = (v.NCol() <(uint_4)mNy)? v.NCol() : (uint_4)mNy;
    597612if(nnx>0 && nny>0) {
    598   if(!err2) Errors();
    599   for(i=0;i<nnx;i++) for(j=0;j<nny;j++) Error2(i,j) = v(i,j);
     613  if(!mErr2) Errors();
     614  for(uint_4 i=0;i<nnx;i++) for(uint_4 j=0;j<nny;j++) Error2(i,j) = v(i,j);
    600615}
    601616return;
     
    608623void Histo2D::PutError2Add(TMatrix<r_8> &v)
    609624{
    610 int i,j;
    611 //if(v.NRows()!=(uint_4)nx || v.NCol()!=(uint_4)ny) THROW(sizeMismatchErr);
    612 uint_4 nnx = (v.NRows()<(uint_4)nx)? v.NRows(): (uint_4)nx;
    613 uint_4 nny = (v.NCol() <(uint_4)ny)? v.NCol() : (uint_4)ny;
     625//if(v.NRows()!=(uint_4)mNx || v.NCol()!=(uint_4)mNy) THROW(sizeMismatchErr);
     626uint_4 nnx = (v.NRows()<(uint_4)mNx)? v.NRows(): (uint_4)mNx;
     627uint_4 nny = (v.NCol() <(uint_4)mNy)? v.NCol() : (uint_4)mNy;
    614628if(nnx>0 && nny>0) {
    615   if(!err2) Errors();
    616   for(i=0;i<nnx;i++) for(j=0;j<nny;j++)
     629  if(!mErr2) Errors();
     630  for(uint_4 i=0;i<nnx;i++) for(uint_4 j=0;j<nny;j++)
    617631          if(v(i,j)>0.) Error2(i,j) += v(i,j);
    618632}
     
    625639void Histo2D::PutError(TMatrix<r_8> &v)
    626640{
    627 int i,j;
    628 //if(v.NRows()!=(uint_4)nx || v.NCol()!=(uint_4)ny) THROW(sizeMismatchErr);
    629 uint_4 nnx = (v.NRows()<(uint_4)nx)? v.NRows(): (uint_4)nx;
    630 uint_4 nny = (v.NCol() <(uint_4)ny)? v.NCol() : (uint_4)ny;
     641//if(v.NRows()!=(uint_4)mNx || v.NCol()!=(uint_4)mNy) THROW(sizeMismatchErr);
     642uint_4 nnx = (v.NRows()<(uint_4)mNx)? v.NRows(): (uint_4)mNx;
     643uint_4 nny = (v.NCol() <(uint_4)mNy)? v.NCol() : (uint_4)mNy;
    631644if(nnx>0 && nny>0) {
    632   if(!err2) Errors();
    633   for(i=0;i<nnx;i++) for(j=0;j<nny;j++)
     645  if(!mErr2) Errors();
     646  for(uint_4 i=0;i<nnx;i++) for(uint_4 j=0;j<nny;j++)
    634647    if(v(i,j)>0.) Error2(i,j)=v(i,j)*v(i,j); else Error2(i,j)= -v(i,j)*v(i,j);
    635648}
     
    642655  Addition du contenu de l'histo pour x,y poids w.
    643656*/
    644 void Histo2D::Add(float x, float y, float w)
     657void Histo2D::Add(r_8 x, r_8 y, r_8 w)
    645658{
    646659list<bande_slice>::iterator it;
    647 int i,j;
     660int_4 i,j;
    648661FindBin(x,y,i,j);
    649662
    650 if( hprojx != NULL ) hprojx->Add(x,w);
    651 if( hprojy != NULL ) hprojy->Add(y,w);
    652 
    653 if(lbandx.size()>0)
    654   for( it = lbandx.begin(); it != lbandx.end(); it++)
     663if( mHprojx != NULL ) mHprojx->Add(x,w);
     664if( mHprojy != NULL ) mHprojy->Add(y,w);
     665
     666if(mLBandx.size()>0)
     667  for( it = mLBandx.begin(); it != mLBandx.end(); it++)
    655668    if( (*it).min <= y && y < (*it).max ) (*it).H->Add(x,w);
    656669
    657 if(lbandy.size()>0)
    658   for( it = lbandy.begin(); it != lbandy.end(); it++)
     670if(mLBandy.size()>0)
     671  for( it = mLBandy.begin(); it != mLBandy.end(); it++)
    659672    if( (*it).min <= x && x < (*it).max ) (*it).H->Add(y,w);
    660673
    661 if(lslix.size()>0)
    662   for( it = lslix.begin(); it != lslix.end(); it++)
     674if(mLSlix.size()>0)
     675  for( it = mLSlix.begin(); it != mLSlix.end(); it++)
    663676    if( (*it).min <= y && y < (*it).max ) (*it).H->Add(x,w);
    664677
    665 if(lsliy.size()>0)
    666   for( it = lsliy.begin(); it != lsliy.end(); it++)
     678if(mLSliy.size()>0)
     679  for( it = mLSliy.begin(); it != mLSliy.end(); it++)
    667680    if( (*it).min <= x && x < (*it).max ) (*it).H->Add(y,w);
    668681
    669 if( i<0 || i>=nx || j<0 || j>=ny ) {
    670   if(i<0) i=0; else if(i>=nx) i=2; else i=1;
    671   if(j<0) j=0; else if(j>=ny) j=2; else j=1;
    672   over[i][j] += w;
    673   over[1][1] += w;
     682if( i<0 || i>=mNx || j<0 || j>=mNy ) {
     683  if(i<0) i=0; else if(i>=mNx) i=2; else i=1;
     684  if(j<0) j=0; else if(j>=mNy) j=2; else j=1;
     685  mOver[i][j] += w;
     686  mOver[1][1] += w;
    674687  return;
    675688}
    676689
    677 data[j*nx+i] += w;
    678 if(err2!=NULL) err2[j*nx+i] += w*w;
     690mData[j*mNx+i] += w;
     691if(mErr2!=NULL) mErr2[j*mNx+i] += w*w;
    679692nHist += w;
    680693nEntries++;
     
    685698  Recherche du bin du maximum dans le pave [il,ih][jl,jh].
    686699*/
    687 void Histo2D::IJMax(int& imax,int& jmax,int il,int ih,int jl,int jh)
    688 {
    689 if( il > ih ) { il = 0; ih = nx-1; }
    690 if( jl > jh ) { jl = 0; jh = ny-1; }
     700void Histo2D::IJMax(int_4& imax,int_4& jmax,int_4 il,int_4 ih,int_4 jl,int_4 jh)
     701{
     702if( il > ih ) { il = 0; ih = mNx-1; }
     703if( jl > jh ) { jl = 0; jh = mNy-1; }
    691704if( il < 0 ) il = 0;
    692705if( jl < 0 ) jl = 0;
    693 if( ih >= nx ) ih = nx-1;
    694 if( jh >= ny ) jh = ny-1;
     706if( ih >= mNx ) ih = mNx-1;
     707if( jh >= mNy ) jh = mNy-1;
    695708
    696709imax = jmax = 0;
    697 if(nxy==1) return;
    698 
    699 float mx=(*this)(il,jl);
    700 for (int i=il; i<=ih; i++)
    701    for (int j=jl; j<=jh; j++)
     710if(mNxy==1) return;
     711
     712r_8 mx=(*this)(il,jl);
     713for (int_4 i=il; i<=ih; i++)
     714   for (int_4 j=jl; j<=jh; j++)
    702715      if ((*this)(i,j)>mx) {imax = i; jmax = j; mx=(*this)(i,j);}
    703716}
     
    706719  Recherche du bin du minimum dans le pave [il,ih][jl,jh].
    707720*/
    708 void Histo2D::IJMin(int& imax,int& jmax,int il,int ih,int jl,int jh)
    709 {
    710 if( il > ih ) { il = 0; ih = nx-1; }
    711 if( jl > jh ) { jl = 0; jh = ny-1; }
     721void Histo2D::IJMin(int_4& imax,int_4& jmax,int_4 il,int_4 ih,int_4 jl,int_4 jh)
     722{
     723if( il > ih ) { il = 0; ih = mNx-1; }
     724if( jl > jh ) { jl = 0; jh = mNy-1; }
    712725if( il < 0 ) il = 0;
    713726if( jl < 0 ) jl = 0;
    714 if( ih >= nx ) ih = nx-1;
    715 if( jh >= ny ) jh = ny-1;
     727if( ih >= mNx ) ih = mNx-1;
     728if( jh >= mNy ) jh = mNy-1;
    716729
    717730imax = jmax = 0;
    718 if(nxy==1) return;
    719 
    720 float mx=(*this)(il,jl);
    721 for (int i=il; i<=ih; i++)
    722    for (int j=jl; j<=jh; j++)
     731if(mNxy==1) return;
     732
     733r_8 mx=(*this)(il,jl);
     734for (int_4 i=il; i<=ih; i++)
     735   for (int_4 j=jl; j<=jh; j++)
    723736      if ((*this)(i,j)<mx) {imax = i; jmax = j; mx=(*this)(i,j);}
    724737}
     
    728741  Recherche du maximum dans le pave [il,ih][jl,jh].
    729742*/
    730 float Histo2D::VMax(int il,int ih,int jl,int jh) const
    731 {
    732 if( il > ih ) { il = 0; ih = nx-1; }
    733 if( jl > jh ) { jl = 0; jh = ny-1; }
     743r_8 Histo2D::VMax(int_4 il,int_4 ih,int_4 jl,int_4 jh) const
     744{
     745if( il > ih ) { il = 0; ih = mNx-1; }
     746if( jl > jh ) { jl = 0; jh = mNy-1; }
    734747if( il < 0 ) il = 0;
    735748if( jl < 0 ) jl = 0;
    736 if( ih >= nx ) ih = nx-1;
    737 if( jh >= ny ) jh = ny-1;
    738 
    739 float mx=(*this)(il,jl);
    740 if(nxy==1) return mx;
    741 for (int i=il; i<=ih; i++)
    742    for (int j=jl; j<=jh; j++)
     749if( ih >= mNx ) ih = mNx-1;
     750if( jh >= mNy ) jh = mNy-1;
     751
     752r_8 mx=(*this)(il,jl);
     753if(mNxy==1) return mx;
     754for (int_4 i=il; i<=ih; i++)
     755   for (int_4 j=jl; j<=jh; j++)
    743756      if ((*this)(i,j)>mx) mx=(*this)(i,j);
    744757return mx;
     
    748761  Recherche du minimum dans le pave [il,ih][jl,jh].
    749762*/
    750 float Histo2D::VMin(int il,int ih,int jl,int jh) const
    751 {
    752 if( il > ih ) { il = 0; ih = nx-1; }
    753 if( jl > jh ) { jl = 0; jh = ny-1; }
     763r_8 Histo2D::VMin(int_4 il,int_4 ih,int_4 jl,int_4 jh) const
     764{
     765if( il > ih ) { il = 0; ih = mNx-1; }
     766if( jl > jh ) { jl = 0; jh = mNy-1; }
    754767if( il < 0 ) il = 0;
    755768if( jl < 0 ) jl = 0;
    756 if( ih >= nx ) ih = nx-1;
    757 if( jh >= ny ) jh = ny-1;
    758 
    759 float mx=(*this)(il,jl);
    760 if(nxy==1) return mx;
    761 for (int i=il; i<=ih; i++)
    762    for (int j=jl; j<=jh; j++)
     769if( ih >= mNx ) ih = mNx-1;
     770if( jh >= mNy ) jh = mNy-1;
     771
     772r_8 mx=(*this)(il,jl);
     773if(mNxy==1) return mx;
     774for (int_4 i=il; i<=ih; i++)
     775   for (int_4 j=jl; j<=jh; j++)
    763776      if ((*this)(i,j)<mx) mx=(*this)(i,j);
    764777return mx;
     
    769782  Renvoie les under.overflow dans les 8 quadrants.
    770783  \verbatim
    771      over[3][3]:        20 | 21 | 22
     784     mOver[3][3]:       20 | 21 | 22
    772785                           |    |
    773786                       --------------
     
    780793  \endverbatim
    781794*/
    782 float Histo2D::NOver(int i,int j) const
    783 {
    784 if( i < 0 || i>=3 || j < 0 || j>=3 ) return over[1][1];
    785 return over[i][j];
     795r_8 Histo2D::NOver(int_4 i,int_4 j) const
     796{
     797if( i < 0 || i>=3 || j < 0 || j>=3 ) return mOver[1][1];
     798return mOver[i][j];
    786799}
    787800
     
    791804  Retourne le nombre de bins non-nuls.
    792805*/
    793 int Histo2D::BinNonNul() const
    794 {
    795 int non=0;
    796 for (int i=0;i<nxy;i++) if( data[i] != 0. ) non++;
     806int_4 Histo2D::BinNonNul() const
     807{
     808int_4 non=0;
     809for (int_4 i=0;i<mNxy;i++) if( mData[i] != 0. ) non++;
    797810return non;
    798811}
     
    801814  Retourne le nombre de bins avec erreurs non-nulles.
    802815*/
    803 int Histo2D::ErrNonNul() const
    804 {
    805 if(err2==NULL) return -1;
    806 int non=0;
    807 for (int i=0;i<nxy;i++) if( err2[i] != 0. ) non++;
     816int_4 Histo2D::ErrNonNul() const
     817{
     818if(mErr2==NULL) return -1;
     819int_4 non=0;
     820for (int_4 i=0;i<mNxy;i++) if( mErr2[i] != 0. ) non++;
    808821return non;
    809822}
     
    813826  Idem EstimeMax(int...) mais retourne x,y.
    814827*/
    815 int Histo2D::EstimeMax(float& xm,float& ym,int SzPav
    816                       ,int il,int ih,int jl,int jh)
    817 {
    818 int im,jm;
     828int_4 Histo2D::EstimeMax(r_8& xm,r_8& ym,int_4 SzPav
     829                      ,int_4 il,int_4 ih,int_4 jl,int_4 jh)
     830{
     831int_4 im,jm;
    819832IJMax(im,jm,il,ih,jl,jh);
    820833return EstimeMax(im,jm,xm,ym,SzPav);
     
    833846  \endverbatim
    834847*/
    835 int Histo2D::EstimeMax(int im,int jm,float& xm,float& ym,int SzPav)
     848int_4 Histo2D::EstimeMax(int_4 im,int_4 jm,r_8& xm,r_8& ym,int_4 SzPav)
    836849{
    837850xm = ym = 0;
    838851if( SzPav <= 0 ) return -1;
    839 if( im < 0 || im >= nx ) return -1;
    840 if( jm < 0 || jm >= ny ) return -1;
     852if( im < 0 || im >= mNx ) return -1;
     853if( jm < 0 || jm >= mNy ) return -1;
    841854
    842855if( SzPav%2 == 0 ) SzPav++;
    843856SzPav = (SzPav-1)/2;
    844857
    845 int rc = 0;
    846 double dxm = 0, dym = 0, wx = 0;
    847 for(int i=im-SzPav;i<=im+SzPav;i++) {
    848   if( i<0 || i>= nx ) {rc=1; continue;}
    849   for(int j=jm-SzPav;j<=jm+SzPav;j++) {
    850     if( j<0 || j>= ny ) {rc=1; continue;}
    851     float x,y;
     858int_4 rc = 0;
     859r_8 dxm = 0, dym = 0, wx = 0;
     860for(int_4 i=im-SzPav;i<=im+SzPav;i++) {
     861  if( i<0 || i>= mNx ) {rc=1; continue;}
     862  for(int_4 j=jm-SzPav;j<=jm+SzPav;j++) {
     863    if( j<0 || j>= mNy ) {rc=1; continue;}
     864    r_8 x,y;
    852865    BinCenter(i,j,x,y);
    853866    dxm += x * (*this)(i,j);
     
    888901  \endverbatim
    889902*/
    890 int Histo2D::FindMax(int& im,int& jm,int SzPav,float Dz
    891                     ,int il,int ih,int jl,int jh)
    892 {
    893 if( il > ih ) { il = 0; ih = nx-1; }
    894 if( jl > jh ) { jl = 0; jh = ny-1; }
     903int_4 Histo2D::FindMax(int_4& im,int_4& jm,int_4 SzPav,r_8 Dz
     904                    ,int_4 il,int_4 ih,int_4 jl,int_4 jh)
     905{
     906if( il > ih ) { il = 0; ih = mNx-1; }
     907if( jl > jh ) { jl = 0; jh = mNy-1; }
    895908if( il < 0 ) il = 0;
    896909if( jl < 0 ) jl = 0;
    897 if( ih >= nx ) ih = nx-1;
    898 if( jh >= ny ) jh = ny-1;
     910if( ih >= mNx ) ih = mNx-1;
     911if( jh >= mNy ) jh = mNy-1;
    899912if( SzPav < 0 ) SzPav = 0;
    900913  else { if( SzPav%2 == 0 ) SzPav++; SzPav = (SzPav-1)/2;}
    901914if( Dz < 0 ) Dz = 0.;
    902 float max = VMax(il,ih,jl,jh) - Dz;
    903 int nmax = 0;
    904 float sumx = -MAXFLOAT;
    905 for(int i=il;i<=ih;i++) for(int j=jl;j<=jh;j++) {
     915r_8 max = VMax(il,ih,jl,jh) - Dz;
     916int_4 nmax = 0;
     917r_8 sumx = -1.e20;
     918for(int_4 i=il;i<=ih;i++) for(int_4 j=jl;j<=jh;j++) {
    906919  if( (*this)(i,j) < max) continue;
    907920  nmax++;
    908   float sum = 0.;
    909   for(int ii=i-SzPav;ii<=i+SzPav;ii++) {
    910     if( ii<0 || ii >= nx ) continue;
    911     for(int jj=j-SzPav;jj<=j+SzPav;jj++) {
    912       if( jj<0 || jj >= ny ) continue;
     921  r_8 sum = 0.;
     922  for(int_4 ii=i-SzPav;ii<=i+SzPav;ii++) {
     923    if( ii<0 || ii >= mNx ) continue;
     924    for(int_4 jj=j-SzPav;jj<=j+SzPav;jj++) {
     925      if( jj<0 || jj >= mNy ) continue;
    913926      sum += (*this)(ii,jj);
    914927    }
    915928  }
    916   if( sum > sumx ) { im = i; jm = j; sumx = sum;}
     929  if(nmax==1 || sum>sumx) {im=i; jm=j; sumx=sum;}
    917930}
    918931if( nmax <= 0 ) { IJMax(im,jm,il,ih,jl,jh); return 1;}
     
    943956  \endverbatim
    944957*/
    945 int  Histo2D::Fit(GeneralFit& gfit,unsigned short typ_err)
     958int_4  Histo2D::Fit(GeneralFit& gfit,unsigned short typ_err)
    946959{
    947960if(NBinX()*NBinY()<=0) return -1000;
     
    950963GeneralFitData mydata(2,NBinX()*NBinY());
    951964
    952 for(int i=0;i<NBinX();i++) for(int j=0;j<NBinY();j++) {
    953   float x,y;
     965for(int_4 i=0;i<NBinX();i++) for(int_4 j=0;j<NBinY();j++) {
     966  r_8 x,y;
    954967  BinCenter(i,j,x,y);
    955   double f = (double) (*this)(i,j);
    956   double saf = sqrt(fabs(f)); if(saf<1.) saf=1.;
    957   double e=0.;
     968  r_8 f = (*this)(i,j);
     969  r_8 saf = sqrt(fabs(f)); if(saf<1.) saf=1.;
     970  r_8 e=0.;
    958971  if(typ_err==0)      {if(HasErrors()) e=Error(i,j); else e=1.;}
    959972  else if(typ_err==1) {if(HasErrors()) e=Error(i,j); else e=saf;}
     
    962975  else if(typ_err==4) e=(f==0.)?0.:1.;
    963976  else if(typ_err==5) e=(f==0.)?0.:saf;
    964   mydata.AddData2((double) x,(double) y,f,e);
     977  mydata.AddData2(x,y,f,e);
    965978}
    966979
     
    982995TVector<r_8> par = gfit.GetParm();
    983996Histo2D h2(*this);
    984 for(int i=0;i<NBinX();i++) for(int j=0;j<NBinY();j++) {
    985   float xc,yc;
     997for(int_4 i=0;i<NBinX();i++) for(int_4 j=0;j<NBinY();j++) {
     998  r_8 xc,yc;
    986999  BinCenter(i,j,xc,yc);
    987   double x[2] = {(double)xc,(double)yc};
    988   h2(i,j) -= (float) f->Value(x,par.Data());
     1000  r_8 x[2] = {xc,yc};
     1001  h2(i,j) -= f->Value(x,par.Data());
    9891002}
    9901003return h2;
     
    10031016TVector<r_8> par = gfit.GetParm();
    10041017Histo2D h2(*this);
    1005 for(int i=0;i<NBinX();i++) for(int j=0;j<NBinY();j++) {
    1006   float xc,yc;
     1018for(int_4 i=0;i<NBinX();i++) for(int_4 j=0;j<NBinY();j++) {
     1019  r_8 xc,yc;
    10071020  BinCenter(i,j,xc,yc);
    1008   double x[2] = {(double)xc,(double)yc};
    1009   h2(i,j) = (float) f->Value(x,par.Data());
     1021  r_8 x[2] = {xc,yc};
     1022  h2(i,j) = f->Value(x,par.Data());
    10101023}
    10111024return h2;
     
    10201033printf("~Histo::Print    nHist=%g nEntries=%d",nHist,nEntries);
    10211034if(HasErrors()) printf("  Errors=1\n"); else printf("  Errors=0\n");
    1022 printf("over: [ %g %g %g // %g %g %g  // %g %g %g ]\n"
    1023       ,over[2][0],over[2][1],over[2][2]
    1024       ,over[1][0],over[1][1],over[1][2]
    1025       ,over[0][0],over[0][1],over[0][2]);
    1026 printf("  nx=%d xmin=%g xmax=%g binx=%g  ",nx,xmin,xmax,wbinx);
    1027 printf("  ny=%d ymin=%g ymax=%g biny=%g\n",ny,ymin,ymax,wbiny);
     1035printf("mOver: [ %g %g %g // %g %g %g  // %g %g %g ]\n"
     1036      ,mOver[2][0],mOver[2][1],mOver[2][2]
     1037      ,mOver[1][0],mOver[1][1],mOver[1][2]
     1038      ,mOver[0][0],mOver[0][1],mOver[0][2]);
     1039printf("  nx=%d xmin=%g xmax=%g binx=%g  ",mNx,mXmin,mXmax,mWBinx);
     1040printf("  ny=%d ymin=%g ymax=%g biny=%g\n",mNy,mYmin,mYmax,mWBiny);
    10281041}
    10291042
     
    10381051  \endverbatim
    10391052*/
    1040 void Histo2D::Print(float min,float max
    1041                    ,int il,int ih,int jl,int jh)
    1042 {
    1043 int ns = 35;
     1053void Histo2D::Print(r_8 min,r_8 max
     1054                   ,int_4 il,int_4 ih,int_4 jl,int_4 jh)
     1055{
     1056int_4 ns = 35;
    10441057const char *s =    "+23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    10451058
    1046 if( il > ih ) { il = 0; ih = nx-1; }
    1047 if( jl > jh ) { jl = 0; jh = ny-1; }
     1059if( il > ih ) { il = 0; ih = mNx-1; }
     1060if( jl > jh ) { jl = 0; jh = mNy-1; }
    10481061if( il < 0 ) il = 0;
    10491062if( jl < 0 ) jl = 0;
    1050 if( ih >= nx ) ih = nx-1;
    1051 if( jh >= ny ) jh = ny-1;
     1063if( ih >= mNx ) ih = mNx-1;
     1064if( jh >= mNy ) jh = mNy-1;
    10521065
    10531066PrintStatus();
    10541067
    1055 if( il != 0 || ih != nx-1 || jl != 0 || jh != ny-1 ) {
    1056   float xl,xh,yl,yh;
     1068if( il != 0 || ih != mNx-1 || jl != 0 || jh != mNy-1 ) {
     1069  r_8 xl,xh,yl,yh;
    10571070  BinLowEdge(il,jl,xl,yl);
    10581071  BinHighEdge(ih,jh,xh,yh);
     
    10721085// imprime numero de bin en colonne
    10731086printf("\n");
    1074 if( nx-1 >= 100 ) {
     1087if( mNx-1 >= 100 ) {
    10751088  printf("     ");
    1076   for(int i=il;i<=ih;i++) printf("%1d",(int) (i%1000)/100);
     1089  for(int_4 i=il;i<=ih;i++) printf("%1d",(int_4) (i%1000)/100);
    10771090  printf("\n");
    10781091}
    1079 if( nx-1 >= 10 ) {
     1092if( mNx-1 >= 10 ) {
    10801093  printf("     ");
    1081   for(int i=il;i<=ih;i++) printf("%1d",(int) (i%100)/10);
     1094  for(int_4 i=il;i<=ih;i++) printf("%1d",(int_4) (i%100)/10);
    10821095  printf("\n");
    10831096}
    10841097printf("     ");
    1085 for(int i=il;i<=ih;i++) printf("%1d",i%10);
     1098for(int_4 i=il;i<=ih;i++) printf("%1d",i%10);
    10861099printf("\n");
    1087 printf("     "); {for(int i=il;i<=ih;i++) printf("-"); printf("\n");}
     1100printf("     "); {for(int_4 i=il;i<=ih;i++) printf("-"); printf("\n");}
    10881101
    10891102// imprime histogramme
    1090 for(int j=jh;j>=jl;j--) {
     1103for(int_4 j=jh;j>=jl;j--) {
    10911104  printf("%3d: ",j);
    1092   for(int i=il;i<=ih;i++) {
    1093     int h;
    1094     if( 1<=max-min && max-min<=35 ) h = (int)( (*this)(i,j) - min ) - 1;
    1095       else h = (int)( ((*this)(i,j)-min)/(max-min) * ns ) - 1;
     1105  for(int_4 i=il;i<=ih;i++) {
     1106    int_4 h;
     1107    if( 1<=max-min && max-min<=35 ) h = (int_4)( (*this)(i,j) - min ) - 1;
     1108      else h = (int_4)( ((*this)(i,j)-min)/(max-min) * ns ) - 1;
    10961109    char c;
    10971110    if(h<0 && (*this)(i,j)>min) c = '.';
     
    11051118
    11061119// imprime numero de bin en colonne
    1107 printf("     "); {for(int i=il;i<=ih;i++) printf("-"); printf("\n");}
    1108 if( nx-1 >= 100 ) {
     1120printf("     "); {for(int_4 i=il;i<=ih;i++) printf("-"); printf("\n");}
     1121if( mNx-1 >= 100 ) {
    11091122  printf("     ");
    1110   for(int i=il;i<=ih;i++) printf("%1d",(int) (i%1000)/100);
     1123  for(int_4 i=il;i<=ih;i++) printf("%1d",(int_4) (i%1000)/100);
    11111124  printf("\n");
    11121125}
    1113 if( nx-1 >= 10 ) {
     1126if( mNx-1 >= 10 ) {
    11141127  printf("     ");
    1115   for(int i=il;i<=ih;i++) printf("%1d",(int) (i%100)/10);
     1128  for(int_4 i=il;i<=ih;i++) printf("%1d",(int_4) (i%100)/10);
    11161129  printf("\n");
    11171130}
    11181131printf("     ");
    1119 {for(int i=il;i<=ih;i++) printf("%1d",i%10);}
     1132{for(int_4 i=il;i<=ih;i++) printf("%1d",i%10);}
    11201133printf("\n");
    11211134
     
    11301143void Histo2D::SetProjX()
    11311144{
    1132 if( hprojx != NULL ) DelProjX();
    1133 hprojx = new Histo(xmin,xmax,nx);
    1134 if( err2 != NULL && hprojx != NULL ) hprojx->Errors();
     1145if( mHprojx != NULL ) DelProjX();
     1146mHprojx = new Histo(mXmin,mXmax,mNx);
     1147if( mErr2 != NULL && mHprojx != NULL ) mHprojx->Errors();
    11351148}
    11361149
     
    11401153void Histo2D::SetProjY()
    11411154{
    1142 if( hprojy != NULL ) DelProjY();
    1143 hprojy = new Histo(ymin,ymax,ny);
    1144 if( err2 != NULL && hprojy != NULL  ) hprojy->Errors();
     1155if( mHprojy != NULL ) DelProjY();
     1156mHprojy = new Histo(mYmin,mYmax,mNy);
     1157if( mErr2 != NULL && mHprojy != NULL  ) mHprojy->Errors();
    11451158}
    11461159
     
    11591172void Histo2D::ShowProj()
    11601173{
    1161 if( hprojx != NULL ) cout << ">>>> Projection X set : "<< hprojx <<endl;
     1174if( mHprojx != NULL ) cout << ">>>> Projection X set : "<< mHprojx <<endl;
    11621175  else cout << ">>>> NO Projection X set"<<endl;
    1163 if( hprojy != NULL ) cout << ">>>> Projection Y set : "<< hprojy <<endl;
     1176if( mHprojy != NULL ) cout << ">>>> Projection Y set : "<< mHprojy <<endl;
    11641177  else cout << ">>>> NO Projection Y set"<<endl;
    11651178}
     
    11701183void Histo2D::DelProjX()
    11711184{
    1172 if( hprojx == NULL ) return;
    1173 delete hprojx;
    1174 hprojx = NULL;
     1185if( mHprojx == NULL ) return;
     1186delete mHprojx;
     1187mHprojx = NULL;
    11751188}
    11761189
     
    11801193void Histo2D::DelProjY()
    11811194{
    1182 if( hprojy == NULL ) return;
    1183 delete hprojy;
    1184 hprojy = NULL;
     1195if( mHprojy == NULL ) return;
     1196delete mHprojy;
     1197mHprojy = NULL;
    11851198}
    11861199
     
    11991212void Histo2D::ZeroProjX()
    12001213{
    1201 if( hprojx == NULL ) return;
    1202 hprojx->Zero();
     1214if( mHprojx == NULL ) return;
     1215mHprojx->Zero();
    12031216}
    12041217
     
    12081221void Histo2D::ZeroProjY()
    12091222{
    1210 if( hprojy == NULL ) return;
    1211 hprojy->Zero();
     1223if( mHprojy == NULL ) return;
     1224mHprojy->Zero();
    12121225}
    12131226
     
    12271240  Pour creer une bande en X entre ybmin et ybmax.
    12281241*/
    1229 int Histo2D::SetBandX(float ybmin,float ybmax)
    1230 {
    1231 b_s.num = lbandx.size();
    1232 b_s.min = ybmin;
    1233 b_s.max = ybmax;
    1234 b_s.H = new Histo(xmin,xmax,nx);
    1235 lbandx.push_back(b_s);
    1236 b_s.H = NULL;
    1237 return lbandx.size()-1;
     1242int_4 Histo2D::SetBandX(r_8 ybmin,r_8 ybmax)
     1243{
     1244mB_s.num = mLBandx.size();
     1245mB_s.min = ybmin;
     1246mB_s.max = ybmax;
     1247mB_s.H = new Histo(mXmin,mXmax,mNx);
     1248mLBandx.push_back(mB_s);
     1249mB_s.H = NULL;
     1250return mLBandx.size()-1;
    12381251}
    12391252
     
    12411254  Pour creer une bande en Y entre xbmin et xbmax.
    12421255*/
    1243 int Histo2D::SetBandY(float xbmin,float xbmax)
    1244 {
    1245 b_s.num = lbandy.size();
    1246 b_s.min = xbmin;
    1247 b_s.max = xbmax;
    1248 b_s.H = new Histo(ymin,ymax,ny);
    1249 lbandy.push_back(b_s);
    1250 b_s.H = NULL;
    1251 return lbandy.size()-1;
     1256int_4 Histo2D::SetBandY(r_8 xbmin,r_8 xbmax)
     1257{
     1258mB_s.num = mLBandy.size();
     1259mB_s.min = xbmin;
     1260mB_s.max = xbmax;
     1261mB_s.H = new Histo(mYmin,mYmax,mNy);
     1262mLBandy.push_back(mB_s);
     1263mB_s.H = NULL;
     1264return mLBandy.size()-1;
    12521265}
    12531266
     
    12571270void Histo2D::DelBandX()
    12581271{
    1259 if( lbandx.size() <= 0 ) return;
    1260 for(list<bande_slice>::iterator i = lbandx.begin(); i != lbandx.end(); i++)
     1272if( mLBandx.size() <= 0 ) return;
     1273for(list<bande_slice>::iterator i = mLBandx.begin(); i != mLBandx.end(); i++)
    12611274       if( (*i).H != NULL ) {delete (*i).H; (*i).H=NULL;}
    1262 lbandx.erase(lbandx.begin(),lbandx.end());
     1275mLBandx.erase(mLBandx.begin(),mLBandx.end());
    12631276}
    12641277
     
    12681281void Histo2D::DelBandY()
    12691282{
    1270 if( lbandy.size() <= 0 ) return;
    1271 for(list<bande_slice>::iterator i = lbandy.begin(); i != lbandy.end(); i++)
     1283if( mLBandy.size() <= 0 ) return;
     1284for(list<bande_slice>::iterator i = mLBandy.begin(); i != mLBandy.end(); i++)
    12721285       if( (*i).H != NULL ) {delete (*i).H; (*i).H=NULL;}
    1273 lbandy.erase(lbandy.begin(),lbandy.end());
     1286mLBandy.erase(mLBandy.begin(),mLBandy.end());
    12741287}
    12751288
     
    12791292void Histo2D::ZeroBandX()
    12801293{
    1281 if( lbandx.size() <= 0 ) return;
     1294if( mLBandx.size() <= 0 ) return;
    12821295list<bande_slice>::iterator i;
    1283 for(i = lbandx.begin(); i != lbandx.end(); i++)
     1296for(i = mLBandx.begin(); i != mLBandx.end(); i++)
    12841297              (*i).H->Zero();
    12851298}
     
    12901303void Histo2D::ZeroBandY()
    12911304{
    1292 if( lbandy.size() <= 0 ) return;
     1305if( mLBandy.size() <= 0 ) return;
    12931306list<bande_slice>::iterator i;
    1294 for(i = lbandy.begin(); i != lbandy.end(); i++)
     1307for(i = mLBandy.begin(); i != mLBandy.end(); i++)
    12951308              (*i).H->Zero();
    12961309}
     
    12991312  Retourne un pointeur sur la bande numero `n' selon X.
    13001313*/
    1301 Histo* Histo2D::HBandX(int n) const
    1302 {
    1303 if( lbandx.size() <= 0 || n < 0 || n >= (int) lbandx.size() ) return NULL;
    1304 for(list<bande_slice>::const_iterator i = lbandx.begin(); i != lbandx.end(); i++)
     1314Histo* Histo2D::HBandX(int_4 n) const
     1315{
     1316if( mLBandx.size() <= 0 || n < 0 || n >= (int_4) mLBandx.size() ) return NULL;
     1317for(list<bande_slice>::const_iterator i = mLBandx.begin(); i != mLBandx.end(); i++)
    13051318              if( (*i).num == n ) return (*i).H;
    13061319return NULL;
     
    13101323  Retourne un pointeur sur la bande numero `n' selon Y.
    13111324*/
    1312 Histo* Histo2D::HBandY(int n) const
    1313 {
    1314 if( lbandy.size() <= 0 || n < 0 || n >= (int) lbandy.size() ) return NULL;
    1315 for(list<bande_slice>::const_iterator i = lbandy.begin(); i != lbandy.end(); i++)
     1325Histo* Histo2D::HBandY(int_4 n) const
     1326{
     1327if( mLBandy.size() <= 0 || n < 0 || n >= (int_4) mLBandy.size() ) return NULL;
     1328for(list<bande_slice>::const_iterator i = mLBandy.begin(); i != mLBandy.end(); i++)
    13161329              if( (*i).num == n ) return (*i).H;
    13171330return NULL;
     
    13211334  Retourne les limites de la bande numero `n' selon X.
    13221335*/
    1323 void Histo2D::GetBandX(int n,float& ybmin,float& ybmax) const
     1336void Histo2D::GetBandX(int_4 n,r_8& ybmin,r_8& ybmax) const
    13241337{
    13251338ybmin = 0.; ybmax = 0.;
    1326 if( lbandx.size() <= 0 || n < 0 || n >= (int) lbandx.size() ) return;
    1327 for(list<bande_slice>::const_iterator i = lbandx.begin(); i != lbandx.end(); i++)
     1339if( mLBandx.size() <= 0 || n < 0 || n >= (int_4) mLBandx.size() ) return;
     1340for(list<bande_slice>::const_iterator i = mLBandx.begin(); i != mLBandx.end(); i++)
    13281341  if( (*i).num == n ) { ybmin = (*i).min; ybmax = (*i).max; return;}
    13291342return;
     
    13331346  Retourne les limites de la bande numero `n' selon Y.
    13341347*/
    1335 void Histo2D::GetBandY(int n,float& xbmin,float& xbmax) const
     1348void Histo2D::GetBandY(int_4 n,r_8& xbmin,r_8& xbmax) const
    13361349{
    13371350xbmin = 0.; xbmax = 0.;
    1338 if( lbandy.size() <= 0 || n < 0 || n >= (int) lbandy.size() ) return;
    1339 for(list<bande_slice>::const_iterator i = lbandy.begin(); i != lbandy.end(); i++)
     1351if( mLBandy.size() <= 0 || n < 0 || n >= (int_4) mLBandy.size() ) return;
     1352for(list<bande_slice>::const_iterator i = mLBandy.begin(); i != mLBandy.end(); i++)
    13401353  if( (*i).num == n ) { xbmin = (*i).min; xbmax = (*i).max; return;}
    13411354return;
     
    13451358  Informations sur les bandes.
    13461359*/
    1347 void Histo2D::ShowBand(int lp)
    1348 {
    1349   cout << ">>>> Nombre de bande X : " << lbandx.size() << endl;
    1350 if( lp>0 && lbandx.size()>0 ) {
     1360void Histo2D::ShowBand(int_4 lp)
     1361{
     1362  cout << ">>>> Nombre de bande X : " << mLBandx.size() << endl;
     1363if( lp>0 && mLBandx.size()>0 ) {
    13511364  list<bande_slice>::iterator i;
    1352   for(i = lbandx.begin(); i != lbandx.end(); i++) {
     1365  for(i = mLBandx.begin(); i != mLBandx.end(); i++) {
    13531366    cout<<"  "<<(*i).num<<" de ymin="<<(*i).min<<" a ymax="<<(*i).max;
    13541367    if(lp>1) cout << "   H=" << (*i).H;
     
    13571370}
    13581371
    1359 cout << ">>>> Nombre de bande Y : " << lbandy.size() << endl;
    1360 if( lp>0 && lbandy.size()>0 ) {
     1372cout << ">>>> Nombre de bande Y : " << mLBandy.size() << endl;
     1373if( lp>0 && mLBandy.size()>0 ) {
    13611374  list<bande_slice>::iterator i;
    1362   for(i = lbandy.begin(); i != lbandy.end(); i++) {
     1375  for(i = mLBandy.begin(); i != mLBandy.end(); i++) {
    13631376    cout<<"  "<<(*i).num<<" de xmin="<<(*i).min<<" a xmax="<<(*i).max;
    13641377    if(lp>1) cout << "   H=" << (*i).H;
     
    13741387  Pour creer `nsli' bandes equidistantes selon X.
    13751388*/
    1376 int Histo2D::SetSliX(int nsli)
     1389int_4 Histo2D::SetSliX(int_4 nsli)
    13771390{
    13781391if( nsli <= 0 ) return -1;
    1379 if( nsli >  ny ) nsli = ny;
    1380 if( lslix.size() > 0 ) DelSliX();
    1381 float w = (ymax-ymin)/nsli;
    1382 
    1383 for(int i=0; i<nsli; i++ ) {
    1384   b_s.num = i;
    1385   b_s.min = ymin + i*w;
    1386   b_s.max = b_s.min + w;
    1387   b_s.H = new Histo(xmin,xmax,nx);
    1388   lslix.push_back(b_s);
    1389   b_s.H = NULL;
    1390 }
    1391 return (int) lslix.size();
     1392if( nsli >  mNy ) nsli = mNy;
     1393if( mLSlix.size() > 0 ) DelSliX();
     1394r_8 w = (mYmax-mYmin)/nsli;
     1395
     1396for(int_4 i=0; i<nsli; i++ ) {
     1397  mB_s.num = i;
     1398  mB_s.min = mYmin + i*w;
     1399  mB_s.max = mB_s.min + w;
     1400  mB_s.H = new Histo(mXmin,mXmax,mNx);
     1401  mLSlix.push_back(mB_s);
     1402  mB_s.H = NULL;
     1403}
     1404return (int_4) mLSlix.size();
    13921405}
    13931406
     
    13951408  Pour creer `nsli' bandes equidistantes selon Y.
    13961409*/
    1397 int Histo2D::SetSliY(int nsli)
     1410int_4 Histo2D::SetSliY(int_4 nsli)
    13981411{
    13991412if( nsli <= 0 ) return -1;
    1400 if( nsli >  nx ) nsli = nx;
    1401 if( lsliy.size() > 0 ) DelSliY();
    1402 float w = (xmax-xmin)/nsli;
    1403 
    1404 for(int i=0; i<nsli; i++ ) {
    1405   b_s.num = i;
    1406   b_s.min = xmin + i*w;
    1407   b_s.max = b_s.min + w;
    1408   b_s.H = new Histo(ymin,ymax,ny);
    1409   lsliy.push_back(b_s);
    1410   b_s.H = NULL;
    1411 }
    1412 return (int) lsliy.size();
     1413if( nsli >  mNx ) nsli = mNx;
     1414if( mLSliy.size() > 0 ) DelSliY();
     1415r_8 w = (mXmax-mXmin)/nsli;
     1416
     1417for(int_4 i=0; i<nsli; i++ ) {
     1418  mB_s.num = i;
     1419  mB_s.min = mXmin + i*w;
     1420  mB_s.max = mB_s.min + w;
     1421  mB_s.H = new Histo(mYmin,mYmax,mNy);
     1422  mLSliy.push_back(mB_s);
     1423  mB_s.H = NULL;
     1424}
     1425return (int_4) mLSliy.size();
    14131426}
    14141427
     
    14181431void Histo2D::DelSliX()
    14191432{
    1420 if( lslix.size() <= 0 ) return;
    1421 for(list<bande_slice>::iterator i = lslix.begin(); i != lslix.end(); i++)
     1433if( mLSlix.size() <= 0 ) return;
     1434for(list<bande_slice>::iterator i = mLSlix.begin(); i != mLSlix.end(); i++)
    14221435       if( (*i).H != NULL ) {delete (*i).H; (*i).H=NULL;}
    1423 lslix.erase(lslix.begin(),lslix.end());
     1436mLSlix.erase(mLSlix.begin(),mLSlix.end());
    14241437}
    14251438
     
    14291442void Histo2D::DelSliY()
    14301443{
    1431 if( lsliy.size() <= 0 ) return;
    1432 for(list<bande_slice>::iterator i = lsliy.begin(); i != lsliy.end(); i++)
     1444if( mLSliy.size() <= 0 ) return;
     1445for(list<bande_slice>::iterator i = mLSliy.begin(); i != mLSliy.end(); i++)
    14331446       if( (*i).H != NULL ) {delete (*i).H; (*i).H=NULL;}
    1434 lsliy.erase(lsliy.begin(),lsliy.end());
     1447mLSliy.erase(mLSliy.begin(),mLSliy.end());
    14351448}
    14361449
     
    14401453void Histo2D::ZeroSliX()
    14411454{
    1442 if( lslix.size() <= 0 ) return;
     1455if( mLSlix.size() <= 0 ) return;
    14431456list<bande_slice>::iterator i;
    1444 for(i = lslix.begin(); i != lslix.end(); i++)
     1457for(i = mLSlix.begin(); i != mLSlix.end(); i++)
    14451458              (*i).H->Zero();
    14461459}
     
    14511464void Histo2D::ZeroSliY()
    14521465{
    1453 if( lsliy.size() <= 0 ) return;
     1466if( mLSliy.size() <= 0 ) return;
    14541467list<bande_slice>::iterator i;
    1455 for(i = lsliy.begin(); i != lsliy.end(); i++)
     1468for(i = mLSliy.begin(); i != mLSliy.end(); i++)
    14561469              (*i).H->Zero();
    14571470}
     
    14611474  selon X.
    14621475*/
    1463 Histo* Histo2D::HSliX(int n) const
    1464 {
    1465 if( lslix.size() <= 0 || n < 0 || n >= (int) lslix.size() ) return NULL;
    1466 for(list<bande_slice>::const_iterator i = lslix.begin(); i != lslix.end(); i++)
     1476Histo* Histo2D::HSliX(int_4 n) const
     1477{
     1478if( mLSlix.size() <= 0 || n < 0 || n >= (int_4) mLSlix.size() ) return NULL;
     1479for(list<bande_slice>::const_iterator i = mLSlix.begin(); i != mLSlix.end(); i++)
    14671480              if( (*i).num == n ) return (*i).H;
    14681481return NULL;
     
    14731486  selon Y.
    14741487*/
    1475 Histo* Histo2D::HSliY(int n) const
    1476 {
    1477 if( lsliy.size() <= 0 || n < 0 || n >= (int) lsliy.size() ) return NULL;
    1478 for(list<bande_slice>::const_iterator i = lsliy.begin(); i != lsliy.end(); i++)
     1488Histo* Histo2D::HSliY(int_4 n) const
     1489{
     1490if( mLSliy.size() <= 0 || n < 0 || n >= (int_4) mLSliy.size() ) return NULL;
     1491for(list<bande_slice>::const_iterator i = mLSliy.begin(); i != mLSliy.end(); i++)
    14791492              if( (*i).num == n ) return (*i).H;
    14801493return NULL;
     
    14841497  Informations sur les bandes equidistantes.
    14851498*/
    1486 void Histo2D::ShowSli(int lp)
     1499void Histo2D::ShowSli(int_4 lp)
    14871500{
    14881501list<bande_slice>::iterator i;
    1489 cout << ">>>> Nombre de slice X : " << lslix.size() << endl;
    1490 if( lp>0 && lslix.size() > 0 )
    1491   for(i = lslix.begin(); i != lslix.end(); i++) {
     1502cout << ">>>> Nombre de slice X : " << mLSlix.size() << endl;
     1503if( lp>0 && mLSlix.size() > 0 )
     1504  for(i = mLSlix.begin(); i != mLSlix.end(); i++) {
    14921505    cout<<"  "<<(*i).num<<" de ymin="<<(*i).min<<" a ymax="<<(*i).max;
    14931506    if(lp>1) cout << "   H=" << (*i).H;
     
    14951508  }
    14961509
    1497 cout << ">>>> Nombre de slice Y : " << lsliy.size() << endl;
    1498 if( lp>0 && lsliy.size()>0 )
    1499   for(i = lsliy.begin(); i != lsliy.end(); i++) {
     1510cout << ">>>> Nombre de slice Y : " << mLSliy.size() << endl;
     1511if( lp>0 && mLSliy.size()>0 )
     1512  for(i = mLSliy.begin(); i != mLSliy.end(); i++) {
    15001513    cout<<"  "<<(*i).num<<" de xmin="<<(*i).min<<" a xmax="<<(*i).max;
    15011514    if(lp>1) cout << "   H=" << (*i).H;
     
    15181531  else         dobj->Delete();
    15191532
    1520 float min,max;
     1533r_8 min,max;
    15211534int_4 errok, projx, projy, nslix, nsliy, nbanx, nbany;
    15221535
     
    15301543
    15311544// Lecture variables de definitions
    1532 is.Get(dobj->nx);
    1533 is.Get(dobj->ny);
    1534 is.Get(dobj->nxy);
     1545is.Get(dobj->mNx);
     1546is.Get(dobj->mNy);
     1547is.Get(dobj->mNxy);
    15351548is.Get(errok);
    15361549is.Get(dobj->nEntries);
    15371550is.Get(dobj->nHist);
    15381551
    1539 is.Get(dobj->xmin);
    1540 is.Get(dobj->xmax);
    1541 is.Get(dobj->ymin);
    1542 is.Get(dobj->ymax);
    1543 is.Get(dobj->wbinx);
    1544 is.Get(dobj->wbiny);
    1545 
    1546 is.Get(&(dobj->over[0][0]),9);
     1552is.Get(dobj->mXmin);
     1553is.Get(dobj->mXmax);
     1554is.Get(dobj->mYmin);
     1555is.Get(dobj->mYmax);
     1556is.Get(dobj->mWBinx);
     1557is.Get(dobj->mWBiny);
     1558
     1559is.Get(&(dobj->mOver[0][0]),9);
    15471560
    15481561is.Get(projx);
     
    15541567
    15551568// Lecture histo2D
    1556 dobj->data = new float[dobj->nxy];
     1569dobj->mData = new r_8[dobj->mNxy];
    15571570is.GetLine(strg, 255);
    1558 {for(int j=0;j<dobj->ny;j++) is.Get(dobj->data+j*dobj->nx,dobj->nx);}
     1571{for(int_4 j=0;j<dobj->mNy;j++) is.Get(dobj->mData+j*dobj->mNx,dobj->mNx);}
    15591572
    15601573// Lecture erreurs
    15611574if(errok) {
    15621575  is.GetLine(strg, 255);
    1563   dobj->err2 = new double[dobj->nxy];
    1564   for(int j=0;j<dobj->ny;j++) is.Get(dobj->err2+j*dobj->nx,dobj->nx);
     1576  dobj->mErr2 = new r_8[dobj->mNxy];
     1577  for(int_4 j=0;j<dobj->mNy;j++) is.Get(dobj->mErr2+j*dobj->mNx,dobj->mNx);
    15651578}
    15661579
     
    15691582  is.GetLine(strg, 255);
    15701583  dobj->SetProjX();
    1571   ObjFileIO<Histo> fio_h(dobj->hprojx);
     1584  ObjFileIO<Histo> fio_h(dobj->mHprojx);
    15721585  fio_h.Read(is);
    15731586}
     
    15751588  is.GetLine(strg, 255);
    15761589  dobj->SetProjY();
    1577   ObjFileIO<Histo> fio_h(dobj->hprojy);
     1590  ObjFileIO<Histo> fio_h(dobj->mHprojy);
    15781591  fio_h.Read(is);
    15791592}
     
    15841597  dobj->SetSliX(nslix);
    15851598  ASSERT (nslix==dobj->NSliX());
    1586   for(int j=0;j<dobj->NSliX();j++)
     1599  for(int_4 j=0;j<dobj->NSliX();j++)
    15871600    {ObjFileIO<Histo> fio_h(dobj->HSliX(j)); fio_h.Read(is);}
    15881601}
     
    15911604  dobj->SetSliY(nsliy);
    15921605  ASSERT (nsliy==dobj->NSliY());
    1593   for(int j=0;j<dobj->NSliY();j++)
     1606  for(int_4 j=0;j<dobj->NSliY();j++)
    15941607    {ObjFileIO<Histo> fio_h(dobj->HSliY(j)); fio_h.Read(is);}
    15951608}
     
    15981611if( nbanx>0 ) {
    15991612  is.GetLine(strg, 255);
    1600   {for(int j=0; j<nbanx; j++) {
     1613  {for(int_4 j=0; j<nbanx; j++) {
    16011614    is.Get(min); is.Get(max);
    16021615    dobj->SetBandX(min,max);
    16031616  }}
    16041617  ASSERT (nbanx==dobj->NBandX());
    1605   {for(int j=0; j<dobj->NBandX(); j++) {
     1618  {for(int_4 j=0; j<dobj->NBandX(); j++) {
    16061619    ObjFileIO<Histo> fio_h(dobj->HBandX(j));
    16071620    fio_h.Read(is);
     
    16101623if( nbany>0 ) {
    16111624  is.GetLine(strg, 255);
    1612   {for(int j=0; j<nbany; j++) {
     1625  {for(int_4 j=0; j<nbany; j++) {
    16131626    is.Get(min); is.Get(max);
    16141627    dobj->SetBandY(min,max);
    16151628  }}
    16161629  ASSERT (nbany==dobj->NBandY());
    1617   {for(int j=0; j<dobj->NBandY(); j++) {
     1630  {for(int_4 j=0; j<dobj->NBandY(); j++) {
    16181631    ObjFileIO<Histo> fio_h(dobj->HBandY(j));
    16191632    fio_h.Read(is);
     
    16301643
    16311644// Que faut-il ecrire?
    1632 int_4 errok = (dobj->err2) ? 1 : 0;
    1633 int_4 projx = (dobj->hprojx) ? 1 : 0;
    1634 int_4 projy = (dobj->hprojy) ? 1 : 0;
     1645int_4 errok = (dobj->mErr2) ? 1 : 0;
     1646int_4 projx = (dobj->mHprojx) ? 1 : 0;
     1647int_4 projy = (dobj->mHprojy) ? 1 : 0;
    16351648int_4 nslix = dobj->NSliX();
    16361649int_4 nsliy = dobj->NSliY();
     
    16401653// Ecriture entete pour identifier facilement
    16411654sprintf(strg,"nx=%d  ny=%d  nxy=%d errok=%1d"
    1642        ,dobj->nx,dobj->ny,dobj->nxy,errok);
     1655       ,dobj->mNx,dobj->mNy,dobj->mNxy,errok);
    16431656os.PutLine(strg);
    16441657sprintf(strg,"nHist=%g nEntries=%d",dobj->nHist,dobj->nEntries);
    16451658os.PutLine(strg);
    1646 sprintf(strg,"wbinx=%g wbiny=%g",dobj->wbinx,dobj->wbiny);
     1659sprintf(strg,"wbinx=%g wbiny=%g",dobj->mWBinx,dobj->mWBiny);
    16471660os.PutLine(strg);
    16481661sprintf(strg,"xmin=%g xmax=%g ymin=%g ymax=%g"
    1649        ,dobj->xmin,dobj->xmax,dobj->ymin,dobj->ymax);
     1662       ,dobj->mXmin,dobj->mXmax,dobj->mYmin,dobj->mYmax);
    16501663os.PutLine(strg);
    16511664sprintf(strg,"projx/y=%d %d nbandx/y=%d %d nbslix/y=%d %d"
    16521665       ,projx,projy,nbanx,nbany,nslix,nsliy);
    16531666os.PutLine(strg);
    1654 sprintf(strg,"over %g %g %g %g %g %g %g %g %g"
    1655        ,dobj->over[0][0],dobj->over[0][1],dobj->over[0][2]
    1656        ,dobj->over[1][0],dobj->over[1][1],dobj->over[1][2]
    1657        ,dobj->over[2][0],dobj->over[2][1],dobj->over[2][2]);
     1667sprintf(strg,"mOver %g %g %g %g %g %g %g %g %g"
     1668       ,dobj->mOver[0][0],dobj->mOver[0][1],dobj->mOver[0][2]
     1669       ,dobj->mOver[1][0],dobj->mOver[1][1],dobj->mOver[1][2]
     1670       ,dobj->mOver[2][0],dobj->mOver[2][1],dobj->mOver[2][2]);
    16581671os.PutLine(strg);
    16591672
    16601673// Ecriture variables de definitions
    1661 os.Put(dobj->nx);
    1662 os.Put(dobj->ny);
    1663 os.Put(dobj->nxy);
     1674os.Put(dobj->mNx);
     1675os.Put(dobj->mNy);
     1676os.Put(dobj->mNxy);
    16641677os.Put(errok);
    16651678os.Put(dobj->nEntries);
    16661679os.Put(dobj->nHist);
    16671680
    1668 os.Put(dobj->xmin);
    1669 os.Put(dobj->xmax);
    1670 os.Put(dobj->ymin);
    1671 os.Put(dobj->ymax);
    1672 os.Put(dobj->wbinx);
    1673 os.Put(dobj->wbiny);
    1674 
    1675 os.Put(&(dobj->over[0][0]),9);
     1681os.Put(dobj->mXmin);
     1682os.Put(dobj->mXmax);
     1683os.Put(dobj->mYmin);
     1684os.Put(dobj->mYmax);
     1685os.Put(dobj->mWBinx);
     1686os.Put(dobj->mWBiny);
     1687
     1688os.Put(&(dobj->mOver[0][0]),9);
    16761689
    16771690os.Put(projx);
     
    16841697// Ecriture histo2D
    16851698sprintf(strg,"Histo2D: Tableau des donnees %d = %d * %d"
    1686        ,dobj->nxy,dobj->nx,dobj->ny);
     1699       ,dobj->mNxy,dobj->mNx,dobj->mNy);
    16871700os.PutLine(strg);
    1688 {for(int j=0;j<dobj->ny;j++) os.Put(dobj->data+j*dobj->nx,dobj->nx);}
     1701{for(int_4 j=0;j<dobj->mNy;j++) os.Put(dobj->mData+j*dobj->mNx,dobj->mNx);}
    16891702
    16901703// Ecriture erreurs
    16911704if(errok) {
    16921705  sprintf(strg,"Histo2D: Tableau des erreurs %d = %d * %d"
    1693          ,dobj->nxy,dobj->nx,dobj->ny);
     1706         ,dobj->mNxy,dobj->mNx,dobj->mNy);
    16941707  os.PutLine(strg);
    1695   for(int j=0;j<dobj->ny;j++) os.Put(dobj->err2+j*dobj->nx,dobj->nx);
     1708  for(int_4 j=0;j<dobj->mNy;j++) os.Put(dobj->mErr2+j*dobj->mNx,dobj->mNx);
    16961709}
    16971710
     
    17001713  sprintf(strg,"Histo2D: Projection X");
    17011714  os.PutLine(strg);
    1702   ObjFileIO<Histo> fio_h(dobj->hprojx); fio_h.Write(os);
     1715  ObjFileIO<Histo> fio_h(dobj->mHprojx); fio_h.Write(os);
    17031716}
    17041717if(projy) {
    17051718  sprintf(strg,"Histo2D: Projection Y");
    17061719  os.PutLine(strg);
    1707   ObjFileIO<Histo> fio_h(dobj->hprojy); fio_h.Write(os);
     1720  ObjFileIO<Histo> fio_h(dobj->mHprojy); fio_h.Write(os);
    17081721}
    17091722
     
    17121725  sprintf(strg,"Histo2D: Slices X %d",nslix);
    17131726  os.PutLine(strg);
    1714   for(int j=0;j<nslix;j++) {
     1727  for(int_4 j=0;j<nslix;j++) {
    17151728    Histo* h = dobj->HSliX(j);
    17161729    ObjFileIO<Histo> fio_h(h); fio_h.Write(os);
     
    17201733  sprintf(strg,"Histo2D: Slices Y %d",nsliy);
    17211734  os.PutLine(strg);
    1722   for(int j=0;j<nsliy;j++) {
     1735  for(int_4 j=0;j<nsliy;j++) {
    17231736    Histo* h = dobj->HSliY(j);
    17241737    ObjFileIO<Histo> fio_h(h); fio_h.Write(os);
     
    17311744  os.PutLine(strg);
    17321745  list<Histo2D::bande_slice>::const_iterator it;
    1733   for(it = dobj->lbandx.begin(); it != dobj->lbandx.end(); it++) {
    1734     float min = (*it).min; float max = (*it).max;
     1746  for(it = dobj->mLBandx.begin(); it != dobj->mLBandx.end(); it++) {
     1747    r_8 min = (*it).min; r_8 max = (*it).max;
    17351748    os.Put(min); os.Put(max);
    17361749  }
    1737   for(it = dobj->lbandx.begin(); it != dobj->lbandx.end(); it++) {
     1750  for(it = dobj->mLBandx.begin(); it != dobj->mLBandx.end(); it++) {
    17381751    Histo* h = (*it).H;
    17391752    ObjFileIO<Histo> fio_h(h); fio_h.Write(os);
     
    17441757  os.PutLine(strg);
    17451758  list<Histo2D::bande_slice>::const_iterator it;
    1746   for(it = dobj->lbandy.begin(); it != dobj->lbandy.end(); it++) {
    1747     float min = (*it).min; float max = (*it).max;
     1759  for(it = dobj->mLBandy.begin(); it != dobj->mLBandy.end(); it++) {
     1760    r_8 min = (*it).min; r_8 max = (*it).max;
    17481761    os.Put(min); os.Put(max);
    17491762  }
    1750   for(it = dobj->lbandy.begin(); it != dobj->lbandy.end(); it++) {
     1763  for(it = dobj->mLBandy.begin(); it != dobj->mLBandy.end(); it++) {
    17511764    Histo* h = (*it).H;
    17521765    ObjFileIO<Histo> fio_h(h); fio_h.Write(os);
Note: See TracChangeset for help on using the changeset viewer.