76 "MergeTreeDistanceMatrix");
97 template <
class dataType>
100 std::vector<std::vector<double>> &distanceMatrix) {
102 for(
unsigned int i = 0; i < trees.size(); ++i) {
109 if(trees2.size() != 0) {
110 std::vector<std::vector<int>> trees2NodeCorr(trees2.size());
111 for(
unsigned int i = 0; i < trees.size(); ++i) {
118 std::vector<std::vector<double>> distanceMatrix2(
119 trees2.size(), std::vector<double>(trees2.size()));
125 template <
class dataType>
127 std::vector<std::vector<double>> &distanceMatrix,
128 bool isFirstInput =
true) {
129#ifdef TTK_ENABLE_OPENMP
130#pragma omp parallel num_threads(this->threadNumber_)
132#pragma omp single nowait
135#ifdef TTK_ENABLE_OPENMP
141 template <
class dataType>
143 std::vector<std::vector<double>> &distanceMatrix,
144 bool isFirstInput =
true) {
145 for(
unsigned int i = 0; i < distanceMatrix.size(); ++i) {
146#ifdef TTK_ENABLE_OPENMP
147#pragma omp task firstprivate(i) UNTIED() shared(distanceMatrix, trees)
150 if(i % std::max(
int(distanceMatrix.size() / 10), 1) == 0) {
151 std::stringstream stream;
152 stream << i <<
" / " << distanceMatrix.size();
155 distanceMatrix[i][i] = 0.0;
156 for(
unsigned int j = i + 1; j < distanceMatrix[0].size(); ++j) {
190 std::vector<std::tuple<ftm::idNode, ftm::idNode>> outputMatching;
191 distanceMatrix[i][j] = mergeTreeDistance.
execute<dataType>(
192 trees[i], trees[j], outputMatching);
208 dataType dist = branchDist.
execute<dataType>(trees[i], trees[j]);
209 distanceMatrix[i][j] =
static_cast<double>(dist);
226 dataType dist = pathDist.
execute<dataType>(trees[i], trees[j]);
227 distanceMatrix[i][j] =
static_cast<double>(dist);
230 distanceMatrix[j][i] = distanceMatrix[i][j];
232#ifdef TTK_ENABLE_OPENMP
virtual int setThreadNumber(const int threadNumber)
void setBaseMetric(int m)
void setPreprocess(bool p)
dataType execute(ftm::MergeTree< dataType > &mTree1, ftm::MergeTree< dataType > &mTree2, std::vector< std::tuple< ftm::idNode, ftm::idNode, double > > *outputMatching=nullptr)
void setAssignmentSolver(int assignmentSolver)
void setSaveTree(bool save)
void setDebugMsgPrefix(const std::string &prefix)
virtual int setDebugLevel(const int &debugLevel)
void setBranchDecomposition(bool useBD)
void setNormalizedWasserstein(bool normalizedWasserstein)
void setDistanceSquaredRoot(bool distanceSquaredRoot)
void setEpsilon3Tree1(double epsilon)
void setEpsilonTree1(double epsilon)
void setAssignmentSolver(int assignmentSolver)
void setEpsilon2Tree1(double epsilon)
void setEpsilonTree2(double epsilon)
bool normalizedWasserstein_
void setPersistenceThreshold(double pt)
void preprocessingPipeline(ftm::MergeTree< dataType > &mTree, double epsilonTree, double epsilon2Tree, double epsilon3Tree, bool branchDecompositionT, bool useMinMaxPairT, bool cleanTreeT, double persistenceThreshold, std::vector< int > &nodeCorr, bool deleteInconsistentNodes=true, bool removeMergedSaddles=false)
bool distanceSquaredRoot_
std::vector< std::vector< int > > treesNodeCorr_
void setCleanTree(bool clean)
void setEpsilon2Tree2(double epsilon)
void setKeepSubtree(bool keepSubtree)
double persistenceThreshold_
void setUseMinMaxPair(bool useMinMaxPair)
void setEpsilon3Tree2(double epsilon)
double mixDistancesMinMaxPairWeight(bool isFirstInput)
bool branchDecomposition_
bool isPersistenceDiagram_
void setParallelize(bool para)
void setIsPersistenceDiagram(bool isPD)
void mixDistancesMatrix(std::vector< std::vector< dataType > > &distanceMatrix, std::vector< std::vector< dataType > > &distanceMatrix2)
void executePara(std::vector< ftm::MergeTree< dataType > > &trees, std::vector< std::vector< double > > &distanceMatrix, bool isFirstInput=true)
void setBranchMetric(int m)
void setBaseModule(int m)
void setPathMetric(int m)
MergeTreeDistanceMatrix()
void executeParaImpl(std::vector< ftm::MergeTree< dataType > > &trees, std::vector< std::vector< double > > &distanceMatrix, bool isFirstInput=true)
void execute(std::vector< ftm::MergeTree< dataType > > &trees, std::vector< ftm::MergeTree< dataType > > &trees2, std::vector< std::vector< double > > &distanceMatrix)
~MergeTreeDistanceMatrix() override=default
void setPreprocess(bool preproc)
void setPostprocess(bool postproc)
void setSaveTree(bool save)
void setMinMaxPairWeight(double weight)
dataType execute(ftm::MergeTree< dataType > &mTree1, ftm::MergeTree< dataType > &mTree2, std::vector< std::tuple< ftm::idNode, ftm::idNode, double > > &outputMatching)
void setIsCalled(bool ic)
void setBaseMetric(int m)
void setAssignmentSolver(int assignmentSolver)
void setComputeMapping(bool m)
dataType execute(ftm::MergeTree< dataType > &mTree1, ftm::MergeTree< dataType > &mTree2, std::vector< std::pair< std::pair< ftm::idNode, ftm::idNode >, std::pair< ftm::idNode, ftm::idNode > > > *outputMatching)
void setSaveTree(bool save)
void setPreprocess(bool p)
TTK base package defining the standard types.
printMsg(debug::output::BOLD+" | | | | | . \\ | | (__| | / __/| |_| / __/| (_) |"+debug::output::ENDCOLOR, debug::Priority::PERFORMANCE, debug::LineMode::NEW, stream)