IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 12, 2015, 6:18:23 PM (11 years ago)
Author:
eugene
Message:

merge changes from EAM dev branch ohana.20150429

Location:
trunk/Ohana
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana

  • trunk/Ohana/src/opihi/cmd.data

  • trunk/Ohana/src/opihi/cmd.data/cast.c

    r36489 r38441  
    1717  // out type
    1818  char outType = OPIHI_NOTYPE;
    19   if (!strcasecmp(argv[5], "int")) outType = OPIHI_INT;
    20   if (!strcasecmp(argv[5], "float")) outType = OPIHI_FLT;
     19  if (!strcasecmp(argv[5], "int"))    outType = OPIHI_INT;
     20  if (!strcasecmp(argv[5], "float"))  outType = OPIHI_FLT;
     21  if (!strcasecmp(argv[5], "single")) outType = OPIHI_FLT;
     22  if (!strcasecmp(argv[5], "int64"))  outType = OPIHI_FLT;
    2123  if (outType == OPIHI_NOTYPE) goto usage;
     24
     25  int ForceSingle = FALSE;
     26  if (!strcasecmp(argv[5], "single")) ForceSingle = TRUE;
     27
     28  int ForceI64 = FALSE;
     29  if (!strcasecmp(argv[5], "int64")) ForceI64 = TRUE;
    2230
    2331  if ((ovec = SelectVector (argv[1], ANYVECTOR, TRUE)) == NULL) goto error;
     
    3240    opihi_flt *vo = ovec[0].elements.Flt;
    3341    for (i = 0; i < ovec[0].Nelements; i++, vi++, vo++) {
    34       *vo = *vi;
     42      if (ForceSingle) {
     43        float tmp = *vi;
     44        *vo = tmp;
     45      } else if (ForceI64) {
     46        int64_t tmp = *vi;
     47        *vo = tmp;
     48      } else {
     49        *vo = *vi;
     50      }
    3551    }
    3652    return (TRUE);
     
    4864    opihi_flt *vo = ovec[0].elements.Flt;
    4965    for (i = 0; i < ovec[0].Nelements; i++, vi++, vo++) {
    50       *vo = *vi;
     66      if (ForceSingle) {
     67        float tmp = *vi;
     68        *vo = tmp;
     69      } else {
     70        *vo = *vi;
     71      }
    5172    }
    5273    return (TRUE);
     
    6687
    6788usage:
    68   gprint (GP_ERR, "SYNTAX: cast vec = vec as (int/float)\n");
     89  gprint (GP_ERR, "SYNTAX: cast vec = vec as (int/float/single)\n");
     90  gprint (GP_ERR, "  note: (single) forces vector to have single precision\n");
    6991  return (FALSE);
    7092}
  • trunk/Ohana/src/opihi/cmd.data/rd.c

    r38255 r38441  
    99  Buffer *buf;
    1010
     11  int VERBOSE = FALSE;
     12  if ((N = get_argument (argc, argv, "-v"))) {
     13    remove_argument (N, &argc, argv);
     14    VERBOSE = TRUE;
     15  }
     16
    1117  int JustHead = FALSE;
    1218  if ((N = get_argument (argc, argv, "-head"))) {
     
    9197      return (FALSE);
    9298    }
    93     if (gfits_extension_is_compressed (&buf[0].header)) {
     99    if (gfits_extension_is_compressed_image (&buf[0].header)) {
    94100        IsCompressed = TRUE;
    95101    }
     
    124130      Nword = 1;
    125131      IsCompressed = FALSE;
    126       if (gfits_extension_is_compressed (&buf[0].header)) {
     132      if (gfits_extension_is_compressed_image (&buf[0].header)) {
    127133        if (!strcmp (CCDKeyword, "EXTNAME")) Nword = 1;
    128134        IsCompressed = TRUE;
     
    198204    ftable.header[0].buffer = NULL;
    199205    gfits_copy_header (&buf[0].header, ftable.header);
    200     status = gfits_fread_ftable_data (f, &ftable, FALSE);  // this just reads the bytes (not even a SWAP)
    201     status = gfits_uncompress_image (&buf[0].header, &buf[0].matrix, &ftable);
     206
     207    if (!gfits_fread_ftable_data (f, &ftable, FALSE)) { gprint (GP_ERR, "problem reading compressed image table data\n"); fclose (f); return FALSE; }
     208    if (!gfits_byteswap_varlength_column (&ftable, 1)) { gprint (GP_ERR, "problem doing byteswap on compressed image metadata column\n"); fclose (f); gfits_free_table (&ftable); return FALSE; }
     209    if (!gfits_uncompress_image (&buf[0].header, &buf[0].matrix, &ftable)) { gprint (GP_ERR, "problem uncompressing the image data\n"); fclose (f); gfits_free_table (&ftable); return FALSE; }
     210
    202211    // uncompressing the image leaves the format as an extension
    203212    gfits_extended_to_primary (&buf[0].header, TRUE, "Standard FITS");
    204213    gfits_free_table (&ftable);
     214
     215    status = TRUE;
    205216    // XXX this currently does not work for a cube (we get a cube back, not a specific plane)
    206217  } else {
     
    239250  buf[0].unsign = buf[0].header.unsign;
    240251
    241   gprint (GP_LOG, "read "OFF_T_FMT" bytes from %s into buffer %s\n",
    242            buf[0].header.datasize + buf[0].matrix.datasize, argv[2], argv[1]);
     252  if (VERBOSE) gprint (GP_LOG, "read "OFF_T_FMT" bytes from %s into buffer %s\n", buf[0].header.datasize + buf[0].matrix.datasize, argv[2], argv[1]);
    243253
    244254  blank = 0xffff;
  • trunk/Ohana/src/opihi/cmd.data/read_vectors.c

    r38062 r38441  
    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   /* 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) ****/
    415417  if (Nextend > -1) {
    416418    // first extension is PHU, cannot be a table.
     
    429431    }
    430432    if (!gfits_load_header (f, &header)) ESCAPE ("error reading header for extension %d\n", Nextend);
    431 
    432     if (getSizes) {
    433       read_table_sizes (&header);
    434       if (CCDKeyword != NULL) free (CCDKeyword);
    435       gfits_free_header (&header);
    436       return TRUE;
    437     }
    438 
    439     if (Nrows == -1) {
    440       Nrows = header.Naxis[1] - start;
    441     }
    442     if (start < 0) ESCAPE ("invalid range: start < 0\n");
    443     if (start >= header.Naxis[1]) ESCAPE ("invalid range: start >= Ny (%d)\n", header.Naxis[1]);
    444     if (Nrows < 0) ESCAPE ("invalid range: Nrows < 0\n");
    445 
    446     // just a warning:
    447     if (start + Nrows > header.Naxis[1]) {
    448       if (VERBOSE) gprint (GP_ERR, "NOTE: reading last block will return only %d rows\n", header.Naxis[1] - start);
    449     }
    450 
    451     // Ny = 100, start = 0, Nrows = -1 -> Nrows => 100
    452     // Ny = 100, start = 10, Nrows = 90
    453 
    454     if (!gfits_fread_ftable_range (f, padIfShort, &table, start, Nrows)) ESCAPE ("error reading table for extension %d\n", Nextend);
    455433  } else {
    456434    if (CCDKeyword == NULL) {
     
    460438      CCDKeyword = strcreate ("EXTNAME");
    461439    }
    462 
    463440    while (1) {
    464441      if (!gfits_load_header (f, &header)) {
     
    469446        return (TRUE); 
    470447      }
    471 
    472448      Nbytes = gfits_data_size (&header);
    473449
     
    482458        continue;
    483459      }
    484 
    485       if (getSizes) {
    486         read_table_sizes (&header);
    487         if (CCDKeyword != NULL) free (CCDKeyword);
    488         gfits_free_header (&header);
    489         return TRUE;
    490       }
    491 
    492       if (Nrows == -1) {
    493         Nrows = header.Naxis[1] - start;
    494       }
    495       if (start < 0) ESCAPE ("invalid range: start < 0\n");
    496       if (start >= header.Naxis[1]) ESCAPE ("invalid range: start >= Ny (%d)\n", header.Naxis[1]);
    497       if (Nrows < 0) ESCAPE ("invalid range: Nrows < 0\n");
    498 
    499       // just a warning:
    500       if (start + Nrows > header.Naxis[1]) {
    501         if (VERBOSE) gprint (GP_ERR, "NOTE: reading last block will return only %d rows\n", header.Naxis[1] - start);
    502       }
    503 
    504       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 
    508460      break;
    509461    }
     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 ("OFF_T_FMT")\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 "OFF_T_FMT" 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);
    510504  }
    511505
     
    518512  Binary = !strcmp (type, "BINTABLE");
    519513  Ny = header.Naxis[1];
     514
     515  Header *outheader = &header;
     516  FTable *outtable  = &table;
     517
     518  Header rawheader;
     519  FTable rawtable;
     520  if (IsCompressed) {
     521    rawtable.header = &rawheader;
     522
     523    dump_cmp_table (&table, "rd cmp");
     524
     525    int Nfields;
     526    if (!gfits_scan (&header, "TFIELDS", "%d", 1, &Nfields)) ESCAPE ("cannot find TFIELDS in header\n");
     527    for (i = 0; i < Nfields; i++) {
     528      gfits_byteswap_varlength_column (&table, i+1);
     529    }
     530    if (!gfits_uncompress_table (&table, &rawtable)) ESCAPE ("failed to uncompress table\n");
     531    dump_raw_table (&rawtable, "rd raw");
     532
     533    outheader = &rawheader;
     534    outtable  = &rawtable;
     535    gfits_free_header (&header);
     536    gfits_free_table (&table);
     537    Ny = rawheader.Naxis[1];
     538  }
    520539
    521540  /* find columns which match requested vectors */
     
    527546    Nval = 0;
    528547    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");
     548      if (!gfits_get_bintable_column_type (outheader, argv[i], type, &Nval)) ESCAPE ("requested field not found\n");
     549      if (!gfits_get_bintable_column_raw (outheader, outtable, argv[i], &data, IsCompressed)) ESCAPE ("error reading data from specified field\n");
    531550    } 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");
    534     }
    535     if (Nval == 0) ESCAPE ("no data for field in table");
     551      if (!gfits_get_table_column_type (outheader, argv[i], type)) ESCAPE ("requested field not found\n");
     552      if (!gfits_get_table_column (outheader, outtable, argv[i], &data)) ESCAPE ("error reading data from specified field\n");
     553    }
     554    if (Nval == 0) ESCAPE ("no data for field in table\n");
    536555   
    537556    vecType = OPIHI_INT;
    538     if (!strcmp (type, "double") || !strcmp (type, "float")) {
     557    if (!strcmp (type, "double") || !strcmp (type, "float") || !strcmp (type, "int64_t")) {
    539558      vecType = OPIHI_FLT;
    540559    }
     
    570589        else
    571590          sprintf (name, "%s:%d", argv[i], j);
    572         if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) ESCAPE ("bad vector name");
     591        if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) ESCAPE ("bad vector name\n");
    573592        ResetVector (vec[j], vecType, Ny);
    574593      }
    575594
    576       if (!VectorAssignData (vec, type, data, Ny, Nval)) ESCAPE ("bad column type %s", type);
     595      if (!VectorAssignData (vec, type, data, Ny, Nval)) ESCAPE ("bad column type %s\n", type);
    577596
    578597    } else {
     
    584603        else
    585604          sprintf (name, "%s:%d", argv[i], j);
    586         if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) ESCAPE ("bad vector name");
     605        if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) ESCAPE ("bad vector name\n");
    587606        ResetVector (vec[j], vecType, Nval);
    588607      }
    589608
    590       if (!VectorAssignDataTranspose (vec, type, data, Ny, Nval)) ESCAPE ("bad column type %s", type);
     609      if (!VectorAssignDataTranspose (vec, type, data, Ny, Nval)) ESCAPE ("bad column type %s\n", type);
    591610    }
    592611    free (data);
     
    594613  }
    595614  if (CCDKeyword != NULL) free (CCDKeyword);
    596   gfits_free_table (&table);
    597   gfits_free_header (&header);
     615  gfits_free_table (outtable);
     616  gfits_free_header (outheader);
    598617  return (TRUE);
    599618}
  • trunk/Ohana/src/opihi/cmd.data/tv.c

    r38062 r38441  
    7171  int tooBig = buf[0].matrix.Naxis[2] ? (plane >= buf[0].matrix.Naxis[2]) : plane > 0;
    7272  if (tooBig) {
    73     gprint (GP_ERR, " ERROR: -plane (plane) : out of bounds (%d vs %d)\n", plane, buf[0].matrix.Naxis[2]);
     73    gprint (GP_ERR, " ERROR: -plane (plane) : out of bounds (%d vs "OFF_T_FMT")\n", plane, buf[0].matrix.Naxis[2]);
    7474    return (FALSE);
    7575  }
  • trunk/Ohana/src/opihi/cmd.data/vstats.c

    r35109 r38441  
    121121      goto skip;
    122122    }
     123    // we can hit inf if pmax and pmin are close to the max range
     124    if (isinf(dx)) dx = DBL_MAX / Nbin;
    123125
    124126    ALLOCATE (Nval, int, Nbin + 2);
  • trunk/Ohana/src/opihi/cmd.data/wd.c

    r38062 r38441  
    1818  }
    1919
     20  char *CompressMode = NULL;
     21  if ((N = get_argument (argc, argv, "-compress-mode"))) {
     22    remove_argument (N, &argc, argv);
     23    CompressMode = strcreate(argv[N]);
     24    remove_argument (N, &argc, argv);
     25  } else if ((N = get_argument (argc, argv, "-compress"))) {
     26    remove_argument (N, &argc, argv);
     27    CompressMode = strcreate("GZIP_1");
     28  }
     29
    2030  outZero = 0;
    2131  newZero = FALSE;
     
    5464    if (outUnsign == -1) {
    5565      gprint (GP_ERR, "-unsign options: t, f, true, false\n");
     66      FREE (CompressMode);
    5667      return (FALSE);
    5768    }
     
    6273  if (argc != 3) {
    6374    gprint (GP_ERR, "USAGE: wd <buffer> <filename> [-bitpix N] [-bscale X] [-bzero X] [-extend] [-newplane]\n");
     75    FREE (CompressMode);
    6476    return (FALSE);
    6577  }
    6678
    67   if ((buf = SelectBuffer (argv[1], OLDBUFFER, TRUE)) == NULL) return (FALSE);
     79  if ((buf = SelectBuffer (argv[1], OLDBUFFER, TRUE)) == NULL) { FREE (CompressMode); return (FALSE); }
    6880
    6981  if (!newBitpix) outBitpix = buf[0].bitpix;
     
    159171    gfits_free_header (&temp_header);
    160172    gfits_free_matrix (&temp_matrix);
     173    FREE (CompressMode);
    161174    return (status);
    162175  }
    163176 
     177  // not compatible with extend
     178  if (CompressMode) {
     179    Header myHeader;
     180    Matrix myMatrix;
     181
     182    FILE *f = fopen (argv[2], "w");
     183    if (!f) {
     184      fprintf (stderr, "ERROR: cannot open image subset file for output %s\n", argv[2]);
     185      FREE (CompressMode);
     186      return FALSE;
     187    }
     188   
     189    gfits_init_header (&myHeader);
     190    myHeader.extend = TRUE;
     191    gfits_create_header (&myHeader);
     192    gfits_create_matrix (&myHeader, &myMatrix);
     193    gfits_fwrite_header  (f, &myHeader);
     194    gfits_fwrite_matrix  (f, &myMatrix);
     195    gfits_free_header (&myHeader);
     196    gfits_free_matrix (&myMatrix);
     197
     198    FTable ftable;
     199    Header theader;
     200
     201    ftable.header = &theader;
     202
     203    gfits_compress_image (&temp_header, &temp_matrix, &ftable, NULL, CompressMode);
     204    gfits_byteswap_varlength_column (&ftable, 1);
     205    gfits_fwrite_Theader (f, &theader);
     206    gfits_fwrite_table  (f, &ftable);
     207    fclose (f);
     208
     209    gfits_free_header (&theader);
     210    gfits_free_table (&ftable);
     211    FREE (CompressMode);
     212    return (TRUE);
     213  }
     214
    164215  /* the actual write-to-disk goes here */
    165216  if (!gfits_write_header (argv[2], &temp_header)) {
     
    167218    gfits_free_header (&temp_header);
    168219    gfits_free_matrix (&temp_matrix);
     220    FREE (CompressMode);
    169221    return (FALSE);
    170222  }
     
    174226    gfits_free_header (&temp_header);
    175227    gfits_free_matrix (&temp_matrix);
     228    FREE (CompressMode);
    176229    return (FALSE);
    177230  }
     
    180233  gfits_free_matrix (&temp_matrix);
    181234 
     235  FREE (CompressMode);
    182236  return (TRUE);
    183237}
  • trunk/Ohana/src/opihi/cmd.data/write_vectors.c

    r35109 r38441  
    33int write_vectors (int argc, char **argv) {
    44 
    5   int append;
    65  int i, j, Nvec, Ne, N;
    76  FILE *f;
    87  char **fmtlist, *fmttype;
    9   char *p0, *p1, *p2, *format, *FITS;
     8  char *p0, *p1, *p2, *format;
    109  Vector **vec;
    1110
     
    3433
    3534  /* option generate a FITS output table */
    36   FITS = NULL;
     35  char *FITS = NULL;
    3736  if ((N = get_argument (argc, argv, "-fits"))) {
    3837    remove_argument (N, &argc, argv);
     
    5857  }
    5958
    60   append = FALSE;
     59  int append = FALSE;
    6160  if ((N = get_argument (argc, argv, "-append"))) {
    6261    remove_argument (N, &argc, argv);
    6362    append = TRUE;
     63  }
     64
     65  char *compress = NULL;
     66  if ((N = get_argument (argc, argv, "-compress-mode"))) {
     67    remove_argument (N, &argc, argv);
     68    compress = strcreate(argv[N]);
     69    remove_argument (N, &argc, argv);
     70  } else if ((N = get_argument (argc, argv, "-compress"))) {
     71    remove_argument (N, &argc, argv);
     72    compress = strcreate("GZIP_1");
     73    if (!FITS) {
     74      fprintf (stderr, "NOTE: write_vectors -compress has no effect on non-FITS\n");
     75    }
    6476  }
    6577
     
    105117
    106118  if (FITS) {
    107     int status = WriteVectorTableFITS (argv[1], FITS, vec, Nvec, append, format);
     119    int status = WriteVectorTableFITS (argv[1], FITS, vec, Nvec, append, compress, format);
    108120    free (vec);
    109121    return status;
     
    243255    gprint (GP_ERR, "  -csv : write a comma-separated values file (eg, to read in excel)\n");
    244256    gprint (GP_ERR, "  -f \"format\" : provide formatting codes for output:\n");
    245     gprint (GP_ERR, "    ascii / csv : format consists of c-style format codes in form %NN.Md\n");
     257    gprint (GP_ERR, "    ascii / csv : format consists of c-style format codes in form %%NN.Md\n");
    246258    gprint (GP_ERR, ",     the following codes are allowed\n");
    247     gprint (GP_ERR, "        %e -- double, %f -- float\n");
    248     gprint (GP_ERR, "        %d -- int, %c -- char, %x -- hex int\n");
     259    gprint (GP_ERR, "        %%e -- double, %%f -- float\n");
     260    gprint (GP_ERR, "        %%d -- int, %%c -- char, %%x -- hex int\n");
    249261    gprint (GP_ERR, "    FITS : format consists of the following FITS binary table format codes:\n");
    250262    gprint (GP_ERR, "      B : 1 byte int\n");   
Note: See TracChangeset for help on using the changeset viewer.