|
virtual const char * | GetClassName () |
|
virtual int | IsA (const char *type) |
|
virtual void | SetForceInputOffsetScalarField (bool) |
|
virtual bool | GetForceInputOffsetScalarField () |
|
virtual void | SetShowInsideDomain (bool) |
|
virtual bool | GetShowInsideDomain () |
|
virtual void | SetBackEnd (int _arg) |
|
virtual void | SetBackEnd (BACKEND) |
|
virtual BACKEND | GetBackEnd () const |
|
virtual int | GetStartingResolutionLevel () |
|
virtual void | SetStartingResolutionLevel (int) |
|
virtual int | GetStoppingResolutionLevel () |
|
virtual void | SetStoppingResolutionLevel (int) |
|
virtual bool | GetIsResumable () |
|
virtual void | SetIsResumable (bool) |
|
virtual double | GetTimeLimit () |
|
virtual void | SetTimeLimit (double) |
|
virtual double | GetEpsilon () |
|
virtual void | SetEpsilon (double) |
|
virtual void | SetIgnoreBoundary (bool) |
|
virtual bool | GetIgnoreBoundary () |
|
void | SetComputeMinSad (const bool data) |
|
void | SetComputeSadSad (const bool data) |
|
void | SetComputeSadMax (const bool data) |
|
void | SetDMSDimensions (const int data) |
|
virtual void | SetClearDGCache (bool) |
|
virtual bool | GetClearDGCache () |
|
void | UpdateThreadNumber () |
|
void | SetThreadNumber (int threadNumber) |
|
void | SetUseAllCores (bool useAllCores) |
|
void | SetDebugLevel (int debugLevel) |
|
void | SetCompactTriangulationCacheSize (float cacheSize) |
|
vtkDataArray * | GetOptionalArray (const bool &enforceArrayIndex, const int &arrayIndex, const std::string &arrayName, vtkDataSet *const inputData, const int &inputPort=0) |
|
vtkDataArray * | GetOrderArray (vtkDataSet *const inputData, const int scalarArrayIdx, ttk::Triangulation *triangulation, const bool getGlobalOrder=false, const int orderArrayIdx=0, const bool enforceOrderArrayIdx=false) |
|
vtkDataArray * | checkForGlobalAndComputeOrderArray (vtkDataSet *const inputData, vtkDataArray *scalarArray, const int scalarArrayIdx, const bool getGlobalOrder, vtkDataArray *orderArray, ttk::Triangulation *triangulation, const bool enforceOrderArrayIdx) |
|
vtkDataArray * | ComputeOrderArray (vtkDataSet *const inputData, vtkDataArray *scalarArray, const int scalarArrayIdx, const bool getGlobalOrder, vtkDataArray *oldOrderArray, ttk::Triangulation *triangulation) |
|
ttk::SimplexId * | GetIdentifierArrayPtr (const bool &enforceArrayIndex, const int &arrayIndex, const std::string &arrayName, vtkDataSet *const inputData, std::vector< ttk::SimplexId > &spareStorage, const int inputPort=0, const bool printErr=true) |
|
ttk::Triangulation * | GetTriangulation (vtkDataSet *dataSet) |
|
int | ProcessRequest (vtkInformation *request, vtkInformationVector **inputVectors, vtkInformationVector *outputVector) override |
|
vtkDataSet * | GetOutput () |
|
vtkDataSet * | GetOutput (int) |
|
void | SetInputData (vtkDataSet *) |
|
void | SetInputData (int, vtkDataSet *) |
|
void | AddInputData (vtkDataSet *) |
|
void | AddInputData (int, vtkDataSet *) |
|
template<typename inputType > |
int | checkEmptyMPIInput (inputType *input) |
| This method tests whether the input is a nullptr. If the computation is being done on multiple processes, it is possible that the domain of one process or more is empty, but not others, therefore in that particular case the rest of the filter will not be computed but an error message will not be sent.
|
|
| 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) |
|
|
| ttkPersistenceDiagram () |
|
int | RequestData (vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override |
|
int | FillInputPortInformation (int port, vtkInformation *info) override |
|
int | FillOutputPortInformation (int port, vtkInformation *info) override |
|
| ttkAlgorithm () |
|
| ~ttkAlgorithm () override |
|
void | MPIGhostPipelinePreconditioning (vtkDataSet *input) |
|
void | MPIPipelinePreconditioning (vtkDataSet *input, std::vector< int > &neighbors, std::map< int, int > &neighToId, ttk::Triangulation *triangulation=nullptr) |
|
bool | checkGlobalIdValidity (ttk::LongSimplexId *globalIds, ttk::SimplexId simplexNumber, unsigned char *ghost, int *rankArray) |
|
int | GenerateGlobalIds (vtkDataSet *input, std::unordered_map< ttk::SimplexId, ttk::SimplexId > &vertGtoL, std::vector< int > &neighborRanks, std::map< int, int > &neighborsToId) |
|
void | MPITriangulationPreconditioning (ttk::Triangulation *triangulation, vtkDataSet *input) |
|
virtual int | RequestDataObject (vtkInformation *request, vtkInformationVector **inputVectors, vtkInformationVector *outputVector) |
|
virtual int | RequestInformation (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
virtual int | RequestUpdateTime (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
virtual int | RequestUpdateTimeDependentInformation (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
virtual int | RequestUpdateExtent (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
virtual int | RequestDataNotGenerated (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
virtual int | RequestData (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
int | FillInputPortInformation (int ttkNotUsed(port), vtkInformation *ttkNotUsed(info)) override |
|
int | FillOutputPortInformation (int ttkNotUsed(port), vtkInformation *ttkNotUsed(info)) override |
|
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) |
|
| 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)) |
|
TTK VTK-filter for the computation of persistence diagrams.
- Author
- Guillaume Favelier guill.nosp@m.aume.nosp@m..fave.nosp@m.lier.nosp@m.@lip6.nosp@m..fr
-
Julien Tierny julie.nosp@m.n.ti.nosp@m.erny@.nosp@m.lip6.nosp@m..fr
- Date
- September 2016.
This filter 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, the diagram is represented by a vtkUnstructuredGrid. Each vertex of this mesh represent a critical point of the input data. It is associated with point data (vertexId, critical type). Each vertical edge of this mesh represent a persistence pair. It is associated with cell data (persistence of the pair, critical index of the extremum of the pair).
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.
- Parameters
-
Input | Input scalar field, either 2D or 3D, regular grid or triangulation (vtkDataSet) |
Output | Output persistence diagram (vtkUnstructuredGrid) |
This filter can be used as any other VTK filter (for instance, by using the sequence of calls SetInputData(), Update(), GetOutput()).
See the related ParaView example state files for usage examples within a VTK pipeline.
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.
- See also
- ttkMergeTreePP
-
ttkPersistenceCurve
-
ttkScalarFieldCriticalPoints
-
ttkTopologicalSimplification
-
ttk::PersistenceDiagram
Online examples:
Definition at line 176 of file ttkPersistenceDiagram.h.