Index: /branches/eam_branches/ipp-20121219/Ohana/src/opihi/cmd.data/vgauss.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/opihi/cmd.data/vgauss.c	(revision 34857)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/opihi/cmd.data/vgauss.c	(revision 34858)
@@ -31,6 +31,13 @@
   }
 
+//   Guess = FALSE;
+//   if ((N = get_argument (argc, argv, "-guess"))) {
+//     Guess = TRUE;
+//     remove_argument (N, &argc, argv);
+//   }
+
   if (argc != 5) {
     gprint (GP_ERR, "USAGE: vgauss <x> <y> <dy> (out)\n");
+    gprint (GP_ERR, "  <dy> may be the words 'con[stant]' or 'poi[sson]', in which case the error is constructed'\n");
     gprint (GP_ERR, " uses guesses: C0 (mean), C1 (sigma), C2 (norm), C3 (sky)\n");
     return (FALSE);
@@ -39,6 +46,26 @@
   if ((xvec = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if ((yvec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE);
-  if ((svec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if ((ovec = SelectVector (argv[4], ANYVECTOR, TRUE)) == NULL) return (FALSE);
+
+  int Nsvec = strlen(argv[3]);
+
+  if ((Nsvec >= 3) && (!strncasecmp ("poisson", argv[3], Nsvec) || !strncasecmp ("constant", argv[3], Nsvec))) {
+    svec = SelectVector ("vgauss_err", ANYVECTOR, TRUE);
+    if (svec == NULL) return (FALSE);
+    MatchVector (svec, xvec, OPIHI_FLT);
+    v1 = svec[0].elements.Flt;
+    v2 = yvec[0].elements.Flt;
+    if (!strncasecmp ("poisson", argv[3], Nsvec)) {
+      for (i = 0; i < svec[0].Nelements; i++) {
+	v1[i] = (isfinite(v2[i]) && (v2[i] > 0)) ? sqrt(v2[i]) : 1.0;
+      }
+    } else {
+      for (i = 0; i < svec[0].Nelements; i++) {
+	v1[i] = 1.0;
+      }
+    }
+  } else {
+    if ((svec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
+  }
 
   CastVector (xvec, OPIHI_FLT);
@@ -46,5 +73,4 @@
   CastVector (svec, OPIHI_FLT);
   // XXX Cast is failing.
-    
 
   Npts = xvec[0].Nelements;
@@ -58,4 +84,5 @@
   GET_VAR (par[3], "C3");
   Npar = 4;
+
 
   // mrqmin takes the inverse variance (do not generate NANs)
