TTK
|
TTK processing package for the computation of persistence diagrams. More...
#include <PersistenceDiagram.h>
Public Types | |
enum class | BACKEND { FTM = 0 , PROGRESSIVE_TOPOLOGY = 1 , DISCRETE_MORSE_SANDWICH = 2 , APPROXIMATE_TOPOLOGY = 3 , PERSISTENT_SIMPLEX = 4 } |
Public Member Functions | |
PersistenceDiagram () | |
void | setBackend (const BACKEND be) |
void | setComputeMinSad (const bool data) |
void | setComputeSadSad (const bool data) |
void | setComputeSadMax (const bool data) |
template<typename scalarType , typename triangulationType > | |
void | augmentPersistenceDiagram (std::vector< PersistencePair > &persistencePairs, const scalarType *const scalars, const triangulationType *triangulation) |
Complete a ttk::DiagramType instance with scalar field values (useful for persistence) and 3D coordinates of critical vertices. | |
ttk::CriticalType | getNodeType (ftm::FTMTree_MT *tree, ftm::TreeType treeType, const SimplexId vertexId) const |
void | sortPersistenceDiagram (std::vector< PersistencePair > &diagram, const SimplexId *const offsets) const |
template<typename scalarType > | |
int | computeCTPersistenceDiagram (ftm::FTMTreePP &tree, const std::vector< std::tuple< ttk::SimplexId, ttk::SimplexId, scalarType, bool > > &pairs, std::vector< PersistencePair > &diagram) const |
template<typename scalarType , class triangulationType > | |
int | execute (std::vector< PersistencePair > &CTDiagram, const scalarType *inputScalars, const size_t scalarsMTime, const SimplexId *inputOffsets, const triangulationType *triangulation, const std::vector< bool > *updateMask=nullptr) |
template<typename scalarType , class triangulationType > | |
int | executeFTM (std::vector< PersistencePair > &CTDiagram, const scalarType *inputScalars, const SimplexId *inputOffsets, const triangulationType *triangulation) |
template<class triangulationType > | |
int | executeProgressiveTopology (std::vector< PersistencePair > &CTDiagram, const SimplexId *inputOffsets, const triangulationType *triangulation) |
template<typename scalarType , class triangulationType > | |
int | executeApproximateTopology (std::vector< PersistencePair > &CTDiagram, const scalarType *inputScalars, const triangulationType *triangulation) |
template<class triangulationType > | |
int | executePersistentSimplex (std::vector< PersistencePair > &CTDiagram, const SimplexId *inputOffsets, const triangulationType *triangulation) |
template<typename scalarType , class triangulationType > | |
int | executeDiscreteMorseSandwich (std::vector< PersistencePair > &CTDiagram, const scalarType *inputScalars, const size_t scalarsMTime, const SimplexId *inputOffsets, const triangulationType *triangulation, const std::vector< bool > *updateMask=nullptr) |
template<class triangulationType > | |
void | checkProgressivityRequirement (const triangulationType *triangulation) |
template<class triangulationType > | |
void | checkManifold (const triangulationType *const triangulation) |
void | preconditionTriangulation (AbstractTriangulation *triangulation) |
void | setOutputMonotonyOffsets (void *data) |
void | setOutputOffsets (void *data) |
void | setOutputScalars (void *data) |
void | setDeltaApproximate (double data) |
template<class triangulationType > | |
void | checkProgressivityRequirement (const triangulationType *ttkNotUsed(triangulation)) |
![]() | |
Debug () | |
~Debug () override | |
virtual int | setDebugLevel (const int &debugLevel) |
int | setWrapper (const Wrapper *wrapper) override |
int | printMsg (const std::string &msg, const debug::Priority &priority=debug::Priority::INFO, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
int | printMsg (const std::vector< std::string > &msgs, const debug::Priority &priority=debug::Priority::INFO, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
int | printErr (const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const |
int | printWrn (const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const |
int | printMsg (const std::string &msg, const double &progress, const double &time, const int &threads, const double &memory, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const |
int | printMsg (const std::string &msg, const double &progress, const double &time, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const |
int | printMsg (const std::string &msg, const double &progress, const double &time, const int &threads, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const |
int | printMsg (const std::string &msg, const double &progress, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const |
int | printMsg (const std::string &msg, const double &progress, const debug::Priority &priority, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
int | printMsg (const std::vector< std::vector< std::string > > &rows, const debug::Priority &priority=debug::Priority::INFO, const bool hasHeader=true, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
int | printMsg (const debug::Separator &separator, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::INFO, std::ostream &stream=std::cout) const |
int | printMsg (const debug::Separator &separator, const debug::Priority &priority, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
int | printMsg (const std::string &msg, const debug::Separator &separator, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::INFO, std::ostream &stream=std::cout) const |
void | setDebugMsgPrefix (const std::string &prefix) |
![]() | |
BaseClass () | |
virtual | ~BaseClass ()=default |
int | getThreadNumber () const |
virtual int | setThreadNumber (const int threadNumber) |
Protected Attributes | |
bool | IgnoreBoundary {false} |
ftm::FTMTreePP | contourTree_ {} |
dcg::DiscreteGradient | dcg_ {} |
PersistentSimplexPairs | psp_ {} |
DiscreteMorseSandwich | dms_ {} |
BACKEND | BackEnd {BACKEND::DISCRETE_MORSE_SANDWICH} |
ttk::ProgressiveTopology | progT_ {} |
ttk::ApproximateTopology | approxT_ {} |
int | StartingResolutionLevel {0} |
int | StoppingResolutionLevel {-1} |
bool | IsResumable {false} |
double | TimeLimit {} |
void * | outputScalars_ {} |
void * | outputOffsets_ {} |
void * | outputMonotonyOffsets_ {} |
double | Epsilon |
![]() | |
int | debugLevel_ |
std::string | debugMsgPrefix_ |
std::string | debugMsgNamePrefix_ |
![]() | |
bool | lastObject_ |
int | threadNumber_ |
Wrapper * | wrapper_ |
Additional Inherited Members | |
![]() | |
int | printMsgInternal (const std::string &msg, const std::string &right, const std::string &filler, const debug::Priority &priority=debug::Priority::INFO, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
int | printMsgInternal (const std::string &msg, const debug::Priority &priority, const debug::LineMode &lineMode, std::ostream &stream=std::cout) const |
int | welcomeMsg (std::ostream &stream) |
![]() | |
static COMMON_EXPORTS debug::LineMode | lastLineMode = ttk::debug::LineMode::NEW |
TTK processing package for the computation of persistence diagrams.
Compute the persistence diagram of a function on a triangulation. TTK assumes that the input dataset is made of only one connected component.
This package computes the persistence diagram of the extremum-saddle pairs of an input scalar field. The X-coordinate of each pair corresponds to its birth, while its smallest and highest Y-coordinates correspond to its birth and death respectively.
In practice, each extremity of a persistence pair is represented by its vertexId and critical type. Based on that, the persistence of the pair and its 2D embedding can easily be obtained.
Persistence diagrams are useful and stable concise representations of the topological features of a data-set. It is useful to fine-tune persistence thresholds for topological simplification or for fast similarity estimations for instance.
Related publication
"Computational Topology: An Introduction"
Herbert Edelsbrunner and John Harer
American Mathematical Society, 2010
Five backends are available for the computation:
1) FTM
Related publication
"Task-based Augmented Contour Trees with Fibonacci Heaps" Charles Gueunet, Pierre Fortin, Julien Jomier, Julien Tierny IEEE Transactions on Parallel and Distributed Systems, 2019
2) Progressive Approach
Related publication
"A Progressive Approach to Scalar Field Topology"
Jules Vidal, Pierre Guillou, Julien Tierny
IEEE Transactions on Visualization and Computer Graphics, 2021
3) Discrete Morse Sandwich (default)
Related publication
"Discrete Morse Sandwich: Fast Computation of Persistence Diagrams for
Scalar Data -- An Algorithm and A Benchmark"
Pierre Guillou, Jules Vidal, Julien Tierny
IEEE Transactions on Visualization and Computer Graphics, 2023.
arXiv:2206.13932, 2023.
Fast and versatile algorithm for persistence diagram computation.
4) Approximate Approach
Related publication
"Fast Approximation of Persistence Diagrams with Guarantees"
Jules Vidal, Julien Tierny
IEEE Symposium on Large Data Visualization and Analysis (LDAV), 2021
5) Persistent Simplex
This is a textbook (and very slow) algorithm, described in "Algorithm and Theory of Computation Handbook (Second Edition)
- Special Topics and Techniques" by Atallah and Blanton on page 97.
Online examples:
Definition at line 165 of file PersistenceDiagram.h.
|
strong |
Enumerator | |
---|---|
FTM | |
PROGRESSIVE_TOPOLOGY | |
DISCRETE_MORSE_SANDWICH | |
APPROXIMATE_TOPOLOGY | |
PERSISTENT_SIMPLEX |
Definition at line 168 of file PersistenceDiagram.h.
PersistenceDiagram::PersistenceDiagram | ( | ) |
Definition at line 8 of file PersistenceDiagram.cpp.
void ttk::PersistenceDiagram::augmentPersistenceDiagram | ( | std::vector< PersistencePair > & | persistencePairs, |
const scalarType *const | scalars, | ||
const triangulationType * | triangulation | ||
) |
Complete a ttk::DiagramType instance with scalar field values (useful for persistence) and 3D coordinates of critical vertices.
Definition at line 373 of file PersistenceDiagram.h.
void ttk::PersistenceDiagram::checkManifold | ( | const triangulationType *const | triangulation | ) |
Definition at line 748 of file PersistenceDiagram.h.
void ttk::PersistenceDiagram::checkProgressivityRequirement | ( | const triangulationType * | triangulation | ) |
void ttk::PersistenceDiagram::checkProgressivityRequirement | ( | const triangulationType * | ttkNotUsedtriangulation | ) |
Definition at line 732 of file PersistenceDiagram.h.
int ttk::PersistenceDiagram::computeCTPersistenceDiagram | ( | ftm::FTMTreePP & | tree, |
const std::vector< std::tuple< ttk::SimplexId, ttk::SimplexId, scalarType, bool > > & | pairs, | ||
std::vector< PersistencePair > & | diagram | ||
) | const |
Definition at line 331 of file PersistenceDiagram.h.
int ttk::PersistenceDiagram::execute | ( | std::vector< PersistencePair > & | CTDiagram, |
const scalarType * | inputScalars, | ||
const size_t | scalarsMTime, | ||
const SimplexId * | inputOffsets, | ||
const triangulationType * | triangulation, | ||
const std::vector< bool > * | updateMask = nullptr |
||
) |
inputOffsets
buffer prior to any computation (the VTK wrapper already includes a mechanism to automatically generate such a preconditioned buffer). Definition at line 393 of file PersistenceDiagram.h.
int ttk::PersistenceDiagram::executeApproximateTopology | ( | std::vector< PersistencePair > & | CTDiagram, |
const scalarType * | inputScalars, | ||
const triangulationType * | triangulation | ||
) |
Definition at line 591 of file PersistenceDiagram.h.
int ttk::PersistenceDiagram::executeDiscreteMorseSandwich | ( | std::vector< PersistencePair > & | CTDiagram, |
const scalarType * | inputScalars, | ||
const size_t | scalarsMTime, | ||
const SimplexId * | inputOffsets, | ||
const triangulationType * | triangulation, | ||
const std::vector< bool > * | updateMask = nullptr |
||
) |
Definition at line 514 of file PersistenceDiagram.h.
int ttk::PersistenceDiagram::executeFTM | ( | std::vector< PersistencePair > & | CTDiagram, |
const scalarType * | inputScalars, | ||
const SimplexId * | inputOffsets, | ||
const triangulationType * | triangulation | ||
) |
Definition at line 678 of file PersistenceDiagram.h.
int ttk::PersistenceDiagram::executePersistentSimplex | ( | std::vector< PersistencePair > & | CTDiagram, |
const SimplexId * | inputOffsets, | ||
const triangulationType * | triangulation | ||
) |
Definition at line 442 of file PersistenceDiagram.h.
int ttk::PersistenceDiagram::executeProgressiveTopology | ( | std::vector< PersistencePair > & | CTDiagram, |
const SimplexId * | inputOffsets, | ||
const triangulationType * | triangulation | ||
) |
Definition at line 635 of file PersistenceDiagram.h.
CriticalType PersistenceDiagram::getNodeType | ( | ftm::FTMTree_MT * | tree, |
ftm::TreeType | treeType, | ||
const SimplexId | vertexId | ||
) | const |
Definition at line 12 of file PersistenceDiagram.cpp.
|
inline |
Definition at line 268 of file PersistenceDiagram.h.
|
inline |
Definition at line 178 of file PersistenceDiagram.h.
|
inline |
Definition at line 182 of file PersistenceDiagram.h.
|
inline |
Definition at line 188 of file PersistenceDiagram.h.
|
inline |
Definition at line 185 of file PersistenceDiagram.h.
|
inline |
Definition at line 300 of file PersistenceDiagram.h.
|
inline |
Definition at line 291 of file PersistenceDiagram.h.
|
inline |
Definition at line 294 of file PersistenceDiagram.h.
|
inline |
Definition at line 297 of file PersistenceDiagram.h.
void ttk::PersistenceDiagram::sortPersistenceDiagram | ( | std::vector< PersistencePair > & | diagram, |
const SimplexId *const | offsets | ||
) | const |
Definition at line 43 of file PersistenceDiagram.cpp.
|
protected |
Definition at line 315 of file PersistenceDiagram.h.
|
protected |
Definition at line 312 of file PersistenceDiagram.h.
|
protected |
Definition at line 306 of file PersistenceDiagram.h.
|
protected |
Definition at line 307 of file PersistenceDiagram.h.
|
protected |
Definition at line 309 of file PersistenceDiagram.h.
|
protected |
Definition at line 326 of file PersistenceDiagram.h.
|
protected |
Definition at line 305 of file PersistenceDiagram.h.
|
protected |
Definition at line 319 of file PersistenceDiagram.h.
|
protected |
Definition at line 325 of file PersistenceDiagram.h.
|
protected |
Definition at line 324 of file PersistenceDiagram.h.
|
protected |
Definition at line 323 of file PersistenceDiagram.h.
|
protected |
Definition at line 314 of file PersistenceDiagram.h.
|
protected |
Definition at line 308 of file PersistenceDiagram.h.
|
protected |
Definition at line 317 of file PersistenceDiagram.h.
|
protected |
Definition at line 318 of file PersistenceDiagram.h.
|
protected |
Definition at line 320 of file PersistenceDiagram.h.