Index: trunk/Ohana/src/opihi/cmd.data/integrate.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/integrate.c	(revision 7917)
+++ trunk/Ohana/src/opihi/cmd.data/integrate.c	(revision 20936)
@@ -3,7 +3,8 @@
 int integrate (int argc, char **argv) {
   
-  int i, N, VERBOSE;
-  float *X, *Y;
-  double start, end, value, range;
+  int i, N, VERBOSE, isFloat;
+  opihi_flt *Yf;
+  opihi_int *Yi;
+  double start, end, value, range, dvalue;
   Vector *vecx, *vecy;
 
@@ -25,15 +26,30 @@
   end   = atof (argv[4]);
 
-  X = vecx[0].elements;
-  Y = vecy[0].elements;
+  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 += dvalue * (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 += dvalue * (X[1] - X[0]);
+	range += (X[1] - X[0]);
+      }
+    }      
+  }
 
   set_variable ("sum", value); 
