summaryrefslogtreecommitdiff
path: root/src/Witness_complex
diff options
context:
space:
mode:
authorskachano <skachano@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2016-02-11 16:05:15 +0000
committerskachano <skachano@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2016-02-11 16:05:15 +0000
commitb7796215d4eac6b4c43ad70998c3737a6527eebb (patch)
treeef35441548725cb5aa1266fb93f9bf344fb2798f /src/Witness_complex
parent2d8cc490a799d991fee29d923c15368c83d24f85 (diff)
Commited Marc's remarks
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/witness@1017 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: d87eb82f60f4f943f59622f33521bcdce7873091
Diffstat (limited to 'src/Witness_complex')
-rw-r--r--src/Witness_complex/concept/Simplicial_complex.h11
-rw-r--r--src/Witness_complex/example/witness_complex_from_file.cpp13
-rw-r--r--src/Witness_complex/example/witness_complex_sphere.cpp10
-rw-r--r--src/Witness_complex/include/gudhi/Landmark_choice_by_random_point.h6
-rw-r--r--src/Witness_complex/include/gudhi/Witness_complex.h18
-rw-r--r--src/Witness_complex/test/simple_witness_complex.cpp2
-rw-r--r--src/Witness_complex/test/witness_complex_points.cpp4
7 files changed, 23 insertions, 41 deletions
diff --git a/src/Witness_complex/concept/Simplicial_complex.h b/src/Witness_complex/concept/Simplicial_complex.h
index d7f3496d..9e9f2ff8 100644
--- a/src/Witness_complex/concept/Simplicial_complex.h
+++ b/src/Witness_complex/concept/Simplicial_complex.h
@@ -40,16 +40,11 @@ struct Simplicial_complex {
/** Returns a Simplex_hanlde that is different from all simplex handles
* of the simplices. */
Simplex_handle null_simplex();
- /** \brief Returns the number of simplices in the complex.
- *
- * Does not count the empty simplex. */
- size_t num_simplices();
/** \brief Iterator over the simplices of the complex,
* in an arbitrary order.
*
* 'value_type' must be 'Simplex_handle'.*/
- typedef unspecified Complex_simplex_iterator;
typedef unspecified Complex_simplex_range;
/**
@@ -71,19 +66,17 @@ struct Simplicial_complex {
*/
typedef unspecified Insertion_result_type;
- /** \brief Input range of vertices.
- * 'value_type' must be 'Vertex_handle'. */
- typedef unspecified Input_vertex_range;
-
/** \brief Inserts a simplex with vertices from a given range
* 'vertex_range' in the simplicial complex.
* */
+ template< typedef Input_vertex_range >
Insertion_result_type insert_simplex(Input_vertex_range const & vertex_range);
/** \brief Finds a simplex with vertices given by a range
*
* If a simplex exists, its Simplex_handle is returned.
* Otherwise null_simplex() is returned. */
+ template< typedef Input_vertex_range >
Simplex_handle find(Input_vertex_range const & vertex_range);
};
diff --git a/src/Witness_complex/example/witness_complex_from_file.cpp b/src/Witness_complex/example/witness_complex_from_file.cpp
index 77109512..98d1fe9c 100644
--- a/src/Witness_complex/example/witness_complex_from_file.cpp
+++ b/src/Witness_complex/example/witness_complex_from_file.cpp
@@ -68,17 +68,6 @@ read_points_cust(std::string file_name, std::vector< std::vector< double > > & p
in_file.close();
}
-/** 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[]) {
if (argc != 3) {
std::cerr << "Usage: " << argv[0]
@@ -109,7 +98,7 @@ int main(int argc, char * const argv[]) {
// Compute witness complex
start = clock();
- WitnessComplex(knn, simplex_tree, nbL, point_vector[0].size());
+ WitnessComplex(knn, nbL, point_vector[0].size(), simplex_tree);
end = clock();
std::cout << "Witness complex took "
<< static_cast<double>(end - start) / CLOCKS_PER_SEC << " s. \n";
diff --git a/src/Witness_complex/example/witness_complex_sphere.cpp b/src/Witness_complex/example/witness_complex_sphere.cpp
index f9d0b5a2..fae80d67 100644
--- a/src/Witness_complex/example/witness_complex_sphere.cpp
+++ b/src/Witness_complex/example/witness_complex_sphere.cpp
@@ -60,11 +60,11 @@ void write_data(Data_range & data, std::string filename) {
int main(int argc, char * const argv[]) {
if (argc != 2) {
std::cerr << "Usage: " << argv[0]
- << " nbL \n";
+ << " number_of_landmarks \n";
return 0;
}
- int nbL = atoi(argv[1]);
+ int number_of_landmarks = atoi(argv[1]);
clock_t start, end;
// Construct the Simplex Tree
@@ -82,13 +82,13 @@ int main(int argc, char * const argv[]) {
// Choose landmarks
start = clock();
std::vector<std::vector< int > > knn;
- Gudhi::witness_complex::landmark_choice_by_random_point(point_vector, nbL, knn);
+ Gudhi::witness_complex::landmark_choice_by_random_point(point_vector, number_of_landmarks, knn);
// Compute witness complex
- WitnessComplex(knn, simplex_tree, nbL, point_vector[0].size());
+ WitnessComplex(knn, number_of_landmarks, point_vector[0].size(), simplex_tree);
end = clock();
double time = static_cast<double>(end - start) / CLOCKS_PER_SEC;
- std::cout << "Witness complex for " << nbL << " landmarks took "
+ 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));
diff --git a/src/Witness_complex/include/gudhi/Landmark_choice_by_random_point.h b/src/Witness_complex/include/gudhi/Landmark_choice_by_random_point.h
index dc364007..617c0258 100644
--- a/src/Witness_complex/include/gudhi/Landmark_choice_by_random_point.h
+++ b/src/Witness_complex/include/gudhi/Landmark_choice_by_random_point.h
@@ -35,6 +35,12 @@ namespace witness_complex {
/** \brief Landmark choice strategy by taking random vertices for landmarks.
* \details It chooses nbL distinct landmarks from a random access range `points`
* and outputs a matrix {witness}*{closest landmarks} in knn.
+ *
+ * The type KNearestNeighbors can be seen as
+ * Witness_range<Closest_landmark_range<Vertex_handle>>, where
+ * Witness_range and Closest_landmark_range are random access ranges and
+ * Vertex_handle is the label type of a vertex in a simplicial complex.
+ * Closest_landmark_range needs to have push_back operation.
*/
template <typename KNearestNeighbours,
diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h
index 34cbc882..3e14a623 100644
--- a/src/Witness_complex/include/gudhi/Witness_complex.h
+++ b/src/Witness_complex/include/gudhi/Witness_complex.h
@@ -71,7 +71,6 @@ class Witness_complex {
typedef std::vector< double > Point_t;
typedef std::vector< Point_t > Point_Vector;
- // typedef typename Simplicial_complex::Filtration_value Filtration_value;
typedef std::vector< Vertex_handle > typeVectorVertex;
typedef std::pair< typeVectorVertex, Filtration_value> typeSimplex;
typedef std::pair< Simplex_handle, bool > typePairSimplexBool;
@@ -109,9 +108,9 @@ class Witness_complex {
*/
template< typename KNearestNeighbors >
Witness_complex(KNearestNeighbors const & knn,
- Simplicial_complex & sc_,
int nbL_,
- int dim) : nbL(nbL_), sc(sc_) {
+ int dim,
+ Simplicial_complex & sc_) : nbL(nbL_), sc(sc_) {
// Construction of the active witness list
int nbW = knn.size();
typeVectorVertex vv;
@@ -120,7 +119,7 @@ class Witness_complex {
* it will diminuish in the course of iterations
*/
ActiveWitnessList active_w; // = new ActiveWitnessList();
- for (int i = 0; i != nbL; ++i) {
+ for (Vertex_handle i = 0; i != nbL; ++i) {
// initial fill of 0-dimensional simplices
// by doing it we don't assume that landmarks are necessarily witnesses themselves anymore
counter++;
@@ -131,9 +130,7 @@ class Witness_complex {
int k = 1; /* current dimension in iterative construction */
for (int i = 0; i != nbW; ++i)
active_w.push_back(i);
- // std::cout << "Successfully added edges" << std::endl;
while (!active_w.empty() && k < dim) {
- // std::cout << "Started the step k=" << k << std::endl;
typename ActiveWitnessList::iterator it = active_w.begin();
while (it != active_w.end()) {
typeVectorVertex simplex_vector;
@@ -142,7 +139,7 @@ class Witness_complex {
if (ok) {
for (int i = 0; i != k + 1; ++i)
simplex_vector.push_back(knn[*it][i]);
- sc.insert_simplex(simplex_vector, 0.0);
+ sc.insert_simplex(simplex_vector);
// TODO(SK) Error if not inserted : normally no need here though
it++;
} else {
@@ -162,9 +159,7 @@ class Witness_complex {
*/
template <typename KNearestNeighbors>
bool all_faces_in(KNearestNeighbors const &knn, int witness_id, int k) {
- // std::cout << "All face in with the landmark " << inserted_vertex << std::endl;
std::vector< Vertex_handle > facet;
- // Vertex_handle curr_vh = curr_sh->first;
// CHECK ALL THE FACETS
for (int i = 0; i != k + 1; ++i) {
facet = {};
@@ -175,7 +170,6 @@ class Witness_complex {
} // endfor
if (sc.find(facet) == sc.null_simplex())
return false;
- // std::cout << "++++ finished loop safely\n";
} // endfor
return true;
}
@@ -206,12 +200,12 @@ class Witness_complex {
bool is_witnessed = false;
typeVectorVertex simplex;
int nbV = 0; // number of verticed in the simplex
- for (int v : sc.simplex_vertex_range(sh))
+ for (Vertex_handle v : sc.simplex_vertex_range(sh))
simplex.push_back(v);
nbV = simplex.size();
for (typeVectorVertex w : knn) {
bool has_vertices = true;
- for (int v : simplex)
+ for (Vertex_handle v : simplex)
if (std::find(w.begin(), w.begin() + nbV, v) == w.begin() + nbV) {
has_vertices = false;
// break;
diff --git a/src/Witness_complex/test/simple_witness_complex.cpp b/src/Witness_complex/test/simple_witness_complex.cpp
index 7d44b90c..03df78ee 100644
--- a/src/Witness_complex/test/simple_witness_complex.cpp
+++ b/src/Witness_complex/test/simple_witness_complex.cpp
@@ -53,7 +53,7 @@ BOOST_AUTO_TEST_CASE(simple_witness_complex) {
knn.push_back({5, 0, 1, 3, 6, 2, 4});
knn.push_back({5, 6, 1, 0, 2, 3, 4});
knn.push_back({1, 6, 0, 5, 2, 3, 4});
- WitnessComplex witnessComplex(knn, complex, 7, 7);
+ WitnessComplex witnessComplex(knn, 7, 7, complex);
BOOST_CHECK(witnessComplex.is_witness_complex(knn, false));
}
diff --git a/src/Witness_complex/test/witness_complex_points.cpp b/src/Witness_complex/test/witness_complex_points.cpp
index cb1639e1..bd3df604 100644
--- a/src/Witness_complex/test/witness_complex_points.cpp
+++ b/src/Witness_complex/test/witness_complex_points.cpp
@@ -52,13 +52,13 @@ BOOST_AUTO_TEST_CASE(witness_complex_points) {
Simplex_tree complex1;
Gudhi::witness_complex::landmark_choice_by_random_point(points, 100, knn);
assert(!knn.empty());
- WitnessComplex witnessComplex1(knn, complex1, 100, 3);
+ WitnessComplex witnessComplex1(knn, 100, 3, complex1);
BOOST_CHECK(witnessComplex1.is_witness_complex(knn, b_print_output));
// Second test: furthest choice
knn.clear();
Simplex_tree complex2;
Gudhi::witness_complex::landmark_choice_by_furthest_point(points, 100, knn);
- WitnessComplex witnessComplex2(knn, complex2, 100, 3);
+ WitnessComplex witnessComplex2(knn, 100, 3, complex2);
BOOST_CHECK(witnessComplex2.is_witness_complex(knn, b_print_output));
}