[cig-commits] r18188 - mc/1D/hc/trunk

becker at geodynamics.org becker at geodynamics.org
Wed Apr 6 13:03:21 PDT 2011


Author: becker
Date: 2011-04-06 13:03:21 -0700 (Wed, 06 Apr 2011)
New Revision: 18188

Modified:
   mc/1D/hc/trunk/ggrd_grdtrack_util.c
Log:
Added support for NaNs in grid files when computing simple statistics. 



Modified: mc/1D/hc/trunk/ggrd_grdtrack_util.c
===================================================================
--- mc/1D/hc/trunk/ggrd_grdtrack_util.c	2011-04-06 19:45:34 UTC (rev 18187)
+++ mc/1D/hc/trunk/ggrd_grdtrack_util.c	2011-04-06 20:03:21 UTC (rev 18188)
@@ -52,7 +52,8 @@
 {
   struct ggrd_gt g[1];
   char cdummy='c';
-  ggrd_grdtrack_init_general(FALSE,filename,&cdummy,"",g,2,FALSE,FALSE);
+  ggrd_grdtrack_init_general(FALSE,filename,&cdummy,
+			     "",g,2,FALSE,FALSE);
   fprintf(stderr,"ggrd_grdinfo: %s W: %g E: %g S: %g N: %g\n",
 	  filename,g->grd->x_min,g->grd->x_max,g->grd->y_min,g->grd->y_max);
   
@@ -1315,33 +1316,39 @@
 			       ggrd_boolean hypoth, ggrd_boolean weighted,GGRD_CPREC *weight)
 {
   GGRD_CPREC sum1=0.0,sum2=0.0,tmp,ws;
-  int i;
+  int i,nuse;
   if(n <= 1){
     fprintf(stderr,"ggrd_calc_mean_and_stddev: error: n: %i\n",n);
     exit(-1);
   }
   ws=0.0;
   if(hypoth){// sqrt(x^2+y+2)
-    for(i=0;i<n;i++){
-      if(weighted){
-	tmp = hypot(x[i],y[i]) * weight[i];
-	ws += weight[i];
-      }else{
-	tmp = hypot(x[i],y[i]);
-	ws += 1.0;
+    for(i=nuse=0;i < n;i++){
+      if(finite(x[i])&&finite(y[i])){
+	if(weighted){
+	  tmp = hypot(x[i],y[i]) * weight[i];
+	  ws += weight[i];
+	}else{
+	  tmp = hypot(x[i],y[i]);
+	  ws += 1.0;
+	}
+	sum1 += tmp;sum2 += tmp * tmp;
+	nuse++;
       }
-      sum1 += tmp;sum2 += tmp * tmp;
     }
   }else{
-    for(i=0;i<n;i++){
-      if(weighted){
-	tmp  = x[i] * weight[i];
-	ws += weight[i];
-      }else{
-	tmp = x[i];
-	ws += 1.0;
+    for(i=nuse=0;i < n;i++){
+      if(finite(x[i])){
+	if(weighted){
+	  tmp  = x[i] * weight[i];
+	  ws += weight[i];
+	}else{
+	  tmp = x[i];
+	  ws += 1.0;
+	}
+	sum1 += tmp;sum2 += tmp*tmp;
+	nuse++;
       }
-      sum1 += tmp;sum2 += tmp*tmp;
     }
   }
   // standard deviation
@@ -1459,20 +1466,28 @@
 /* compute simple RMS */
 float ggrd_gt_rms(float *x,int n)
 {
-  int i;
+  int i,nuse;
   float rms = 0.0;
-  for(i=0;i<n;i++)
-    rms += x[i]*x[i];
-  return sqrt(rms/(float)n);
+  for(i=nuse=0;i<n;i++){
+    if(finite(x[i])){
+      rms += x[i]*x[i];
+      nuse++;
+    }
+  }
+  return sqrt(rms/(float)nuse);
 }
 /* compute simple mean */
 float ggrd_gt_mean(float *x,int n)
 {
-  int i;
+  int i,nuse;
   float mean = 0.0;
-  for(i=0;i<n;i++)
-    mean += x[i];
-  return mean/(float)n;
+  for(i=nuse=0;i<n;i++){
+    if(finite(x[i])){
+      mean += x[i];
+      nuse++;
+    }
+  }
+  return mean/(float)nuse;
 }
 #ifdef USE_GMT3
 /* 



More information about the CIG-COMMITS mailing list