-
Notifications
You must be signed in to change notification settings - Fork 0
/
getClusters.m
91 lines (74 loc) · 2.37 KB
/
getClusters.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
function [Clusters,Nuclei] = getClusters(Nuclei,Method,Data)
Clusters = cell(Method.extraOrder,1);
for clusterSize = 1:Method.extraOrder
Clusters{clusterSize} = [];
end
inClusters = {};
doFindClusters = ~Method.Ori_cutoffs;
if strcmp(Method.method,'count clusters')
doFindClusters = true;
end
if ~isempty(Data.ClusterData) || isfield(Method,'Clusters')
Clusters = {};
if ~isempty(Data.ClusterData)
try
load(Data.ClusterData,'Clusters');
catch
disp('Could not load clusters.')
if Data.exitOnFailedLoad
error('Could not load clusters.')
end
end
else
Clusters = Method.Clusters;
end
inOrder = numel(Clusters);
for clusterSize = 1:inOrder
Nuclei.numberClusters(clusterSize) = size(Clusters{clusterSize},1);
if Method.verbose
fprintf('Loaded %d clusters of size %d.\n', Nuclei.numberClusters(clusterSize),clusterSize);
end
end
if inOrder < Method.order
inClusters = Clusters;
else
doFindClusters = isempty(Clusters);
end
end
% Loop over cluster sizes, start at the largest (most time consuming) size
if doFindClusters
if Method.verbose
fprintf('Finding clusters of up to size %d.\n',Method.extraOrder);
end
if Method.combineClusters
Clusters = findClusters_treeSearch(Nuclei,Method.extraOrder,1,{});
for clusterSize = 1:min(Method.order, numel(inClusters),Method)
% Combine arrays.
C = [Clusters{clusterSize}; inClusters{clusterSize}];
% Sort clusters
C = sortrows(C);
% Remove duplicates
keep = [true; any(C(1:end-1,:)~=C(2:end,:),2)];
Clusters{clusterSize} = C(keep,:);
end
else
if ~Method.neighborCutoff.sizeDependent
Clusters = findClusters_treeSearch(Nuclei,Method.extraOrder,1,...
inClusters, Method);
else
Clusters = cell(1,Method.extraOrder);
for adjacencyOrder = Method.extraOrder:-1:1
Clusters_ = findClusters_treeSearch(Nuclei,Method.extraOrder,...
adjacencyOrder,inClusters, Method);
Clusters{adjacencyOrder} = Clusters_{adjacencyOrder};
end
end
end
Nuclei.numberClusters = zeros(1,Method.extraOrder);
for clusterSize = 1:Method.extraOrder
Nuclei.numberClusters(clusterSize) = size(Clusters{clusterSize},1);
fprintf(' Found %d clusters of size %d.\n', ...
Nuclei.numberClusters(clusterSize),clusterSize);
end
end
end