summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt76
-rw-r--r--data/points/generator/README29
-rw-r--r--src/CMakeLists.txt34
-rw-r--r--src/cmake/modules/GUDHI_modules.cmake43
-rw-r--r--src/cmake/modules/GUDHI_user_version_target.cmake (renamed from src/cmake/modules/GUDHI_user_version_target.txt)1
-rw-r--r--src/common/include/gudhi/random_point_generators.h32
-rw-r--r--src/common/utilities/CMakeLists.txt (renamed from data/points/generator/CMakeLists.txt)0
-rw-r--r--src/common/utilities/README19
-rw-r--r--src/common/utilities/hypergenerator.cpp (renamed from data/points/generator/hypergenerator.cpp)92
9 files changed, 210 insertions, 116 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 324f8648..360eb87a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,10 +10,6 @@ message("CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}")
enable_testing()
-# For "make user_version"
-include("${CMAKE_MODULE_PATH}/GUDHI_user_version_target.txt")
-# For "make doxygen"
-include(GUDHI_doxygen_target)
# This variable is used by Cython CMakeLists.txt to know its path
set(GUDHI_CYTHON_PATH "src/cython")
# For third parties libraries management - To be done last as CGAL updates CMAKE_MODULE_PATH
@@ -38,54 +34,34 @@ if (DEBUG_TRACES)
add_definitions(-DDEBUG_TRACES)
endif()
-include_directories(src/common/include/)
-include_directories(src/Alpha_complex/include/)
-include_directories(src/Bitmap_cubical_complex/include/)
-include_directories(src/Bottleneck_distance/include/)
-include_directories(src/Contraction/include/)
-include_directories(src/Hasse_complex/include/)
-include_directories(src/Persistent_cohomology/include/)
-include_directories(src/Rips_complex/include/)
-include_directories(src/Simplex_tree/include/)
-include_directories(src/Skeleton_blocker/include/)
-include_directories(src/Spatial_searching/include/)
-include_directories(src/Subsampling/include/)
-include_directories(src/Tangential_complex/include/)
-include_directories(src/Witness_complex/include/)
+# Modules list can be found in CMAKE_MODULE_PATH/GUDHI_modules.cmake
+include(GUDHI_modules)
-add_subdirectory(src/common/example)
-add_subdirectory(src/common/test)
-add_subdirectory(src/Simplex_tree/test)
-add_subdirectory(src/Simplex_tree/example)
-add_subdirectory(src/Persistent_cohomology/test)
-add_subdirectory(src/Persistent_cohomology/example)
-add_subdirectory(src/Persistent_cohomology/benchmark)
-add_subdirectory(src/Skeleton_blocker/test)
-add_subdirectory(src/Skeleton_blocker/example)
-add_subdirectory(src/Contraction/example)
-add_subdirectory(src/Witness_complex/test)
-add_subdirectory(src/Witness_complex/example)
-add_subdirectory(src/Bitmap_cubical_complex/test)
-add_subdirectory(src/Bitmap_cubical_complex/example)
-add_subdirectory(src/Alpha_complex/example)
-add_subdirectory(src/Alpha_complex/test)
-add_subdirectory(src/Spatial_searching/example)
-add_subdirectory(src/Spatial_searching/test)
-add_subdirectory(src/Subsampling/example)
-add_subdirectory(src/Subsampling/test)
-add_subdirectory(src/Tangential_complex/example)
-add_subdirectory(src/Tangential_complex/test)
-add_subdirectory(src/Tangential_complex/benchmark)
-add_subdirectory(src/Bottleneck_distance/example)
-add_subdirectory(src/Bottleneck_distance/test)
-add_subdirectory(src/Bottleneck_distance/benchmark)
-add_subdirectory(src/Rips_complex/example)
-add_subdirectory(src/Rips_complex/test)
+# Include module headers
+foreach(GUDHI_MODULE ${GUDHI_MODULES})
+ if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/src/${GUDHI_MODULE}/include/)
+ include_directories(src/${GUDHI_MODULE}/include/)
+ endif()
+endforeach()
-# data points generator
-add_subdirectory(data/points/generator)
+# Include module CMake subdirectories
+# GUDHI_SUB_DIRECTORIES is managed in CMAKE_MODULE_PATH/GUDHI_modules.cmake
+foreach(GUDHI_MODULE ${GUDHI_MODULES})
+ foreach(GUDHI_SUB_DIRECTORY ${GUDHI_SUB_DIRECTORIES})
+ if(EXISTS ${CMAKE_SOURCE_DIR}/src/${GUDHI_MODULE}/${GUDHI_SUB_DIRECTORY}/CMakeLists.txt)
+ add_subdirectory(src/${GUDHI_MODULE}/${GUDHI_SUB_DIRECTORY}/)
+ endif()
+ endforeach()
+endforeach()
add_subdirectory(src/GudhUI)
-# specific for cython module
-add_subdirectory(${GUDHI_CYTHON_PATH})
+if (NOT WITHOUT_GUDHI_PYTHON)
+ # specific for cython module
+ add_subdirectory(${GUDHI_CYTHON_PATH})
+endif()
+
+# For "make user_version" - Requires GUDHI_modules to be performed
+include(GUDHI_user_version_target)
+# For "make doxygen" - Requires GUDHI_user_version_target to be performed
+include(GUDHI_doxygen_target)
diff --git a/data/points/generator/README b/data/points/generator/README
index 951bcfe1..3183a51f 100644
--- a/data/points/generator/README
+++ b/data/points/generator/README
@@ -1,32 +1,3 @@
-=========================== C++ generators =====================================
-
-To build the C++ generators, run in a Terminal:
-
-cd /path-to-gudhi/
-cmake .
-cd /path-to-data-generator/
-make
-
-======================= data_points_generator ==================================
-
-Example of use :
-
-*** Hyper sphere|cube generator
-
-./data_points_generator on sphere onSphere.off 1000 3 15.2
-
- => generates a onSphere.off file with 1000 points randomized on a sphere of dimension 3 and radius 15.2
-
-./data_points_generator in sphere inSphere.off 100 2
-
- => generates a inSphere.off file with 100 points randomized in a sphere of dimension 2 (circle) and radius 1.0 (default)
-
-./data_points_generator in cube inCube.off 10000 3 5.8
-
- => generates a inCube.off file with 10000 points randomized in a cube of dimension 3 and side 5.8
-
-!! Warning: hypegenerator on cube is not available !!
-
===================== aurelien_alvarez_surfaces_in_R8 ==========================
This generator is written in Python.
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ebcb6888..77a03c17 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -7,6 +7,9 @@ enable_testing()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/")
+# To be done first - Modules list can be found in CMAKE_MODULE_PATH/GUDHI_modules.cmake
+include(GUDHI_modules)
+
# For "make doxygen"
set(GUDHI_USER_VERSION_DIR ${CMAKE_SOURCE_DIR})
include(GUDHI_doxygen_target)
@@ -39,27 +42,22 @@ endif()
# Gudhi compilation part
include_directories(include)
-add_subdirectory(example/common)
-add_subdirectory(example/Simplex_tree)
-add_subdirectory(example/Persistent_cohomology)
-add_subdirectory(example/Skeleton_blocker)
-add_subdirectory(example/Contraction)
-add_subdirectory(example/Bitmap_cubical_complex)
-add_subdirectory(example/Witness_complex)
-add_subdirectory(example/Alpha_complex)
-add_subdirectory(example/Rips_complex)
-add_subdirectory(example/Spatial_searching)
-add_subdirectory(example/Subsampling)
-add_subdirectory(example/Tangential_complex)
-add_subdirectory(example/Bottleneck_distance)
-
-# data points generator
-add_subdirectory(data/points/generator)
+# Include module CMake subdirectories
+# GUDHI_SUB_DIRECTORIES is managed in CMAKE_MODULE_PATH/GUDHI_modules.cmake
+foreach(GUDHI_MODULE ${GUDHI_MODULES})
+ foreach(GUDHI_SUB_DIRECTORY ${GUDHI_SUB_DIRECTORIES})
+ if(EXISTS ${CMAKE_SOURCE_DIR}/${GUDHI_SUB_DIRECTORY}/${GUDHI_MODULE}/CMakeLists.txt)
+ add_subdirectory(src/${GUDHI_MODULE}/${GUDHI_SUB_DIRECTORY}/)
+ endif(EXISTS ${CMAKE_SOURCE_DIR}/${GUDHI_SUB_DIRECTORY}/${GUDHI_MODULE}/CMakeLists.txt)
+ endforeach(GUDHI_SUB_DIRECTORY ${GUDHI_SUB_DIRECTORIES})
+endforeach(GUDHI_MODULE ${GUDHI_MODULES})
add_subdirectory(GudhUI)
-# specific for cython module
-add_subdirectory(${GUDHI_CYTHON_PATH})
+if (NOT WITHOUT_GUDHI_PYTHON)
+ # specific for cython module
+ add_subdirectory(${GUDHI_CYTHON_PATH})
+endif()
#---------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------
diff --git a/src/cmake/modules/GUDHI_modules.cmake b/src/cmake/modules/GUDHI_modules.cmake
new file mode 100644
index 00000000..6a26d7bf
--- /dev/null
+++ b/src/cmake/modules/GUDHI_modules.cmake
@@ -0,0 +1,43 @@
+# A function to add a new module in GUDHI
+
+set(GUDHI_MODULES "")
+function(add_gudhi_module file_path)
+ set(GUDHI_MODULES ${GUDHI_MODULES} ${file_path} PARENT_SCOPE)
+endfunction(add_gudhi_module)
+
+# Add your new module in the list, order is not important
+
+add_gudhi_module(common)
+add_gudhi_module(Alpha_complex)
+add_gudhi_module(Bitmap_cubical_complex)
+add_gudhi_module(Bottleneck_distance)
+add_gudhi_module(Contraction)
+add_gudhi_module(Hasse_complex)
+add_gudhi_module(Persistent_cohomology)
+add_gudhi_module(Rips_complex)
+add_gudhi_module(Simplex_tree)
+add_gudhi_module(Skeleton_blocker)
+add_gudhi_module(Spatial_searching)
+add_gudhi_module(Subsampling)
+add_gudhi_module(Tangential_complex)
+add_gudhi_module(Witness_complex)
+
+# message("++ GUDHI_MODULES list is:\"${GUDHI_MODULES}\"")
+
+if (WITH_GUDHI_BENCHMARK)
+ set(GUDHI_SUB_DIRECTORIES "${GUDHI_SUB_DIRECTORIES};benchmark")
+endif()
+if (WITH_GUDHI_EXAMPLE)
+ set(GUDHI_SUB_DIRECTORIES "${GUDHI_SUB_DIRECTORIES};example")
+endif()
+if (NOT WITHOUT_GUDHI_TEST)
+ set(GUDHI_SUB_DIRECTORIES "${GUDHI_SUB_DIRECTORIES};test")
+endif()
+if (NOT WITHOUT_GUDHI_UTILITIES)
+ set(GUDHI_SUB_DIRECTORIES "${GUDHI_SUB_DIRECTORIES};utilities")
+endif()
+
+message("++ GUDHI_SUB_DIRECTORIES list is:\"${GUDHI_SUB_DIRECTORIES}\"")
+
+
+
diff --git a/src/cmake/modules/GUDHI_user_version_target.txt b/src/cmake/modules/GUDHI_user_version_target.cmake
index ca6bcd34..a764e88a 100644
--- a/src/cmake/modules/GUDHI_user_version_target.txt
+++ b/src/cmake/modules/GUDHI_user_version_target.cmake
@@ -47,7 +47,6 @@ if (NOT CMAKE_VERSION VERSION_LESS 2.8.11)
add_custom_command(TARGET user_version PRE_BUILD COMMAND ${CMAKE_COMMAND} -E
copy_directory ${CMAKE_SOURCE_DIR}/src/GudhUI ${GUDHI_USER_VERSION_DIR}/GudhUI)
- set(GUDHI_MODULES "common;Alpha_complex;Bitmap_cubical_complex;Bottleneck_distance;Contraction;Hasse_complex;Persistent_cohomology;Rips_complex;Simplex_tree;Skeleton_blocker;Spatial_searching;Subsampling;Tangential_complex;Witness_complex")
set(GUDHI_DIRECTORIES "doc;example;concept")
set(GUDHI_INCLUDE_DIRECTORIES "include/gudhi;include/gudhi_patches")
diff --git a/src/common/include/gudhi/random_point_generators.h b/src/common/include/gudhi/random_point_generators.h
index 2ec465ef..9df77760 100644
--- a/src/common/include/gudhi/random_point_generators.h
+++ b/src/common/include/gudhi/random_point_generators.h
@@ -282,6 +282,38 @@ std::vector<typename Kernel::Point_d> generate_points_on_sphere_d(std::size_t nu
}
template <typename Kernel>
+std::vector<typename Kernel::Point_d> generate_points_in_ball_d(std::size_t num_points, int dim, double radius) {
+ typedef typename Kernel::Point_d Point;
+ Kernel k;
+ CGAL::Random rng;
+ CGAL::Random_points_in_ball_d<Point> generator(dim, radius);
+ std::vector<Point> points;
+ points.reserve(num_points);
+ for (std::size_t i = 0; i < num_points;) {
+ Point p = *generator++;
+ points.push_back(p);
+ ++i;
+ }
+ return points;
+}
+
+template <typename Kernel>
+std::vector<typename Kernel::Point_d> generate_points_in_cube_d(std::size_t num_points, int dim, double radius) {
+ typedef typename Kernel::Point_d Point;
+ Kernel k;
+ CGAL::Random rng;
+ CGAL::Random_points_in_cube_d<Point> generator(dim, radius);
+ std::vector<Point> points;
+ points.reserve(num_points);
+ for (std::size_t i = 0; i < num_points;) {
+ Point p = *generator++;
+ points.push_back(p);
+ ++i;
+ }
+ return points;
+}
+
+template <typename Kernel>
std::vector<typename Kernel::Point_d> generate_points_on_two_spheres_d(std::size_t num_points, int dim, double radius,
double distance_between_centers,
double radius_noise_percentage = 0.) {
diff --git a/data/points/generator/CMakeLists.txt b/src/common/utilities/CMakeLists.txt
index 88d377a7..88d377a7 100644
--- a/data/points/generator/CMakeLists.txt
+++ b/src/common/utilities/CMakeLists.txt
diff --git a/src/common/utilities/README b/src/common/utilities/README
new file mode 100644
index 00000000..f2ece556
--- /dev/null
+++ b/src/common/utilities/README
@@ -0,0 +1,19 @@
+======================= data_points_generator ==================================
+
+Example of use :
+
+*** Hyper sphere|cube generator
+
+./data_points_generator on sphere onSphere.off 1000 3 15.2
+
+ => generates a onSphere.off file with 1000 points randomized on a sphere of dimension 3 and radius 15.2
+
+./data_points_generator in sphere inSphere.off 100 2
+
+ => generates a inSphere.off file with 100 points randomized in a sphere of dimension 2 (circle) and radius 1.0 (default)
+
+./data_points_generator in cube inCube.off 10000 3 5.8
+
+ => generates a inCube.off file with 10000 points randomized in a cube of dimension 3 and side 5.8
+
+!! Warning: hypegenerator on cube is not available !!
diff --git a/data/points/generator/hypergenerator.cpp b/src/common/utilities/hypergenerator.cpp
index 5831de18..0f310a13 100644
--- a/data/points/generator/hypergenerator.cpp
+++ b/src/common/utilities/hypergenerator.cpp
@@ -20,8 +20,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <gudhi/random_point_generators.h>
+
#include <CGAL/Epick_d.h>
-#include <CGAL/point_generators_d.h>
#include <CGAL/algorithm.h>
#include <CGAL/assertions.h>
@@ -76,10 +77,20 @@ int main(int argc, char **argv) {
usage(argv[0]);
}
- bool sphere = false;
+ enum class Data_shape { sphere, cube, curve, torus, klein, undefined } ;
+
+ Data_shape shape = Data_shape::undefined;
if (memcmp(argv[2], "sphere", sizeof("sphere")) == 0) {
- sphere = true;
- } else if (memcmp(argv[2], "cube", sizeof("cube")) != 0) {
+ shape = Data_shape::sphere;
+ } else if (memcmp(argv[2], "cube", sizeof("cube")) == 0) {
+ shape = Data_shape::cube;
+ } else if (memcmp(argv[2], "curve", sizeof("curve")) == 0) {
+ shape = Data_shape::curve;
+ } else if (memcmp(argv[2], "torus", sizeof("torus")) == 0) {
+ shape = Data_shape::torus;
+ } else if (memcmp(argv[2], "klein", sizeof("klein")) == 0) {
+ shape = Data_shape::klein;
+ } else {
std::cerr << "Error: " << argv[2] << " is not correct" << std::endl;
usage(argv[0]);
}
@@ -94,25 +105,70 @@ int main(int argc, char **argv) {
}
if (diagram_out.is_open()) {
- // Instanciate a random point generator
- CGAL::Random rng(0);
// Generate "points_number" random points in a vector
std::vector<Point> points;
if (in) {
- if (sphere) {
- CGAL::Random_points_in_ball_d<Point> rand_it(dimension, radius, rng);
- CGAL::cpp11::copy_n(rand_it, points_number, std::back_inserter(points));
- } else {
- CGAL::Random_points_in_cube_d<Point> rand_it(dimension, radius, rng);
- CGAL::cpp11::copy_n(rand_it, points_number, std::back_inserter(points));
+ switch (shape) {
+ case Data_shape::sphere:
+ points = Gudhi::generate_points_in_ball_d<K>(points_number, dimension, radius);
+ break;
+ case Data_shape::cube:
+ points = Gudhi::generate_points_in_ball_d<K>(points_number, dimension, radius);
+ break;
+ case Data_shape::curve:
+ std::cerr << "Sorry: in curve is not available" << std::endl;
+ usage(argv[0]);
+ break;
+ case Data_shape::torus:
+ std::cerr << "Sorry: in torus is not available" << std::endl;
+ usage(argv[0]);
+ break;
+ case Data_shape::klein:
+ std::cerr << "Sorry: in klein is not available" << std::endl;
+ usage(argv[0]);
+ break;
+ default:
+ usage(argv[0]);
+ break;
}
} else { // means "on"
- if (sphere) {
- CGAL::Random_points_on_sphere_d<Point> rand_it(dimension, radius, rng);
- CGAL::cpp11::copy_n(rand_it, points_number, std::back_inserter(points));
- } else {
- std::cerr << "Sorry: on cube is not available" << std::endl;
- usage(argv[0]);
+ switch (shape) {
+ case Data_shape::sphere:
+ points = Gudhi::generate_points_on_sphere_d<K>(points_number, dimension, radius);
+ break;
+ case Data_shape::cube:
+ std::cerr << "Sorry: on cube is not available" << std::endl;
+ usage(argv[0]);
+ break;
+ case Data_shape::curve:
+ points = Gudhi::generate_points_on_moment_curve<K>(points_number, dimension, -radius/2., radius/2.);
+ break;
+ case Data_shape::torus:
+ if (dimension == 3)
+ points = Gudhi::generate_points_on_torus_3D<K>(points_number, dimension, radius, radius/2.);
+ else
+ points = Gudhi::generate_points_on_torus_d<K>(points_number, dimension, true);
+ break;
+ case Data_shape::klein:
+ switch (dimension) {
+ case 3:
+ points = Gudhi::generate_points_on_klein_bottle_3D<K>(points_number, radius, radius/2., true);
+ break;
+ case 4:
+ points = Gudhi::generate_points_on_klein_bottle_4D<K>(points_number, radius, radius/2., 0., true);
+ break;
+ case 5:
+ points = Gudhi::generate_points_on_klein_bottle_variant_5D<K>(points_number, radius, radius/2., true);
+ break;
+ default:
+ std::cerr << "Sorry: on klein is only available for dimension 3, 4 and 5" << std::endl;
+ usage(argv[0]);
+ break;
+ }
+ break;
+ default:
+ usage(argv[0]);
+ break;
}
}