cfitsio
CFITSIO is a library of C and Fortran subroutines for reading and writing data files in FITS (Flexible Image Transport System) data format. CFITSIO provides simple high-level routines for reading and writing FITS files that insulate the programmer from the internal complexities of the FITS format.
Usage
After connecting to Stanage (see Establishing a SSH connection), start an interactive session with the following command:
srun --pty bash -i
To make this library available, run one of the following module commands:
module load CFITSIO/4.2.0-GCCcore-12.2.0
module load CFITSIO/3.49-GCCcore-11.2.0
module load CFITSIO/3.49-GCCcore-10.3.0
module load CFITSIO/3.49-GCCcore-10.2.0
module load CFITSIO/3.48-GCCcore-9.3.0
module load CFITSIO/3.45-GCCcore-7.3.0
Installation notes
This section is primarily for administrators of the system. CFITSIO has been installed using the default Easybuild config files.
Build logs and test reports can be found in $EBDEVELCFITSIO
with a given module loaded.
Testing
Create a test.c
file containing the following (source):
#include <string.h>
#include <stdio.h>
#include "fitsio.h"
int main(int argc, char *argv[])
{
fitsfile *fptr;
char card[FLEN_CARD];
int status = 0, nkeys, ii; /* MUST initialize status */
fits_open_file(&fptr, argv[1], READONLY, &status);
fits_get_hdrspace(fptr, &nkeys, NULL, &status);
for (ii = 1; ii <= nkeys; ii++) {
fits_read_record(fptr, ii, card, &status); /* read keyword */
printf("%s\n", card);
}
printf("END\n\n"); /* terminate listing with END */
fits_close_file(fptr, &status);
if (status) /* print any error messages */
fits_report_error(stderr, status);
return(status);
}
Fits file downloaded from here.
$ module load CFITSIO/3.49-GCCcore-10.2.0
$ module load GCC/GCCcore-10.2.0
$ gcc test.c -o test -lm /opt/apps/testapps/el7/software/staging/CFITSIO/3.49-GCCcore-10.2.0/lib/libcfitsio.so
$ ./test IUElwp25637mxlo.fits | head
The output should look like:
SIMPLE = T / Standard FITS Format
BITPIX = 8 / 8 bits ASCII
NAXIS = 0 / No image data
EXTEND = T / Extensions are present
TELESCOP= 'IUE ' / International Ultraviolet Explorer
DATE = '29/12/95' / Date file was written
ORIGIN = 'GSFC ' / Institution generating the file
COMMENT *
COMMENT * CORE DATA ITEMS - COMMON SET
COMMENT *
Multi-thread Testing
Download and unpack threadtest.tar.gz
Navigate into unpacked directory threadtest/
. Next enter the following commands:
module load CFITSIO/3.49-GCCcore-11.2.0
module load GCC/11.2.0
gcc fits_threads.c -lcfitsio -o fits_threads
gcc fits_threads2.c -lcfitsio -o fits_threads2
gcc threadhello.c -fopenmp -o threadhello
Next source each compiled file (expected output shown):
$ ./fits_threads
7 7 7 6 6 6 6 6 5 4
5 7 11 18 27 36 48 59 74 123
178 89 95 100 105 111 117 125 133 141
147 155 166 175 185 193 192 196 199 200
200 200 200 203 204 204 207 207 207 211
211 209 210 211 211 213 214 213 214 215
216 216 216 217 218 218 219 218 220 221
221 220 219 220 221 220 221 221 223 225
222 223 224 223 223 225 224 223 224 225
225 226 225 221 224 225 226 228 231 232
22 22 22 21 21 21 21 21 20 19
20 22 26 33 42 51 63 74 89 138
193 104 110 115 120 126 132 140 148 156
162 170 181 190 200 208 207 211 214 215
215 215 215 218 219 219 222 222 222 226
226 224 225 226 226 228 229 228 229 230
231 231 231 232 233 233 234 233 235 236
236 235 234 235 236 235 236 236 238 240
237 238 239 238 238 240 239 238 239 240
240 241 240 236 239 240 241 243 246 247
$ ./fits_threads2
sum of image 0 = 34417584.000000
sum of image 1 = 36397848.000000
$ ./threadhello
Hello from thread 6, nthreads 8
Hello from thread 7, nthreads 8
Hello from thread 5, nthreads 8
Hello from thread 2, nthreads 8
Hello from thread 3, nthreads 8
Hello from thread 0, nthreads 8
Hello from thread 1, nthreads 8
Hello from thread 4, nthreads 8