IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 30, 2015, 7:59:48 PM (11 years ago)
Author:
eugene
Message:

more work on compression : cfitsio assumes gzip, not zlib (I have made uncompress general )

File:
1 edited

Legend:

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

    r38062 r38340  
    412412  table.header = &header;
    413413
     414  int IsCompressed = FALSE;
     415
    414416  /* load appropriate extension (if extname is a number, use count) */
    415417  if (Nextend > -1) {
     
    430432    if (!gfits_load_header (f, &header)) ESCAPE ("error reading header for extension %d\n", Nextend);
    431433
    432     if (getSizes) {
     434    IsCompressed = gfits_extension_is_compressed_table (&header);
     435
     436    if (getSizes && !IsCompressed) {
    433437      read_table_sizes (&header);
    434438      if (CCDKeyword != NULL) free (CCDKeyword);
    435439      gfits_free_header (&header);
    436440      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      }
    437453    }
    438454
     
    483499      }
    484500
    485       if (getSizes) {
     501      IsCompressed = gfits_extension_is_compressed_table (&header);
     502
     503      if (getSizes && !IsCompressed) {
    486504        read_table_sizes (&header);
    487505        if (CCDKeyword != NULL) free (CCDKeyword);
     
    489507        return TRUE;
    490508      }
     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      }
    491521
    492522      if (Nrows == -1) {
     
    503533
    504534      if (!gfits_fread_ftable_range (f, padIfShort, &table, start, Nrows)) ESCAPE ("error reading table for extension %d\n", Nextend);
    505 
    506       // if (!gfits_fread_ftable_data (f, &table, padIfShort)) ESCAPE ("error reading table for extension\n");
    507 
    508535      break;
    509536    }
     
    518545  Binary = !strcmp (type, "BINTABLE");
    519546  Ny = header.Naxis[1];
     547
     548  Header *outheader = &header;
     549  FTable *outtable  = &table;
     550
     551  Header rawheader;
     552  FTable rawtable;
     553  if (IsCompressed) {
     554    rawtable.header = &rawheader;
     555    if (!gfits_uncompress_table (&table, &rawtable)) ESCAPE ("failed to uncompress table");
     556    outheader = &rawheader;
     557    outtable  = &rawtable;
     558    gfits_free_header (&header);
     559    gfits_free_table (&table);
     560    Ny = rawheader.Naxis[1];
     561  }
    520562
    521563  /* find columns which match requested vectors */
     
    527569    Nval = 0;
    528570    if (Binary) {
    529       if (!gfits_get_bintable_column_type (&header, argv[i], type, &Nval)) ESCAPE ("requested field not found");
    530       if (!gfits_get_bintable_column (&header, &table, argv[i], &data)) ESCAPE ("error reading data from specified field");
     571      if (!gfits_get_bintable_column_type (outheader, argv[i], type, &Nval)) ESCAPE ("requested field not found");
     572      if (!gfits_get_bintable_column (outheader, outtable, argv[i], &data)) ESCAPE ("error reading data from specified field");
    531573    } else {
    532       if (!gfits_get_table_column_type (&header, argv[i], type)) ESCAPE ("requested field not found");
    533       if (!gfits_get_table_column (&header, &table, argv[i], &data)) ESCAPE ("error reading data from specified field");
     574      if (!gfits_get_table_column_type (outheader, argv[i], type)) ESCAPE ("requested field not found");
     575      if (!gfits_get_table_column (outheader, outtable, argv[i], &data)) ESCAPE ("error reading data from specified field");
    534576    }
    535577    if (Nval == 0) ESCAPE ("no data for field in table");
     
    594636  }
    595637  if (CCDKeyword != NULL) free (CCDKeyword);
    596   gfits_free_table (&table);
    597   gfits_free_header (&header);
     638  gfits_free_table (outtable);
     639  gfits_free_header (outheader);
    598640  return (TRUE);
    599641}
Note: See TracChangeset for help on using the changeset viewer.