Changeset 1092 in Sophya for trunk/SophyaLib/HiStats/hisprof.cc
- Timestamp:
- Jul 26, 2000, 3:15:52 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/HiStats/hisprof.cc
r1089 r1092 31 31 SetErrOpt(1) permet de demander de calculer l'erreur sur la moyenne. 32 32 */ 33 HProf::HProf( float xMin, float xMax, int nBin, float yMin, floatyMax)33 HProf::HProf(r_8 xMin, r_8 xMax, int_4 nBin, r_8 yMin, r_8 yMax) 34 34 : Histo(xMin,xMax,nBin) 35 , SumY(new double[nBin]), SumY2(new double[nBin]), SumW(new double[nBin]) 35 , SumY( (nBin>0) ? new r_8[nBin] : NULL) 36 , SumY2((nBin>0) ? new r_8[nBin] : NULL) 37 , SumW( (nBin>0) ? new r_8[nBin] : NULL) 36 38 , Ok(false), YMin(yMin), YMax(yMax), Opt(0) 37 39 { … … 43 45 /********* Methode *********/ 44 46 /*! 47 Constructeur. 48 */ 49 HProf::HProf(r_4 xMin, r_4 xMax, int_4 nBin, r_4 yMin, r_4 yMax) 50 : Histo((r_8)xMin,(r_8)xMax,nBin) 51 , SumY( (nBin>0) ? new r_8[nBin] : NULL) 52 , SumY2((nBin>0) ? new r_8[nBin] : NULL) 53 , SumW( (nBin>0) ? new r_8[nBin] : NULL) 54 , Ok(false), YMin((r_8)yMin), YMax((r_8)yMax), Opt(0) 55 { 56 Histo::Errors(); 57 Zero(); 58 END_CONSTRUCTOR 59 } 60 61 /********* Methode *********/ 62 /*! 45 63 Constructeur par copie. 46 64 */ 47 65 HProf::HProf(const HProf& H) 48 66 : Histo(H) 49 , SumY((H. bins>0) ? new double[H.bins] : NULL)50 , SumY2((H. bins>0) ? new double[H.bins] : NULL)51 , SumW((H. bins>0) ? new double[H.bins] : NULL)67 , SumY((H.mBins>0) ? new r_8[H.mBins] : NULL) 68 , SumY2((H.mBins>0) ? new r_8[H.mBins] : NULL) 69 , SumW((H.mBins>0) ? new r_8[H.mBins] : NULL) 52 70 , Ok(H.Ok), YMin(H.YMin), YMax(H.YMax), Opt(H.Opt) 53 71 { 54 if( bins>0) {55 memcpy(SumY, H.SumY, bins*sizeof(double));56 memcpy(SumY2, H.SumY2, bins*sizeof(double));57 memcpy(SumW, H.SumW, bins*sizeof(double));72 if(mBins>0) { 73 memcpy(SumY, H.SumY, mBins*sizeof(r_8)); 74 memcpy(SumY2, H.SumY2, mBins*sizeof(r_8)); 75 memcpy(SumW, H.SumW, mBins*sizeof(r_8)); 58 76 } 59 77 UpdateHisto(); … … 88 106 void HProf::Zero() 89 107 { 90 memset(SumY, 0, bins*sizeof(double));91 memset(SumY2, 0, bins*sizeof(double));92 memset(SumW, 0, bins*sizeof(double));108 memset(SumY, 0, mBins*sizeof(r_8)); 109 memset(SumY2, 0, mBins*sizeof(r_8)); 110 memset(SumW, 0, mBins*sizeof(r_8)); 93 111 Ok = false; 94 112 Histo::Zero(); … … 112 130 void HProf::SetErrOpt(bool spread) 113 131 { 114 intopt = (spread) ? 0 : 1;132 uint_2 opt = (spread) ? 0 : 1; 115 133 if(opt!=Opt) {Opt=opt; Ok=false;} 116 134 } … … 130 148 void HProf::updatehisto() const 131 149 { 132 floatm,e2;133 if( bins>0) for(int i=0;i<bins;i++) {150 r_8 m,e2; 151 if(mBins>0) for(int_4 i=0;i<mBins;i++) { 134 152 if(SumW[i]<=0.) { 135 153 m = e2 = 0.; … … 139 157 if(Opt) e2 /= SumW[i]; 140 158 } 141 data[i] = m;142 err2[i] = e2;159 mData[i] = m; 160 mErr2[i] = e2; 143 161 } 144 162 Ok = true; … … 153 171 Addition au contenu de l'histo pour abscisse x de la valeur y et poids w 154 172 */ 155 void HProf::Add( float x, float y, floatw)173 void HProf::Add(r_8 x, r_8 y, r_8 w) 156 174 { 157 175 if(YMax>YMin && (y<YMin || YMax<y)) return; 158 int numBin = FindBin(x);159 if (numBin<0) under += w;160 else if (numBin>= bins) over += w;176 int_4 numBin = FindBin(x); 177 if (numBin<0) mUnder += w; 178 else if (numBin>=mBins) mOver += w; 161 179 else { 162 180 Ok = false; … … 173 191 Addition au contenu de l'histo bin numBin de la valeur y poids w 174 192 */ 175 void HProf::AddBin(int numBin, float y, floatw)193 void HProf::AddBin(int_4 numBin, r_8 y, r_8 w) 176 194 { 177 195 if(YMax>YMin && (y<YMin || YMax<y)) return; 178 if (numBin<0) under += w;179 else if (numBin>= bins) over += w;196 if (numBin<0) mUnder += w; 197 else if (numBin>=mBins) mOver += w; 180 198 else { 181 199 Ok = false; … … 195 213 { 196 214 if(this == &h) return *this; 197 if( h. bins > bins ) Delete();215 if( h.mBins > mBins ) Delete(); 198 216 Histo *hthis = (Histo *) this; 199 217 *hthis = (Histo) h; 200 if(!SumY) SumY = new double[bins];201 if(!SumY2) SumY2 = new double[bins];202 if(!SumW) SumW = new double[bins];203 memcpy(SumY, h.SumY, bins*sizeof(double));204 memcpy(SumY2, h.SumY2, bins*sizeof(double));205 memcpy(SumW, h.SumW, bins*sizeof(double));218 if(!SumY) SumY = new r_8[mBins]; 219 if(!SumY2) SumY2 = new r_8[mBins]; 220 if(!SumW) SumW = new r_8[mBins]; 221 memcpy(SumY, h.SumY, mBins*sizeof(r_8)); 222 memcpy(SumY2, h.SumY2, mBins*sizeof(r_8)); 223 memcpy(SumW, h.SumW, mBins*sizeof(r_8)); 206 224 Ok = h.Ok; 207 225 YMin = h.YMin; … … 222 240 HProf& HProf::operator += (const HProf& a) 223 241 { 224 if( bins!=a.bins) THROW(sizeMismatchErr);242 if(mBins!=a.mBins) THROW(sizeMismatchErr); 225 243 Histo *hthis = (Histo *) this; 226 244 *hthis += (Histo) a; 227 if( bins>0) for(int i=0;i<bins;i++) {245 if(mBins>0) for(int_4 i=0;i<mBins;i++) { 228 246 SumY[i] += a.SumY[i]; 229 247 SumY2[i] += a.SumY2[i]; … … 239 257 Pour rebinner l'histogramme de profile sur nbinew bins 240 258 */ 241 void HProf::HRebin(int nbinew)242 { 243 if( bins <= 0 ) return; // createur par default259 void HProf::HRebin(int_4 nbinew) 260 { 261 if( mBins <= 0 ) return; // createur par default 244 262 if( nbinew <= 0 ) return; 245 263 … … 248 266 249 267 // Rebin de la partie Histo 250 int binold = bins;268 int_4 binold = mBins; 251 269 Histo::HRebin(nbinew); 252 270 253 271 // Le nombre de bins est il plus grand ?? 254 if( bins > binold ) {255 delete [] SumY; SumY = new double[nbinew]; memset(SumY, 0,bins*sizeof(double));256 delete [] SumY2; SumY2 = new double[nbinew]; memset(SumY2,0,bins*sizeof(double));257 delete [] SumW; SumW = new double[nbinew]; memset(SumW, 0,bins*sizeof(double));272 if( mBins > binold ) { 273 delete [] SumY; SumY = new r_8[nbinew]; memset(SumY, 0,mBins*sizeof(r_8)); 274 delete [] SumY2; SumY2 = new r_8[nbinew]; memset(SumY2,0,mBins*sizeof(r_8)); 275 delete [] SumW; SumW = new r_8[nbinew]; memset(SumW, 0,mBins*sizeof(r_8)); 258 276 } 259 277 260 278 // Remplissage des parties propres au HPprof 261 for(int i=0;i<bins;i++) {262 floatxmi = BinLowEdge(i);263 floatxma = BinHighEdge(i);264 int imi = H.FindBin(xmi);279 for(int_4 i=0;i<mBins;i++) { 280 r_8 xmi = BinLowEdge(i); 281 r_8 xma = BinHighEdge(i); 282 int_4 imi = H.FindBin(xmi); 265 283 if( imi < 0 ) imi = 0; 266 int ima = H.FindBin(xma);267 if( ima >= H. bins ) ima = H.bins-1;268 doublewY = 0., wY2 = 0., wW = 0.;284 int_4 ima = H.FindBin(xma); 285 if( ima >= H.mBins ) ima = H.mBins-1; 286 r_8 wY = 0., wY2 = 0., wW = 0.; 269 287 if( ima == imi ) { 270 288 wY = H.SumY[imi] * binWidth/H.binWidth; … … 278 296 wW += H.SumW[imi] * (H.BinHighEdge(imi)-xmi)/H.binWidth; 279 297 wW += H.SumW[ima] * (xma -H.BinLowEdge(ima))/H.binWidth; 280 if(ima>imi+1) for(int ii=imi+1;ii<ima;ii++)298 if(ima>imi+1) for(int_4 ii=imi+1;ii<ima;ii++) 281 299 {wY += H.SumY[ii]; wY2 += H.SumY2[ii]; wW += H.SumW[ii];} 282 300 } … … 305 323 306 324 // Lecture des valeurs 307 is.Get(dobj-> bins);325 is.Get(dobj->mBins); 308 326 is.Get(dobj->YMin); 309 327 is.Get(dobj->YMax); … … 313 331 // Lecture des donnees propres a l'histogramme de profil. 314 332 is.GetLine(strg,255); 315 dobj->SumY = new double[dobj->bins];316 dobj->SumY2 = new double[dobj->bins];317 dobj->SumW = new double[dobj->bins];318 is.Get(dobj->SumY, dobj-> bins);319 is.Get(dobj->SumY2, dobj-> bins);320 is.Get(dobj->SumW, dobj-> bins);333 dobj->SumY = new r_8[dobj->mBins]; 334 dobj->SumY2 = new r_8[dobj->mBins]; 335 dobj->SumW = new r_8[dobj->mBins]; 336 is.Get(dobj->SumY, dobj->mBins); 337 is.Get(dobj->SumY2, dobj->mBins); 338 is.Get(dobj->SumW, dobj->mBins); 321 339 322 340 // Lecture de l'histogramme … … 337 355 338 356 // Ecriture des valeurs 339 os.Put(dobj-> bins);357 os.Put(dobj->mBins); 340 358 os.Put(dobj->YMin); 341 359 os.Put(dobj->YMax); … … 345 363 sprintf(strg,"HProf: SumY SumY2 SumW"); 346 364 os.PutLine(strg); 347 os.Put(dobj->SumY, dobj-> bins);348 os.Put(dobj->SumY2, dobj-> bins);349 os.Put(dobj->SumW, dobj-> bins);365 os.Put(dobj->SumY, dobj->mBins); 366 os.Put(dobj->SumY2, dobj->mBins); 367 os.Put(dobj->SumW, dobj->mBins); 350 368 351 369 // Ecriture de l'histogramme
Note:
See TracChangeset
for help on using the changeset viewer.