IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Dec 15, 2009, 6:41:32 PM (16 years ago)
Author:
eugene
Message:

rework how the psf is passed around so that we are sure we get it from the right psphot run

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20091201/ppSub/src/ppSubMakePSF.c

    r26318 r26432  
    6161        return false;
    6262    }
     63
    6364    pmReadout *photRO = pmFPAviewThisReadout(view, photFile->fpa); // Readout to photometer
     65
     66    // we need to remove any existing PSPHOT.SOURCES (why not do this in psphot?)
    6467    if (psMetadataLookup(photRO->analysis, "PSPHOT.SOURCES")) {
    6568        psMetadataRemoveKey(photRO->analysis, "PSPHOT.SOURCES");
    6669    }
    6770
     71# ifdef TESTING
    6872    // XXX for testing, dump these images:
    6973    psphotSaveImage (NULL, photRO->image, "findpsf.im.fits");
    7074    psphotSaveImage (NULL, photRO->variance, "findpsf.wt.fits");
    7175    psphotSaveImage (NULL, photRO->mask, "findpsf.mk.fits");
     76# endif
    7277
    7378    // Extract the loaded sources from the associated readout, and generate PSF
     
    8489    }
    8590
     91    // save the resulting PSF information on the pmFPAfile PSPHOT.PSF.LOAD
     92    pmFPAfile *psfFile = psMetadataLookupPtr(&mdok, config->files, "PSPHOT.PSF.LOAD"); // PSF file
     93    if (!ppSubCopyPSF (psfFile, photFile, view)) {
     94        psErrorStackPrint(stderr, "PSF was not generated");
     95        psWarning("PSF was not generated --- suspect bad data quality.");
     96        ppSubDataQuality(data, psErrorCodeLast(), PPSUB_FILES_PHOT_SUB | PPSUB_FILES_PHOT_INV);
     97    }
     98
    8699    // Get rid of the generated header; it will be regenerated by the real photometry run
    87100    psMetadataRemoveKey(photRO->analysis, "PSPHOT.HEADER");
    88 
    89     if (!data->quality) {
    90         data->psf = psMemIncrRefCounter(psMetadataLookupPtr(NULL, photRO->parent->parent->analysis,
    91                                                             "PSPHOT.PSF"));
    92     }
    93101
    94102    psFree(view);
     
    96104    return true;
    97105}
     106
     107bool ppSubCopyPSF (pmFPAfile *output, pmFPAfile *input, pmFPAview *view) {
     108
     109    bool mdok = false;
     110
     111    pmChip *inputChip   = pmFPAviewThisChip(view, input->fpa); // Chip with PSF info
     112    pmChip *outputChip  = pmFPAviewThisChip(view, output->fpa); // Chip to store PSF info
     113
     114    pmReadout *inputRO  = pmFPAviewThisReadout(view, input->fpa); // Readout with PSF info
     115    pmReadout *outputRO = pmFPAviewThisReadout(view, output->fpa); // Readout to store PSF info
     116
     117    if (!outputRO) {
     118        pmCell *outputCell  = pmFPAviewThisCell(view, output->fpa);
     119        outputRO = pmReadoutAlloc(outputCell);
     120        outputRO->image = psMemIncrRefCounter (inputRO->image);
     121    }
     122
     123    // copy the PSF-related data to PSPHOT.PSF.LOAD for safe-keeping
     124    psMetadata *psfRegions = psMetadataAlloc();
     125
     126    int nRegions = psMetadataLookupS32 (&mdok, inputRO->analysis, "PSF.CLUMP.NREGIONS");
     127    if (!nRegions) {
     128        psErrorStackPrint(stderr, "No PSF available");
     129        return false;
     130    }
     131    psMetadataAddS32 (psfRegions, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS",  PS_META_REPLACE, "psf clump regions", nRegions);
     132
     133    for (int i = 0; i < nRegions; i++) {
     134        char fieldName[80];
     135        snprintf (fieldName, 80, "PSF.CLUMP.REGION.%03d", i);
     136        psMetadata *regionMD = psMetadataLookupPtr (&mdok, inputRO->analysis, fieldName);
     137        if (!regionMD) {
     138            psWarning ("missing psf clump region metadata for entry %d", i);
     139            continue;
     140        }
     141        psMetadataAddMetadata (psfRegions, PS_LIST_TAIL, fieldName, PS_META_REPLACE, "psf clump region", regionMD);
     142    }
     143
     144    // XXX why am I replacing the entire analysis MD?
     145    psFree(outputRO->analysis);
     146    outputRO->analysis = psfRegions;
     147
     148    // copy the PSF model data
     149    pmPSF *psf = psMetadataLookupPtr(NULL, inputChip->analysis, "PSPHOT.PSF"); // PSF for photometry
     150    if (!psf) {
     151        psErrorStackPrint(stderr, "No PSF available");
     152        return false;
     153    }
     154    psMetadataAddPtr(outputChip->analysis, PS_LIST_TAIL, "PSPHOT.PSF", PS_DATA_UNKNOWN | PS_META_REPLACE, "PSF from ppSubMakePSF", psf);
     155
     156    return true;
     157}
Note: See TracChangeset for help on using the changeset viewer.