diff --git a/4_grains/gtGrainAllblobsFilterOrder.m b/4_grains/gtGrainAllblobsFilterOrder.m index f3fb1508910d326c455fef6bf60e4c83135ebadf..4f9193a8470b2dd746c1d6dd47cc80c0222426cf 100644 --- a/4_grains/gtGrainAllblobsFilterOrder.m +++ b/4_grains/gtGrainAllblobsFilterOrder.m @@ -1,72 +1,91 @@ function gr = gtGrainAllblobsFilterOrder(gr, refgr_omind_ind, included) - gr_omind = gr.allblobs.omind; - gr_omind_ind = [ ... - find(gr_omind == 1); find(gr_omind == 2); ... - find(gr_omind == 3); find(gr_omind == 4) ]; + gr_omind = gr.allblobs.omind; + gr_omind_ind = [ ... + find(gr_omind == 1); find(gr_omind == 2); ... + find(gr_omind == 3); find(gr_omind == 4) ]; - if (~exist('refgr_omind_ind', 'var') || isempty(refgr_omind_ind)) - refgr_omind_ind = gr_omind_ind; - end - if (~exist('included', 'var') || isempty(included)) - included = 1:numel(gr_omind); - end + if (~exist('refgr_omind_ind', 'var') || isempty(refgr_omind_ind)) + refgr_omind_ind = gr_omind_ind; + end + if (~exist('included', 'var') || isempty(included)) + included = 1:numel(gr_omind); + end - fnames = fieldnames(gr.allblobs); - for ii_f = 1:numel(fnames) - fname = fnames{ii_f}; - switch(fname) - case 'srot' - srot = gr.allblobs.(fname); - srot(:, :, refgr_omind_ind) = srot(:, :, gr_omind_ind); - gr.allblobs.(fname) = srot(:, :, included); - case 'detector' - num_dets = numel(gr.allblobs.detector); - for ii_d = 1:num_dets - subfnames = fieldnames(gr.allblobs.detector(ii_d)); - for ii_sf = 1:numel(subfnames) - subfname = subfnames{ii_sf}; - prop = gr.allblobs.detector(ii_d).(subfname); - prop(refgr_omind_ind, :) = prop(gr_omind_ind, :); - gr.allblobs.detector(ii_d).(subfname) = prop(included, :); - end + fnames = fieldnames(gr.allblobs); + for ii_f = 1:numel(fnames) + fname = fnames{ii_f}; + switch(fname) + case 'srot' + srot = gr.allblobs.(fname); + srot(:, :, refgr_omind_ind) = srot(:, :, gr_omind_ind); + gr.allblobs.(fname) = srot(:, :, included); + case 'detector' + num_dets = numel(gr.allblobs.detector); + for ii_d = 1:num_dets + subfnames = fieldnames(gr.allblobs.detector(ii_d)); + for ii_sf = 1:numel(subfnames) + subfname = subfnames{ii_sf}; + prop = gr.allblobs.detector(ii_d).(subfname); + prop(refgr_omind_ind, :) = prop(gr_omind_ind, :); + gr.allblobs.detector(ii_d).(subfname) = prop(included, :); end - otherwise - prop = gr.allblobs.(fname); - prop(refgr_omind_ind, :) = prop(gr_omind_ind, :); - gr.allblobs.(fname) = prop(included, :); - end + end + otherwise + prop = gr.allblobs.(fname); + prop(refgr_omind_ind, :) = prop(gr_omind_ind, :); + gr.allblobs.(fname) = prop(included, :); end + end - % Taking care of FwdSim/Reconstruction fields - if (isfield(gr, 'ondet')) - ondet_logical = false(numel(gr_omind), 1); - ondet_logical(gr.ondet) = true; - included_logical = false(numel(gr_omind), 1); - included_logical(gr.ondet(gr.included)) = true; - selected_logical = false(numel(gr_omind), 1); - selected_logical(gr.ondet(gr.included(gr.selected))) = true; + % Taking care of FwdSim/Reconstruction fields + if (isfield(gr, 'ondet')) + ondet_logical = false(numel(gr_omind), 1); + ondet_logical(gr.ondet) = true; + included_logical = false(numel(gr_omind), 1); + included_logical(gr.ondet(gr.included)) = true; + selected_logical = false(numel(gr_omind), 1); + selected_logical(gr.ondet(gr.included(gr.selected))) = true; - ondet_logical(refgr_omind_ind) = ondet_logical(gr_omind_ind); - included_logical(refgr_omind_ind) = included_logical(gr_omind_ind); - selected_logical(refgr_omind_ind) = selected_logical(gr_omind_ind); + included_pos = zeros(numel(gr_omind), 1); + included_pos(included_logical) = 1:numel(gr.included); - gr.ondet = find(ondet_logical); - gr.included = find(included_logical(gr.ondet)); - gr.selected = selected_logical(gr.ondet(gr.included)); - elseif (isfield(gr, 'proj') && isfield(gr.proj, 'ondet')) - ondet_logical = false(numel(gr_omind), 1); - ondet_logical(gr.proj.ondet) = true; - included_logical = false(numel(gr_omind), 1); - included_logical(gr.proj.ondet(gr.proj.included)) = true; - selected_logical = false(numel(gr_omind), 1); - selected_logical(gr.proj.ondet(gr.proj.included(gr.proj.selected))) = true; + ondet_logical(refgr_omind_ind) = ondet_logical(gr_omind_ind); + included_logical(refgr_omind_ind) = included_logical(gr_omind_ind); + selected_logical(refgr_omind_ind) = selected_logical(gr_omind_ind); - ondet_logical(refgr_omind_ind) = ondet_logical(gr_omind_ind); - included_logical(refgr_omind_ind) = included_logical(gr_omind_ind); - selected_logical(refgr_omind_ind) = selected_logical(gr_omind_ind); + included_pos(refgr_omind_ind) = included_pos(gr_omind_ind); - gr.proj.ondet = find(ondet_logical); - gr.proj.included = find(included_logical(gr.proj.ondet)); - gr.proj.selected = selected_logical(gr.proj.ondet(gr.proj.included)); - end - end \ No newline at end of file + gr.ondet = find(ondet_logical); + gr.included = find(included_logical(gr.ondet)); + gr.selected = selected_logical(gr.ondet(gr.included)); + + included_pos = included_pos(gr.ondet(gr.included)); + elseif (isfield(gr, 'proj') && isfield(gr.proj, 'ondet')) + ondet_logical = false(numel(gr_omind), 1); + ondet_logical(gr.proj.ondet) = true; + included_logical = false(numel(gr_omind), 1); + included_logical(gr.proj.ondet(gr.proj.included)) = true; + selected_logical = false(numel(gr_omind), 1); + selected_logical(gr.proj.ondet(gr.proj.included(gr.proj.selected))) = true; + + included_pos = zeros(numel(gr_omind), 1); + included_pos(included_logical) = 1:numel(gr.proj.included); + + ondet_logical(refgr_omind_ind) = ondet_logical(gr_omind_ind); + included_logical(refgr_omind_ind) = included_logical(gr_omind_ind); + selected_logical(refgr_omind_ind) = selected_logical(gr_omind_ind); + + included_pos(refgr_omind_ind) = included_pos(gr_omind_ind); + + gr.proj.ondet = find(ondet_logical); + gr.proj.included = find(included_logical(gr.proj.ondet)); + gr.proj.selected = selected_logical(gr.proj.ondet(gr.proj.included)); + + included_pos = included_pos(gr.proj.ondet(gr.proj.included)); + end + + if (isfield(gr, 'proj') && isfield(gr.proj, 'bl')) + gr.proj.bl = gr.proj.bl(included_pos); + gr.proj.stack = gr.proj.stack(:, included_pos, :); + end +end