diff options
author | Gard Spreemann <gspr@nonempty.org> | 2019-09-25 14:29:41 +0200 |
---|---|---|
committer | Gard Spreemann <gspr@nonempty.org> | 2019-09-25 14:29:41 +0200 |
commit | 599d68cd916f533bdb66dd9e684dd5703233b6bb (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /example/Witness_complex | |
parent | a2e642954ae39025e041471d486ecbac25dff440 (diff) |
Delete all files in order to incorporate upstream's move to git.
Diffstat (limited to 'example/Witness_complex')
-rw-r--r-- | example/Witness_complex/CMakeLists.txt | 34 | ||||
-rw-r--r-- | example/Witness_complex/example_nearest_landmark_table.cpp | 47 | ||||
-rw-r--r-- | example/Witness_complex/example_strong_witness_complex_off.cpp | 57 | ||||
-rw-r--r-- | example/Witness_complex/example_witness_complex_off.cpp | 62 | ||||
-rw-r--r-- | example/Witness_complex/example_witness_complex_sphere.cpp | 70 | ||||
-rw-r--r-- | example/Witness_complex/generators.h | 166 |
6 files changed, 0 insertions, 436 deletions
diff --git a/example/Witness_complex/CMakeLists.txt b/example/Witness_complex/CMakeLists.txt deleted file mode 100644 index 3d838c0d..00000000 --- a/example/Witness_complex/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -project(Witness_complex_examples) - -add_executable ( Witness_complex_example_nearest_landmark_table example_nearest_landmark_table.cpp ) -if (TBB_FOUND) - target_link_libraries(Witness_complex_example_nearest_landmark_table ${TBB_LIBRARIES}) -endif() -add_test(NAME Witness_complex_example_nearest_landmark_table - COMMAND $<TARGET_FILE:Witness_complex_example_nearest_landmark_table>) - -install(TARGETS Witness_complex_example_nearest_landmark_table DESTINATION bin) - -# CGAL and Eigen3 are required for Euclidean version of Witness -if (NOT CGAL_WITH_EIGEN3_VERSION VERSION_LESS 4.6.0) - add_executable( Witness_complex_example_off example_witness_complex_off.cpp ) - add_executable ( Witness_complex_example_sphere example_witness_complex_sphere.cpp ) - - add_executable( Witness_complex_example_strong_off example_strong_witness_complex_off.cpp ) - target_link_libraries(Witness_complex_example_strong_off) - - add_test(NAME Witness_complex_example_off_test_torus - COMMAND $<TARGET_FILE:Witness_complex_example_off> - "${CMAKE_SOURCE_DIR}/data/points/tore3D_1307.off" "20" "1.0" "3") - add_test(NAME Witness_complex_example_test_sphere_10 - COMMAND $<TARGET_FILE:Witness_complex_example_sphere> "10") - add_test(NAME Witness_complex_example_strong_off_test_torus - COMMAND $<TARGET_FILE:Witness_complex_example_strong_off> - "${CMAKE_SOURCE_DIR}/data/points/tore3D_1307.off" "20" "1.0" "3") - - install(TARGETS Witness_complex_example_off DESTINATION bin) - install(TARGETS Witness_complex_example_sphere DESTINATION bin) - install(TARGETS Witness_complex_example_strong_off DESTINATION bin) - - -endif (NOT CGAL_WITH_EIGEN3_VERSION VERSION_LESS 4.6.0) diff --git a/example/Witness_complex/example_nearest_landmark_table.cpp b/example/Witness_complex/example_nearest_landmark_table.cpp deleted file mode 100644 index acaf7c54..00000000 --- a/example/Witness_complex/example_nearest_landmark_table.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#define BOOST_PARAMETER_MAX_ARITY 12 - -#include <gudhi/Simplex_tree.h> -#include <gudhi/Witness_complex.h> -#include <gudhi/Persistent_cohomology.h> - -#include <iostream> -#include <fstream> -#include <utility> -#include <string> -#include <vector> - -int main(int argc, char * const argv[]) { - using Nearest_landmark_range = std::vector<std::pair<std::size_t, double>>; - using Nearest_landmark_table = std::vector<Nearest_landmark_range>; - using Witness_complex = Gudhi::witness_complex::Witness_complex<Nearest_landmark_table>; - using Simplex_tree = Gudhi::Simplex_tree<>; - using Field_Zp = Gudhi::persistent_cohomology::Field_Zp; - using Persistent_cohomology = Gudhi::persistent_cohomology::Persistent_cohomology<Simplex_tree, Field_Zp>; - - Simplex_tree simplex_tree; - Nearest_landmark_table nlt; - - // Example contains 5 witnesses and 5 landmarks - Nearest_landmark_range w0 = {std::make_pair(0, 0), std::make_pair(1, 1), std::make_pair(2, 2), - std::make_pair(3, 3), std::make_pair(4, 4)}; nlt.push_back(w0); - Nearest_landmark_range w1 = {std::make_pair(1, 0), std::make_pair(2, 1), std::make_pair(3, 2), - std::make_pair(4, 3), std::make_pair(0, 4)}; nlt.push_back(w1); - Nearest_landmark_range w2 = {std::make_pair(2, 0), std::make_pair(3, 1), std::make_pair(4, 2), - std::make_pair(0, 3), std::make_pair(1, 4)}; nlt.push_back(w2); - Nearest_landmark_range w3 = {std::make_pair(3, 0), std::make_pair(4, 1), std::make_pair(0, 2), - std::make_pair(1, 3), std::make_pair(2, 4)}; nlt.push_back(w3); - Nearest_landmark_range w4 = {std::make_pair(4, 0), std::make_pair(0, 1), std::make_pair(1, 2), - std::make_pair(2, 3), std::make_pair(3, 4)}; nlt.push_back(w4); - - Witness_complex witness_complex(nlt); - witness_complex.create_complex(simplex_tree, 4.1); - - std::cout << "Number of simplices: " << simplex_tree.num_simplices() << std::endl; - - Persistent_cohomology pcoh(simplex_tree); - // initializes the coefficient field for homology - pcoh.init_coefficients(11); - - pcoh.compute_persistent_cohomology(-0.1); - pcoh.output_diagram(); -} diff --git a/example/Witness_complex/example_strong_witness_complex_off.cpp b/example/Witness_complex/example_strong_witness_complex_off.cpp deleted file mode 100644 index 19f73836..00000000 --- a/example/Witness_complex/example_strong_witness_complex_off.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include <gudhi/Simplex_tree.h> -#include <gudhi/Euclidean_strong_witness_complex.h> -#include <gudhi/pick_n_random_points.h> -#include <gudhi/choose_n_farthest_points.h> -#include <gudhi/Points_off_io.h> - -#include <CGAL/Epick_d.h> - -#include <iostream> -#include <fstream> -#include <ctime> -#include <string> -#include <vector> - -using K = CGAL::Epick_d<CGAL::Dynamic_dimension_tag>; -using Point_d = typename K::Point_d; -using Witness_complex = Gudhi::witness_complex::Euclidean_strong_witness_complex<K>; -using Point_vector = std::vector<Point_d>; - -int main(int argc, char* const argv[]) { - if (argc != 5) { - std::cerr << "Usage: " << argv[0] << " path_to_point_file number_of_landmarks max_squared_alpha limit_dimension\n"; - return 0; - } - - std::string file_name = argv[1]; - int nbL = atoi(argv[2]), lim_dim = atoi(argv[4]); - double alpha2 = atof(argv[3]); - clock_t start, end; - Gudhi::Simplex_tree<> simplex_tree; - - // Read the point file - Point_vector point_vector, landmarks; - Gudhi::Points_off_reader<Point_d> off_reader(file_name); - if (!off_reader.is_valid()) { - std::cerr << "Strong witness complex - Unable to read file " << file_name << "\n"; - exit(-1); // ----- >> - } - point_vector = Point_vector(off_reader.get_point_cloud()); - - std::cout << "Successfully read " << point_vector.size() << " points.\n"; - std::cout << "Ambient dimension is " << point_vector[0].dimension() << ".\n"; - - // Choose landmarks (decomment one of the following two lines) - // Gudhi::subsampling::pick_n_random_points(point_vector, nbL, std::back_inserter(landmarks)); - Gudhi::subsampling::choose_n_farthest_points(K(), point_vector, nbL, Gudhi::subsampling::random_starting_point, - std::back_inserter(landmarks)); - - // Compute witness complex - start = clock(); - Witness_complex witness_complex(landmarks, point_vector); - - witness_complex.create_complex(simplex_tree, alpha2, lim_dim); - end = clock(); - std::cout << "Strong witness complex took " << static_cast<double>(end - start) / CLOCKS_PER_SEC << " s. \n"; - std::cout << "Number of simplices is: " << simplex_tree.num_simplices() << "\n"; -} diff --git a/example/Witness_complex/example_witness_complex_off.cpp b/example/Witness_complex/example_witness_complex_off.cpp deleted file mode 100644 index be11c955..00000000 --- a/example/Witness_complex/example_witness_complex_off.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include <sys/types.h> -#include <sys/stat.h> - -#include <gudhi/Simplex_tree.h> -#include <gudhi/Euclidean_witness_complex.h> -#include <gudhi/pick_n_random_points.h> -#include <gudhi/choose_n_farthest_points.h> -#include <gudhi/Points_off_io.h> - -#include <CGAL/Epick_d.h> - -#include <iostream> -#include <fstream> -#include <ctime> -#include <string> -#include <vector> - -using K = CGAL::Epick_d<CGAL::Dynamic_dimension_tag>; -using Point_d = K::Point_d; -using Witness_complex = Gudhi::witness_complex::Euclidean_witness_complex<K>; -using Point_vector = std::vector< Point_d >; - -int main(int argc, char * const argv[]) { - if (argc != 5) { - std::cerr << "Usage: " << argv[0] - << " path_to_point_file number_of_landmarks max_squared_alpha limit_dimension\n"; - return 0; - } - - std::string file_name = argv[1]; - int nbL = atoi(argv[2]), lim_dim = atoi(argv[4]); - double alpha2 = atof(argv[3]); - clock_t start, end; - Gudhi::Simplex_tree<> simplex_tree; - - // Read the point file - Point_vector point_vector, landmarks; - Gudhi::Points_off_reader<Point_d> off_reader(file_name); - if (!off_reader.is_valid()) { - std::cerr << "Witness complex - Unable to read file " << file_name << "\n"; - exit(-1); // ----- >> - } - point_vector = Point_vector(off_reader.get_point_cloud()); - - std::cout << "Successfully read " << point_vector.size() << " points.\n"; - std::cout << "Ambient dimension is " << point_vector[0].dimension() << ".\n"; - - // Choose landmarks (decomment one of the following two lines) - // Gudhi::subsampling::pick_n_random_points(point_vector, nbL, std::back_inserter(landmarks)); - Gudhi::subsampling::choose_n_farthest_points(K(), point_vector, nbL, Gudhi::subsampling::random_starting_point, std::back_inserter(landmarks)); - - // Compute witness complex - start = clock(); - Witness_complex witness_complex(landmarks, - point_vector); - - witness_complex.create_complex(simplex_tree, alpha2, lim_dim); - end = clock(); - std::cout << "Witness complex took " - << static_cast<double>(end - start) / CLOCKS_PER_SEC << " s. \n"; - std::cout << "Number of simplices is: " << simplex_tree.num_simplices() << "\n"; -} diff --git a/example/Witness_complex/example_witness_complex_sphere.cpp b/example/Witness_complex/example_witness_complex_sphere.cpp deleted file mode 100644 index 9e3c972d..00000000 --- a/example/Witness_complex/example_witness_complex_sphere.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#define BOOST_PARAMETER_MAX_ARITY 12 - -#include <gudhi/Simplex_tree.h> -#include <gudhi/Euclidean_witness_complex.h> -#include <gudhi/pick_n_random_points.h> -#include <gudhi/choose_n_farthest_points.h> -#include <gudhi/reader_utils.h> - -#include <CGAL/Epick_d.h> - -#include <iostream> -#include <fstream> -#include <ctime> -#include <utility> -#include <string> -#include <vector> - -#include "generators.h" - -/** Write a gnuplot readable file. - * Data range is a random access range of pairs (arg, value) - */ -template <typename Data_range> -void write_data(Data_range& data, std::string filename) { - std::ofstream ofs(filename, std::ofstream::out); - for (auto entry : data) ofs << entry.first << ", " << entry.second << "\n"; - ofs.close(); -} - -int main(int argc, char* const argv[]) { - using Kernel = CGAL::Epick_d<CGAL::Dynamic_dimension_tag>; - using Witness_complex = Gudhi::witness_complex::Euclidean_witness_complex<Kernel>; - - if (argc != 2) { - std::cerr << "Usage: " << argv[0] << " number_of_landmarks \n"; - return 0; - } - - int number_of_landmarks = atoi(argv[1]); - - std::vector<std::pair<int, double> > l_time; - - // Generate points - for (int nbP = 500; nbP < 10000; nbP += 500) { - clock_t start, end; - // Construct the Simplex Tree - Gudhi::Simplex_tree<> simplex_tree; - Point_Vector point_vector, landmarks; - generate_points_sphere(point_vector, nbP, 4); - std::cout << "Successfully generated " << point_vector.size() << " points.\n"; - std::cout << "Ambient dimension is " << point_vector[0].size() << ".\n"; - - // Choose landmarks - start = clock(); - // Gudhi::subsampling::pick_n_random_points(point_vector, number_of_landmarks, std::back_inserter(landmarks)); - Gudhi::subsampling::choose_n_farthest_points(K(), point_vector, number_of_landmarks, - Gudhi::subsampling::random_starting_point, - std::back_inserter(landmarks)); - - // Compute witness complex - Witness_complex witness_complex(landmarks, point_vector); - witness_complex.create_complex(simplex_tree, 0); - end = clock(); - double time = static_cast<double>(end - start) / CLOCKS_PER_SEC; - std::cout << "Witness complex for " << number_of_landmarks << " landmarks took " << time << " s. \n"; - std::cout << "Number of simplices is: " << simplex_tree.num_simplices() << "\n"; - l_time.push_back(std::make_pair(nbP, time)); - } - write_data(l_time, "w_time.dat"); -} diff --git a/example/Witness_complex/generators.h b/example/Witness_complex/generators.h deleted file mode 100644 index 4b755daa..00000000 --- a/example/Witness_complex/generators.h +++ /dev/null @@ -1,166 +0,0 @@ -/* This file is part of the Gudhi Library. The Gudhi library - * (Geometric Understanding in Higher Dimensions) is a generic C++ - * library for computational topology. - * - * Author(s): Siargey Kachanovich - * - * Copyright (C) 2015 Inria - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef GENERATORS_H_ -#define GENERATORS_H_ - -#include <CGAL/Epick_d.h> -#include <CGAL/point_generators_d.h> -#include <CGAL/Random.h> - -#include <fstream> -#include <string> -#include <vector> -#include <cmath> - -using K = CGAL::Epick_d<CGAL::Dynamic_dimension_tag>; -using FT = K::FT; -using Point_d = K::Point_d; -using Point_Vector = std::vector<Point_d>; -using Random_cube_iterator = CGAL::Random_points_in_cube_d<Point_d>; -using Random_point_iterator = CGAL::Random_points_in_ball_d<Point_d>; - -/** - * \brief Rock age method of reading off file - * - */ -inline void -off_reader_cust(std::string file_name, std::vector<Point_d> & points) { - std::ifstream in_file(file_name.c_str(), std::ios::in); - if (!in_file.is_open()) { - std::cerr << "Unable to open file " << file_name << std::endl; - return; - } - std::string line; - double x; - // Line OFF. No need in it - if (!getline(in_file, line)) { - std::cerr << "No line OFF\n"; - return; - } - // Line with 3 numbers. No need - if (!getline(in_file, line)) { - std::cerr << "No line with 3 numbers\n"; - return; - } - // Reading points - while (getline(in_file, line)) { - std::vector< double > point; - std::istringstream iss(line); - while (iss >> x) { - point.push_back(x); - } - points.push_back(Point_d(point)); - } - in_file.close(); -} - -/** - * \brief Customized version of read_points - * which takes into account a possible nbP first line - * - */ -inline void -read_points_cust(std::string file_name, Point_Vector & points) { - std::ifstream in_file(file_name.c_str(), std::ios::in); - if (!in_file.is_open()) { - std::cerr << "Unable to open file " << file_name << std::endl; - return; - } - std::string line; - double x; - while (getline(in_file, line)) { - std::vector< double > point; - std::istringstream iss(line); - while (iss >> x) { - point.push_back(x); - } - Point_d p(point.begin(), point.end()); - if (point.size() != 1) - points.push_back(p); - } - in_file.close(); -} - -/** \brief Generate points on a grid in a cube of side 2 - * having {+-1}^D as vertices and insert them in W. - * The grid has "width" points on each side. - * If torus is true then it is supposed that the cube represents - * a flat torus, hence the opposite borders are associated. - * The points on border in this case are not placed twice. - */ -void generate_points_grid(Point_Vector& W, int width, int D, bool torus) { - int nb_points = 1; - for (int i = 0; i < D; ++i) - nb_points *= width; - for (int i = 0; i < nb_points; ++i) { - std::vector<double> point; - int cell_i = i; - for (int l = 0; l < D; ++l) { - if (torus) - point.push_back(-1 + (2.0 / (width - 1))*(cell_i % width)); - else - point.push_back(-1 + (2.0 / width)*(cell_i % width)); - // attention: the bottom and the right are covered too! - cell_i /= width; - } - W.push_back(point); - } -} - -/** \brief Generate nbP points uniformly in a cube of side 2 - * having {+-1}^dim as its vertices and insert them in W. - */ -void generate_points_random_box(Point_Vector& W, int nbP, int dim) { - Random_cube_iterator rp(dim, 1.0); - for (int i = 0; i < nbP; i++) { - W.push_back(*rp++); - } -} - -/** \brief Generate nbP points uniformly on a (dim-1)-sphere - * and insert them in W. - */ -void generate_points_sphere(Point_Vector& W, int nbP, int dim) { - CGAL::Random_points_on_sphere_d<Point_d> rp(dim, 1); - for (int i = 0; i < nbP; i++) - W.push_back(*rp++); -} - -/** \brief Generate nbP points on a (flat) d-torus embedded in R^{2d} - * - */ -void generate_points_torus(Point_Vector& W, int nbP, int dim) { - CGAL::Random rand; - const double pi = std::acos(-1); - for (int i = 0; i < nbP; i++) { - std::vector<FT> point; - for (int j = 0; j < dim; j++) { - double alpha = rand.uniform_real(static_cast<double>(0), 2*pi); - point.push_back(sin(alpha)); - point.push_back(cos(alpha)); - } - W.push_back(Point_d(point)); - } -} - -#endif // GENERATORS_H_ |