Changeset 3057 in Sophya for trunk/SophyaLib/HiStats/hisprof.cc
- Timestamp:
- Aug 13, 2006, 12:41:09 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/HiStats/hisprof.cc
r3053 r3057 19 19 HProf::HProf() 20 20 : Histo(), mSumY(NULL), mSumY2(NULL), mSumW(NULL) 21 , Ok(false), YMin(1.), YMax(-1.),Opt(0)21 , mOk(false), mYMin(1.), mYMax(-1.), mOpt(0) 22 22 { 23 23 } … … 56 56 , mSumY2((H.mBins>0) ? new r_8[H.mBins] : NULL) 57 57 , mSumW((H.mBins>0) ? new r_8[H.mBins] : NULL) 58 , Ok(H.Ok), YMin(H.YMin), YMax(H.YMax), Opt(H.Opt)58 , mOk(H.mOk), mYMin(H.mYMin), mYMax(H.mYMax), mOpt(H.mOpt) 59 59 { 60 60 if(mBins>0) { … … 73 73 { 74 74 //cout<<"HProf::CreateOrResize()"<<endl; 75 bool samelen = (nBin==mBins)? true: false; 75 76 Histo::CreateOrResize(xMin,xMax,nBin); 76 77 Histo::Errors(); 77 if(mSumY !=NULL) {delete[] mSumY; mSumY = NULL;} 78 if(mSumY2!=NULL) {delete[] mSumY2; mSumY2= NULL;} 79 if(mSumW !=NULL) {delete[] mSumW; mSumW = NULL;} 80 if(nBin>0) { 81 mSumY = new r_8[nBin]; memset(mSumY, 0, nBin*sizeof(r_8)); 82 mSumY2 = new r_8[nBin]; memset(mSumY2,0, nBin*sizeof(r_8)); 83 mSumW = new r_8[nBin]; memset(mSumW, 0, nBin*sizeof(r_8)); 84 } 85 YMin = yMin; YMax = yMax; 86 Ok = false; 87 Opt = 0; 78 if(mSumW!=NULL && !samelen) { //si un est alloue alors les autres aussi 79 delete[] mSumY; mSumY = NULL; 80 delete[] mSumY2; mSumY2= NULL; 81 delete[] mSumW; mSumW = NULL; 82 } 83 if(nBin>0 && mSumW==NULL) { 84 mSumY = new r_8[nBin]; 85 mSumY2 = new r_8[nBin]; 86 mSumW = new r_8[nBin]; 87 } 88 if(mSumW) { 89 memset(mSumY, 0, nBin*sizeof(r_8)); 90 memset(mSumY2,0, nBin*sizeof(r_8)); 91 memset(mSumW, 0, nBin*sizeof(r_8)); 92 } 93 mYMin = yMin; mYMax = yMax; 94 mOk = false; 95 mOpt = 0; 88 96 } 89 97 … … 99 107 if(mSumY2!= NULL) {delete[] mSumY2; mSumY2 = NULL;} 100 108 if(mSumW != NULL) {delete[] mSumW; mSumW = NULL;} 101 Ok = false;109 mOk = false; 102 110 } 103 111 … … 117 125 void HProf::UpdateHisto(bool force) const 118 126 { 119 if(! Ok || force) updatehisto();127 if(!mOk || force) updatehisto(); 120 128 } 121 129 … … 130 138 memset(mSumY2, 0, mBins*sizeof(r_8)); 131 139 memset(mSumW, 0, mBins*sizeof(r_8)); 132 Ok = false;140 mOk = false; 133 141 } 134 142 … … 153 161 { 154 162 uint_2 opt = (spread) ? 0 : 1; 155 if(opt!= Opt) {Opt=opt;Ok=false;}163 if(opt!=mOpt) {mOpt=opt; mOk=false;} 156 164 } 157 165 … … 177 185 m = mSumY[i]/mSumW[i]; 178 186 e2 = mSumY2[i]/mSumW[i] - m*m; 179 if( Opt) e2 /= mSumW[i];187 if(mOpt) e2 /= mSumW[i]; 180 188 } 181 189 mData[i] = m; 182 190 mErr2[i] = e2; 183 191 } 184 Ok = true;192 mOk = true; 185 193 // Attention, a cause de "WriteSelf const" updatehisto doit etre "const". 186 // Comme on veut modifier Ok, on est oblige de faire cette entourloupe:194 // Comme on veut modifier mOk, on est oblige de faire cette entourloupe: 187 195 HProf *buff = (HProf *) this; 188 buff-> Ok = true;196 buff->mOk = true; 189 197 } 190 198 … … 195 203 void HProf::Add(r_8 x, r_8 y, r_8 w) 196 204 { 197 if( YMax>YMin && (y<YMin ||YMax<y)) return;205 if(mYMax>mYMin && (y<mYMin || mYMax<y)) return; 198 206 int_4 numBin = FindBin(x); 199 207 if (numBin<0) mUnder += w; 200 208 else if (numBin>=mBins) mOver += w; 201 209 else { 202 Ok = false;210 mOk = false; 203 211 mSumY[numBin] += y*w; 204 212 mSumY2[numBin] += y*y*w; … … 215 223 void HProf::AddBin(int_4 numBin, r_8 y, r_8 w) 216 224 { 217 if( YMax>YMin && (y<YMin ||YMax<y)) return;225 if(mYMax>mYMin && (y<mYMin || mYMax<y)) return; 218 226 if (numBin<0) mUnder += w; 219 227 else if (numBin>=mBins) mOver += w; 220 228 else { 221 Ok = false;229 mOk = false; 222 230 mSumY[numBin] += y*w; 223 231 mSumY2[numBin] += y*y*w; … … 234 242 HProf& HProf::operator = (const HProf& h) 235 243 { 236 if(this == &h) return *this; 237 if( h.mBins > mBins ) Delete(); 238 Histo *hthis = (Histo *) this; 239 *hthis = (Histo) h; 240 if(!mSumY) mSumY = new r_8[mBins]; 241 if(!mSumY2) mSumY2 = new r_8[mBins]; 242 if(!mSumW) mSumW = new r_8[mBins]; 243 memcpy(mSumY, h.mSumY, mBins*sizeof(r_8)); 244 memcpy(mSumY2, h.mSumY2, mBins*sizeof(r_8)); 245 memcpy(mSumW, h.mSumW, mBins*sizeof(r_8)); 246 Ok = h.Ok; 247 YMin = h.YMin; 248 YMax = h.YMax; 249 Opt = h.Opt; 250 251 return *this; 244 if(this == &h) return *this; 245 CreateOrResize(h.mMin,h.mMax,h.mBins,h.mYMin,h.mYMax); 246 if(mData) memcpy(mData,h.mData,mBins*sizeof(r_8)); 247 if(mErr2) memcpy(mErr2,h.mErr2,mBins*sizeof(r_8)); 248 mUnder = h.mUnder; mOver = h.mOver; 249 nHist = h.nHist; nEntries = h.nEntries; 250 if(mSumY) memcpy(mSumY, h.mSumY, mBins*sizeof(r_8)); 251 if(mSumY2) memcpy(mSumY2, h.mSumY2, mBins*sizeof(r_8)); 252 if(mSumW) memcpy(mSumW, h.mSumW, mBins*sizeof(r_8)); 253 mOk = h.mOk; 254 mOpt = h.mOpt; 255 256 return *this; 252 257 } 253 258 … … 331 336 UpdateHisto(); 332 337 Histo::Show(os); 333 os <<" ymin="<< YMin<<" ymax="<<YMax<<" opt="<<Opt<< endl;338 os <<" ymin="<<mYMin<<" ymax="<<mYMax<<" opt="<<mOpt<< endl; 334 339 } 335 340 … … 354 359 // Lecture des valeurs 355 360 is.Get(dobj->mBins); 356 is.Get(dobj-> YMin);357 is.Get(dobj-> YMax);358 is.Get(dobj-> Opt);359 dobj-> Ok = true;361 is.Get(dobj->mYMin); 362 is.Get(dobj->mYMax); 363 is.Get(dobj->mOpt); 364 dobj->mOk = true; 360 365 361 366 // Lecture des donnees propres a l'histogramme de profil. 362 367 is.GetLine(strg,255); 363 dobj->mSumY = new r_8[dobj->mBins]; 364 dobj->mSumY2 = new r_8[dobj->mBins]; 365 dobj->mSumW = new r_8[dobj->mBins]; 368 if(dobj->mBins>0) { 369 dobj->mSumY = new r_8[dobj->mBins]; 370 dobj->mSumY2 = new r_8[dobj->mBins]; 371 dobj->mSumW = new r_8[dobj->mBins]; 372 } 366 373 is.Get(dobj->mSumY, dobj->mBins); 367 374 is.Get(dobj->mSumY2, dobj->mBins); … … 383 390 384 391 // Ecriture entete pour identifier facilement 385 sprintf(strg,"HProf: YMin=%f YMax=%f Opt=%1d",dobj-> YMin,dobj->YMax,dobj->Opt);392 sprintf(strg,"HProf: YMin=%f YMax=%f Opt=%1d",dobj->mYMin,dobj->mYMax,dobj->mOpt); 386 393 os.PutLine(strg); 387 394 388 395 // Ecriture des valeurs 389 396 os.Put(dobj->mBins); 390 os.Put(dobj-> YMin);391 os.Put(dobj-> YMax);392 os.Put(dobj-> Opt);397 os.Put(dobj->mYMin); 398 os.Put(dobj->mYMax); 399 os.Put(dobj->mOpt); 393 400 394 401 // Ecriture des donnees propres a l'histogramme de profil.
Note:
See TracChangeset
for help on using the changeset viewer.