IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

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

call pmVisualClose; allow stack target fwhm to be manually set; set up fwhm separately for windowing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20100823/ppStack/src/ppStackPSF.c

    r27004 r29453  
    1515{
    1616    bool mdok = false;
     17    pmPSF *psf = NULL;
    1718
    18 #ifndef TESTING
    1919    // Get the recipe values
    2020    psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, PPSTACK_RECIPE); // ppStack recipe
    2121    psAssert(recipe, "We've thrown an error on this before.");
    2222
    23     int psfInstances = psMetadataLookupS32(NULL, recipe, "PSF.INSTANCES"); // Number of instances for PSF
    24     float psfRadius = psMetadataLookupF32(NULL, recipe, "PSF.RADIUS"); // Radius for PSF
    25     const char *psfModel = psMetadataLookupStr(NULL, recipe, "PSF.MODEL"); // Model for PSF
    26     int psfOrder = psMetadataLookupS32(NULL, recipe, "PSF.ORDER"); // Spatial order for PSF
    27 
    28     psString maskValStr = psMetadataLookupStr(&mdok, recipe, "MASK.VAL"); // Name of bits to mask going in
    29     if (!mdok || !maskValStr) {
    30         psError(PPSTACK_ERR_CONFIG, false, "Unable to find MASK.VAL in recipe");
    31         return false;
    32     }
    33     psImageMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask
    34 
    35     for (int i = 0; i < psfs->n; i++) {
    36         if (inputMask->data.U8[i]) {
    37             psFree(psfs->data[i]);
    38             psfs->data[i] = NULL;
    39         }
     23    bool autosize = psMetadataLookupBool(&mdok, recipe, "PSF.AUTOSIZE"); // Spatial order for PSF
     24    if (!mdok) {
     25        // older config files which lack PSF.AUTOSIZE used TRUE as the default
     26        autosize = true;
    4027    }
    4128
    42     // Solve for the target PSF
    43     pmPSF *psf = pmPSFEnvelope(numCols, numRows, psfs, psfInstances, psfRadius, psfModel, psfOrder, psfOrder, maskVal);
    44     if (!psf) {
    45         psError(PPSTACK_ERR_PSF, false, "Unable to determine output PSF.");
    46         return NULL;
     29    char *psfModel = psMetadataLookupStr(NULL, recipe, "PSF.MODEL"); // Model for PSF
     30
     31    if (autosize) {
     32
     33        int psfInstances = psMetadataLookupS32(NULL, recipe, "PSF.INSTANCES"); // Number of instances for PSF
     34        float psfRadius = psMetadataLookupF32(NULL, recipe, "PSF.RADIUS"); // Radius for PSF
     35        int psfOrder = psMetadataLookupS32(NULL, recipe, "PSF.ORDER"); // Spatial order for PSF
     36
     37        psString maskValStr = psMetadataLookupStr(&mdok, recipe, "MASK.VAL"); // Name of bits to mask going in
     38        if (!mdok || !maskValStr) {
     39            psError(PPSTACK_ERR_CONFIG, false, "Unable to find MASK.VAL in recipe");
     40            return NULL;
     41        }
     42        psImageMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask
     43
     44        for (int i = 0; i < psfs->n; i++) {
     45            if (inputMask->data.U8[i]) {
     46                psFree(psfs->data[i]);
     47                psfs->data[i] = NULL;
     48            }
     49        }
     50
     51        // Solve for the target PSF
     52        psf = pmPSFEnvelope(numCols, numRows, psfs, psfInstances, psfRadius, psfModel, psfOrder, psfOrder, maskVal);
     53        if (!psf) {
     54            psError(PPSTACK_ERR_PSF, false, "Unable to determine output PSF.");
     55            return NULL;
     56        }
     57    } else {
     58
     59        // Manually defined target PSF
     60        float psfFWHM = psMetadataLookupF32(&mdok, recipe, "PSF.OUTPUT.FWHM"); // Radius for PSF
     61        if (!mdok) {
     62            psfFWHM = 4.0;
     63        }
     64
     65        float Mxx = M_SQRT2 * psfFWHM / 2.35;
     66
     67        psf = pmPSFBuildSimple(psfModel, Mxx, Mxx, 0.0, 0.0);
     68        if (!psf) {
     69            psError(PPSTACK_ERR_PSF, false, "Unable to build dummy PSF.");
     70            return NULL;
     71        }
    4772    }
    48 #else
    49     // Dummy PSF
    50     pmPSF *psf = pmPSFBuildSimple("PS_MODEL_PS1_V1", 4.0, 4.0, 0.0, 1.0);
    51     if (!psf) {
    52         psError(PPSTACK_ERR_PSF, false, "Unable to build dummy PSF.");
    53         return NULL;
    54     }
    55 #endif
    5673
    5774    return psf;
Note: See TracChangeset for help on using the changeset viewer.