Changeset 21074 for branches/eam_branch_20081230/psLib/src/math/psStats.c
- Timestamp:
- Dec 30, 2008, 10:40:00 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branch_20081230/psLib/src/math/psStats.c
r20515 r21074 13 13 * use ->min and ->max (PS_STAT_USE_RANGE) 14 14 * 15 * @version $Revision: 1.230 $ $Name: not supported by cvs2svn $16 * @date $Date: 2008-1 1-04 00:55:14$15 * @version $Revision: 1.230.8.1 $ $Name: not supported by cvs2svn $ 16 * @date $Date: 2008-12-30 20:40:00 $ 17 17 * 18 18 * Copyright 2006 IfA, University of Hawaii … … 68 68 #define PS_CLIPPED_SIGMA_UB 10.0 69 69 #define PS_POLY_MEDIAN_MAX_ITERATIONS 30 70 #define MASK_MARK 0x80 // bit to use internally to mark data as bad 70 71 #define MASK_MARK 0x80 // XXX : can we change this? bit to use internally to mark data as bad 71 72 #define PS_ROBUST_MAX_ITERATIONS 20 // Maximum number of iterations for robust statistics 72 73 … … 178 179 const psVector* errors, 179 180 const psVector* maskVector, 180 ps MaskType maskVal,181 psVectorMaskType maskVal, 181 182 psStats* stats) 182 183 { … … 190 191 int numData = myVector->n; // Number of data points 191 192 192 ps U8 *maskData = (maskVector == NULL) ? NULL : maskVector->data.U8;193 psVectorMaskType *maskData = (maskVector == NULL) ? NULL : maskVector->data.PS_TYPE_VECTOR_MASK_DATA; 193 194 bool useRange = stats->options & PS_STAT_USE_RANGE; 194 195 … … 245 246 static long vectorMinMax(const psVector* myVector, 246 247 const psVector* maskVector, 247 ps MaskType maskVal,248 psVectorMaskType maskVal, 248 249 psStats* stats 249 250 ) … … 257 258 int numValid = 0; // Number of valid values 258 259 259 ps U8 *maskData = (maskVector == NULL) ? NULL : maskVector->data.U8;260 psVectorMaskType *maskData = (maskVector == NULL) ? NULL : maskVector->data.PS_TYPE_VECTOR_MASK_DATA; 260 261 bool useRange = stats->options & PS_STAT_USE_RANGE; 261 262 … … 302 303 static bool vectorSampleMedian(const psVector* inVector, 303 304 const psVector* maskVector, 304 ps MaskType maskVal,305 psVectorMaskType maskVal, 305 306 psStats* stats) 306 307 { … … 308 309 309 310 bool useRange = stats->options & PS_STAT_USE_RANGE; 310 ps U8 *maskData = (maskVector == NULL) ? NULL : maskVector->data.U8; // Dereference the vector311 psVectorMaskType *maskData = (maskVector == NULL) ? NULL : maskVector->data.PS_TYPE_VECTOR_MASK_DATA; // Dereference the vector 311 312 psF32 *input = inVector->data.F32; // Dereference the vector 312 313 … … 387 388 const psVector* errors, 388 389 const psVector* maskVector, 389 ps MaskType maskVal,390 psVectorMaskType maskVal, 390 391 psStats* stats) 391 392 { … … 407 408 408 409 psF32 *data = myVector->data.F32; // Dereference 409 ps U8 *maskData = (maskVector == NULL) ? NULL : maskVector->data.U8;410 psVectorMaskType *maskData = (maskVector == NULL) ? NULL : maskVector->data.PS_TYPE_VECTOR_MASK_DATA; 410 411 bool useRange = stats->options & PS_STAT_USE_RANGE; 411 412 psF32 *errorsData = (errors == NULL) ? NULL : errors->data.F32; … … 468 469 static bool vectorSampleMoments(const psVector* myVector, 469 470 const psVector* maskVector, 470 ps MaskType maskVal,471 psVectorMaskType maskVal, 471 472 psStats* stats) 472 473 { … … 490 491 491 492 psF32 *data = myVector->data.F32; // Dereference 492 ps U8 *maskData = (maskVector == NULL) ? NULL : maskVector->data.U8;493 psVectorMaskType *maskData = (maskVector == NULL) ? NULL : maskVector->data.PS_TYPE_VECTOR_MASK_DATA; 493 494 bool useRange = stats->options & PS_STAT_USE_RANGE; 494 495 … … 557 558 const psVector* errors, 558 559 psVector* maskInput, 559 ps MaskType maskValInput,560 psVectorMaskType maskValInput, 560 561 psStats* stats 561 562 ) … … 580 581 581 582 // We copy the mask vector, to preserve the original 582 ps MaskType maskVal = MASK_MARK | maskValInput;583 psVectorMaskType maskVal = MASK_MARK | maskValInput; 583 584 584 585 // use the temporary vector for local temporary mask 585 stats->tmpMask = psVectorRecycle (stats->tmpMask, myVector->n, PS_TYPE_ U8);586 stats->tmpMask = psVectorRecycle (stats->tmpMask, myVector->n, PS_TYPE_VECTOR_MASK); 586 587 psVector *tmpMask = stats->tmpMask; 587 588 psVectorInit(tmpMask, 0); 588 589 if (maskInput) { 589 590 for (long i = 0; i < myVector->n; i++) { 590 if (maskInput->data. U8[i] & maskValInput) {591 tmpMask->data. U8[i] = maskVal;591 if (maskInput->data.PS_TYPE_VECTOR_MASK_DATA[i] & maskValInput) { 592 tmpMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = maskVal; 592 593 } 593 594 } … … 629 630 // sqrt(A)) 630 631 for (long j = 0; j < myVector->n; j++) { 631 if (!tmpMask->data. U8[j] &&632 if (!tmpMask->data.PS_TYPE_VECTOR_MASK_DATA[j] && 632 633 fabsf(myVector->data.F32[j] - clippedMean) > stats->clipSigma * errors->data.F32[j]) { 633 tmpMask->data. U8[j] = 0xff;634 tmpMask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 0xff; 634 635 psTrace(TRACE, 10, "Clipped %ld: %f +/- %f\n", j, 635 636 myVector->data.F32[j], errors->data.F32[j]); … … 640 641 } else { 641 642 for (long j = 0; j < myVector->n; j++) { 642 if (!tmpMask->data. U8[j] &&643 if (!tmpMask->data.PS_TYPE_VECTOR_MASK_DATA[j] && 643 644 fabsf(myVector->data.F32[j] - clippedMean) > (stats->clipSigma * clippedStdev)) { 644 tmpMask->data. U8[j] = 0xff;645 tmpMask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 0xff; 645 646 psTrace(TRACE, 10, "Clipped %ld: %f\n", j, myVector->data.F32[j]); 646 647 numClipped++; … … 715 716 const psVector* errors, 716 717 psVector* maskInput, 717 ps MaskType maskValInput,718 psVectorMaskType maskValInput, 718 719 psStats* stats) 719 720 { … … 726 727 // and tested even if there is no supplied mask (and/or the maskVal is 0) 727 728 // XXX this would be better if we had globally defined mask values 728 ps MaskType maskVal = MASK_MARK | maskValInput;729 psVectorMaskType maskVal = MASK_MARK | maskValInput; 729 730 psVector *mask = psVectorAlloc(myVector->n, PS_TYPE_MASK); // The actual mask we will use 730 731 psVectorInit(mask, 0); 731 732 if (maskInput) { 732 733 for (long i = 0; i < myVector->n; i++) { 733 if (maskInput->data. U8[i] & maskValInput) {734 mask->data. U8[i] = maskVal;734 if (maskInput->data.PS_TYPE_VECTOR_MASK_DATA[i] & maskValInput) { 735 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = maskVal; 735 736 } 736 737 } … … 934 935 if ((myVector->data.F32[i] < medianLo) || (myVector->data.F32[i] > medianHi)) { 935 936 // XXXX is this correct? is MASK_MARK safe? 936 mask->data. U8[i] |= MASK_MARK;937 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] |= MASK_MARK; 937 938 psTrace(TRACE, 6, "Masking element %ld is %f\n", i, myVector->data.F32[i]); 938 939 } … … 998 999 long N50 = 0; 999 1000 for (long i = 0 ; i < myVector->n ; i++) { 1000 if (!mask->data. U8[i] &&1001 if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[i] && 1001 1002 (binLo25F32 <= myVector->data.F32[i]) && (binHi25F32 >= myVector->data.F32[i])) { 1002 1003 N50++; … … 1046 1047 const psVector* errors, 1047 1048 psVector* mask, 1048 ps MaskType maskVal,1049 psVectorMaskType maskVal, 1049 1050 psStats* stats) 1050 1051 { … … 1224 1225 const psVector* errors, 1225 1226 psVector* mask, 1226 ps MaskType maskVal,1227 psVectorMaskType maskVal, 1227 1228 psStats* stats) 1228 1229 { … … 1347 1348 // fitStats->clipIter = 3.0; 1348 1349 // fitStats->clipSigma = 3.0; 1349 // psVector *fitMask = psVectorAlloc(y->n, PS_TYPE_ U8);1350 // psVector *fitMask = psVectorAlloc(y->n, PS_TYPE_VECTOR_MASK); 1350 1351 // psVectorInit (fitMask, 0); 1351 1352 … … 1418 1419 const psVector* errors, 1419 1420 psVector* mask, 1420 ps MaskType maskVal,1421 psVectorMaskType maskVal, 1421 1422 psStats* stats) 1422 1423 { … … 1713 1714 const psVector* errors, 1714 1715 psVector* mask, 1715 ps MaskType maskVal,1716 psVectorMaskType maskVal, 1716 1717 psStats* stats) 1717 1718 { … … 2225 2226 const psVector* errors, 2226 2227 const psVector* mask, 2227 ps MaskType maskVal)2228 psVectorMaskType maskVal) 2228 2229 { 2229 2230 psTrace(TRACE, 3,"---- %s() begin ----\n", __func__); … … 2233 2234 if (mask) { 2234 2235 PS_ASSERT_VECTORS_SIZE_EQUAL(mask, in, false); 2235 PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_ U8, false);2236 PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_VECTOR_MASK, false); 2236 2237 } 2237 2238 if (errors) {
Note:
See TracChangeset
for help on using the changeset viewer.
