Changeset 37807 for trunk/Ohana/src/opihi/cmd.data/read_vectors.c
- Timestamp:
- Jan 11, 2015, 2:14:39 PM (12 years ago)
- Location:
- trunk/Ohana
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
src/opihi/cmd.data/read_vectors.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana
- Property svn:mergeinfo changed
-
trunk/Ohana/src/opihi/cmd.data/read_vectors.c
r37049 r37807 5 5 6 6 void read_vectors_cleanup (); 7 int read_table_sizes (Header *header); 7 8 8 9 int datafile (int argc, char **argv) { … … 331 332 332 333 off_t Nbytes; 333 int i, j, N, N extend, Ny, Binary, vecType, padIfShort;334 char type[16], ID[80] , *CCDKeyword;334 int i, j, N, Ny, Binary, vecType; 335 char type[16], ID[80]; 335 336 FTable table; 336 337 Header header; 337 338 Vector **vec; 338 int FITS_TRANSPOSE;339 339 340 340 table.buffer = NULL; 341 341 header.buffer = NULL; 342 342 343 FITS_TRANSPOSE = FALSE;343 int FITS_TRANSPOSE = FALSE; 344 344 if ((N = get_argument (argc, argv, "-transpose"))) { 345 345 remove_argument (N, &argc, argv); … … 347 347 } 348 348 349 CCDKeyword = NULL;349 char *CCDKeyword = NULL; 350 350 if ((N = get_argument (argc, argv, "-keyword"))) { 351 351 remove_argument (N, &argc, argv); … … 354 354 } 355 355 356 padIfShort = FALSE;356 int padIfShort = FALSE; 357 357 if ((N = get_argument (argc, argv, "-pad-if-short"))) { 358 358 remove_argument (N, &argc, argv); … … 360 360 } 361 361 362 Nextend = -1; 362 int getSizes = FALSE; 363 if ((N = get_argument (argc, argv, "-sizes"))) { 364 remove_argument (N, &argc, argv); 365 getSizes = TRUE; 366 } 367 368 int Nextend = -1; 363 369 if ((N = get_argument (argc, argv, "-extnum"))) { 364 370 remove_argument (N, &argc, argv); 365 371 Nextend = atoi (extname); 372 } 373 374 int start = 0; 375 int Nrows = -1; // -1 : read entire table 376 if ((N = get_argument (argc, argv, "-range"))) { 377 remove_argument (N, &argc, argv); 378 start = atoi (argv[N]); 379 remove_argument (N, &argc, argv); 380 Nrows = atoi (argv[N]); 381 remove_argument (N, &argc, argv); 382 } 383 384 // if CharAsVectors, char fields will be saved as vectors NAME:0 -- NAME:n for n characters 385 // else char fields will be saved as $NAME:0 - $NAME:m for m rows 386 // if (Ny > 10000), force CharAsVectors 387 int CharAsVectors = FALSE; 388 if ((N = get_argument (argc, argv, "-char-vectors"))) { 389 remove_argument (N, &argc, argv); 390 CharAsVectors = TRUE; 366 391 } 367 392 … … 397 422 } 398 423 if (!gfits_load_header (f, &header)) ESCAPE ("error reading header for extension %d\n", Nextend); 399 if (!gfits_fread_ftable_data (f, &table, padIfShort)) ESCAPE ("error reading table for extension %d\n", Nextend); 400 424 425 if (getSizes) { 426 read_table_sizes (&header); 427 if (CCDKeyword != NULL) free (CCDKeyword); 428 gfits_free_header (&header); 429 return TRUE; 430 } 431 432 if (Nrows == -1) { 433 Nrows = header.Naxis[1] - start; 434 } 435 if (start < 0) ESCAPE ("invalid range: start < 0\n"); 436 if (start >= header.Naxis[1]) ESCAPE ("invalid range: start >= Ny (%d)\n", header.Naxis[1]); 437 if (Nrows < 0) ESCAPE ("invalid range: Nrows < 0\n"); 438 if (start + Nrows > header.Naxis[1]) ESCAPE ("invalid range: start + Nrows > Ny (%d)\n", header.Naxis[1]); 439 440 // Ny = 100, start = 0, Nrows = -1 -> Nrows => 100 441 // Ny = 100, start = 10, Nrows = 90 442 443 if (!gfits_fread_ftable_range (f, padIfShort, &table, start, Nrows)) ESCAPE ("error reading table for extension %d\n", Nextend); 401 444 } else { 402 445 if (CCDKeyword == NULL) { … … 428 471 continue; 429 472 } 430 if (!gfits_fread_ftable_data (f, &table, padIfShort)) ESCAPE ("error reading table for extension\n"); 473 474 if (Nrows == -1) { 475 Nrows = header.Naxis[1] - start; 476 } 477 if (start < 0) ESCAPE ("invalid range: start < 0\n"); 478 if (start >= header.Naxis[1]) ESCAPE ("invalid range: start >= Ny (%d)\n", header.Naxis[1]); 479 if (Nrows < 0) ESCAPE ("invalid range: Nrows < 0\n"); 480 if (start + Nrows > header.Naxis[1]) ESCAPE ("invalid range: start + Nrows > Ny (%d)\n", header.Naxis[1]); 481 482 if (!gfits_fread_ftable_range (f, padIfShort, &table, start, Nrows)) ESCAPE ("error reading table for extension %d\n", Nextend); 483 484 // if (!gfits_fread_ftable_data (f, &table, padIfShort)) ESCAPE ("error reading table for extension\n"); 485 431 486 break; 432 487 } … … 465 520 if (!FITS_TRANSPOSE) { 466 521 // read string column into a list rather than a vector 467 if (!strcmp (type, "char") ) {522 if (!strcmp (type, "char") && !CharAsVectors && (Ny < 3000)) { 468 523 char *fieldName = argv[i]; 469 524 char *Ptr = data; … … 537 592 if (vec) free (vec); 538 593 } 594 595 // read -fits foo -sizes -- Nx, Ny, Nfields -> $table:Nx, $table:Ny, $table:$Nfields 596 // read -fits foo -fields 597 598 int read_table_sizes (Header *header) { 599 600 int Nfields; 601 602 gfits_scan (header, "TFIELDS", "%d", 1, &Nfields); 603 604 set_int_variable ("table:Nx", header->Naxis[0]); 605 set_int_variable ("table:Nx", header->Naxis[0]); 606 set_int_variable ("table:Nfields", Nfields); 607 608 return TRUE; 609 } 610
Note:
See TracChangeset
for help on using the changeset viewer.
