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


Ignore:
Timestamp:
Aug 13, 2006, 12:41:09 AM (19 years ago)
Author:
cmv
Message:
  • changement nom variables internes Histo...Histo2D
  • re-arrangement CreateOrResize et operator=
  • protection dans methodes (VMIN etc..) pour Histo 1d+2d vides

cmv 13/8/2006

File:
1 edited

Legend:

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

    r3053 r3057  
    153153void Histo2D::CreateOrResize(r_8 xMin,r_8 xMax,int_4 nxBin,r_8 yMin,r_8 yMax,int_4 nyBin)
    154154{
    155  int_8 n = nxBin*nyBin;
    156  if(mData!=NULL) {delete[] mData; mData = NULL;}
    157  if(n>0) {mData = new r_8[n]; memset(mData, 0, n*sizeof(r_8));}
    158  mNx = nxBin; mNy = nyBin; mNxy = nxBin*nyBin;
    159  mXmin = xMin; mXmax = xMax; mYmin = yMin; mYmax = yMax;
    160  mWBinx = (nxBin>0) ? (xMax - xMin)/nxBin: 0.;
    161  mWBiny = (nyBin>0) ? (yMax - yMin)/nyBin: 0.;
    162  nHist = 0; nEntries = 0;
    163  for(int_4 i=0;i<3;i++) for(int_4 j=0;j<3;j++) mOver[i][j]=0.;
    164  mB_s.H = NULL;
     155  int_8 n = nxBin*nyBin;
     156  bool samelen = (n==mNx*mNy)? true: false;
     157  if(mData!=NULL && !samelen) {delete[] mData; mData=NULL;}
     158  if(mErr2!=NULL) {delete[] mErr2; mErr2=NULL;} // On des-alloue toujours
     159  if(n>0 && mData==NULL) mData = new r_8[n];
     160  if(mData) memset(mData, 0, n*sizeof(r_8));
     161  mNx = nxBin; mNy = nyBin; mNxy = nxBin*nyBin;
     162  mXmin = xMin; mXmax = xMax; mYmin = yMin; mYmax = yMax;
     163  mWBinx = (nxBin>0) ? (xMax - xMin)/nxBin: 0.;
     164  mWBiny = (nyBin>0) ? (yMax - yMin)/nyBin: 0.;
     165  nHist = 0; nEntries = 0;
     166  for(int_4 i=0;i<3;i++) for(int_4 j=0;j<3;j++) mOver[i][j]=0.;
     167  mB_s.H = NULL;
    165168}
    166169
     
    230233Histo2D& Histo2D::operator = (const Histo2D& h)
    231234{
    232   int_4 i,j,nb;
    233   r_8 min,max;
    234 
    235235  if(this == &h) return *this;
    236   if( h.mNxy > mNxy ) Delete();
    237   if(!mData) mData = new r_8[h.mNxy];
    238   if( !h.mErr2 && mErr2 ) { delete [] mErr2; mErr2=NULL;}
    239   if( h.mErr2 && !mErr2 ) mErr2 = new r_8[h.mNxy];
    240 
    241   for(i=0;i<3;i++) for(j=0;j<3;j++) mOver[i][j] = h.mOver[i][j];
    242   nHist = h.nHist;
    243   nEntries = h.nEntries;
    244   mNx = h.mNx;  mNy = h.mNy;  mNxy = h.mNxy;
    245   mXmin = h.mXmin; mXmax = h.mXmax; mWBinx = h.mWBinx;
    246   mYmin = h.mYmin; mYmax = h.mYmax; mWBiny = h.mWBiny;
    247  
    248   memcpy(mData, h.mData, mNxy*sizeof(r_8));
     236  CreateOrResize(h.mXmin,h.mXmax,h.mNx,h.mYmin,h.mYmax,h.mNy);
     237  if(h.mErr2) Errors();
     238  if(mData) memcpy(mData, h.mData, mNxy*sizeof(r_8));
    249239  if(mErr2) memcpy(mErr2, h.mErr2, mNxy*sizeof(r_8));
     240
     241  for(int i=0;i<3;i++) for(int j=0;j<3;j++) mOver[i][j] = h.mOver[i][j];
     242  nHist = h.nHist;  nEntries = h.nEntries; 
    250243
    251244  DelProjX();
     
    260253  }
    261254
     255  int_4 nb;
    262256  DelSliX();
    263257  nb = h.NSliX();
    264258  if(nb>0) {
    265259    SetSliX(nb);
    266     for(i=0; i<NSliX();i++) *HSliX(i) = *(h.HSliX(i));
     260    for(int i=0; i<NSliX();i++) *HSliX(i) = *(h.HSliX(i));
    267261  }
    268262  DelSliY();
     
    270264  if(nb>0) {
    271265    SetSliY(nb);
    272     for(i=0; i<NSliY();i++) *HSliY(i) = *(h.HSliY(i));
     266    for(int i=0; i<NSliY();i++) *HSliY(i) = *(h.HSliY(i));
    273267  }
    274268
     
    276270  nb = h.NBandX();
    277271  if(nb>0) {
    278     for(i=0; i<nb;i++) {
     272    for(int i=0; i<nb;i++) {
     273      r_8 min,max;
    279274      h.GetBandX(i,min,max);
    280275      SetBandX(min,max);
    281276      *HBandX(i) = *(h.HBandX(i));
    282277    }
    283     for(i=0; i<NBandX();i++) *HBandX(i) = *(h.HBandX(i));
     278    for(int i=0; i<NBandX();i++) *HBandX(i) = *(h.HBandX(i));
    284279  }
    285280  DelBandY();
    286281  nb = h.NBandY();
    287282  if(nb>0) {
    288     for(i=0; i<nb;i++) {
     283    for(int i=0; i<nb;i++) {
     284      r_8 min,max;
    289285      h.GetBandY(i,min,max);
    290286      SetBandY(min,max);
    291287      *HBandY(i) = *(h.HBandY(i));
    292288    }
    293     for(i=0; i<NBandY();i++) *HBandY(i) = *(h.HBandY(i));
     289    for(int i=0; i<NBandY();i++) *HBandY(i) = *(h.HBandY(i));
    294290  }
    295291
     
    695691void Histo2D::IJMax(int_4& imax,int_4& jmax,int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    696692{
     693if(mNxy<=0) {imax = jmax = -1; return;}
    697694if( il > ih ) { il = 0; ih = mNx-1; }
    698695if( jl > jh ) { jl = 0; jh = mNy-1; }
     
    716713void Histo2D::IJMin(int_4& imax,int_4& jmax,int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    717714{
     715if(mNxy<=0) {imax = jmax = -1; return;}
    718716if( il > ih ) { il = 0; ih = mNx-1; }
    719717if( jl > jh ) { jl = 0; jh = mNy-1; }
     
    738736r_8 Histo2D::VMax(int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    739737{
     738if(mNxy<=0) return 0.;
    740739if( il > ih ) { il = 0; ih = mNx-1; }
    741740if( jl > jh ) { jl = 0; jh = mNy-1; }
     
    758757r_8 Histo2D::VMin(int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    759758{
     759if(mNxy<=0) return 0.;
    760760if( il > ih ) { il = 0; ih = mNx-1; }
    761761if( jl > jh ) { jl = 0; jh = mNy-1; }
     
    801801int_4 Histo2D::BinNonNul() const
    802802{
     803if(mNxy<=0) return -1;
    803804int_4 non=0;
    804805for (int_4 i=0;i<mNxy;i++) if( mData[i] != 0. ) non++;
     
    899900                    ,int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    900901{
     902if(mNxy<=0) return -1;
    901903if( il > ih ) { il = 0; ih = mNx-1; }
    902904if( jl > jh ) { jl = 0; jh = mNy-1; }
     
    969971                   ,int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    970972{
     973if(mNxy<=0) return;
    971974int_4 ns = 35;
    972975const char *s =    "+23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Note: See TracChangeset for help on using the changeset viewer.