IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 17, 2010, 9:10:35 AM (16 years ago)
Author:
eugene
Message:

generate a weight window based on the fwhms; pass around fwhm to ensure the window can be calculated; plug some leaks; better test outputs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20100823/psModules/src/imcombine/pmSubtractionStamps.c

    r29274 r29449  
    5151    psFree(list->y);
    5252    psFree(list->flux);
     53    psFree(list->window);
    5354    psFree(list->window1);
    5455    psFree(list->window2);
     
    9697
    9798    // fprintf (stderr, "xMin, xMax: %d, %d -> ", xMin, xMax);
    98     float xRaw = xMin;
    99     float yRaw = yMin;
     99    // float xRaw = xMin;
     100    // float yRaw = yMin;
    100101
    101102    // Ensure we're not going to go outside the bounds of the image
     
    126127            if (subMask && subMask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] &
    127128                (PM_SUBTRACTION_MASK_BORDER | PM_SUBTRACTION_MASK_REJ)) {
    128               fprintf (stderr, "%f,%f : masked\n", xRaw, yRaw);
     129                // fprintf (stderr, "%f,%f : masked\n", xRaw, yRaw);
    129130                return false;
    130131            }
     
    142143    }
    143144
    144     if (!found) {
    145       fprintf (stderr, "%f,%f : fails flux test\n", xRaw, yRaw);
    146     }
     145    // if (!found) {
     146    //  fprintf (stderr, "%f,%f : fails flux test\n", xRaw, yRaw);
     147    // }
     148
    147149    return found;
    148150}
     
    245247    list->normFrac = normFrac;
    246248    list->normValue = NAN;
     249    list->window = NULL;
    247250    list->window1 = NULL;
    248251    list->window2 = NULL;
     
    269272    out->y = NULL;
    270273    out->flux = NULL;
     274    out->window = psMemIncrRefCounter(in->window);
    271275    out->window1 = psMemIncrRefCounter(in->window1);
    272276    out->window2 = psMemIncrRefCounter(in->window2);
     
    487491                                            yList->data.F32[j], yList->data.F32[j], numCols, numRows, border);
    488492#endif
    489                     if (0 && goodStamp) {
    490                         fprintf (stderr, "find: %6.1f < %6.1f < %6.1f, %6.1f < %6.1f %6.1f\n",
    491                                  region->x0 + size, xStamp, region->x1 - size,
    492                                  region->y0 + size, yStamp, region->y1 - size);
    493                     }
    494493                }
    495494            } else {
     
    684683    psImageInit(stamps->window2->image, 0.0);
    685684
     685    // Generate a weighting window based on the fwhms (20% larger than the largest)
     686    {
     687        float fwhm1, fwhm2;
     688
     689        // XXX this is annoyingly hack-ish
     690        pmSubtractionGetFWHMs(&fwhm1, &fwhm2);
     691
     692        float sigma = 1.5 * PS_MAX(fwhm1, fwhm2) / 2.35;
     693
     694        psFree (stamps->window);
     695        stamps->window = psKernelAlloc(-size, size, -size, size);
     696        psImageInit(stamps->window->image, 0.0);
     697
     698        for (int y = -size; y <= size; y++) {
     699            for (int x = -size; x <= size; x++) {
     700                stamps->window->kernel[y][x] = exp(-0.5*(x*x + y*y)/(sigma*sigma));
     701            }
     702        }
     703    }
     704
    686705    // generate normalizations for each stamp
    687706    psVector *norm1 = psVectorAlloc(stamps->num, PS_TYPE_F32);
     
    759778    {
    760779        psFits *fits = NULL;
    761         fits = psFitsOpen ("window1.fits", "w");
     780        fits = psFitsOpen ("window1.raw.fits", "w");
    762781        psFitsWriteImage (fits, NULL, stamps->window1->image, 0, NULL);
    763782        psFitsClose (fits);
    764         fits = psFitsOpen ("window2.fits", "w");
     783        fits = psFitsOpen ("window2.raw.fits", "w");
    765784        psFitsWriteImage (fits, NULL, stamps->window2->image, 0, NULL);
    766785        psFitsClose (fits);
     
    818837            // interpolate to the radius at which delta2 is normFrac:
    819838            stamps->normWindow1 = radius - (stamps->normFrac - delta1) / (delta1o - delta1);
    820             fprintf (stderr, "choosing %f (%d) for 1 (%f : %f)\n", stamps->normWindow1, radius, within1, delta1);
     839            psLogMsg ("psModules.imcombine", PS_LOG_DETAIL, "choosing %f (%d) for 1 (%f : %f)\n", stamps->normWindow1, radius, within1, delta1);
    821840            done1 = true;
    822841        }
     
    825844            // interpolate to the radius at which delta2 is normFrac:
    826845            stamps->normWindow2 = radius - (stamps->normFrac - delta2) / (delta2o - delta2);
    827             fprintf (stderr, "choosing %f (%d) for 2 (%f : %f)\n", stamps->normWindow2, radius, within2, delta2);
     846            psLogMsg ("psModules.imcombine", PS_LOG_DETAIL, "choosing %f (%d) for 2 (%f : %f)\n", stamps->normWindow2, radius, within2, delta2);
    828847            done2 = true;
    829848        }
     
    873892    {
    874893        psFits *fits = NULL;
    875         fits = psFitsOpen ("window1.fits", "w");
     894        fits = psFitsOpen ("window1.norm.fits", "w");
    876895        psFitsWriteImage (fits, NULL, stamps->window1->image, 0, NULL);
    877896        psFitsClose (fits);
    878         fits = psFitsOpen ("window2.fits", "w");
     897        fits = psFitsOpen ("window2.norm.fits", "w");
    879898        psFitsWriteImage (fits, NULL, stamps->window2->image, 0, NULL);
    880899        psFitsClose (fits);
     
    962981    psAssert (isfinite(kernels->penalties2->data.F32[index]), "invalid penalty");
    963982
    964     fprintf(stderr, "penalty1: %f, penalty2: %f\n", penalty1, penalty2);
     983    // fprintf(stderr, "penalty1: %f, penalty2: %f\n", penalty1, penalty2);
    965984
    966985    return true;
     
    9891008    penalty *= 1.0 / sum2;
    9901009
    991     if (1) {
    992         fprintf(stderr, "min: %lf, max: %lf, moment: %lf, flux^2: %lf\n", min, max, penalty, sum2);
     1010    if (0) {
     1011        // fprintf(stderr, "min: %lf, max: %lf, moment: %lf, flux^2: %lf\n", min, max, penalty, sum2);
    9931012        // psTrace("psModules.imcombine", 7, "Kernel %d: %f %d %d %f\n", index, fwhm, uOrder, vOrder, penalty);
    9941013    }
Note: See TracChangeset for help on using the changeset viewer.