IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 28, 2015, 8:28:24 PM (11 years ago)
Author:
eugene
Message:

adding compression option to wd and write

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ohana.20150429/src/opihi/lib.shell/VectorIO.c

    r37049 r38330  
    11# include "opihi.h"
    22 
    3 // write a set of vectors to a FITS file (vectors names become fits column names)
    4 int WriteVectorTable (Header *theader, FTable *ftable, char *extname, Vector **vec, int Nvec, char *format) {
     3// write a set of vectors to a FITS FTable structure (vectors names become fits column names)
     4static int WriteVectorTable (FTable *ftable, char *extname, Vector **vec, int Nvec, char *format) {
    55 
    66  int j;
     
    88  char *tformat = NULL;
    99
     10  Header *theader = ftable->header;
    1011  gfits_create_table_header (theader, "BINTABLE", extname);
    1112
     
    7172 
    7273// write a set of vectors to a FITS file (vectors names become fits column names)
    73 int WriteVectorTableFITS (char *filename, char *extname, Vector **vec, int Nvec, int append, char *format) {
    74  
    75   Header header;
    76   Matrix matrix;
    77   Header theader;
    78   FTable ftable;
     74int WriteVectorTableFITS (char *filename, char *extname, Vector **vec, int Nvec, int append, int compress, char *format) {
     75 
     76  Header rawheader;
     77  Header cmpheader;
     78  FTable rawtable;
     79  FTable cmptable;
    7980
    8081  FILE *f = NULL;
     
    9192  }
    9293
    93   if (!WriteVectorTable (&theader, &ftable, extname, vec, Nvec, format)) goto escape;
     94  // init so free below does not fail if table is not created
     95  gfits_init_header (&rawheader);
     96  gfits_init_header (&cmpheader);
     97  gfits_init_table (&rawtable);
     98  gfits_init_table (&cmptable);
     99
     100  rawtable.header = &rawheader;
     101  if (!WriteVectorTable (&rawtable, extname, vec, Nvec, format)) goto escape;
     102
     103  FTable *outtable = &rawtable;
     104  Header *outheader = &rawheader;
     105
     106  if (compress) {
     107    cmptable.header = &cmpheader;
     108    if (!gfits_compress_table (&rawtable, &cmptable, 10, "GZIP_1")) goto escape;
     109    outtable = &cmptable;
     110    outheader = &cmpheader;
     111  }
    94112
    95113  if (!append) {
     114    Header header;
     115    Matrix matrix;
    96116    gfits_init_header (&header);
     117    gfits_init_matrix (&matrix);
    97118    header.extend = TRUE;
    98119    gfits_create_header (&header);
     
    103124    gfits_free_matrix (&matrix);
    104125  }
    105   gfits_fwrite_Theader (f, &theader);
    106   gfits_fwrite_table  (f, &ftable);
    107 
    108   gfits_free_header (&theader);
    109   gfits_free_table (&ftable);
     126
     127  // write the actual table data
     128  gfits_fwrite_Theader (f, outheader);
     129  gfits_fwrite_table  (f, outtable);
     130
     131  gfits_free_header (&rawheader);
     132  gfits_free_table (&rawtable);
     133
     134  if (compress) {
     135    gfits_free_header (&cmpheader);
     136    gfits_free_table (&cmptable);
     137  }
    110138
    111139  fclose (f);
     
    114142
    115143 escape:
    116   if (!append) {
    117     gfits_free_header (&header);
    118     gfits_free_matrix (&matrix);
    119   }
    120   gfits_free_header (&theader);
    121   gfits_free_table (&ftable);
     144  gfits_free_header (&rawheader);
     145  gfits_free_table (&rawtable);
     146
     147  if (compress) {
     148    gfits_free_header (&cmpheader);
     149    gfits_free_table (&cmptable);
     150  }
    122151
    123152  fclose (f);
Note: See TracChangeset for help on using the changeset viewer.