IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 36296


Ignore:
Timestamp:
Nov 22, 2013, 1:52:43 PM (13 years ago)
Author:
watersc1
Message:

Fixed issue in scaled polyfit code that broke PATTERN.ROW correction. Briefly, these don't need to be scaled, and had median set to 0.0 and sigma set to 1.0. However, pow(median,1) was returning inf instead of the expected 0.0. I'm manually catching this case now, and simply skipping the unscaling where this issue came up.

File:
1 edited

Legend:

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

    r36237 r36296  
    715715        sigma  = (sorted->data.F64[3 * sorted->n / 4] - sorted->data.F64[sorted->n / 4]);
    716716        psFree(sorted);
     717
     718        if ((!isfinite(median))||
     719            (!isfinite(sigma))) {
     720          median = 0.0;
     721          sigma = 1.0;
     722        }
     723        if ((median == 0.0)&&(sigma == 1.0)) {
     724          scale = false;
     725        }
    717726        // I can't see a way to not clobber x if it's already F64, so make a copy.x
    718727        z64 = psVectorCopy(NULL,x64,PS_TYPE_F64);
     
    726735       
    727736        result = VectorFitPolynomial1DOrd(poly, mask, maskValue, f64, fErr64, z64);
     737        psFree(z64); // Done with this.
    728738      }
    729739      else {
     
    736746     
    737747      if (scale) {
    738         psFree(z64); // Done with this.
    739 
    740748        // Undo scaling in the polynomial values.
    741         psF64 *Zcoeff = psAlloc((1 + poly->nX) * sizeof(psF64 *));
    742         psF64 *ZcoeffErr = psAlloc((1 + poly->nX) * sizeof(psF64 *));
     749        psF64 *Zcoeff = psAlloc((1 + poly->nX) * sizeof(psF64));
     750        psF64 *ZcoeffErr = psAlloc((1 + poly->nX) * sizeof(psF64));
    743751       
    744752        for (psS32 i = 0; i <= poly->nX; i++) {
     
    757765#if (CZW)
    758766            printf("        %d %d %f %f %f %f => %f\n",
    759                    i,j,Zcoeff[j],pow(1.0 / sigma,j) * pow(-1,j - i),pow(median,j - i),1.0 * psBinomialCoeff(j,i),
     767                   i,j,Zcoeff[j],
     768                   pow(1.0 / sigma,j) * pow(-1,j - i),
     769                   pow(median,j - i),
     770                   1.0 * psBinomialCoeff(j,i),
    760771                   Zcoeff[j] * pow(1.0 / sigma,j) * pow(-1,j  -i) * pow(median,j - i) * 1.0 * psBinomialCoeff(j,i)
    761772                   );
Note: See TracChangeset for help on using the changeset viewer.