Index: /branches/eam_branches/ipp-20111122/Ohana/src/opihi/cmd.astro/spex1dgas.c
===================================================================
--- /branches/eam_branches/ipp-20111122/Ohana/src/opihi/cmd.astro/spex1dgas.c	(revision 32966)
+++ /branches/eam_branches/ipp-20111122/Ohana/src/opihi/cmd.astro/spex1dgas.c	(revision 32967)
@@ -251,29 +251,60 @@
 
     // save the result
-    char name[64];
-    snprintf (name, 64, "output.%02d.dat", iter);
-    FILE *output = fopen (name, "w");
-    for (i = 0; i < Nobject; i++) {
-      fprintf (output, "%f %f : %f %f\n", object[i].Xo, object[i].Yo, object[i].dPdX, object[i].dPdY);
-    }
-    fclose (output);
-
-    // measure (dP/dX),(dP/dY) for all objects
+    if (0) {
+      char name[64];
+      snprintf (name, 64, "output.%02d.dat", iter);
+      FILE *output = fopen (name, "w");
+      for (i = 0; i < Nobject; i++) {
+	fprintf (output, "%f %f : %f %f\n", object[i].Xo, object[i].Yo, object[i].dPdX, object[i].dPdY);
+      }
+      fclose (output);
+    }
+
+    // measure (dP/dX) & move object
     for (i = 0; i < Nobject; i++) {
       get_pressure_gradient (i, nCloseMax, farFrac, nearNeighbors, maxPressure);
       move_object (i);
     }
-
-    // given (dP/dX),(dP/dY), move each object 
-    // for (i = 0; i < Nobject; i++) {
-    // }
+  }
+
+  // find the mean Xo, Yo positions for all objects
+  float XoSum = 0.0;
+  for (i = 0; i < Nobject; i++) {
+    float dY2sum = 0.0;
+    int Npts = 0;
+    for (j = 0; (j < nCloseMax) && (j < object[i].Nindex); j++) {
+      int idx = object[i].index[j];
+      float dR2 = SQ(object[i].Dtgt[j]);
+      float dX2 = SQ(object[i].Xo - object[idx].Xo);
+      float dY2 = dR2 - dX2;
+      dY2sum += dY2;
+      Npts ++;
+    }
+    XoSum += object[i].Xo;
+    object[i].Yo = (dY2sum > 0.0) ? sqrt(dY2sum / Npts) : -sqrt(dY2sum / Npts);
+  }
+  float XoMean = XoSum / Nobject;
+
+  // remove the mean Xo (uninteresting)
+  for (i = 0; i < Nobject; i++) {
+    object[i].Xo -= XoMean;
   }
 
   // save the result
-  FILE *output = fopen ("output.dat", "w");
-  for (i = 0; i < Nobject; i++) {
-    fprintf (output, "%f %f : %f %f\n", object[i].Xo, object[i].Yo, object[i].dPdX, object[i].dPdY);
-  }
-  fclose (output);
+  {
+    Vector *outindex = SelectVector ("sp1d_idx", ANYVECTOR, TRUE); if (!outindex) goto escape;
+    Vector *outXo    = SelectVector ("sp1d_Xo",  ANYVECTOR, TRUE); if (!outXo) goto escape;
+    Vector *outYo    = SelectVector ("sp1d_Yo",  ANYVECTOR, TRUE); if (!outYo) goto escape;
+
+    ResetVector (outindex, OPIHI_INT, Nobject);
+    ResetVector (outXo, OPIHI_FLT, Nobject);
+    ResetVector (outYo, OPIHI_FLT, Nobject);
+
+    for (i = 0; i < Nobject; i++) {
+      outindex->elements.Int[i] = i;
+      outXo->elements.Flt[i] = object[i].Xo;
+      outYo->elements.Flt[i] = object[i].Yo;
+    }
+  }
 
   return TRUE;
Index: /branches/eam_branches/ipp-20111122/Ohana/src/opihi/cmd.data/cursor.c
===================================================================
--- /branches/eam_branches/ipp-20111122/Ohana/src/opihi/cmd.data/cursor.c	(revision 32966)
+++ /branches/eam_branches/ipp-20111122/Ohana/src/opihi/cmd.data/cursor.c	(revision 32967)
@@ -4,5 +4,5 @@
 
   char string[20], key[20], *name;
-  int i, N, kapa;
+  int i, N, kapa, VERBOSE;
   double X, Y, R, D, Z;
   void *oldsignal;
@@ -13,4 +13,9 @@
   // if ((N = get_argument (argc, argv, "-g"))) {
   // if ((N = get_argument (argc, argv, "-i"))) {
+
+  VERBOSE = TRUE;
+  if ((N = get_argument (argc, argv, "-a"))) {
+    VERBOSE = FALSE;
+  }
 
   name = NULL;
@@ -53,5 +58,5 @@
     set_str_variable ("KEY", key);
     
-    gprint (GP_LOG, "%s %f %f %f %f %f\n", key, X, Y, Z, R, D);
+    if (VERBOSE) gprint (GP_LOG, "%s %f %f %f %f %f\n", key, X, Y, Z, R, D);
 
     if (!strcasecmp (key, "Q")) break;
