Changeset 3062 in Sophya
- Timestamp:
- Aug 14, 2006, 8:24:21 PM (19 years ago)
- Location:
- trunk/SophyaLib/NTools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/generaldata.cc
r2870 r3062 48 48 indique que l'on fournit des erreurs sur les ``nVar'' variables en abscisse. 49 49 */ 50 GeneralFitData::GeneralFitData(u nsigned int nVar, unsigned intndatalloc, uint_2 errx)50 GeneralFitData::GeneralFitData(uint_4 nVar, uint_4 ndatalloc, uint_2 errx) 51 51 : mNVar(0), mNDataAlloc(0), mNData(0), mNDataGood(0), mOk_EXP(0) 52 52 , mXP(NULL), mErrXP(NULL), mF(NULL), mErr(NULL), mOK(NULL) … … 83 83 if(data.mNData>0) { 84 84 r_8* ret; 85 for(int i=0;i<data.mNData;i++) {85 for(int_4 i=0;i<data.mNData;i++) { 86 86 if( clean && data.mOK[i]==0 ) continue; 87 87 ret = data.GetVec(i,NULL); … … 120 120 Pour redefinir la structure de donnees (ou la creer si on a utilise 121 121 le createur par defaut). Voir les explications des arguments 122 dans les commentaires du constructeur. Si ``errx''\<0 alors 123 la valeur prise est celle definie auparavent. 124 */ 125 void GeneralFitData::Alloc(unsigned int nVar, unsigned int ndatalloc, int_2 errx) 126 { 127 ASSERT( nVar>0 && ndatalloc>0 ); 128 122 dans les commentaires du constructeur. 123 */ 124 void GeneralFitData::Alloc(uint_4 nVar, uint_4 ndatalloc, uint_2 errx) 125 { 129 126 Delete(); 130 131 if(errx>=0) mOk_EXP = (uint_2) errx; 127 if(nVar<=0 || ndatalloc<=0) return; 128 132 129 mNVar = nVar; 133 130 mNDataAlloc = ndatalloc; 134 131 135 132 try { 136 mXP = new r_8[nVar*ndatalloc]; 137 if(mOk_EXP) mErrXP = new r_8[nVar*ndatalloc]; 138 mF = new r_8[ndatalloc]; 139 mErr = new r_8[ndatalloc]; 140 mOK = new uint_2[ndatalloc]; 133 mXP = new r_8[nVar*ndatalloc]; memset(mXP,0,nVar*ndatalloc*sizeof(r_8)); 134 if(errx) { 135 mErrXP = new r_8[nVar*ndatalloc]; memset(mErrXP,0,nVar*ndatalloc*sizeof(r_8)); 136 mOk_EXP = errx; 137 } 138 mF = new r_8[ndatalloc]; memset(mF,0,ndatalloc*sizeof(r_8)); 139 mErr = new r_8[ndatalloc]; memset(mErr,0,ndatalloc*sizeof(r_8)); 140 mOK = new uint_2[ndatalloc]; memset(mOK,0,ndatalloc*sizeof(uint_2)); 141 141 BuffVar = new r_8[2*nVar+3]; 142 142 BuffVarR4 = (r_4 *) BuffVar; … … 154 154 mNVar = mNDataAlloc = mNData = mNDataGood = 0; 155 155 if( mXP != NULL ) {delete [] mXP; mXP = NULL;} 156 if( mErrXP != NULL ) {delete [] mErrXP; mErrXP = NULL; }156 if( mErrXP != NULL ) {delete [] mErrXP; mErrXP = NULL; mOk_EXP = 0;} 157 157 if( mF != NULL ) {delete [] mF; mF = NULL;} 158 158 if( mErr != NULL ) {delete [] mErr; mErr = NULL;} … … 167 167 sont sur-ecrites. 168 168 */ 169 void GeneralFitData::SetDataPtr(int ptr)170 { 171 ASSERT(ptr >= 0 && ptr < mNDataAlloc);169 void GeneralFitData::SetDataPtr(int_4 ptr) 170 { 171 if(ptr<0 || ptr>=mNDataAlloc) return; 172 172 mNData = ptr; 173 173 mNDataGood = 0; 174 174 if(ptr==0) return; 175 for(int i=0;i<mNData;i++) if(mOK[i]) mNDataGood++; 175 for(int_4 i=0;i<mNData;i++) if(mOK[i]) mNDataGood++; 176 } 177 178 /////////////////////////////////////////////////////////////////// 179 /*! 180 Operateur gd1 = gd2 181 */ 182 GeneralFitData& GeneralFitData::operator = (const GeneralFitData& g) 183 { 184 if(this == &g) return *this; 185 186 Alloc(g.mNVar,g.mNDataAlloc,g.mOk_EXP); 187 188 if(g.mXP) memcpy(mXP,g.mXP,mNVar*mNDataAlloc*sizeof(r_8)); 189 if(g.mErrXP) memcpy(mErrXP,g.mErrXP,mNVar*mNDataAlloc*sizeof(r_8)); 190 if(g.mF) memcpy(mF,g.mF,mNDataAlloc*sizeof(r_8)); 191 if(g.mErr) memcpy(mErr,g.mErr,mNDataAlloc*sizeof(r_8)); 192 if(g.mOK) memcpy(mOK,g.mOK,mNDataAlloc*sizeof(uint_2)); 193 194 return *this; 176 195 } 177 196 … … 180 199 Pour tuer un point 181 200 */ 182 void GeneralFitData::KillData(int i)183 { 184 ASSERT(i >= 0 && i < mNData);201 void GeneralFitData::KillData(int_4 i) 202 { 203 if(i<0 || i>=mNData) return; 185 204 186 205 if( ! mOK[i] ) return; … … 192 211 Pour tuer une serie de points 193 212 */ 194 void GeneralFitData::KillData(int i1,inti2)195 { 196 ASSERT(i1 >= 0 && i1 < mNData);197 ASSERT(i2 >= 0 && i2 < mNData);198 ASSERT(i1 <= i2 );199 200 for(int i=i1;i<=i2;i++) KillData(i);213 void GeneralFitData::KillData(int_4 i1,int_4 i2) 214 { 215 if(i1<0 || i1>=mNData) return; 216 if(i2<0 || i2>=mNData) return; 217 if(i1>i2) return; 218 219 for(int_4 i=i1;i<=i2;i++) KillData(i); 201 220 } 202 221 … … 205 224 Pour re-valider le point numero i ([0,NData]). 206 225 */ 207 void GeneralFitData::ValidData(int i)208 { 209 ASSERT(i >= 0 && i < mNData);226 void GeneralFitData::ValidData(int_4 i) 227 { 228 if(i<0 || i>=mNData) return; 210 229 211 230 if( mOK[i] ) return; 212 231 if( mErr[i]<=0. ) return; 213 232 if(mOk_EXP) { 214 for(int j=0;j<mNVar;j++) if(mErrXP[i*mNVar+j]<=0.) return;233 for(int_4 j=0;j<mNVar;j++) if(mErrXP[i*mNVar+j]<=0.) return; 215 234 } 216 235 mOK[i] = 1; … … 221 240 Pour re-valider les points numeros i1 a i2. 222 241 */ 223 void GeneralFitData::ValidData(int i1,inti2)224 { 225 ASSERT(i1 >= 0 && i1 < mNData);226 ASSERT(i2 >= 0 && i2 < mNData);227 ASSERT(i1 <= i2 );228 229 for(int i=i1;i<=i2;i++) ValidData(i);242 void GeneralFitData::ValidData(int_4 i1,int_4 i2) 243 { 244 if(i1<0 || i1>=mNData) return; 245 if(i2<0 || i2>=mNData) return; 246 if(i1>i2) return; 247 248 for(int_4 i=i1;i<=i2;i++) ValidData(i); 230 249 } 231 250 … … 235 254 void GeneralFitData::ValidData() 236 255 { 237 for(int i=0;i<mNData;i++) ValidData(i);256 for(int_4 i=0;i<mNData;i++) ValidData(i); 238 257 } 239 258 … … 242 261 Pour redefinir un point a \f$ {x,[errx] ; f,err} \f$ 243 262 */ 244 void GeneralFitData::RedefineData1(int i,double x,double f,double err,double errx)263 void GeneralFitData::RedefineData1(int_4 i,double x,double f,double err,double errx) 245 264 { 246 265 RedefineData(i,&x,f,err,&errx); … … 250 269 Pour redefinir un point a \f$ {x,[errx], y,[erry] ; f,err} \f$ 251 270 */ 252 void GeneralFitData::RedefineData2(int i,double x,double y,double f271 void GeneralFitData::RedefineData2(int_4 i,double x,double y,double f 253 272 ,double err,double errx,double erry) 254 273 { … … 262 281 \f$ {xp[0],[errxp[0]], xp[1],[errxp[1]], xp[2],[errxp[2]],... ; f,err} \f$ 263 282 */ 264 void GeneralFitData::RedefineData(int i,double* xp,double f,double err,double* errxp)265 { 266 ASSERT(i>=0 && i<mNData);283 void GeneralFitData::RedefineData(int_4 i,double* xp,double f,double err,double* errxp) 284 { 285 if(i<0 || i>=mNData) return; 267 286 bool ok = true; 268 287 269 int ip = mNVar*i;270 for(int j=0;j<mNVar;j++) mXP[ip+j] = xp[j];288 int_4 ip = mNVar*i; 289 for(int_4 j=0;j<mNVar;j++) mXP[ip+j] = xp[j]; 271 290 if(mOk_EXP) { 272 291 if(errxp) { 273 for(int j=0;j<mNVar;j++)292 for(int_4 j=0;j<mNVar;j++) 274 293 {mErrXP[ip+j] = errxp[j]; if(errxp[j]<=0.) ok=false;} 275 294 } else { 276 for(int j=0;j<mNVar;j++) mErrXP[ip+j] = Def_ErrX;295 for(int_4 j=0;j<mNVar;j++) mErrXP[ip+j] = Def_ErrX; 277 296 ok=false; 278 297 } … … 313 332 void GeneralFitData::AddData(double* xp, double f, double err,double* errxp) 314 333 { 315 ASSERT(mNData < mNDataAlloc); 334 if(mNData >= mNDataAlloc) 335 {cout<<"GeneralFitData::AddData Error: no space left"<<endl;; return;} 336 316 337 bool ok = true; 317 338 318 int ip = mNVar*mNData;319 for(int i=0;i<mNVar;i++) mXP[ip+i] = xp[i];339 int_4 ip = mNVar*mNData; 340 for(int_4 i=0;i<mNVar;i++) mXP[ip+i] = xp[i]; 320 341 if(mOk_EXP) { 321 342 if(errxp) { 322 for(int j=0;j<mNVar;j++)343 for(int_4 j=0;j<mNVar;j++) 323 344 {mErrXP[ip+j] = errxp[j]; if(errxp[j]<=0.) ok=false;} 324 345 } else { 325 for(int j=0;j<mNVar;j++) mErrXP[ip+j] = Def_ErrX;346 for(int_4 j=0;j<mNVar;j++) mErrXP[ip+j] = Def_ErrX; 326 347 ok=false; 327 348 } … … 340 361 void GeneralFitData::AddData(float* xp, float f, float err, float* errxp) 341 362 { 342 {for(int i=0;i<mNVar;i++) BuffVar[i] = (double) xp[i];}343 if(errxp) for(int i=0;i<mNVar;i++) BuffVar[mNVar+i] = (double) errxp[i];363 {for(int_4 i=0;i<mNVar;i++) BuffVar[i] = (double) xp[i];} 364 if(errxp) for(int_4 i=0;i<mNVar;i++) BuffVar[mNVar+i] = (double) errxp[i]; 344 365 AddData(BuffVar,(double) f,(double) err,BuffVar+mNVar); 345 366 } … … 350 371 \f$ {x(i),[errx(i)] ; f(i),err(i)} \f$ 351 372 */ 352 void GeneralFitData::SetData1(int nData373 void GeneralFitData::SetData1(int_4 nData 353 374 , double* x, double* f, double *err, double *errx) 354 375 { 355 ASSERT(nData>0 && mNData+nData<=mNDataAlloc); 356 357 for(int i=0;i<nData;i++) { 376 if(nData<=0) return; 377 if(mNData+nData>mNDataAlloc) 378 {cout<<"GeneralFitData::SetData1 Error: no space left"<<endl;; return;} 379 380 for(int_4 i=0;i<nData;i++) { 358 381 double ex = (errx) ? errx[i]: Def_ErrX; 359 382 double ef = (err ) ? err[i]: Def_ErrF; … … 366 389 \f$ {x(i),[errx(i)] ; f(i),err(i)} \f$ 367 390 */ 368 void GeneralFitData::SetData1(int nData391 void GeneralFitData::SetData1(int_4 nData 369 392 , float* x, float* f, float* err, float *errx) 370 393 { 371 ASSERT(nData>0 && mNData+nData<=mNDataAlloc); 372 373 for(int i=0;i<nData;i++) { 394 if(nData<=0) return; 395 if(mNData+nData>mNDataAlloc) 396 {cout<<"GeneralFitData::SetData1 Error: no space left"<<endl;; return;} 397 398 for(int_4 i=0;i<nData;i++) { 374 399 double ex = (errx) ? (double) errx[i]: Def_ErrX; 375 400 double ef = (err ) ? (double) err[i]: Def_ErrF; … … 382 407 \f$ {x(i),[errx(i)], y(i),[erry(i)], ; f(i),err(i)} \f$ 383 408 */ 384 void GeneralFitData::SetData2(int nData, double* x, double* y, double* f409 void GeneralFitData::SetData2(int_4 nData, double* x, double* y, double* f 385 410 ,double *err,double *errx,double *erry) 386 411 { 387 ASSERT(nData>0 && mNData+nData<=mNDataAlloc); 388 389 for(int i=0;i<nData;i++) { 412 if(nData<=0) return; 413 if(mNData+nData>mNDataAlloc) 414 {cout<<"GeneralFitData::SetData2 Error: no space left"<<endl;; return;} 415 416 for(int_4 i=0;i<nData;i++) { 390 417 double ex = (errx) ? (double) errx[i]: Def_ErrX; 391 418 double ey = (erry) ? (double) erry[i]: Def_ErrX; … … 399 426 \f$ {x(i),[errx(i)], y(i),[erry(i)], ; f(i),err(i)} \f$ 400 427 */ 401 void GeneralFitData::SetData2(int nData, float* x, float* y, float* f428 void GeneralFitData::SetData2(int_4 nData, float* x, float* y, float* f 402 429 ,float *err,float *errx,float *erry) 403 430 { 404 ASSERT(nData>0 && mNData+nData<=mNDataAlloc); 405 406 for(int i=0;i<nData;i++) { 431 if(nData<=0) return; 432 if(mNData+nData>mNDataAlloc) 433 {cout<<"GeneralFitData::SetData2 Error: no space left"<<endl;; return;} 434 435 for(int_4 i=0;i<nData;i++) { 407 436 double ex = (errx) ? (double) errx[i]: Def_ErrX; 408 437 double ey = (erry) ? (double) erry[i]: Def_ErrX; … … 426 455 \endverbatim 427 456 */ 428 void GeneralFitData::SetData(int nData,double** xp, double *f457 void GeneralFitData::SetData(int_4 nData,double** xp, double *f 429 458 , double *err, double** errxp) 430 459 { 431 ASSERT(nData>0 && mNData+nData<=mNDataAlloc); 432 if(mOk_EXP && !errxp) {for(int j=0;j<mNVar;j++) BuffVar[mNVar+j] = Def_ErrX;} 433 434 for(int i=0;i<nData;i++) { 435 {for(int j=0;j<mNVar;j++) BuffVar[j] = *(xp[j]+i);} 460 if(nData<=0) return; 461 if(mNData+nData>mNDataAlloc) 462 {cout<<"GeneralFitData::SetData Error: no space left"<<endl;; return;} 463 464 if(mOk_EXP && !errxp) {for(int_4 j=0;j<mNVar;j++) BuffVar[mNVar+j] = Def_ErrX;} 465 466 for(int_4 i=0;i<nData;i++) { 467 {for(int_4 j=0;j<mNVar;j++) BuffVar[j] = *(xp[j]+i);} 436 468 if(mOk_EXP && errxp) 437 {for(int j=0;j<mNVar;j++) BuffVar[mNVar+j] = *(errxp[j]+i);}469 {for(int_4 j=0;j<mNVar;j++) BuffVar[mNVar+j] = *(errxp[j]+i);} 438 470 double ef = (err) ? err[i]: Def_ErrF; 439 471 AddData(BuffVar,f[i],ef,BuffVar+mNVar); … … 444 476 Voir commentaire ci-dessus. 445 477 */ 446 void GeneralFitData::SetData(int nData,float** xp, float *f478 void GeneralFitData::SetData(int_4 nData,float** xp, float *f 447 479 , float *err, float** errxp) 448 480 { 449 ASSERT(nData>0 && mNData+nData<=mNDataAlloc); 450 451 if(mOk_EXP && !errxp) {for(int j=0;j<mNVar;j++) BuffVar[mNVar+j] = Def_ErrX;} 452 453 for(int i=0;i<nData;i++) { 454 {for(int j=0;j<mNVar;j++) BuffVar[j] = (double) *(xp[j]+i);} 481 if(nData<=0) return; 482 if(mNData+nData>mNDataAlloc) 483 {cout<<"GeneralFitData::SetData Error: no space left"<<endl;; return;} 484 485 if(mOk_EXP && !errxp) {for(int_4 j=0;j<mNVar;j++) BuffVar[mNVar+j] = Def_ErrX;} 486 487 for(int_4 i=0;i<nData;i++) { 488 {for(int_4 j=0;j<mNVar;j++) BuffVar[j] = (double) *(xp[j]+i);} 455 489 if(mOk_EXP && errxp) 456 {for(int j=0;j<mNVar;j++) BuffVar[mNVar+j] = (double) *(errxp[j]+i);}490 {for(int_4 j=0;j<mNVar;j++) BuffVar[mNVar+j] = (double) *(errxp[j]+i);} 457 491 double ef = (err) ? err[i]: Def_ErrF; 458 492 AddData(BuffVar,(double) f[i],ef,BuffVar+mNVar); … … 476 510 Impression du point i 477 511 */ 478 void GeneralFitData::PrintData(int i) const479 { 480 ASSERT(i>=0 && i<mNData);512 void GeneralFitData::PrintData(int_4 i) const 513 { 514 if(i<0 || i>=mNData) return; 481 515 482 516 cout<<" "<<i<<" F( "; 483 {for(int j=0;j<mNVar;j++) cout<<" "<<Absc(j,i);}517 {for(int_4 j=0;j<mNVar;j++) cout<<" "<<Absc(j,i);} 484 518 if(mOk_EXP) { 485 519 cout<<" ; "; 486 for(int j=0;j<mNVar;j++) cout<<" "<<EAbsc(j,i);520 for(int_4 j=0;j<mNVar;j++) cout<<" "<<EAbsc(j,i); 487 521 } 488 522 cout<<")= "<<Val(i)<<" "<<EVal(i)<<" ("<<IsValid(i)<<")\n"; … … 492 526 Impression des points i1 a i2 493 527 */ 494 void GeneralFitData::PrintData(int i1,inti2) const528 void GeneralFitData::PrintData(int_4 i1,int_4 i2) const 495 529 { 496 530 if(i1<0) i1=0; … … 501 535 cout<<"GeneralFitData::PrintData[NData=" 502 536 <<mNData<<"/ NDataGood="<<mNDataGood<<"]"<<endl; 503 for(int i=i1;i<=i2;i++) PrintData(i);537 for(int_4 i=i1;i<=i2;i++) PrintData(i); 504 538 cout<<flush; 505 539 } … … 510 544 void GeneralFitData::PrintData() const 511 545 { 512 ASSERT(mNData>0);546 if(mNData<=0) return; 513 547 514 548 PrintData(0,mNData-1); … … 523 557 os<<"GeneralFitData:: NVar,ErrX="<<mNVar<<","<<mOk_EXP 524 558 <<" Data: "<<mNData<<" Good,Alloc="<<mNDataGood<<","<<mNDataAlloc<<endl; 525 for(int k=0;k<2*NVar()+3;k++) {559 for(int_4 k=0;k<2*NVar()+3;k++) { 526 560 GetMinMax(k,min,max); 527 561 os<<" - "<<k<<" "<<ColumnName(k)<<" , "<<min<<","<<max<<endl; … … 543 577 \endverbatim 544 578 */ 545 int GeneralFitData::GetMnMx(int var,int& imin,int& imax) const579 int_4 GeneralFitData::GetMnMx(int_4 var,int_4& imin,int_4& imax) const 546 580 { 547 581 imin = imax = -1; 548 int ix = var/10;582 int_4 ix = var/10; 549 583 var = var%10; 550 584 if(var<0 || var>3) return -1; 551 585 if(var>=2 && (ix<0 || ix>=mNVar) ) return -1; 552 586 double min=1., max=-1.; 553 int ntest = 0;554 for(int i=0;i<mNData;i++) {587 int_4 ntest = 0; 588 for(int_4 i=0;i<mNData;i++) { 555 589 if( ! IsValid(i) ) continue; 556 590 double v; … … 571 605 (cf commentaires GetMnMx). 572 606 */ 573 int GeneralFitData::GetMnMx(intvar,double& min,double& max) const607 int_4 GeneralFitData::GetMnMx(int_4 var,double& min,double& max) const 574 608 { 575 609 min = 1.; max = -1.; 576 int imin,imax;577 int ntest = GetMnMx(var,imin,imax);610 int_4 imin,imax; 611 int_4 ntest = GetMnMx(var,imin,imax); 578 612 if(ntest<=0) return ntest; 579 int ix = var/10;613 int_4 ix = var/10; 580 614 var = var%10; 581 615 if(var==0) { … … 606 640 \endverbatim 607 641 */ 608 int GeneralFitData::GetMeanSigma(intvar,double& mean,double& sigma,double min,double max) const642 int_4 GeneralFitData::GetMeanSigma(int_4 var,double& mean,double& sigma,double min,double max) const 609 643 { 610 644 mean = sigma = 0.; 611 int ix = var/10;645 int_4 ix = var/10; 612 646 var = var%10; 613 647 if(var<0 || var>3) return -1; 614 648 if(var>=2 && (ix<0 || ix>=mNVar) ) return -1; 615 int ntest = 0;616 for(int i=0;i<mNData;i++) {649 int_4 ntest = 0; 650 for(int_4 i=0;i<mNData;i++) { 617 651 if( ! IsValid(i) ) continue; 618 652 double v; … … 649 683 \endverbatim 650 684 */ 651 int GeneralFitData::GetMoMeMed(intvar,double& mode,double& mean,double& median,685 int_4 GeneralFitData::GetMoMeMed(int_4 var,double& mode,double& mean,double& median, 652 686 double min,double max,double coeff) const 653 687 { 654 688 mode = mean = median = 0.; 655 689 if(mNData<=0) return -1; 656 int ix = var/10;690 int_4 ix = var/10; 657 691 var = var%10; 658 692 if(var<0 || var>3) return -1; 659 693 if(var>=2 && (ix<0 || ix>=mNVar) ) return -1; 660 694 double* buff = new double[mNData]; 661 int ntest = 0;662 for(int i=0;i<mNData;i++) {695 int_4 ntest = 0; 696 for(int_4 i=0;i<mNData;i++) { 663 697 if( ! IsValid(i) ) continue; 664 698 double v; … … 677 711 mean /= (double)ntest; 678 712 qsort(buff,(size_t) ntest,sizeof(double),qSort_Dble); 679 int im;713 int_4 im; 680 714 if(ntest%2==1) { 681 715 // nombre impair de points … … 696 730 Cf description ci-dessus ``GetMoMeMed''. 697 731 */ 698 int GeneralFitData::GetMode(intvar,double& mode,double min,double max,double coeff) const732 int_4 GeneralFitData::GetMode(int_4 var,double& mode,double min,double max,double coeff) const 699 733 { 700 734 double mean,median; … … 718 752 \endverbatim 719 753 */ 720 double GeneralFitData::PolFit(int varx,Poly& pol,intdegre,bool ey,double xc) const754 double GeneralFitData::PolFit(int_4 varx,Poly& pol,int_4 degre,bool ey,double xc) const 721 755 { 722 756 if(degre<0) return -1.; … … 727 761 TVector<r_8> ey2(1); 728 762 if(ey) ey2.Realloc(mNDataGood,true); 729 int ntest = 0;730 for(int i=0;i<mNData;i++) {763 int_4 ntest = 0; 764 for(int_4 i=0;i<mNData;i++) { 731 765 if( ! IsValid(i) ) continue; 732 766 if(ntest>=mNDataGood) return -5.; … … 767 801 \endverbatim 768 802 */ 769 double GeneralFitData::PolFit(int varx,int vary,Poly2& pol,int degre1,intdegre2,bool ez803 double GeneralFitData::PolFit(int_4 varx,int_4 vary,Poly2& pol,int_4 degre1,int_4 degre2,bool ez 770 804 ,double xc,double yc) const 771 805 { … … 779 813 TVector<r_8> ez2(1); 780 814 if(ez) ez2.Realloc(mNDataGood,true); 781 int ntest = 0;782 for(int i=0;i<mNData;i++) {815 int_4 ntest = 0; 816 for(int_4 i=0;i<mNData;i++) { 783 817 if( ! IsValid(i) ) continue; 784 818 if(ntest>=mNDataGood) return -5.; … … 834 868 \endverbatim 835 869 */ 836 r_8* GeneralFitData::GetVec(int n, r_8* ret) const837 { 838 int i;870 r_8* GeneralFitData::GetVec(int_4 n, r_8* ret) const 871 { 872 int_4 i; 839 873 if (ret == NULL) ret = BuffVar; 840 874 for(i=0; i<2*mNVar+3; i++) ret[i] = 0.; … … 853 887 (meme commentaires que pour GetVec). 854 888 */ 855 r_4* GeneralFitData::GetVecR4(int n, r_4* ret) const889 r_4* GeneralFitData::GetVecR4(int_4 n, r_4* ret) const 856 890 { 857 891 if (ret == NULL) ret = BuffVarR4; 858 892 double *buff = new double[2*mNVar+3]; 859 893 GetVec(n,buff); 860 for(int i=0;i<2*mNVar+3;i++) ret[i] = (float) buff[i];894 for(int_4 i=0;i<2*mNVar+3;i++) ret[i] = (float) buff[i]; 861 895 delete [] buff; 862 896 return ret; … … 917 951 void GeneralFitData::GetMinMax(sa_size_t k, double& min, double& max) const 918 952 { 919 int var;953 int_4 var; 920 954 if(k<0 || k>=2*NVar()+3) return; 921 955 else if(k<NVar()) var = 10*k+2; // Variable Xi … … 938 972 sa_size_t GeneralFitData::ColumnIndex(string const & nom) const 939 973 { 940 char str[64]; int k = -1;974 char str[64]; int_4 k = -1; 941 975 strcpy(str,nom.c_str()); strip(str,'L',' '); 942 976 if(str[0]=='y') return 2*NVar(); … … 972 1006 char buff[256]; 973 1007 string rets; 974 int i;1008 int_4 i; 975 1009 rets = "\ndouble"; 976 1010 for(i=0; i<mNVar; i++) { … … 1081 1115 1082 1116 // Allocation de la place (attention Alloc efface mNData,mNDataGood); 1083 dobj->Alloc(nvar,ndatalloc, -1);1117 dobj->Alloc(nvar,ndatalloc,dobj->mOk_EXP); 1084 1118 dobj->mNData = ndata; 1085 1119 dobj->mNDataGood = ndatagood; … … 1087 1121 // Lecture des datas 1088 1122 is.GetLine(strg, 255); 1089 int blen = dobj->mNVar + 3;1123 int_4 blen = dobj->mNVar + 3; 1090 1124 if(dobj->mOk_EXP) blen += dobj->mNVar; 1091 1125 double *buff = new double[blen]; 1092 for(int i=0;i<dobj->mNData;i++) {1126 for(int_4 i=0;i<dobj->mNData;i++) { 1093 1127 is.Get(buff, blen); 1094 int ip = i*dobj->mNVar;1095 {for(int j=0;j<dobj->mNVar;j++) dobj->mXP[ip+j] = buff[j];}1128 int_4 ip = i*dobj->mNVar; 1129 {for(int_4 j=0;j<dobj->mNVar;j++) dobj->mXP[ip+j] = buff[j];} 1096 1130 dobj->mF[i] = buff[dobj->mNVar]; 1097 1131 dobj->mErr[i] = buff[dobj->mNVar+1]; 1098 1132 dobj->mOK[i] = (uint_2)(buff[dobj->mNVar+2]+0.01); 1099 if(dobj->mOk_EXP) {for(int j=0;j<dobj->mNVar;j++)1133 if(dobj->mOk_EXP) {for(int_4 j=0;j<dobj->mNVar;j++) 1100 1134 dobj->mErrXP[ip+j] = buff[dobj->mNVar+3+j];} 1101 1135 } … … 1129 1163 os.PutLine(strg); 1130 1164 1131 int blen = dobj->mNVar + 3;1165 int_4 blen = dobj->mNVar + 3; 1132 1166 if(dobj->mOk_EXP) blen += dobj->mNVar; 1133 1167 double *buff = new double[blen]; 1134 for(int i=0;i<dobj->mNData;i++) {1135 {for(int j=0;j<dobj->mNVar;j++) buff[j] = dobj->Absc(j,i);}1168 for(int_4 i=0;i<dobj->mNData;i++) { 1169 {for(int_4 j=0;j<dobj->mNVar;j++) buff[j] = dobj->Absc(j,i);} 1136 1170 buff[dobj->mNVar] = dobj->Val(i); 1137 1171 buff[dobj->mNVar+1] = dobj->EVal(i); 1138 1172 buff[dobj->mNVar+2] = (double) dobj->IsValid(i); 1139 if(dobj->mOk_EXP) {for(int j=0;j<dobj->mNVar;j++) buff[dobj->mNVar+3+j] = dobj->EAbsc(j,i);}1173 if(dobj->mOk_EXP) {for(int_4 j=0;j<dobj->mNVar;j++) buff[dobj->mNVar+3+j] = dobj->EAbsc(j,i);} 1140 1174 os.Put(buff, blen); 1141 1175 } -
trunk/SophyaLib/NTools/generaldata.h
r2683 r3062 13 13 namespace SOPHYA { 14 14 15 // Forward class declaration for Fits handler 16 template <class T> class FitsHandler; 17 15 18 class GeneralFit; 16 19 … … 23 26 friend class GeneralFit; 24 27 friend class ObjFileIO<GeneralFitData>; 28 friend class FitsHandler<GeneralFitData>; 25 29 public: 26 30 //! Valeurs par defaut pour l'utilisation des erreurs … … 30 34 }; 31 35 32 GeneralFitData(u nsigned int nVar, unsigned intnDataAlloc, uint_2 errx=0);36 GeneralFitData(uint_4 nVar, uint_4 nDataAlloc, uint_2 errx=0); 33 37 GeneralFitData(const GeneralFitData& data, bool clean=false); 34 38 GeneralFitData(); 35 39 virtual ~GeneralFitData(); 36 40 37 void Alloc(unsigned int nVar, unsigned int nDataAlloc, int_2 errx=-1); 38 void SetDataPtr(int ptr = 0); 39 40 void KillData(int i); 41 void KillData(int i1,int i2); 42 43 void ValidData(int i); 44 void ValidData(int i1,int i2); 41 void SetDataPtr(int_4 ptr = 0); 42 43 void KillData(int_4 i); 44 void KillData(int_4 i1,int_4 i2); 45 46 void ValidData(int_4 i); 47 void ValidData(int_4 i1,int_4 i2); 45 48 void ValidData(); 46 49 47 void RedefineData1(int i,double x,double f,double err=Def_ErrF,double errx=Def_ErrX);48 void RedefineData2(int i,double x,double y,double f,double err=Def_ErrF50 void RedefineData1(int_4 i,double x,double f,double err=Def_ErrF,double errx=Def_ErrX); 51 void RedefineData2(int_4 i,double x,double y,double f,double err=Def_ErrF 49 52 ,double errx=Def_ErrX,double erry=Def_ErrX); 50 void RedefineData(int i,double* xp,double f,double err=Def_ErrF,double* errxp=NULL);53 void RedefineData(int_4 i,double* xp,double f,double err=Def_ErrF,double* errxp=NULL); 51 54 52 55 void AddData1(double x, double f, double err=Def_ErrF,double errx=Def_ErrX); … … 56 59 void AddData(float* xp, float f, float err=Def_ErrF,float* errxp=NULL); 57 60 58 void SetData1(int nData,double* x,double* f,double *err=NULL,double *errx=NULL);59 void SetData1(int nData,float* x,float* f,float* err=NULL,float *errx=NULL);60 void SetData2(int nData,double* x,double* y,double* f,double *err=NULL61 void SetData1(int_4 nData,double* x,double* f,double *err=NULL,double *errx=NULL); 62 void SetData1(int_4 nData,float* x,float* f,float* err=NULL,float *errx=NULL); 63 void SetData2(int_4 nData,double* x,double* y,double* f,double *err=NULL 61 64 ,double *errx=NULL,double *erry=NULL); 62 void SetData2(int nData,float* x,float* y,float* f,float* err=NULL65 void SetData2(int_4 nData,float* x,float* y,float* f,float* err=NULL 63 66 ,float *errx=NULL,float *erry=NULL); 64 void SetData(int nData,double** xp,double *f,double *err=NULL,double** errxp=NULL);65 void SetData(int nData,float** xp,float* f,float* err=NULL,float** errxp=NULL);67 void SetData(int_4 nData,double** xp,double *f,double *err=NULL,double** errxp=NULL); 68 void SetData(int_4 nData,float** xp,float* f,float* err=NULL,float** errxp=NULL); 66 69 67 70 void PrintStatus() const; 68 void PrintData(int i) const;69 void PrintData(int i1,inti2) const;71 void PrintData(int_4 i) const; 72 void PrintData(int_4 i1,int_4 i2) const; 70 73 void PrintData() const; 71 74 void Show(ostream& os) const; 72 75 inline void Show() const {Show(cout);} 73 76 77 //! Operator equal 78 GeneralFitData& operator = (const GeneralFitData& g); 79 74 80 //! Retourne la place restante dans la structure (nombre de donnees que l'on peut encore stoquer). 75 inline int GetSpaceFree() const { return mNDataAlloc - mNData; }81 inline int_4 GetSpaceFree() const { return mNDataAlloc - mNData; } 76 82 //! Retourne le nombre de variables Xi 77 inline int NVar() const {return mNVar;}83 inline int_4 NVar() const {return mNVar;} 78 84 //! Retourne le nombre de donnees 79 inline int NData() const {return mNData;}85 inline int_4 NData() const {return mNData;} 80 86 //! Retourne le nombre de bonnes donnees (utilisees pour le fit) 81 inline int NDataGood() const {return mNDataGood;}87 inline int_4 NDataGood() const {return mNDataGood;} 82 88 //! Retourne la place maximale allouee pour les donnees 83 inline int NDataAlloc() const {return mNDataAlloc;}89 inline int_4 NDataAlloc() const {return mNDataAlloc;} 84 90 85 91 //! Retourne 1 si point valide, sinon 0 86 inline unsigned short int IsValid(inti) const92 inline unsigned short IsValid(int_4 i) const 87 93 {if(i>=0 && i<mNData) return mOK[i]; else return 0;} 88 94 //! Retourne ``true'' si il y a des erreurs sur les variables d'abscisse, ``false'' sinon. … … 90 96 91 97 //! Retourne l'abscisse pour 1 dimension (y=f(x)) donnee I 92 inline double X1(int i) const98 inline double X1(int_4 i) const 93 99 {if(i>=0 && i<mNData) return mXP[i]; else return 0.;} 94 100 //! Retourne la 1er abscisse (X) pour (v=f(x,y,z,...)) donnee I 95 inline double X(int i) const101 inline double X(int_4 i) const 96 102 {if(i>=0 && i<mNData) return mXP[i*mNVar]; else return 0.;} 97 103 //! Retourne la 2sd abscisse (Y) pour (v=f(x,y,z,...)) donnee I 98 inline double Y(int i) const104 inline double Y(int_4 i) const 99 105 {if(i>=0 && i<mNData && 1<mNVar) return mXP[i*mNVar+1]; else return 0.;} 100 106 //! etourne la 3ieme abscisse (Z) pour (v=f(x,y,z,...)) donnee I 101 inline double Z(int i) const107 inline double Z(int_4 i) const 102 108 {if(i>=0 && i<mNData && 2<mNVar) return mXP[i*mNVar+2]; else return 0.;} 103 109 //! Retourne la Jieme abscisse (Xj) pour (v=f(x0,x1,x2,...)) donnee I 104 inline double Absc(int j,inti) const110 inline double Absc(int_4 j,int_4 i) const 105 111 {if(i>=0 && i<mNData && j<mNVar)return mXP[i*mNVar+j]; else return 0.;} 106 112 //! Retourne la valeur de la Ieme donnee 107 inline double Val(int i) const113 inline double Val(int_4 i) const 108 114 {if(i>=0 && i<mNData) return mF[i]; else return 0.;} 109 115 110 116 //! Retourne l'erreur (dx) sur l'abscisse pour 1 dimension (y=f(x)) donnee I 111 inline double EX1(int i) const117 inline double EX1(int_4 i) const 112 118 {if(mErrXP && i>=0 && i<mNData) return mErrXP[i]; else return 0.;} 113 119 //! Retourne l'erreur (dx) sur la 1er abscisse (X) pour (v=f(x,y,z,...)) donnee I 114 inline double EX(int i) const120 inline double EX(int_4 i) const 115 121 {if(mErrXP && i>=0 && i<mNData) return mErrXP[i*mNVar]; else return 0.;} 116 122 //! Retourne l'erreur (dy) sur la 2sd abscisse (Y) pour (v=f(x,y,z,...)) donnee I 117 inline double EY(int i) const123 inline double EY(int_4 i) const 118 124 {if(mErrXP && i>=0 && i<mNData && 1<mNVar) return mErrXP[i*mNVar+1]; 119 125 else return 0.;} 120 126 //! Retourne l'erreur (dz) sur la 3ieme abscisse (Z) pour (v=f(x,y,z,...)) donnee I 121 inline double EZ(int i) const127 inline double EZ(int_4 i) const 122 128 {if(mErrXP && i>=0 && i<mNData && 2<mNVar) return mErrXP[i*mNVar+2]; 123 129 else return 0.;} 124 130 //! Retourne l'erreur (dxj) sur la Jieme abscisse (Xj) pour (v=f(x0,x1,x2,...)) donnee I 125 inline double EAbsc(int j,inti) const131 inline double EAbsc(int_4 j,int_4 i) const 126 132 {if(mErrXP && i>=0 && i<mNData && j<mNVar) return mErrXP[i*mNVar+j]; 127 133 else return 0.;} 128 134 //! Retourne l'erreur de la Ieme donnee 129 inline double EVal(int i) const135 inline double EVal(int_4 i) const 130 136 {if(i>=0 && i<mNData) return mErr[i]; else return 0.;} 131 137 132 r_8* GetVec(int n, r_8* ret=NULL) const;133 r_4* GetVecR4(int n, r_4* ret=NULL) const;134 int GetMnMx(int var,int& imin,int& imax) const;135 int GetMnMx(intvar,double& min,double& max) const;136 int GetMeanSigma(intvar,double& mean,double& sigma,double min=1.,double max=-1.) const;137 int GetMoMeMed(intvar,double& mode,double& mean,double& median,138 r_8* GetVec(int_4 n, r_8* ret=NULL) const; 139 r_4* GetVecR4(int_4 n, r_4* ret=NULL) const; 140 int_4 GetMnMx(int_4 var,int_4& imin,int_4& imax) const; 141 int_4 GetMnMx(int_4 var,double& min,double& max) const; 142 int_4 GetMeanSigma(int_4 var,double& mean,double& sigma,double min=1.,double max=-1.) const; 143 int_4 GetMoMeMed(int_4 var,double& mode,double& mean,double& median, 138 144 double min=1.,double max=-1.,double coeff=0.8) const; 139 int GetMode(intvar,double& mode,double min=1.,double max=-1.,double coeff=0.8) const;140 double PolFit(int varx,Poly& pol,intdegre,bool ey=true,double xc=0.) const;141 double PolFit(int varx,int vary,Poly2& pol,int degre1,intdegre2=-1,bool ez=true145 int_4 GetMode(int_4 var,double& mode,double min=1.,double max=-1.,double coeff=0.8) const; 146 double PolFit(int_4 varx,Poly& pol,int_4 degre,bool ey=true,double xc=0.) const; 147 double PolFit(int_4 varx,int_4 vary,Poly2& pol,int_4 degre1,int_4 degre2=-1,bool ez=true 142 148 ,double xc=0.,double yc=0.) const; 143 149 GeneralFitData FitResidus(GeneralFit& gfit) const; … … 161 167 162 168 protected: 169 void Alloc(uint_4 nVar, uint_4 nDataAlloc, uint_2 errx=0); 163 170 void Delete(); 164 171
Note:
See TracChangeset
for help on using the changeset viewer.