TTK
Loading...
Searching...
No Matches
ttk::VectorSimplification Class Reference

TTK VectorSimplification processing package. More...

#include <VectorSimplification.h>

Inheritance diagram for ttk::VectorSimplification:
ttk::Debug ttk::BaseClass

Classes

struct  CandidatePair
 Candidate pair struct for information of pairs connected by V-Paths We need to know the start and end points, type of connection, weight of connection and which cell to follow for ascending or descending path. More...
 
struct  PlotPoint
 

Public Member Functions

 VectorSimplification ()
 
void preconditionTriangulation (AbstractTriangulation *const data)
 
template<typename dataType, typename triangulationType>
int buildField (const void *const vectors, const size_t vectorsMTime, const triangulationType &triangulation)
 
template<typename dataType, typename triangulationType>
int performSimplification (const int criticalThreshold, const bool storePlotPoints, std::vector< PlotPoint > &listOfPlotPoints, const triangulationType &triangulation)
 
void setField (ttk::dcvf::DiscreteVectorField &&dcvf)
 Ugly hack to avoid a call to buildField()
 
void setFullOrbitSimplification (bool doFullOrbit)
 
ttk::dcvf::DiscreteVectorField && getField ()
 
template<typename dataType, typename triangulationType>
std::vector< std::vector< ttk::VectorSimplification::CandidatePair > > getSaddle1ToDescPair (const std::vector< SimplexId > &criticalEdges, const triangulationType &triangulation) const
 
template<typename dataType, typename triangulationType, typename GFS, typename GFSN, typename OB>
std::vector< std::vector< ttk::VectorSimplification::CandidatePair > > getSaddle2ToAscPair (const std::vector< SimplexId > &criticalCells, const GFS &getFaceStar, const GFSN &getFaceStarNumber, const OB &isOnBoundary, const triangulationType &triangulation, const dataType dummyVariable) const
 
- Public Member Functions inherited from ttk::Debug
 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)
 
- Public Member Functions inherited from ttk::BaseClass
 BaseClass ()
 
virtual ~BaseClass ()=default
 
int getThreadNumber () const
 
virtual int setThreadNumber (const int threadNumber)
 

Public Attributes

dcvf::DiscreteVectorField dcvf_ {}
 

Protected Member Functions

template<typename dataType, typename triangulationType>
std::vector< std::vector< CandidatePair > > getSaddle1ToDescPair (const std::vector< SimplexId > &criticalEdges, const triangulationType &triangulation) const
 Follow the descending 1-separatrices to compute the saddles -> extrema association.
 
template<typename dataType, typename triangulationType, typename GFS, typename GFSN, typename OB>
std::vector< std::vector< CandidatePair > > getSaddle2ToAscPair (const std::vector< SimplexId > &criticalCells, const GFS &getFaceStar, const GFSN &getFaceStarNumber, const OB &isOnBoundary, const triangulationType &triangulation, const dataType dummyVariable) const
 Follow the ascending 1-separatrices to compute the saddles -> extrema association.
 
template<typename dataType, typename triangulationType>
void getDescSaddlePairs (std::vector< CandidatePair > &pairs, const std::vector< SimplexId > &criticalEdges, const triangulationType &triangulation) const
 Compute the candidate pairs from descending paths from saddles.
 
template<typename dataType, typename triangulationType>
void getAscSaddlePairs (std::vector< CandidatePair > &pairs, const std::vector< SimplexId > &criticalSaddles, const triangulationType &triangulation) const
 Compute the candidate pairs from ascending paths from saddles.
 
bool isAlternatingVpath (std::vector< Cell > &vpath)
 Determine if the VPath has 'alternating' behavior of dimension ex: 0-1 to 1-2.
 
void displayStats (const std::vector< CandidatePair > &pairs, const std::array< std::vector< SimplexId >, 4 > &criticalCellsByDim, const std::vector< bool > &pairedMinima, const std::vector< bool > &paired1Saddles, const std::vector< bool > &paired2Saddles, const std::vector< bool > &pairedMaxima) const
 Print number of pairs, critical cells per dimension & unpaired cells.
 
- Protected Member Functions inherited from ttk::Debug
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)
 

Additional Inherited Members

- Protected Attributes inherited from ttk::Debug
int debugLevel_
 
std::string debugMsgPrefix_
 
std::string debugMsgNamePrefix_
 
- Protected Attributes inherited from ttk::BaseClass
bool lastObject_
 
int threadNumber_
 
Wrapperwrapper_
 
- Static Protected Attributes inherited from ttk::Debug
static COMMON_EXPORTS debug::LineMode lastLineMode = ttk::debug::LineMode::NEW
 

Detailed Description

TTK VectorSimplification processing package.

Author
Tanner Finken finke.nosp@m.nt@a.nosp@m.rizon.nosp@m.a.ed.nosp@m.u
Josh A. Levine josh@.nosp@m.cs.a.nosp@m.rizon.nosp@m.a.ed.nosp@m.u
Date
November 2024.

VectorSimplification computes a Weight Curve by using the Discrete Morse-Theory DiscreteVectorField simplification with flipping paths based on the lowest weight value. The implementation is slightly different than described in the paper as this will 'shortcut' the saddle-orbit cancellation pairs by tracing through the orbit by flipping dimensionality (e.g. 0-1 to 1-2 V-Path) and either including the orbit or not depending on the given flag.

Related publication
"Localized Evaluation for Constructing Discrete Vector Fields"
Tanner Finken, Julien Tierny, Joshua A. Levine
IEEE Vis 2024.

Additionally, a large portion of the tracing code has been adapted from ttk::DiscreteMorseSandwich.

See also
ttk::DiscreteMorseSandwich
ttk::dcvf::DiscreteVectorField

Online examples:

Definition at line 44 of file VectorSimplification.h.

Constructor & Destructor Documentation

◆ VectorSimplification()

ttk::VectorSimplification::VectorSimplification ( )

Definition at line 3 of file VectorSimplification.cpp.

Member Function Documentation

◆ buildField()

template<typename dataType, typename triangulationType>
int ttk::VectorSimplification::buildField ( const void *const vectors,
const size_t vectorsMTime,
const triangulationType & triangulation )
inline

Definition at line 110 of file VectorSimplification.h.

◆ displayStats()

void ttk::VectorSimplification::displayStats ( const std::vector< CandidatePair > & pairs,
const std::array< std::vector< SimplexId >, 4 > & criticalCellsByDim,
const std::vector< bool > & pairedMinima,
const std::vector< bool > & paired1Saddles,
const std::vector< bool > & paired2Saddles,
const std::vector< bool > & pairedMaxima ) const
protected

Print number of pairs, critical cells per dimension & unpaired cells.

Parameters
[in]pairsComputed persistence pairs
[in]criticalCellsByDimStore critical cells ids per dimension
[in]pairedMinimaIf minima are paired
[in]paired1SaddlesIf 1-saddles are paired
[in]paired2SaddlesIf 2-saddles are paired
[in]pairedMaximaIf maxima are paired

Definition at line 7 of file VectorSimplification.cpp.

◆ getAscSaddlePairs()

template<typename dataType, typename triangulationType>
void ttk::VectorSimplification::getAscSaddlePairs ( std::vector< CandidatePair > & pairs,
const std::vector< SimplexId > & criticalSaddles,
const triangulationType & triangulation ) const
protected

Compute the candidate pairs from ascending paths from saddles.

Parameters
[out]pairsOutput candidate pairs
[in]criticalSaddlesList of 2-saddles (or 1-saddles in 2D)
[in]triangulationTriangulation

Definition at line 649 of file VectorSimplification.h.

◆ getDescSaddlePairs()

template<typename dataType, typename triangulationType>
void ttk::VectorSimplification::getDescSaddlePairs ( std::vector< CandidatePair > & pairs,
const std::vector< SimplexId > & criticalEdges,
const triangulationType & triangulation ) const
protected

Compute the candidate pairs from descending paths from saddles.

Parameters
[out]pairsOutput candidate pairs
[in]criticalEdgesList of 1-saddles (or maxima in 1D)
[in]triangulationTriangulation

Definition at line 631 of file VectorSimplification.h.

◆ getField()

ttk::dcvf::DiscreteVectorField && ttk::VectorSimplification::getField ( )
inline

Definition at line 358 of file VectorSimplification.h.

◆ getSaddle1ToDescPair() [1/2]

template<typename dataType, typename triangulationType>
std::vector< std::vector< CandidatePair > > ttk::VectorSimplification::getSaddle1ToDescPair ( const std::vector< SimplexId > & criticalEdges,
const triangulationType & triangulation ) const
protected

Follow the descending 1-separatrices to compute the saddles -> extrema association.

Parameters
[in]criticalEdgesCritical edges identifiers
[in]triangulationTriangulation
Returns
a vector of Candidate Pairs per 1-saddle

◆ getSaddle1ToDescPair() [2/2]

template<typename dataType, typename triangulationType>
std::vector< std::vector< ttk::VectorSimplification::CandidatePair > > ttk::VectorSimplification::getSaddle1ToDescPair ( const std::vector< SimplexId > & criticalEdges,
const triangulationType & triangulation ) const

Definition at line 486 of file VectorSimplification.h.

◆ getSaddle2ToAscPair() [1/2]

template<typename dataType, typename triangulationType, typename GFS, typename GFSN, typename OB>
std::vector< std::vector< CandidatePair > > ttk::VectorSimplification::getSaddle2ToAscPair ( const std::vector< SimplexId > & criticalCells,
const GFS & getFaceStar,
const GFSN & getFaceStarNumber,
const OB & isOnBoundary,
const triangulationType & triangulation,
const dataType dummyVariable ) const
protected

Follow the ascending 1-separatrices to compute the saddles -> extrema association.

Parameters
[in]criticalCellsCritical cells identifiers
[in]getFaceStarEither getEdgeStar (in 2D) or getTriangleStar (in 3D)
[in]getFaceStarNumberEither getEdgeStarNumber (in 2D) or getTriangleStarNumber (in 3D)
[in]isOnBoundaryEither isEdgeOnBoundary (in 2D) or isTriangleOnBoundary (in 3D)
[in]triangulationTriangulation
[in]dummyVariableprovided for compiler to establish dataType
Returns
a vector of Candidate Pairs per 2-saddle

◆ getSaddle2ToAscPair() [2/2]

template<typename dataType, typename triangulationType, typename GFS, typename GFSN, typename OB>
std::vector< std::vector< ttk::VectorSimplification::CandidatePair > > ttk::VectorSimplification::getSaddle2ToAscPair ( const std::vector< SimplexId > & criticalCells,
const GFS & getFaceStar,
const GFSN & getFaceStarNumber,
const OB & isOnBoundary,
const triangulationType & triangulation,
const dataType dummyVariable ) const

Definition at line 559 of file VectorSimplification.h.

◆ isAlternatingVpath()

bool ttk::VectorSimplification::isAlternatingVpath ( std::vector< Cell > & vpath)
inlineprotected

Determine if the VPath has 'alternating' behavior of dimension ex: 0-1 to 1-2.

Parameters
[in]vpathCollection of cells along the VPath
Returns
true if rotates (i.e., 0-1 to 1-2 VPaths)

Definition at line 462 of file VectorSimplification.h.

◆ performSimplification()

template<typename dataType, typename triangulationType>
int ttk::VectorSimplification::performSimplification ( const int criticalThreshold,
const bool storePlotPoints,
std::vector< PlotPoint > & listOfPlotPoints,
const triangulationType & triangulation )
inline

Definition at line 120 of file VectorSimplification.h.

◆ preconditionTriangulation()

void ttk::VectorSimplification::preconditionTriangulation ( AbstractTriangulation *const data)
inline

Definition at line 105 of file VectorSimplification.h.

◆ setField()

void ttk::VectorSimplification::setField ( ttk::dcvf::DiscreteVectorField && dcvf)
inline

Ugly hack to avoid a call to buildField()

An externally computed field can be retrofitted into this class using move semantics with setField(). The internal field can be fetched back with getField() once the simplification is performed.

Parameters
[in]dcvfExternal discrete vector field instance

Definition at line 350 of file VectorSimplification.h.

◆ setFullOrbitSimplification()

void ttk::VectorSimplification::setFullOrbitSimplification ( bool doFullOrbit)
inline

Definition at line 354 of file VectorSimplification.h.

Member Data Documentation

◆ dcvf_

dcvf::DiscreteVectorField ttk::VectorSimplification::dcvf_ {}

Definition at line 52 of file VectorSimplification.h.


The documentation for this class was generated from the following files: