IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 3, 2010, 8:41:49 AM (16 years ago)
Author:
eugene
Message:

updates from trunk

Location:
branches/tap_branches
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/tap_branches

  • branches/tap_branches/ppStack/src

    • Property svn:ignore
      •  

        old new  
        1010stamp-h1
        1111ppStackVersionDefinitions.h
         12ppStackErrorCodes.c
         13ppStackErrorCodes.h
  • branches/tap_branches/ppStack/src/ppStackThread.c

    r24796 r27838  
    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 : options->origMasks; // Names of masks to read
     66    const psArray *varianceNames = conv ? options->convVariances : options->origVariances; // Variance names
     67    const psArray *covariances = conv ? options->convCovars : options->origCovars; // Covariance matrices
    6868
    6969    PS_ASSERT_ARRAY_NON_NULL(cells, NULL);
    70     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);
     70    if (imageNames) {
     71        PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, imageNames, NULL);
     72    }
     73    if (maskNames) {
     74        PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, maskNames, NULL);
     75    }
     76    if (varianceNames) {
     77        PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, varianceNames, NULL);
     78    }
     79    if (covariances) {
     80        PS_ASSERT_ARRAYS_SIZE_EQUAL(cells, covariances, NULL);
     81    }
    7482
    7583    ppStackThreadData *stack = psAlloc(sizeof(ppStackThreadData)); // Thread data, to return
     
    8795            continue;
    8896        }
    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         }
     97
     98// Open an image
     99#define IMAGE_OPEN(NAMES, FITS, INDEX)          \
     100        if (NAMES) { \
     101            psString resolved = pmConfigConvertFilename((NAMES)->data[INDEX], config, false, false); \
     102            (FITS)->data[INDEX] = psFitsOpen(resolved, "r");                            \
     103            if (!(FITS)->data[INDEX]) { \
     104                psError(PPSTACK_ERR_IO, false, "Unable to open file %s", (char*)(NAMES)->data[INDEX]); \
     105                psFree(resolved); \
     106                return NULL; \
     107            } \
     108            psFree(resolved); \
     109        }
     110
     111        IMAGE_OPEN(imageNames, stack->imageFits, i);
     112        IMAGE_OPEN(maskNames, stack->maskFits, i);
     113        IMAGE_OPEN(varianceNames, stack->varianceFits, i);
    104114    }
    105115
     
    116126            }
    117127            pmReadout *ro = pmReadoutAlloc(cell); // Readout for thread
    118             ro->covariance = psMemIncrRefCounter(covariances->data[j]);
     128            if (covariances) {
     129                ro->covariance = psMemIncrRefCounter(covariances->data[j]);
     130            }
    119131            readouts->data[j] = ro;
    120132        }
     
    140152    psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, PPSTACK_RECIPE); // Recipe
    141153    if (!recipe) {
    142         psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find recipe %s", PPSTACK_RECIPE);
     154        psError(PPSTACK_ERR_CONFIG, false, "Unable to find recipe %s", PPSTACK_RECIPE);
    143155        return NULL;
    144156    }
    145157    int rows = psMetadataLookupS32(NULL, recipe, "ROWS"); // Number of rows to read per chunk
    146158    if (rows <= 0) {
    147         psError(PS_ERR_BAD_PARAMETER_VALUE, false, "ROWS is not set in the recipe.");
     159        psError(PPSTACK_ERR_CONFIG, false, "ROWS is not set in the recipe.");
    148160        return NULL;
    149161    }
     
    186198                psFits *varianceFits = stack->varianceFits->data[i]; // FITS file for variance
    187199
    188 
    189                 int zMax = 0;
     200                int zMax = 0;
    190201                bool keepReading = false;
    191                 if (pmReadoutMore(ro, imageFits, 0, &zMax, rows, config)) {
     202
     203                if (imageFits && pmReadoutMore(ro, imageFits, 0, &zMax, rows, config)) {
    192204                    keepReading = true;
    193205                    if (!pmReadoutReadChunk(ro, imageFits, 0, NULL, rows, overlap, config)) {
    194                         psError(PS_ERR_IO, false, "Unable to read chunk %d for file PPSTACK.INPUT %d",
     206                        psError(PPSTACK_ERR_IO, false,
     207                                "Unable to read chunk %d for file PPSTACK.INPUT %d",
    195208                                numChunk, i);
    196209                        *status = false;
     
    199212                }
    200213
    201                 if (pmReadoutMoreMask(ro, maskFits, 0, &zMax, rows, config)) {
     214                if (maskFits && pmReadoutMoreMask(ro, maskFits, 0, &zMax, rows, config)) {
    202215                    keepReading = true;
    203216                    if (!pmReadoutReadChunkMask(ro, maskFits, 0, NULL, rows, overlap, config)) {
    204                         psError(PS_ERR_IO, false, "Unable to read chunk %d for file PPSTACK.INPUT.MASK %d",
     217                        psError(PPSTACK_ERR_IO, false,
     218                                "Unable to read chunk %d for file PPSTACK.INPUT.MASK %d",
    205219                                numChunk, i);
    206220                        *status = false;
     
    209223                }
    210224
    211                 if (pmReadoutMoreVariance(ro, varianceFits, 0, &zMax, rows, config)) {
     225                if (varianceFits && pmReadoutMoreVariance(ro, varianceFits, 0, &zMax, rows, config)) {
    212226                    keepReading = true;
    213227                    if (!pmReadoutReadChunkVariance(ro, varianceFits, 0, NULL, rows, overlap, config)) {
    214                         psError(PS_ERR_IO, false,
     228                        psError(PPSTACK_ERR_IO, false,
    215229                                "Unable to read chunk %d for file PPSTACK.INPUT.VARIANCE %d",
    216230                                numChunk, i);
     
    263277
    264278    {
    265         psThreadTask *task = psThreadTaskAlloc("PPSTACK_INSPECT", 2);
     279        psThreadTask *task = psThreadTaskAlloc("PPSTACK_INSPECT", 3);
    266280        task->function = &ppStackInspect;
    267281        psThreadTaskAdd(task);
     
    270284
    271285    {
    272         psThreadTask *task = psThreadTaskAlloc("PPSTACK_FINAL_COMBINE", 3);
     286        psThreadTask *task = psThreadTaskAlloc("PPSTACK_FINAL_COMBINE", 6);
    273287        task->function = &ppStackReadoutFinalThread;
    274288        psThreadTaskAdd(task);
Note: See TracChangeset for help on using the changeset viewer.