diff --git a/ContourTree/ContourTree.cpp b/ContourTree/ContourTree.cpp index 36c5ede..be9fd52 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,20 @@ 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..d177a25 100644 --- a/ContourTree/MergeTree.hpp +++ b/ContourTree/MergeTree.hpp @@ -29,6 +29,9 @@ class MergeTree void computeTree(ScalarFunction* data, TreeType type); void computeJoinTree(); void computeSplitTree(); + 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); protected: @@ -53,6 +56,7 @@ class MergeTree std::set set; ContourTree ctree; + std::vector arcMap; private: std::vector star;