summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsalinasd <salinasd@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2014-12-16 09:53:54 +0000
committersalinasd <salinasd@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2014-12-16 09:53:54 +0000
commitf298345cd9c3c66e4d9f4d64bd5710911fda7009 (patch)
tree2bdb811f1eb8d734cf1198ee2e24196138711690
parent6a6651c5a097f5024a42c9912723fe09ba714fe7 (diff)
doc
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@354 636b058d-ea47-450e-bf9e-a15bfbe3eedb
-rw-r--r--biblio/bibliography.bib72
-rw-r--r--src/Doxyfile16
-rw-r--r--src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h4
-rw-r--r--src/Simplex_tree/include/gudhi/Simplex_tree.h2
-rw-r--r--src/Skeleton_blocker/concept/SkeletonBlockerDS.h4
-rw-r--r--src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h8
-rw-r--r--src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_sub_complex.h14
-rw-r--r--src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h202
-rw-r--r--src/common/doc/main_page.h6
9 files changed, 185 insertions, 143 deletions
diff --git a/biblio/bibliography.bib b/biblio/bibliography.bib
index eec8c14f..b02929ab 100644
--- a/biblio/bibliography.bib
+++ b/biblio/bibliography.bib
@@ -228,6 +228,42 @@ language={English},
}
%------------------------------------------------------------------
+@article{blockers2012,
+ author = {Dominique Attali and
+ Andr{\'e} Lieutier and
+ David Salinas},
+ title = {Efficient Data Structure for Representing and Simplifying
+ Simplicial complexes in High Dimensions},
+ journal = {Int. J. Comput. Geometry Appl.},
+ volume = {22},
+ number = {4},
+ year = {2012},
+ pages = {279-304},
+ ee = {http://dx.doi.org/10.1142/S0218195912600060},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+%------------------------------------------------------------------
+@article{rips2012,
+ hal_id = {hal-00785072},
+ url = {http://hal.archives-ouvertes.fr/hal-00785072},
+ title = {{Vietoris-Rips Complexes also Provide Topologically Correct Reconstructions of Sampled Shapes}},
+ author = {Attali, Dominique and Lieutier, Andr{\'e} and Salinas, David},
+ keywords = {Shape reconstruction \sep Rips complexes \sep clique complexes \sep \v Cech complexes ; homotopy equivalence ; collapses ; high dimensions},
+ language = {Anglais},
+ affiliation = {Grenoble Images Parole Signal Automatique - GIPSA-lab , Laboratoire Jean Kuntzmann - LJK},
+ pages = {448-465},
+ journal = {Computational Geometry},
+ volume = {46},
+ number = {4, special issue },
+ audience = {internationale },
+ doi = {10.1016/j.comgeo.2012.02.009 },
+ year = {2012},
+ pdf = {http://hal.archives-ouvertes.fr/hal-00785072/PDF/2012-cgta-Rips.pdf},
+}
+
+
+%------------------------------------------------------------------
@article{DBLP:journals/corr/abs-1210-1429,
author = {Pawel Dlotko and
Hubert Wagner},
@@ -373,6 +409,37 @@ proceedings{DBLP:conf/issac/1996,
bibsource = {DBLP, http://dblp.uni-trier.de}
}
+
+proceedings{DBLP:conf/issac/1996,
+ editor = {Erwin Engeler and
+ B. F. Caviness and
+ Yagati N. Lakshman},
+ title = {Proceedings of the 1996 International Symposium on Symbolic
+ and Algebraic Computation, ISSAC '96, Zurich, Switzerland,
+ July 24-26, 1996},
+ booktitle = {ISSAC},
+ publisher = {ACM},
+ year = {1996},
+ isbn = {0-89791-796-0},
+ ee = {http://dl.acm.org/citation.cfm?id=236869},
+ bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+
+@inproceedings{socg_blockers_2011,
+ author = {Attali, Dominique and Lieutier, Andr{\'e} and Salinas, David},
+ title = {Efficient data structure for representing and simplifying simplicial complexes in high dimensions},
+ booktitle = {Proceedings of the 27th annual ACM symposium on Computational geometry},
+ series = {SoCG '11},
+ year = {2011},
+ location = {Paris, France},
+ pages = {501--509},
+ numpages = {9},
+ keywords = {clique complexes, data structure, edge contraction, flag complexes, high dimensions, homotopy equivalence, shape reconstruction, shape simplification, simplicial complexes, vietoris-rips complexes},
+}
+
+
+
%------------------------------------------------------------------
%MISC
@@ -565,8 +632,7 @@ inproceedings{DBLP:conf/soda/1997,
-
-inproceedings{attali-rips_approx,
+@inproceedings{attali-rips_approx,
author = {Dominique Attali and
Andr{\'e} Lieutier and
David Salinas},
@@ -582,6 +648,8 @@ inproceedings{attali-rips_approx,
+
+
@article{Carlsson:2008:LBS:1325290.1325300,
author = {Carlsson, Gunnar and Ishkhanov, Tigran and Silva, Vin and Zomorodian, Afra},
title = {On the Local Behavior of Spaces of Natural Images},
diff --git a/src/Doxyfile b/src/Doxyfile
index 7dbf9a06..420824f4 100644
--- a/src/Doxyfile
+++ b/src/Doxyfile
@@ -1896,7 +1896,7 @@ ENABLE_PREPROCESSING = YES
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-MACRO_EXPANSION = NO
+MACRO_EXPANSION = YES
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
# the macro expansion is limited to the macros specified with the PREDEFINED and
@@ -1904,7 +1904,7 @@ MACRO_EXPANSION = NO
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-EXPAND_ONLY_PREDEF = NO
+EXPAND_ONLY_PREDEF = YES
# If the SEARCH_INCLUDES tag is set to YES the includes files in the
# INCLUDE_PATH will be searched if a #include is found.
@@ -1936,7 +1936,7 @@ INCLUDE_FILE_PATTERNS =
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-PREDEFINED =
+PREDEFINED = protected=private
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The
@@ -2019,7 +2019,7 @@ PERL_PATH = /usr/bin/perl
# powerful graphs.
# The default value is: YES.
-CLASS_DIAGRAMS = YES
+CLASS_DIAGRAMS = NO
# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see:
@@ -2092,7 +2092,7 @@ DOT_FONTPATH =
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
-CLASS_GRAPH = YES
+CLASS_GRAPH = NO
# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
# graph for each documented class showing the direct and indirect implementation
@@ -2101,7 +2101,7 @@ CLASS_GRAPH = YES
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
-COLLABORATION_GRAPH = YES
+COLLABORATION_GRAPH = NO
# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
# groups, showing the direct groups dependencies.
@@ -2166,7 +2166,7 @@ INCLUDED_BY_GRAPH = YES
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
-CALL_GRAPH = YES
+CALL_GRAPH = NO
# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
# dependency graph for every global function or class method.
@@ -2177,7 +2177,7 @@ CALL_GRAPH = YES
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
-CALLER_GRAPH = YES
+CALLER_GRAPH = NO
# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
# hierarchy of all classes instead of a textual one.
diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h
index 70173462..2b3efc28 100644
--- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h
+++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h
@@ -33,9 +33,9 @@
namespace Gudhi{
-/** \defgroup persistent_cohomology Persistent Cohomology Package
+/** \defgroup persistent_cohomology Persistent Cohomology
*
-
+
Computation of persistent cohomology using the algorithm of
\cite DBLP:journals/dcg/SilvaMV11 and \cite DBLP:journals/corr/abs-1208-5018
and the Compressed Annotation Matrix
diff --git a/src/Simplex_tree/include/gudhi/Simplex_tree.h b/src/Simplex_tree/include/gudhi/Simplex_tree.h
index 5caa5e25..44f7a0d6 100644
--- a/src/Simplex_tree/include/gudhi/Simplex_tree.h
+++ b/src/Simplex_tree/include/gudhi/Simplex_tree.h
@@ -34,7 +34,7 @@
namespace Gudhi{
-/** \defgroup simplex_tree Filtered Complexes Package
+/** \defgroup simplex_tree Filtered Complexes
*
* A simplicial complex \f$\mathbf{K}\f$
* on a set of vertices \f$V = \{1, \cdots ,|V|\}\f$ is a collection of simplices
diff --git a/src/Skeleton_blocker/concept/SkeletonBlockerDS.h b/src/Skeleton_blocker/concept/SkeletonBlockerDS.h
index 1fa9dc06..5cd3a22c 100644
--- a/src/Skeleton_blocker/concept/SkeletonBlockerDS.h
+++ b/src/Skeleton_blocker/concept/SkeletonBlockerDS.h
@@ -23,10 +23,6 @@ namespace skbl {
struct SkeletonBlockerDS
{
/**
- * @todo faire un default value pour les vertex_handle
- */
-
- /**
* @brief index that allows to find the vertex in the boost graph
*/
typedef int boost_vertex_handle;
diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h
index 00e1935b..d05bdc19 100644
--- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h
+++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h
@@ -35,13 +35,13 @@
-/** \defgroup skbl Skeleton-Blocker Package
+/** \defgroup skbl Skeleton-Blocker
\author David Salinas
\section Introduction
The Skeleton-Blocker data-structure had been introduced in the two papers
-[\cite skbl_socg2011,\cite skbl_ijcga2012].
+\cite socg_blockers_2011,\cite blockers2012\cite blockers2012.
It proposes a light encoding for simplicial complexes by storing only an *implicit* representation of its
simplices.
Intuitively, it just stores the 1-skeleton of a simplicial complex with a graph and the set of its "missing faces" that
@@ -53,7 +53,7 @@ This data-structure handles all simplicial complexes operations such as
\section Definitions
-We recall briefly classical definitions of simplicial complexes [\cite Munkres].
+We recall briefly classical definitions of simplicial complexes \cite Munkres-elementsalgtop1984.
An abstract simplex is a finite non-empty set and its dimension is its number of elements minus 1.
Whenever \f$\tau \subset \sigma\f$ and \f$\tau \neq \emptyset \f$, \f$ \tau \f$ is called a face of
\f$ \sigma\f$ and \f$ \sigma\f$ is called a coface of \f$ \tau \f$ . Furthermore,
@@ -102,8 +102,6 @@ of the parent complex
The two last classes are derived classes from the <Code>Skeleton_blocker_complex</Code> class. The class <Code>Skeleton_blocker_link_complex</Code> inheritates from a template passed parameter
that may be either <Code>Skeleton_blocker_complex</Code> or <Code>Skeleton_blocker_geometric_complex</Code> (a link may store points coordinates or not).
-\todo{include links}
-
\subsection Visitor
The class <Code>Skeleton_blocker_complex</Code> has a visitor that is called when usual operations such as adding an edge or remove a vertex are called.
diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_sub_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_sub_complex.h
index 24f95ddd..97cadfc9 100644
--- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_sub_complex.h
+++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_sub_complex.h
@@ -158,13 +158,13 @@ public:
* Constructs the restricted complex of 'parent_complex' to
* vertices of 'simplex'.
*/
- friend void make_restricted_complex(const ComplexType & parent_complex, const Simplex_handle& simplex, Skeleton_blocker_sub_complex & result){
- result.clear();
+ void make_restricted_complex(const ComplexType & parent_complex, const Simplex_handle& simplex){
+ this->clear();
// add vertices to the sub complex
for (auto x : simplex){
assert(parent_complex.contains_vertex(x));
- auto x_local = result.add_vertex(parent_complex[x].get_id());
- result[x_local] = parent_complex[x];
+ auto x_local = this->add_vertex(parent_complex[x].get_id());
+ (*this)[x_local] = parent_complex[x];
}
// add edges to the sub complex
@@ -174,7 +174,7 @@ public:
parent_complex.add_neighbours(x, x_neigh, true);
x_neigh.intersection(simplex);
for (auto y : x_neigh){
- result.add_edge(parent_complex[x].get_id(), parent_complex[y].get_id());
+ this->add_edge(parent_complex[x].get_id(), parent_complex[y].get_id());
}
}
@@ -183,8 +183,8 @@ public:
// check if it is the first time we encounter the blocker
if (simplex.contains(*blocker)){
Root_simplex_handle blocker_root(parent_complex.get_id(*(blocker)));
- Simplex_handle blocker_restr(*result.get_simplex_address(blocker_root));
- result.add_blocker(new Simplex_handle(blocker_restr));
+ Simplex_handle blocker_restr(*(this->get_simplex_address(blocker_root)));
+ this->add_blocker(new Simplex_handle(blocker_restr));
}
}
}
diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h
index 61ee8684..c0a0a2eb 100644
--- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h
+++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h
@@ -1,24 +1,24 @@
- /* 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): David Salinas
- *
- * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France)
- *
- * 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/>.
- */
+/* 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): David Salinas
+ *
+ * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France)
+ *
+ * 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 GUDHI_SKELETON_BLOCKER_COMPLEX_H
#define GUDHI_SKELETON_BLOCKER_COMPLEX_H
@@ -150,7 +150,6 @@ protected:
//todo remove!!!
-public:
/** Each vertex can access to the blockers passing through it. */
BlockerMap blocker_map_;
@@ -164,7 +163,7 @@ public:
/////////////////////////////////////////////////////////////////////////////
- /** @name Constructors / Destructors / Initialization
+ /** @name Constructors, Destructors
*/
//@{
Skeleton_blocker_complex(int num_vertices_ = 0,Visitor* visitor_=NULL):visitor(visitor_){
@@ -281,7 +280,7 @@ public:
* @brief Constructor with a list of simplices
* @details The list of simplices must be the list
* of simplices of a simplicial complex.
- *todo rewrite as iterators
+ *
*/
Skeleton_blocker_complex(std::list<Simplex_handle>& simplices,Visitor* visitor_=NULL):
num_vertices_(0),num_blockers_(0),
@@ -316,7 +315,6 @@ public:
}
-
// We cannot use the default copy constructor since we need
// to make a copy of each of the blockers
Skeleton_blocker_complex(const Skeleton_blocker_complex& copy){
@@ -355,7 +353,7 @@ public:
}
/**
- * Clears the simplicial complex. After a call to this function,
+ * @details Clears the simplicial complex. After a call to this function,
* blockers are destroyed. The 1-skeleton and the set of blockers
* are both empty.
*/
@@ -398,11 +396,19 @@ public:
return *local;
}
+ /**
+ * @brief Return the vertex node associated to local Vertex_handle.
+ * @remark Assume that the vertex is present in the complex.
+ */
Graph_vertex& operator[](Vertex_handle address){
assert(0<=address.vertex && address.vertex< boost::num_vertices(skeleton));
return skeleton[address.vertex];
}
+ /**
+ * @brief Return the vertex node associated to local Vertex_handle.
+ * @remark Assume that the vertex is present in the complex.
+ */
const Graph_vertex& operator[](Vertex_handle address) const{
assert(0<=address.vertex && address.vertex< boost::num_vertices(skeleton));
return skeleton[address.vertex];
@@ -426,7 +432,8 @@ public:
/**
* @brief Remove a vertex from the simplicial complex
- * @remark In fact, it just deactivates the vertex.
+ * @remark It just deactivates the vertex with a boolean flag but does not
+ * remove it from vertices from complexity issues.
*/
void remove_vertex(Vertex_handle address){
assert(contains_vertex(address));
@@ -438,17 +445,11 @@ public:
if (visitor) visitor->on_remove_vertex(address);
}
- /**
- * @return true iff the simplicial complex contains the vertex u
- */
bool contains_vertex(Vertex_handle u) const{
if (u.vertex<0 || u.vertex>=boost::num_vertices(skeleton)) return false;
return (*this)[u].is_active();
}
- /**
- * @return true iff the simplicial complex contains the vertex u
- */
bool contains_vertex(Root_vertex_handle u) const{
boost::optional<Vertex_handle> address = get_address(u);
return address && (*this)[*address].is_active();
@@ -466,9 +467,8 @@ public:
}
/**
- * Given an Id return the address of the vertex having this Id in the complex.
- * For a simplicial complex, the address is the id but it may not be the case for a SubComplex.
- *
+ * @brief Given an Id return the address of the vertex having this Id in the complex.
+ * @remark For a simplicial complex, the address is the id but it may not be the case for a SubComplex.
*/
virtual boost::optional<Vertex_handle> get_address(Root_vertex_handle id) const{
boost::optional<Vertex_handle> res;
@@ -488,10 +488,14 @@ public:
/**
+ * @brief Convert an address of a vertex of a complex to the address in
+ * the current complex.
+ * @details
* If the current complex is a sub (or sup) complex of 'other', it converts
* the address of a vertex v expressed in 'other' to the address of the vertex
* v in the current one.
- * @remark this methods uses Root_vertex_handle to identify the vertex
+ * @remark this methods uses Root_vertex_handle to identify the vertex and
+ * assumes the vertex is present in the current complex.
*/
Vertex_handle convert_handle_from_another_complex(
const Skeleton_blocker_complex& other,Vertex_handle vh_in_other) const{
@@ -500,7 +504,9 @@ public:
return *vh_in_current_complex;
}
-
+ /**
+ * @brief return the graph degree of a vertex.
+ */
int degree(Vertex_handle local) const{
assert(0<=local.vertex && local.vertex< boost::num_vertices(skeleton));
return degree_[local.vertex];
@@ -527,24 +533,40 @@ public:
return res;
}
+ /**
+ * @brief returns the stored node associated to an edge
+ */
Graph_edge& operator[](Edge_handle edge_handle){
return skeleton[edge_handle];
}
+ /**
+ * @brief returns the stored node associated to an edge
+ */
const Graph_edge& operator[](Edge_handle edge_handle) const{
return skeleton[edge_handle];
}
+ /**
+ * @brief returns the first vertex of an edge
+ * @details it assumes that the edge is present in the complex
+ */
Vertex_handle first_vertex(Edge_handle edge_handle) const{
return source(edge_handle,skeleton);
}
+ /**
+ * @brief returns the first vertex of an edge
+ * @details it assumes that the edge is present in the complex
+ */
Vertex_handle second_vertex(Edge_handle edge_handle) const{
return target(edge_handle,skeleton);
}
/**
* @brief returns the simplex made with the two vertices of the edge
+ * @details it assumes that the edge is present in the complex
+
*/
Simplex_handle get_vertices(Edge_handle edge_handle) const{
auto edge((*this)[edge_handle]);
@@ -574,7 +596,7 @@ public:
}
/**
- * @brief Adds all edges of simplex sigma to the simplicial complex.
+ * @brief Adds all edges and their cofaces of a simplex to the simplicial complex.
*/
void add_edges(const Simplex_handle & sigma){
Simplex_handle_iterator i, j;
@@ -584,7 +606,8 @@ public:
}
/**
- * @brief Removes edge ab from the simplicial complex and all its cofaces.
+ * @brief Removes an edge from the simplicial complex and all its cofaces.
+ * @details returns the former Edge_handle representing the edge
*/
virtual Edge_handle remove_edge(Vertex_handle a, Vertex_handle b){
bool found;
@@ -661,23 +684,10 @@ public:
/** @name Blockers operations
*/
//@{
- /**
- * Adds the 2-blocker abc
- */
- void add_blocker(Vertex_handle a, Vertex_handle b, Vertex_handle c){
- add_blocker(Simplex_handle(a,b,c));
- }
/**
- * Adds the 3-blocker abcd
- */
- void add_blocker(Vertex_handle a, Vertex_handle b, Vertex_handle c, Vertex_handle d){
- add_blocker(Simplex_handle(a,b,c,d));
- }
-
- /**
- * Adds the simplex blocker_pt to the set of blockers and
- * returns a Blocker_handle toward it if was not present before.
+ * @brief Adds the simplex to the set of blockers and
+ * returns a Blocker_handle toward it if was not present before and 0 otherwise.
*/
Blocker_handle add_blocker(const Simplex_handle& blocker){
if (contains_blocker(blocker))
@@ -701,7 +711,7 @@ public:
protected:
/**
- * Adds the simplex s to the set of blockers
+ * @brief Adds the simplex to the set of blockers
*/
void add_blocker(Blocker_handle blocker){
if (contains_blocker(*blocker))
@@ -745,8 +755,8 @@ protected:
public:
/**
- * Removes the simplex sigma from the set of blockers.
- * sigma has to belongs to the set of blockers
+ * @brief Removes the simplex from the set of blockers.
+ * @remark sigma has to belongs to the set of blockers
*/
void remove_blocker(const Blocker_handle sigma){
for (auto vertex : *sigma){
@@ -759,7 +769,7 @@ public:
/**
- * Remove all blockers, in other words, it expand the simplicial
+ * @brief Remove all blockers, in other words, it expand the simplicial
* complex to the smallest flag complex that contains it.
*/
void remove_blockers(){
@@ -851,17 +861,9 @@ private:
-
- /////////////////////////////////////////////////////////////////////////////
- /** @name Neighbourhood access
- */
- //@{
-
-public:
+protected:
/**
- * @brief Adds to simplex n the neighbours of v:
- * \f$ n \leftarrow n \cup N(v) \f$.
- *
+ * @details Adds to simplex the neighbours of v e.g. \f$ n \leftarrow n \cup N(v) \f$.
* If keep_only_superior is true then only vertices that are greater than v are added.
*/
virtual void add_neighbours(Vertex_handle v, Simplex_handle & n,bool keep_only_superior=false) const{
@@ -877,34 +879,25 @@ public:
}
/**
- * @brief Add to simplex res all vertices which are
+ * @details Add to simplex res all vertices which are
* neighbours of alpha: ie \f$ res \leftarrow res \cup N(alpha) \f$.
*
* If 'keep_only_superior' is true then only vertices that are greater than alpha are added.
- *
* todo revoir
*
*/
virtual void add_neighbours(const Simplex_handle &alpha, Simplex_handle & res,bool keep_only_superior=false) const{
res.clear();
- // ----------------------------
- // Compute vertices in the link
- // we compute the intersection of N(alpha_i) and store it in n
- // ----------------------------
auto alpha_vertex = alpha.begin();
add_neighbours(*alpha_vertex,res,keep_only_superior);
for (alpha_vertex = (alpha.begin())++ ; alpha_vertex != alpha.end() ; ++alpha_vertex)
- {
keep_neighbours(*alpha_vertex,res,keep_only_superior);
- }
}
/**
- * @brief Eliminates from simplex n all vertices which are
- * not neighbours of v: \f$ res \leftarrow res \cap N(v) \f$.
- *
+ * @details Remove from simplex n all vertices which are
+ * not neighbours of v e.g. \f$ res \leftarrow res \cap N(v) \f$.
* If 'keep_only_superior' is true then only vertices that are greater than v are keeped.
- *
*/
virtual void keep_neighbours(Vertex_handle v, Simplex_handle& res,bool keep_only_superior=false) const{
Simplex_handle nv;
@@ -913,24 +906,17 @@ public:
}
/**
- * @brief Eliminates from simplex n all vertices which are
- * neighbours of v: \f$ res \leftarrow res \setminus N(v) \f$.
- *
+ * @details Remove from simplex all vertices which are
+ * neighbours of v eg \f$ res \leftarrow res \setminus N(v) \f$.
* If 'keep_only_superior' is true then only vertices that are greater than v are added.
- *
*/
virtual void remove_neighbours(Vertex_handle v, Simplex_handle & res,bool keep_only_superior=false) const{
Simplex_handle nv;
add_neighbours(v,nv,keep_only_superior);
res.difference(nv);
}
- //@}
- /////////////////////////////////////////////////////////////////////////////
- /** @name Operations on the simplicial complex
- */
- //@{
public:
/**
@@ -1003,8 +989,9 @@ public:
/*
* @brief returns the number of edges in the complex.
- * todo in O(n), cache the value
+ * @details currently in O(n)
*/
+ // todo cache the value
int num_edges() const{
return boost::num_edges(skeleton);
}
@@ -1032,22 +1019,6 @@ public:
return boost::connected_components(this->skeleton,&component[0]) - num_vert_collapsed;
}
-
- //todo remove
- // do
- void keep_only_largest_cc(){
- std::vector<unsigned> component(skeleton.vertex_set().size());
- boost::connected_components(this->skeleton,&component[0]);
- auto maxCC = min_element(component.begin(),component.end());
- for (unsigned i = 0; i != component.size(); ++i){
- if(component[i]!=*maxCC){
- if(this->contains_vertex(Vertex_handle(i)))
- this->remove_vertex(Vertex_handle(i));
- }
- }
- }
-
-
/**
* @brief %Test if the complex is a cone.
* @details Runs in O(n) where n is the number of vertices.
@@ -1223,6 +1194,9 @@ public:
typedef boost::iterator_range < Complex_simplex_iterator > Complex_simplex_range;
+ /**
+ * @brief Returns a Complex_simplex_range over all the simplices of the complex
+ */
Complex_simplex_range simplex_range() const
{
Complex_simplex_iterator end(this,true);
@@ -1265,7 +1239,9 @@ private:
public:
-
+ /**
+ * @brief Returns a range of the blockers of the complex passing through a vertex
+ */
Complex_blocker_around_vertex_range blocker_range(Vertex_handle v)
{
auto begin = Complex_blocker_around_vertex_iterator(blocker_map_.lower_bound(v));
@@ -1274,7 +1250,7 @@ public:
}
/**
- * @brief Returns a Complex_blocker_around_vertex_range over all blockers of the complex adjacent to the vertex v.
+ * @brief Returns a range of the blockers of the complex passing through a vertex
*/
Const_complex_blocker_around_vertex_range const_blocker_range(Vertex_handle v) const
{
@@ -1310,7 +1286,9 @@ private:
public:
-
+ /**
+ * @brief Returns a range of the blockers of the complex
+ */
Complex_blocker_range blocker_range()
{
auto begin = Complex_blocker_iterator(blocker_map_.begin(), blocker_map_.end() );
@@ -1318,7 +1296,9 @@ public:
return Complex_blocker_range(begin,end);
}
-
+ /**
+ * @brief Returns a range of the blockers of the complex
+ */
Const_complex_blocker_range const_blocker_range() const
{
auto begin = Const_complex_blocker_iterator(blocker_map_.begin(), blocker_map_.end() );
diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h
index f81f5a94..11b990c0 100644
--- a/src/common/doc/main_page.h
+++ b/src/common/doc/main_page.h
@@ -10,7 +10,7 @@ state-of-the-art algorithms and data structures for computational topology.
The current release of the library allows to use several data-structures for simplicial complexes :
simplex tree, Hasse diagram or skeleton-blocker. Several operations can then be done on top of these
-representations persistent homology computation, or simplification.
+representations such a spersistent homology computation or simplification.
All data-structures are generic and several of their aspects (such as stored elements, policies)
can be parametrized via template classes.
@@ -30,7 +30,7 @@ Some packages require additional libraries :
The procedure to install these packages according to your operating system is
detailled here http://doc.cgal.org/latest/Manual/installation.html
-The library compiles in Linux, Mac OSX and visual studio 2013.
+The library compiles in Linux, Mac OSX and Visual Studio 2013.
\section d Demos and Examples
@@ -51,6 +51,6 @@ make
\details
\copyright GNU General Public License v3.
-\verbatim Contact: Clément Maria, clement.maria@inria.fr \endverbatim
+\verbatim Contact: gudhi-devel@lists.gforge.inria.fr \endverbatim
*/ \ No newline at end of file