diff --git a/5_reconstruction/gtReconstruct6DLaunchAlgorithm.m b/5_reconstruction/gtReconstruct6DLaunchAlgorithm.m index 436620a8aa65a2afd9c8ffe87ce19923e4ca1e7c..cdb1be0ee06fecdce7e5d8ae9ff06d2bfbeb434c 100644 --- a/5_reconstruction/gtReconstruct6DLaunchAlgorithm.m +++ b/5_reconstruction/gtReconstruct6DLaunchAlgorithm.m @@ -1,12 +1,17 @@ -function [algo, good_or] = gtReconstruct6DLaunchAlgorithm(sampler, rec_opts, parameters) -% FUNCTION algo = gtReconstruct6DLaunchAlgorithm(sampler, rec_opts, parameters) +function [algo, good_or] = gtReconstruct6DLaunchAlgorithm(sampler, rec_opts, parameters, det_index) +% FUNCTION algo = gtReconstruct6DLaunchAlgorithm(sampler, rec_opts, parameters, det_index) % + if (~exist('det_index', 'var') || isempty(det_index)) + det_index = 1; + end + rec_factory = Gt6DReconstructionAlgorithmFactory(parameters, ... 'volume_downscaling', rec_opts.volume_downscaling, ... 'rspace_super_sampling', rec_opts.rspace_super_sampling, ... 'rspace_oversize', rec_opts.rspace_oversize, ... - 'use_predicted_scatter_ints', rec_opts.use_predicted_scatter_ints ); + 'use_predicted_scatter_ints', rec_opts.use_predicted_scatter_ints, ... + 'det_index', det_index ); num_interp = rec_opts.num_interp; if (num_interp < 0) diff --git a/zUtil_Deformation/Gt6DReconstructionAlgorithmFactory.m b/zUtil_Deformation/Gt6DReconstructionAlgorithmFactory.m index 24c26f4e701a035ca1a4fbcf11f18f7ca11ef5e2..250de80b4ad3980de1d94394a241203e2b8f10e9 100644 --- a/zUtil_Deformation/Gt6DReconstructionAlgorithmFactory.m +++ b/zUtil_Deformation/Gt6DReconstructionAlgorithmFactory.m @@ -35,8 +35,10 @@ classdef Gt6DReconstructionAlgorithmFactory < handle function [algo, good_orients, blobs] = getGrainReconstructionAlgo(self, sampler, num_interp, varargin) % Build Empty volumes ref_gr = sampler.get_reference_grain(); - spacing = mean([ref_gr.proj.vol_size_y, ref_gr.proj.vol_size_x, ref_gr.proj.vol_size_z]) * (self.rspace_oversize - 1); - volume_size = round([ref_gr.proj.vol_size_y, ref_gr.proj.vol_size_x, ref_gr.proj.vol_size_z] + spacing); + proj = ref_gr.proj(self.det_index); + + spacing = mean([proj.vol_size_y, proj.vol_size_x, proj.vol_size_z]) * (self.rspace_oversize - 1); + volume_size = round([proj.vol_size_y, proj.vol_size_x, proj.vol_size_z] + spacing); if (self.volume_downscaling > 1) volume_size = ceil(volume_size / self.volume_downscaling); @@ -98,8 +100,10 @@ classdef Gt6DReconstructionAlgorithmFactory < handle % Build Empty volumes ref_gr = sampler(1).get_reference_grain(); - spacing = mean([ref_gr.proj.vol_size_y, ref_gr.proj.vol_size_x, ref_gr.proj.vol_size_z]) * (self.rspace_oversize - 1); - volume_size = round([ref_gr.proj.vol_size_y, ref_gr.proj.vol_size_x, ref_gr.proj.vol_size_z] + spacing); + proj = ref_gr.proj(self.det_index); + + spacing = mean([proj.vol_size_y, proj.vol_size_x, proj.vol_size_z]) * (self.rspace_oversize - 1); + volume_size = round([proj.vol_size_y, proj.vol_size_x, proj.vol_size_z] + spacing); if (self.volume_downscaling > 1) volume_size = ceil(volume_size / self.volume_downscaling); @@ -109,8 +113,8 @@ classdef Gt6DReconstructionAlgorithmFactory < handle % ones that were selected among the included, because the % information we have in the twins about the spots that % coincide are about the included and not the selected - included_pos_in_selected = zeros(size(ref_gr.proj.included)); - included_pos_in_selected(ref_gr.proj.selected) = 1:numel(find(ref_gr.proj.selected)); + included_pos_in_selected = zeros(size(proj.included)); + included_pos_in_selected(proj.selected) = 1:numel(find(proj.selected)); blobs_to_not_shrink = cell(num_grains, 1); blobs_to_not_shrink{1} = false(size(included_pos_in_selected)); @@ -433,8 +437,8 @@ classdef Gt6DReconstructionAlgorithmFactory < handle if (isfield(bl, 'psf')) psf = arrayfun(@(x){ permute(x.psf, [1 3 2]) }, bl); - elseif (isfield(sampler.ref_gr.proj, 'psf')) - psf = { permute(sampler.ref_gr.proj.psf, [1 3 2]) }; + elseif (isfield(proj, 'psf')) + psf = { permute(proj.psf, [1 3 2]) }; else psf = {}; end