Changeset 15487 for trunk/Ohana/src/opihi/cmd.data
- Timestamp:
- Nov 6, 2007, 5:09:52 PM (19 years ago)
- Location:
- trunk/Ohana/src/opihi/cmd.data
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/rd.c
r13479 r15487 5 5 6 6 int i, N, status, plane, Nplane, extend, Nextend, Nskip, JustHead; 7 int ccdsel, done ;7 int ccdsel, done, Nword, IsCompressed; 8 8 char region[512], *ccdid, *filename; 9 9 FILE *f; … … 85 85 return (FALSE); 86 86 } 87 if (gfits_extension_is_compressed (&buf[0].header)) { 88 IsCompressed = TRUE; 89 } 87 90 } 91 88 92 /* FITS extension by name */ 89 93 if (ccdsel) { … … 92 96 CCDKeyword = get_variable ("CCDKEYWORD"); 93 97 if (CCDKeyword == (char *) NULL) { 94 gprint (GP_ERR, "CCDKEYWORD variable is not set; ");95 gprint (GP_ERR, "using EXTNAME as default\n");98 // gprint (GP_ERR, "CCDKEYWORD variable is not set; "); 99 // gprint (GP_ERR, "using EXTNAME as default\n"); 96 100 CCDKeyword = strcreate ("EXTNAME"); 97 101 } … … 106 110 return (FALSE); 107 111 } 108 if (!gfits_scan (&buf[0].header, CCDKeyword, "%s", 1, ID)) { 112 113 // for compressed data tables, EXTNAME may be duplicated, with the first one containing the 114 // word 'COMPRESSED_IMAGE'. in this case, check the second EXTNAME, if CCDKeyword == EXTNAME 115 // this may have to be a more obscure test specifically for 'imcopy' data... 116 // need to check each header, since file may contain a mix 117 118 Nword = 1; 119 IsCompressed = FALSE; 120 if (gfits_extension_is_compressed (&buf[0].header)) { 121 if (!strcmp (CCDKeyword, "EXTNAME")) Nword = 2; 122 IsCompressed = TRUE; 123 } 124 if (!gfits_scan (&buf[0].header, CCDKeyword, "%s", Nword, ID)) { 109 125 gprint (GP_ERR, "%s not in header\n", CCDKeyword); 110 126 DeleteBuffer (buf); … … 123 139 /* fix up header, if needed */ 124 140 if (extend || ccdsel) { 125 static char simple[] = "SIMPLE = T / Standard FITS"; 126 int Ns, No; 127 128 Ns = strlen (simple); 129 No = 80 - Ns; 130 strncpy (buf[0].header.buffer, simple, Ns); 131 memset (&buf[0].header.buffer[Ns], ' ', No); 141 if (!IsCompressed) { 142 gfits_extended_to_primary (&buf[0].header, TRUE, "Standard FITS"); 143 } 132 144 } else { 133 145 gfits_fread_header (f, &buf[0].header); … … 135 147 136 148 /* for JustHead, we skip reading the data segment */ 149 // XXX for compressed data, we need to convert the header to the equivalent uncompressed version 137 150 if (JustHead) { 138 / * should be in CreateMatrix / CreateBuffer function */151 // XXX what are we doing here exactly? 139 152 buf[0].header.Naxes = 0; 140 153 ALLOCATE (buf[0].matrix.buffer, char, 1); … … 164 177 165 178 /* load matrix data */ 166 sprintf (region, "-1 -1 -1 -1 %d %d", (plane - 1), plane); 167 status = gfits_fread_matrix_segment (f, &buf[0].matrix, &buf[0].header, region); 168 fclose (f); 179 if (IsCompressed) { 180 FTable ftable; 181 Header theader; 182 ftable.header = &theader; 183 gfits_copy_header (&buf[0].header, ftable.header); 184 status = gfits_fread_ftable_data (f, &ftable); // XXX does this do more than read the bytes? 185 status = gfits_uncompress_image (&buf[0].header, &buf[0].matrix, &ftable, !(ccdsel || extend)); 186 gfits_free_table (&ftable); 187 // XXX this currently does not work for a cube (we get a cube back, not a specific plane) 188 } else { 189 sprintf (region, "-1 -1 -1 -1 %d %d", (plane - 1), plane); 190 status = gfits_fread_matrix_segment (f, &buf[0].matrix, &buf[0].header, region); 191 fclose (f); 192 } 169 193 170 194 if (!status) { -
trunk/Ohana/src/opihi/cmd.data/read_vectors.c
r7917 r15487 150 150 int read_table_vectors (int argc, char **argv, char *extname) { 151 151 152 int i, j, k, N bytes, Nread, Nextend, Ny, Binary;153 char type[16] ;152 int i, j, k, N, Nbytes, Nread, Nextend, Ny, Binary; 153 char type[16], ID[80], *CCDKeyword; 154 154 FTable table; 155 155 Header header; 156 156 Vector **vec; 157 157 158 table.buffer = NULL; 159 header.buffer = NULL; 160 161 CCDKeyword = NULL; 162 if ((N = get_argument (argc, argv, "-keyword"))) { 163 remove_argument (N, &argc, argv); 164 CCDKeyword = strcreate (argv[N]); 165 remove_argument (N, &argc, argv); 166 } 167 168 Nextend = -1; 169 if ((N = get_argument (argc, argv, "-extnum"))) { 170 remove_argument (N, &argc, argv); 171 Nextend = atoi (extname); 172 } 173 158 174 if (argc < 2) { 159 gprint (GP_ERR, "USAGE: read -fits extension name name ...\n");175 gprint (GP_ERR, "USAGE: read -fits extension [-extnum] [-keyword key] name name ...\n"); 160 176 gprint (GP_ERR, " ('extension' may be a name or number)\n"); 161 return (FALSE);162 } 163 164 if (f == (FILE *) NULL) return (FALSE);177 goto escape; 178 } 179 180 if (f == (FILE *) NULL) goto escape; 165 181 fseek (f, 0, SEEK_SET); 166 182 table.header = &header; 167 183 168 184 /* load appropriate extension (if extname is a number, use count) */ 169 if (isdigit(extname[0])) { 170 Nextend = atoi (extname); 171 172 for (i = 0; i <= Nextend; i++) { 173 if (!gfits_load_header (f, &header)) return (FALSE); 174 Nbytes = gfits_matrix_size (&header); 185 if (Nextend > -1) { 186 // first extension is PHU, cannot be a table. 187 // Nextend counts from 0 for first extension 188 if (!gfits_load_header (f, &header)) goto escape; 189 Nbytes = gfits_data_size (&header); 190 fseek (f, Nbytes, SEEK_CUR); 191 gfits_free_header (&header); 192 193 for (i = 0; i < Nextend; i++) { 194 if (!gfits_load_header (f, &header)) goto escape; 195 Nbytes = gfits_data_size (&header); 175 196 /* skip the prior data buffers */ 176 if (i < Nextend) { 197 fseek (f, Nbytes, SEEK_CUR); 198 gfits_free_header (&header); 199 } 200 if (!gfits_load_header (f, &header)) goto escape; 201 if (!gfits_fread_ftable_data (f, &table)) goto escape; 202 203 } else { 204 if (CCDKeyword == NULL) { 205 CCDKeyword = get_variable ("CCDKEYWORD"); 206 } 207 if (CCDKeyword == NULL) { 208 CCDKeyword = strcreate ("EXTNAME"); 209 } 210 211 while (1) { 212 if (!gfits_load_header (f, &header)) goto escape; 213 Nbytes = gfits_data_size (&header); 214 215 if (!gfits_scan (&header, CCDKeyword, "%s", 1, ID)) { 177 216 fseek (f, Nbytes, SEEK_CUR); 178 217 gfits_free_header (&header); 179 218 continue; 180 219 } 181 /* on the desired header, load buffer */ 182 ALLOCATE (table.buffer, char, Nbytes); 183 Nread = fread (table.buffer, sizeof (char), Nbytes, f); 184 if (Nread != Nbytes) { 185 gfits_free_table (&table); 220 if (strcmp (ID, extname)) { 221 fseek (f, Nbytes, SEEK_CUR); 186 222 gfits_free_header (&header); 187 return (FALSE); 188 } 189 table.size = Nbytes; 190 } 191 } else { 192 if (!gfits_fread_ftable (f, &table, extname)) return (FALSE); 223 continue; 224 } 225 if (!gfits_fread_ftable_data (f, &table)) goto escape; 226 break; 227 } 193 228 } 194 229 … … 196 231 Binary = FALSE; 197 232 gfits_scan (&header, "XTENSION", "%s", 1, type); 198 if (!strcmp (type, "BINTABLE")) { 199 Binary = TRUE; 200 } 233 if (strcmp (type, "BINTABLE") && strcmp (type, "TABLE")) { 234 gprint (GP_ERR, "specified extension (%s) is not a table\n", extname); 235 goto escape; 236 } 237 Binary = !strcmp (type, "BINTABLE"); 201 238 Ny = header.Naxis[1]; 202 239 … … 214 251 Nval = 0; 215 252 if (Binary) { 216 if (!gfits_get_bintable_column_type (&header, argv[i], type, &Nval)) return (FALSE);217 if (!gfits_get_bintable_column (&header, &table, argv[i], &data)) return (FALSE);253 if (!gfits_get_bintable_column_type (&header, argv[i], type, &Nval)) goto escape; 254 if (!gfits_get_bintable_column (&header, &table, argv[i], &data)) goto escape; 218 255 } else { 219 if (!gfits_get_table_column_type (&header, argv[i], type)) return (FALSE);220 if (!gfits_get_table_column (&header, &table, argv[i], &data)) return (FALSE);221 } 222 if (Nval == 0) return (FALSE);256 if (!gfits_get_table_column_type (&header, argv[i], type)) goto escape; 257 if (!gfits_get_table_column (&header, &table, argv[i], &data)) goto escape; 258 } 259 if (Nval == 0) goto escape; 223 260 224 261 ALLOCATE (vec, Vector *, Nval); … … 228 265 else 229 266 sprintf (name, "%s:%d", argv[i], j); 230 if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) return (FALSE);267 if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) goto escape; 231 268 REALLOCATE (vec[j][0].elements, float, MAX (Ny,1)); 232 269 vec[j][0].Nelements = Ny; … … 276 313 free (vec); 277 314 } 315 if (CCDKeyword != NULL) free (CCDKeyword); 278 316 gfits_free_table (&table); 279 317 gfits_free_header (&header); 280 318 return (TRUE); 319 320 escape: 321 if (CCDKeyword != NULL) free (CCDKeyword); 322 gfits_free_table (&table); 323 gfits_free_header (&header); 324 return (FALSE); 281 325 } -
trunk/Ohana/src/opihi/cmd.data/wd.c
r11887 r15487 91 91 if (!gfits_read_header (argv[2], &Xhead)) { 92 92 93 Xhead.simple = TRUE;93 gfits_init_header (&Xhead); 94 94 Xhead.bitpix = 16; 95 Xhead.Naxes = 0;96 97 95 Xhead.extend = TRUE; 98 Xhead.bscale = 1.0;99 Xhead.bzero = 0.0;100 Xhead.unsign = FALSE;101 102 96 gfits_create_header (&Xhead); 97 103 98 gfits_modify (&Xhead, "NEXTEND", "%d", 1, 0); 104 99 f = fopen (argv[2], "w");
Note:
See TracChangeset
for help on using the changeset viewer.
