Changeset 15487 for trunk/Ohana/src/libfits
- Timestamp:
- Nov 6, 2007, 5:09:52 PM (19 years ago)
- Location:
- trunk/Ohana/src/libfits
- Files:
-
- 10 added
- 22 edited
-
Makefile (modified) (5 diffs)
-
doc/notes-compress.txt (modified) (3 diffs)
-
extern (added)
-
extern/fits_hcompress.c (added)
-
extern/fits_hdecompress.c (added)
-
extern/pliocomp.c (added)
-
extern/ricecomp.c (added)
-
extern/ricecomp.h (added)
-
header/F_convert_H.c (added)
-
header/F_copy_H.c (modified) (1 diff)
-
header/F_create_H.c (modified) (1 diff)
-
header/F_init_H.c (modified) (1 diff)
-
header/F_read_H.c (modified) (1 diff)
-
header/F_read_XH.c (modified) (1 diff)
-
include/gfitsio.h (modified) (3 diffs)
-
matrix/F_compress_M.c (added)
-
matrix/F_convert_format.c (modified) (1 diff)
-
matrix/F_create_M.c (modified) (1 diff)
-
matrix/F_get_M_value.c (modified) (1 diff)
-
matrix/F_insert_M.c (modified) (1 diff)
-
matrix/F_load_M.c (modified) (1 diff)
-
matrix/F_matrix.c (modified) (2 diffs)
-
matrix/F_set_M_value.c (modified) (1 diff)
-
matrix/F_uncompress_data.c (added)
-
table/F_create_T.c (modified) (2 diffs)
-
table/F_create_TH.c (modified) (5 diffs)
-
table/F_read_T.c (modified) (7 diffs)
-
table/F_read_TH.c (modified) (1 diff)
-
table/F_set_column.c (modified) (2 diffs)
-
table/F_table_format.c (modified) (7 diffs)
-
table/F_table_row.c (modified) (3 diffs)
-
table/F_table_varlength.c (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/libfits/Makefile
r12879 r15487 10 10 MATR = $(HOME)/matrix 11 11 TABL = $(HOME)/table 12 EXT = $(HOME)/extern 12 13 INC = $(HOME)/include 13 14 MAN = $(HOME)/doc … … 15 16 16 17 # programs may add their own internal requirements here 17 FULL_CFLAGS = $(BASE_CFLAGS) -fPIC 18 FULL_CPPFLAGS = $(BASE_CPPFLAGS) 18 FULL_CFLAGS = $(BASE_CFLAGS) -fPIC -Wall -Werror 19 FULL_CPPFLAGS = $(BASE_CPPFLAGS) -I$(EXT) 19 20 FULL_LDFLAGS = $(BASE_LDFLAGS) 20 21 … … 32 33 $(HEAD)/F_copy_H.$(ARCH).o $(HEAD)/F_delete.$(ARCH).o \ 33 34 $(HEAD)/F_read_XH.$(ARCH).o $(HEAD)/F_init_H.$(ARCH).o \ 34 $(HEAD)/ version.$(ARCH).o35 $(HEAD)/F_convert_H.$(ARCH).o $(HEAD)/version.$(ARCH).o 35 36 36 37 MATRIX_OBJ = \ … … 43 44 $(MATR)/F_convert_format.$(ARCH).o $(MATR)/F_read_segment.$(ARCH).o \ 44 45 $(MATR)/F_read_portion.$(ARCH).o $(MATR)/F_load_M.$(ARCH).o \ 45 $(MATR)/F_matrix.$(ARCH).o 46 $(MATR)/F_matrix.$(ARCH).o $(MATR)/F_compress_M.$(ARCH).o \ 47 $(MATR)/F_uncompress_data.$(ARCH).o 46 48 47 49 TABLE_OBJ = \ … … 51 53 $(TABL)/F_define_column.$(ARCH).o $(TABL)/F_table_format.$(ARCH).o \ 52 54 $(TABL)/F_set_column.$(ARCH).o $(TABL)/F_get_column.$(ARCH).o \ 53 $(TABL)/F_table_row.$(ARCH).o $(TABL)/F_free_T.$(ARCH).o 55 $(TABL)/F_table_row.$(ARCH).o $(TABL)/F_free_T.$(ARCH).o \ 56 $(TABL)/F_table_varlength.$(ARCH).o 54 57 55 OBJS = $(HEADER_OBJ) $(MATRIX_OBJ) $(TABLE_OBJ) 58 EXTERN_OBJ = \ 59 $(EXT)/fits_hcompress.$(ARCH).o \ 60 $(EXT)/fits_hdecompress.$(ARCH).o \ 61 $(EXT)/pliocomp.$(ARCH).o \ 62 $(EXT)/ricecomp.$(ARCH).o 63 64 OBJS = $(HEADER_OBJ) $(MATRIX_OBJ) $(TABLE_OBJ) $(EXTERN_OBJ) 65 66 extern: $(EXTERN_OBJ) 56 67 57 68 $(OBJS): $(INCS) -
trunk/Ohana/src/libfits/doc/notes-compress.txt
r15240 r15487 1 2 TFORMn : rPt(e_max) 3 r is 0, 1, or absent 4 P is literal 5 t is datatype character for binary tables 6 e_max is the largest record in the column 7 8 data column actually contains: 2 32bit values: 9 Length + Offset 10 11 THEAP : offset from start of data to start of heap 12 (note that the heap starts at NAXIS1 x NAXIS2, not Nx2880 bytes). 13 14 total size of heap segment (gap + heap data) is PCOUNT 1 15 2 16 I need to implement (at least) support for read of compressed images. … … 16 30 level ones as needed. 17 31 18 * possible needed APIs :32 * possible needed APIs & upgrades: 19 33 20 34 - gfits_image_is_compressed (Header *header) … … 30 44 compress the given image returning the table data 31 45 46 o include PCOUNT in data area size (gfits_matrix_size) 32 47 48 o read heap when reading table (gfits_fread_table_data) 49 50 - void *gfits_varlength_column_pointer (FTable *ftable, VarLengthColumn *column, int row); 51 52 o int gfits_varlength_column_define (FTable *ftable, VarLengthColumn *def, int column); 53 54 -
trunk/Ohana/src/libfits/header/F_copy_H.c
r7039 r15487 8 8 9 9 out[0].simple = in[0].simple; 10 out[0].unsign = in[0].unsign; 11 out[0].extend = in[0].extend; 10 12 out[0].bitpix = in[0].bitpix; 11 out[0].extend = in[0].extend; 12 out[0].unsign = in[0].unsign; 13 out[0].size = in[0].size; 14 out[0].bscale = in[0].bscale; 15 out[0].bzero = in[0].bzero; 13 16 14 out[0].Naxes = in[0].Naxes; 17 15 for (i = 0; i < FT_MAX_NAXES; i++) 18 16 out[0].Naxis[i] = in[0].Naxis[i]; 17 18 out[0].size = in[0].size; 19 20 out[0].pcount = in[0].pcount; 21 out[0].gcount = in[0].gcount; 22 out[0].bzero = in[0].bzero; 23 out[0].bscale = in[0].bscale; 19 24 20 25 ALLOCATE (out[0].buffer, char, out[0].size); -
trunk/Ohana/src/libfits/header/F_create_H.c
r7054 r15487 22 22 23 23 for (i = 0; i < header[0].Naxes; i++) { 24 s printf (axis, "NAXIS%d", i + 1);24 snprintf (axis, 10, "NAXIS%d", i + 1); 25 25 gfits_modify (header, axis, "%d", 1, header[0].Naxis[i]); 26 26 } 27 27 28 /* PCOUNT & GCOUNT are not implemented, but they are required to be here */ 29 gfits_modify (header, "PCOUNT", "%d", 1, 0); 30 gfits_modify (header, "GCOUNT", "%d", 1, 1); 28 gfits_modify (header, "PCOUNT", "%d", 1, header[0].pcount); 29 gfits_modify (header, "GCOUNT", "%d", 1, header[0].gcount); 31 30 gfits_modify (header, "BSCALE", "%lf", 1, header[0].bscale); 32 31 gfits_modify (header, "BZERO", "%lf", 1, header[0].bzero); -
trunk/Ohana/src/libfits/header/F_init_H.c
r12902 r15487 11 11 header[0].extend = FALSE; 12 12 header[0].unsign = FALSE; 13 header[0].bscale = 1; 14 header[0].bzero = 0; 13 header[0].pcount = 0; 14 header[0].gcount = 1; 15 header[0].bscale = 1.0; 16 header[0].bzero = 0.0; 15 17 header[0].bitpix = 8; 16 18 header[0].Naxes = 0; -
trunk/Ohana/src/libfits/header/F_read_H.c
r12902 r15487 76 76 gfits_scan (header, "NAXIS10", "%d", 1, &header[0].Naxis[9]); 77 77 78 if (!gfits_scan (header, "PCOUNT", "%d", 1, &header[0].pcount)) { 79 header[0].pcount = 0; 80 } 81 if (!gfits_scan (header, "GCOUNT", "%d", 1, &header[0].gcount)) { 82 header[0].gcount = 1; 83 } 84 78 85 return (TRUE); 79 86 -
trunk/Ohana/src/libfits/header/F_read_XH.c
r13145 r15487 45 45 } 46 46 47 Nmatrix = gfits_ matrix_size (&theader);47 Nmatrix = gfits_data_size (&theader); 48 48 49 49 /* skip to next header */ -
trunk/Ohana/src/libfits/include/gfitsio.h
r15038 r15487 1 1 /* FITS specific macros and structures */ 2 3 # include <assert.h> 2 4 3 5 # ifndef GFITSIO … … 48 50 int Naxis[FT_MAX_NAXES]; 49 51 int size; 52 int pcount; 53 int gcount; 50 54 double bzero; 51 55 double bscale; … … 84 88 } VTable; 85 89 90 typedef struct { 91 int maxlen; // max size of all table rows 92 int nbytes; // number of bytes per column element 93 int Nstart; // byte offset of this column 94 int heap_start; // byte offset to start of HEAP 95 char format; // data format character (one of: XLABIJEDCM) 96 } VarLengthColumn; 97 86 98 # ifndef PROTO 87 99 # define PROTO(A) A 88 100 # endif 89 101 90 char *gfits_version PROTO(());102 char *gfits_version PROTO((void)); 91 103 92 104 /******************************* Header functions *************/ 93 int gfits_read_header PROTO((char *, Header *)); 94 // int fits_copy_header PROTO((Header *, Header *)); 95 int gfits_copy_header PROTO((Header *, Header *)); 96 void gfits_free_header PROTO((Header *)); 97 int gfits_write_header PROTO((char *, Header *)); 98 int gfits_create_header PROTO((Header *)); 99 int gfits_delete PROTO((Header *, char *, int)); 100 char *gfits_header_field PROTO((Header *, char *, int)); 101 int gfits_read_Xheader PROTO((char *filename, Header *header, int N)); 102 int gfits_fread_Xheader PROTO((FILE *f, Header *header, int N)); 103 int gfits_load_header PROTO((FILE *f, Header *header)); 104 105 int gfits_fread_header PROTO((FILE *, Header *)); 106 int gfits_fread_Theader PROTO((FILE *, Header *)); 107 int gfits_fread_ftable PROTO((FILE *, FTable *, char *)); 108 int gfits_fread_vtable_range PROTO((FILE *f, VTable *table, int start, int Nrows)); 109 int gfits_fread_vtable PROTO((FILE *f, VTable *table, char *extname, int Nrow, int *row)); 110 int gfits_fread_ftable_data PROTO((FILE *f, FTable *table)); 111 int gfits_fwrite_header PROTO((FILE *, Header *)); 112 int gfits_fwrite_Theader PROTO((FILE *, Header *)); 113 int gfits_fwrite_matrix PROTO((FILE *, Matrix *)); 114 int gfits_fwrite_table PROTO((FILE *, FTable *)); 115 int gfits_fwrite_vtable PROTO((FILE *, VTable *)); 116 117 int gfits_matrix_size PROTO ((Header *)); 118 int gfits_init_header PROTO ((Header *)); 119 int gfits_get_unsign_mode PROTO (()); 120 int gfits_set_unsign_mode PROTO ((int mode)); 121 int gfits_create_table_header PROTO ((Header *, char *, char *)); 122 int gfits_vtable_from_ftable PROTO ((FTable *ftable, VTable *vtable, int *row, int Nrow)); 123 int gfits_table_to_vtable PROTO ((FTable *ftable, VTable *vtable, int start, int Nkeep)); 124 int gfits_create_table PROTO ((Header *, FTable *)); 125 int gfits_vadd_rows PROTO ((VTable *, char *, int, int)); 126 int gfits_add_rows PROTO ((FTable *, char *, int, int)); 127 char *gfits_table_print PROTO ((FTable *,...)); 128 int gfits_table_scale_data PROTO ((FTable *ftable)); 129 int gfits_table_scale_storage PROTO ((FTable *ftable)); 105 106 char *gfits_header_field PROTO((Header *header, char *field, int N)); 107 char *gfits_keyword_end PROTO((char *line)); 108 int gfits_copy_header PROTO((Header *in, Header *out)); 109 int gfits_create_header PROTO((Header *header)); 110 int gfits_delete PROTO((Header *header, char *field, int N)); 111 int gfits_fread_Xheader PROTO((FILE *f, Header *header, int N)); 112 int gfits_fread_header PROTO((FILE *f, Header *header)); 113 void gfits_free_header PROTO((Header *header)); 114 int gfits_fwrite_header PROTO((FILE *f, Header *header)); 115 int gfits_get_unsign_mode PROTO((void)); 116 int gfits_init_header PROTO((Header *header)); 117 int gfits_load_header PROTO((FILE *f, Header *header)); 118 int gfits_modify PROTO((Header *header, char *field, char *mode, int N,...)); 119 int gfits_print PROTO((Header *header, char *field, char *mode, int N,...)); 120 int gfits_read_Xheader PROTO((char *filename, Header *header, int N)); 121 int gfits_read_header PROTO((char *filename, Header *header)); 122 int gfits_save_header PROTO((FILE *f, Header *header)); 123 int gfits_scan PROTO((Header *header, char *field, char *mode, int N,...)); 124 int gfits_set_unsign_mode PROTO((int mode)); 125 int gfits_stripwhite PROTO((char *string)); 126 int gfits_vscan PROTO((Header *header, char *field, char *mode, int N, va_list argp)); 127 int gfits_write_header PROTO((char *filename, Header *header)); 128 int gfits_data_size PROTO((Header *header)); 129 int gfits_extended_to_primary PROTO((Header *header, int simple, char *comment)); 130 int gfits_primary_to_extended PROTO((Header *header, char *exttype, char *comment)); 131 int gfits_modify_extended PROTO((Header *header, char *exttype, char *comment)); 132 130 133 131 134 /******************************* Matrix functions *************/ 132 int gfits_read_matrix PROTO((char *, Matrix *)); 133 int gfits_read_portion PROTO((char *filename, Matrix *matrix, int Nskip, int Npix)); 134 void gfits_free_matrix PROTO((Matrix *)); 135 int gfits_copy_matrix PROTO((Matrix *, Matrix *)); 136 int gfits_write_matrix PROTO((char *,Matrix *)); 137 int gfits_create_matrix PROTO((Header *, Matrix *)); 138 double gfits_get_matrix_value PROTO((Matrix *, int, int)); 139 void gfits_set_matrix_value PROTO((Matrix *, int, int, double)); 140 void gfits_add_matrix_value PROTO((Matrix *, int, int, double)); 141 int gfits_multiply_matrix PROTO((Matrix *, Matrix *, Matrix *)); 142 int gfits_divide_matrix PROTO((Matrix *, Matrix *, Matrix *)); 143 void gfits_insert_array PROTO((Matrix *, Matrix *, int, int)); 144 int gfits_load_matrix PROTO((FILE *f, Matrix *matrix, Header *header)); 145 int gfits_fread_matrix PROTO((FILE *f, Matrix *matrix, Header *header)); 146 int gfits_read_matrix_segment PROTO((char *filename, Matrix *matrix, char *region)); 147 int gfits_fread_matrix_segment PROTO((FILE *f, Matrix *matrix, Header *header, char *region)); 148 int gfits_convert_format PROTO((Header *header, Matrix *matrix, int outBitpix, double outScale, double outZero, int outUnsign)); 135 136 void gfits_add_matrix_value PROTO((Matrix *matrix, int x, int y, double value)); 137 int gfits_convert_format PROTO((Header *header, Matrix *matrix, int outBitpix, double outScale, double outZero, int outUnsign)); 138 int gfits_copy_matrix PROTO((Matrix *in, Matrix *out)); 139 int gfits_create_matrix PROTO((Header *header, Matrix *matrix)); 140 int gfits_divide_matrix PROTO((Matrix *M1, Matrix *M2, Matrix *M3)); 141 int gfits_fread_matrix PROTO((FILE *f, Matrix *matrix, Header *header)); 142 int gfits_fread_matrix_segment PROTO((FILE *f, Matrix *matrix, Header *header, char *region)); 143 void gfits_free_matrix PROTO((Matrix *matrix)); 144 int gfits_fwrite_matrix PROTO((FILE *f, Matrix *matrix)); 145 double gfits_get_matrix_value PROTO((Matrix *matrix, int x, int y)); 146 void gfits_insert_array PROTO((Matrix *matrix, Matrix *array, int x, int y)); 147 int gfits_load_matrix PROTO((FILE *f, Matrix *matrix, Header *header)); 148 int gfits_multiply_matrix PROTO((Matrix *M1, Matrix *M2, Matrix *M3)); 149 int gfits_read_matrix PROTO((char *filename, Matrix *matrix)); 150 int gfits_read_matrix_segment PROTO((char *filename, Matrix *matrix, char *region)); 151 int gfits_read_portion PROTO((char *filename, Matrix *matrix, int Nskip, int Npix)); 152 void gfits_set_matrix_value PROTO((Matrix *matrix, int x, int y, double value)); 153 int gfits_write_matrix PROTO((char *filename, Matrix *matrix)); 154 int gfits_uncompress_image PROTO((Header *header, Matrix *matrix, FTable *ftable, int primary)); 155 int gfits_uncompress_data PROTO((char *zdata, int Nzdata, char *cmptype, char **optname, char **optvalue, int Nopt, char *outdata, int *Nout, int out_pixsize)); 156 int gfits_distribute_data PROTO((Matrix *matrix, int bitpix, char *data, int Ndata, int *otile, int *ztile, float zscale, float zzero)); 157 int gfits_byteswap_zdata PROTO((char *zdata, int Nzdata, int bitpix)); 158 int gfits_extension_is_compressed PROTO((Header *header)); 159 int gfits_tile_size PROTO((Matrix *matrix, int *otile, int *ztile)); 149 160 150 161 /******************************* Table functions *************/ 151 int gfits_load_Theader PROTO((FILE *f, Header *Theader)); 152 int gfits_read_Theader PROTO((char *, Header *)); 153 int gfits_read_table PROTO((char *, FTable *)); 154 int gfits_read_table PROTO((char *, FTable *)); 155 int gfits_write_Theader PROTO((char *, Header *header)); 156 int gfits_write_table PROTO((char *, FTable *)); 157 int gfits_fwrite_table PROTO((FILE *f, FTable *table)); 158 int gfits_fwrite_vtable PROTO((FILE *f, VTable *table)); 159 160 int gfits_bintable_format PROTO((char *, char *, int *, int *)); 161 int gfits_table_format PROTO((char *, char *, int *, int *)); 162 int gfits_save_header PROTO((FILE *, Header *header)); 163 int gfits_set_bintable_column PROTO((Header *header, FTable *table, char *, void *, int)); 164 int gfits_set_table_column PROTO((Header *header, FTable *table, char *, void *, int)); 165 int gfits_define_bintable_column PROTO((Header *header, char *, char *, char *, char *, double, double)); 166 int gfits_define_table_column PROTO((Header *header, char *, char *, char *, char *)); 167 int gfits_read_ftable PROTO((char *filename, FTable *table, char *extname)); 168 169 int gfits_free_table PROTO((FTable *table)); 170 int gfits_free_vtable PROTO((VTable *table)); 171 int gfits_create_Theader PROTO((Header *header, char *type)); 172 173 /* prototyping demanded for these four -- could be a problem on non-ANSI comp comp */ 174 int gfits_scan PROTO((Header *, char *, char *, int,...)); 175 int gfits_print PROTO((Header *, char *, char *, int,...)); 176 int gfits_modify PROTO((Header *, char *, char *, int,...)); 177 int gfits_table_column PROTO((FTable *, char *, char *,...)); 178 int gfits_table_column PROTO((FTable *table, char *, char *,...)); 179 180 char *gfits_keyword_end PROTO((char *line)); 181 int gfits_vscan PROTO((Header *header, char *field, char *mode, int N, va_list argp)); 182 int gfits_scan PROTO((Header *header, char *field, char *mode, int N,...)); 183 int gfits_stripwhite PROTO((char *string)); 184 int gfits_matrix_size PROTO((Header *header)); 185 186 int gfits_get_bintable_column_type PROTO((Header *header, char *label, char *type, int *Nval)); 187 int gfits_get_bintable_column PROTO((Header *header, FTable *table, char *label, void **data)); 188 int gfits_get_table_column_type PROTO((Header *header, char *label, char *type)); 189 int gfits_get_table_column PROTO((Header *header, FTable *table, char *label, void **data)); 162 163 char *gfits_table_print PROTO((FTable *ftable,...)); 164 int gfits_add_rows PROTO((FTable *ftable, char *data, int Nrow, int Nbytes)); 165 int gfits_bintable_format PROTO((char *format, char *type, int *Nval, int *Nbytes)); 166 int gfits_create_table PROTO((Header *header, FTable *ftable)); 167 int gfits_create_table_header PROTO((Header *header, char *type, char *extname)); 168 int gfits_define_bintable_column PROTO((Header *header, char *format, char *label, char *comment, char *unit, double bscale, double bzero)); 169 int gfits_define_table_column PROTO((Header *header, char *format, char *label, char *comment, char *unit)); 170 int gfits_fread_ftable PROTO((FILE *f, FTable *ftable, char *extname)); 171 int gfits_fread_ftable_data PROTO((FILE *f, FTable *ftable)); 172 int gfits_fread_vtable PROTO((FILE *f, VTable *vtable, char *extname, int Nrow, int *row)); 173 int gfits_fread_vtable_range PROTO((FILE *f, VTable *vtable, int start, int Nrows)); 174 int gfits_free_table PROTO((FTable *ftable)); 175 int gfits_free_vtable PROTO((VTable *vtable)); 176 int gfits_fwrite_table PROTO((FILE *f, FTable *table)); 177 int gfits_fwrite_vtable PROTO((FILE *f, VTable *table)); 178 int gfits_get_bintable_column PROTO((Header *header, FTable *table, char *label, void **data)); 179 int gfits_get_bintable_column_type PROTO((Header *header, char *label, char *type, int *Nval)); 180 int gfits_get_table_column PROTO((Header *header, FTable *table, char *label, void **data)); 181 int gfits_get_table_column_type PROTO((Header *header, char *label, char *type)); 182 int gfits_read_ftable PROTO((char *filename, FTable *table, char *extname)); 183 int gfits_read_table PROTO((char *filename, FTable *ftable)); 184 int gfits_set_bintable_column PROTO((Header *header, FTable *table, char *label, void *data, int Nrow)); 185 int gfits_set_table_column PROTO((Header *header, FTable *table, char *label, void *data, int Nrow)); 186 int gfits_table_column PROTO((FTable *ftable, char *field, char *mode,...)); 187 int gfits_table_format PROTO((char *format, char *type, int *Nval, int *Nbytes)); 188 int gfits_table_scale_data PROTO((FTable *ftable)); 189 int gfits_table_scale_storage PROTO((FTable *ftable)); 190 int gfits_table_to_vtable PROTO((FTable *ftable, VTable *vtable, int start, int Nkeep)); 191 int gfits_vadd_rows PROTO((VTable *vtable, char *data, int Nrow, int Nbytes)); 192 int gfits_vtable_from_ftable PROTO((FTable *ftable, VTable *vtable, int *row, int Nrow)); 193 int gfits_write_table PROTO((char *filename, FTable *ftable)); 194 195 int gfits_create_Theader PROTO((Header *header, char *type)); 196 int gfits_fread_Theader PROTO((FILE *f, Header *header)); 197 int gfits_fwrite_Theader PROTO((FILE *f, Header *header)); 198 int gfits_load_Theader PROTO((FILE *f, Header *header)); 199 int gfits_read_Theader PROTO((char *filename, Header *header)); 200 int gfits_write_Theader PROTO((char *filename, Header *header)); 201 202 int gfits_varlength_column_define PROTO((FTable *ftable, VarLengthColumn *def, int column)); 203 void *gfits_varlength_column_pointer PROTO((FTable *ftable, VarLengthColumn *column, int row, int *length)); 190 204 191 205 #endif /* FITSIO */ -
trunk/Ohana/src/libfits/matrix/F_convert_format.c
r7054 r15487 49 49 matrix[0].bzero = header[0].bzero = outZero; 50 50 matrix[0].unsign = header[0].unsign = outUnsign; 51 matrix[0].size = gfits_ matrix_size (header);51 matrix[0].size = gfits_data_size (header); 52 52 gfits_modify (header, "BITPIX", "%d", 1, outBitpix); 53 53 gfits_modify (header, "BSCALE", "%lf", 1, outScale); -
trunk/Ohana/src/libfits/matrix/F_create_M.c
r7054 r15487 18 18 matrix[0].Naxis[i] = header[0].Naxis[i]; 19 19 20 Nbytes = gfits_ matrix_size (header);20 Nbytes = gfits_data_size (header); 21 21 ALLOCATE (matrix[0].buffer, char, MAX (Nbytes, 1)); 22 22 bzero (matrix[0].buffer, Nbytes); -
trunk/Ohana/src/libfits/matrix/F_get_M_value.c
r7054 r15487 3 3 4 4 /***************** fits get matrix value ***********************************/ 5 double gfits_get_matrix_value (matrix, x, y) 6 Matrix *matrix; 7 int x, y; 8 { 5 double gfits_get_matrix_value (Matrix *matrix, int x, int y) { 9 6 10 7 double value; -
trunk/Ohana/src/libfits/matrix/F_insert_M.c
r7054 r15487 3 3 4 4 /*********************** fits insert array ***********************************/ 5 void gfits_insert_matrix (Matrix *matrix, Matrix *array, int x, int y) {5 void gfits_insert_matrix (Matrix *matrix, Matrix *array, int x, int y) { 6 6 7 7 /* there is no check here to match BITPIX, BZERO, or BSCALE */ -
trunk/Ohana/src/libfits/matrix/F_load_M.c
r7054 r15487 25 25 matrix[0].Naxis[i] = header[0].Naxis[i]; 26 26 27 Nbytes = gfits_ matrix_size (header);27 Nbytes = gfits_data_size (header); 28 28 ALLOCATE (matrix[0].buffer, char, Nbytes); 29 29 matrix[0].size = Nbytes; -
trunk/Ohana/src/libfits/matrix/F_matrix.c
r7054 r15487 2 2 # include <gfitsio.h> 3 3 4 int gfits_ matrix_size (Header *header) {4 int gfits_data_size (Header *header) { 5 5 6 6 int i, Nrec, size; … … 13 13 size *= header[0].Naxis[i]; 14 14 15 // XXX do I multiply this times gcount? 16 size += header[0].pcount; 17 15 18 /* round up to next complete block */ 16 19 if (size % FT_RECORD_SIZE) { -
trunk/Ohana/src/libfits/matrix/F_set_M_value.c
r7054 r15487 3 3 4 4 /****************** fits set matrix value ***********************************/ 5 void gfits_set_matrix_value (matrix, x, y, Value) 6 Matrix *matrix; 7 int x, y; 8 double Value; 9 { 5 void gfits_set_matrix_value (Matrix *matrix, int x, int y, double Value) { 10 6 11 7 int pixel; -
trunk/Ohana/src/libfits/table/F_create_T.c
r7054 r15487 12 12 table[0].header = header; 13 13 14 Nbytes = gfits_ matrix_size (header);14 Nbytes = gfits_data_size (header); 15 15 ALLOCATE (table[0].buffer, char, MAX (Nbytes, 1)); 16 16 if (!strcmp (type, "TABLE")) { … … 37 37 Nx = table[0].header[0].Naxis[0]; 38 38 Ny = table[0].header[0].Naxis[0]; 39 table[0].size = gfits_ matrix_size (header);39 table[0].size = gfits_data_size (header); 40 40 table[0].pad = table[0].size - Nx*Ny; 41 41 -
trunk/Ohana/src/libfits/table/F_create_TH.c
r7054 r15487 1 1 # include <ohana.h> 2 2 # include <gfitsio.h> 3 # define NBYTES 2880 3 4 4 5 /* a basic table header (extension) is different from a primary header … … 12 13 char axis[10]; 13 14 14 header[0].size = 2880; 15 ALLOCATE (header[0].buffer, char, 2880); 15 header[0].size = NBYTES; 16 17 ALLOCATE (header[0].buffer, char, NBYTES); 16 18 17 for (i = 0; i < 2880; i++)19 for (i = 0; i < NBYTES; i++) 18 20 header[0].buffer[i] = ' '; 19 21 strncpy (header[0].buffer, "END", 3); 20 22 21 23 gfits_modify (header, "XTENSION", "%s", 1, type); 22 gfits_modify (header, "BITPIX", "%d", 1, header[0].bitpix);23 gfits_modify (header, "NAXIS", "%d", 1, header[0].Naxes);24 gfits_modify (header, "BITPIX", "%d", 1, header[0].bitpix); 25 gfits_modify (header, "NAXIS", "%d", 1, header[0].Naxes); 24 26 25 27 for (i = 0; i < header[0].Naxes; i++) { … … 28 30 } 29 31 30 /* PCOUNT & GCOUNT are not implemented, but they are required to be here */ 31 gfits_modify (header, "PCOUNT", "%d", 1, 0); 32 gfits_modify (header, "GCOUNT", "%d", 1, 1); 32 gfits_modify (header, "PCOUNT", "%d", 1, header[0].pcount); 33 gfits_modify (header, "GCOUNT", "%d", 1, header[0].gcount); 33 34 if (!strcmp (type, "IMAGE")) { 34 35 gfits_modify (header, "BSCALE", "%lf", 1, header[0].bscale); … … 43 44 44 45 int i, valid; 45 char axis[10];46 46 47 47 /* check valid table types */ … … 51 51 if (!valid) return (FALSE); 52 52 53 /* create empty header buffer */ 54 header[0].size = 2880; 55 ALLOCATE (header[0].buffer, char, 2880); 56 57 for (i = 0; i < 2880; i++) 58 header[0].buffer[i] = ' '; 59 strncpy (header[0].buffer, "END", 3); 53 gfits_init_header (header); 60 54 61 /* a table has BITPIX = 8, NAXIS = 2 */62 55 header[0].simple = FALSE; 63 header[0].unsign = FALSE;64 header[0].extend = FALSE;65 header[0].bitpix = 8;66 header[0].bscale = 1;67 header[0].bzero = 0;68 56 header[0].Naxes = 2; 69 57 for (i = 0; i < FT_MAX_NAXES; i++) 70 58 header[0].Naxis[i] = 0; 71 72 /* required keywords */ 73 gfits_modify (header, "XTENSION", "%s", 1, type); 74 gfits_modify (header, "BITPIX", "%d", 1, header[0].bitpix); 75 gfits_modify (header, "NAXIS", "%d", 1, header[0].Naxes); 76 77 for (i = 0; i < header[0].Naxes; i++) { 78 sprintf (axis, "NAXIS%d", i + 1); 79 gfits_modify (header, axis, "%d", 1, header[0].Naxis[i], 1); 80 } 81 82 /* PCOUNT & GCOUNT are not implemented, but they are required to be here */ 83 gfits_modify (header, "PCOUNT", "%d", 1, 0); 84 gfits_modify (header, "GCOUNT", "%d", 1, 1); 85 if (!strcmp (type, "IMAGE")) { 86 gfits_modify (header, "BSCALE", "%lf", 1, header[0].bscale); 87 gfits_modify (header, "BZERO", "%lf", 1, header[0].bzero); 88 } 59 60 gfits_create_Theader (header, type); 89 61 90 62 gfits_modify (header, "TFIELDS", "%d", 1, 0); -
trunk/Ohana/src/libfits/table/F_read_T.c
r7054 r15487 41 41 42 42 /* skip to next header */ 43 Nbytes = gfits_ matrix_size (header);43 Nbytes = gfits_data_size (header); 44 44 fseek (f, Nbytes, SEEK_CUR); 45 45 gfits_free_header (header); … … 54 54 55 55 /* find buffer size */ 56 Nbytes = gfits_ matrix_size (table[0].header);56 Nbytes = gfits_data_size (table[0].header); 57 57 ALLOCATE (table[0].buffer, char, Nbytes); 58 58 … … 75 75 Nx = table[0].header[0].Naxis[0]; 76 76 Ny = table[0].header[0].Naxis[1]; 77 table[0].size = gfits_ matrix_size (table[0].header);77 table[0].size = gfits_data_size (table[0].header); 78 78 table[0].pad = table[0].size - Nx*Ny; 79 79 … … 120 120 121 121 /* find buffer size */ 122 Nbytes = gfits_ matrix_size (header);122 Nbytes = gfits_data_size (header); 123 123 124 124 /* check if this is the correct extension or not */ … … 152 152 ALLOCATE (table[0].row, int, MAX (1, Nrow)); 153 153 for (i = 0; i < Nrow; i++) table[0].row[i] = row[i]; 154 table[0].size = gfits_ matrix_size (table[0].header);154 table[0].size = gfits_data_size (table[0].header); 155 155 table[0].pad = table[0].size - Nx*Ny; 156 156 return (TRUE); 157 157 } 158 158 } 159 160 # if (0)161 /*********************** fits read table ***********************************/162 /* a poor function: read only the first table, regardless of name */163 /* keep until we are sure ohana code does not use it */164 int gfits_read_table (char *filename, FTable *table) {165 166 FILE *f;167 Header header;168 int status, i, nbytes, Nbytes, matrix_size;169 170 if (!gfits_read_header (filename, &header)) {171 fprintf (stderr, "error reading header of FITS file %s\n", filename);172 return (FALSE);173 }174 175 if (!gfits_read_Theader (filename, &table[0].header)) {176 fprintf (stderr, "error reading Theader of FITS file %s\n", filename);177 return (FALSE);178 }179 180 if ((f = fopen (filename, "r")) == NULL) {181 gfits_free_header (&header);182 gfits_free_header (&table[0].header);183 return (FALSE);184 }185 186 matrix_size = gfits_matrix_size (&header);187 188 Nbytes = header.size + matrix_size + table[0].header.size;189 fseek (f, Nbytes, 0);190 gfits_free_header (&header);191 192 gfits_scan (&table[0].header, "TFIELDS", "%d", 1, &table[0].Nfields);193 194 /* place the field sizes in the structure? */195 table[0].bitpix = table[0].header.bitpix;196 table[0].Naxes = table[0].header.Naxes;197 for (i = 0; i < FT_MAX_NAXES; i++)198 table[0].Naxis[i] = table[0].header.Naxis[i];199 200 Nbytes = gfits_matrix_size (&table[0].header);201 ALLOCATE (table[0].buffer, char, Nbytes);202 nbytes = fread (table[0].buffer, sizeof(char), Nbytes, f);203 if (nbytes != Nbytes) {204 fprintf (stderr, "error reading in table data from FITS file %s\n", filename);205 fclose (f);206 return (FALSE);207 }208 table[0].size = Nbytes;209 fclose (f);210 return (TRUE);211 }212 # endif213 214 159 215 160 int gfits_fread_header_extname (FILE *f, Header *header, char *extname) { … … 223 168 if (!strcasecmp (extname, "PHU")) return (TRUE); 224 169 225 Nbytes = gfits_ matrix_size (header);170 Nbytes = gfits_data_size (header); 226 171 fseek (f, Nbytes, SEEK_CUR); 227 172 … … 229 174 gfits_scan (header, "EXTNAME", "%s", 1, current); 230 175 if (!strcmp (current, extname)) return (TRUE); 231 Nbytes = gfits_ matrix_size (header);176 Nbytes = gfits_data_size (header); 232 177 fseek (f, Nbytes, SEEK_CUR); 233 178 } -
trunk/Ohana/src/libfits/table/F_read_TH.c
r7054 r15487 22 22 } 23 23 24 Nbytes = gfits_ matrix_size (&header);24 Nbytes = gfits_data_size (&header); 25 25 fseek (f, Nbytes, SEEK_SET); 26 26 gfits_free_header (&header); -
trunk/Ohana/src/libfits/table/F_set_column.c
r7054 r15487 52 52 gfits_modify (header, "NAXIS2", "%d", 1, Ny); 53 53 54 nbytes = gfits_ matrix_size (header);54 nbytes = gfits_data_size (header); 55 55 REALLOCATE (table[0].buffer, char, MAX (nbytes, 1)); 56 56 bzero (table[0].buffer, nbytes); … … 187 187 gfits_modify (header, "NAXIS2", "%d", 1, Ny); 188 188 189 nbytes = gfits_ matrix_size (header);189 nbytes = gfits_data_size (header); 190 190 REALLOCATE (table[0].buffer, char, MAX (nbytes, 1)); 191 191 bzero (table[0].buffer, nbytes); -
trunk/Ohana/src/libfits/table/F_table_format.c
r15038 r15487 25 25 if (*Fchar == 'E') { *Nbytes = 4; strcpy (type, "float"); *Nval = Nv; } 26 26 if (*Fchar == 'D') { *Nbytes = 8; strcpy (type, "double"); *Nval = Nv; } 27 if (*Fchar == 'P') { *Nbytes = 8; strcpy (type, " float");*Nval = 2*Nv; }27 if (*Fchar == 'P') { *Nbytes = 8; strcpy (type, "var"); *Nval = 2*Nv; } 28 28 if (*Fchar == 'C') { *Nbytes = 8; strcpy (type, "float"); *Nval = 2*Nv; } 29 29 if (*Fchar == 'M') { *Nbytes = 16; strcpy (type, "double"); *Nval = 2*Nv; } … … 194 194 int i, j, n, Nx, Ny, Nfields; 195 195 int off, Nchar, Nval, Nbytes, status; 196 char *line,format[64], field[16], type[16];196 char format[64], field[16], type[16]; 197 197 double tzero, tscale; 198 198 char *tmpChar; … … 233 233 for (j = 0; j < Ny; j++) { 234 234 for (n = 0; n < Nval; n++) { 235 tmpChar = ( int*)&ftable[0].buffer[j*Nx + n*Nbytes + off];235 tmpChar = (char *)&ftable[0].buffer[j*Nx + n*Nbytes + off]; 236 236 *tmpChar = *tmpChar * tscale + tzero; 237 237 } … … 241 241 for (j = 0; j < Ny; j++) { 242 242 for (n = 0; n < Nval; n++) { 243 tmpShort = ( int *)&ftable[0].buffer[j*Nx + n*Nbytes + off];243 tmpShort = (short *)&ftable[0].buffer[j*Nx + n*Nbytes + off]; 244 244 *tmpShort = *tmpShort * tscale + tzero; 245 245 } … … 264 264 int i, j, n, Nx, Ny, Nfields; 265 265 int off, Nchar, Nval, Nbytes, status; 266 char *line,format[64], field[16], type[16];266 char format[64], field[16], type[16]; 267 267 double tzero, tscale; 268 268 char *tmpChar; … … 303 303 for (j = 0; j < Ny; j++) { 304 304 for (n = 0; n < Nval; n++) { 305 tmpChar = ( int*)&ftable[0].buffer[j*Nx + n*Nbytes + off];305 tmpChar = (char *)&ftable[0].buffer[j*Nx + n*Nbytes + off]; 306 306 *tmpChar = (*tmpChar - tzero) / tscale; 307 307 } … … 311 311 for (j = 0; j < Ny; j++) { 312 312 for (n = 0; n < Nval; n++) { 313 tmpShort = ( int *)&ftable[0].buffer[j*Nx + n*Nbytes + off];313 tmpShort = (short *)&ftable[0].buffer[j*Nx + n*Nbytes + off]; 314 314 *tmpShort = (*tmpShort - tzero) / tscale; 315 315 } -
trunk/Ohana/src/libfits/table/F_table_row.c
r7054 r15487 25 25 gfits_modify (header, "NAXIS2", "%d", 1, Ny); 26 26 27 nbytes = gfits_ matrix_size (header);27 nbytes = gfits_data_size (header); 28 28 REALLOCATE (table[0].buffer, char, MAX (nbytes, 1)); 29 29 table[0].size = nbytes; … … 66 66 gfits_modify (header, "NAXIS2", "%d", 1, Ny); 67 67 68 table[0].size = gfits_ matrix_size (table[0].header);68 table[0].size = gfits_data_size (table[0].header); 69 69 table[0].pad = table[0].size - Nx*Ny; 70 70 … … 99 99 gfits_modify (header, "NAXIS2", "%d", 1, Ny); 100 100 101 nbytes = gfits_ matrix_size (header);101 nbytes = gfits_data_size (header); 102 102 REALLOCATE (table[0].buffer, char, MAX (nbytes, 1)); 103 103 table[0].size = nbytes;
Note:
See TracChangeset
for help on using the changeset viewer.
