scran_graph_cluster
Graph-based clustering of cells
Loading...
Searching...
No Matches
cluster_multilevel.hpp
Go to the documentation of this file.
1#ifndef SCRAN_CLUSTER_MULTILEVEL_HPP
2#define SCRAN_CLUSTER_MULTILEVEL_HPP
3
4#include <vector>
5#include <algorithm>
6
7#include "raiigraph/raiigraph.hpp"
8#include "sanisizer/sanisizer.hpp"
9
10#include "igraph.h"
11
17namespace scran_graph_cluster {
18
27 igraph_real_t resolution = 1;
28
32 igraph_uint_t seed = 42;
33
37 bool report_levels = true;
38
42 bool report_modularity = true;
43};
44
53 raiigraph::IntegerVector membership;
54
60 raiigraph::IntegerMatrix levels;
61
67 raiigraph::RealVector modularity;
68};
69
85inline void cluster_multilevel(const igraph_t* graph, const igraph_vector_t* weights, const ClusterMultilevelOptions& options, ClusterMultilevelResults& output) {
86 const raiigraph::RNGScope rngs(options.seed);
87
88 const auto modularity = (options.report_modularity ? output.modularity.get() : static_cast<igraph_vector_t*>(NULL));
89 const auto membership = output.membership.get();
90 const auto memberships = (options.report_levels ? output.levels.get() : static_cast<igraph_matrix_int_t*>(NULL));
91
92 const auto status = igraph_community_multilevel(
93 graph,
94 weights,
95 options.resolution,
96 membership,
97 memberships,
98 modularity
99 );
100
101 raiigraph::check_code(status);
102}
103
115inline ClusterMultilevelResults cluster_multilevel(const raiigraph::Graph& graph, const std::vector<igraph_real_t>& weights, const ClusterMultilevelOptions& options) {
116 // No need to free this, as it's just a view.
117 const auto weight_view = igraph_vector_view(weights.data(), sanisizer::cast<igraph_int_t>(weights.size()));
118
120 cluster_multilevel(graph.get(), &weight_view, options, output);
121 return output;
122}
123
124}
125
126#endif
Graph-based clustering of single-cell data.
Definition build_snn_graph.hpp:22
void cluster_multilevel(const igraph_t *graph, const igraph_vector_t *weights, const ClusterMultilevelOptions &options, ClusterMultilevelResults &output)
Definition cluster_multilevel.hpp:85
Options for cluster_multilevel().
Definition cluster_multilevel.hpp:22
igraph_real_t resolution
Definition cluster_multilevel.hpp:27
bool report_modularity
Definition cluster_multilevel.hpp:42
igraph_uint_t seed
Definition cluster_multilevel.hpp:32
bool report_levels
Definition cluster_multilevel.hpp:37
Result of cluster_multilevel().
Definition cluster_multilevel.hpp:48
raiigraph::RealVector modularity
Definition cluster_multilevel.hpp:67
raiigraph::IntegerVector membership
Definition cluster_multilevel.hpp:53
raiigraph::IntegerMatrix levels
Definition cluster_multilevel.hpp:60