TTK
Loading...
Searching...
No Matches
PersistenceDiagramDictionaryBorderInitializer.cpp
Go to the documentation of this file.
2
3using namespace ttk;
4
6 std::vector<ttk::DiagramType> &DictDiagrams,
7 const std::vector<ttk::DiagramType> &datas,
8 const int &nbAtoms,
9 bool do_min_,
10 bool do_sad_,
11 bool do_max_) {
12
13 const size_t nDiags = datas.size();
14
15 PersistenceDiagramDistanceMatrix MatrixCalculator;
16 std::array<size_t, 2> nInputs{nDiags, 0};
17 MatrixCalculator.setDos(do_min_, do_sad_, do_max_);
18 MatrixCalculator.setThreadNumber(this->threadNumber_);
19 Matrix distMatrix = MatrixCalculator.execute(datas, nInputs);
20 std::vector<double> allDistsSummed(nDiags);
21 for(size_t i = 0; i < nDiags; ++i) {
22 const auto &line = distMatrix[i];
23 for(size_t j = 0; j < nDiags; ++j) {
24 allDistsSummed[j] += line[j];
25 }
26 }
27 std::vector<int> indices;
28 int Id1 = std::max_element(allDistsSummed.begin(), allDistsSummed.end())
29 - allDistsSummed.begin();
30 indices.push_back(Id1);
31
32 for(int i = 1; i < nbAtoms; ++i) {
33 indices.push_back(getNextIndex(distMatrix, indices));
34 }
35
36 std::vector<double> tempDistsSummed(nbAtoms);
37 for(int i = 0; i < nbAtoms; ++i) {
38 tempDistsSummed[i] = allDistsSummed[indices[i]];
39 }
40
41 int FirstId = std::min_element(tempDistsSummed.begin(), tempDistsSummed.end())
42 - tempDistsSummed.begin();
43 DictDiagrams.push_back(datas[indices[FirstId]]);
44 for(int i = 0; i < nbAtoms; ++i) {
45 if(i == FirstId) {
46 continue;
47 } else {
48 DictDiagrams.push_back(datas[indices[i]]);
49 }
50 }
51}
52
54 const Matrix &distMatrix, const std::vector<int> &indices) const {
55 std::vector<double> allSumCumul(distMatrix.size(), 0.);
56 for(size_t k = 0; k < indices.size(); ++k) {
57 const auto &line = distMatrix[indices[k]];
58 for(size_t i = 0; i < distMatrix.size(); ++i) {
59 if(std::find(indices.begin(), indices.end(), i) != indices.end()) {
60 allSumCumul[i] += 0.;
61 } else {
62 allSumCumul[i] += line[i];
63 }
64 }
65 }
66 int newId = std::max_element(allSumCumul.begin(), allSumCumul.end())
67 - allSumCumul.begin();
68 return newId;
69}
virtual int setThreadNumber(const int threadNumber)
Definition BaseClass.h:80
void execute(std::vector< ttk::DiagramType > &DictDiagrams, const std::vector< ttk::DiagramType > &datas, const int &nbAtoms, bool do_min_, bool do_sad_, bool do_max_)
int getNextIndex(const Matrix &distMatrix, const std::vector< int > &indices) const
std::vector< std::vector< double > > execute(const std::vector< DiagramType > &intermediateDiagrams, const std::array< size_t, 2 > &nInputs) const
void setDos(const bool min, const bool sad, const bool max)
TTK base package defining the standard types.
std::vector< std::vector< double > > Matrix