فهرست منبع

arraystatslib: rename fns to use prefix (AS)
doxygen cosmetics
arraystatslib: add AS_option_to_algorithm()
(merge r63909-11 from trunk)


git-svn-id: https://svn.osgeo.org/grass/grass/branches/releasebranch_7_0@63912 15284696-431f-4ddb-bdfa-cd5b030d7da7

Martin Landa 10 سال پیش
والد
کامیت
2325d2ea1e
7فایلهای تغییر یافته به همراه89 افزوده شده و 59 حذف شده
  1. 5 5
      display/d.thematic.area/main.c
  2. 6 0
      include/arraystats.h
  3. 12 10
      include/defs/arraystats.h
  4. 10 10
      lib/arraystats/arraystatslib.dox
  5. 2 2
      lib/arraystats/basic.c
  6. 48 26
      lib/arraystats/class.c
  7. 6 6
      vector/v.class/main.c

+ 5 - 5
display/d.thematic.area/main.c

@@ -325,9 +325,9 @@ int main(int argc, char **argv)
 
 	    /* Get classbreaks for given algorithm and number of classbreaks.
 	     * class_info takes any info coming from the classification algorithms */
-	    class_info =
-		class_apply_algorithm(algo_opt->answer, data, nrec, &nbreaks,
-				      breakpoints);
+	    class_info = AS_class_apply_algorithm(AS_option_to_algorithm(algo_opt),
+                                                  data, nrec, &nbreaks,
+                                                  breakpoints);
 
 	}
 	else {
@@ -414,10 +414,10 @@ int main(int argc, char **argv)
     frequencies = (int *)G_malloc((nbreaks + 1) * sizeof(int));
     for (i = 0; i < nbreaks + 1; i++)
 	frequencies[i] = 0.0;
-    class_frequencies(data, nrec, nbreaks, breakpoints, frequencies);
+    AS_class_frequencies(data, nrec, nbreaks, breakpoints, frequencies);
 
     /*Get basic statistics about the data */
-    basic_stats(data, nrec, &stats);
+    AS_basic_stats(data, nrec, &stats);
 
     if (legend_flag->answer) {
 

+ 6 - 0
include/arraystats.h

@@ -22,6 +22,12 @@ struct GASTATS
     double stdev;
 };
 
+#define CLASS_INTERVAL 1
+#define CLASS_STDEV    2
+#define CLASS_QUANT    3
+#define CLASS_EQUIPROB 4
+#define CLASS_DISCONT  5
+      
 #include <grass/defs/arraystats.h>
 
 #endif

+ 12 - 10
include/defs/arraystats.h

@@ -1,16 +1,18 @@
 #ifndef GRASS_ARRAYSTATSDEFS_H
 #define GRASS_ARRAYSTATSDEFS_H
 
-double class_apply_algorithm(char *, double *, int, int *, double *);
-int class_interval(double *, int, int, double *);
-int class_quant(double *, int, int, double *);
-double class_discont(double *, int, int, double *);
-double class_stdev(double *, int, int, double *);
-int class_equiprob(double *, int, int *, double *);
+/* basic.c */
+void AS_eqdrt(double[], double[], int, int, double *);
+void AS_basic_stats(double *, int, struct GASTATS *);
 
-int class_frequencies(double *, int, int, double *, int *);
-
-void eqdrt(double[], double[], int, int, double *);
-void basic_stats(double *, int, struct GASTATS *);
+/* class.c */
+int AS_option_to_algorithm(const struct Option *);
+double AS_class_apply_algorithm(int, double *, int, int *, double *);
+int AS_class_interval(double *, int, int, double *);
+int AS_class_quant(double *, int, int, double *);
+double AS_class_discont(double *, int, int, double *);
+double AS_class_stdev(double *, int, int, double *);
+int AS_class_equiprob(double *, int, int *, double *);
+int AS_class_frequencies(double *, int, int, double *, int *);
 
 #endif

+ 10 - 10
lib/arraystats/arraystatslib.dox

@@ -1,4 +1,4 @@
-/*! \page arraystatslib GRASS array statistics Library
+/*! \page arraystatslib GRASS Array Statistics Library
 
 by GRASS Development Team (http://grass.osgeo.org)
 
@@ -6,15 +6,15 @@ by GRASS Development Team (http://grass.osgeo.org)
 
 \section listOfFunctios List of functions
 
-- class_apply_algorithm()
-- class_interval()
-- class_quant()
-- class_discont()
-- class_stdev()
-- class_equiprob()
-- class_frequencies()
-- eqdrt()
-- basic_stats()
+- AS_class_apply_algorithm()
+- AS_class_interval()
+- AS_class_quant()
+- AS_class_discont()
+- AS_class_stdev()
+- AS_class_equiprob()
+- AS_class_frequencies()
+- AS_eqdrt()
+- AS_basic_stats()
 
 */
 

+ 2 - 2
lib/arraystats/basic.c

@@ -3,7 +3,7 @@
 
 
 /*provides basic univar stats */
-void basic_stats(double *data, int count, struct GASTATS *stats)
+void AS_basic_stats(double *data, int count, struct GASTATS *stats)
 {
     int i = 1;
     double sum = 0, sumsq = 0, sumabs = 0;
@@ -37,7 +37,7 @@ void basic_stats(double *data, int count, struct GASTATS *stats)
 }
 
 
-void eqdrt(double vectx[], double vecty[], int i1, int i2, double *vabc)
+void AS_eqdrt(double vectx[], double vecty[], int i1, int i2, double *vabc)
 {
     double bn = 0, bd = 0, x1 = 0, y1 = 0;
 

+ 48 - 26
lib/arraystats/class.c

@@ -3,32 +3,55 @@
 #include <grass/glocale.h>
 #include <grass/arraystats.h>
 
-double class_apply_algorithm(char *algo, double *data, int nrec, int *nbreaks,
-			     double *classbreaks)
+int AS_option_to_algorithm(const struct Option * option)
+{
+    if (G_strcasecmp(option->answer, "int") == 0)
+        return CLASS_INTERVAL;
+    if (G_strcasecmp(option->answer, "std") == 0)
+        return CLASS_STDEV;
+    if (G_strcasecmp(option->answer, "qua") == 0)
+        return CLASS_QUANT;
+    if (G_strcasecmp(option->answer, "equ") == 0)
+        return CLASS_EQUIPROB;
+    if (G_strcasecmp(option->answer, "dis") == 0)
+        return CLASS_DISCONT;
+
+    G_fatal_error(_("Unknown algorithm '%s'"), option->answer);
+}
+    
+double AS_class_apply_algorithm(int algo, double *data, int nrec, int *nbreaks,
+                                double *classbreaks)
 {
     double finfo = 0.0;
 
-    if (G_strcasecmp(algo, "int") == 0)
-	finfo = class_interval(data, nrec, *nbreaks, classbreaks);
-    else if (G_strcasecmp(algo, "std") == 0)
-	finfo = class_stdev(data, nrec, *nbreaks, classbreaks);
-    else if (G_strcasecmp(algo, "qua") == 0)
-	finfo = class_quant(data, nrec, *nbreaks, classbreaks);
-    else if (G_strcasecmp(algo, "equ") == 0)
-	finfo = class_equiprob(data, nrec, nbreaks, classbreaks);
-    else if (G_strcasecmp(algo, "dis") == 0)
-	    /*	finfo = class_discont(data, nrec, *nbreaks, classbreaks); disabled because of bugs */
+    switch (algo) {
+    case CLASS_INTERVAL:
+        finfo = AS_class_interval(data, nrec, *nbreaks, classbreaks);
+        break;
+    case CLASS_STDEV:
+        finfo = AS_class_stdev(data, nrec, *nbreaks, classbreaks);
+        break;
+    case CLASS_QUANT:
+        finfo = AS_class_quant(data, nrec, *nbreaks, classbreaks);
+        break;
+    case CLASS_EQUIPROB:
+        finfo = AS_class_equiprob(data, nrec, nbreaks, classbreaks);
+        break;
+    case CLASS_DISCONT:
+        /*	finfo = class_discont(data, nrec, *nbreaks, classbreaks); disabled because of bugs */
         G_fatal_error(_("Discont algorithm currently not available because of bugs"));
-    else
-	G_fatal_error(_("%s: Unknown algorithm"), algo);
+        break;
+    default:
+        break;
+    }
 
     if (finfo == 0)
-	G_fatal_error(_("%s: Error in classification algorithm"), algo);
+	G_fatal_error(_("Classification algorithm failed"));
 
     return finfo;
 }
 
-int class_interval(double *data, int count, int nbreaks, double *classbreaks)
+int AS_class_interval(double *data, int count, int nbreaks, double *classbreaks)
 {
     double min, max;
     double step;
@@ -45,14 +68,14 @@ int class_interval(double *data, int count, int nbreaks, double *classbreaks)
     return (1);
 }
 
-double class_stdev(double *data, int count, int nbreaks, double *classbreaks)
+double AS_class_stdev(double *data, int count, int nbreaks, double *classbreaks)
 {
     struct GASTATS stats;
     int i;
     int nbclass;
     double scale = 1.0;
 
-    basic_stats(data, count, &stats);
+    AS_basic_stats(data, count, &stats);
 
     nbclass = nbreaks + 1;
 
@@ -109,7 +132,7 @@ double class_stdev(double *data, int count, int nbreaks, double *classbreaks)
     return (scale);
 }
 
-int class_quant(double *data, int count, int nbreaks, double *classbreaks)
+int AS_class_quant(double *data, int count, int nbreaks, double *classbreaks)
 {
     int i, step;
 
@@ -122,7 +145,7 @@ int class_quant(double *data, int count, int nbreaks, double *classbreaks)
 }
 
 
-int class_equiprob(double *data, int count, int *nbreaks, double *classbreaks)
+int AS_class_equiprob(double *data, int count, int *nbreaks, double *classbreaks)
 {
     int i, j;
     double *lequi;		/*Vector of scale factors for probabilities of the normal distribution */
@@ -201,11 +224,10 @@ int class_equiprob(double *data, int count, int *nbreaks, double *classbreaks)
 	lequi[8] = 1.28155;
     }
     else {
-	G_fatal_error
-	    ("Equiprobable classbreaks currently limited to 10 classes");
+	G_fatal_error(_("Equiprobable classbreaks currently limited to 10 classes"));
     }
 
-    basic_stats(data, count, &stats);
+    AS_basic_stats(data, count, &stats);
 
     /* Check if any of the classbreaks would fall outside of the range min-max */
     j = 0;
@@ -242,7 +264,7 @@ int class_equiprob(double *data, int count, int *nbreaks, double *classbreaks)
 
 /* FIXME: there seems to a problem with array overflow, probably due to
    the fact that the code was ported from fortran which has 1-based arrays*/
-double class_discont(double *data, int count, int nbreaks,
+double AS_class_discont(double *data, int count, int nbreaks,
 		     double *classbreaks)
 {
     int *num, nbclass;
@@ -319,7 +341,7 @@ double class_discont(double *data, int count, int nbreaks,
 	    nd = nf;		/*Start number */
 	    nf = num[j];
 	    co[j] = 10e37;
-	    eqdrt(x, xn, nd, nf, abc);
+	    AS_eqdrt(x, xn, nd, nf, abc);
 	    den = sqrt(pow(abc[1], 2) + 1.0);
 	    nd++;
 	    /*              Loop through observations */
@@ -422,7 +444,7 @@ double class_discont(double *data, int count, int nbreaks,
     return (chi2);
 }
 
-int class_frequencies(double *data, int count, int nbreaks,
+int AS_class_frequencies(double *data, int count, int nbreaks,
 		      double *classbreaks, int *frequencies)
 {
     int i, j;

+ 6 - 6
vector/v.class/main.c

@@ -163,9 +163,10 @@ int main(int argc, char *argv[])
      * finfo takes any info coming from the classification algorithms
      * equ algorithm can alter number of class breaks */
     finfo =
-	class_apply_algorithm(algo_opt->answer, data, nrec, &nbreaks,
-			      classbreaks);
-
+        AS_class_apply_algorithm(AS_option_to_algorithm(algo_opt),
+                                 data, nrec, &nbreaks,
+                                 classbreaks);
+    
 
     if (G_strcasecmp(algo_opt->answer, "dis") == 0 && finfo < 3.84148)
 	G_warning(_("The discontinuities algorithm indicates that some "
@@ -187,9 +188,8 @@ int main(int argc, char *argv[])
 	for (i = 0; i < nbreaks + 1; i++)
 	    frequencies[i] = 0;
 
-	ret =
-	    class_frequencies(data, nrec, nbreaks, classbreaks, frequencies);
-	basic_stats(data, nrec, &stats);
+	ret = AS_class_frequencies(data, nrec, nbreaks, classbreaks, frequencies);
+	AS_basic_stats(data, nrec, &stats);
 
 	min = data[0];
 	max = data[nrec - 1];