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

3D-Reconstruction: added future compatibility to nowadays' reconstructions

parent db046b09
No related branches found
No related tags found
No related merge requests found
function grain = gtLoadGrain(phase_id, grain_id, varargin)
conf = struct('fields', {{}});
conf = struct('fields', {{}}, 'parameters', {[]});
conf = parse_pv_pairs(conf, varargin);
phase_dir = fullfile('4_grains', sprintf('phase_%02d', phase_id));
if (isempty(conf.parameters))
phase_dir = fullfile('4_grains', sprintf('phase_%02d', phase_id));
else
phase_dir = fullfile(conf.parameters.acq.dir, '4_grains', sprintf('phase_%02d', phase_id));
end
for ii = numel(grain_id):-1:1
grain_file = fullfile(phase_dir, sprintf('grain_%04d.mat', grain_id(ii)));
......
function grain_det = gtLoadGrainRec(phase_id, grain_id, varargin)
conf = struct('fields', {{}}, 'parameters', {[]});
conf = parse_pv_pairs(conf, varargin);
if (isempty(conf.parameters))
phase_dir = fullfile('4_grains', sprintf('phase_%02d', phase_id));
else
phase_dir = fullfile(conf.parameters.acq.dir, '4_grains', sprintf('phase_%02d', phase_id));
end
for ii = numel(grain_id):-1:1
grain_file = fullfile(phase_dir, sprintf('grain_details_%04d.mat', grain_id(ii)));
if (isempty(conf.fields))
grain_det(ii) = load(grain_file);
else
grain_det(ii) = load(grain_file, conf.fields{:});
end
end
end
function gtSaveGrain(phase_id, grain_id, grain, varargin)
conf = struct('fields', {{}});
conf = struct('fields', {{}}, 'parameters', {[]});
conf = parse_pv_pairs(conf, varargin);
phase_dir = fullfile('4_grains', sprintf('phase_%02d', phase_id));
if (isempty(conf.parameters))
phase_dir = fullfile('4_grains', sprintf('phase_%02d', phase_id));
else
phase_dir = fullfile(conf.parameters.acq.dir, '4_grains', sprintf('phase_%02d', phase_id));
end
grain_file = fullfile(phase_dir, sprintf('grain_%04d.mat', grain_id));
if (isempty(conf.fields))
......
function gtSaveGrainRec(phase_id, grain_id, grain_det, varargin)
details_fields = {'VOL3D', 'ODF6D', 'ODFw', 'ODFuvw'};
conf = struct( ...
'fields', {details_fields}, ...
'parameters', {[]}, ...
'clean', false );
conf = parse_pv_pairs(conf, varargin);
% Only allow for the possible fields
conf.fields = intersect(conf.fields, details_fields);
phase_dir = fullfile('4_grains', sprintf('phase_%02d', phase_id));
grain_file = fullfile(phase_dir, sprintf('grain_details_%04d.mat', grain_id));
if (conf.clean)
if (exist(grain_file, file))
gr_det = load(grain_file);
else
gr_det = struct();
end
for ii_f = 1:numel(conf.fields)
gr_det.(conf.fields{ii_f}) = grain_det.(conf.fields{ii_f});
end
save(grain_file, '-struct', 'gr_det', '-v7.3');
else
mat_grain_file = matfile(grain_file, 'Writable', true);
for ii_f = 1:numel(conf.fields)
mat_grain_file.(conf.fields{ii_f}) = grain_det.(conf.fields{ii_f});
end
end
end
function vol = gtAstraReconstructGrain(grainID, phaseID, parameters)
function gtAstraReconstructGrain(grainID, phaseID, parameters)
% GTASTRARECONSTRUCTGRAIN 3D ART (ASTRA) reconstruction on a GPU machine
% gtAstraReconstructGrain(grainID, phaseID, [parameters])
% -------------------------------------------------------
......@@ -13,7 +13,7 @@ function vol = gtAstraReconstructGrain(grainID, phaseID, parameters)
% Commenting and formatting
%
if ~exist('parameters','var') || isempty(parameters)
if (~exist('parameters','var') || isempty(parameters))
parameters = gtLoadParameters();
end
......@@ -26,11 +26,15 @@ function vol = gtAstraReconstructGrain(grainID, phaseID, parameters)
rec.num_iter = parameters.rec.num_iter;
end
gr = gtLoadGrain(phaseID, grainID, 'fields', {'proj', 'selected'});
gr = gtLoadGrain(phaseID, grainID, 'fields', {'proj'});
if (~isfield(gr.proj, 'selected'))
gr_extra = gtLoadGrain(phaseID, grainID, 'fields', {'selected'});
gr.proj.selected = gr_extra.selected;
end
gr.proj.num_iter = rec.num_iter;
gr.proj.stack = gr.proj.stack(:, gr.selected, :);
gr.proj.geom = gr.proj.geom(gr.selected, :);
gr.proj.stack = gr.proj.stack(:, gr.proj.selected, :);
gr.proj.geom = gr.proj.geom(gr.proj.selected, :);
is_cone = isfield(parameters.labgeo, 'sourcepoint') ...
&& (~isempty(parameters.labgeo.sourcepoint));
......@@ -43,4 +47,11 @@ function vol = gtAstraReconstructGrain(grainID, phaseID, parameters)
end
gtSaveGrain(phaseID, grainID, gr, 'fields', {'vol'});
shift = gtFwdSimComputeVolumeShifts(gr.proj, parameters, size(gr.vol));
% Saving details to file
gr.VOL3D = struct('intensity', {gr.vol}, 'shift', {shift});
gtSaveGrainRec(phaseID, grainID, gr, 'fields', {'VOL3D'});
end
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