Changeset 30079
- Timestamp:
- Dec 16, 2010, 7:42:46 PM (15 years ago)
- Location:
- tags/ipp-20101215/psLib
- Files:
-
- 5 edited
- 5 copied
-
. (modified) (1 prop)
-
src/imageops/psImageMapFit.c (modified) (1 diff)
-
src/math/psStats.c (modified) (7 diffs)
-
test/math (modified) (1 prop)
-
test/math/data/yraw_01.dat (copied) (copied from trunk/psLib/test/math/data/yraw_01.dat )
-
test/math/data/yraw_02.dat (copied) (copied from trunk/psLib/test/math/data/yraw_02.dat )
-
test/math/data/yraw_03.dat (copied) (copied from trunk/psLib/test/math/data/yraw_03.dat )
-
test/math/data/yraw_04.dat (copied) (copied from trunk/psLib/test/math/data/yraw_04.dat )
-
test/math/mana.stats.pro (copied) (copied from trunk/psLib/test/math/mana.stats.pro )
-
test/math/tap_psStats_Sample_01.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tags/ipp-20101215/psLib
-
Property svn:mergeinfo
set to
/branches/czw_branch/20101203/psLib merged eligible /branches/eam_branches/ipp-20101103/psLib merged eligible /trunk/psLib merged eligible
-
Property svn:mergeinfo
set to
-
tags/ipp-20101215/psLib/src/imageops/psImageMapFit.c
r30044 r30079 83 83 map->map->data.F32[0][0] = psStatsGetValue(map->stats, mean); 84 84 map->error->data.F32[0][0] = psStatsGetValue(map->stats, stdev); 85 *pGoodFit = true; 85 if (isfinite(map->map->data.F32[0][0]) && isfinite( map->error->data.F32[0][0])) { 86 *pGoodFit = true; 87 } 86 88 return true; 87 89 } -
tags/ipp-20101215/psLib/src/math/psStats.c
r28998 r30079 827 827 // values; nearly bi-modal distribution). if so, keep only points within 5? 10? 828 828 // bins of that excess bin: 829 int nMaxBin = 0;829 int nMaxBin = histogram->nums->data.F32[0]; 830 830 int iMaxBin = 0; 831 831 for (long i = 1; i < histogram->nums->n; i++) { … … 843 843 if (mask->data.PS_TYPE_VECTOR_MASK_DATA[i] & maskVal) continue; 844 844 bool invalid = false; 845 invalid |= (myVector->data.F32[i] < =minKeep);846 invalid |= (myVector->data.F32[i] > =maxKeep);845 invalid |= (myVector->data.F32[i] < minKeep); 846 invalid |= (myVector->data.F32[i] > maxKeep); 847 847 invalid |= (!isfinite(myVector->data.F32[i])); 848 848 if (!invalid) continue; … … 852 852 853 853 if (nInvalid) { 854 psTrace(TRACE, 6, "data is concentrated in a single bin, masking %d extreme outliers and retrying\n", nInvalid); 854 psTrace(TRACE, 6, "data is concentrated in a single bin (%d = %f - %f), masking %d extreme outliers and retrying\n", 855 iMaxBin, histogram->bounds->data.F32[iMaxBin], histogram->bounds->data.F32[iMaxBin+1], nInvalid); 855 856 psFree(histogram); 856 857 psFree(cumulative); … … 1108 1109 // If the mean is NAN, then generate a warning and set the stdev to NAN. 1109 1110 if (isnan(stats->robustMedian)) { 1110 stats->fittedStdev = NAN; 1111 stats->fittedStdev = NAN; 1111 stats->fittedMean = NAN; 1112 stats->fittedStdev = NAN; 1113 stats->results |= PS_STAT_FITTED_MEAN; 1114 stats->results |= PS_STAT_FITTED_STDEV; 1115 return true; 1116 } 1117 1118 if (stats->robustStdev <= FLT_EPSILON) { 1119 stats->fittedMean = stats->robustMedian; 1120 stats->fittedStdev = stats->robustStdev; 1121 stats->results |= PS_STAT_FITTED_MEAN; 1122 stats->results |= PS_STAT_FITTED_STDEV; 1112 1123 return true; 1113 1124 } … … 1289 1300 // If the mean is NAN, then generate a warning and set the stdev to NAN. 1290 1301 if (isnan(stats->robustMedian)) { 1291 stats->fittedStdev = NAN; 1292 stats->fittedStdev = NAN; 1293 psTrace(TRACE, 4, "---- %s() end ----\n", __func__); 1302 stats->fittedMean = NAN; 1303 stats->fittedStdev = NAN; 1304 stats->results |= PS_STAT_FITTED_MEAN_V2; 1305 stats->results |= PS_STAT_FITTED_STDEV_V2; 1306 return true; 1307 } 1308 1309 if (stats->robustStdev <= FLT_EPSILON) { 1310 stats->fittedMean = stats->robustMedian; 1311 stats->fittedStdev = stats->robustStdev; 1312 stats->results |= PS_STAT_FITTED_MEAN_V2; 1313 stats->results |= PS_STAT_FITTED_STDEV_V2; 1294 1314 return true; 1295 1315 } … … 1486 1506 // If the mean is NAN, then generate a warning and set the stdev to NAN. 1487 1507 if (isnan(stats->robustMedian)) { 1488 stats->fittedStdev = NAN; 1489 stats->fittedStdev = NAN; 1490 psTrace(TRACE, 4, "---- %s() end ----\n", __func__); 1508 stats->fittedMean = NAN; 1509 stats->fittedStdev = NAN; 1510 stats->results |= PS_STAT_FITTED_MEAN_V3; 1511 stats->results |= PS_STAT_FITTED_STDEV_V3; 1512 return true; 1513 } 1514 1515 if (stats->robustStdev <= FLT_EPSILON) { 1516 stats->fittedMean = stats->robustMedian; 1517 stats->fittedStdev = stats->robustStdev; 1518 stats->results |= PS_STAT_FITTED_MEAN_V3; 1519 stats->results |= PS_STAT_FITTED_STDEV_V3; 1491 1520 return true; 1492 1521 } … … 1782 1811 1783 1812 // If the mean is NAN, then generate a warning and set the stdev to NAN. 1784 if (isnan(stats->robustMedian)) goto escape; 1813 if (isnan(stats->robustMedian)) { 1814 stats->fittedMean = NAN; 1815 stats->fittedStdev = NAN; 1816 stats->results |= PS_STAT_FITTED_MEAN_V4; 1817 stats->results |= PS_STAT_FITTED_STDEV_V4; 1818 return true; 1819 } 1820 1821 if (stats->robustStdev <= FLT_EPSILON) { 1822 stats->fittedMean = stats->robustMedian; 1823 stats->fittedStdev = stats->robustStdev; 1824 stats->results |= PS_STAT_FITTED_MEAN_V4; 1825 stats->results |= PS_STAT_FITTED_STDEV_V4; 1826 return true; 1827 } 1785 1828 1786 1829 float guessStdev = stats->robustStdev; // pass the guess sigma -
tags/ipp-20101215/psLib/test/math
- Property svn:mergeinfo set to
-
tags/ipp-20101215/psLib/test/math/tap_psStats_Sample_01.c
r12513 r30079 487 487 }; 488 488 489 static float yraw_04[] = { 490 -1.000000, 0.000000, 0.000000, 0.000000, 0.000000, -1.000000, -1.000000, -1.000000, 491 0.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, 492 -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -0.963289, 493 -1.000000, 0.000000, -1.000000, -1.000000, -0.915174, -1.000000, -1.000000, -1.000000, 494 -1.000000, -1.000000, 0.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, 495 -1.000000, -1.000000, -1.000000, -0.853025, 0.000000, -1.000000, -1.000000, -1.000000, 496 -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -0.989926, -1.000000, -1.000000, 497 -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -0.834902, -1.000000, -1.000000, 498 -0.942985, -1.000000, -1.000000, 0.000000, -1.000000, -1.000000, -1.000000, -1.000000, 499 -1.000000, -1.000000, -0.990081, -1.000000, -0.990456, -0.814654, -1.000000, -1.000000, 500 -1.000000, -1.000000, 0.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, 501 -0.968021, -1.000000, -1.000000, 0.000000, -1.000000, -1.000000, -0.993967, -0.957540, 502 -0.894533, -0.958363, -1.000000, -1.000000, -1.000000, -0.988915, -1.000000, -1.000000, 503 -1.000000, -1.000000, -1.000000, -1.000000, -0.985367, -1.000000, -0.972040, -1.000000, 504 -1.000000, -1.000000, 0.000000, -1.000000, -0.882278, -1.000000, -1.000000, -1.000000, 505 -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, 506 -1.000000, -0.962575, -0.976843, -0.998926, -1.000000, -0.914090, 0.000000, -0.957808, 507 -1.000000, -1.000000, -1.000000, 0.000000, -0.902593, -1.000000, -1.000000, -1.000000, 508 -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -0.975404, 509 -1.000000, 0.000000, -0.984627, -1.000000, -0.969547, -0.851295, -1.000000, -0.988146, 510 -1.000000, 0.000000, -1.000000, -0.993753, -0.861851, -1.000000, -0.980836, -0.979644, 511 -1.000000, -1.000000, -1.000000, -0.995401, -1.000000, -1.000000, -1.000000, -1.000000, 512 -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, 513 0.000000, -1.000000, -0.990123, -0.944934, -1.000000, 0.000000, -1.000000, -0.952198, 514 -1.000000, -1.000000, -0.960814, -1.000000, -1.000000, -1.000000, -0.956806, -1.000000, 515 0.000000, -0.991778, -1.000000, -1.000000, -1.000000, -1.000000, 0.000000, -1.000000, 516 -0.977640, -1.000000, -1.000000, 0.000000, -1.000000, -0.977630, -1.000000, -0.974242, 517 -1.000000, -1.000000, -0.940085, -0.930729, -1.000000, -1.000000, 0.000000, -1.000000, 518 -1.000000, -0.933695, -1.000000, -0.932306, -1.000000, -1.000000, -1.000000, -0.836774, 519 -0.931762, -0.926990, -0.861895, -1.000000, -0.922505, -1.000000, -0.956420, -0.998768, 520 -0.974626, -0.964573, -1.000000, -0.933995, -1.000000, -0.995117, -1.000000, -1.000000, 521 0.000000, 0.000000, -1.000000, -0.955537, -0.996360, -0.988015, -1.000000, -1.000000, 522 -0.963953, -0.920429, -0.955252, -0.950946, -1.000000, -1.000000, -1.000000, -0.979526, 523 -1.000000, -1.000000, -0.997193, -1.000000, -1.000000, 0.000000, -1.000000, -1.000000, 524 -1.000000, -0.893445, -1.000000, -1.000000, -0.997704, -1.000000, -1.000000, -0.952295, 525 -1.000000, 0.000000, -0.928042, -1.000000, -1.000000, -0.994029, -0.919350, -1.000000, 526 -1.000000, -1.000000, -1.000000, -0.958966, -0.806458, -0.903843, -1.000000, -1.000000, 527 -1.000000, -1.000000, -1.000000, -1.000000, 0.000000, -0.989002, 0.000000, -0.999874, 528 -1.000000, 0.000000, -1.000000, 0.000000, -0.923556, -0.906242, -0.923497, -0.997873, 529 -1.000000, -1.000000, 0.000000, -0.960376, -0.998760, -1.000000, 0.000000, -1.000000, 530 -0.852141, -1.000000, -0.957442, -0.942000, -1.000000, -1.000000, -1.000000, -1.000000, 531 -1.000000, -1.000000, -0.996748, -0.997676, -0.976159, -0.951572, -1.000000, -0.993083, 532 -0.715375, -0.997984, -1.000000, -0.962484, -0.996733, -1.000000, -1.000000, -0.953423, 533 -1.000000, -0.882232, -1.000000, -1.000000, -0.944493, -1.000000, -0.979617, -1.000000, 534 -0.990002, -1.000000, -0.844745, -0.945080, -1.000000, -1.000000, -0.904816, -1.000000, 535 -0.986999, -1.000000, -0.854941, -1.000000, -0.946096, -0.977678, -1.000000, -0.955933, 536 -0.979545, -1.000000, -1.000000, -0.863616, -0.973953, -0.996599, -0.990304, -0.978263, 537 -1.000000, -0.967798, -0.912566, 0.000000, -1.000000, -1.000000, -0.990321, -0.995921, 538 -1.000000, -1.000000, -1.000000, -0.927030, -0.886393, -0.987297, -1.000000, -1.000000, 539 -0.987206, -0.978084, -1.000000, -0.923876, -0.957539, -0.991587, -0.819295, -1.000000, 540 -0.985077, -1.000000, 0.000000, -1.000000, -1.000000, -0.822353, -1.000000, -1.000000, 541 -0.987783, -1.000000, -0.909520, -1.000000, -0.932334, -0.991847, -1.000000, -0.885318, 542 -0.945695, -0.977144, -0.989444, -0.887085, -0.891662, -0.894193, -1.000000, 0.000000, 543 -1.000000, -0.917484, -1.000000, -0.892801, -1.000000, -0.963580, -0.869279, -0.965420, 544 -0.906966, -0.929646, -0.981315, -1.000000, -1.000000, -0.749674, -1.000000, -0.886804, 545 -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -1.000000, -0.970826, -0.909766, 546 -1.000000, -0.910406, -0.983636, -1.000000, -0.961209, -0.935273, -1.000000, -0.989806, 547 0.000000, -0.981563, -0.989701, -0.915626, -0.997493, -0.981429, -1.000000, -0.964583, 548 -1.000000, -0.930216, -0.737797, -1.000000, -0.944314, -0.999998, -0.999611, -0.945788, 549 -0.773886, -0.848979, -0.980186, -1.000000, -1.000000, 0.000000, -0.951392, -0.993398, 550 -0.931889, -0.991680, -0.959021, -0.904240, -1.000000, -0.983561, -0.821324, 0.000000, 551 0.000000, -1.000000, -0.925782, -0.841267, -1.000000, -0.907313, -1.000000, -0.990704, 552 -1.000000, -1.000000, -0.936372, -0.885059 553 }; 554 489 555 int main (void) 490 556 { 491 557 plan_tests(21); 492 558 493 // diag("psStats Tests with sample SDSS data from RHL and Megacam from EAM");494 // diag("this file does not yet define a specific test"); 495 // diag("the fitted mean is currently wrong for these two data sets"); 496 497 { 559 // float **yraw = {yraw_01, yraw_02, yraw_03, yraw_04, NULL}; 560 561 if (1) { 562 diag("sample 1 : problem with integer-binned data driven to tiny sigma values"); 563 498 564 psMemId id = psMemGetId(); 499 565 500 // diag("sample 1 : problem with integer-binned data driven to tiny sigma values");501 566 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN | PS_STAT_FITTED_STDEV | 502 567 PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | … … 505 570 PS_STAT_SAMPLE_STDEV | PS_STAT_USE_BINSIZE); 506 571 stats->binsize = 1.0; 507 508 572 509 573 // copy data in static array … … 533 597 534 598 535 {599 if (1) { 536 600 psMemId id = psMemGetId(); 537 601 538 //diag("sample 2");602 diag("sample 2"); 539 603 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN | PS_STAT_FITTED_STDEV | 540 604 PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | … … 568 632 } 569 633 570 {634 if (1) { 571 635 psMemId id = psMemGetId(); 572 636 573 //diag("sample 3");637 diag("sample 3"); 574 638 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN | PS_STAT_FITTED_STDEV | 575 639 PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | 576 640 PS_STAT_CLIPPED_MEAN | PS_STAT_CLIPPED_STDEV | 577 641 PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_MEDIAN | 578 PS_STAT_SAMPLE_STDEV | PS_STAT_USE_BINSIZE); 579 stats->binsize = 1.0; 580 642 PS_STAT_SAMPLE_STDEV); 581 643 582 644 // copy data in static array … … 605 667 } 606 668 669 { 670 psMemId id = psMemGetId(); 671 672 // psTraceSetLevel("psLib.math.vectorRobustStats", 6); 673 674 diag("sample 4"); 675 psStats *stats = psStatsAlloc (PS_STAT_FITTED_MEAN | PS_STAT_FITTED_STDEV | 676 PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV | 677 PS_STAT_CLIPPED_MEAN | PS_STAT_CLIPPED_STDEV | 678 PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_MEDIAN | 679 PS_STAT_SAMPLE_STDEV); 680 681 // copy data in static array 682 int nPts = sizeof(yraw_04) / sizeof (float); 683 psVector *y = psVectorAlloc (nPts, PS_TYPE_F32); 684 for (int i = 0; i < y->n; i++) { 685 y->data.F32[i] = yraw_04[i]; 686 } 687 688 psVectorStats (stats, y, NULL, NULL, 1); 689 ok (1, "sample mean %f, stdev %f", stats->sampleMean, stats->sampleStdev); 690 ok (1, "sample median %f, stdev %f", stats->sampleMedian, stats->sampleStdev); 691 ok (1, "clipped mean %f, stdev %f", stats->clippedMean, stats->clippedStdev); 692 ok (1, "robust median %f, stdev %f", stats->robustMedian, stats->robustStdev); 693 ok (1, "fitted mean %f, stdev %f", stats->fittedMean, stats->fittedStdev); 694 psFree (stats); 695 696 stats = psStatsAlloc (PS_STAT_FITTED_MEAN_V2 | PS_STAT_FITTED_STDEV_V2 | PS_STAT_USE_BINSIZE); 697 stats->binsize = 1.0; 698 psVectorStats (stats, y, NULL, NULL, 1); 699 ok (1, "fitted mean v2 %f, stdev %f", stats->fittedMean, stats->fittedStdev); 700 psFree (stats); 701 702 psFree (y); 703 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 704 } 705 607 706 return exit_status(); 608 707 } 708
Note:
See TracChangeset
for help on using the changeset viewer.
