575 {
576
577 std::vector<std::vector<int>>count_matrix(used_filaments.size(), std::vector<int>(used_filaments.size()));
578 for (const auto& lf : layer_filaments) {
579 for (auto iter = lf.begin(); iter != lf.end(); ++iter) {
580 auto id_iter1 = std::find(used_filaments.begin(), used_filaments.end(), *iter);
581 if (id_iter1 == used_filaments.end())
582 continue;
583 auto idx1 = id_iter1 - used_filaments.begin();
584 for (auto niter = std::next(iter); niter != lf.end(); ++niter) {
585 auto id_iter2 = std::find(used_filaments.begin(), used_filaments.end(), *niter);
586 if (id_iter2 == used_filaments.end())
587 continue;
588 auto idx2 = id_iter2 - used_filaments.begin();
589 count_matrix[idx1][idx2] += 1;
590 count_matrix[idx2][idx1] += 1;
591 }
592 }
593 }
594
595 m_distance_matrix.resize(flush_matrix.size(), std::vector<std::vector<float>>(used_filaments.size(), std::vector<float>(used_filaments.size())));
596
597 for (size_t i = 0; i < used_filaments.size(); ++i) {
598 for (size_t j = 0; j < used_filaments.size(); ++j) {
599 for (size_t k = 0; k < flush_matrix.size(); k++) {
600 if (i == j)
602 else {
603
604 float max_val = std::max(flush_matrix[k][used_filaments[i]][used_filaments[j]], flush_matrix[k][used_filaments[j]][used_filaments[i]]);
605 float min_val = std::min(flush_matrix[k][used_filaments[i]][used_filaments[j]], flush_matrix[k][used_filaments[j]][used_filaments[i]]);
606 m_distance_matrix[k][i][j] = (max_val * p + min_val * (1 - p)) * (std::max(count_matrix[i][j], 1));
607 }
608 }
609 }
610 }
611 }
std::vector< std::vector< std::vector< float > > > m_distance_matrix
Definition FilamentGroup.hpp:138