From 6a6651c5a097f5024a42c9912723fe09ba714fe7 Mon Sep 17 00:00:00 2001 From: salinasd Date: Mon, 15 Dec 2014 17:44:43 +0000 Subject: doc git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@353 636b058d-ea47-450e-bf9e-a15bfbe3eedb --- src/Doxyfile | 3 +- .../include/gudhi/Persistent_cohomology.h | 29 +- src/Skeleton_blocker/doc/ds_representation.png | Bin 42558 -> 36412 bytes src/Skeleton_blocker/doc/ds_representation.svg | 470 +++++++++++++++++++++ .../include/gudhi/Skeleton_blocker.h | 18 +- .../include/gudhi/Skeleton_blocker_complex.h | 1 + .../gudhi/Skeleton_blocker_geometric_complex.h | 2 +- .../include/gudhi/Skeleton_blocker_link_complex.h | 1 + .../gudhi/Skeleton_blocker_simplifiable_complex.h | 1 + src/common/doc/Gudhi_banner.jpg | Bin 0 -> 34437 bytes src/common/doc/main_page.h | 48 ++- src/common/include/gudhi/Utils.h | 2 +- 12 files changed, 533 insertions(+), 42 deletions(-) create mode 100644 src/Skeleton_blocker/doc/ds_representation.svg create mode 100644 src/common/doc/Gudhi_banner.jpg (limited to 'src') diff --git a/src/Doxyfile b/src/Doxyfile index bda1bdc8..7dbf9a06 100644 --- a/src/Doxyfile +++ b/src/Doxyfile @@ -831,7 +831,8 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = Skeleton_blocker/doc/ +IMAGE_PATH = Skeleton_blocker/doc/ \ + common/doc/ # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h index cd4a2bcc..70173462 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h @@ -35,14 +35,12 @@ namespace Gudhi{ /** \defgroup persistent_cohomology Persistent Cohomology Package * - * 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 - * implementation of \cite DBLP:conf/esa/BoissonnatDM13 - * - * - * - + + 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 + implementation of \cite DBLP:conf/esa/BoissonnatDM13 + The theory of homology consists in attaching to a topological space a sequence of (homology) groups, capturing global topological features @@ -159,6 +157,21 @@ namespace Gudhi{ in \cite boissonnat:hal-00922572. +\section Examples + We provide several example files: run these examples with -h for details on their use, and read the README file. + +\li rips_persistence.cpp computes the Rips complex of a point cloud and its persistence diagram. + +\li rips_multifield_persistence.cpp computes the Rips complex of a point cloud and its persistence diagram +with a family of field coefficients. + +\li performance_rips_persistence.cpp provides timings for the construction of the Rips complex on a set of +points sampling a Klein bottle in \f$\mathbb{R}^5\f$ with a simplex tree, its conversion to a +Hasse diagram and the computation of persistent homology and multi-field persistent homology for the +different representations. + + + \author Clément Maria \version 1.0 \date 2014 diff --git a/src/Skeleton_blocker/doc/ds_representation.png b/src/Skeleton_blocker/doc/ds_representation.png index bb224038..8136621a 100644 Binary files a/src/Skeleton_blocker/doc/ds_representation.png and b/src/Skeleton_blocker/doc/ds_representation.png differ diff --git a/src/Skeleton_blocker/doc/ds_representation.svg b/src/Skeleton_blocker/doc/ds_representation.svg new file mode 100644 index 00000000..981b2874 --- /dev/null +++ b/src/Skeleton_blocker/doc/ds_representation.svg @@ -0,0 +1,470 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Simplicial complex + Encoding + Graph + Blockers + + + = + + diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h index 3d3910bf..00e1935b 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h @@ -35,18 +35,18 @@ -/** \defgroup skbl Skeleton-blocker Package +/** \defgroup skbl Skeleton-Blocker Package \author David Salinas \section Introduction -The Skeleton-blocker data-structure had been introduced in the two papers +The Skeleton-Blocker data-structure had been introduced in the two papers [\cite skbl_socg2011,\cite skbl_ijcga2012]. 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 is very small in practice (see next section for a formal definition). -This data-structure handles every classical operations used for simplicial complexes such as +This data-structure handles all simplicial complexes operations such as as simplex enumeration or simplex removal but operations that are particularly efficient are operations that do not require simplex enumeration such as edge iteration, link computation or simplex contraction. @@ -58,7 +58,7 @@ An abstract simplex is a finite non-empty set and its dimension is its number of 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, when \f$ \tau \neq \sigma\f$ we say that \f$ \tau\f$ is a proper-face of \f$ \sigma\f$. -An abstract simplicial complex is a set of simplices that contains all the faces of its simplices. +An abstract simplicial complex is a set of simplices that contains all the faces of their simplices. The 1-skeleton of a simplicial complex (or its graph) consists of its elements of dimension lower than 2. *\image html "ds_representation.png" "Skeleton-blocker representation" width=20cm @@ -78,7 +78,7 @@ in topological data-analysis. In practice, the set of blockers of a simplicial complex remains also small when simplifying a Rips complex with edge contractions but also for most of the simplicial complexes used in topological data-analysis such as Delaunay, Cech or Witness complexes. -For instance, the numbers of blockers is depicted for a random 3 dimensional sphere embedded into \f$R^4\f$ +For instance, the numbers of blockers is depicted for random 3 dimensional spheres embedded into \f$R^4\f$ in figure X. @@ -93,11 +93,11 @@ in figure X. Four classes define a simplicial complex namely : -\li Skeleton_blocker_complex : a simplicial complex with basic operations such as vertex/edge/simplex enumeration and construction -\li Skeleton_blocker_link_complex : the link of a simplex in a parent complex. It is represented as a sub complex +\li Skeleton_blocker_complex : a simplicial complex with basic operations such as vertex/edge/simplex enumeration and construction +\li Skeleton_blocker_link_complex : the link of a simplex in a parent complex. It is represented as a sub complex of the parent complex -\li Skeleton_blocker_simplifiable_complex : a simplicial complex with simplification operations such as edge contraction or simplex collapse -\li Skeleton_blocker_geometric_complex : a simplicial complex who has access to geometric points in \f$R^d\f$ +\li Skeleton_blocker_simplifiable_complex : a simplicial complex with simplification operations such as edge contraction or simplex collapse +\li Skeleton_blocker_geometric_complex : a simplicial complex who has access to geometric points in \f$R^d\f$ The two last classes are derived classes from the Skeleton_blocker_complex class. The class Skeleton_blocker_link_complex inheritates from a template passed parameter that may be either Skeleton_blocker_complex or Skeleton_blocker_geometric_complex (a link may store points coordinates or not). diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h index 88c777ee..61ee8684 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h @@ -57,6 +57,7 @@ namespace skbl { /** *@class Skeleton_blocker_complex *@brief Abstract Simplicial Complex represented with a skeleton/blockers pair. + *@ingroup skbl */ template class Skeleton_blocker_complex diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_geometric_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_geometric_complex.h index 03be7990..4dbabd60 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_geometric_complex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_geometric_complex.h @@ -36,7 +36,7 @@ namespace skbl { /** * @brief Class that represents a geometric complex that can be simplified. * The class allows access to points of vertices. - * + * @ingroup skbl */ template class Skeleton_blocker_geometric_complex : public Skeleton_blocker_simplifiable_complex diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_link_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_link_complex.h index 62f827b7..f3ebfa60 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_link_complex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_link_complex.h @@ -36,6 +36,7 @@ template class Skeleton_blocker_sub_complex; * \brief Class representing the link of a simplicial complex encoded by a skeleton/blockers pair. * It inherits from Skeleton_blocker_sub_complex because such complex is a sub complex of a * root complex. + * \ingroup skbl */ template class Skeleton_blocker_link_complex : public Skeleton_blocker_sub_complex diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_simplifiable_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_simplifiable_complex.h index 4fbad532..968e8be4 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_simplifiable_complex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_simplifiable_complex.h @@ -31,6 +31,7 @@ namespace skbl { /** * \brief Class that allows simplification operation on a simplicial complex represented * by a skeleton/blockers pair. + * \ingroup skbl */ template class Skeleton_blocker_simplifiable_complex : public Skeleton_blocker_complex diff --git a/src/common/doc/Gudhi_banner.jpg b/src/common/doc/Gudhi_banner.jpg new file mode 100644 index 00000000..ebd3d8af Binary files /dev/null and b/src/common/doc/Gudhi_banner.jpg differ diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 4e36066f..f81f5a94 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -1,20 +1,38 @@ /** \mainpage +\image html "Gudhi_banner.jpg" "" width=20cm + The Gudhi library (Geometric Understanding in Higher Dimensions) is a generic C++ library for -computational topology. Its goal is to provide robust, efficient, flexible and easy to use +topological analysis of high-dimensional data whose goal is to provide robust, efficient, flexible and easy to use implementations of -state-of-the-art algorithms and data structures for computational topology. We refer to +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. + +All data-structures are generic and several of their aspects (such as stored elements, policies) +can be parametrized via template classes. + +We refer to \cite gudhilibrary_ICMS14 for a detailed description of the design of the library. -The current release of the library allows the user to construct representations of simplicial complexes -- -simplex tree or Hasse diagram -- from a point -cloud (Rips complex) or -a list of simplices, and to compute their persistent homology with coefficients in a field -\f$\mathbb{Z}/p\mathbb{Z}\f$ (for an arbitrary prime \f$p\f$), or simultaneously with coefficients -in a family of fields (multi-field persistent homology). +\section Compiling + +The library uses c++11 and requires Boost with version 1.48.0 or more recent : http://www.boost.org/. +Some packages require additional libraries : +\li the multi-field persistent homology algorithm has an optional dependency with GMP +\li Qt demos require CGAL, Qt4 and QGLViewer + +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. + +\section d Demos and Examples To build the library, run the following in a terminal: @@ -26,22 +44,8 @@ cmake -DCMAKE_BUILD_TYPE=Release .. make \endverbatim -The library has dependencies with Boost 1.48.0 or more recent (required): http://www.boost.org/ -and with GMP: https://gmplib.org/ The dependency with GMP is optional, and is used only for the -multi-field persistent homology algorithm. - - -We provide example files: run these examples with -h for details on their use, and read the README file. - -\li rips_persistence.cpp computes the Rips complex of a point cloud and its persistence diagram. -\li rips_multifield_persistence.cpp computes the Rips complex of a point cloud and its persistence diagram -with a family of field coefficients. -\li performance_rips_persistence.cpp provides timings for the construction of the Rips complex on a set of -points sampling a Klein bottle in \f$\mathbb{R}^5\f$ with a simplex tree, its conversion to a -Hasse diagram and the computation of persistent homology and multi-field persistent homology for the -different representations. \details diff --git a/src/common/include/gudhi/Utils.h b/src/common/include/gudhi/Utils.h index 7678685c..1626a0bf 100644 --- a/src/common/include/gudhi/Utils.h +++ b/src/common/include/gudhi/Utils.h @@ -25,7 +25,7 @@ #define PRINT(a) std::cerr << #a << ": " << (a) << " (DISP)"<