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 double resolution = 1;
28
32 int seed = 42;
33
37 bool report_levels = true;
38
42 bool report_modularity = true;
43};
44
53 int status = 0;
54
59 raiigraph::IntegerVector membership;
60
66 raiigraph::IntegerMatrix levels;
67
73 raiigraph::RealVector modularity;
74};
75
89inline void cluster_multilevel(const igraph_t* graph, const igraph_vector_t* weights, const ClusterMultilevelOptions& options, ClusterMultilevelResults& output) {
90 const raiigraph::RNGScope rngs(options.seed);
91
92 const auto modularity = (options.report_modularity ? output.modularity.get() : static_cast<igraph_vector_t*>(NULL));
93 const auto membership = output.membership.get();
94 const auto memberships = (options.report_levels ? output.levels.get() : static_cast<igraph_matrix_int_t*>(NULL));
95
96 output.status = igraph_community_multilevel(
97 graph,
98 weights,
99 options.resolution,
100 membership,
101 memberships,
102 modularity
103 );
104}
105
117inline ClusterMultilevelResults cluster_multilevel(const raiigraph::Graph& graph, const std::vector<igraph_real_t>& weights, const ClusterMultilevelOptions& options) {
118 // No need to free this, as it's just a view.
119 igraph_vector_t weight_view;
120 igraph_vector_view(&weight_view, weights.data(), sanisizer::cast<igraph_integer_t>(weights.size()));
121
123 cluster_multilevel(graph.get(), &weight_view, options, output);
124 return output;
125}
126
127}
128
129#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:89
Options for cluster_multilevel().
Definition cluster_multilevel.hpp:22
bool report_modularity
Definition cluster_multilevel.hpp:42
int seed
Definition cluster_multilevel.hpp:32
bool report_levels
Definition cluster_multilevel.hpp:37
double resolution
Definition cluster_multilevel.hpp:27
Result of cluster_multilevel().
Definition cluster_multilevel.hpp:48
int status
Definition cluster_multilevel.hpp:53
raiigraph::RealVector modularity
Definition cluster_multilevel.hpp:73
raiigraph::IntegerVector membership
Definition cluster_multilevel.hpp:59
raiigraph::IntegerMatrix levels
Definition cluster_multilevel.hpp:66