IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 26, 2009, 1:59:32 PM (17 years ago)
Author:
beaumont
Message:

merged with trunk

Location:
branches/cnb_branches/cnb_branch_20090301
Files:
13 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/cnb_branches/cnb_branch_20090301

  • branches/cnb_branches/cnb_branch_20090301/ppStack

  • branches/cnb_branches/cnb_branch_20090301/ppStack/src

    • Property svn:ignore
      •  

        old new  
        99config.h.in
        1010stamp-h1
         11ppStackVersionDefinitions.h
  • branches/cnb_branches/cnb_branch_20090301/ppStack/src/Makefile.am

    r23594 r24244  
    11bin_PROGRAMS = ppStack
    22
    3 # PPSTACK_VERSION=`if [ -e ../../VERSION ]; then cat ../../VERSION; else svnversion; fi`
    4 # PPSTACK_BRANCH=`if [ -e ../../BRANCH ]; then cat ../../BRANCH; else svn info | sed -n -e '/URL:/ h' -e '/Repository Root:/ { x; H; x; s|Repository Root: \(.*\)\nURL: \1\(.*\)|\2| ; s|^/|| ; s|/[a-zA-Z]*/src.*|| ; p }'; fi`
    5 # PPSTACK_SOURCE=`if [ -e ../../SOURCE ]; then cat ../../SOURCE; else svn info | sed -n -e 's/Repository UUID: // p'; fi`
    6 #
    7 # # Force recompilation of ppStackVersion.c, since it gets the version information
    8 # ppStackVersion.c: FORCE
    9 #       touch ppStackVersion.c
    10 # FORCE: ;
     3if HAVE_SVNVERSION
     4PPSTACK_VERSION=`$(SVNVERSION) ..`
     5else
     6PPSTACK_VERSION="UNKNOWN"
     7endif
    118
    12 ppStack_CFLAGS  = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PSPHOT_CFLAGS) $(PPSTATS_CFLAGS) $(PPSTACK_CFLAGS) -DPPSTACK_VERSION=$(SVN_VERSION) -DPPSTACK_BRANCH=$(SVN_BRANCH) -DPPSTACK_SOURCE=$(SVN_SOURCE)
     9if HAVE_SVN
     10PPSTACK_BRANCH=`$(SVN) info .. | $(SED) -n -e '/URL:/ h' -e '/Repository Root:/ { x; H; x; s|Repository Root: \(.*\)\nURL: \1\(.*\)|\2| ; s|^/|| ; s|/[a-zA-Z]*/src.*|| ; p }'`
     11PPSTACK_SOURCE=`$(SVN) info | $(SED) -n -e 's/Repository UUID: // p'`
     12else
     13PPSTACK_BRANCH="UNKNOWN"
     14PPSTACK_SOURCE="UNKNOWN"
     15endif
     16
     17# Force recompilation of ppStackVersion.c, since it gets the version information
     18ppStackVersion.c: ppStackVersionDefinitions.h
     19ppStackVersionDefinitions.h: ppStackVersionDefinitions.h.in FORCE
     20        -$(RM) ppStackVersionDefinitions.h
     21        $(SED) -e "s|@PPSTACK_VERSION@|\"$(PPSTACK_VERSION)\"|" -e "s|@PPSTACK_BRANCH@|\"$(PPSTACK_BRANCH)\"|" -e "s|@PPSTACK_SOURCE@|\"$(PPSTACK_SOURCE)\"|" ppStackVersionDefinitions.h.in > ppStackVersionDefinitions.h
     22FORCE: ;
     23
     24ppStack_CFLAGS  = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PSPHOT_CFLAGS) $(PPSTATS_CFLAGS) $(PPSTACK_CFLAGS)
    1325ppStack_LDFLAGS = $(PSLIB_LIBS)   $(PSMODULE_LIBS)   $(PSPHOT_LIBS)   $(PPSTATS_LIBS)   $(PPSTACK_LIBS)
    1426
  • branches/cnb_branches/cnb_branch_20090301/ppStack/src/ppStackArguments.c

    r23594 r24244  
    119119{
    120120    assert(config);
     121
     122    {
     123        int argNum = psArgumentGet(argc, argv, "-debug"); // Debugging argument number
     124        if (argNum) {
     125            psArgumentRemove(argNum, &argc, argv);
     126            pmSubtractionRegions(true);
     127        }
     128    }
    121129
    122130    // This capability makes things much faster when debugging
  • branches/cnb_branches/cnb_branch_20090301/ppStack/src/ppStackCombineFinal.c

    r23352 r24244  
    4747    }
    4848
     49    // Sum covariance matrices
     50    double sumWeights = 0.0;            // Sum of weights
     51    for (int i = 0; i < options->num; i++) {
     52        if (options->inputMask->data.U8[i]) {
     53            psFree(options->covariances->data[i]);
     54            options->covariances->data[i] = NULL;
     55            continue;
     56        }
     57        psKernel *covar = options->covariances->data[i]; // Covariance matrix
     58        float weight = options->weightings->data.F32[i]; // Weight to apply
     59        psBinaryOp(covar->image, covar->image, "*", psScalarAlloc(weight, PS_TYPE_F32));
     60        sumWeights += weight;
     61    }
     62    pmReadout *outRO = options->outRO;  // Output readout
     63    outRO->covariance = psImageCovarianceSum(options->covariances);
     64    psBinaryOp(outRO->covariance->image, outRO->covariance->image, "/",
     65               psScalarAlloc(sumWeights, PS_TYPE_F32));
     66    psFree(options->covariances); options->covariances = NULL;
     67    psImageCovarianceTransfer(outRO->variance, outRO->covariance);
     68
    4969#ifdef TESTING
    5070    pmStackVisualPlotTestImage(outRO->image, "combined_initial.fits");
  • branches/cnb_branches/cnb_branch_20090301/ppStack/src/ppStackCombineInitial.c

    r23594 r24244  
    8787#endif
    8888
    89     // Sum covariance matrices
    90     for (int i = 0; i < options->num; i++) {
    91         if (options->inputMask->data.U8[i]) {
    92             psFree(options->covariances->data[i]);
    93             options->covariances->data[i] = NULL;
    94         }
    95     }
    96     options->outRO->covariance = psImageCovarianceSum(options->covariances);
    97     psFree(options->covariances); options->covariances = NULL;
    9889    psFree(options->matchChi2); options->matchChi2 = NULL;
    9990
  • branches/cnb_branches/cnb_branch_20090301/ppStack/src/ppStackConvolve.c

    r23594 r24244  
    112112
    113113        // Write the temporary convolved files
    114         if (options->convolve) {
    115             pmHDU *hdu = readout->parent->parent->parent->hdu; // HDU for convolved image
    116             assert(hdu);
    117             ppStackWriteImage(options->imageNames->data[i], hdu->header, readout->image, config);
    118             psMetadata *maskHeader = psMetadataCopy(NULL, hdu->header); // Copy of header, for mask
    119             pmConfigMaskWriteHeader(config, maskHeader);
    120             ppStackWriteImage(options->maskNames->data[i], maskHeader, readout->mask, config);
    121             psFree(maskHeader);
    122             psImageCovarianceTransfer(readout->variance, readout->covariance);
    123             ppStackWriteImage(options->varianceNames->data[i], hdu->header, readout->variance, config);
     114        pmHDU *hdu = readout->parent->parent->parent->hdu; // HDU for convolved image
     115        assert(hdu);
     116        ppStackWriteImage(options->imageNames->data[i], hdu->header, readout->image, config);
     117        psMetadata *maskHeader = psMetadataCopy(NULL, hdu->header); // Copy of header, for mask
     118        pmConfigMaskWriteHeader(config, maskHeader);
     119        ppStackWriteImage(options->maskNames->data[i], maskHeader, readout->mask, config);
     120        psFree(maskHeader);
     121        psImageCovarianceTransfer(readout->variance, readout->covariance);
     122        ppStackWriteImage(options->varianceNames->data[i], hdu->header, readout->variance, config);
    124123#ifdef TESTING
    125             {
    126                 psString name = NULL;
    127                 psStringAppend(&name, "covariance_%d.fits", i);
    128                 ppStackWriteImage(name, hdu->header, readout->covariance->image, config);
    129                 pmStackVisualPlotTestImage(readout->covariance->image, name);
    130                 psFree(name);
    131             }
     124        {
     125            psString name = NULL;
     126            psStringAppend(&name, "covariance_%d.fits", i);
     127            ppStackWriteImage(name, hdu->header, readout->covariance->image, config);
     128            pmStackVisualPlotTestImage(readout->covariance->image, name);
     129            psFree(name);
     130        }
    132131#endif
    133         }
    134132
    135133        pmCell *inCell = readout->parent; // Input cell
  • branches/cnb_branches/cnb_branch_20090301/ppStack/src/ppStackFinish.c

    r23594 r24244  
    5858        psFree((void *)statsMDC);
    5959        fclose(options->statsFile); options->statsFile = NULL;
     60        pmConfigRunFilenameAddWrite(config, "STATS", psMetadataLookupStr(NULL, config->arguments, "STATS"));
    6061    }
    6162
     
    6566    psString dump = psMetadataLookupStr(&mdok, config->arguments, "DUMP_CONFIG"); // File for config
    6667    if (dump) {
    67         pmFPAfile *input = psMetadataLookupPtr(NULL, config->files, "PPSTACK.INPUT"); // Input file
    68         pmConfigDump(config, input->fpa, dump);
     68        pmConfigDump(config, dump);
    6969    }
    7070
  • branches/cnb_branches/cnb_branch_20090301/ppStack/src/ppStackMatch.c

    r23594 r24244  
    209209            pmFPAview *view = pmFPAviewAlloc(0); // View to readout of interest
    210210            view->chip = view->cell = view->readout = 0;
    211             psString filename = pmFPAfileNameFromRule(filerule->rule, file, view); // Filename of interest
     211            psString filename = pmFPAfileNameFromRule(file->filerule, file, view); // Filename of interest
    212212
    213213            // Read convolution kernel
     
    241241                !readImage(&readout->variance, options->varianceNames->data[index], config)) {
    242242                psError(PS_ERR_IO, false, "Unable to read previously produced image.");
    243                 psFree(imageName);
    244                 psFree(maskName);
    245                 psFree(varianceName);
    246243                return false;
    247244            }
    248             psFree(imageName);
    249             psFree(maskName);
    250             psFree(varianceName);
    251245
    252246            psRegion *region = psMetadataLookupPtr(NULL, conv->analysis,
     
    317311            }
    318312
     313            fake->mask = psImageCopy(NULL, readout->mask, PS_TYPE_IMAGE_MASK);
     314
    319315            // Add the background into the target image
    320316            psImage *bgImage = stackBackgroundModel(readout, config); // Image of background
     
    361357                    psFree(stampSources);
    362358                    psFree(conv);
     359                    if (threads > 0) {
     360                        pmSubtractionThreadsFinalize(readout, fake);
     361                    }
    363362                    return false;
    364363                }
     
    375374                    psFree(stampSources);
    376375                    psFree(conv);
     376                    if (threads > 0) {
     377                        pmSubtractionThreadsFinalize(readout, fake);
     378                    }
    377379                    return false;
    378380                }
  • branches/cnb_branches/cnb_branch_20090301/ppStack/src/ppStackPhotometry.c

    r23594 r24244  
    6969
    7070    if (!psphotReadoutKnownSources(config, photView, inSources)) {
    71         // Clear the error, so that the output files are written.
    72         psError(PS_ERR_UNKNOWN, false, "Unable to perform photometry on stacked image.");
    73         psFree(photView);
    74         return false;
     71        // This is likely a data quality issue
     72        // XXX Split into multiple cases using error codes?
     73        psErrorStackPrint(stderr, "Unable to perform photometry on image");
     74        psWarning("Unable to perform photometry on image --- suspect bad data quality.");
     75        if (options->stats && psMetadataLookupS32(NULL, options->stats, "QUALITY") == 0) {
     76            psMetadataAddS32(options->stats, PS_LIST_TAIL, "QUALITY", PS_META_REPLACE,
     77                             "Unable to perform photometry on image", psErrorCodeLast());
     78        }
     79        psErrorClear();
     80        psphotFilesActivate(config, false);
    7581    }
    7682
     
    8894        psArray *sources = psMetadataLookupPtr(NULL, photRO->analysis, "PSPHOT.SOURCES"); // Sources
    8995        psMetadataAddS32(options->stats, PS_LIST_TAIL, "NUM_SOURCES", 0,
    90                          "Number of sources detected", sources->n);
     96                         "Number of sources detected", sources ? sources->n : 0);
    9197        psMetadataAddF32(options->stats, PS_LIST_TAIL, "TIME_PHOT", 0,
    9298                         "Time to do photometry", psTimerMark("PPSTACK_PHOT"));
  • branches/cnb_branches/cnb_branch_20090301/ppStack/src/ppStackSetup.c

    r23594 r24244  
    1313#define BUFFER 16                       // Buffer for name array
    1414
    15 // Generate an array of input filenames
    16 static psArray *stackNameArray(const ppStackOptions *options, // Stack options
    17                                pmConfig *config, // Configuration
    18                                const char *name // Name of file
    19     )
    20 {
    21     psAssert(config, "Require configuration");
    22     psAssert(config, "Require file name");
    23 
    24     psArray *array = psArrayAllocEmpty(options->num); // Array with filenames
    25     pmFPAview *view = pmFPAviewAlloc(0);// View to readout
    26     view->chip = view->cell = view->readout = -1;
    27 
    28     for (int i = 0; i < options->num; i++) {
    29         pmFPAfile *file = pmFPAfileSelectSingle(config->files, name, i); // File of interest
    30 
    31         psString filename = pmFPAfileName(file, view, config); // Filename of interest
    32         psAssert(filename, "Can't determine filename");
    33         psArrayAdd(array, array->n, filename);
    34         psFree(filename);               // Drop reference
    35     }
    36 
    37     return array;
    38 }
    39 
    4015
    4116bool ppStackSetup(ppStackOptions *options, pmConfig *config)
     
    4722    psAssert(recipe, "We've thrown an error on this before.");
    4823
    49     options->convolve = psMetadataLookupBool(NULL, config->arguments, "CONVOLVE"); // Convolve images?
     24    options->convolve = psMetadataLookupBool(NULL, recipe, "CONVOLVE"); // Convolve images?
    5025    if (!psMetadataLookupBool(NULL, config->arguments, "HAVE.PSF")) {
    5126        psWarning("No PSFs provided --- unable to convolve to common PSF.");
     
    6843        psFree(resolved);
    6944        options->stats = psMetadataAlloc();
     45        psMetadataAddS32(options->stats, PS_LIST_TAIL, "QUALITY", 0, "No problems", 0);
    7046    }
    7147
    7248    // Generate temporary names for convolved images
    73     if (options->convolve) {
    74         const char *tempDir = psMetadataLookupStr(NULL, recipe, "TEMP.DIR"); // Directory for temporary images
    75         if (!tempDir) {
    76             psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Unable to find TEMP.DIR in recipe");
    77             return false;
    78         }
     49    const char *tempDir = psMetadataLookupStr(NULL, recipe, "TEMP.DIR"); // Directory for temporary images
     50    if (!tempDir) {
     51        psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Unable to find TEMP.DIR in recipe");
     52        return false;
     53    }
    7954
    80         psString outputName = psStringCopy(psMetadataLookupStr(NULL, config->arguments,
    81                                                                "OUTPUT")); // Name for temporary files
    82         const char *tempName = basename(outputName);
    83         if (!tempName) {
    84             psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Unable to construct basename for temporary files.");
    85             psFree(outputName);
    86             return false;
    87         }
     55    psString outputName = psStringCopy(psMetadataLookupStr(NULL, config->arguments,
     56                                                           "OUTPUT")); // Name for temporary files
     57    const char *tempName = basename(outputName);
     58    if (!tempName) {
     59        psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Unable to construct basename for temporary files.");
     60        psFree(outputName);
     61        return false;
     62    }
    8863
    89         const char *tempImage = psMetadataLookupStr(NULL, recipe, "TEMP.IMAGE"); // Suffix for images
    90         const char *tempMask = psMetadataLookupStr(NULL, recipe, "TEMP.MASK"); // Suffix for masks
    91         const char *tempVariance = psMetadataLookupStr(NULL, recipe, "TEMP.VARIANCE"); // Suffix for var maps
    92         if (!tempImage || !tempMask || !tempVariance) {
    93             psError(PS_ERR_BAD_PARAMETER_VALUE, false,
    94                     "Unable to find TEMP.IMAGE, TEMP.MASK and TEMP.VARIANCE in recipe");
    95             psFree(outputName);
    96             return false;
    97         }
     64    const char *tempImage = psMetadataLookupStr(NULL, recipe, "TEMP.IMAGE"); // Suffix for images
     65    const char *tempMask = psMetadataLookupStr(NULL, recipe, "TEMP.MASK"); // Suffix for masks
     66    const char *tempVariance = psMetadataLookupStr(NULL, recipe, "TEMP.VARIANCE"); // Suffix for var maps
     67    if (!tempImage || !tempMask || !tempVariance) {
     68        psError(PS_ERR_BAD_PARAMETER_VALUE, false,
     69                "Unable to find TEMP.IMAGE, TEMP.MASK and TEMP.VARIANCE in recipe");
     70        psFree(outputName);
     71        return false;
     72    }
    9873
    99         options->imageNames = psArrayAlloc(num);
    100         options->maskNames = psArrayAlloc(num);
    101         options->varianceNames = psArrayAlloc(num);
    102         for (int i = 0; i < num; i++) {
    103             psString imageName = NULL, maskName = NULL, varianceName = NULL; // Names for convolved images
    104             psStringAppend(&imageName, "%s/%s.%d.%s", tempDir, tempName, i, tempImage);
    105             psStringAppend(&maskName, "%s/%s.%d.%s", tempDir, tempName, i, tempMask);
    106             psStringAppend(&varianceName, "%s/%s.%d.%s", tempDir, tempName, i, tempVariance);
    107             psTrace("ppStack", 5, "Temporary files: %s %s %s\n", imageName, maskName, varianceName);
    108             options->imageNames->data[i] = imageName;
    109             options->maskNames->data[i] = maskName;
    110             options->varianceNames->data[i] = varianceName;
    111         }
    112         psFree(outputName);
    113     } else {
    114         options->imageNames = stackNameArray(options, config, "PPSTACK.INPUT");
    115         options->maskNames = stackNameArray(options, config, "PPSTACK.INPUT.MASK");
    116         options->varianceNames = stackNameArray(options, config, "PPSTACK.INPUT.VARIANCE");
     74    options->imageNames = psArrayAlloc(num);
     75    options->maskNames = psArrayAlloc(num);
     76    options->varianceNames = psArrayAlloc(num);
     77    for (int i = 0; i < num; i++) {
     78        psString imageName = NULL, maskName = NULL, varianceName = NULL; // Names for convolved images
     79        psStringAppend(&imageName, "%s/%s.%d.%s", tempDir, tempName, i, tempImage);
     80        psStringAppend(&maskName, "%s/%s.%d.%s", tempDir, tempName, i, tempMask);
     81        psStringAppend(&varianceName, "%s/%s.%d.%s", tempDir, tempName, i, tempVariance);
     82        psTrace("ppStack", 5, "Temporary files: %s %s %s\n", imageName, maskName, varianceName);
     83        options->imageNames->data[i] = imageName;
     84        options->maskNames->data[i] = maskName;
     85        options->varianceNames->data[i] = varianceName;
    11786    }
     87    psFree(outputName);
    11888
    11989    if (!pmConfigMaskSetBits(NULL, NULL, config)) {
  • branches/cnb_branches/cnb_branch_20090301/ppStack/src/ppStackVersion.c

    r23352 r24244  
    1010
    1111#include "ppStack.h"
     12#include "ppStackVersionDefinitions.h"
    1213
    1314#ifndef PPSTACK_VERSION
     
    2122#endif
    2223
    23 #define xstr(s) str(s)
    24 #define str(s) #s
    25 
    2624psString ppStackVersion(void)
    2725{
    2826    char *value = NULL;
    29     psStringAppend(&value, "%s@%s", xstr(PPSTACK_BRANCH), xstr(PPSTACK_VERSION));
     27    psStringAppend(&value, "%s@%s", PPSTACK_BRANCH, PPSTACK_VERSION);
    3028    return value;
    3129}
     
    3331psString ppStackSource(void)
    3432{
    35     return psStringCopy(xstr(PPSTACK_SOURCE));
     33    return psStringCopy(PPSTACK_SOURCE);
    3634}
    3735
Note: See TracChangeset for help on using the changeset viewer.