diff options
Diffstat (limited to 'src/Cech_complex')
-rw-r--r-- | src/Cech_complex/benchmark/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/Cech_complex/benchmark/cech_complex_benchmark.cpp | 24 | ||||
-rw-r--r-- | src/Cech_complex/example/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/Cech_complex/example/cech_complex_example_from_points.cpp | 12 | ||||
-rw-r--r-- | src/Cech_complex/example/cech_complex_step_by_step.cpp | 28 | ||||
-rw-r--r-- | src/Cech_complex/include/gudhi/Cech_complex_blocker.h | 4 | ||||
-rw-r--r-- | src/Cech_complex/test/test_cech_complex.cpp | 50 | ||||
-rw-r--r-- | src/Cech_complex/utilities/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/Cech_complex/utilities/cech_persistence.cpp | 28 |
9 files changed, 76 insertions, 76 deletions
diff --git a/src/Cech_complex/benchmark/CMakeLists.txt b/src/Cech_complex/benchmark/CMakeLists.txt index b7697764..c04bca53 100644 --- a/src/Cech_complex/benchmark/CMakeLists.txt +++ b/src/Cech_complex/benchmark/CMakeLists.txt @@ -5,7 +5,7 @@ project(Cech_complex_benchmark) file(COPY "${CMAKE_SOURCE_DIR}/data/points/tore3D_1307.off" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) add_executable(cech_complex_benchmark cech_complex_benchmark.cpp) -target_link_libraries(cech_complex_benchmark ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY}) +target_link_libraries(cech_complex_benchmark Boost::filesystem) if (TBB_FOUND) target_link_libraries(cech_complex_benchmark ${TBB_LIBRARIES}) diff --git a/src/Cech_complex/benchmark/cech_complex_benchmark.cpp b/src/Cech_complex/benchmark/cech_complex_benchmark.cpp index d2d71dbf..e489e8a4 100644 --- a/src/Cech_complex/benchmark/cech_complex_benchmark.cpp +++ b/src/Cech_complex/benchmark/cech_complex_benchmark.cpp @@ -68,24 +68,24 @@ int main(int argc, char* argv[]) { Proximity_graph euclidean_prox_graph = Gudhi::compute_proximity_graph<Simplex_tree>( off_reader.get_point_cloud(), threshold, Gudhi::Euclidean_distance()); - std::cout << euclidean_clock << std::endl; + std::clog << euclidean_clock << std::endl; Gudhi::Clock miniball_clock("Minimal_enclosing_ball_radius"); // Compute the proximity graph of the points Proximity_graph miniball_prox_graph = Gudhi::compute_proximity_graph<Simplex_tree>( off_reader.get_point_cloud(), threshold, Minimal_enclosing_ball_radius()); - std::cout << miniball_clock << std::endl; + std::clog << miniball_clock << std::endl; Gudhi::Clock common_miniball_clock("Gudhi::Minimal_enclosing_ball_radius()"); // Compute the proximity graph of the points Proximity_graph common_miniball_prox_graph = Gudhi::compute_proximity_graph<Simplex_tree>( off_reader.get_point_cloud(), threshold, Gudhi::Minimal_enclosing_ball_radius()); - std::cout << common_miniball_clock << std::endl; + std::clog << common_miniball_clock << std::endl; boost::filesystem::path full_path(boost::filesystem::current_path()); - std::cout << "Current path is : " << full_path << std::endl; + std::clog << "Current path is : " << full_path << std::endl; - std::cout << "File name;Radius;Rips time;Cech time; Ratio Rips/Cech time;Rips nb simplices;Cech nb simplices;" + std::clog << "File name;Radius;Rips time;Cech time; Ratio Rips/Cech time;Rips nb simplices;Cech nb simplices;" << std::endl; boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end for (boost::filesystem::directory_iterator itr(boost::filesystem::current_path()); itr != end_itr; ++itr) { @@ -96,8 +96,8 @@ int main(int argc, char* argv[]) { Point p0 = off_reader.get_point_cloud()[0]; for (Filtration_value radius = 0.1; radius < 0.4; radius += 0.1) { - std::cout << itr->path().stem() << ";"; - std::cout << radius << ";"; + std::clog << itr->path().stem() << ";"; + std::clog << radius << ";"; Gudhi::Clock rips_clock("Rips computation"); Rips_complex rips_complex_from_points(off_reader.get_point_cloud(), radius, Gudhi::Minimal_enclosing_ball_radius()); @@ -107,7 +107,7 @@ int main(int argc, char* argv[]) { // Display information about the Rips complex // ------------------------------------------ double rips_sec = rips_clock.num_seconds(); - std::cout << rips_sec << ";"; + std::clog << rips_sec << ";"; Gudhi::Clock cech_clock("Cech computation"); Cech_complex cech_complex_from_points(off_reader.get_point_cloud(), radius); @@ -117,12 +117,12 @@ int main(int argc, char* argv[]) { // Display information about the Cech complex // ------------------------------------------ double cech_sec = cech_clock.num_seconds(); - std::cout << cech_sec << ";"; - std::cout << cech_sec / rips_sec << ";"; + std::clog << cech_sec << ";"; + std::clog << cech_sec / rips_sec << ";"; assert(rips_stree.num_simplices() >= cech_stree.num_simplices()); - std::cout << rips_stree.num_simplices() << ";"; - std::cout << cech_stree.num_simplices() << ";" << std::endl; + std::clog << rips_stree.num_simplices() << ";"; + std::clog << cech_stree.num_simplices() << ";" << std::endl; } } } diff --git a/src/Cech_complex/example/CMakeLists.txt b/src/Cech_complex/example/CMakeLists.txt index ab391215..98757988 100644 --- a/src/Cech_complex/example/CMakeLists.txt +++ b/src/Cech_complex/example/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.6) project(Cech_complex_examples) add_executable ( Cech_complex_example_step_by_step cech_complex_step_by_step.cpp ) -target_link_libraries(Cech_complex_example_step_by_step ${Boost_PROGRAM_OPTIONS_LIBRARY}) +target_link_libraries(Cech_complex_example_step_by_step Boost::program_options) if (TBB_FOUND) target_link_libraries(Cech_complex_example_step_by_step ${TBB_LIBRARIES}) endif() diff --git a/src/Cech_complex/example/cech_complex_example_from_points.cpp b/src/Cech_complex/example/cech_complex_example_from_points.cpp index 3cc5a4df..1a1f708c 100644 --- a/src/Cech_complex/example/cech_complex_example_from_points.cpp +++ b/src/Cech_complex/example/cech_complex_example_from_points.cpp @@ -37,18 +37,18 @@ int main() { // ---------------------------------------------------------------------------- // Display information about the one skeleton Cech complex // ---------------------------------------------------------------------------- - std::cout << "Cech complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " + std::clog << "Cech complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - std::cout << "Iterator on Cech complex simplices in the filtration order, with [filtration value]:" << std::endl; + std::clog << "Iterator on Cech complex simplices in the filtration order, with [filtration value]:" << std::endl; for (auto f_simplex : stree.filtration_simplex_range()) { - std::cout << " ( "; + std::clog << " ( "; for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; + std::clog << vertex << " "; } - std::cout << ") -> " + std::clog << ") -> " << "[" << stree.filtration(f_simplex) << "] "; - std::cout << std::endl; + std::clog << std::endl; } return 0; } diff --git a/src/Cech_complex/example/cech_complex_step_by_step.cpp b/src/Cech_complex/example/cech_complex_step_by_step.cpp index b3d05697..f59f0293 100644 --- a/src/Cech_complex/example/cech_complex_step_by_step.cpp +++ b/src/Cech_complex/example/cech_complex_step_by_step.cpp @@ -51,12 +51,12 @@ class Cech_blocker { for (auto vertex : simplex_tree_.simplex_vertex_range(sh)) { points.push_back(point_cloud_[vertex]); #ifdef DEBUG_TRACES - std::cout << "#(" << vertex << ")#"; + std::clog << "#(" << vertex << ")#"; #endif // DEBUG_TRACES } Filtration_value radius = Gudhi::Minimal_enclosing_ball_radius()(points); #ifdef DEBUG_TRACES - std::cout << "radius = " << radius << " - " << (radius > max_radius_) << std::endl; + std::clog << "radius = " << radius << " - " << (radius > max_radius_) << std::endl; #endif // DEBUG_TRACES simplex_tree_.assign_filtration(sh, radius); return (radius > max_radius_); @@ -96,23 +96,23 @@ int main(int argc, char* argv[]) { // expand the graph until dimension dim_max st.expansion_with_blockers(dim_max, Cech_blocker(st, max_radius, off_reader.get_point_cloud())); - std::cout << "The complex contains " << st.num_simplices() << " simplices \n"; - std::cout << " and has dimension " << st.dimension() << " \n"; + std::clog << "The complex contains " << st.num_simplices() << " simplices \n"; + std::clog << " and has dimension " << st.dimension() << " \n"; // Sort the simplices in the order of the filtration st.initialize_filtration(); #if DEBUG_TRACES - std::cout << "********************************************************************\n"; - std::cout << "* The complex contains " << st.num_simplices() << " simplices - dimension=" << st.dimension() << "\n"; - std::cout << "* Iterator on Simplices in the filtration, with [filtration value]:\n"; + std::clog << "********************************************************************\n"; + std::clog << "* The complex contains " << st.num_simplices() << " simplices - dimension=" << st.dimension() << "\n"; + std::clog << "* Iterator on Simplices in the filtration, with [filtration value]:\n"; for (auto f_simplex : st.filtration_simplex_range()) { - std::cout << " " + std::clog << " " << "[" << st.filtration(f_simplex) << "] "; for (auto vertex : st.simplex_vertex_range(f_simplex)) { - std::cout << static_cast<int>(vertex) << " "; + std::clog << static_cast<int>(vertex) << " "; } - std::cout << std::endl; + std::clog << std::endl; } #endif // DEBUG_TRACES @@ -144,11 +144,11 @@ void program_options(int argc, char* argv[], std::string& off_file_points, Filtr po::notify(vm); if (vm.count("help") || !vm.count("input-file")) { - std::cout << std::endl; - std::cout << "Construct a Cech complex defined on a set of input points.\n \n"; + std::clog << std::endl; + std::clog << "Construct a Cech complex defined on a set of input points.\n \n"; - std::cout << "Usage: " << argv[0] << " [options] input-file" << std::endl << std::endl; - std::cout << visible << std::endl; + std::clog << "Usage: " << argv[0] << " [options] input-file" << std::endl << std::endl; + std::clog << visible << std::endl; exit(-1); } } diff --git a/src/Cech_complex/include/gudhi/Cech_complex_blocker.h b/src/Cech_complex/include/gudhi/Cech_complex_blocker.h index 068cdde3..31b9aab5 100644 --- a/src/Cech_complex/include/gudhi/Cech_complex_blocker.h +++ b/src/Cech_complex/include/gudhi/Cech_complex_blocker.h @@ -53,12 +53,12 @@ class Cech_blocker { for (auto vertex : sc_ptr_->simplex_vertex_range(sh)) { points.push_back(cc_ptr_->get_point(vertex)); #ifdef DEBUG_TRACES - std::cout << "#(" << vertex << ")#"; + std::clog << "#(" << vertex << ")#"; #endif // DEBUG_TRACES } Filtration_value radius = Gudhi::Minimal_enclosing_ball_radius()(points); #ifdef DEBUG_TRACES - if (radius > cc_ptr_->max_radius()) std::cout << "radius > max_radius => expansion is blocked\n"; + if (radius > cc_ptr_->max_radius()) std::clog << "radius > max_radius => expansion is blocked\n"; #endif // DEBUG_TRACES sc_ptr_->assign_filtration(sh, radius); return (radius > cc_ptr_->max_radius()); diff --git a/src/Cech_complex/test/test_cech_complex.cpp b/src/Cech_complex/test/test_cech_complex.cpp index c6b15d7f..6e00d7b5 100644 --- a/src/Cech_complex/test/test_cech_complex.cpp +++ b/src/Cech_complex/test/test_cech_complex.cpp @@ -58,7 +58,7 @@ BOOST_AUTO_TEST_CASE(Cech_complex_for_documentation) { points.push_back({-0.5, 2.}); // 10 Filtration_value max_radius = 1.0; - std::cout << "========== NUMBER OF POINTS = " << points.size() << " - Cech max_radius = " << max_radius + std::clog << "========== NUMBER OF POINTS = " << points.size() << " - Cech max_radius = " << max_radius << "==========" << std::endl; Cech_complex cech_complex_for_doc(points, max_radius); @@ -72,14 +72,14 @@ BOOST_AUTO_TEST_CASE(Cech_complex_for_documentation) { const int DIMENSION_1 = 1; Simplex_tree st; cech_complex_for_doc.create_complex(st, DIMENSION_1); - std::cout << "st.dimension()=" << st.dimension() << std::endl; + std::clog << "st.dimension()=" << st.dimension() << std::endl; BOOST_CHECK(st.dimension() == DIMENSION_1); const int NUMBER_OF_VERTICES = 11; - std::cout << "st.num_vertices()=" << st.num_vertices() << std::endl; + std::clog << "st.num_vertices()=" << st.num_vertices() << std::endl; BOOST_CHECK(st.num_vertices() == NUMBER_OF_VERTICES); - std::cout << "st.num_simplices()=" << st.num_simplices() << std::endl; + std::clog << "st.num_simplices()=" << st.num_simplices() << std::endl; BOOST_CHECK(st.num_simplices() == 27); // Check filtration values of vertices is 0.0 @@ -91,12 +91,12 @@ BOOST_AUTO_TEST_CASE(Cech_complex_for_documentation) { for (auto f_simplex : st.skeleton_simplex_range(DIMENSION_1)) { if (DIMENSION_1 == st.dimension(f_simplex)) { std::vector<Point> vp; - std::cout << "vertex = ("; + std::clog << "vertex = ("; for (auto vertex : st.simplex_vertex_range(f_simplex)) { - std::cout << vertex << ","; + std::clog << vertex << ","; vp.push_back(points.at(vertex)); } - std::cout << ") - distance =" << Gudhi::Minimal_enclosing_ball_radius()(vp.at(0), vp.at(1)) + std::clog << ") - distance =" << Gudhi::Minimal_enclosing_ball_radius()(vp.at(0), vp.at(1)) << " - filtration =" << st.filtration(f_simplex) << std::endl; BOOST_CHECK(vp.size() == 2); GUDHI_TEST_FLOAT_EQUALITY_CHECK(st.filtration(f_simplex), @@ -112,13 +112,13 @@ BOOST_AUTO_TEST_CASE(Cech_complex_for_documentation) { Simplex_tree st2; cech_complex_for_doc.create_complex(st2, DIMENSION_2); - std::cout << "st2.dimension()=" << st2.dimension() << std::endl; + std::clog << "st2.dimension()=" << st2.dimension() << std::endl; BOOST_CHECK(st2.dimension() == DIMENSION_2); - std::cout << "st2.num_vertices()=" << st2.num_vertices() << std::endl; + std::clog << "st2.num_vertices()=" << st2.num_vertices() << std::endl; BOOST_CHECK(st2.num_vertices() == NUMBER_OF_VERTICES); - std::cout << "st2.num_simplices()=" << st2.num_simplices() << std::endl; + std::clog << "st2.num_simplices()=" << st2.num_simplices() << std::endl; BOOST_CHECK(st2.num_simplices() == 30); Point_cloud points012; @@ -129,7 +129,7 @@ BOOST_AUTO_TEST_CASE(Cech_complex_for_documentation) { Min_sphere ms012(dimension, points012.begin(), points012.end()); Simplex_tree::Filtration_value f012 = st2.filtration(st2.find({0, 1, 2})); - std::cout << "f012= " << f012 << " | ms012_radius= " << std::sqrt(ms012.squared_radius()) << std::endl; + std::clog << "f012= " << f012 << " | ms012_radius= " << std::sqrt(ms012.squared_radius()) << std::endl; GUDHI_TEST_FLOAT_EQUALITY_CHECK(f012, std::sqrt(ms012.squared_radius())); @@ -140,7 +140,7 @@ BOOST_AUTO_TEST_CASE(Cech_complex_for_documentation) { Min_sphere ms1410(dimension, points1410.begin(), points1410.end()); Simplex_tree::Filtration_value f1410 = st2.filtration(st2.find({1, 4, 10})); - std::cout << "f1410= " << f1410 << " | ms1410_radius= " << std::sqrt(ms1410.squared_radius()) << std::endl; + std::clog << "f1410= " << f1410 << " | ms1410_radius= " << std::sqrt(ms1410.squared_radius()) << std::endl; GUDHI_TEST_FLOAT_EQUALITY_CHECK(f1410, std::sqrt(ms1410.squared_radius())); @@ -151,7 +151,7 @@ BOOST_AUTO_TEST_CASE(Cech_complex_for_documentation) { Min_sphere ms469(dimension, points469.begin(), points469.end()); Simplex_tree::Filtration_value f469 = st2.filtration(st2.find({4, 6, 9})); - std::cout << "f469= " << f469 << " | ms469_radius= " << std::sqrt(ms469.squared_radius()) << std::endl; + std::clog << "f469= " << f469 << " | ms469_radius= " << std::sqrt(ms469.squared_radius()) << std::endl; GUDHI_TEST_FLOAT_EQUALITY_CHECK(f469, std::sqrt(ms469.squared_radius())); @@ -178,35 +178,35 @@ BOOST_AUTO_TEST_CASE(Cech_complex_from_points) { // ---------------------------------------------------------------------------- Cech_complex cech_complex_from_points(points, 2.0); - std::cout << "========== cech_complex_from_points ==========" << std::endl; + std::clog << "========== cech_complex_from_points ==========" << std::endl; Simplex_tree st; const int DIMENSION = 3; cech_complex_from_points.create_complex(st, DIMENSION); // Another way to check num_simplices - std::cout << "Iterator on Cech complex simplices in the filtration order, with [filtration value]:" << std::endl; + std::clog << "Iterator on Cech complex simplices in the filtration order, with [filtration value]:" << std::endl; int num_simplices = 0; for (auto f_simplex : st.filtration_simplex_range()) { num_simplices++; - std::cout << " ( "; + std::clog << " ( "; for (auto vertex : st.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; + std::clog << vertex << " "; } - std::cout << ") -> " + std::clog << ") -> " << "[" << st.filtration(f_simplex) << "] "; - std::cout << std::endl; + std::clog << std::endl; } BOOST_CHECK(num_simplices == 15); - std::cout << "st.num_simplices()=" << st.num_simplices() << std::endl; + std::clog << "st.num_simplices()=" << st.num_simplices() << std::endl; BOOST_CHECK(st.num_simplices() == 15); - std::cout << "st.dimension()=" << st.dimension() << std::endl; + std::clog << "st.dimension()=" << st.dimension() << std::endl; BOOST_CHECK(st.dimension() == DIMENSION); - std::cout << "st.num_vertices()=" << st.num_vertices() << std::endl; + std::clog << "st.num_vertices()=" << st.num_vertices() << std::endl; BOOST_CHECK(st.num_vertices() == 4); for (auto f_simplex : st.filtration_simplex_range()) { - std::cout << "dimension(" << st.dimension(f_simplex) << ") - f = " << st.filtration(f_simplex) << std::endl; + std::clog << "dimension(" << st.dimension(f_simplex) << ") - f = " << st.filtration(f_simplex) << std::endl; switch (st.dimension(f_simplex)) { case 0: GUDHI_TEST_FLOAT_EQUALITY_CHECK(st.filtration(f_simplex), 0.0); @@ -236,7 +236,7 @@ BOOST_AUTO_TEST_CASE(Cech_create_complex_throw) { // ---------------------------------------------------------------------------- std::string off_file_name("alphacomplexdoc.off"); double max_radius = 12.0; - std::cout << "========== OFF FILE NAME = " << off_file_name << " - Cech max_radius=" << max_radius + std::clog << "========== OFF FILE NAME = " << off_file_name << " - Cech max_radius=" << max_radius << "==========" << std::endl; Gudhi::Points_off_reader<Point> off_reader(off_file_name); @@ -245,7 +245,7 @@ BOOST_AUTO_TEST_CASE(Cech_create_complex_throw) { Simplex_tree stree; std::vector<int> simplex = {0, 1, 2}; stree.insert_simplex_and_subfaces(simplex); - std::cout << "Check exception throw in debug mode" << std::endl; + std::clog << "Check exception throw in debug mode" << std::endl; // throw excpt because stree is not empty BOOST_CHECK_THROW(cech_complex_from_file.create_complex(stree, 1), std::invalid_argument); } diff --git a/src/Cech_complex/utilities/CMakeLists.txt b/src/Cech_complex/utilities/CMakeLists.txt index 30b99729..253d7304 100644 --- a/src/Cech_complex/utilities/CMakeLists.txt +++ b/src/Cech_complex/utilities/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.6) project(Cech_complex_utilities) add_executable(cech_persistence cech_persistence.cpp) -target_link_libraries(cech_persistence ${Boost_PROGRAM_OPTIONS_LIBRARY}) +target_link_libraries(cech_persistence Boost::program_options) if (TBB_FOUND) target_link_libraries(cech_persistence ${TBB_LIBRARIES}) diff --git a/src/Cech_complex/utilities/cech_persistence.cpp b/src/Cech_complex/utilities/cech_persistence.cpp index 8cfe018b..daea08e2 100644 --- a/src/Cech_complex/utilities/cech_persistence.cpp +++ b/src/Cech_complex/utilities/cech_persistence.cpp @@ -50,8 +50,8 @@ int main(int argc, char* argv[]) { Simplex_tree simplex_tree; cech_complex_from_file.create_complex(simplex_tree, dim_max); - std::cout << "The complex contains " << simplex_tree.num_simplices() << " simplices \n"; - std::cout << " and has dimension " << simplex_tree.dimension() << " \n"; + std::clog << "The complex contains " << simplex_tree.num_simplices() << " simplices \n"; + std::clog << " and has dimension " << simplex_tree.dimension() << " \n"; // Sort the simplices in the order of the filtration simplex_tree.initialize_filtration(); @@ -85,7 +85,7 @@ void program_options(int argc, char* argv[], std::string& off_file_points, std:: po::options_description visible("Allowed options", 100); visible.add_options()("help,h", "produce help message")( "output-file,o", po::value<std::string>(&filediag)->default_value(std::string()), - "Name of file in which the persistence diagram is written. Default print in std::cout")( + "Name of file in which the persistence diagram is written. Default print in std::clog")( "max-radius,r", po::value<Filtration_value>(&max_radius)->default_value(std::numeric_limits<Filtration_value>::infinity()), "Maximal length of an edge for the Cech complex construction.")( @@ -108,17 +108,17 @@ void program_options(int argc, char* argv[], std::string& off_file_points, std:: po::notify(vm); if (vm.count("help") || !vm.count("input-file")) { - std::cout << std::endl; - std::cout << "Compute the persistent homology with coefficient field Z/pZ \n"; - std::cout << "of a Cech complex defined on a set of input points.\n \n"; - std::cout << "The output diagram contains one bar per line, written with the convention: \n"; - std::cout << " p dim b d \n"; - std::cout << "where dim is the dimension of the homological feature,\n"; - std::cout << "b and d are respectively the birth and death of the feature and \n"; - std::cout << "p is the characteristic of the field Z/pZ used for homology coefficients." << std::endl << std::endl; - - std::cout << "Usage: " << argv[0] << " [options] input-file" << std::endl << std::endl; - std::cout << visible << std::endl; + std::clog << std::endl; + std::clog << "Compute the persistent homology with coefficient field Z/pZ \n"; + std::clog << "of a Cech complex defined on a set of input points.\n \n"; + std::clog << "The output diagram contains one bar per line, written with the convention: \n"; + std::clog << " p dim b d \n"; + std::clog << "where dim is the dimension of the homological feature,\n"; + std::clog << "b and d are respectively the birth and death of the feature and \n"; + std::clog << "p is the characteristic of the field Z/pZ used for homology coefficients." << std::endl << std::endl; + + std::clog << "Usage: " << argv[0] << " [options] input-file" << std::endl << std::endl; + std::clog << visible << std::endl; exit(-1); } } |