45 "MergeTreeDistanceMatrix");
66 template <
class dataType>
69 std::vector<std::vector<double>> &distanceMatrix) {
70 executePara<dataType>(trees, distanceMatrix);
71 if(trees2.size() != 0) {
73 std::vector<std::vector<double>> distanceMatrix2(
74 trees2.size(), std::vector<double>(trees2.size()));
75 executePara<dataType>(trees2, distanceMatrix2,
false);
80 template <
class dataType>
82 std::vector<std::vector<double>> &distanceMatrix) {
83 for(
unsigned int i = 0; i < distanceMatrix.size(); ++i) {
84 if(i % std::max(
int(distanceMatrix.size() / 10), 1) == 0) {
85 std::stringstream stream;
86 stream << i <<
" / " << distanceMatrix.size();
100 distanceMatrix[i][i] = 0.0;
102 for(
unsigned int j = i + 1; j < distanceMatrix[0].size(); ++j) {
105 distanceMatrix[i][j] = 0;
108 &(ftmtrees[i].tree), &(ftmtrees[j].tree));
109 distanceMatrix[i][j] =
static_cast<double>(dist);
112 &(ftmtrees[i].tree), &(ftmtrees[j].tree));
113 distanceMatrix[i][j] =
static_cast<double>(dist);
116 distanceMatrix[j][i] = distanceMatrix[i][j];
121 template <
class dataType>
123 std::vector<std::vector<double>> &distanceMatrix,
124 bool isFirstInput =
true) {
125#ifdef TTK_ENABLE_OPENMP
126#pragma omp parallel num_threads(this->threadNumber_)
128#pragma omp single nowait
130 executeParaImpl<dataType>(trees, distanceMatrix, isFirstInput);
131#ifdef TTK_ENABLE_OPENMP
137 template <
class dataType>
139 std::vector<std::vector<double>> &distanceMatrix,
140 bool isFirstInput =
true) {
141 for(
unsigned int i = 0; i < distanceMatrix.size(); ++i) {
142#ifdef TTK_ENABLE_OPENMP
143#pragma omp task firstprivate(i) UNTIED() shared(distanceMatrix, trees)
146 if(i % std::max(
int(distanceMatrix.size() / 10), 1) == 0) {
147 std::stringstream stream;
148 stream << i <<
" / " << distanceMatrix.size();
151 distanceMatrix[i][i] = 0.0;
152 for(
unsigned int j = i + 1; j < distanceMatrix[0].size(); ++j) {
183 std::vector<std::tuple<ftm::idNode, ftm::idNode>> outputMatching;
184 distanceMatrix[i][j] = mergeTreeDistance.
execute<dataType>(
185 trees[i], trees[j], outputMatching);
187 distanceMatrix[i][j] = 0;
190 distanceMatrix[j][i] = distanceMatrix[i][j];
192#ifdef TTK_ENABLE_OPENMP
virtual int setThreadNumber(const int threadNumber)
void setBaseMetric(int m)
dataType editDistance_branch(ftm::FTMTree_MT *tree1, ftm::FTMTree_MT *tree2)
void setAssignmentSolver(int assignmentSolver)
Minimalist debugging class.
void setDebugMsgPrefix(const std::string &prefix)
virtual int setDebugLevel(const int &debugLevel)
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
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)
bool distanceSquaredRoot_
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 execute(std::vector< ftm::MergeTree< dataType > > &ftmtrees, std::vector< std::vector< double > > &distanceMatrix)
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 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 editDistance_path(ftm::FTMTree_MT *tree1, ftm::FTMTree_MT *tree2)