diff options
Diffstat (limited to 'src')
5 files changed, 51 insertions, 62 deletions
diff --git a/src/Alpha_complex/benchmark/Alpha_complex_3d_benchmark.cpp b/src/Alpha_complex/benchmark/Alpha_complex_3d_benchmark.cpp index 1a33f2b4..96a4baf3 100644 --- a/src/Alpha_complex/benchmark/Alpha_complex_3d_benchmark.cpp +++ b/src/Alpha_complex/benchmark/Alpha_complex_3d_benchmark.cpp @@ -25,7 +25,7 @@ void benchmark_points_on_torus_dD(const std::string& msg) { results_csv << "\"nb_points\";" << "\"nb_simplices\";" << "\"alpha_creation_time(sec.)\";" - << "\"simplex_creation_time(sec.)\";" << std::endl; + << "\"complex_creation_time(sec.)\";" << std::endl; using K = CGAL::Epick_d<CGAL::Dimension_tag<3>>; for (int nb_points = 1000; nb_points <= 125000; nb_points *= 5) { @@ -43,17 +43,17 @@ void benchmark_points_on_torus_dD(const std::string& msg) { ac_create_clock.end(); std::cout << ac_create_clock; - Gudhi::Simplex_tree<> simplex; - Gudhi::Clock st_create_clock(" benchmark_points_on_torus_dD - simplex tree creation"); + Gudhi::Simplex_tree<> complex; + Gudhi::Clock st_create_clock(" benchmark_points_on_torus_dD - complex creation"); st_create_clock.begin(); - alpha_complex_from_points.create_complex(simplex); + alpha_complex_from_points.create_complex(complex); st_create_clock.end(); std::cout << st_create_clock; - results_csv << nb_points << ";" << simplex.num_simplices() << ";" << ac_create_clock.num_seconds() << ";" + results_csv << nb_points << ";" << complex.num_simplices() << ";" << ac_create_clock.num_seconds() << ";" << st_create_clock.num_seconds() << ";" << std::endl; - std::cout << " benchmark_points_on_torus_dD - nb simplices = " << simplex.num_simplices() << std::endl; + std::cout << " benchmark_points_on_torus_dD - nb simplices = " << complex.num_simplices() << std::endl; } } @@ -66,7 +66,7 @@ void benchmark_points_on_torus_3D(const std::string& msg) { results_csv << "\"nb_points\";" << "\"nb_simplices\";" << "\"alpha_creation_time(sec.)\";" - << "\"simplex_creation_time(sec.)\";" << std::endl; + << "\"complex_creation_time(sec.)\";" << std::endl; for (int nb_points = 1000; nb_points <= 125000; nb_points *= 5) { std::cout << " Alpha complex 3d on torus with " << nb_points << " points." << std::endl; @@ -83,17 +83,17 @@ void benchmark_points_on_torus_3D(const std::string& msg) { ac_create_clock.end(); std::cout << ac_create_clock; - Gudhi::Simplex_tree<> simplex; - Gudhi::Clock st_create_clock(" benchmark_points_on_torus_3D - simplex tree creation"); + Gudhi::Simplex_tree<> complex; + Gudhi::Clock st_create_clock(" benchmark_points_on_torus_3D - complex creation"); st_create_clock.begin(); - alpha_complex_from_points.create_complex(simplex); + alpha_complex_from_points.create_complex(complex); st_create_clock.end(); std::cout << st_create_clock; - results_csv << nb_points << ";" << simplex.num_simplices() << ";" << ac_create_clock.num_seconds() << ";" + results_csv << nb_points << ";" << complex.num_simplices() << ";" << ac_create_clock.num_seconds() << ";" << st_create_clock.num_seconds() << ";" << std::endl; - std::cout << " benchmark_points_on_torus_3D - nb simplices = " << simplex.num_simplices() << std::endl; + std::cout << " benchmark_points_on_torus_3D - nb simplices = " << complex.num_simplices() << std::endl; } } @@ -107,7 +107,7 @@ void benchmark_weighted_points_on_torus_3D(const std::string& msg) { results_csv << "\"nb_points\";" << "\"nb_simplices\";" << "\"alpha_creation_time(sec.)\";" - << "\"simplex_creation_time(sec.)\";" << std::endl; + << "\"complex_creation_time(sec.)\";" << std::endl; CGAL::Random random(8); @@ -130,17 +130,17 @@ void benchmark_weighted_points_on_torus_3D(const std::string& msg) { ac_create_clock.end(); std::cout << ac_create_clock; - Gudhi::Simplex_tree<> simplex; - Gudhi::Clock st_create_clock(" benchmark_weighted_points_on_torus_3D - simplex tree creation"); + Gudhi::Simplex_tree<> complex; + Gudhi::Clock st_create_clock(" benchmark_weighted_points_on_torus_3D - complex creation"); st_create_clock.begin(); - alpha_complex_from_points.create_complex(simplex); + alpha_complex_from_points.create_complex(complex); st_create_clock.end(); std::cout << st_create_clock; - results_csv << nb_points << ";" << simplex.num_simplices() << ";" << ac_create_clock.num_seconds() << ";" + results_csv << nb_points << ";" << complex.num_simplices() << ";" << ac_create_clock.num_seconds() << ";" << st_create_clock.num_seconds() << ";" << std::endl; - std::cout << " benchmark_weighted_points_on_torus_3D - nb simplices = " << simplex.num_simplices() << std::endl; + std::cout << " benchmark_weighted_points_on_torus_3D - nb simplices = " << complex.num_simplices() << std::endl; } } @@ -152,7 +152,7 @@ void benchmark_periodic_points(const std::string& msg) { results_csv << "\"nb_points\";" << "\"nb_simplices\";" << "\"alpha_creation_time(sec.)\";" - << "\"simplex_creation_time(sec.)\";" << std::endl; + << "\"complex_creation_time(sec.)\";" << std::endl; CGAL::Random random(8); @@ -176,17 +176,17 @@ void benchmark_periodic_points(const std::string& msg) { ac_create_clock.end(); std::cout << ac_create_clock; - Gudhi::Simplex_tree<> simplex; - Gudhi::Clock st_create_clock(" benchmark_periodic_points - simplex tree creation"); + Gudhi::Simplex_tree<> complex; + Gudhi::Clock st_create_clock(" benchmark_periodic_points - complex creation"); st_create_clock.begin(); - alpha_complex_from_points.create_complex(simplex); + alpha_complex_from_points.create_complex(complex); st_create_clock.end(); std::cout << st_create_clock; - results_csv << nb_points * nb_points * nb_points << ";" << simplex.num_simplices() << ";" + results_csv << nb_points * nb_points * nb_points << ";" << complex.num_simplices() << ";" << ac_create_clock.num_seconds() << ";" << st_create_clock.num_seconds() << ";" << std::endl; - std::cout << " benchmark_periodic_points - nb simplices = " << simplex.num_simplices() << std::endl; + std::cout << " benchmark_periodic_points - nb simplices = " << complex.num_simplices() << std::endl; } } @@ -198,7 +198,7 @@ void benchmark_weighted_periodic_points(const std::string& msg) { results_csv << "\"nb_points\";" << "\"nb_simplices\";" << "\"alpha_creation_time(sec.)\";" - << "\"simplex_creation_time(sec.)\";" << std::endl; + << "\"complex_creation_time(sec.)\";" << std::endl; CGAL::Random random(8); @@ -226,17 +226,17 @@ void benchmark_weighted_periodic_points(const std::string& msg) { ac_create_clock.end(); std::cout << ac_create_clock; - Gudhi::Simplex_tree<> simplex; - Gudhi::Clock st_create_clock(" benchmark_weighted_periodic_points - simplex tree creation"); + Gudhi::Simplex_tree<> complex; + Gudhi::Clock st_create_clock(" benchmark_weighted_periodic_points - complex creation"); st_create_clock.begin(); - alpha_complex_from_points.create_complex(simplex); + alpha_complex_from_points.create_complex(complex); st_create_clock.end(); std::cout << st_create_clock; - results_csv << nb_points * nb_points * nb_points << ";" << simplex.num_simplices() << ";" + results_csv << nb_points * nb_points * nb_points << ";" << complex.num_simplices() << ";" << ac_create_clock.num_seconds() << ";" << st_create_clock.num_seconds() << ";" << std::endl; - std::cout << " benchmark_weighted_periodic_points - nb simplices = " << simplex.num_simplices() << std::endl; + std::cout << " benchmark_weighted_periodic_points - nb simplices = " << complex.num_simplices() << std::endl; } } diff --git a/src/Alpha_complex/doc/Intro_alpha_complex.h b/src/Alpha_complex/doc/Intro_alpha_complex.h index 2fe9f4ca..ab7c4794 100644 --- a/src/Alpha_complex/doc/Intro_alpha_complex.h +++ b/src/Alpha_complex/doc/Intro_alpha_complex.h @@ -168,8 +168,10 @@ namespace alpha_complex { * * \section weighted3dexample 3d specific example * - * A specific module for Alpha complex is available in 3d (cf. Alpha_complex_3d) and allows to construct default, exact, - * weighted, periodic or weighted and periodic versions of alpha complexes + * A specific module for Alpha complex is available in 3d (cf. Alpha_complex_3d) and allows to construct standard, + * weighted, periodic or weighted and periodic versions of alpha complexes. Alpha values computation can be + * Gudhi::alpha_complex::complexity::FAST, Gudhi::alpha_complex::complexity::SAFE (default value) or + * Gudhi::alpha_complex::complexity::EXACT. * * This example builds the CGAL 3d weighted alpha shapes from a small molecule, and initializes the alpha complex with * it. This example is taken from <a href="https://doc.cgal.org/latest/Alpha_shapes_3/index.html#title13">CGAL 3d diff --git a/src/Alpha_complex/example/Weighted_alpha_complex_3d_from_points.cpp b/src/Alpha_complex/example/Weighted_alpha_complex_3d_from_points.cpp index 68f72f0a..3a69623f 100644 --- a/src/Alpha_complex/example/Weighted_alpha_complex_3d_from_points.cpp +++ b/src/Alpha_complex/example/Weighted_alpha_complex_3d_from_points.cpp @@ -7,6 +7,7 @@ #include <vector> #include <limits> // for numeric limits +// Complexity = EXACT, weighted = true, periodic = false using Weighted_alpha_complex_3d = Gudhi::alpha_complex::Alpha_complex_3d<Gudhi::alpha_complex::complexity::EXACT, true, false>; using Point = Weighted_alpha_complex_3d::Point_3; diff --git a/src/Alpha_complex/include/gudhi/Alpha_complex.h b/src/Alpha_complex/include/gudhi/Alpha_complex.h index 08db14fb..53216e2f 100644 --- a/src/Alpha_complex/include/gudhi/Alpha_complex.h +++ b/src/Alpha_complex/include/gudhi/Alpha_complex.h @@ -240,6 +240,9 @@ class Alpha_complex { * * @return true if creation succeeds, false otherwise. * + * @note Setting the max_alpha_square with a smaller value will not accelerate the complex creation. On the contrary + * it will launch SimplicialComplexForAlpha::prune_above_filtration after the complete creation. + * * @pre Delaunay triangulation must be already constructed with dimension strictly greater than 0. * @pre The simplicial complex must be empty (no vertices) * diff --git a/src/Alpha_complex/include/gudhi/Alpha_complex_3d.h b/src/Alpha_complex/include/gudhi/Alpha_complex_3d.h index 00a47d5c..9c9bc929 100644 --- a/src/Alpha_complex/include/gudhi/Alpha_complex_3d.h +++ b/src/Alpha_complex/include/gudhi/Alpha_complex_3d.h @@ -26,10 +26,6 @@ #include <boost/version.hpp> #include <boost/variant.hpp> -#if BOOST_VERSION >= 105400 -#include <boost/container/static_vector.hpp> -#endif - #include <gudhi/Debug_utils.h> #include <gudhi/Alpha_complex_options.h> @@ -50,6 +46,8 @@ #include <CGAL/iterator.h> #include <CGAL/version.h> +#include <boost/container/static_vector.hpp> + #include <iostream> #include <vector> #include <unordered_map> @@ -116,17 +114,8 @@ struct Value_from_iterator<complexity::SAFE, false> { } }; -template <> -struct Value_from_iterator<complexity::EXACT, true> { - template <typename Iterator> - static double perform(Iterator it) { - // In EXACT mode, we are with Epeck or Epick with EXACT value set to CGAL::Tag_true. - return CGAL::to_double(it->exact()); - } -}; - -template <> -struct Value_from_iterator<complexity::EXACT, false> { +template<bool Weighted_or_periodic> +struct Value_from_iterator<complexity::EXACT,Weighted_or_periodic>{ template <typename Iterator> static double perform(Iterator it) { // In EXACT mode, we are with Epeck or Epick with EXACT value set to CGAL::Tag_true. @@ -145,8 +134,8 @@ struct Value_from_iterator<complexity::EXACT, false> { * Shapes</a> from a range of points (can be read from an OFF file, cf. Points_off_reader). * Duplicate points are inserted once in the Alpha_complex. This is the reason why the vertices may be not contiguous. * - * \tparam Complexity shall be `Gudhi::alpha_complex::complexity`. Default value is - * `Gudhi::alpha_complex::complexity::FAST`. + * \tparam Complexity shall be `Gudhi::alpha_complex::complexity` type. Default value is + * `Gudhi::alpha_complex::complexity::SAFE`. * * \tparam Weighted Boolean used to set/unset the weighted version of Alpha_complex_3d. Default value is false. * @@ -169,7 +158,7 @@ struct Value_from_iterator<complexity::EXACT, false> { * 3d Delaunay complex. * */ -template <complexity Complexity = complexity::FAST, bool Weighted = false, bool Periodic = false> +template <complexity Complexity = complexity::SAFE, bool Weighted = false, bool Periodic = false> class Alpha_complex_3d { // Epick = Exact_predicates_inexact_constructions_kernel // Epeck = Exact_predicates_exact_constructions_kernel @@ -192,14 +181,11 @@ class Alpha_complex_3d { template <typename Predicates, bool Weighted_version, bool Periodic_version> struct Kernel_3 {}; - template <typename Predicates> - struct Kernel_3<Predicates, false, false> { - using Kernel = Predicates; - }; - template <typename Predicates> - struct Kernel_3<Predicates, true, false> { + template <typename Predicates, bool Is_periodic> + struct Kernel_3<Predicates, Is_periodic, false> { using Kernel = Predicates; }; + template <typename Predicates> struct Kernel_3<Predicates, false, true> { using Kernel = CGAL::Periodic_3_Delaunay_triangulation_traits_3<Predicates>; @@ -269,11 +255,7 @@ class Alpha_complex_3d { using Facet = typename Alpha_shape_3::Facet; using Edge = typename Alpha_shape_3::Edge; using Alpha_vertex_handle = typename Alpha_shape_3::Vertex_handle; -#if BOOST_VERSION >= 105400 using Vertex_list = boost::container::static_vector<Alpha_vertex_handle, 4>; -#else - using Vertex_list = std::vector<Alpha_vertex_handle>; -#endif public: /** \brief Alpha_complex constructor from a list of points. @@ -455,9 +437,10 @@ class Alpha_complex_3d { * * @return true if creation succeeds, false otherwise. * - * @pre The simplicial complex must be empty (no vertices) + * @note Setting the max_alpha_square with a smaller value will not accelerate the complex creation. On the contrary + * it will launch SimplicialComplexForAlpha3d::prune_above_filtration after the complete creation. * - * Initialization can be launched once. + * @pre The simplicial complex must be empty (no vertices). * */ template <typename SimplicialComplexForAlpha3d, |