From be30f17d2ea337995215eedbcc831de0236c5e35 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Mon, 18 Sep 2017 15:46:22 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2683 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: cacaa8d543cb35bfd709092262809deb102230d5 --- data/points/KleinBottle5D.off | 3 ++- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 2 +- src/Nerve_GIC/include/gudhi/GIC.h | 31 ++++++++++++++----------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/data/points/KleinBottle5D.off b/data/points/KleinBottle5D.off index ea5c3fa3..b578593c 100755 --- a/data/points/KleinBottle5D.off +++ b/data/points/KleinBottle5D.off @@ -1,4 +1,5 @@ -OFF +nOFF +5 15876 0 0 3 0 0 0 1 3.05 0 0.09983 0 0.9988 diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 8d807f4b..c3930d1e 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -83,7 +83,7 @@ namespace graph_induced_complex { * Finally, the next ne lines represent the edges, characterized by the ID of their vertices. * Using e.g. * - * \code $> python visu.py && firefox SC.html + * \code $> python KeplerMapperVisuFromTxtFile.py && firefox SC.html * \endcode * * one can obtain the following visualization: diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index f00856ed..384bbc8c 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -142,7 +142,7 @@ class Graph_induced_complex { private: void fill_adjacency_matrix_from_st(){ std::vector empty; - for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); + for(int i = 0; i < n; i++) adjacency_matrix[i] = empty; for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ std::vector vertices; @@ -188,6 +188,7 @@ class Graph_induced_complex { int numedges, numfaces, i, num; std::vector edge(2); std::vector simplex; std::ifstream input(off_file_name); std::string line; getline(input, line); + if(std::strcmp((char*) line.c_str(),"nOFF")==0) input >> data_dimension; else data_dimension = 3; input >> n; input >> numfaces; input >> numedges; getline(input, line); i = 0; while(i < n){ @@ -195,7 +196,7 @@ class Graph_induced_complex { std::vector point; std::istringstream iss(line); point.assign(std::istream_iterator(iss), std::istream_iterator()); point_cloud.push_back(Point(point.begin(),point.end())); i++; - } data_dimension = point_cloud[0].size(); + } i = 0; while(i < numfaces){ simplex.clear(); input >> num; @@ -304,10 +305,10 @@ class Graph_induced_complex { public: // Automatic tuning of Rips complex. /** \brief Creates the graph G from a Rips complex whose threshold value is automatically tuned with subsampling. * - * @param[in] N number of subsampling iteration (default value 100). + * @param[in] N number of subsampling iteration (the default reasonable value is 100, but there is no guarantee on how to choose it). * */ - template void set_graph_from_automatic_rips(Distance distance, int N = 100){ + template double set_graph_from_automatic_rips(Distance distance, int N = 100){ int m = floor(n/ std::exp((1+rate_power)*std::log(std::log(n)/std::log(rate_constant))) ); m = std::min(m,n-1); @@ -336,6 +337,8 @@ class Graph_induced_complex { rips_complex_from_points.create_complex(st, 1); fill_adjacency_matrix_from_st(); + return delta; + } @@ -511,20 +514,20 @@ class Graph_induced_complex { if(i != 0){ std::pair inter3 = intervals[i-1]; while(func[points[tmp]] < inter3.second && tmp != n){ - prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); + prop[points[tmp]] = adjacency_matrix[points[tmp]]; tmp++; } } std::pair inter2 = intervals[i+1]; while(func[points[tmp]] < inter2.first && tmp != n){ - prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); + prop[points[tmp]] = adjacency_matrix[points[tmp]]; tmp++; } pos = tmp; while(func[points[tmp]] < inter1.second && tmp != n){ - prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); + prop[points[tmp]] = adjacency_matrix[points[tmp]]; tmp++; } @@ -534,12 +537,12 @@ class Graph_induced_complex { std::pair inter3 = intervals[i-1]; while(func[points[tmp]] < inter3.second && tmp != n){ - prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); + prop[points[tmp]] = adjacency_matrix[points[tmp]]; tmp++; } while(tmp != n){ - prop.insert(std::make_pair(points[tmp],adjacency_matrix[points[tmp]])); + prop[points[tmp]] = adjacency_matrix[points[tmp]]; tmp++; } @@ -548,7 +551,7 @@ class Graph_induced_complex { // Compute the connected components with DFS std::map visit; if(verbose) std::cout << "Preimage of interval " << i << std::endl; for(std::map >::iterator it = prop.begin(); it != prop.end(); it++) - visit.insert(std::pair(it->first, false)); + visit[it->first] = false; if (!(prop.empty())){ for(std::map >::iterator it = prop.begin(); it != prop.end(); it++){ if ( !(visit[it->first]) ){ @@ -785,10 +788,10 @@ class Graph_induced_complex { */ template void create_complex(SimplicialComplexForGIC & complex) { - size_t sz = simplices.size(); unsigned int dimension = 0; - for(unsigned int i = 0; i < sz; i++){ - complex.insert_simplex_and_subfaces(simplices[i]); - if(dimension < simplices[i].size()-1) dimension = simplices[i].size()-1; + unsigned int dimension = 0; + for(auto const& simplex : simplices){ + complex.insert_simplex_and_subfaces(simplex); + if(dimension < simplex.size()-1) dimension = simplex.size()-1; } complex.set_dimension(dimension); } -- cgit v1.2.3