IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 22, 2008, 5:08:03 PM (18 years ago)
Author:
Paul Price
Message:

Merging pap_branch_080117 onto mainline.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/fits/psFits.c

    r15919 r16185  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.76 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2007-12-25 01:29:42 $
     9 *  @version $Revision: 1.77 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2008-01-23 03:08:03 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    7878        fitsClose(fits);
    7979    }
    80     psFree (fits->extword);
     80    psFree(fits->options);
    8181}
    8282
     
    160160
    161161    psFits* fits = psAlloc(sizeof(psFits));
     162    psMemSetDeallocator(fits, (psFreeFunc)fitsFree);
     163
    162164    fits->fd = fptr;
    163165    fits->writable = (iomode == READWRITE);
    164     fits->extword = NULL;
    165     fits->conventions.compression = true;
    166     fits->conventions.psBitpix = true;
    167     fits->bitpix = 0;
    168     fits->floatType = PS_FITS_FLOAT_NONE;
    169     psMemSetDeallocator(fits,(psFreeFunc)fitsFree);
     166
     167    fits->options = NULL;
    170168
    171169    return fits;
     170}
     171
     172
     173static void fitsOptionsFree(psFitsOptions *options)
     174{
     175    psFree(options->extword);
     176}
     177
     178
     179psFitsOptions *psFitsOptionsAlloc(void)
     180{
     181    psFitsOptions *options = psAlloc(sizeof(psFitsOptions)); // Options, to return
     182    psMemSetDeallocator(options, (psFreeFunc)fitsOptionsFree);
     183
     184    options->extword = NULL;
     185
     186    options->conventions.compression = true;
     187    options->conventions.psBitpix = true;
     188
     189    options->floatType = PS_FITS_FLOAT_NONE;
     190
     191    options->bitpix = 0;
     192
     193    options->scaling = PS_FITS_SCALE_NONE;
     194    options->fuzz = true;
     195    options->bscale = 1.0;
     196    options->bzero = 0.0;
     197    options->mean = NAN;
     198    options->stdev = NAN;
     199    options->stdevBits = 4;
     200    options->stdevNum = 5.0;
     201
     202    return options;
    172203}
    173204
     
    227258}
    228259
    229 bool psFitsSetExtnameWord (psFits *fits, const char *extword)
     260bool psFitsSetExtnameWord(psFits *fits, const char *extword)
    230261{
    231262    PS_ASSERT_PTR_NON_NULL(fits,    false);
    232263    PS_ASSERT_PTR_NON_NULL(extword, false);
    233264
    234     psFree (fits->extword);
    235     fits->extword = psStringCopy (extword);
     265    if (!fits->options) {
     266        fits->options = psFitsOptionsAlloc();
     267    }
     268
     269    psFree(fits->options->extword);
     270    fits->options->extword = psStringCopy(extword);
    236271    return true;
    237272}
     
    251286    int status = 0;
    252287
    253     if (!fits->conventions.compression && !fits->extword) {
     288    psFitsOptions *options = fits->options; // FITS options
     289    if (options && !options->conventions.compression && !options->extword) {
    254290        // User wants to use cfitsio.  Good luck to them!
    255291        if (fits_movnam_hdu(fits->fd, ANY_HDU, (char*)extname, 0, &status) != 0) {
     
    260296    }
    261297
    262     bool ignoreCI = (fits->conventions.compression &&
     298    bool ignoreCI = (options->conventions.compression &&
    263299                     (strcmp(extname, "COMPRESSED_IMAGE") != 0)); // Ignore COMPRESSED_IMAGE extension name?
    264     char *extword = (fits->extword ? fits->extword : "EXTNAME"); // Word to use as extension name
     300    char *extword = (options->extword ? options->extword : "EXTNAME"); // Word to use as extension name
    265301
    266302#if 0
     
    365401    char name[MAX_STRING_LENGTH];
    366402
    367     char *extword = (fits->extword == NULL) ? defaultExtword : fits->extword;
     403    psFitsOptions *options = fits->options; // FITS options
     404    char *extword = (!options || !options->extword) ? defaultExtword : options->extword;
    368405
    369406    if (fits_read_key_str(fits->fd, extword, name, NULL, &status) != 0) {
    370         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    371                 _("Header keyword %s is not found"), extword);
     407        psError(PS_ERR_BAD_PARAMETER_NULL, true, _("Header keyword %s is not found"), extword);
    372408        return NULL;
    373409    }
     
    382418    int status = 0;
    383419
    384     char *extword = (fits->extword == NULL) ? defaultExtword : fits->extword;
     420    psFitsOptions *options = fits->options; // FITS options
     421    char *extword = (!options || !options->extword) ? defaultExtword : options->extword;
    385422
    386423    if (fits_update_key_str(fits->fd, extword, (char*)name, NULL, &status) != 0) {
    387424        char fitsErr[MAX_STRING_LENGTH];
    388425        (void)fits_get_errstatus(status, fitsErr);
    389         psError(PS_ERR_IO, true,
    390                 _("Could not write data to file. CFITSIO Error: %s"),
    391                 fitsErr);
     426        psError(PS_ERR_IO, true, _("Could not write data to file. CFITSIO Error: %s"), fitsErr);
    392427        return false;
    393428    }
     
    404439
    405440    // move to the specified HDU
    406     if (! psFitsMoveExtNum(fits,extnum,relative) ) {
    407         psError(PS_ERR_BAD_PARAMETER_VALUE, false,
    408                 "Failed to delete HDU #%d",
    409                 extnum);
     441    if (!psFitsMoveExtNum(fits, extnum, relative) ) {
     442        psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Failed to delete HDU #%d", extnum);
    410443        return false;
    411444    }
     
    417450        char fitsErr[MAX_STRING_LENGTH];
    418451        (void)fits_get_errstatus(status, fitsErr);
    419         psError(PS_ERR_IO, true,
    420                 _("Could not write data to file. CFITSIO Error: %s"),
    421                 fitsErr);
     452        psError(PS_ERR_IO, true, _("Could not write data to file. CFITSIO Error: %s"), fitsErr);
    422453        return false;
    423454    }
     
    598629    // that is the restriction; data must be 32 or 64 bit for noise bits to be valid.
    599630    if (type != PS_FITS_COMPRESS_PLIO) {
    600         if (fits_set_noise_bits(fits->fd, noisebits, &status)) {
    601             fits_set_compression_type(fits->fd, 0x0, &status);
    602             char fitsErr[MAX_STRING_LENGTH];
    603             fits_get_errstatus(status, fitsErr);
    604             psError(PS_ERR_BAD_FITS, true,
    605                     "Error while configuring compression. CFITSIO error: %s", fitsErr);
    606             return false;
    607         }
     631        if (fits_set_noise_bits(fits->fd, noisebits, &status)) {
     632            fits_set_compression_type(fits->fd, 0x0, &status);
     633            char fitsErr[MAX_STRING_LENGTH];
     634            fits_get_errstatus(status, fitsErr);
     635            psError(PS_ERR_BAD_FITS, true,
     636                    "Error while configuring compression. CFITSIO error: %s", fitsErr);
     637            return false;
     638        }
    608639    }
    609640
Note: See TracChangeset for help on using the changeset viewer.