From 52fb76f9794f3da152fdf8f98b4d1a2891909901 Mon Sep 17 00:00:00 2001 From: Laurent Belcour Date: Mon, 25 Feb 2013 14:34:49 +0100 Subject: [PATCH] Minor fixes --- sources/core/args.h | 36 +++++++++++++++++-- .../rational_fitter_cgal.cpp | 13 +++---- .../rational_fitter.cpp | 8 ++--- .../rational_fitter.cpp | 23 +++--------- sources/softs/plugin_loader/main.cpp | 9 +++++ 5 files changed, 53 insertions(+), 36 deletions(-) diff --git a/sources/core/args.h b/sources/core/args.h index 18731cb..86fa6d7 100644 --- a/sources/core/args.h +++ b/sources/core/args.h @@ -5,6 +5,8 @@ #include #include +#include "common.h" + class arguments { public: // functions @@ -69,14 +71,44 @@ class arguments return atof(_map.at(key).c_str()) ; else return default_value ; - } ; + } int get_int(const std::string& key, int default_value = 0) const { if(_map.count(key) > 0) return atoi(_map.at(key).c_str()) ; else return default_value ; - } ; + } + vec get_vec(const std::string& key, float default_value) const + { + vec res; + if(_map.count(key) > 0) + { + std::string s = _map.at(key); + if(s[0] == '\[') // Is an array of type [a, b, c] + { + int i = 0; + size_t pos = 0; + while(pos != std::string::npos) + { + size_t ppos = s.find(",", pos); + + if(ppos != std::string::npos) + { + std::cout << s.substr(pos, ppos) << std::endl ; + res[i] = atof(s.substr(pos, ppos).c_str()); + pos = ppos+1; + ++i; + } + } + return res; + } + } + + float val = get_float(key, default_value); + res.push_back(default_value); + return res; + } private: // data diff --git a/sources/plugins/rational_fitter_cgal/rational_fitter_cgal.cpp b/sources/plugins/rational_fitter_cgal/rational_fitter_cgal.cpp index 7fbba2e..f3b843e 100644 --- a/sources/plugins/rational_fitter_cgal/rational_fitter_cgal.cpp +++ b/sources/plugins/rational_fitter_cgal/rational_fitter_cgal.cpp @@ -54,14 +54,7 @@ bool rational_fitter_cgal::fit_data(const data* dat, function* fit) r->setDimY(d->dimY()) ; r->setMin(d->min()) ; r->setMax(d->max()) ; -/* - for(int i=0; i<20; ++i) - { - std::vector deg = r->index2degree(i) ; - std::cout << deg[0] << ", " << deg[1] << std::endl ; - } - throw ; -*/ + std::cout << "<> np in [" << _min_np << ", " << _max_np << "] & nq in [" << _min_nq << ", " << _max_nq << "]" << std::endl ; @@ -331,7 +324,9 @@ bool rational_fitter_cgal::fit_data(const vertical_segment* d, int np, int nq, i } } r->update(p, q) ; - std::cout << "<> got solution " << *r << std::endl ; +#ifdef DEBUG + std::cout << "<> got solution " << *r << std::endl ; +#endif return true; } diff --git a/sources/plugins/rational_fitter_matlab/rational_fitter.cpp b/sources/plugins/rational_fitter_matlab/rational_fitter.cpp index 4bd8c37..1c13ef6 100644 --- a/sources/plugins/rational_fitter_matlab/rational_fitter.cpp +++ b/sources/plugins/rational_fitter_matlab/rational_fitter.cpp @@ -167,11 +167,7 @@ bool rational_fitter_matlab::fit_data(const vertical_segment* d, int np, int nq, double a1_norm = 0.0 ; vec xi = d->get(i) ; -/* for(int k=0; kdimX(); ++k) - { - xi[k] /= dmax[k] ; - } -*/ + // A row of the constraint matrix has this // form: [p_{0}(x_i), .., p_{np}(x_i), -f(x_i) q_{0}(x_i), .., -f(x_i) q_{nq}(x_i)] // For the lower constraint and negated for @@ -234,7 +230,7 @@ bool rational_fitter_matlab::fit_data(const vertical_segment* d, int np, int nq, delta = 1.0 ; } -#ifndef DEBUG +#ifdef DEBUG std::cout << "<> delta factor: " << sigma_m << " / " << sigma_M << " = " << delta << std::endl ; #endif diff --git a/sources/plugins/rational_fitter_quadprog/rational_fitter.cpp b/sources/plugins/rational_fitter_quadprog/rational_fitter.cpp index 5f1131e..12d5aa6 100644 --- a/sources/plugins/rational_fitter_quadprog/rational_fitter.cpp +++ b/sources/plugins/rational_fitter_quadprog/rational_fitter.cpp @@ -51,18 +51,6 @@ bool rational_fitter_quadprog::fit_data(const data* dat, function* fit) std::cout << "<> np in [" << _min_np << ", " << _max_np << "] & nq in [" << _min_nq << ", " << _max_nq << "]" << std::endl ; - - -/* - for(int i=0; i<20; ++i) - { - std::vector deg = r->index2degree(i) ; - std::cout << deg[0] << ", " << deg[1] << ", " << deg[2] << std::endl ; - } - throw ; -//*/ - - int temp_np = _min_np, temp_nq = _min_nq ; while(temp_np <= _max_np || temp_nq <= _max_nq) { @@ -171,11 +159,7 @@ bool rational_fitter_quadprog::fit_data(const vertical_segment* dat, int np, int double a1_norm = 0.0 ; vec xi = d->get(i) ; -/* for(int k=0; kdimX(); ++k) - { - xi[k] /= dmax[k] ; - } -*/ + // A row of the constraint matrix has this // form: [p_{0}(x_i), .., p_{np}(x_i), -f(x_i) q_{0}(x_i), .., -f(x_i) q_{nq}(x_i)] // For the lower constraint and negated for @@ -263,7 +247,7 @@ bool rational_fitter_quadprog::fit_data(const vertical_segment* dat, int np, int } -#ifndef DEBUG +#ifdef DEBUG std::cout << "<> delta factor: " << sigma_m << " / " << sigma_M << " = " << delta << std::endl ; #endif for(int i=0; i<2*d->size(); ++i) @@ -310,8 +294,9 @@ bool rational_fitter_quadprog::fit_data(const vertical_segment* dat, int np, int } r->update(p, q); +#ifdef DEBUG std::cout << "<> got solution " << *r << std::endl ; - +#endif return norm > 0.0; } else diff --git a/sources/softs/plugin_loader/main.cpp b/sources/softs/plugin_loader/main.cpp index 7bb9606..081d73e 100644 --- a/sources/softs/plugin_loader/main.cpp +++ b/sources/softs/plugin_loader/main.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -56,11 +57,19 @@ int main(int argc, char** argv) data* d = fit->provide_data() ; d->load(args["input"], args); + QTime time ; + time.start() ; bool is_fitted = fit->fit_data(d, f) ; + int msec = time.elapsed() ; + int sec = (msec / 1000) % 60 ; + int min = (msec / 60000) % 60 ; + int hour = (msec / 3600000) ; + // Display the result if(is_fitted) { + std::cout << "<> total time: " << hour << "h " << min << "m " << sec << "s" << std::endl ; /* vec min, max ; min.assign(2, args.get_float("min", 0.0f)) ; -- GitLab