IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 10, 2020, 10:52:25 AM (6 years ago)
Author:
eugene
Message:

csystem: save scalar results to variables; mkgauss: add normalization option; read_vectors: add hms and date conversion options

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/cmd.data/read_vectors.c

    r41269 r41305  
    3535
    3636// vector types
    37 enum {COLTYPE_NONE, COLTYPE_FLT, COLTYPE_INT, COLTYPE_TIME, COLTYPE_CHAR, COLTYPE_STR};
     37enum {COLTYPE_NONE, COLTYPE_FLT, COLTYPE_INT, COLTYPE_TIME, COLTYPE_DATE, COLTYPE_CHAR, COLTYPE_STR, COLTYPE_HMS};
    3838
    3939static int      Nvec     = 0;
     
    9191    gprint (GP_ERR, "     -skip N : skip N lines before reading\n");
    9292    gprint (GP_ERR, "     column names may include a type: name:type\n");
    93     gprint (GP_ERR, "       type is int, float, char, str, time\n");
     93    gprint (GP_ERR, "       type is int, float, char, str, time, date, hms\n");
    9494    gprint (GP_ERR, "       for char, values are placed into a list $name:0 - $name:n\n");
    9595    gprint (GP_ERR, "       for str, values are placed into a string-typed vector\n");
     96    gprint (GP_ERR, "       for hms, values are sexigesimal values HH:MM:SS (good for degrees as well)\n");
     97    gprint (GP_ERR, "       for date, values are human-readable date strings YYYY/MM/DD\n");
    9698    gprint (GP_ERR, "       for time, values are human-readable date/time strings YYYY/MM/DD,hh:mm:ss\n");
    97     gprint (GP_ERR, "       the resulting vector is a float based on the TIMEFORMAT, TIMEREF values\n");
     99    gprint (GP_ERR, "         date & time values are stored as a float using the TIMEFORMAT, TIMEREF values for the conversion\n");
    98100
    99101    gprint (GP_ERR, "     -fits options:\n");
     
    154156      if (!strcasecmp(ptr, "char"))  { coltype[i] = COLTYPE_CHAR; }
    155157      if (!strcasecmp(ptr, "str"))   { coltype[i] = COLTYPE_STR; }
     158      if (!strcasecmp(ptr, "date"))  { coltype[i] = COLTYPE_DATE; }
    156159      if (!strcasecmp(ptr, "time"))  { coltype[i] = COLTYPE_TIME; }
     160      if (!strcasecmp(ptr, "hms"))   { coltype[i] = COLTYPE_HMS; }
    157161      if (!coltype[i]) goto bad_colname;
    158162    }
     
    212216        break;
    213217      case COLTYPE_FLT:
     218      case COLTYPE_HMS:
    214219      case COLTYPE_TIME:
    215         // note that COLTYPE_TIME is a type of float
     220      case COLTYPE_DATE:
    216221        ResetVector (vec[i], OPIHI_FLT, NELEM);
    217222        break;
     
    292297        time_t tvalue;
    293298        int readStatus = FALSE;
     299        int dataStatus = FALSE;
    294300        // need to make the if cases for coltype[i]
    295301        switch (coltype[i]) {
     
    341347            vec[i][0].elements.Flt[Nelem] = readStatus ? dvalue : NAN;
    342348            break;
     349          case COLTYPE_DATE: {
     350            char *string = NULL;
     351            if (IsCSV) {
     352              char *ptr = ptrparse_csv (col[i], c0);
     353              string = strcreate (ptr); // create separate string (NULL-safe)
     354              ptr = (string == NULL) ? NULL : strchr (string, ',');
     355              if (ptr != NULL) *ptr = 0; // place an EOL here so parsing does not go past the comma
     356            } else {
     357              char *ptr = ptrparse (col[i], c0); // NULL-safe
     358              string = getword (ptr); // NULL-safe
     359            }         
     360            tvalue = ohana_date_to_sec (string); // NULL-safe (returns 0)
     361            dvalue = TimeValue (tvalue, TimeReference, TimeFormat);
     362            vec[i][0].elements.Flt[Nelem] = string ? dvalue : NAN;
     363            FREE (string);
     364            break;
     365          }
     366          case COLTYPE_HMS: {
     367            char *ptr = IsCSV ? ptrparse_csv (col[i], c0) : ptrparse (col[i], c0);
     368            char *string = strcreate (ptr); // make a copy so we can munge it in ohana_dms_to_ddd
     369            dataStatus = ohana_dms_to_ddd (&dvalue, string);
     370            vec[i][0].elements.Flt[Nelem] = ((string != NULL) && dataStatus) ? dvalue : NAN;
     371            FREE (string);
     372            break;
     373          }
    343374        }
    344375        if (!readStatus && VERBOSE) {
     
    366397              break;
    367398            case COLTYPE_FLT:
     399            case COLTYPE_HMS:
    368400            case COLTYPE_TIME:
     401            case COLTYPE_DATE:
    369402              ResetVector (vec[i], OPIHI_FLT, NELEM);
    370403              break;
     
    390423        break;
    391424      case COLTYPE_FLT:
     425      case COLTYPE_HMS:
    392426      case COLTYPE_TIME:
     427      case COLTYPE_DATE:
    393428        ResetVector (vec[i], OPIHI_FLT, Nelem);
    394429        break;
Note: See TracChangeset for help on using the changeset viewer.