summaryrefslogtreecommitdiff
path: root/src/Alpha_complex
diff options
context:
space:
mode:
Diffstat (limited to 'src/Alpha_complex')
-rw-r--r--src/Alpha_complex/benchmark/Alpha_complex_3d_benchmark.cpp60
-rw-r--r--src/Alpha_complex/doc/Intro_alpha_complex.h6
-rw-r--r--src/Alpha_complex/example/Weighted_alpha_complex_3d_from_points.cpp1
-rw-r--r--src/Alpha_complex/include/gudhi/Alpha_complex.h3
-rw-r--r--src/Alpha_complex/include/gudhi/Alpha_complex_3d.h43
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,