MCPcopy Create free account
hub / github.com/OpenMS/OpenMS / cohesion

Method cohesion

src/openms/source/COMPARISON/CLUSTERING/ClusterAnalyzer.cpp:646–685  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

644 }
645
646 std::vector<float> ClusterAnalyzer::cohesion(const std::vector<std::vector<Size> > & clusters, const DistanceMatrix<float> & original)
647 {
648 if (clusters.empty() || clusters.size() > original.dimensionsize())
649 {
650 throw Exception::InvalidParameter(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "invalid clustering");
651 }
652
653 float av_dist(0); // average of all pairwise distances
654 for (Size i = 0; i < original.dimensionsize(); ++i)
655 {
656 for (Size j = i + 1; j < original.dimensionsize(); ++j)
657 {
658 av_dist += original.getValue(i, j);
659 }
660 }
661 av_dist /= (((float)original.dimensionsize() * (float)(original.dimensionsize() - 1.0)) / 2.0f);
662
663 std::vector<float> cohesions;
664 cohesions.reserve(clusters.size());
665 for (Size i = 0; i < clusters.size(); ++i)
666 {
667 float av_c_dist(0); // all pairwise distances in cluster i
668 for (Size j = 0; j < clusters[i].size(); ++j)
669 {
670 for (Size k = 0; k < j; ++k)
671 {
672 av_c_dist += original.getValue(clusters[i][j], clusters[i][k]);
673 }
674 }
675
676 av_c_dist /= (((float)clusters[i].size() * (float)(clusters[i].size() - 1.0)) / 2.0f); //now av. intra cluster distance
677 if (clusters[i].size() == 1)
678 {
679 av_c_dist = av_dist;
680 }
681 //~ std::cout << " av clu i " << av_c_dist << std::endl;
682 cohesions.push_back(av_c_dist);
683 }
684 return cohesions;
685 }
686
687 String ClusterAnalyzer::newickTree(const std::vector<BinaryTreeNode> & tree, const bool include_distance)
688 {

Callers 1

Calls 6

dimensionsizeMethod · 0.80
emptyMethod · 0.45
sizeMethod · 0.45
getValueMethod · 0.45
reserveMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected