-
Notifications
You must be signed in to change notification settings - Fork 0
/
quantify_tissue.m
60 lines (59 loc) · 2.26 KB
/
quantify_tissue.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
%% [q] = quantify_tissue(tissue)
% 4 February 2021
% Jennifer Hu
%
% Given a tissue, returns 13x16 quantities or 1x10 depending on andXS
% Interface types will be sorted according to their order in const.
% Returns metrics for cross-sections taken at and around radius height.
% [XSdim, XSlayers, XSn, XSnC, XSnL, XSnB, XSnBL, areas(x10)]
% 16 March 2022
% Vasudha Srivastava
% Also return the number of edge LEP
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
function [q] = quantify_tissue(tissue, andXS, is2D)
if nargin == 1 | nargin == 3
andXS = false;
end
if nargin<3
is2d = false;
end
c = tissue.const;
interfaces = [c.LL, c.LM, c.LX, c.MM, c.MX];
if ~is2D
q = zeros(1+3*4, 7+10);
else
q = zeros(1+3*4, 7+5);
end
isEL = tissue.is(:,c.EL);
q(1,7) = sum(isEL);
if ~is2D
q(1, 8:end) = cell2mat(arrayfun(@(i) ...
[sum(triu(tissue.edges.sq,1) .* tissue.edges.types(:,:,i),'all'), ...
sum(triu(tissue.edges.hex,1) .* tissue.edges.types(:,:,i),'all')], ...
interfaces, 'UniformOutput', false));
else
q(1, 8:end) = cell2mat(arrayfun(@(i) ...
[sum(triu(tissue.edges.areas,1) .* tissue.edges.types(:,:,i),'all')],...
interfaces, 'UniformOutput', false));
end
if andXS
% make 2D cross section by excluding all edges with points outside XS
row = 2;
for dim = 1:3
for layers = 1:4
[points, edges] = tissue_xs(tissue, dim, layers);
nC = sum(points & tissue.is(:,c.C));
L = points & tissue.is(:,c.L);
B = points & tissue.is(:,c.B); BL = B & L;
qXS = [dim, layers, nC, sum(L), sum(B), sum(BL),c.EL, ... % metrics about the cross sections
cell2mat(arrayfun(@(i) ...
[sum(triu(tissue.edges.sq,1) .* edges .* tissue.edges.types(:,:,i),'all'), ...
sum(triu(tissue.edges.hex,1) .* edges .* tissue.edges.types(:,:,i),'all')], ...
interfaces, 'UniformOutput', false))];
q(row,:) = qXS; row = row+1;
end
end
else % dump those extra columns/rows
q = q(1,7:end);
end
end