IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 28, 2008, 5:08:31 PM (18 years ago)
Author:
Paul Price
Message:

Merging in pap_branch_080320 --- modernised version of ppMerge.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ppMerge/src/ppMerge.c

    r15631 r17227  
    44
    55#include <stdio.h>
     6#include <string.h>
    67#include <pslib.h>
    78#include <psmodules.h>
    89
    910#include "ppMerge.h"
    10 #include "ppMergeConfig.h"
    11 #include "ppMergeData.h"
    12 #include "ppMergeOptions.h"
    13 #include "ppMergeCheckInputs.h"
    14 #include "ppMergeCombine.h"
    15 #include "ppMergeScaleZero.h"
    16 #include "ppMergeMask.h"
    1711
    1812//#include "ppMem.h"
     
    2721{
    2822    psLibInit(NULL);
    29     psMemSetThreadSafety(false);           // Turn off thread safety, for more
     23    psMemSetThreadSafety(false);
    3024    psTimerStart(TIMERNAME);
    3125
    32     // Parse the configuration and arguments
    33     // Open the input image(s)
    34     // Determine camera, format from header if not already defined
    35     // Construct camera in preparation for reading
    36     pmConfig *config = ppMergeConfig(argc, argv);
     26    psExit exitValue = PS_EXIT_SUCCESS; // Exit value for program
     27
     28    pmConfig *config = pmConfigRead(&argc, argv, PPMERGE_RECIPE); // Configuration
    3729    if (!config) {
    38         psErrorStackPrint(stderr, "Unable to get configuration.");
    39         exit(EXIT_FAILURE);
     30        psErrorStackPrint(stderr, "Error reading configuration.");
     31        exitValue = PS_EXIT_CONFIG_ERROR;
     32        goto die;
    4033    }
    4134
     35    if (!ppMergeArguments(argc, argv, config)) {
     36        psErrorStackPrint(stderr, "Error reading arguments.");
     37        exitValue = PS_EXIT_CONFIG_ERROR;
     38        goto die;
     39    }
     40
     41    ppMergeType type = psMetadataLookupS32(NULL, config->arguments, "TYPE"); // Type of frame
     42    switch (type) {
     43      case PPMERGE_TYPE_MASK:
     44        if (!ppMergeMask(config)) {
     45            psErrorStackPrint(stderr, "Error generating mask.");
     46            exitValue = PS_EXIT_DATA_ERROR;
     47            goto die;
     48        }
     49        break;
     50      case PPMERGE_TYPE_BIAS:
     51      case PPMERGE_TYPE_DARK:
     52      case PPMERGE_TYPE_SHUTTER:
     53      case PPMERGE_TYPE_FLAT:
     54      case PPMERGE_TYPE_FRINGE:
     55        if (!ppMergeScaleZero(config)) {
     56            psErrorStackPrint(stderr, "Error getting scale and zero-points.");
     57            exitValue = PS_EXIT_DATA_ERROR;
     58            goto die;
     59        }
     60        if (!ppMergeLoop(config)) {
     61            psErrorStackPrint(stderr, "Error performing merge.");
     62            exitValue = PS_EXIT_PROG_ERROR;
     63            goto die;
     64        }
     65        break;
     66      default:
     67        psAbort("Invalid frame type: %x", type);
     68    }
     69
     70
     71    // Output the statistics
     72    bool mdok;                          // Status of MD lookup
     73    psString statsName = psMetadataLookupStr(&mdok, config->arguments, "STATS.NAME"); // Statistics file name
     74    if (mdok && statsName && strlen(statsName) > 0) {
     75        psString resolved = pmConfigConvertFilename(statsName, config, true); // Resolved filename
     76        FILE *statsFile = fopen(resolved, "w"); // Output statistics file
     77        if (!statsFile) {
     78            psError(PS_ERR_IO, true, "Unable to open statistics file %s for writing.", resolved);
     79            psFree(resolved);
     80            exitValue = PS_EXIT_CONFIG_ERROR;
     81            goto die;
     82        }
     83        psFree(resolved);
     84        psMetadata *stats = psMetadataLookupMetadata(&mdok, config->arguments, "STATS.DATA"); // Statistics
     85        if (!stats) {
     86            psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find statistics");
     87            exitValue = PS_EXIT_PROG_ERROR;
     88            goto die;
     89        }
     90        psString statsOut = psMetadataConfigFormat(stats); // String to write out
     91        fprintf(statsFile, "%s", statsOut);
     92        psFree(statsOut);
     93        fclose(statsFile);
     94    }
     95
     96
     97
     98
     99#if 0
    42100    // Set various tasks (define optional operations)
    43101    ppMergeOptions *options = ppMergeOptionsParse(config);
     
    81139    }
    82140
    83 #if 0
    84     pmFPAPrint(stdout, data->out, true, true);
    85 #endif
    86 
    87141    // Cleaning up
    88142    psFree(data);
    89143    psFree(options);
     144#endif
     145
     146 die:
     147    psTrace("ppSub", 1, "Finished at %f sec\n", psTimerMark("ppSub"));
     148    psTimerStop();
     149
    90150    psFree(config);
    91 
    92     pmConceptsDone();
    93151    pmConfigDone();
    94152    psLibFinalize();
    95153
    96 //    ppMemCheck();
    97 
    98     return EXIT_SUCCESS;
     154    exit(exitValue);
    99155}
Note: See TracChangeset for help on using the changeset viewer.