IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 6, 2009, 1:19:44 PM (17 years ago)
Author:
Paul Price
Message:

Implemented unconvolved stack using rejections from convolved stack.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/pap/ppStack/src/ppStackThread.c

    r24796 r25788  
    5656}
    5757
    58 ppStackThreadData *ppStackThreadDataSetup(const ppStackOptions *options, const pmConfig *config)
     58ppStackThreadData *ppStackThreadDataSetup(const ppStackOptions *options, const pmConfig *config, bool conv)
    5959{
    6060    psAssert(options, "Require options");
     
    6262
    6363    const psArray *cells = options->cells; // Array of input cells
    64     const psArray *imageNames = options->imageNames; // Names of images to read
    65     const psArray *maskNames = options->maskNames; // Names of masks to read
    66     const psArray *varianceNames = options->varianceNames; // Names of variance maps to read
    67     const psArray *covariances = options->covariances; // Covariance matrices (already read)
     64    const psArray *imageNames = conv ? options->convImages : options->origImages; // Names of images to read
     65    const psArray *maskNames = conv ? options->convMasks : NULL; // Names of masks to read
     66    const psArray *varianceNames = conv ? options->convVariances : NULL; // Names of variance maps to read
     67    const psArray *covariances = conv ? options->covariances : NULL; // Covariance matrices (already read)
    6868
    6969    PS_ASSERT_ARRAY_NON_NULL(cells, NULL);
    7070    PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, imageNames, NULL);
    71     PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, maskNames, NULL);
    72     PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, varianceNames, NULL);
    73     PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, covariances, NULL);
     71    if (conv) {
     72        PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, maskNames, NULL);
     73        PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, varianceNames, NULL);
     74        PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, covariances, NULL);
     75    }
    7476
    7577    ppStackThreadData *stack = psAlloc(sizeof(ppStackThreadData)); // Thread data, to return
     
    8789            continue;
    8890        }
    89         // Resolved names
    90         psString imageResolved = pmConfigConvertFilename(imageNames->data[i], config, false, false);
    91         psString maskResolved = pmConfigConvertFilename(maskNames->data[i], config, false, false);
    92         psString varianceResolved = pmConfigConvertFilename(varianceNames->data[i], config, false, false);
    93         stack->imageFits->data[i] = psFitsOpen(imageResolved, "r");
    94         stack->maskFits->data[i] = psFitsOpen(maskResolved, "r");
    95         stack->varianceFits->data[i] = psFitsOpen(varianceResolved, "r");
    96         psFree(imageResolved);
    97         psFree(maskResolved);
    98         psFree(varianceResolved);
    99         if (!stack->imageFits->data[i] || !stack->maskFits->data[i] || !stack->varianceFits->data[i]) {
    100             psError(PS_ERR_UNKNOWN, false, "Unable to open convolved files %s, %s, %s",
    101                     (char*)imageNames->data[i], (char*)maskNames->data[i], (char*)varianceNames->data[i]);
    102             return NULL;
    103         }
     91
     92// Open an image
     93#define IMAGE_OPEN(NAME, FITS) \
     94        if (NAME) { \
     95            psString resolved = pmConfigConvertFilename(NAME, config, false, false); \
     96            FITS = psFitsOpen(resolved, "r"); \
     97            if (!(FITS)) { \
     98                psError(PS_ERR_IO, false, "Unable to open file %s", (char*)(NAME)); \
     99                psFree(resolved); \
     100                return NULL; \
     101            } \
     102            psFree(resolved); \
     103        }
     104
     105        IMAGE_OPEN(imageNames->data[i], stack->imageFits->data[i]);
     106        IMAGE_OPEN(maskNames->data[i], stack->maskFits->data[i]);
     107        IMAGE_OPEN(varianceNames->data[i], stack->varianceFits->data[i]);
    104108    }
    105109
     
    116120            }
    117121            pmReadout *ro = pmReadoutAlloc(cell); // Readout for thread
    118             ro->covariance = psMemIncrRefCounter(covariances->data[j]);
     122            if (conv) {
     123                ro->covariance = psMemIncrRefCounter(covariances->data[j]);
     124            }
    119125            readouts->data[j] = ro;
    120126        }
     
    187193
    188194
    189                 int zMax = 0;
     195                int zMax = 0;
    190196                bool keepReading = false;
    191                 if (pmReadoutMore(ro, imageFits, 0, &zMax, rows, config)) {
     197
     198                if (imageFits && pmReadoutMore(ro, imageFits, 0, &zMax, rows, config)) {
    192199                    keepReading = true;
    193200                    if (!pmReadoutReadChunk(ro, imageFits, 0, NULL, rows, overlap, config)) {
     
    199206                }
    200207
    201                 if (pmReadoutMoreMask(ro, maskFits, 0, &zMax, rows, config)) {
     208                if (maskFits && pmReadoutMoreMask(ro, maskFits, 0, &zMax, rows, config)) {
    202209                    keepReading = true;
    203210                    if (!pmReadoutReadChunkMask(ro, maskFits, 0, NULL, rows, overlap, config)) {
     
    209216                }
    210217
    211                 if (pmReadoutMoreVariance(ro, varianceFits, 0, &zMax, rows, config)) {
     218                if (varianceFits && pmReadoutMoreVariance(ro, varianceFits, 0, &zMax, rows, config)) {
    212219                    keepReading = true;
    213220                    if (!pmReadoutReadChunkVariance(ro, varianceFits, 0, NULL, rows, overlap, config)) {
Note: See TracChangeset for help on using the changeset viewer.