Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/biassub.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/biassub.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/biassub.c	(revision 20859)
@@ -91,7 +91,6 @@
 
   if (!NoVector) {
-    xvec[0].Nelements = yvec[0].Nelements = nlong;
-    REALLOCATE (xvec[0].elements.Flt, opihi_flt, nlong);
-    REALLOCATE (yvec[0].elements.Flt, opihi_flt, nlong);
+    ResetVector (xvec, OPIHI_FLT, nlong);
+    ResetVector (yvec, OPIHI_FLT, nlong);
     for (i = 0; i < nlong; i++) {
       xvec[0].elements.Flt[i] = i + start;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/coords.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/coords.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/coords.c	(revision 20859)
@@ -56,4 +56,6 @@
       return (FALSE);
     }
+    REQUIRE_VECTOR_FLT (xvec, FALSE); 
+    REQUIRE_VECTOR_FLT (yvec, FALSE); 
     form = VECTOR;
   }      
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/cplot.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/cplot.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/cplot.c	(revision 20859)
@@ -31,9 +31,6 @@
   }
 
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, xvec[0].Nelements);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, xvec[0].Nelements);
-    
-  Xvec.Nelements = xvec[0].Nelements;
-  Yvec.Nelements = xvec[0].Nelements;
+  ResetVector (Xvec, OPIHI_FLT, xvec[0].Nelements);
+  ResetVector (Yvec, OPIHI_FLT, xvec[0].Nelements);
   
   r = xvec[0].elements.Flt;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/csystem.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/csystem.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/csystem.c	(revision 20859)
@@ -54,4 +54,7 @@
   }
   
+  CastVector (xvec, OPIHI_FLT);
+  CastVector (yvec, OPIHI_FLT);
+
   xptr = xvec[0].elements.Flt;
   yptr = yvec[0].elements.Flt;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/czplot.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/czplot.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/czplot.c	(revision 20859)
@@ -28,4 +28,5 @@
   REQUIRE_VECTOR_FLT (xvec, FALSE); 
   REQUIRE_VECTOR_FLT (yvec, FALSE); 
+  REQUIRE_VECTOR_FLT (zvec, FALSE); 
 
   if (xvec[0].Nelements != yvec[0].Nelements) {
@@ -37,10 +38,7 @@
     return (FALSE);
   }
-  Xvec.Nelements = xvec[0].Nelements;
-  Yvec.Nelements = xvec[0].Nelements;
-  Zvec.Nelements = zvec[0].Nelements;
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
-  ALLOCATE (Zvec.elements.Flt, opihi_flt, Zvec.Nelements);
+  ResetVector (Xvec, OPIHI_FLT, xvec[0].Nelements);
+  ResetVector (Yvec, OPIHI_FLT, xvec[0].Nelements);
+  ResetVector (Zvec, OPIHI_FLT, xvec[0].Nelements);
   
   r   = xvec[0].elements.Flt;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/multifit.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/multifit.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/multifit.c	(revision 20859)
@@ -46,18 +46,25 @@
     sprintf (name, "c%d", i);
     if ((Nc[i]  = SelectVector (name, ANYVECTOR, TRUE)) == NULL) goto escape;
+    ResetVector (Nc[i], OPIHI_FLT, 1); 
     sprintf (name, "Mb%d", i);
     if ((NMb[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (NMb[i], FALSE); 
     sprintf (name, "mb%d", i);
     if ((Nmb[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (Nmb[i], FALSE); 
     sprintf (name, "wb%d", i);
     if ((Nwb[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (Nwb[i], FALSE); 
   }
   for (i = 0; i < Norder - 1; i++) {
     sprintf (name, "ml%d", i);
     if ((Nml[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (Nml[i], FALSE); 
     sprintf (name, "mh%d", i);
     if ((Nmh[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (Nmh[i], FALSE); 
     sprintf (name, "wo%d", i);
     if ((Nwo[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (Nwo[i], FALSE); 
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/precess.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/precess.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/precess.c	(revision 20859)
@@ -90,7 +90,14 @@
   }
   
-  for (i = 0; i < xvec[0].Nelements; i++) {
-    A = xvec[0].elements.Flt[i];
-    D = yvec[0].elements.Flt[i];
+  // cast xvec or yvec to FLT if it is type INT
+  CastVector (xvec, OPIHI_FLT);
+  CastVector (yvec, OPIHI_FLT);
+
+  opihi_flt *Av = xvec[0].elements.Flt;
+  opihi_flt *Dv = yvec[0].elements.Flt;
+
+  for (i = 0; i < xvec[0].Nelements; i++, Av, Dv) {
+    A = *Av;
+    D = *Dv;
     SD =  cos(RAD_DEG*A + zeta)*sin(theta)*cos(RAD_DEG*D) + cos(theta)*sin(RAD_DEG*D);
     CD = sqrt (1 - SD*SD);
@@ -101,9 +108,8 @@
     RA  = DEG_RAD*atan2(SA, CA) + z;
 
-    if (RA < 0)
-      RA += 360;
+    if (RA < 0) RA += 360;
     
-    xvec[0].elements.Flt[i] = RA;
-    yvec[0].elements.Flt[i] = DEC; 
+    *Av = RA;
+    *Dv = DEC; 
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/profile.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/profile.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/profile.c	(revision 20859)
@@ -28,7 +28,7 @@
   if ((yvec = SelectVector (argv[3], ANYVECTOR, TRUE)) == NULL) return (FALSE);
 
-  xvec[0].Nelements = yvec[0].Nelements = (int)SQ(2*N+1);
-  REALLOCATE (xvec[0].elements.Flt, opihi_flt, 5*(int)SQ(2*N+1));
-  REALLOCATE (yvec[0].elements.Flt, opihi_flt, 5*(int)SQ(2*N+1));
+  ResetVector (xvec, OPIHI_FLT, (int)SQ(2*N+1);
+  ResetVector (yvec, OPIHI_FLT, (int)SQ(2*N+1);
+
   bzero (yvec[0].elements.Flt, (int)SQ(2*N+1)*sizeof(opihi_flt)+1);
   V = (float *)(buf[0].matrix.buffer); 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/spec.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/spec.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/spec.c	(revision 20859)
@@ -55,8 +55,6 @@
 
   N = y2 - y1;
-  REALLOCATE (xvec[0].elements.Flt, opihi_flt, N);
-  REALLOCATE (yvec[0].elements.Flt, opihi_flt, N);
-  xvec[0].Nelements = N;
-  yvec[0].Nelements = N;
+  ResetVector (xvec, OPIHI_FLT, N);
+  ResetVector (yvec, OPIHI_FLT, N);
   
   ALLOCATE (buffer, float, Nlong);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/accum.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/accum.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/accum.c	(revision 20859)
@@ -30,4 +30,7 @@
   if ((out = SelectVector (argv[2], ANYVECTOR, TRUE)) == NULL) return (FALSE);
 
+  REQUIRE_VECTOR_FLT (val, FALSE); 
+  REQUIRE_VECTOR_FLT (key, FALSE); 
+
   start = atof (argv[4]);
   end   = atof (argv[5]);
@@ -46,6 +49,5 @@
   Nbins = (end - start) / delta;
 
-  out[0].Nelements = Nbins;
-  REALLOCATE (out[0].elements.Flt, opihi_flt, out[0].Nelements);
+  ResetVector (out, OPIHI_FLT, Nbins);
   bzero (out[0].elements.Flt, sizeof(opihi_flt)*out[0].Nelements);
   if (Normalize) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit.c	(revision 20859)
@@ -36,15 +36,26 @@
     free (c);
   }
-  yvec[0].Nelements = xvec[0].Nelements;
-  REALLOCATE (yvec[0].elements.Flt, opihi_flt, yvec[0].Nelements);
+
+  ResetVector (yvec, OPIHI_FLT, xvec[0].Nelements);
   bzero (yvec[0].elements.Flt, sizeof(opihi_flt)*yvec[0].Nelements);
-  x = xvec[0].elements.Flt;
   y = yvec[0].elements.Flt;
 
-  for (j = 0; j < xvec[0].Nelements; j++, x++, y++) {
-    X = 1;
-    for (i = 0; i < order + 1; i++) {
-      *y += C[i]*X;
-      X = X * (*x);
+  if (xvec[0].type == OPIHI_FLT) {
+    opihi_flt *x = xvec[0].elements.Flt;
+    for (j = 0; j < xvec[0].Nelements; j++, x++, y++) {
+      X = 1;
+      for (i = 0; i < order + 1; i++) {
+	*y += C[i]*X;
+	X = X * (*x);
+      }
+    }
+  } else {
+    opihi_int *x = xvec[0].elements.Int;
+    for (j = 0; j < xvec[0].Nelements; j++, x++, y++) {
+      X = 1;
+      for (i = 0; i < order + 1; i++) {
+	*y += C[i]*X;
+	X = X * (*x);
+      }
     }
   }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit2d.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit2d.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit2d.c	(revision 20859)
@@ -43,22 +43,70 @@
   }
 
-  zvec[0].Nelements = xvec[0].Nelements;
-  REALLOCATE (zvec[0].elements.Flt, opihi_flt, zvec[0].Nelements);
+  ResetVector (zvec, OPIHI_FLT, xvec[0].Nelements);
   bzero (zvec[0].elements.Flt, sizeof(opihi_flt)*zvec[0].Nelements);
-  x = xvec[0].elements.Flt;
-  y = yvec[0].elements.Flt;
   z = zvec[0].elements.Flt;
 
-  for (n = 0; n < xvec[0].Nelements; n++, x++, y++, z++) {
-    Y = X = 1;
-    for (j = 0; j < order + 1; j++) {
-      X = Y;
-      for (i = 0; i < order + 1 - j; i++) {
-	*z += C[i][j]*X;
-	X = X * (*x);
+  // we have four cases (x == flt or int) and (y == flt or int)
+  if ((xvec[0].type == OPIHI_FLT) && (yvec[0].type == OPIHI_FLT)) {
+    opihi_flt *x = xvec[0].elements.Flt;
+    opihi_flt *y = yvec[0].elements.Flt;
+    for (n = 0; n < xvec[0].Nelements; n++, x++, y++, z++) {
+      Y = X = 1;
+      for (j = 0; j < order + 1; j++) {
+	X = Y;
+	for (i = 0; i < order + 1 - j; i++) {
+	  *z += C[i][j]*X;
+	  X = X * (*x);
+	}
+	Y = Y * (*y);
       }
-      Y = Y * (*y);
     }
   }
+  if ((xvec[0].type == OPIHI_FLT) && (yvec[0].type == OPIHI_INT)) {
+    opihi_flt *x = xvec[0].elements.Flt;
+    opihi_int *y = yvec[0].elements.Int;
+    for (n = 0; n < xvec[0].Nelements; n++, x++, y++, z++) {
+      Y = X = 1;
+      for (j = 0; j < order + 1; j++) {
+	X = Y;
+	for (i = 0; i < order + 1 - j; i++) {
+	  *z += C[i][j]*X;
+	  X = X * (*x);
+	}
+	Y = Y * (*y);
+      }
+    }
+  }
+  if ((xvec[0].type == OPIHI_INT) && (yvec[0].type == OPIHI_FLT)) {
+    opihi_int *x = xvec[0].elements.Int;
+    opihi_flt *y = yvec[0].elements.Flt;
+    for (n = 0; n < xvec[0].Nelements; n++, x++, y++, z++) {
+      Y = X = 1;
+      for (j = 0; j < order + 1; j++) {
+	X = Y;
+	for (i = 0; i < order + 1 - j; i++) {
+	  *z += C[i][j]*X;
+	  X = X * (*x);
+	}
+	Y = Y * (*y);
+      }
+    }
+  }
+  if ((xvec[0].type == OPIHI_INT) && (yvec[0].type == OPIHI_INT)) {
+    opihi_int *x = xvec[0].elements.Int;
+    opihi_int *y = yvec[0].elements.Int;
+    for (n = 0; n < xvec[0].Nelements; n++, x++, y++, z++) {
+      Y = X = 1;
+      for (j = 0; j < order + 1; j++) {
+	X = Y;
+	for (i = 0; i < order + 1 - j; i++) {
+	  *z += C[i][j]*X;
+	  X = X * (*x);
+	}
+	Y = Y * (*y);
+      }
+    }
+  }
+
   for (i = 0; i < order + 1; i++) free (C[i]);
   free (C);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/concat.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/concat.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/concat.c	(revision 20859)
@@ -19,6 +19,11 @@
     Nin = ovec[0].Nelements;
     ovec[0].Nelements++;
-    REALLOCATE (ovec[0].elements.Flt, opihi_flt, ovec[0].Nelements);
-    ovec[0].elements.Flt[Nin] = value;
+    if (ovec[0].type == OPIHI_FLT) {
+      REALLOCATE (ovec[0].elements.Flt, opihi_flt, ovec[0].Nelements);
+      ovec[0].elements.Flt[Nin] = value;
+    } else {
+      REALLOCATE (ovec[0].elements.Int, opihi_int, ovec[0].Nelements);
+      ovec[0].elements.Int[Nin] = value;
+    }
     return (TRUE);
   } 
@@ -26,11 +31,39 @@
   if ((ivec = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   
-  REALLOCATE (ovec[0].elements.Flt, opihi_flt, ovec[0].Nelements + ivec[0].Nelements);
-  for (j = ovec[0].Nelements, i = 0; i < ivec[0].Nelements; i++, j++) {
-    ovec[0].elements.Flt[j] = ivec[0].elements.Flt[i];
+  // we have 4 cases: (ivec == flt or int) and (ovec == flt or int)
+  if ((ovec[0].type == OPIHI_FLT) && (ivec[0].type == OPIHI_FLT)) {
+    REALLOCATE (ovec[0].elements.Flt, opihi_flt, ovec[0].Nelements + ivec[0].Nelements);
+    for (j = ovec[0].Nelements, i = 0; i < ivec[0].Nelements; i++, j++) {
+      ovec[0].elements.Flt[j] = ivec[0].elements.Flt[i];
+    }
   }
+  if ((ovec[0].type == OPIHI_FLT) && (ivec[0].type == OPIHI_INT)) {
+    REALLOCATE (ovec[0].elements.Flt, opihi_flt, ovec[0].Nelements + ivec[0].Nelements);
+    for (j = ovec[0].Nelements, i = 0; i < ivec[0].Nelements; i++, j++) {
+      ovec[0].elements.Flt[j] = ivec[0].elements.Int[i];
+    }
+  }
+  if ((ovec[0].type == OPIHI_INT) && (ivec[0].type == OPIHI_INT)) {
+    REALLOCATE (ovec[0].elements.Int, opihi_int, ovec[0].Nelements + ivec[0].Nelements);
+    for (j = ovec[0].Nelements, i = 0; i < ivec[0].Nelements; i++, j++) {
+      ovec[0].elements.Int[j] = ivec[0].elements.Int[i];
+    }
+  }
+
+  // this case forces ovec to be raised to FLT
+  if ((ovec[0].type == OPIHI_INT) && (ivec[0].type == OPIHI_FLT)) {
+    ALLOCATE (temp, opihi_flt, ovec[0].Nelements + ivec[0].Nelements);
+    for (i = 0; i < ovec[0].Nelements; i++) {
+      temp[i] = ovec[0].elements.Int[i];
+    }
+    ovec[0].type = OPIHI_FLT;
+    free (ovec[0].elements.Int);
+    ovec[0].elements.Flt = temp;
+    for (j = ovec[0].Nelements, i = 0; i < ivec[0].Nelements; i++, j++) {
+      ovec[0].elements.Flt[j] = ivec[0].elements.Flt[i];
+    }
+  }
+
   ovec[0].Nelements += ivec[0].Nelements;
-  
   return (TRUE);
-    
 }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/contour.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/contour.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/contour.c	(revision 20859)
@@ -92,6 +92,6 @@
   N = 0;
   NVEC = 100;
-  REALLOCATE (xv[0].elements.Flt, opihi_flt, NVEC);
-  REALLOCATE (yv[0].elements.Flt, opihi_flt, NVEC);
+  ResetVector (xv, OPIHI_FLT, NVEC);
+  ResetVector (yv, OPIHI_FLT, NVEC);
 
   for (j = 1; j < Ny; j++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cumulative.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cumulative.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cumulative.c	(revision 20859)
@@ -4,5 +4,5 @@
   
   int i;
-  opihi_flt *Vi, *Vo;
+  opihi_flt *Vo;
   Vector *ivec, *ovec;
 
@@ -14,15 +14,23 @@
   if ((ivec = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if ((ovec = SelectVector (argv[2], ANYVECTOR, TRUE)) == NULL) return (FALSE);
-  ovec[0].Nelements = ivec[0].Nelements;
-    
-  REALLOCATE (ovec[0].elements.Flt, opihi_flt, ovec[0].Nelements);
+
+  ResetVector (ovec, OPIHI_FLT, ivec[0].Nelements);
   bzero (ovec[0].elements.Flt, sizeof(opihi_flt)*ovec[0].Nelements);
 
-  Vi = ivec[0].elements.Flt;
   Vo = ovec[0].elements.Flt;
-  *Vo = *Vi;
-  for (i = 1; i < ivec[0].Nelements; i++, Vi++, Vo++) {
-    *Vo = Vo[-1] + *Vi;
-  }      
+
+  if (ivec[0].type == OPIHI_FLT) {
+    opihi_flt *Vi = ivec[0].elements.Flt;
+    *Vo = *Vi;
+    for (i = 1; i < ivec[0].Nelements; i++, Vi++, Vo++) {
+      *Vo = Vo[-1] + *Vi;
+    }      
+  } else {
+    opihi_int *Vi = ivec[0].elements.Int;
+    *Vo = *Vi;
+    for (i = 1; i < ivec[0].Nelements; i++, Vi++, Vo++) {
+      *Vo = Vo[-1] + *Vi;
+    }      
+  }
   return (TRUE);
 }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cut.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cut.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cut.c	(revision 20859)
@@ -48,7 +48,6 @@
   case 'X':
     /* create output vectors */
-    xvec[0].Nelements = yvec[0].Nelements = nx;
-    REALLOCATE (xvec[0].elements.Flt, opihi_flt, MAX (nx, 1));
-    REALLOCATE (yvec[0].elements.Flt, opihi_flt, MAX (nx, 1));
+    ResetVector (xvec, OPIHI_FLT, MAX (nx, 1));
+    ResetVector (yvec, OPIHI_FLT, MAX (nx, 1));
     bzero (yvec[0].elements.Flt, nx*sizeof(opihi_flt));
     for (i = 0; i < nx; i++) {
@@ -81,7 +80,6 @@
   case 'y':
   case 'Y':
-    xvec[0].Nelements = yvec[0].Nelements = ny;
-    REALLOCATE (xvec[0].elements.Flt, opihi_flt, ny);
-    REALLOCATE (yvec[0].elements.Flt, opihi_flt, ny);
+    ResetVector (xvec, OPIHI_FLT, MAX (ny, 1));
+    ResetVector (yvec, OPIHI_FLT, MAX (ny, 1));
     bzero (yvec[0].elements.Flt, ny*sizeof(opihi_flt));
     for (i = 0; i < ny; i++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dbselect.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dbselect.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dbselect.c	(revision 20859)
@@ -67,6 +67,23 @@
       return (FALSE);
     }
-    REALLOCATE (vec[i][0].elements.Flt, opihi_flt, Nrows);
-    vec[i][0].Nelements = Nrows;
+    switch (fields[i].type) {
+      case FIELD_TYPE_TINY:
+      case FIELD_TYPE_SHORT:
+      case FIELD_TYPE_LONG:
+      case FIELD_TYPE_INT24:
+      case FIELD_TYPE_LONGLONG:
+	ResetVector (vec[i], OPIHI_INT, Nrows);
+	break;
+      case FIELD_TYPE_DECIMAL:
+      case FIELD_TYPE_FLOAT:
+      case FIELD_TYPE_DOUBLE:
+      case FIELD_TYPE_TIME:
+      case FIELD_TYPE_DATE:
+      case FIELD_TYPE_DATETIME:
+	ResetVector (vec[i], OPIHI_FLT, Nrows);
+	break;
+      default:
+	ResetVector (vec[i], OPIHI_FLT, Nrows);
+	break;
   }
 
@@ -88,4 +105,6 @@
 	  case FIELD_TYPE_INT24:
 	  case FIELD_TYPE_LONGLONG:
+	    vec[i][0].elements.Int[j] = atol (row[i]);
+	    break;
 	  case FIELD_TYPE_DECIMAL:
 	  case FIELD_TYPE_FLOAT:
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimendown.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimendown.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimendown.c	(revision 20859)
@@ -30,6 +30,5 @@
   Npix = Nx * Ny;
 
-  vec[0].Nelements = Npix;
-  REALLOCATE (vec[0].elements.Flt, opihi_flt, Npix);
+  ResetVector (vec, OPIHI_FLT, Npix);
 
   in = (float *) buf[0].matrix.buffer;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimenup.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimenup.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimenup.c	(revision 20859)
@@ -4,5 +4,4 @@
   
   int i, Nx, Ny, Npix;
-  opihi_flt *in;
   float *out;
   Vector *vec;
@@ -30,8 +29,15 @@
 
   out = (float *) buf[0].matrix.buffer;
-  in = vec[0].elements.Flt;
 
-  for (i = 0; i < Npix; i++, in++, out++) {
-    *out = *in;
+  if (vec[0].type == OPIHI_FLT) {
+    opihi_flt *in = vec[0].elements.Flt;
+    for (i = 0; i < Npix; i++, in++, out++) {
+      *out = *in;
+    }
+  } else {
+    opihi_int *in = vec[0].elements.Int;
+    for (i = 0; i < Npix; i++, in++, out++) {
+      *out = *in;
+    }
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fft1d.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fft1d.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fft1d.c	(revision 20859)
@@ -25,4 +25,7 @@
   if ((Ire = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   
+  REQUIRE_VECTOR_FLT (Ire, FALSE); 
+  if (Iim) { REQUIRE_VECTOR_FLT (Iim, FALSE); }
+
   // check the input data (match lengths? binary length?)
   Npix = Ire[0].Nelements;
@@ -40,9 +43,7 @@
   if ((Oim = SelectVector (argv[5], ANYVECTOR, TRUE)) == NULL) return (FALSE);
 
-  // allocate sufficient output space
-  Ore[0].Nelements = Npix;
-  Oim[0].Nelements = Npix;
-  REALLOCATE (Ore[0].elements.Flt, opihi_flt, Npix);
-  REALLOCATE (Oim[0].elements.Flt, opihi_flt, Npix);
+  // allocate sufficient output space, force output to be FLT
+  ResetVector (Ore, OPIHI_FLT, Npix);
+  ResetVector (Oim, OPIHI_FLT, Npix);
  
   // copy data to output vectors (fft is done in place)
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit.c	(revision 20859)
@@ -53,9 +53,16 @@
     return (FALSE);
   }
-  if (Weight && xvec[0].Nelements != dyvec[0].Nelements) {
-    gprint (GP_ERR, "vectors must have same length\n");
-    return (FALSE);
-  }
-  
+  REQUIRE_VECTOR_FLT (xvec, FALSE); 
+  REQUIRE_VECTOR_FLT (yvec, FALSE); 
+
+  if (Weight) {
+    REQUIRE_VECTOR_FLT (dyvec, FALSE); 
+    if (xvec[0].Nelements != dyvec[0].Nelements) {
+      gprint (GP_ERR, "vectors must have same length\n");
+      return (FALSE);
+    }
+  }
+ 
+
   /* nterm is number of polynomial terms, starting at x^0 */
   order = atof (argv[3]);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit2d.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit2d.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit2d.c	(revision 20859)
@@ -64,7 +64,14 @@
     return (FALSE);
   }
-  if (Weight && xvec[0].Nelements != dzvec[0].Nelements) {
-    gprint (GP_ERR, "vectors must have same length\n");
-    return (FALSE);
+  REQUIRE_VECTOR_FLT (xvec, FALSE); 
+  REQUIRE_VECTOR_FLT (yvec, FALSE); 
+  REQUIRE_VECTOR_FLT (zvec, FALSE); 
+
+  if (Weight) {
+    REQUIRE_VECTOR_FLT (dzvec, FALSE); 
+    if (xvec[0].Nelements != dzvec[0].Nelements) {
+      gprint (GP_ERR, "vectors must have same length\n");
+      return (FALSE);
+    }
   }
   
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussdeviate.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussdeviate.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussdeviate.c	(revision 20859)
@@ -15,6 +15,5 @@
   sigma = atof (argv[4]);
 
-  vec[0].Nelements = Npts;
-  REALLOCATE (vec[0].elements.Flt, opihi_flt, Npts);
+  ResetVector (vec, OPIHI_FLT, Npts);
 
   gauss_init (2048);
@@ -46,6 +45,5 @@
   sigma = atof (argv[4]);
 
-  vec[0].Nelements = Npts;
-  REALLOCATE (vec[0].elements.Flt, opihi_flt, Npts);
+  ResetVector (vec, OPIHI_FLT, Npts);
 
   gauss_init (Npts);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussj.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussj.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussj.c	(revision 20859)
@@ -4,5 +4,6 @@
 
   float *m;
-  opihi_flt *v;
+  opihi_flt *vf;
+  opihi_int *vi;
   double **a, **b;
   int i, j, N, status, QUIET;
@@ -32,14 +33,21 @@
   }
 
+  isFloat = (B[0].type == OPIHI_FLT);
+  vf = B[0].elements.Flt;
+  vi = B[0].elements.Int;
+
   m = (float *) A[0].matrix.buffer;
-  v = B[0].elements.Flt;
   for (i = 0; i < N; i++) {
     for (j = 0; j < N; j++) {
       a[i][j] = m[i+j*N];
     }
-    b[i][0] = v[i]; 
+    b[i][0] = isFloat ? vf[i] : vi[i]; 
   }
 
   status = dgaussjordan (a, b, N, 1);
+
+  // output vector needs to be float, so re-cast it
+  ResetVector (B, OPIHI_FLT, N);
+  vf = B[0].elements.Flt;
 
   for (i = 0; i < N; i++) {
@@ -47,5 +55,5 @@
        m[i+j*N] = a[i][j];
     }
-    v[i] = b[i][0]; 
+    vf[i] = b[i][0]; 
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/grid.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/grid.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/grid.c	(revision 20859)
@@ -23,8 +23,6 @@
 
   N = 0;
-  Xvec.Nelements = 200;
-  Yvec.Nelements = 200;
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
+  ResetVector (Xvec, OPIHI_FLT, 200);
+  ResetVector (Yvec, OPIHI_FLT, 200);
 
   major = minor = 1;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gridify.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gridify.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gridify.c	(revision 20859)
@@ -29,4 +29,8 @@
   if (vx[0].Nelements != vy[0].Nelements) return (FALSE);
   if (vx[0].Nelements != vz[0].Nelements) return (FALSE);
+
+  REQUIRE_VECTOR_FLT (vx, FALSE); 
+  REQUIRE_VECTOR_FLT (vy, FALSE); 
+  REQUIRE_VECTOR_FLT (vz, FALSE); 
 
   Xmin = atof (argv[5]);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/histogram.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/histogram.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/histogram.c	(revision 20859)
@@ -4,6 +4,6 @@
   
   int i, bin, Nbins;
+  opihi_int *OUT;
   opihi_flt start, end, delta;
-  opihi_flt *V;
   Vector *xvec, *yvec;
 
@@ -31,18 +31,25 @@
   if ((xvec = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if ((yvec = SelectVector (argv[2], ANYVECTOR, TRUE)) == NULL) return (FALSE);
-  yvec[0].Nelements = Nbins;
-    
-  REALLOCATE (yvec[0].elements.Flt, opihi_flt, yvec[0].Nelements);
-  bzero (yvec[0].elements.Flt, sizeof(opihi_flt)*yvec[0].Nelements);
-  if (Nbins < 1) {
-      return (TRUE);
+
+  ResetVector (yvec, OPIHI_INT, Nbins);
+  bzero (yvec[0].elements.Int, sizeof(opihi_int)*yvec[0].Nelements);
+  if (Nbins < 1) return (TRUE);
+  *OUT = yvec[0].elements.Int;
+
+  if (xvec[0].type == OPIHI_FLT) {
+    opihi_flt *V = xvec[0].elements.Flt;
+    for (i = 0; i < xvec[0].Nelements; i++, V++) {
+      if (isnan(*V)) continue;
+      bin = MIN (MAX (0, (*V - start) / delta), Nbins - 1);
+      OUT[bin]++;
+    }      
+  } else {
+    opihi_int *V = xvec[0].elements.Int;
+    for (i = 0; i < xvec[0].Nelements; i++, V++) {
+      if (isnan(*V)) continue;
+      bin = MIN (MAX (0, (*V - start) / delta), Nbins - 1);
+      OUT[bin]++;
+    }      
   }
-
-  V = xvec[0].elements.Flt;
-  for (i = 0; i < xvec[0].Nelements; i++, V++) {
-    if (isnan(*V)) continue;
-    bin = MIN (MAX (0, (*V - start) / delta), Nbins - 1);
-    yvec[0].elements.Flt[bin] += 1.0;
-  }      
 
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imcut.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imcut.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imcut.c	(revision 20859)
@@ -37,8 +37,6 @@
   dY = dY / L;
 
-  REALLOCATE (xvec[0].elements.Flt, opihi_flt, MAX (L, 1));
-  REALLOCATE (yvec[0].elements.Flt, opihi_flt, MAX (L, 1));
-  xvec[0].Nelements = L;
-  yvec[0].Nelements = L;
+  ResetVector (xvec, OPIHI_FLT, MAX (L, 1));
+  ResetVector (yvec, OPIHI_FLT, MAX (L, 1));
 
   V = (float *)buf[0].matrix.buffer;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imhist.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imhist.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imhist.c	(revision 20859)
@@ -105,9 +105,7 @@
   }  
 
-  vec1[0].Nelements = Nbins + 1;
-  vec2[0].Nelements = Nbins + 1;
-  REALLOCATE (vec1[0].elements.Flt, opihi_flt, vec1[0].Nelements);
+  ResetVector (vec1, OPIHI_FLT, Nbins + 1);
+  ResetVector (vec2, OPIHI_FLT, Nbins + 1);
   bzero (vec1[0].elements.Flt, vec1[0].Nelements*sizeof(opihi_flt));
-  REALLOCATE (vec2[0].elements.Flt, opihi_flt, vec2[0].Nelements);
   bzero (vec2[0].elements.Flt, vec2[0].Nelements*sizeof(opihi_flt));
   
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/integrate.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/integrate.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/integrate.c	(revision 20859)
@@ -3,7 +3,7 @@
 int integrate (int argc, char **argv) {
   
-  int i, N, VERBOSE;
+  int i, N, VERBOSE, isFloat;
   opihi_flt *X, *Y;
-  double start, end, value, range;
+  double start, end, value, range, dvalue;
   Vector *vecx, *vecy;
 
@@ -25,15 +25,30 @@
   end   = atof (argv[4]);
 
-  X = vecx[0].elements.Flt;
-  Y = vecy[0].elements.Flt;
+  isFloat = vecy[0].type == OPIHI_FLT;
+  Yf = vecy[0].elements.Flt;
+  Yi = vecy[0].elements.Int;
 
   value = 0;
   range = 0;
-  for (i = 0; i < vecx[0].Nelements-1; i++, X++, Y++) {
-    if ((*X >= start) && (*X <= end)) {
-      value += *Y * (X[1] - X[0]);
-      range += (X[1] - X[0]);
-    }
-  }      
+
+  if (vecx[0].type == OPIHI_FLT) {
+    opihi_flt *X = vecx[0].elements.Flt;
+    for (i = 0; i < vecx[0].Nelements-1; i++, X++, Yi++, Yf++) {
+      if ((*X >= start) && (*X <= end)) {
+	dvalue = (isFloat) ? *Yf : *Yi;
+	value += *Y * (X[1] - X[0]);
+	range += (X[1] - X[0]);
+      }
+    }      
+  } else {
+    opihi_int *X = vecx[0].elements.Int;
+    for (i = 0; i < vecx[0].Nelements-1; i++, X++, Yi++, Yf++) {
+      if ((*X >= start) && (*X <= end)) {
+	dvalue = (isFloat) ? *Yf : *Yi;
+	value += *Y * (X[1] - X[0]);
+	range += (X[1] - X[0]);
+      }
+    }      
+  }
 
   set_variable ("sum", value); 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/sort.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/sort.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/sort.c	(revision 20859)
@@ -31,4 +31,5 @@
 }
 
+// XXX add an option to NOT sort, but return an index instead?
 int sort_vectors (int argc, char **argv) {
   
Index: /branches/eam_branch_20081124/Ohana/src/opihi/doc/VectorTypes.txt
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/doc/VectorTypes.txt	(revision 20859)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/doc/VectorTypes.txt	(revision 20859)
@@ -0,0 +1,88 @@
+starcontour      : outputs are FLT
+rawstars         : inputs may be FLT or INT; outputs are FLT
+fitcontour       : input must be FLT
+findpeaks        : outputs are FLT
+skycat           : internal vectors only
+simage           : internal vectors only
+showtile         : internal vectors only
+procks           : internal vectors only
+mmextract        : output vector types are determined by selected db field
+mextract         : output vector types are determined by selected db field
+lightcurve       : outputs are FLT
+lcurve           : outputs are FLT
+imstats          : internal vectors only
+imrough          : outputs are FLT
+imextract        : outputs are FLT
+imdense          : internal vectors only
+imdata           : outputs are FLT
+imbox            : internal vectors only
+images           : internal vectors only
+gstar            : outputs are FLT
+fitcolors        : outputs are FLT
+detrend          : outputs are FLT
+compare          : function's outputs are FLT
+cmpread          : outputs are FLT
+cmd              : outputs are FLT
+ccd              : outputs are FLT
+calmextract      : outputs are FLT
+avextract        : output vector types are determined by selected db field
+zplot            : inputs may be FLT or INT
+write_vectors    : inputs may be FLT or INT
+vzload           : inputs may be FLT or INT
+vstat            : inputs may be FLT or INT
+vsmooth          : inputs may be FLT or INT; outputs are FLT
+vroll            : inputs may be FLT or INT
+vpop             : inputs may be FLT or INT
+vmaxwell         : input must be FLT; outputs are FLT
+vload            : inputs may be FLT or INT
+vgrid            : input must be FLT
+vgauss           : input must be FLT; outputs are FLT
+vclip            : inputs may be FLT or INT
+vbin             : inputs may be FLT or INT; outputs are FLT
+uniq             : inputs may be FLT or INT; outputs are set based on input
+ungridify        : outputs are FLT
+svd              : outputs are FLT
+subset           : inputs may be FLT or INT; outputs are set based on input
+sort             : inputs may be FLT or INT
+select           : inputs may be FLT or INT
+read_vectors     : outputs are FLT (someday add a format option to the read statement?)
+periodogram      : input must be FLT; outputs are FLT
+peak             : inputs may be FLT or INT
+mset             : inputs may be FLT or INT
+mget             : outputs are FLT
+medacc           : input must be FLT; outputs are FLT
+lookup           : input must be FLT; outputs are FLT
+interpolate      : input must be FLT; outputs are FLT
+integrate        : inputs may be FLT or INT
+imhist           : outputs are FLT
+imcut            : outputs are FLT
+histogram        : inputs may be FLT or INT, outputs are INT
+gridify          : input must be FLT
+grid             : internal vectors only
+gaussj           : inputs may be FLT or INT; outputs are FLT
+gaussdeviate     : outputs are FLT
+gaussintegral    : outputs are FLT
+fit              : input must be FLT
+fit2d            : input must be FLT
+fft1d            : input must be FLT
+dimenup          : inputs may be FLT or INT
+dimendown        : outputs are FLT
+dbselect         : output vector types are determined by selected db field
+cut              : outputs are FLT
+cumulative       : inputs may be FLT or INT; outputs are FLT
+create           : output vector type defaults to FLT, but may be optionally set to INT with the -int flag
+contour          : outputs are FLT
+concat           : inputs may be FLT or INT; outputs are set based on input
+applyfit         : inputs may be FLT or INT; outputs are FLT
+applyfit2d       : inputs may be FLT or INT; outputs are FLT
+accum            : input must be FLT; outputs are FLT
+spec             : outputs are FLT
+profile          : outputs are FLT
+precess          : inputs may be FLT or INT; outputs are FLT
+multifit         : input must be FLT; outputs are FLT
+czplot           : input must be FLT
+csystem          : inputs may be FLT or INT
+cplot            : input must be FLT
+coords           : input must be FLT
+cgrid            : internal vectors only
+biassub          : outputs are FLT
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/calmextract.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/calmextract.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/calmextract.c	(revision 20859)
@@ -38,8 +38,7 @@
   if (!TestPhotSelections (&code[0], &mode[0], MEAS_ZERO)) goto escape;
 
+  gprint (GP_ERR, "warning: this function may be deprecated in the future -- use avextract for better control\n");
+
   /* returned vectors are dmag, mag, color, time, airmass, ra, dec, x, y, exptime */
-  N = 0;
-  Nstar = 0;
-  NSTAR = 100;
   ALLOCATE (vec, Vector *, NVEC);
   if ((vec[Nd ] = SelectVector ("cal:dmag",     ANYVECTOR, TRUE)) == NULL) goto escape;
@@ -60,7 +59,10 @@
   if ((vec[Nd1] = SelectVector ("cal:dm1",      ANYVECTOR, TRUE)) == NULL) goto escape;
   if ((vec[Nd2] = SelectVector ("cal:dm2",      ANYVECTOR, TRUE)) == NULL) goto escape;
+
+  N = 0;
+  Nstar = 0;
+  NSTAR = 100;
   for (k = 0; k < NVEC; k++) {
-    REALLOCATE (vec[k][0].elements.Flt, opihi_flt, NSTAR);
-    vec[k][0].Nelements = 0;
+    ResetVector (vec[k], OPIHI_FLT, NSTAR);
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/ccd.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/ccd.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/ccd.c	(revision 20859)
@@ -51,8 +51,13 @@
 
   /* init vectors to save data */
-  Npts = 0;
-  NPTS = 1;
   if ((xvec = SelectVector ("xv", ANYVECTOR, TRUE)) == NULL) goto escape;
   if ((yvec = SelectVector ("yv", ANYVECTOR, TRUE)) == NULL) goto escape;
+
+  gprint (GP_ERR, "warning: this function may be deprecated in the future -- use avextract for better control\n");
+
+  Npts = 0;
+  NPTS = 100;
+  ResetVector (xvec, OPIHI_FLT, NPTS);
+  ResetVector (yvec, OPIHI_FLT, NPTS);
 
   // grab data from all selected sky regions
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmd.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmd.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmd.c	(revision 20859)
@@ -49,8 +49,13 @@
 
   /* init vectors to save data */
-  Npts = 0;
-  NPTS = 1;
   if ((xvec = SelectVector ("xv", ANYVECTOR, TRUE)) == NULL) goto escape;
   if ((yvec = SelectVector ("yv", ANYVECTOR, TRUE)) == NULL) goto escape;
+
+  gprint (GP_ERR, "warning: this function may be deprecated in the future -- use avextract for better control\n");
+
+  Npts = 0;
+  NPTS = 100;
+  ResetVector (xvec, OPIHI_FLT, NPTS);
+  ResetVector (yvec, OPIHI_FLT, NPTS);
 
   // grab data from all selected sky regions
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmpread.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmpread.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmpread.c	(revision 20859)
@@ -89,6 +89,5 @@
   fclose (f);
 
-  REALLOCATE (vec[0].elements.Flt, opihi_flt, Nstars);
-  vec[0].Nelements = Nstars;
+  ResetVector (vec, OPIHI_FLT, Nstars);
   bzero (vec[0].elements.Flt, Nstars*sizeof(opihi_flt));
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/compare.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/compare.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/compare.c	(revision 20859)
@@ -10,10 +10,10 @@
   Nmatch = 0;
   NMATCH = D_NMATCH;
-  REALLOCATE (rvec[0].elements.Flt, opihi_flt, NMATCH);
-  REALLOCATE (dvec[0].elements.Flt, opihi_flt, NMATCH);
-  REALLOCATE (mvec[0].elements.Flt, opihi_flt, NMATCH);
-  REALLOCATE (drvec[0].elements.Flt, opihi_flt, NMATCH);
-  REALLOCATE (ddvec[0].elements.Flt, opihi_flt, NMATCH);
-  REALLOCATE (dmvec[0].elements.Flt, opihi_flt, NMATCH);
+  ResetVector ( rvec, OPIHI_FLT, NMATCH);
+  ResetVector ( dvec, OPIHI_FLT, NMATCH);
+  ResetVector ( mvec, OPIHI_FLT, NMATCH);
+  ResetVector (drvec, OPIHI_FLT, NMATCH);
+  ResetVector (ddvec, OPIHI_FLT, NMATCH);
+  ResetVector (dmvec, OPIHI_FLT, NMATCH);
 
   for (i = j = 0; (i < catlog1[0].Naverage) && (j < catlog2[0].Naverage);) {
@@ -59,18 +59,10 @@
   }
 
-  REALLOCATE ( rvec[0].elements.Flt, opihi_flt, Nmatch);
-  REALLOCATE ( dvec[0].elements.Flt, opihi_flt, Nmatch);
-  REALLOCATE ( mvec[0].elements.Flt, opihi_flt, Nmatch);
-  REALLOCATE (drvec[0].elements.Flt, opihi_flt, Nmatch);
-  REALLOCATE (ddvec[0].elements.Flt, opihi_flt, Nmatch);
-  REALLOCATE (dmvec[0].elements.Flt, opihi_flt, Nmatch);
-  
-  rvec[0].Nelements = Nmatch;
-  dvec[0].Nelements = Nmatch;
-  mvec[0].Nelements = Nmatch;
-  drvec[0].Nelements = Nmatch;
-  ddvec[0].Nelements = Nmatch;
-  dmvec[0].Nelements = Nmatch;
-
+  ResetVector ( rvec, OPIHI_FLT, Nmatch);
+  ResetVector ( dvec, OPIHI_FLT, Nmatch);
+  ResetVector ( mvec, OPIHI_FLT, Nmatch);
+  ResetVector (drvec, OPIHI_FLT, Nmatch);
+  ResetVector (ddvec, OPIHI_FLT, Nmatch);
+  ResetVector (dmvec, OPIHI_FLT, Nmatch);
 }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/detrend.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/detrend.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/detrend.c	(revision 20859)
@@ -151,5 +151,5 @@
   N = 0;
   NVALUE = 1000;
-  REALLOCATE (vec[0].elements.Flt, opihi_flt, NVALUE);
+  ResetVector (vec, OPIHI_FLT, NVALUE);
   value = vec[0].elements.Flt;
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/gstar.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/gstar.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/gstar.c	(revision 20859)
@@ -136,8 +136,8 @@
     N = 0;
     NPTS = 1000;
-    ALLOCATE (vec1[0].elements.Flt, opihi_flt, NPTS);
-    ALLOCATE (vec2[0].elements.Flt, opihi_flt, NPTS);
-    ALLOCATE (vec3[0].elements.Flt, opihi_flt, NPTS);
-    ALLOCATE (vec4[0].elements.Flt, opihi_flt, NPTS);
+    ResetVector (vec1, OPIHI_FLT, NPTS);
+    ResetVector (vec2, OPIHI_FLT, NPTS);
+    ResetVector (vec3, OPIHI_FLT, NPTS);
+    ResetVector (vec4, OPIHI_FLT, NPTS);
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/images.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/images.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/images.c	(revision 20859)
@@ -113,6 +113,7 @@
 
   npts = NPTS = 200;
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
+  ResetVector (Xvec, OPIHI_FLT, NPTS);
+  ResetVector (Yvec, OPIHI_FLT, NPTS);
+
   ALLOCATE (plist, int, NPTS);
   n = N = 0;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imbox.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imbox.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imbox.c	(revision 20859)
@@ -36,6 +36,6 @@
   
   /* project this image to screen display coords */
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, 8);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, 8);
+  ResetVector (Xvec, OPIHI_FLT, 8);
+  ResetVector (Yvec, OPIHI_FLT, 8);
 
   while (gfits_fread_header (f, &header)) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdata.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdata.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdata.c	(revision 20859)
@@ -49,4 +49,5 @@
 
   gprint (GP_ERR, "function is poorly defined; disabled and may be removed\n");
+  gprint (GP_ERR, "this function extracts measure data corresponding to a given image?\n");
   return (FALSE);
 
@@ -124,7 +125,7 @@
   
   /* create output vector */
+  N = 0;
   NPTS = 1000;
-  REALLOCATE (vec[0].elements.Flt, opihi_flt, NPTS);
-  vec[0].Nelements = N = 0;
+  ResetVector (vec, OPIHI_FLT, NPTS);
 
   // prepare to handle interrupt signals
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdense.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdense.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdense.c	(revision 20859)
@@ -30,8 +30,9 @@
   srand48(B);
 
+  N = 0;
   NPTS = 200;
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
-  N = 0;
+  ResetVector (Xvec, OPIHI_FLT, Npts);
+  ResetVector (Yvec, OPIHI_FLT, Npts);
+
   for (i = 0; i < Nimage; i++) {
     /* choose a position for point within image box */
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imextract.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imextract.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imextract.c	(revision 20859)
@@ -165,6 +165,5 @@
 
   /* create storage vector */
-  REALLOCATE (vec[0].elements.Flt, opihi_flt, Nimage);
-  vec[0].Nelements = Nimage;
+  ResetVector (vec, OPIHI_FLT, Nimage);
   
   N = 0;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imrough.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imrough.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imrough.c	(revision 20859)
@@ -18,4 +18,6 @@
   Vector *vec;
 
+  // XXX this function is only valid for the Elixir db system, not the IPP db system
+  // this function should exit gracefully if the REGISTRATION_DATABASE is missing
   VarConfig ("REGISTRATION_DATABASE", "%s", DataBase);
 
@@ -132,5 +134,5 @@
   N = 0;
   NVEC = 1000;
-  REALLOCATE (vec[0].elements.Flt, opihi_flt, NVEC);
+  ResetVector (vec, OPIHI_FLT, NVEC);
   Vec = vec[0].elements.Flt;
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imstats.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imstats.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imstats.c	(revision 20859)
@@ -33,8 +33,7 @@
 
   /* assign vector values */
-  Xvec.Nelements = Nimage;
-  Yvec.Nelements = Nimage;
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
+  ResetVector (Xvec, OPIHI_FLT, Nimage);
+  ResetVector (Yvec, OPIHI_FLT, Nimage);
+
   gprint (GP_LOG, "seq  ra (J2000) dec    time (s)   Nstars\n");
   for (i = 0; i < Nimage; i++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lcurve.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lcurve.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lcurve.c	(revision 20859)
@@ -102,10 +102,12 @@
      catalog.average[N1[i]].R = RA[i] */
 
+  N = 0;
   NPTS = 100;
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
+  ResetVector (Xvec, OPIHI_FLT, NPTS);
+  ResetVector (Yvec, OPIHI_FLT, NPTS);
   dYvec.elements.Flt = NULL;
-  if (ErrorBars) { ALLOCATE (dYvec.elements.Flt, opihi_flt, NPTS); }
-  N = 0;
+  if (ErrorBars) {   
+    ResetVector (Yvec, OPIHI_FLT, NPTS);
+  }
 
   GetTimeFormat (&TimeReference, &TimeFormat);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lightcurve.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lightcurve.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lightcurve.c	(revision 20859)
@@ -87,7 +87,7 @@
   N = 0;
   NPTS = 100;
-  REALLOCATE (tvec[0].elements.Flt, opihi_flt, NPTS);
-  REALLOCATE (mvec[0].elements.Flt, opihi_flt, NPTS);
-  REALLOCATE (dmvec[0].elements.Flt, opihi_flt, NPTS);
+  ResetVector (tvec, OPIHI_FLT, Npts);
+  ResetVector (mvec, OPIHI_FLT, Npts);
+  ResetVector (dmvec, OPIHI_FLT, Npts);
   
   GetTimeFormat (&TimeReference, &TimeFormat);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/procks.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/procks.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/procks.c	(revision 20859)
@@ -95,7 +95,6 @@
 
   /* data has been loaded, get ready to plot it */
-  Yvec.Nelements = Xvec.Nelements = 3*Nrocks;
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
+  ResetVector (Xvec, OPIHI_FLT, 3*Nrocks);
+  ResetVector (Yvec, OPIHI_FLT, 3*Nrocks);
   
   /* project stars to screen display coords */
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/showtile.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/showtile.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/showtile.c	(revision 20859)
@@ -22,6 +22,6 @@
   N = 0;
   NPTS = 200;
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
+  ResetVector (Xvec, OPIHI_FLT, NPTS);
+  ResetVector (Yvec, OPIHI_FLT, NPTS);
 
   /* starting position */
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/simage.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/simage.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/simage.c	(revision 20859)
@@ -92,10 +92,7 @@
 
   /* set up storage buffers */
-  Xvec.Nelements = Nstars;
-  Yvec.Nelements = Nstars;
-  Zvec.Nelements = Nstars;
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
-  ALLOCATE (Zvec.elements.Flt, opihi_flt, Zvec.Nelements);
+  ResetVector (Xvec, OPIHI_FLT, Ntars);
+  ResetVector (Yvec, OPIHI_FLT, Ntars);
+  ResetVector (Zvec, OPIHI_FLT, Ntars);
   ALLOCATE (buffer, char, (BLOCK*BYTES_STAR));
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/skycat.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/skycat.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/skycat.c	(revision 20859)
@@ -53,8 +53,8 @@
   Rmid = 0.5*(Rmin + Rmax);
 
+  Npts = 0;
   NPTS = 200;
-  ALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
-  ALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
-  Npts = 0;
+  ResetVector (&Xvec, OPIHI_FLT, NPTS);
+  ResetVector (&Yvec, OPIHI_FLT, NPTS);
    
   regions = skylist[0].regions;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/graphtools.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/graphtools.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/graphtools.c	(revision 20859)
@@ -2,4 +2,5 @@
 
 // XXX need to select the active vector for the range analysis
+// this function accepts either FLT or INT vectors
 void SetLimits (Vector *xvec, Vector *yvec, Graphdata *graphmode) {
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/VectorOps.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/VectorOps.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/VectorOps.c	(revision 20859)
@@ -187,4 +187,36 @@
 }
 
+// recast the vector to the specified type
+int CastVector (Vector *vec, char type) {
+
+  // the trivial case
+  if (vec[0].type == type) return TRUE;
+
+  if (type == OPIHI_FLT) {
+    opihi_flt *temp;
+    ALLOCATE (temp, opihi_flt, vec[0].Nelements);
+    opihi_flt *vo = temp;
+    opihi_int *vi = vec[0].elements.Int;
+    for (i = 0; i < vec[0].Nelements; i++, vo++, vi++) {
+      *vo = *vi;
+    }
+    free (vec[0].elements.Int);
+    vec[0].elements.Flt = vo;
+    vec[0].type = OPIHI_FLT;
+  } else {
+    opihi_int *temp;
+    ALLOCATE (temp, opihi_int, vec[0].Nelements);
+    opihi_int *vo = temp;
+    opihi_flt *vi = vec[0].elements.Flt;
+    for (i = 0; i < vec[0].Nelements; i++, vo++, vi++) {
+      *vo = *vi;
+    }
+    free (vec[0].elements.Flt);
+    vec[0].elements.Int = vo;
+    vec[0].type = OPIHI_INT;
+  }
+  return TRUE;
+}
+
 /* move data from in to out - use old memory space */
 int MoveNamedVector (char *out, char *in) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/mana/fitcontour.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/mana/fitcontour.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/mana/fitcontour.c	(revision 20859)
@@ -19,6 +19,6 @@
 
   // require these to be float vectors
-  if (vecx->type != OPIHI_FLT) return (FALSE);
-  if (vecy->type != OPIHI_FLT) return (FALSE);
+  REQUIRE_VECTOR_FLT (vecx, FALSE);
+  REQUIRE_VECTOR_FLT (vecy, FALSE);
 
   ALLOCATE (B, double *, NTERM);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/mana/rawstars.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/mana/rawstars.c	(revision 20858)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/mana/rawstars.c	(revision 20859)
@@ -66,6 +66,6 @@
   v = (float *) buff[0].matrix.buffer;
   for (i = 0; i < Np; i++) {
-    x = xp[0].elements.Flt[i];
-    y = yp[0].elements.Flt[i];
+    x = (xp[0].type == OPIHI_FLT) ? xp[0].elements.Flt[i] : xp[0].elements.Int[i];
+    y = (yp[0].type == OPIHI_FLT) ? yp[0].elements.Flt[i] : yp[0].elements.Int[i];
     if (x < 0) continue;
     if (x >= Nx) continue;
