1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
|
/* This file, scalnull.c, contains the FITSIO routines used to define */
/* the starting heap address, the value scaling and the null values. */
/* The FITSIO software was written by William Pence at the High Energy */
/* Astrophysic Science Archive Research Center (HEASARC) at the NASA */
/* Goddard Space Flight Center. */
#include <string.h>
#include "fitsio2.h"
/*--------------------------------------------------------------------------*/
int ffpthp(fitsfile *fptr, /* I - FITS file pointer */
long theap, /* I - starting addrss for the heap */
int *status) /* IO - error status */
/*
Define the starting address for the heap for a binary table.
The default address is NAXIS1 * NAXIS2. It is in units of
bytes relative to the beginning of the regular binary table data.
This routine also writes the appropriate THEAP keyword to the
FITS header.
*/
{
if (*status > 0 || theap < 1)
return(*status);
/* reset position to the correct HDU if necessary */
if (fptr->HDUposition != (fptr->Fptr)->curhdu)
ffmahd(fptr, (fptr->HDUposition) + 1, NULL, status);
(fptr->Fptr)->heapstart = theap;
ffukyj(fptr, "THEAP", theap, "byte offset to heap area", status);
return(*status);
}
/*--------------------------------------------------------------------------*/
int ffpscl(fitsfile *fptr, /* I - FITS file pointer */
double scale, /* I - scaling factor: value of BSCALE */
double zero, /* I - zero point: value of BZERO */
int *status) /* IO - error status */
/*
Define the linear scaling factor for the primary array or image extension
pixel values. This routine overrides the scaling values given by the
BSCALE and BZERO keywords if present. Note that this routine does not
write or modify the BSCALE and BZERO keywords, but instead only modifies
the values temporarily in the internal buffer. Thus, a subsequent call to
the ffrdef routine will reset the scaling back to the BSCALE and BZERO
keyword values (or 1. and 0. respectively if the keywords are not present).
*/
{
tcolumn *colptr;
int hdutype;
if (*status > 0)
return(*status);
if (scale == 0)
return(*status = ZERO_SCALE); /* zero scale value is illegal */
if (ffghdt(fptr, &hdutype, status) > 0) /* get HDU type */
return(*status);
if (hdutype != IMAGE_HDU)
return(*status = NOT_IMAGE); /* not proper HDU type */
if (fits_is_compressed_image(fptr, status)) /* compressed images */
{
(fptr->Fptr)->cn_bscale = scale;
(fptr->Fptr)->cn_bzero = zero;
return(*status);
}
/* set pointer to the first 'column' (contains group parameters if any) */
colptr = (fptr->Fptr)->tableptr;
colptr++; /* increment to the 2nd 'column' pointer (the image itself) */
colptr->tscale = scale;
colptr->tzero = zero;
return(*status);
}
/*--------------------------------------------------------------------------*/
int ffpnul(fitsfile *fptr, /* I - FITS file pointer */
LONGLONG nulvalue, /* I - null pixel value: value of BLANK */
int *status) /* IO - error status */
/*
Define the value used to represent undefined pixels in the primary array or
image extension. This only applies to integer image pixel (i.e. BITPIX > 0).
This routine overrides the null pixel value given by the BLANK keyword
if present. Note that this routine does not write or modify the BLANK
keyword, but instead only modifies the value temporarily in the internal
buffer. Thus, a subsequent call to the ffrdef routine will reset the null
value back to the BLANK keyword value (or not defined if the keyword is not
present).
*/
{
tcolumn *colptr;
int hdutype;
if (*status > 0)
return(*status);
if (ffghdt(fptr, &hdutype, status) > 0) /* get HDU type */
return(*status);
if (hdutype != IMAGE_HDU)
return(*status = NOT_IMAGE); /* not proper HDU type */
if (fits_is_compressed_image(fptr, status)) /* ignore compressed images */
return(*status);
/* set pointer to the first 'column' (contains group parameters if any) */
colptr = (fptr->Fptr)->tableptr;
colptr++; /* increment to the 2nd 'column' pointer (the image itself) */
colptr->tnull = nulvalue;
return(*status);
}
/*--------------------------------------------------------------------------*/
int fftscl(fitsfile *fptr, /* I - FITS file pointer */
int colnum, /* I - column number to apply scaling to */
double scale, /* I - scaling factor: value of TSCALn */
double zero, /* I - zero point: value of TZEROn */
int *status) /* IO - error status */
/*
Define the linear scaling factor for the TABLE or BINTABLE extension
column values. This routine overrides the scaling values given by the
TSCALn and TZEROn keywords if present. Note that this routine does not
write or modify the TSCALn and TZEROn keywords, but instead only modifies
the values temporarily in the internal buffer. Thus, a subsequent call to
the ffrdef routine will reset the scaling back to the TSCALn and TZEROn
keyword values (or 1. and 0. respectively if the keywords are not present).
*/
{
tcolumn *colptr;
int hdutype;
if (*status > 0)
return(*status);
if (scale == 0)
return(*status = ZERO_SCALE); /* zero scale value is illegal */
if (ffghdt(fptr, &hdutype, status) > 0) /* get HDU type */
return(*status);
if (hdutype == IMAGE_HDU)
return(*status = NOT_TABLE); /* not proper HDU type */
colptr = (fptr->Fptr)->tableptr; /* set pointer to the first column */
colptr += (colnum - 1); /* increment to the correct column */
colptr->tscale = scale;
colptr->tzero = zero;
return(*status);
}
/*--------------------------------------------------------------------------*/
int fftnul(fitsfile *fptr, /* I - FITS file pointer */
int colnum, /* I - column number to apply nulvalue to */
LONGLONG nulvalue, /* I - null pixel value: value of TNULLn */
int *status) /* IO - error status */
/*
Define the value used to represent undefined pixels in the BINTABLE column.
This only applies to integer datatype columns (TFORM = B, I, or J).
This routine overrides the null pixel value given by the TNULLn keyword
if present. Note that this routine does not write or modify the TNULLn
keyword, but instead only modifies the value temporarily in the internal
buffer. Thus, a subsequent call to the ffrdef routine will reset the null
value back to the TNULLn keyword value (or not defined if the keyword is not
present).
*/
{
tcolumn *colptr;
int hdutype;
if (*status > 0)
return(*status);
if (ffghdt(fptr, &hdutype, status) > 0) /* get HDU type */
return(*status);
if (hdutype != BINARY_TBL)
return(*status = NOT_BTABLE); /* not proper HDU type */
colptr = (fptr->Fptr)->tableptr; /* set pointer to the first column */
colptr += (colnum - 1); /* increment to the correct column */
colptr->tnull = nulvalue;
return(*status);
}
/*--------------------------------------------------------------------------*/
int ffsnul(fitsfile *fptr, /* I - FITS file pointer */
int colnum, /* I - column number to apply nulvalue to */
char *nulstring, /* I - null pixel value: value of TNULLn */
int *status) /* IO - error status */
/*
Define the string used to represent undefined pixels in the ASCII TABLE
column. This routine overrides the null value given by the TNULLn keyword
if present. Note that this routine does not write or modify the TNULLn
keyword, but instead only modifies the value temporarily in the internal
buffer. Thus, a subsequent call to the ffrdef routine will reset the null
value back to the TNULLn keyword value (or not defined if the keyword is not
present).
*/
{
tcolumn *colptr;
int hdutype;
if (*status > 0)
return(*status);
if (ffghdt(fptr, &hdutype, status) > 0) /* get HDU type */
return(*status);
if (hdutype != ASCII_TBL)
return(*status = NOT_ATABLE); /* not proper HDU type */
colptr = (fptr->Fptr)->tableptr; /* set pointer to the first column */
colptr += (colnum - 1); /* increment to the correct column */
colptr->strnull[0] = '\0';
strncat(colptr->strnull, nulstring, 19); /* limit string to 19 chars */
return(*status);
}
|