IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 17147


Ignore:
Timestamp:
Mar 25, 2008, 3:26:06 PM (18 years ago)
Author:
Paul Price
Message:

Adding goodness-of-fit parameters

Location:
trunk/psLib/src/math
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/math/psPolynomialMD.c

    r17075 r17147  
    153153}
    154154
     155// Calculate the standard deviation of the fit
     156static void polynomialMDStdev(psPolynomialMD *poly, // Polynomial for which to measure stdev
     157                              psVector *deviations, // Deviations, or NULL
     158                              const psArray *coords, // Array of coordinates
     159                              const psVector *values, // Measured values
     160                              const psVector *mask // Mask for values
     161                              )
     162{
     163    assert(poly);
     164    assert(coords);
     165    assert(values);
     166
     167    double rms = 0.0;                   // Root mean square deviation
     168    int numValues = values->n;          // Number of values
     169    int numGood = numValues;            // Number of good values
     170    for (int i = 0; i < numValues; i++) {
     171        if (mask && mask->data.U8[i]) {
     172            numGood--;
     173            continue;
     174        }
     175        float diff = values->data.F32[i] - psPolynomialMDEval(poly, coords->data[i]);
     176        if (deviations) {
     177            deviations->data.F32[i] = diff;
     178        }
     179        rms += PS_SQR(diff);
     180    }
     181    poly->stdevFit = sqrt(rms / (double)numGood);
     182
     183    return;
     184}
    155185
    156186//////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    195225    poly->dim = dim;
    196226    poly->orders = psVectorCopy(NULL, orders, PS_TYPE_U8);
     227    poly->numFit = 0;
     228    poly->stdevFit = NAN;
    197229
    198230    int numTerms = 1;                   // Number of terms in polynomial
     
    301333        return false;
    302334    }
     335
     336    polynomialMDStdev(poly, NULL, coordsArray, values, NULL);
    303337
    304338    return true;
     
    389423        }
    390424
    391         // Evaluate distribution
    392         double rms = 0.0;               // Root mean square deviation
    393         for (int i = 0; i < numValues; i++) {
    394             if (ownMask->data.U8[i]) {
    395                 continue;
    396             }
    397             float diff = values->data.F32[i] - psPolynomialMDEval(poly, coordsArray->data[i]);
    398             deviations->data.F32[i] = diff;
    399             rms += PS_SQR(diff);
    400         }
    401         rms = sqrt(rms / (double)numGood);
    402         psTrace("psLib.math", 7, "RMS from %d points is %lf\n", numGood, rms);
     425        polynomialMDStdev(poly, deviations, coordsArray, values, ownMask);
     426        psTrace("psLib.math", 7, "RMS from %d points is %lf\n", numGood, poly->stdevFit);
    403427
    404428        // Reject
    405         float limit = rej * rms;        // Rejection limit
     429        float limit = rej * poly->stdevFit; // Rejection limit
    406430        for (int i = 0; i < numValues; i++) {
    407431            if (ownMask->data.U8[i]) {
     
    433457            return false;
    434458        }
     459        polynomialMDStdev(poly, NULL, coordsArray, values, ownMask);
    435460    }
    436461
     
    446471    return true;
    447472}
     473
  • trunk/psLib/src/math/psPolynomialMD.h

    r16944 r17147  
    1111    psVector *orders;                   ///< Polynomial orders for each dimension
    1212    psVector *coeff;                    ///< Coefficients
     13    int numFit;                         ///< Number of values in fit
     14    float stdevFit;                     ///< Standard deviation of fit
    1315} psPolynomialMD;
    1416
Note: See TracChangeset for help on using the changeset viewer.