From c8c385921f236eae7753e5087e95ec46d6836337 Mon Sep 17 00:00:00 2001 From: Jochen Jankowai Date: Thu, 11 Nov 2021 15:31:01 +0100 Subject: [PATCH 1/3] Separating arcMap generation and writing to disk --- ContourTree/ContourTree.cpp | 27 +++++++++++++------- ContourTree/ContourTree.hpp | 4 +++ ContourTree/MergeTree.cpp | 51 +++++++++++++++++++++++-------------- ContourTree/MergeTree.hpp | 3 +++ 4 files changed, 57 insertions(+), 28 deletions(-) diff --git a/ContourTree/ContourTree.cpp b/ContourTree/ContourTree.cpp index 36c5ede..1f77e66 100644 --- a/ContourTree/ContourTree.cpp +++ b/ContourTree/ContourTree.cpp @@ -99,15 +99,11 @@ void ContourTree::computeCT() { } } -void ContourTree::output(std::string fileName) { - std::cout << "removing deg-2 nodes and computing segmentation" << std::endl; - - // saving some memory - nodesJoin.clear(); - nodesJoin.shrink_to_fit(); - nodesSplit.clear(); - nodesSplit.shrink_to_fit(); +std::tuple, std::vector, std::vector, + std::vector> +ContourTree::computeArcMap() { + uint32_t arcNo = 0; std::vector nodeids; std::vector nodefns; std::vector nodeTypes; @@ -115,7 +111,7 @@ void ContourTree::output(std::string fileName) { arcMap.resize(nv, -1); - uint32_t arcNo = 0; + for (int64_t i = 0; i < nv; i++) { for(int64_t i = 0;i < nv;i ++) { // go in sorted order int64_t v = tree->sv[i]; @@ -147,6 +143,19 @@ void ContourTree::output(std::string fileName) { } } + return {arcNo, nodeids, nodefns, nodeTypes, arcs}; +} +void ContourTree::output(std::string fileName) { + std::cout << "removing deg-2 nodes and computing segmentation" << std::endl; + + // saving some memory + nodesJoin.clear(); + nodesJoin.shrink_to_fit(); + nodesSplit.clear(); + nodesSplit.shrink_to_fit(); + + auto [arcNo, nodeids, nodefns, nodeTypes, arcs] = computeArcMap(); + // write meta data std::cout << "Writing meta data" << std::endl; { diff --git a/ContourTree/ContourTree.hpp b/ContourTree/ContourTree.hpp index 614005b..3768b03 100644 --- a/ContourTree/ContourTree.hpp +++ b/ContourTree/ContourTree.hpp @@ -4,6 +4,7 @@ #include #include +#include "constants.h" namespace contourtree { class MergeTree; @@ -22,6 +23,9 @@ class ContourTree void setup(const MergeTree * tree); void computeCT(); + std::tuple, std::vector, std::vector, + std::vector> + computeArcMap(); void output(std::string fileName); private: diff --git a/ContourTree/MergeTree.cpp b/ContourTree/MergeTree.cpp index 798c495..03ddbd5 100644 --- a/ContourTree/MergeTree.cpp +++ b/ContourTree/MergeTree.cpp @@ -124,18 +124,21 @@ void MergeTree::computeSplitTree() { newRoot = in; } -void MergeTree::output(std::string fileName, TreeType tree) -{ - if(tree == TypeContourTree) { - ctree.output(fileName); - return; +const std::vector& MergeTree::getArcMap(TreeType type) const { + + if (type == TypeContourTree) { + return ctree.arcMap; } - // assume size of contour tree fits within 4 bytes - std::vector arcMap; - if(newVertex) { - arcMap.resize(noVertices + 1,-1); + return arcMap; +} + +std::tuple, std::vector, std::vector, + std::vector> +MergeTree::computeArcMap(TreeType tree) { + if (newVertex) { + arcMap.resize(noVertices + 1, -1); } else { - arcMap .resize(noVertices,-1); + arcMap.resize(noVertices, -1); } uint32_t noArcs = 0; uint32_t noNodes = 0; @@ -149,15 +152,6 @@ void MergeTree::output(std::string fileName, TreeType tree) } noArcs = noNodes - 1; - // write meta data - std::cout << "Writing meta data" << std::endl; - { - std::ofstream pr(fileName + ".rg.dat"); - pr << noNodes << "\n"; - pr << noArcs << "\n"; - pr.close(); - } - std::cout << ("Creating required memory!") << std::endl; std::vector nodeids(noNodes); std::vector nodefns(noNodes); @@ -262,6 +256,25 @@ void MergeTree::output(std::string fileName, TreeType tree) assert(arcNo == noArcs); } + return {noArcs, noNodes, nodeids, nodefns, nodeTypes, arcs}; +} + +void MergeTree::output(std::string fileName, TreeType tree) { + if (tree == TypeContourTree) { + ctree.output(fileName); + return; + } + + auto [noArcs, noNodes, nodeids, nodefns, nodeTypes, arcs] = computeArcMap(tree); + + // write meta data + std::cout << "Writing meta data" << std::endl; + { + std::ofstream pr(fileName + ".rg.dat"); + pr << noNodes << "\n"; + pr << noArcs << "\n"; + pr.close(); + } std::cout << "writing tree output" << std::endl; std::string rgFile = fileName + ".rg.bin"; std::ofstream of(rgFile,std::ios::binary); diff --git a/ContourTree/MergeTree.hpp b/ContourTree/MergeTree.hpp index 0b3f08c..8c96510 100644 --- a/ContourTree/MergeTree.hpp +++ b/ContourTree/MergeTree.hpp @@ -29,6 +29,8 @@ class MergeTree void computeTree(ScalarFunction* data, TreeType type); void computeJoinTree(); void computeSplitTree(); + void computeArcMap(); + const std::vector& getArcMap(TreeType type) const; void output(std::string fileName, TreeType tree); protected: @@ -53,6 +55,7 @@ class MergeTree std::set set; ContourTree ctree; + std::vector arcMap; private: std::vector star; From dde036d2719b1b15740e209ecbd5f7b43ffe3951 Mon Sep 17 00:00:00 2001 From: Jochen Jankowai Date: Thu, 11 Nov 2021 15:37:14 +0100 Subject: [PATCH 2/3] Separation WIP --- ContourTree/MergeTree.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ContourTree/MergeTree.hpp b/ContourTree/MergeTree.hpp index 8c96510..d177a25 100644 --- a/ContourTree/MergeTree.hpp +++ b/ContourTree/MergeTree.hpp @@ -29,7 +29,8 @@ class MergeTree void computeTree(ScalarFunction* data, TreeType type); void computeJoinTree(); void computeSplitTree(); - void computeArcMap(); + std::tuple, std::vector, std::vector, + std::vector> computeArcMap(TreeType tree); const std::vector& getArcMap(TreeType type) const; void output(std::string fileName, TreeType tree); From 6f6ef91da09bf905ec1e9a7585368375f49d77a5 Mon Sep 17 00:00:00 2001 From: Jochen Jankowai Date: Thu, 11 Nov 2021 15:42:46 +0100 Subject: [PATCH 3/3] Separation WIP --- ContourTree/ContourTree.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/ContourTree/ContourTree.cpp b/ContourTree/ContourTree.cpp index 1f77e66..be9fd52 100644 --- a/ContourTree/ContourTree.cpp +++ b/ContourTree/ContourTree.cpp @@ -145,6 +145,7 @@ ContourTree::computeArcMap() { return {arcNo, nodeids, nodefns, nodeTypes, arcs}; } +} void ContourTree::output(std::string fileName) { std::cout << "removing deg-2 nodes and computing segmentation" << std::endl;