IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 29, 2015, 6:52:41 AM (11 years ago)
Author:
eugene
Message:

merge changes from ipp-20150112

Location:
trunk
Files:
11 edited
3 copied

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/Ohana

    • Property svn:mergeinfo deleted
  • trunk/Ohana/src/opihi/cmd.data/Makefile

    r37807 r38062  
    6161$(SRC)/ungridify.$(ARCH).o     \
    6262$(SRC)/histogram.$(ARCH).o      \
     63$(SRC)/tdhistogram.$(ARCH).o    \
    6364$(SRC)/hermitian1d.$(ARCH).o    \
    6465$(SRC)/hermitian2d.$(ARCH).o    \
     
    8990$(SRC)/medacc.$(ARCH).o \
    9091$(SRC)/mget.$(ARCH).o           \
     92$(SRC)/mget3d.$(ARCH).o         \
    9193$(SRC)/minterpolate.$(ARCH).o   \
    9294$(SRC)/medimage.$(ARCH).o       \
     
    130132$(SRC)/imspline_apply.$(ARCH).o \
    131133$(SRC)/imspline_construct.$(ARCH).o \
     134$(SRC)/squash3d.$(ARCH).o          \
    132135$(SRC)/imstats.$(ARCH).o           \
    133136$(SRC)/style.$(ARCH).o             \
  • trunk/Ohana/src/opihi/cmd.data/init.c

    r37807 r38062  
    5151int ungridify        PROTO((int, char **));
    5252int histogram        PROTO((int, char **));
     53int tdhistogram      PROTO((int, char **));
    5354int hermitian1d      PROTO((int, char **));
    5455int hermitian2d      PROTO((int, char **));
     
    8081int medacc           PROTO((int, char **));
    8182int mget             PROTO((int, char **));
     83int mget3d           PROTO((int, char **));
    8284int minterp          PROTO((int, char **));
    8385int medimage_command PROTO((int, char **));
     
    117119int imspline_apply   PROTO((int, char **));
    118120int imspline_construct PROTO((int, char **));
     121int squash3d         PROTO((int, char **));
    119122int stats            PROTO((int, char **));
    120123int imstats          PROTO((int, char **));
     
    217220  {1, "header",       header,           "print image header"},
    218221  {1, "histogram",    histogram,        "generate histogram from vector"},
     222  {1, "tdhistogram",  tdhistogram,      "generate 2D histogram image from vector set"},
    219223  {1, "hermitian1d",  hermitian1d,      "generate 1-D Hermitian Polynomial"},
    220224  {1, "hermitian2d",  hermitian2d,      "generate 2-D Hermitian Polynomial"},
     
    243247  {1, "medacc",       medacc,           "accumulate vector values in another vector"},
    244248  {1, "mget",         mget,             "extract a vector from an image"},
     249  {1, "mget3d",       mget3d,           "extract a vector from a 3D image"},
    245250  {1, "imget",        mget,             "extract a vector from an image"},
    246251  {1, "minterp",      minterp,          "interpolate image pixels"},
     
    289294  {1, "imspline.apply", imspline_apply, "apply spline fit to generate an image"},
    290295  {1, "imspline.const", imspline_construct, "create spline 2nd deriv. terms"},
     296  {1, "squash3d",     squash3d,         "squash 3d buffer to 2d"},
    291297  {1, "stats",        imstats,          "statistics on a portion of an image"},
    292298  {1, "style",        style,            "set the style for graph plots"},
  • trunk/Ohana/src/opihi/cmd.data/interpolate.c

    r20936 r38062  
    11# include "data.h"
    22
     3// XXX use 'threshold' to interpolate to a value
    34int interpolate (int argc, char **argv) {
    45
     
    1112    gprint (GP_ERR, "USAGE: interpolate Xi Yi Xo Yo\n");
    1213    gprint (GP_ERR, "  Xi Yi - sorted reference vectors\n");
    13     gprint (GP_ERR, "  Xo    - output positions\n");
    14     gprint (GP_ERR, "  Yo    - output values\n");
     14    gprint (GP_ERR, "  Xo    - output positions (vector)\n");
     15    gprint (GP_ERR, "  Yo    - output values (vector)\n");
     16    gprint (GP_ERR, "  (use 'threshold' to interpolate to a value)\n");
    1517    return (FALSE);
    1618  }
     
    1820  if ((xin  = SelectVector (argv[1],  OLDVECTOR, TRUE)) == NULL) return (FALSE);
    1921  if ((yin  = SelectVector (argv[2],  OLDVECTOR, TRUE)) == NULL) return (FALSE);
     22
     23  // target positions are a vector
    2024  if ((xout = SelectVector (argv[3],  OLDVECTOR, TRUE)) == NULL) return (FALSE);
    2125  if ((yout = SelectVector (argv[4],  ANYVECTOR, TRUE)) == NULL) return (FALSE);
  • trunk/Ohana/src/opihi/cmd.data/mcreate.c

    r9275 r38062  
    33int mcreate (int argc, char **argv) {
    44 
    5   int Nx, Ny;
     5  int N;
    66  Buffer *buf;
    77
     8  int Nz = 0;
     9  if ((N = get_argument (argc, argv, "-nz"))) {
     10    remove_argument (N, &argc, argv);
     11    Nz = atoi (argv[N]);
     12    remove_argument (N, &argc, argv);
     13  }
     14
    815  if (argc != 4) {
    9     gprint (GP_ERR, "USAGE: mcreate <buffer> Nx Ny\n");
     16    gprint (GP_ERR, "USAGE: mcreate <buffer> Nx Ny [-nz Nz]\n");
    1017    return (FALSE);
    1118  }
    1219
    1320  if ((buf = SelectBuffer (argv[1], ANYBUFFER, TRUE)) == NULL) return (FALSE);
    14   Nx = atof (argv[2]);
    15   Ny = atof (argv[3]);
     21  int Nx = atof (argv[2]);
     22  int Ny = atof (argv[3]);
    1623
    1724  /* I should encapsulate this in a create_default_buffer */
    1825  gfits_free_matrix (&buf[0].matrix);
    1926  gfits_free_header (&buf[0].header);
    20   CreateBuffer (buf, Nx, Ny, -32, 1.0, 0.0);
     27
     28  if (Nz) {
     29    CreateBuffer3D (buf, Nx, Ny, Nz, -32, 1.0, 0.0);
     30  } else {
     31    CreateBuffer (buf, Nx, Ny, -32, 1.0, 0.0);
     32  }
    2133  return (TRUE);
    2234}
  • trunk/Ohana/src/opihi/cmd.data/rd.c

    r29938 r38062  
    44int rd (int argc, char **argv) {
    55 
    6   int i, N, status, plane, Nplane, extend, Nextend, Nskip, JustHead, blank;
    7   int ccdsel, done, Nword, IsCompressed;
    8   char region[512], *ccdid, *filename;
    9   FILE *f;
     6  int i, N, Nskip, blank;
     7  int done, Nword;
     8  char region[512];
    109  Buffer *buf;
    1110
    12   JustHead = FALSE;
     11  int JustHead = FALSE;
    1312  if ((N = get_argument (argc, argv, "-head"))) {
    1413    remove_argument (N, &argc, argv);
     
    1615  }
    1716
    18   plane = 1;
     17  int plane = -1;
    1918  if ((N = get_argument (argc, argv, "-plane"))) {
    2019    remove_argument (N, &argc, argv);
     
    2322  }
    2423
    25   extend = FALSE;
    26   Nextend = -1;
     24  int extend = FALSE;
     25  int Nextend = -1;
    2726  if ((N = get_argument (argc, argv, "-x"))) {
    2827    remove_argument (N, &argc, argv);
     
    3231  }
    3332
    34   ccdsel = FALSE;
    35   ccdid = (char *) NULL;
     33  int ccdsel = FALSE;
     34  char *ccdid = NULL;
    3635  if ((N = get_argument (argc, argv, "-n"))) {
    3736    remove_argument (N, &argc, argv);
     
    5251
    5352  /* test if file exists */
    54   f = fopen (argv[2], "r");
     53  FILE *f = fopen (argv[2], "r");
    5554  if (f == (FILE *) NULL) {
    5655    gprint (GP_ERR, "file %s not found\n", argv[2]);
     
    6766
    6867  /* save file name */
    69   filename = filebasename (argv[2]);
     68  char *filename = filebasename (argv[2]);
    7069  strcpy (buf[0].file, filename);
    7170  free (filename);
    7271
    73   status = FALSE;
    74   IsCompressed = FALSE;
     72  int status = FALSE;
     73  int IsCompressed = FALSE;
    7574
    7675  /*** advance to the correct FITS extension ***/
     
    168167
    169168  /* check for valid plane */
    170   Nplane = buf[0].header.Naxis[2];
    171   if (Nplane == 0) Nplane = 1;
    172   if (plane > Nplane) {
    173     gprint (GP_ERR, "-plane is too large: %d total planes\n", Nplane);
    174     DeleteBuffer (buf);
    175     fclose (f);
    176     return (FALSE);
     169  int Nz = buf[0].header.Naxis[2];
     170  if (plane >= 0) {
     171    // we are requesting a specific plane (-1 : all data)
     172    int tooFar = Nz ? (plane >= Nz) : (plane > Nz);
     173    if (tooFar) {
     174      gprint (GP_ERR, "-plane is too large: %d total planes\n", Nz);
     175      DeleteBuffer (buf);
     176      fclose (f);
     177      return (FALSE);
     178    }
    177179  }
    178180
    179181  /* load matrix data */
    180182  if (IsCompressed) {
     183    if (plane > -1) {
     184      gprint (GP_ERR, "-plane incompatible with compressed image\n");
     185      DeleteBuffer (buf);
     186      fclose (f);
     187      return (FALSE);
     188    }
    181189    FTable ftable;
    182190    Header theader;
     
    191199    // XXX this currently does not work for a cube (we get a cube back, not a specific plane)
    192200  } else {
    193     sprintf (region, "-1 -1 -1 -1 %d %d", (plane - 1), plane);
    194     status = gfits_fread_matrix_segment (f, &buf[0].matrix, &buf[0].header, region);
     201    if (plane > -1) {
     202      // read a single plane into a 2D image
     203      sprintf (region, "-1 -1 -1 -1 %d %d", (plane - 1), plane);
     204      status = gfits_fread_matrix_segment (f, &buf[0].matrix, &buf[0].header, region);
     205      buf[0].header.Naxis[2] = 0;
     206      buf[0].header.Naxes = 2;
     207      gfits_modify (&buf[0].header, "NAXIS", "%d", 1, 2);
     208      gfits_modify (&buf[0].header, "NAXIS3", "%d", 1, 0);
     209    } else {
     210      status = gfits_fread_matrix (f, &buf[0].matrix, &buf[0].header);
     211    }
    195212  }
    196213  fclose (f);
     
    200217    DeleteBuffer (buf);
    201218    return (FALSE);
    202   }
    203 
    204   /* adjust buffer to represent 2D data */
    205   if (Nplane > 1) {
    206     buf[0].header.Naxis[2] = 0;
    207     buf[0].header.Naxes = 2;
    208     gfits_modify (&buf[0].header, "NAXIS", "%d", 1, 2);
    209     gfits_delete (&buf[0].header, "NAXIS3", 1);
    210219  }
    211220
     
    215224    buf[0].header.Naxis[1] = 1;
    216225    buf[0].matrix.Naxis[1] = 1;
     226    gfits_modify (&buf[0].header, "NAXIS", "%d", 1, 2);
     227    gfits_modify (&buf[0].header, "NAXIS2", "%d", 1, 1);
    217228  }   
    218229
  • trunk/Ohana/src/opihi/cmd.data/read_vectors.c

    r37807 r38062  
    372372  }
    373373
     374  int VERBOSE = FALSE;
     375  if ((N = get_argument (argc, argv, "-v"))) {
     376    remove_argument (N, &argc, argv);
     377    VERBOSE = TRUE;
     378  }
     379
    374380  int start = 0;
    375381  int Nrows = -1; // -1 : read entire table
     
    399405  // }
    400406
    401   if (argc < 2) ESCAPE ("USAGE: read -fits extension [-extnum] [-keyword key] name name ...\n");
     407  if ((argc < 2) && !getSizes) ESCAPE ("USAGE: read -fits extension [-extnum] [-keyword key] name name ...\n");
     408  if ((argc != 1) && getSizes) ESCAPE ("USAGE: read -sizes -fits extension [-extnum] (does not read data values)\n");
    402409
    403410  if (f == NULL) ESCAPE ("file not found\n");
     
    436443    if (start >= header.Naxis[1]) ESCAPE ("invalid range: start >= Ny (%d)\n", header.Naxis[1]);
    437444    if (Nrows < 0) ESCAPE ("invalid range: Nrows < 0\n");
    438     if (start + Nrows > header.Naxis[1]) ESCAPE ("invalid range: start + Nrows > Ny (%d)\n", header.Naxis[1]);
     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    }
    439450
    440451    // Ny = 100, start = 0, Nrows = -1 -> Nrows => 100
     
    472483      }
    473484
     485      if (getSizes) {
     486        read_table_sizes (&header);
     487        if (CCDKeyword != NULL) free (CCDKeyword);
     488        gfits_free_header (&header);
     489        return TRUE;
     490      }
     491
    474492      if (Nrows == -1) {
    475493        Nrows = header.Naxis[1] - start;
     
    478496      if (start >= header.Naxis[1]) ESCAPE ("invalid range: start >= Ny (%d)\n", header.Naxis[1]);
    479497      if (Nrows < 0) ESCAPE ("invalid range: Nrows < 0\n");
    480       if (start + Nrows > header.Naxis[1]) ESCAPE ("invalid range: start + Nrows > Ny (%d)\n", header.Naxis[1]);
     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      }
    481503
    482504      if (!gfits_fread_ftable_range (f, padIfShort, &table, start, Nrows)) ESCAPE ("error reading table for extension %d\n", Nextend);
     
    603625
    604626  set_int_variable ("table:Nx", header->Naxis[0]);
    605   set_int_variable ("table:Nx", header->Naxis[0]);
     627  set_int_variable ("table:Ny", header->Naxis[1]);
    606628  set_int_variable ("table:Nfields", Nfields);
    607629
  • trunk/Ohana/src/opihi/cmd.data/tv.c

    r37807 r38062  
    2828  }
    2929
     30  int plane = 0;
     31  if ((N = get_argument (argc, argv, "-plane"))) {
     32    remove_argument (N, &argc, argv);
     33    plane = atoi (argv[N]);
     34    remove_argument (N, &argc, argv);
     35  }
     36  if (plane < 0) {
     37    gprint (GP_ERR, " ERROR: -plane (plane) : cannot be negative\n");
     38    return (FALSE);
     39  }
     40
    3041  /* shell exits on pipe close, FIX */
    3142  if ((N = get_argument (argc, argv, "-kill"))) {
     
    5566  GetCoords (&coords, &buf[0].header);
    5667 
    57   image.data1d = (float *) buf[0].matrix.buffer;
    5868  image.Nx = buf[0].matrix.Naxis[0];
    5969  image.Ny = buf[0].matrix.Naxis[1];
     70
     71  int tooBig = buf[0].matrix.Naxis[2] ? (plane >= buf[0].matrix.Naxis[2]) : plane > 0;
     72  if (tooBig) {
     73    gprint (GP_ERR, " ERROR: -plane (plane) : out of bounds (%d vs %d)\n", plane, buf[0].matrix.Naxis[2]);
     74    return (FALSE);
     75  }
     76  int Npix2D = image.Nx * image.Ny;
     77
     78  float *imdata = (float *) buf[0].matrix.buffer;
     79  image.data1d = &imdata[plane*Npix2D];
    6080
    6181  // send only the root of the file, not the full path
  • trunk/Ohana/src/opihi/cmd.data/wd.c

    r27435 r38062  
    8181  memcpy (temp_header.buffer, buf[0].header.buffer, temp_header.datasize);
    8282
    83   if (temp_header.Naxes) {
    84     // the inBlank value probably does not matter: temp_matrix is float, so nan is used
    85     gfits_convert_format (&temp_header, &temp_matrix, outBitpix, outScale, outZero, 0xffff, outUnsign);
    86   } else {
    87     gfits_modify (&temp_header, "BITPIX", "%d", 1, outBitpix);
    88     gfits_modify (&temp_header, "BSCALE", "%lf", 1, outScale);
    89     gfits_modify (&temp_header, "BZERO",  "%lf", 1, outZero);
    90     gfits_modify_alt (&temp_header, "UNSIGN", "%t", 1, outUnsign);
    91   }
     83  gfits_convert_format (&temp_header, &temp_matrix, outBitpix, outScale, outZero, 0xffff, outUnsign);
    9284
     85  // Extend puts the output matrix in the first available non-PHU slot (ie, the last one)
     86  // it updates NEXTEND and set EXTEND to TRUE, and modifies the PHU header (neither should happen)
     87  // if those keywords do not exist...
    9388  if (Extend) {
    9489    Header Xhead;
  • trunk/Ohana/src/opihi/cmd.data/zplot.c

    r34613 r38062  
    44 
    55  char *outname = NULL;
    6   int i, kapa, valid, size;
     6  int i, N, kapa, valid, size;
    77  opihi_flt *out;
    88  double min, range;
    99  Graphdata graphmode;
    10   Vector *xvec, *yvec, *zvec, Zvec;
     10  Vector *xvec, *yvec, *zvec, *dxmvec, *dxpvec, *dymvec, *dypvec, Zvec;
    1111
    1212  if (!style_args (&graphmode, &argc, argv, &kapa)) return (FALSE);
     13
     14  /* decide on error bars */
     15  dxmvec = dxpvec = dymvec = dypvec = NULL;
     16  if ((N = get_argument (argc, argv, "-dx"))) {
     17    remove_argument (N, &argc, argv);
     18    if ((dxmvec = SelectVector (argv[N], OLDVECTOR, TRUE)) == NULL) return (FALSE);   
     19    remove_argument (N, &argc, argv);
     20  }
     21  if ((N = get_argument (argc, argv, "+dx"))) {
     22    remove_argument (N, &argc, argv);
     23    if ((dxpvec = SelectVector (argv[N], OLDVECTOR, TRUE)) == NULL) return (FALSE);   
     24    remove_argument (N, &argc, argv);
     25  }
     26  if ((N = get_argument (argc, argv, "-dy"))) {
     27    remove_argument (N, &argc, argv);
     28    if ((dymvec = SelectVector (argv[N], OLDVECTOR, TRUE)) == NULL) return (FALSE);   
     29    remove_argument (N, &argc, argv);
     30  }
     31  if ((N = get_argument (argc, argv, "+dy"))) {
     32    remove_argument (N, &argc, argv);
     33    if ((dypvec = SelectVector (argv[N], OLDVECTOR, TRUE)) == NULL) return (FALSE);   
     34    remove_argument (N, &argc, argv);
     35  }
    1336
    1437  valid  = (argc == 6);
     
    4063  }
    4164
     65  /* set errorbar mode (these are NOT sticky) */
     66  graphmode.etype = 0;
     67  if ((dymvec != NULL) && (dypvec == NULL)) dypvec = dymvec;
     68  if ((dypvec != NULL) && (dymvec == NULL)) dymvec = dypvec;
     69  if ((dypvec != NULL) || (dymvec != NULL)) graphmode.etype |= 0x01;
     70  if ((dxmvec != NULL) && (dxpvec == NULL)) dxpvec = dxmvec;
     71  if ((dxpvec != NULL) && (dxmvec == NULL)) dxmvec = dxpvec;
     72  if ((dxpvec != NULL) || (dxmvec != NULL)) graphmode.etype |= 0x02;
     73 
    4274  /* find vectors */
    4375  if ((xvec = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
     
    5688    return (FALSE);
    5789  }
     90  if (dypvec && (dypvec->Nelements != xvec->Nelements)) goto mismatch;
     91  if (dymvec && (dymvec->Nelements != xvec->Nelements)) goto mismatch;
     92  if (dxpvec && (dxpvec->Nelements != xvec->Nelements)) goto mismatch;
     93  if (dxmvec && (dxmvec->Nelements != xvec->Nelements)) goto mismatch;
     94
    5895  SetVector (&Zvec, OPIHI_FLT, zvec[0].Nelements);
    5996  out = Zvec.elements.Flt;
    6097 
     98  // note actual size is 3.3x plot -sz sizes. (DrawObjects.c:399)
    6199  if (zvec[0].type == OPIHI_FLT) {
    62100    opihi_flt *in = zvec[0].elements.Flt;
     
    81119  graphmode.style = 2; /* plot points */
    82120  graphmode.size = -1; /* point size determined by Zvec */
    83   graphmode.etype = 0; /* no errorbars */
    84121  PlotVectorTriplet (kapa, xvec, yvec, &Zvec, mask, &graphmode);
     122  if (graphmode.etype & 0x01) {
     123    PlotVectorSingle (kapa, dymvec, mask, "dym");
     124    PlotVectorSingle (kapa, dypvec, mask, "dyp");
     125  }
     126  if (graphmode.etype & 0x02) {
     127    PlotVectorSingle (kapa, dxmvec, mask, "dxm");
     128    PlotVectorSingle (kapa, dxpvec, mask, "dxp");
     129  }
    85130
    86131  free (Zvec.elements.Ptr);
    87132  if (mask) free (mask);
    88   DeleteNamedVector (outname);
     133
     134  if (outname) {
     135    DeleteNamedVector (outname);
     136    free (outname);
     137  }
    89138
    90139  return (TRUE);
    91140
     141mismatch:
     142  gprint (GP_ERR, "error and data vector lengths are mismatched\n");
     143  if (outname) {
     144    DeleteNamedVector (outname);
     145    free (outname);
     146  }
     147  return (FALSE);
    92148}
    93149
Note: See TracChangeset for help on using the changeset viewer.