Index: /branches/eam_branches/ipp-20140904/Ohana/src/libohana/src/vstats.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/libohana/src/vstats.c	(revision 37443)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/libohana/src/vstats.c	(revision 37444)
@@ -60,9 +60,11 @@
   int N20 = MAX (  0, 0.2*N);
 
-  if (weight) {
+  if (weight && dvalue) {
     dsortthree (value, dvalue, weight, N);
   } else {
     if (dvalue) {
       dsortpair (value, dvalue, N);
+    } else if (weight) {
+      dsortpair (value, weight, N);
     } else {
       dsort (value, N);
@@ -112,4 +114,5 @@
   // I'm actually just using chisq to get the correct sorting order
   if ((stats->statmode == VSTATS_CHI_INNER_MEAN) || (stats->statmode == VSTATS_CHI_INNER_WTMEAN)) {
+    if (!dvalue) myAbort ("invalid combination: Chisq-based mean, no dvalue provided");
     ALLOCATE (chi, double, N);
     for (i = 0; i < N; i++) {
@@ -128,4 +131,6 @@
   WeightedMean |= (stats->statmode == VSTATS_INNER_WTMEAN);
   WeightedMean |= (stats->statmode == VSTATS_CHI_INNER_WTMEAN);
+
+  if (WeightedMean && !dvalue) myAbort ("invalid combination: weighted mean, no dvalue provided");
 
   /* calculate stats based on the desired weighting scheme */
@@ -149,10 +154,10 @@
 	M  += value[i] * weight[i];
 	W  +=            weight[i];
-	dM += SQ (weight[i] * dvalue[i]);
+	dM += dvalue ? SQ (weight[i] * dvalue[i]) : 0.0;
 	R  += weight[i];
 	Nm += 1.0;  
       }	
       Mo  = M / W;
-      dMo = sqrt (dM) / R;
+      dMo = dvalue ? sqrt (dM) / R : NAN;
     }
   } else {
@@ -171,9 +176,9 @@
       for (i = ks; i < ke; i++) {
 	M   += value[i];
-	dM  += SQ (dvalue[i]);
+	dM  += dvalue ? SQ (dvalue[i]) : 0.0;
 	Nm  += 1.0;  
       }	
       Mo = M / Nm;
-      dMo = sqrt (dM) / Nm;
+      dMo = dvalue ? sqrt (dM) / Nm : NAN;
     }
   }
@@ -244,9 +249,11 @@
   int N20 = MAX (  0, 0.2*N);
 
-  if (weight) {
+  if (weight && dvalue) {
     fsortthree (value, dvalue, weight, N);
   } else {
     if (dvalue) {
       fsortpair (value, dvalue, N);
+    } else if (weight) {
+      fsortpair (value, weight, N);
     } else {
       fsort (value, N);
@@ -296,4 +303,5 @@
   // I'm actually just using chisq to get the correct sorting order
   if ((stats->statmode == VSTATS_CHI_INNER_MEAN) || (stats->statmode == VSTATS_CHI_INNER_WTMEAN)) {
+    if (!dvalue) myAbort ("invalid combination: Chisq-based mean, no dvalue provided");
     ALLOCATE (chi, float, N);
     for (i = 0; i < N; i++) {
@@ -312,4 +320,6 @@
   WeightedMean |= (stats->statmode == VSTATS_INNER_WTMEAN);
   WeightedMean |= (stats->statmode == VSTATS_CHI_INNER_WTMEAN);
+
+  if (WeightedMean && !dvalue) myAbort ("invalid combination: weighted mean, no dvalue provided");
 
   /* calculate stats based on the desired weighting scheme */
@@ -333,10 +343,10 @@
 	M  += value[i] * weight[i];
 	W  +=            weight[i];
-	dM += SQ (weight[i] * dvalue[i]);
+	dM += dvalue ? SQ (weight[i] * dvalue[i]) : 0.0;
 	R  += weight[i];
 	Nm += 1.0;  
       }	
       Mo  = M / W;
-      dMo = sqrt (dM) / R;
+      dMo = dvalue ? sqrt (dM) / R : NAN;
     }
   } else {
@@ -355,9 +365,9 @@
       for (i = ks; i < ke; i++) {
 	M   += value[i];
-	dM  += SQ (dvalue[i]);
+	dM  += dvalue ? SQ (dvalue[i]) : 0.0;
 	Nm  += 1.0;  
       }	
       Mo = M / Nm;
-      dMo = sqrt (dM) / Nm;
+      dMo = dvalue ? sqrt (dM) / Nm : NAN;
     }
   }
@@ -368,9 +378,9 @@
   for (i = ks; i < ke; i++) {
     M  = SQ (value[i] - Mo);
-    dM = SQ (dvalue[i]);
+    dM = dvalue ? SQ (dvalue[i]) : 1.0;
     X2 += M / dM;
     dS += M;
   }
-  X2 = X2 / (Nm - 1);
+  X2 = dvalue ? X2 / (Nm - 1) : NAN;
   dS = sqrt (dS / (Nm - 1));
 
