Changeset 4115 for trunk/psphot/src/psPolynomials.c
- Timestamp:
- Jun 4, 2005, 5:22:13 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/psphot/src/psPolynomials.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/src/psPolynomials.c
r4114 r4115 191 191 // XXX EAM : test version of 1d fitting 192 192 psPolynomial1D* VectorFitPolynomial1DOrd_EAM(psPolynomial1D* myPoly, 193 const psVector* x, 194 const psVector* y, 195 const psVector* yErr) 193 psVector *mask, 194 const psVector *x, 195 const psVector *y, 196 const psVector *yErr) 196 197 { 197 198 // I think this is 1 dimension down … … 232 233 // Build the B and A data structs. 233 234 for (int k = 0; k < x->n; k++) { 235 if ((mask != NULL) && mask->U8[k]) continue; 234 236 xSums = BuildSums1D(xSums, x->data.F64[k], nTerm); 235 237 … … 291 293 // XXX EAM : test version of 2d fitting 292 294 psPolynomial2D* VectorFitPolynomial2DOrd_EAM(psPolynomial2D* myPoly, 293 const psVector* x, 294 const psVector* y, 295 const psVector* z, 296 const psVector* zErr) 295 psVector* mask, 296 const psVector* x, 297 const psVector* y, 298 const psVector* z, 299 const psVector* zErr) 297 300 { 298 301 // I think this is 1 dimension down … … 322 325 // Build the B and A data structs. 323 326 for (int k = 0; k < x->n; k++) { 327 if ((mask != NULL) && mask->data.U8[i]) continue; 324 328 Sums = BuildSums2D(Sums, x->data.F64[k], y->data.F64[k], nXterm, nYterm); 325 329 … … 391 395 } 392 396 393 psPolynomial2D* RobustFit2D (psPolynomial2D* poly,397 psPolynomial2D* RobustFit2D_nomask(psPolynomial2D* poly, 394 398 const psVector* x, 395 399 const psVector* y, … … 413 417 for (int N = 0; N < 3; N++) { 414 418 // XXX EAM : this would be better defined with an element mask 415 poly = VectorFitPolynomial2DOrd_EAM (poly, X, Y, Z, dZ);419 poly = VectorFitPolynomial2DOrd_EAM (poly, NULL, X, Y, Z, dZ); 416 420 zFit = Polynomial2DEvalVectorD (poly, x, y); 417 421 zResid = (psVector *) psBinaryOp (NULL, (void *) z, "-", (void *) zFit); … … 424 428 int n = 0; 425 429 for (int i = 0; i < zResid->n; i++) { 426 if (fabs(zResid->data.F64[i] - stats->clippedMean) > 3*stats->clippedStdev) continue; 430 if (fabs(zResid->data.F64[i] - stats->clippedMean) > 3*stats->clippedStdev) { 431 continue; 432 } 427 433 X->data.F64[n] = x->data.F64[i]; 428 434 Y->data.F64[n] = y->data.F64[i]; … … 435 441 Z->n = n; 436 442 dZ->n = n; 443 } 444 return (poly); 445 } 446 447 // XXX EAM : be careful here with F32 vs F64 vectors 448 psPolynomial2D* RobustFit2D(psPolynomial2D* poly, 449 psVector* mask, 450 const psVector* x, 451 const psVector* y, 452 const psVector* z, 453 const psVector* dz) 454 { 455 psVector *zFit = NULL; 456 psVector *zResid = NULL; 457 psStats *stats = NULL; 458 459 for (int N = 0; N < 3; N++) { 460 poly = VectorFitPolynomial2DOrd_EAM (poly, mask, x, y, z, dz); 461 zFit = Polynomial2DEvalVectorD (poly, x, y); 462 zResid = (psVector *) psBinaryOp (NULL, (void *) z, "-", (void *) zFit); 463 464 stats = psStatsAlloc (PS_STAT_CLIPPED_MEAN | PS_STAT_CLIPPED_STDEV); 465 stats = psVectorStats (stats, zResid, NULL, mask, 1); 466 psTrace (".psphot.RobustFit", 4, "residual stats for robust fit: %g +/- %g (%d pts)\n", 467 stats->clippedMean, stats->clippedStdev, stats->clippedNvalues); 468 469 // set mask if pts are not valid 470 int n = 0; 471 for (int i = 0; i < zResid->n; i++) { 472 if (fabs(zResid->data.F64[i] - stats->clippedMean) > 3*stats->clippedStdev) { 473 mask->data.U8[i] = 1; 474 continue; 475 } else { 476 mask->data.U8[i] = 0; 477 } 478 n++; 479 } 437 480 } 438 481 return (poly);
Note:
See TracChangeset
for help on using the changeset viewer.
