IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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]);
Note: See TracChangeset for help on using the changeset viewer.