IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 16407


Ignore:
Timestamp:
Feb 11, 2008, 6:47:44 PM (18 years ago)
Author:
Paul Price
Message:

Need to extract the subtraction kernels and regions before freeing.

Location:
branches/pap_branch_080207/ppStack/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/pap_branch_080207/ppStack/src/ppStack.h

    r16382 r16407  
    2828bool ppStackReadout(const pmConfig *config,   // Configuration
    2929                    pmReadout *outRO,   // Output readout
    30                     const psArray *readouts // Input readouts
     30                    const psArray *readouts, // Input readouts
     31                    const psArray *regions, // Array with array of regions used in each PSF matching
     32                    const psArray *kernels // Array with array of kernels used in each PSF matching
    3133    );
    3234
  • branches/pap_branch_080207/ppStack/src/ppStackLoop.c

    r16404 r16407  
    1010
    1111#include "ppStack.h"
     12
     13#define ARRAY_BUFFER 16                 // Number to add to array at a time
    1214
    1315// Here follows lists of files for activation/deactivation at various stages.  Each must be NULL-terminated.
     
    3941                             "PSPHOT.INPUT.CMF", 0 };
    4042
    41 #define CONVOLVED_ALREADY               // Already have the convolution products --- testing
     43//#define CONVOLVED_ALREADY               // Already have the convolution products --- testing
    4244
    4345
     
    308310    // Generate convolutions and write them to disk
    309311    psArray *cells = psArrayAlloc(num); // Cells for convolved images --- a handle for reading again
    310     psArray *kernels = psArrayAlloc(num); // Subtraction kernels --- required in the stacking
     312    psArray *subKernels = psArrayAlloc(num); // Subtraction kernels --- required in the stacking
     313    psArray *subRegions = psArrayAlloc(num); // Subtraction regions --- required in the stacking
    311314    for (int i = 0; i < num; i++) {
    312315        pmFPAfileActivate(config->files, false, NULL);
     
    339342#endif
    340343
     344        // Extract the regions and solutions used in the image matching
     345        // This stops them from being freed when we iterate back up the FPA
     346        psArray *regions = psArrayAllocEmpty(ARRAY_BUFFER); // Array of regions
     347        {
     348            psMetadataIterator *iter = psMetadataIteratorAlloc(readout->analysis, PS_LIST_HEAD,
     349                                                               PM_SUBTRACTION_ANALYSIS_REGION); // Iterator
     350            psMetadataItem *item = NULL;// Item from iteration
     351            while ((item = psMetadataGetAndIncrement(iter))) {
     352                assert(item->type == PS_DATA_REGION);
     353                regions = psArrayAdd(regions, ARRAY_BUFFER, item->data.V);
     354            }
     355            psFree(iter);
     356        }
     357        psArray *kernels = psArrayAllocEmpty(ARRAY_BUFFER); // Array of kernels
     358        {
     359            psMetadataIterator *iter = psMetadataIteratorAlloc(readout->analysis, PS_LIST_HEAD,
     360                                                               PM_SUBTRACTION_ANALYSIS_KERNEL); // Iterator
     361            psMetadataItem *item = NULL;// Item from iteration
     362            while ((item = psMetadataGetAndIncrement(iter))) {
     363                assert(item->type == PS_DATA_VECTOR);
     364                kernels = psArrayAdd(kernels, ARRAY_BUFFER, item->data.V);
     365            }
     366            psFree(iter);
     367        }
     368        assert(regions->n == kernels->n);
     369
     370        subRegions->data[i] = regions;
     371        subKernels->data[i] = kernels;
    341372        cells->data[i] = psMemIncrRefCounter(readout->parent);
    342         kernels->data[i] = psMemIncrRefCounter(psMetadataLookupPtr(NULL, readout->analysis,
    343                                                                    PM_SUBTRACTION_ANALYSIS_KERNEL));
     373
    344374        filesIterateUp(config);
    345375    }
     
    357387        if (!view) {
    358388            psFree(cells);
    359             psFree(kernels);
     389            psFree(subKernels);
     390            psFree(subRegions);
    360391            return false;
    361392        }
     
    391422                    psError(PS_ERR_IO, false, "Unable to read chunk %d for file %d", numChunk, i);
    392423                    psFree(readouts);
    393                     psFree(kernels);
     424                    psFree(subKernels);
     425                    psFree(subRegions);
    394426                    psFree(outRO);
    395427                    psFree(view);
     
    406438#endif
    407439
    408             if (!ppStackReadout(config, outRO, readouts)) {
     440            if (!ppStackReadout(config, outRO, readouts, subRegions, subKernels)) {
    409441                psError(PS_ERR_UNKNOWN, false, "Unable to stack images.\n");
    410442                psFree(readouts);
    411                 psFree(kernels);
     443                psFree(subKernels);
     444                psFree(subRegions);
    412445                psFree(outRO);
    413446                psFree(view);
     
    425458
    426459        psFree(readouts);
    427         psFree(kernels);
     460        psFree(subKernels);
     461        psFree(subRegions);
    428462        for (int i = 0; i < num; i++) {
    429463            psFitsClose(imageFits->data[i]);
  • branches/pap_branch_080207/ppStack/src/ppStackReadout.c

    r16404 r16407  
    1111
    1212
    13 #define ARRAY_BUFFER 16                 // Number to add to array at a time
    1413#define WCS_TOLERANCE 0.001             // Tolerance for WCS
    1514
     
    1716//#define INSPECTION_FILES                // Write inspection mask?
    1817
    19 bool ppStackReadout(const pmConfig *config, pmReadout *outRO, const psArray *readouts)
     18bool ppStackReadout(const pmConfig *config, pmReadout *outRO, const psArray *readouts,
     19                    const psArray *regions, const psArray *kernels)
    2020{
    2121    assert(config);
    2222    assert(outRO);
    2323    assert(readouts);
     24    assert(regions);
     25    assert(kernels);
     26    assert(readouts->n == regions->n);
     27    assert(regions->n == kernels->n);
    2428
    2529    // Get the recipe values
     
    6367        totExposure += exposure;        // Total exposure time
    6468
     69#if 0
    6570        if (i == 0) {
    6671            // Copy astrometry over
     
    8489            }
    8590        }
     91#endif
    8692
    8793        // Ensure there is a mask, or pmStackCombine will complain
     
    128134#endif
    129135
     136    // Reject pixels
    130137    for (int i = 0; i < num; i++) {
    131138        pmStackData *data = stack->data[i]; // Data for this image
    132         pmReadout *readout = data->readout; // Readout for this image
    133 
    134         // Extract the regions and solutions used in the image matching
    135         psArray *regions = psArrayAllocEmpty(ARRAY_BUFFER); // Array of regions
    136         {
    137             psMetadataIterator *iter = psMetadataIteratorAlloc(readout->analysis, PS_LIST_HEAD,
    138                                                                PM_SUBTRACTION_ANALYSIS_REGION); // Iterator
    139             psMetadataItem *item = NULL;// Item from iteration
    140             while ((item = psMetadataGetAndIncrement(iter))) {
    141                 assert(item->type == PS_DATA_REGION);
    142                 regions = psArrayAdd(regions, ARRAY_BUFFER, item->data.V);
    143             }
    144             psFree(iter);
    145         }
    146         psArray *kernels = psArrayAllocEmpty(ARRAY_BUFFER); // Array of kernels
    147         {
    148             psMetadataIterator *iter = psMetadataIteratorAlloc(readout->analysis, PS_LIST_HEAD,
    149                                                                PM_SUBTRACTION_ANALYSIS_KERNEL); // Iterator
    150             psMetadataItem *item = NULL;// Item from iteration
    151             while ((item = psMetadataGetAndIncrement(iter))) {
    152                 assert(item->type == PS_DATA_VECTOR);
    153                 kernels = psArrayAdd(kernels, ARRAY_BUFFER, item->data.V);
    154             }
    155             psFree(iter);
    156         }
    157         assert(regions->n == kernels->n);
    158 
    159         psPixels *reject = pmStackReject(data->pixels, threshold, regions, kernels); // Pixels to reject
     139        psPixels *reject = pmStackReject(data->pixels, threshold, regions->data[i],
     140                                         kernels->data[i]); // Pixels to reject
    160141        psFree(data->pixels);
    161142        data->pixels = reject;
    162 
    163         psFree(kernels);
    164         psFree(regions);
    165143    }
    166144
Note: See TracChangeset for help on using the changeset viewer.