Skip to content
Snippets Groups Projects
Commit 51bf0dc0 authored by Nicola Vigano's avatar Nicola Vigano
Browse files

ODF-UVW-Solver: performance improvement in projection matrix construction

parent 67ae78c8
No related branches found
No related tags found
No related merge requests found
......@@ -264,6 +264,34 @@ classdef GtGrainODFuvwSolver < GtGrainODFwSolver
self.S = cell(num_voxels, 1);
self.St = cell(num_voxels, 1);
% Extracting orientations' W shape functions
oris_w_cs = cell(num_orients, 1);
oris_ws = cell(num_orients, 1);
oris_w_is = cell(num_orients, 1);
for ii_o = 1:num_orients
sf = self.shape_functions{ii_o};
w_cs = cat(1, sf(:).intm);
oris_w_cs{ii_o} = reshape(w_cs, [], 1);
ws_sizes = [sf(:).bbsize];
bbwims = cat(1, sf(:).bbwim);
num_blobs = numel(sf);
ws = cell(num_blobs, 1);
w_is = cell(num_blobs, 1);
for ii_b = 1:num_blobs
ws{ii_b} = bbwims(ii_b, 1):bbwims(ii_b, 2);
w_is{ii_b} = ii_b(ones(ws_sizes(ii_b), 1));
end
oris_ws{ii_o} = reshape([ws{:}], [], 1);
oris_w_is{ii_o} = cat(1, w_is{:});
end
% Preparing for computing the UV deviations due to the XYZ
% positions of the real-space voxels
rot_l2s = cell(num_orients, 1);
for ii_o = 1:num_orients
rot_l2s{ii_o} = grid_gr{ii_o}.allblobs.srot(:, :, ref_sel);
......@@ -297,21 +325,9 @@ classdef GtGrainODFuvwSolver < GtGrainODFwSolver
uv_tot = reshape(uv_tot, 2, [], num_orients);
for ii_o = 1:num_orients
sf = self.shape_functions{ii_o};
w_cs = cat(1, sf(:).intm);
w_cs = reshape(w_cs, [], 1);
num_blobs = numel(sf);
ws = cell(num_blobs, 1);
w_is = cell(num_blobs, 1);
for ii_b = 1:num_blobs
ws{ii_b} = sf(ii_b).bbwim(1):sf(ii_b).bbwim(2);
w_is{ii_b} = ii_b(ones(sf(ii_b).bbsize(1), 1));
end
ws = reshape([ws{:}], [], 1);
w_is = cat(1, w_is{:});
w_cs = oris_w_cs{ii_o};
ws = oris_ws{ii_o};
w_is = oris_w_is{ii_o};
% UV part
uv = uv_tot(:, :, ii_o)';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment