IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 4, 2005, 5:22:13 PM (21 years ago)
Author:
eugene
Message:

running sources in brightness order, using a mask

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psphot/src/psPolynomials.c

    r4114 r4115  
    191191// XXX EAM : test version of 1d fitting
    192192psPolynomial1D* 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)
    196197{
    197198    // I think this is 1 dimension down
     
    232233    // Build the B and A data structs.
    233234    for (int k = 0; k < x->n; k++) {
     235        if ((mask != NULL) && mask->U8[k]) continue;
    234236        xSums = BuildSums1D(xSums, x->data.F64[k], nTerm);
    235237     
     
    291293// XXX EAM : test version of 2d fitting
    292294psPolynomial2D* 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)
    297300{
    298301    // I think this is 1 dimension down
     
    322325    // Build the B and A data structs.
    323326    for (int k  = 0; k < x->n; k++) {
     327      if ((mask != NULL) && mask->data.U8[i]) continue;
    324328        Sums = BuildSums2D(Sums, x->data.F64[k], y->data.F64[k], nXterm, nYterm);
    325329     
     
    391395}   
    392396
    393 psPolynomial2D* RobustFit2D(psPolynomial2D* poly,
     397psPolynomial2D* RobustFit2D_nomask(psPolynomial2D* poly,
    394398                            const psVector* x,
    395399                            const psVector* y,
     
    413417    for (int N = 0; N < 3; N++) {
    414418        // 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);
    416420        zFit   = Polynomial2DEvalVectorD (poly, x, y);
    417421        zResid = (psVector *) psBinaryOp (NULL, (void *) z, "-", (void *) zFit);
     
    424428        int n = 0;
    425429        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            }
    427433            X->data.F64[n]  =  x->data.F64[i];
    428434            Y->data.F64[n]  =  y->data.F64[i];
     
    435441        Z->n = n;
    436442        dZ->n = n;
     443    }
     444    return (poly);
     445}
     446
     447// XXX EAM : be careful here with F32 vs F64 vectors
     448psPolynomial2D* 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        }
    437480    }
    438481    return (poly);
Note: See TracChangeset for help on using the changeset viewer.