This is an automated email from the git hooks/post-receive script.

sebastic-guest pushed a commit to branch upstream-master
in repository pktools.

commit e6a281f310bf2dab0196022607103b169530687a
Author: Pieter Kempeneers <kempe...@gmail.com>
Date:   Wed Jan 16 15:55:31 2013 +0100

    added OptFactory.h and pkopt_svm.cc
---
 ChangeLog                  | 14 +++++++++-----
 src/algorithms/Makefile.am |  2 +-
 src/algorithms/Makefile.in |  8 ++++----
 src/apps/Makefile.am       |  8 +++++---
 src/apps/Makefile.in       | 32 ++++++++++++++++++++++++--------
 src/apps/pkfs_svm.cc       | 18 ++++++------------
 src/apps/pksensormodel.cc  |  5 ++++-
 7 files changed, 53 insertions(+), 34 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index de06614..6e3148c 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -40,6 +40,8 @@ version 2.4
        --enable-fann (when FANN is installed, needed for pkclassify_nn)
        --enable-las (when LIBLAS is installed, needed for pklas2img)
        --enable-nlopt (when NLOPT is installed, needed for pksensormodel and 
pkgetchandelier)
+ - OptFactory.h (added)
+       factory class for nlopt::opt (selecting algorithm via string)
  - ImgReaderGdal.cc
        in addition to internal setNoData member variable, also support 
GDALSetNoData
  - ImgWriterGdal.cc
@@ -64,13 +66,15 @@ version 2.4
        update of header information
  - pkclassify_nn
        support of cross validation
- - pkfs_svm
-       feature selection tool for svm classification (added)
- - pkfs_nn
-       feature selection tool for nn classification (added)
+ - pkfs_svm (added)
+       feature selection tool for svm classification
+ - pkfs_nn (added)
+       feature selection tool for nn classification
+ - pkopt_svm (added)
+       optimization tool for svm classification (optimize ccost and gamma 
using NLOPT)
  - pkascii2ogr
        tool to create simple vector files from coordinates in ASCII file 
(points or polygon)
  - pksensormodel
-       tool to model pushbroom sensor
+       tool to model pushbroom sensor (with optimization of boresight angles 
using NLOPT)
  - pkascii2ogr
        support csv input file
diff --git a/src/algorithms/Makefile.am b/src/algorithms/Makefile.am
index 9f0bafa..b00098e 100644
--- a/src/algorithms/Makefile.am
+++ b/src/algorithms/Makefile.am
@@ -19,7 +19,7 @@ libalgorithms_a_HEADERS += myfann_cpp.h
 endif
 
 if USE_NLOPT
-libalgorithms_a_HEADERS += SensorModel.h
+libalgorithms_a_HEADERS += SensorModel.h OptFactory.h
 endif
 
 # the sources to add to the library and to add to the source distribution
diff --git a/src/algorithms/Makefile.in b/src/algorithms/Makefile.in
index a0c6645..bb2bb97 100644
--- a/src/algorithms/Makefile.in
+++ b/src/algorithms/Makefile.in
@@ -34,7 +34,7 @@ NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
 @USE_FANN_TRUE@am__append_1 = myfann_cpp.h
-@USE_NLOPT_TRUE@am__append_2 = SensorModel.h
+@USE_NLOPT_TRUE@am__append_2 = SensorModel.h OptFactory.h
 subdir = src/algorithms
 DIST_COMMON = $(am__libalgorithms_a_HEADERS_DIST) \
        $(srcdir)/Makefile.am $(srcdir)/Makefile.in
@@ -54,8 +54,8 @@ libalgorithms_a_AR = $(AR) $(ARFLAGS)
 libalgorithms_a_LIBADD =
 am__libalgorithms_a_SOURCES_DIST = Egcs.h Filter2d.h Filter.h \
        Histogram.h ConfusionMatrix.h svm.h FeatureSelector.h \
-       myfann_cpp.h SensorModel.h Egcs.cc Filter2d.cc Filter.cc \
-       Histogram.cc ConfusionMatrix.cc svm.cpp
+       myfann_cpp.h SensorModel.h OptFactory.h Egcs.cc Filter2d.cc \
+       Filter.cc Histogram.cc ConfusionMatrix.cc svm.cpp
 am__objects_1 =
 am__objects_2 = $(am__objects_1) $(am__objects_1)
 am_libalgorithms_a_OBJECTS = $(am__objects_2) Egcs.$(OBJEXT) \
@@ -79,7 +79,7 @@ SOURCES = $(libalgorithms_a_SOURCES)
 DIST_SOURCES = $(am__libalgorithms_a_SOURCES_DIST)
 am__libalgorithms_a_HEADERS_DIST = Egcs.h Filter2d.h Filter.h \
        Histogram.h ConfusionMatrix.h svm.h FeatureSelector.h \
-       myfann_cpp.h SensorModel.h
+       myfann_cpp.h SensorModel.h OptFactory.h
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
diff --git a/src/apps/Makefile.am b/src/apps/Makefile.am
index aa0421f..5fe6484 100644
--- a/src/apps/Makefile.am
+++ b/src/apps/Makefile.am
@@ -23,9 +23,11 @@ pklas2img_SOURCES = pklas2img.cc
 pklas2img_LDADD = -L$(top_builddir)/src/fileclasses -lfileClasses -llas 
$(AM_LDFLAGS)
 endif
 if USE_NLOPT
-bin_PROGRAMS += pksensormodel
+bin_PROGRAMS += pksensormodel pkopt_svm
 pksensormodel_SOURCES = $(top_srcdir)/src/algorithms/SensorModel.h 
pksensormodel.h pksensormodel.cc
 pksensormodel_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lnlopt -lm -lgslwrap
+pkopt_svm_SOURCES = $(top_srcdir)/src/algorithms/OptFactory.h pkclassify_nn.h 
pkopt_svm.cc
+pkopt_svm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lnlopt
 endif
 # list of sources for the binaries
 pkinfo_SOURCES = pkinfo.cc
@@ -51,8 +53,8 @@ pkmosaic_SOURCES = pkmosaic.cc
 pkndvi_SOURCES = pkndvi.cc
 pkpolygonize_SOURCES = pkpolygonize.cc
 pkdiff_SOURCES = pkdiff.cc
-pkclassify_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h 
$(top_srcdir)/src/algorithms/svm.cpp pkclassify_svm.cc
-pkfs_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h 
$(top_srcdir)/src/algorithms/svm.cpp pkfs_svm.cc
+pkclassify_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h 
$(top_srcdir)/src/algorithms/svm.cpp pkclassify_nn.h pkclassify_svm.cc
+pkfs_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h 
$(top_srcdir)/src/algorithms/svm.cpp pkclassify_nn.h pkfs_svm.cc
 pkfs_svm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS)
 pkascii2img_SOURCES = pkascii2img.cc
 pkascii2ogr_SOURCES = pkascii2ogr.cc
diff --git a/src/apps/Makefile.in b/src/apps/Makefile.in
index d708c55..926267c 100644
--- a/src/apps/Makefile.in
+++ b/src/apps/Makefile.in
@@ -43,7 +43,7 @@ bin_PROGRAMS = pkinfo$(EXEEXT) pkcrop$(EXEEXT) 
pkreclass$(EXEEXT) \
        $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3)
 @USE_FANN_TRUE@am__append_1 = pkclassify_nn pkfs_nn
 @USE_LAS_TRUE@am__append_2 = pklas2img
-@USE_NLOPT_TRUE@am__append_3 = pksensormodel
+@USE_NLOPT_TRUE@am__append_3 = pksensormodel pkopt_svm
 subdir = src/apps
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -57,7 +57,8 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 @USE_FANN_TRUE@am__EXEEXT_1 = pkclassify_nn$(EXEEXT) pkfs_nn$(EXEEXT)
 @USE_LAS_TRUE@am__EXEEXT_2 = pklas2img$(EXEEXT)
-@USE_NLOPT_TRUE@am__EXEEXT_3 = pksensormodel$(EXEEXT)
+@USE_NLOPT_TRUE@am__EXEEXT_3 = pksensormodel$(EXEEXT) \
+@USE_NLOPT_TRUE@       pkopt_svm$(EXEEXT)
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
 am_pkascii2img_OBJECTS = pkascii2img.$(OBJEXT)
@@ -189,6 +190,13 @@ pkndvi_LDADD = $(LDADD)
 pkndvi_DEPENDENCIES = $(am__DEPENDENCIES_1) \
        $(top_builddir)/src/algorithms/libalgorithms.a \
        $(top_builddir)/src/imageclasses/libimageClasses.a
+am__pkopt_svm_SOURCES_DIST =  \
+       $(top_srcdir)/src/algorithms/OptFactory.h pkclassify_nn.h \
+       pkopt_svm.cc
+@USE_NLOPT_TRUE@am_pkopt_svm_OBJECTS = pkopt_svm.$(OBJEXT)
+pkopt_svm_OBJECTS = $(am_pkopt_svm_OBJECTS)
+@USE_NLOPT_TRUE@pkopt_svm_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+@USE_NLOPT_TRUE@       $(am__DEPENDENCIES_2)
 am_pkpolygonize_OBJECTS = pkpolygonize.$(OBJEXT)
 pkpolygonize_OBJECTS = $(am_pkpolygonize_OBJECTS)
 pkpolygonize_LDADD = $(LDADD)
@@ -250,9 +258,10 @@ SOURCES = $(pkascii2img_SOURCES) $(pkascii2ogr_SOURCES) \
        $(pkfillnodata_SOURCES) $(pkfilter_SOURCES) $(pkfs_nn_SOURCES) \
        $(pkfs_svm_SOURCES) $(pkgetmask_SOURCES) $(pkinfo_SOURCES) \
        $(pklas2img_SOURCES) $(pkmosaic_SOURCES) $(pkndvi_SOURCES) \
-       $(pkpolygonize_SOURCES) $(pkreclass_SOURCES) \
-       $(pksensormodel_SOURCES) $(pksetmask_SOURCES) \
-       $(pksieve_SOURCES) $(pkstat_SOURCES) $(pkstatogr_SOURCES)
+       $(pkopt_svm_SOURCES) $(pkpolygonize_SOURCES) \
+       $(pkreclass_SOURCES) $(pksensormodel_SOURCES) \
+       $(pksetmask_SOURCES) $(pksieve_SOURCES) $(pkstat_SOURCES) \
+       $(pkstatogr_SOURCES)
 DIST_SOURCES = $(pkascii2img_SOURCES) $(pkascii2ogr_SOURCES) \
        $(am__pkclassify_nn_SOURCES_DIST) $(pkclassify_svm_SOURCES) \
        $(pkcreatect_SOURCES) $(pkcrop_SOURCES) $(pkdiff_SOURCES) \
@@ -262,7 +271,8 @@ DIST_SOURCES = $(pkascii2img_SOURCES) 
$(pkascii2ogr_SOURCES) \
        $(am__pkfs_nn_SOURCES_DIST) $(pkfs_svm_SOURCES) \
        $(pkgetmask_SOURCES) $(pkinfo_SOURCES) \
        $(am__pklas2img_SOURCES_DIST) $(pkmosaic_SOURCES) \
-       $(pkndvi_SOURCES) $(pkpolygonize_SOURCES) $(pkreclass_SOURCES) \
+       $(pkndvi_SOURCES) $(am__pkopt_svm_SOURCES_DIST) \
+       $(pkpolygonize_SOURCES) $(pkreclass_SOURCES) \
        $(am__pksensormodel_SOURCES_DIST) $(pksetmask_SOURCES) \
        $(pksieve_SOURCES) $(pkstat_SOURCES) $(pkstatogr_SOURCES)
 ETAGS = etags
@@ -389,6 +399,8 @@ LDADD = $(GDAL_LDFLAGS) 
$(top_builddir)/src/algorithms/libalgorithms.a $(top_bui
 @USE_LAS_TRUE@pklas2img_LDADD = -L$(top_builddir)/src/fileclasses 
-lfileClasses -llas $(AM_LDFLAGS)
 @USE_NLOPT_TRUE@pksensormodel_SOURCES = 
$(top_srcdir)/src/algorithms/SensorModel.h pksensormodel.h pksensormodel.cc
 @USE_NLOPT_TRUE@pksensormodel_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lnlopt -lm 
-lgslwrap
+@USE_NLOPT_TRUE@pkopt_svm_SOURCES = $(top_srcdir)/src/algorithms/OptFactory.h 
pkclassify_nn.h pkopt_svm.cc
+@USE_NLOPT_TRUE@pkopt_svm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lnlopt
 # list of sources for the binaries
 pkinfo_SOURCES = pkinfo.cc
 pkcrop_SOURCES = pkcrop.cc
@@ -413,8 +425,8 @@ pkmosaic_SOURCES = pkmosaic.cc
 pkndvi_SOURCES = pkndvi.cc
 pkpolygonize_SOURCES = pkpolygonize.cc
 pkdiff_SOURCES = pkdiff.cc
-pkclassify_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h 
$(top_srcdir)/src/algorithms/svm.cpp pkclassify_svm.cc
-pkfs_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h 
$(top_srcdir)/src/algorithms/svm.cpp pkfs_svm.cc
+pkclassify_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h 
$(top_srcdir)/src/algorithms/svm.cpp pkclassify_nn.h pkclassify_svm.cc
+pkfs_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h 
$(top_srcdir)/src/algorithms/svm.cpp pkclassify_nn.h pkfs_svm.cc
 pkfs_svm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS)
 pkascii2img_SOURCES = pkascii2img.cc
 pkascii2ogr_SOURCES = pkascii2ogr.cc
@@ -552,6 +564,9 @@ pkmosaic$(EXEEXT): $(pkmosaic_OBJECTS) 
$(pkmosaic_DEPENDENCIES)
 pkndvi$(EXEEXT): $(pkndvi_OBJECTS) $(pkndvi_DEPENDENCIES) 
        @rm -f pkndvi$(EXEEXT)
        $(CXXLINK) $(pkndvi_OBJECTS) $(pkndvi_LDADD) $(LIBS)
+pkopt_svm$(EXEEXT): $(pkopt_svm_OBJECTS) $(pkopt_svm_DEPENDENCIES) 
+       @rm -f pkopt_svm$(EXEEXT)
+       $(CXXLINK) $(pkopt_svm_OBJECTS) $(pkopt_svm_LDADD) $(LIBS)
 pkpolygonize$(EXEEXT): $(pkpolygonize_OBJECTS) $(pkpolygonize_DEPENDENCIES) 
        @rm -f pkpolygonize$(EXEEXT)
        $(CXXLINK) $(pkpolygonize_OBJECTS) $(pkpolygonize_LDADD) $(LIBS)
@@ -601,6 +616,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pklas2img.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkmosaic.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkndvi.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkopt_svm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkpolygonize.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkreclass.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pksensormodel.Po@am__quote@
diff --git a/src/apps/pkfs_svm.cc b/src/apps/pkfs_svm.cc
index e7d799f..24c4969 100644
--- a/src/apps/pkfs_svm.cc
+++ b/src/apps/pkfs_svm.cc
@@ -21,10 +21,6 @@ along with pktools.  If not, see 
<http://www.gnu.org/licenses/>.
 #include <string>
 #include <map>
 #include <algorithm>
-#include "imageclasses/ImgReaderGdal.h"
-#include "imageclasses/ImgWriterGdal.h"
-#include "imageclasses/ImgReaderOgr.h"
-#include "imageclasses/ImgWriterOgr.h"
 #include "base/Optionpk.h"
 #include "algorithms/ConfusionMatrix.h"
 #include "algorithms/FeatureSelector.h"
@@ -37,7 +33,6 @@ along with pktools.  If not, see 
<http://www.gnu.org/licenses/>.
 
 #define Malloc(type,n) (type *)malloc((n)*sizeof(type))
 
-                                    //static enum SelectorValue { NA, SFFS, 
SFS, SBS, BFS };
 enum SelectorValue  { NA=0, SFFS=1, SFS=2, SBS=3, BFS=4 };
 
 //global parameters used in cost function getCost
@@ -107,13 +102,13 @@ double getCost(const vector<Vector2d<float> > 
&trainingFeatures)
   }
 
   assert(lIndex==prob.l);
-  if(verbose_opt[0]>1)
+  if(verbose_opt[0]>2)
     std::cout << "checking parameters" << std::endl;
   svm_check_parameter(&prob,&param);
-  if(verbose_opt[0]>1)
+  if(verbose_opt[0]>2)
     std::cout << "parameters ok, training" << std::endl;
   svm=svm_train(&prob,&param);
-  if(verbose_opt[0]>1)
+  if(verbose_opt[0]>2)
     std::cout << "SVM is now trained" << std::endl;
 
   ConfusionMatrix cm(nclass);
@@ -124,6 +119,8 @@ double getCost(const vector<Vector2d<float> > 
&trainingFeatures)
   for(int i=0;i<prob.l;i++)
     cm.incrementResult(cm.getClass(prob.y[i]),cm.getClass(target[i]),1);
   assert(cm.nReference());
+  if(verbose_opt[0]>1)
+    std::cout << cm << std::endl;
   // std::cout << "Kappa: " << cm.kappa() << std::endl;
   // double se95_oa=0;
   // double doa=0;
@@ -159,7 +156,7 @@ int main(int argc, char *argv[])
   Optionpk<bool> license_opt("lic","license","show license information",false);
   Optionpk<bool> help_opt("h","help","shows this help info",false);
   Optionpk<bool> todo_opt("\0","todo","",false);
-  Optionpk<string> training_opt("t", "training", "training shape file. A 
single shape file contains all training features (must be set as: B0, B1, 
B2,...) for all classes (class numbers identified by label option). Use 
multiple training files for bootstrap aggregation (alternative to the bag and 
bsize options, where a random subset is taken from a single training file)"); 
+  Optionpk<string> training_opt("t", "training", "training shape file. A 
single shape file contains all training features (must be set as: B0, B1, 
B2,...) for all classes (class numbers identified by label option)."); 
   Optionpk<string> label_opt("\0", "label", "identifier for class label in 
training shape file.","label"); 
   Optionpk<unsigned short> maxFeatures_opt("n", "nf", "number of features to 
select (0 to select optimal number, see also ecost option)", 0);
   Optionpk<unsigned short> reclass_opt("\0", "rc", "reclass code (e.g. --rc=12 
--rc=23 to reclass first two classes to 12 and 23 resp.).", 0);
@@ -170,8 +167,6 @@ int main(int argc, char *argv[])
   Optionpk<short> band_opt("b", "band", "band index (starting from 0, either 
use band option or use start to end)");
   Optionpk<double> offset_opt("\0", "offset", "offset value for each spectral 
band input features: refl[band]=(DN[band]-offset[band])/scale[band]", 0.0);
   Optionpk<double> scale_opt("\0", "scale", "scale value for each spectral 
band input features: refl=(DN[band]-offset[band])/scale[band] (use 0 if scale 
min and max in each band to -1.0 and 1.0)", 0.0);
-  Optionpk<unsigned short> aggreg_opt("a", "aggreg", "how to combine 
aggregated classifiers, see also rc option (0: no aggregation, 1: sum rule, 2: 
max rule).",0);
-  // Optionpk<double> priors_opt("p", "prior", "prior probabilities for each 
class (e.g., -p 0.3 -p 0.3 -p 0.2 )", 0.0);
   Optionpk<string> selector_opt("sm", "sm", "feature selection method 
(sffs=sequential floating forward search,sfs=sequential forward search, sbs, 
sequential backward search ,bfs=brute force search)","sffs"); 
   Optionpk<float> epsilon_cost_opt("ecost", "ecost", "epsilon for stopping 
criterion in cost function to determine optimal number of features",0.001);
 
@@ -190,7 +185,6 @@ int main(int argc, char *argv[])
   band_opt.retrieveOption(argc,argv);
   offset_opt.retrieveOption(argc,argv);
   scale_opt.retrieveOption(argc,argv);
-  aggreg_opt.retrieveOption(argc,argv);
   // priors_opt.retrieveOption(argc,argv);
   svm_type_opt.retrieveOption(argc,argv);
   kernel_type_opt.retrieveOption(argc,argv);
diff --git a/src/apps/pksensormodel.cc b/src/apps/pksensormodel.cc
index d7a44d3..90e3f38 100644
--- a/src/apps/pksensormodel.cc
+++ b/src/apps/pksensormodel.cc
@@ -24,6 +24,7 @@ along with pktools.  If not, see 
<http://www.gnu.org/licenses/>.
 #include <math.h>
 #include <nlopt.hpp>
 #include "base/Optionpk.h"
+#include "algorithms/OptFactory.h"
 #include "algorithms/Histogram.h"
 #include "pksensormodel.h"
 
@@ -103,6 +104,7 @@ int main(int argc, char *argv[])
   Optionpk<bool> aplrad_opt("arad","arad","platform attitude angles",false);
   Optionpk<bool> bcrad_opt("brad","brad","boresight attitude angles",false);
   Optionpk<bool> getzenith_opt("gz","getzenith","get zenith angle from 
platform",false);
+  Optionpk<string> algorithm_opt("a", "algorithm", "optimization algorithm 
(see http://ab-initio.mit.edu/wiki/index.php/NLopt_Algorithms)","LN_COBYLA"); 
   Optionpk<short> verbose_opt("v", "verbose", "verbose mode when > 0", 0);
 
   version_opt.retrieveOption(argc,argv);
@@ -152,6 +154,7 @@ int main(int argc, char *argv[])
   aplrad_opt.retrieveOption(argc,argv);
   bcrad_opt.retrieveOption(argc,argv);
   getzenith_opt.retrieveOption(argc,argv);
+  algorithm_opt.retrieveOption(argc,argv);
   verbose_opt.retrieveOption(argc,argv);
 
   if(version_opt[0]){
@@ -570,7 +573,7 @@ int main(int argc, char *argv[])
       init_opt.push_back(init_opt[0]);
     //todo: make nlopt::LN_COBYLA as a command line option
     //nlopt::opt opt(nlopt::LN_COBYLA,4*input_opt.size());//k,e,a,haze
-    nlopt::opt optimizer(nlopt::LN_SBPLX,3);//bore sight angles
+    nlopt::opt optimizer=OptFactory::getOptimizer(algorithm_opt[0],3);//bore 
sight angles
 
     optimizer.set_min_objective(objFunction, &theDataModel);
 

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-grass/pktools.git

_______________________________________________
Pkg-grass-devel mailing list
Pkg-grass-devel@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

Reply via email to