IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 31, 2015, 8:36:04 AM (11 years ago)
Author:
eugene
Message:

fix up compressed fits table I/O; add lrand, mrand, drand functions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ohana.20150429/src/opihi/cmd.data/read_vectors.c

    r38340 r38341  
    11# include "data.h"
     2int dump_raw_table (FTable *table, char *message);
     3int dump_cmp_table (FTable *table, char *message);
    24
    35FILE *f = (FILE *) NULL;
     
    412414  table.header = &header;
    413415
    414   int IsCompressed = FALSE;
    415 
    416   /* load appropriate extension (if extname is a number, use count) */
     416  /**** find the appropriate extension and read header (if extname is a number, use count) ****/
    417417  if (Nextend > -1) {
    418418    // first extension is PHU, cannot be a table.
     
    431431    }
    432432    if (!gfits_load_header (f, &header)) ESCAPE ("error reading header for extension %d\n", Nextend);
    433 
    434     IsCompressed = gfits_extension_is_compressed_table (&header);
    435 
    436     if (getSizes && !IsCompressed) {
    437       read_table_sizes (&header);
    438       if (CCDKeyword != NULL) free (CCDKeyword);
    439       gfits_free_header (&header);
    440       return TRUE;
    441     }
    442     if (IsCompressed) {
    443       if (getSizes) {
    444         gprint (GP_ERR, "%s[%s] is compressed: -sizes is invalid\n", filename, extname);
    445         gfits_free_header (&header);
    446         return FALSE;
    447       }
    448       if ((start > 0) || (Nrows > -1)) {
    449         gprint (GP_ERR, "%s[%s] is compressed: must read entire table\n", filename, extname);
    450         gfits_free_header (&header);
    451         return FALSE;
    452       }
    453     }
    454 
    455     if (Nrows == -1) {
    456       Nrows = header.Naxis[1] - start;
    457     }
    458     if (start < 0) ESCAPE ("invalid range: start < 0\n");
    459     if (start >= header.Naxis[1]) ESCAPE ("invalid range: start >= Ny (%d)\n", header.Naxis[1]);
    460     if (Nrows < 0) ESCAPE ("invalid range: Nrows < 0\n");
    461 
    462     // just a warning:
    463     if (start + Nrows > header.Naxis[1]) {
    464       if (VERBOSE) gprint (GP_ERR, "NOTE: reading last block will return only %d rows\n", header.Naxis[1] - start);
    465     }
    466 
    467     // Ny = 100, start = 0, Nrows = -1 -> Nrows => 100
    468     // Ny = 100, start = 10, Nrows = 90
    469 
    470     if (!gfits_fread_ftable_range (f, padIfShort, &table, start, Nrows)) ESCAPE ("error reading table for extension %d\n", Nextend);
    471433  } else {
    472434    if (CCDKeyword == NULL) {
     
    476438      CCDKeyword = strcreate ("EXTNAME");
    477439    }
    478 
    479440    while (1) {
    480441      if (!gfits_load_header (f, &header)) {
     
    485446        return (TRUE); 
    486447      }
    487 
    488448      Nbytes = gfits_data_size (&header);
    489449
     
    498458        continue;
    499459      }
    500 
    501       IsCompressed = gfits_extension_is_compressed_table (&header);
    502 
    503       if (getSizes && !IsCompressed) {
    504         read_table_sizes (&header);
    505         if (CCDKeyword != NULL) free (CCDKeyword);
    506         gfits_free_header (&header);
    507         return TRUE;
    508       }
    509       if (IsCompressed) {
    510         if (getSizes) {
    511           gprint (GP_ERR, "%s[%s] is compressed: -sizes is invalid\n", filename, extname);
    512           gfits_free_header (&header);
    513           return FALSE;
    514         }
    515         if ((start > 0) || (Nrows > -1)) {
    516           gprint (GP_ERR, "%s[%s] is compressed: must read entire table\n", filename, extname);
    517           gfits_free_header (&header);
    518           return FALSE;
    519         }
    520       }
    521 
    522       if (Nrows == -1) {
    523         Nrows = header.Naxis[1] - start;
    524       }
    525       if (start < 0) ESCAPE ("invalid range: start < 0\n");
    526       if (start >= header.Naxis[1]) ESCAPE ("invalid range: start >= Ny (%d)\n", header.Naxis[1]);
    527       if (Nrows < 0) ESCAPE ("invalid range: Nrows < 0\n");
    528 
    529       // just a warning:
    530       if (start + Nrows > header.Naxis[1]) {
    531         if (VERBOSE) gprint (GP_ERR, "NOTE: reading last block will return only %d rows\n", header.Naxis[1] - start);
    532       }
    533 
    534       if (!gfits_fread_ftable_range (f, padIfShort, &table, start, Nrows)) ESCAPE ("error reading table for extension %d\n", Nextend);
    535460      break;
    536461    }
     462  }
     463
     464  int IsCompressed = gfits_extension_is_compressed_table (&header);
     465
     466  if (getSizes && !IsCompressed) {
     467    read_table_sizes (&header);
     468    if (CCDKeyword != NULL) free (CCDKeyword);
     469    gfits_free_header (&header);
     470    return TRUE;
     471  }
     472  if (IsCompressed) {
     473    if (getSizes) {
     474      gprint (GP_ERR, "%s[%s] is compressed: -sizes is invalid\n", filename, extname);
     475      gfits_free_header (&header);
     476      return FALSE;
     477    }
     478    if ((start > 0) || (Nrows > -1)) {
     479      gprint (GP_ERR, "%s[%s] is compressed: must read entire table\n", filename, extname);
     480      gfits_free_header (&header);
     481      return FALSE;
     482    }
     483  }
     484
     485  if (Nrows == -1) {
     486    Nrows = header.Naxis[1] - start;
     487  }
     488  if (start < 0) ESCAPE ("invalid range: start < 0\n");
     489  if (start >= header.Naxis[1]) ESCAPE ("invalid range: start >= Ny (%d)\n", header.Naxis[1]);
     490  if (Nrows < 0) ESCAPE ("invalid range: Nrows < 0\n");
     491
     492  // just a warning:
     493  if (start + Nrows > header.Naxis[1]) {
     494    if (VERBOSE) gprint (GP_ERR, "NOTE: reading last block will return only %d rows\n", header.Naxis[1] - start);
     495  }
     496
     497  // Ny = 100, start = 0, Nrows = -1 -> Nrows => 100
     498  // Ny = 100, start = 10, Nrows = 90
     499
     500  if (IsCompressed) {
     501    if (!gfits_fread_ftable_data (f, &table, padIfShort)) ESCAPE ("error reading table for extension %d\n", Nextend);
     502  } else {
     503    if (!gfits_fread_ftable_range (f, padIfShort, &table, start, Nrows)) ESCAPE ("error reading table for extension %d\n", Nextend);
    537504  }
    538505
     
    553520  if (IsCompressed) {
    554521    rawtable.header = &rawheader;
     522
     523    dump_cmp_table (&table, "rd cmp");
    555524    if (!gfits_uncompress_table (&table, &rawtable)) ESCAPE ("failed to uncompress table");
     525    dump_raw_table (&rawtable, "rd raw");
     526
    556527    outheader = &rawheader;
    557528    outtable  = &rawtable;
Note: See TracChangeset for help on using the changeset viewer.