Index: trunk/Ohana/src/opihi/cmd.data/Makefile
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/Makefile	(revision 2774)
+++ trunk/Ohana/src/opihi/cmd.data/Makefile	(revision 2826)
@@ -49,6 +49,7 @@
 $(SDIR)/gridify.$(ARCH).o       \
 $(SDIR)/histogram.$(ARCH).o	\
+$(SDIR)/imcut.$(ARCH).o	 	\
 $(SDIR)/imhist.$(ARCH).o	\
-$(SDIR)/imcut.$(ARCH).o	\
+$(SDIR)/imsmooth.$(ARCH).o	\
 $(SDIR)/integrate.$(ARCH).o	\
 $(SDIR)/interpolate.$(ARCH).o	\
@@ -106,4 +107,5 @@
 $(SDIR)/vclip.$(ARCH).o		   \
 $(SDIR)/vgrid.$(ARCH).o		   \
+$(SDIR)/vload.$(ARCH).o		   \
 $(SDIR)/vstat.$(ARCH).o		   \
 $(SDIR)/vroll.$(ARCH).o		   \
Index: trunk/Ohana/src/opihi/cmd.data/imsmooth.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/imsmooth.c	(revision 2826)
+++ trunk/Ohana/src/opihi/cmd.data/imsmooth.c	(revision 2826)
@@ -0,0 +1,68 @@
+# include "data.h"
+# define NSIGMA 3
+
+int imsmooth (int argc, char **argv) {
+  
+  int i, j, n, Nx, Ny, Ns, Ngauss;
+  float *vi, *vo, *gauss, *gaussnorm;
+  float g, s, sigma;
+  Buffer *in;
+  float *temp;
+
+  if (argc != 3) {
+    fprintf (stderr, "USAGE: imsmooth (input) sigma\n");
+    return (FALSE);
+  }
+  
+  if ((in  = SelectBuffer (argv[1], OLDBUFFER, TRUE)) == NULL) return (FALSE);
+  sigma = atof (argv[2]);
+
+  Nx = in[0].matrix.Naxis[0];
+  Ny = in[0].matrix.Naxis[1];
+  ALLOCATE (temp, float, Nx*Ny);
+
+  /* build a 1D gaussian */
+  Ns = (int) (NSIGMA*sigma + 0.5);
+  Ngauss = 2*Ns + 1;
+  ALLOCATE (gaussnorm, float, Ngauss);
+  gauss = &gaussnorm[Ns];
+  for (i = -Ns; i < Ns + 1; i++) {
+    gauss[i] = exp ((i*i)/(-2*sigma*sigma));
+  }
+
+  /* smooth in X direction */
+  for (j = 0; j < Ny; j++) {
+    vi = (float *) in[0].matrix.buffer + j*Nx;
+    vo = &temp[j*Nx];
+    for (i = 0; i < Nx; i++) {
+      g = s = 0;
+      for (n = -Ns; n < Ns + 1; n++) {
+	if (i+n < 0) continue;
+	if (i+n >= Nx) continue;
+	s += gauss[n]*vi[i+n];
+	g += gauss[n];
+      }
+      vo[i] = s / g;
+    }
+  }
+
+  /* smooth in Y direction */
+  for (i = 0; i < Nx; i++) {
+    vi = &temp[i];
+    vo = (float *)in[0].matrix.buffer + i;
+    for (j = 0; j < Ny; j++) {
+      g = s = 0;
+      for (n = -Ns; n < Ns + 1; n++) {
+	if (j+n < 0) continue;
+	if (j+n >= Ny) continue;
+	s += gauss[n]*vi[(n+j)*Nx];
+	g += gauss[n];
+      }
+      vo[j*Nx] = s / g;
+    }
+  }
+
+  free (gaussnorm);
+  return (TRUE);
+}
+
Index: trunk/Ohana/src/opihi/cmd.data/init.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/init.c	(revision 2774)
+++ trunk/Ohana/src/opihi/cmd.data/init.c	(revision 2826)
@@ -30,6 +30,7 @@
 int gridify          PROTO((int, char **));
 int histogram        PROTO((int, char **));
+int imcut            PROTO((int, char **));
 int imhist           PROTO((int, char **));
-int imcut            PROTO((int, char **));
+int imsmooth         PROTO((int, char **));
 int integrate        PROTO((int, char **));
 int interpolate      PROTO((int, char **));
@@ -87,4 +88,5 @@
 int vect_select      PROTO((int, char **));
 int vgrid            PROTO((int, char **));
+int vload            PROTO((int, char **));
 int vstat            PROTO((int, char **));
 int vroll            PROTO((int, char **));
@@ -126,8 +128,9 @@
   {"header",       header,	     "print buffer header"},
   {"histogram",    histogram,	     "generate histogram from vector"},
+  {"imcut",        imcut,	     "linear image cut between arbitrary coords"},
   {"imhist",       imhist,	     "histogram of an image region"},
+  {"imsmooth",     imsmooth,	     "circular gaussian smoothing"},
   {"integrate",    integrate,	     "integrate a vector"},
   {"interpolate",  interpolate,	     "interpolate between vector pairs"},
-  {"imcut",        imcut,	     "linear image cut between arbitrary coords"},
   {"jpeg",         jpeg,	     "write text line on graph"},
   {"kern",         kern,	     "convolve with 3x3 kernel"},
@@ -182,4 +185,5 @@
   {"select",	   vect_select,	     "selective vector assignment"},
   {"vgrid",        vgrid,	     "get info from imreg database"},
+  {"vload",        vload,	     "load vectors on Kii"},
   {"vstat",        vstat,	     "get info from imreg database"},
   {"vroll",        vroll,	     "roll vector elements"},
Index: trunk/Ohana/src/opihi/cmd.data/vload.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/vload.c	(revision 2826)
+++ trunk/Ohana/src/opihi/cmd.data/vload.c	(revision 2826)
@@ -0,0 +1,70 @@
+# include "data.h"
+
+int vload (int argc, char **argv) {
+  
+  int i, N, n, Nline, ISCEL;
+  int Ximage, Nimage;
+  double dx, dy;
+  char *buffer, *line;
+  Buffer *buf;
+  Vector *vecx, *vecy;
+  
+  Nimage = -1;
+  if (N = get_argument (argc, argv, "-n")) {
+    remove_argument (N, &argc, argv);
+    Nimage = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+  if (!GetImage (&Ximage, &Nimage)) return (FALSE);
+
+  if (argc != 4) {
+    fprintf (stderr, "USAGE: vload (overlay) (xvec) (yvec) [-n]\n");
+    return (FALSE);
+  }
+  
+  if (!SelectOverlay (argv[1], &n)) return (FALSE);
+
+  if ((vecx = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE);
+  if ((vecy = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
+  if (vecx[0].Nelements != vecy[0].Nelements) {
+    fprintf (stderr, "mismatched vector lengths\n");
+    return (FALSE);
+  }
+
+  ALLOCATE (buffer, char, 65536);  /* space for 512 lines of 128 bytes */
+  bzero (buffer, 65536);
+  ALLOCATE (line, char, 1024);     /* space to read the file */
+  Nline = 0;
+
+  write (Ximage, "LOAD", 4); /* force Ximage to look for the incoming image */
+  sprintf (line, "OVER %9d ", n);
+  write (Ximage, line, 16);
+  
+  dx = dy = 1.0;
+
+  for (i = 0; i < vecx[0].Nelements; i++) {
+    snprintf (&buffer[Nline*128], 128, "%15s %20.10f %20.10f %20.10f %20.10f ", "BOX", 
+	      vecx[0].elements[i]+0.5, vecy[0].elements[i]+0.5, dx, dy);
+    Nline ++;
+    if (Nline == 512) {
+      sprintf (line, "NLINES  %7d ", Nline);
+      write (Ximage, line, 16);
+      write (Ximage, buffer, Nline*128);
+      bzero (buffer, 65536);
+      Nline = 0;
+    }
+  }
+
+  sprintf (line, "NLINES  %7d ", Nline);
+  write (Ximage, line, 16);
+  write (Ximage, buffer, Nline*128);
+  sprintf (line, "DONE ");
+  write (Ximage, line, 16);
+
+  free (buffer);
+  free (line);
+  fprintf (stderr, "loaded %d objects\n", n);
+
+  return (TRUE);
+}
+
