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

Shape-functions: added num-interp support for P shape functions

parent 4d72fb18
No related branches found
No related tags found
No related merge requests found
...@@ -245,7 +245,7 @@ function bl = gtDefFwdProjGvdm2NW(grain, ref_sel, gv, fedpars, parameters, eta_s ...@@ -245,7 +245,7 @@ function bl = gtDefFwdProjGvdm2NW(grain, ref_sel, gv, fedpars, parameters, eta_s
bl(ii_b).bbnim = ([nw_min(ii_b, 1), nw_max(ii_b, 1)] + n_shifts(ii_b)) .* eta_step; bl(ii_b).bbnim = ([nw_min(ii_b, 1), nw_max(ii_b, 1)] + n_shifts(ii_b)) .* eta_step;
im_w_low_lim = w_shifts(ii_b) - blob_orig_nw_shifts(ii_b, 2) + 1; im_w_low_lim = w_shifts(ii_b) - blob_orig_nw_shifts(ii_b, 2) + 1;
bl(ii_b).bbwim = [im_w_low_lim, im_w_low_lim + bl(ii_b).bbsize(2) - 1] * blobs_w_interp(ii_b); bl(ii_b).bbwim = [im_w_low_lim, im_w_low_lim + bl(ii_b).bbsize(2) - 1] * blobs_w_interp(ii_b);
bl(ii_b).interpw = blobs_w_interp(ii_b); bl(ii_b).interp_w = blobs_w_interp(ii_b);
o.fprintf(repmat('\b', [1, num_chars])); o.fprintf(repmat('\b', [1, num_chars]));
end end
......
...@@ -51,8 +51,21 @@ function bl = gtDefFwdProjGvdm2P(grain, selectedph, gv, fedpars, parameters, det ...@@ -51,8 +51,21 @@ function bl = gtDefFwdProjGvdm2P(grain, selectedph, gv, fedpars, parameters, det
selectedph = grain.allblobs(det_ind).phind == phind; selectedph = grain.allblobs(det_ind).phind == phind;
end end
if (isfield(fedpars, 'detector') ...
&& isfield(fedpars.detector(det_ind), 'blobs_w_interp') ...
&& ~isempty(fedpars.detector(det_ind).blobs_w_interp))
blobs_p_interp = fedpars.detector(det_ind).blobs_w_interp;
if (numel(blobs_p_interp) ~= nbl)
error([mfilename ':wrong_argument'], ...
'Number of "blobs_w_interp" (%d) doesn''t match with the number of blobs (%d)', ...
numel(blobs_p_interp), nbl)
end
else
blobs_p_interp = ones(nbl, 1);
end
sinths = grain.allblobs(det_ind).sintheta(selectedph); sinths = grain.allblobs(det_ind).sintheta(selectedph);
or_pw = grain.allblobs(det_ind).detector.uvpw(selectedph, 3); phi = grain.allblobs(det_ind).phi(selectedph);
omega = grain.allblobs(det_ind).omega(selectedph); omega = grain.allblobs(det_ind).omega(selectedph);
phinds = grain.allblobs(det_ind).phind(selectedph); phinds = grain.allblobs(det_ind).phind(selectedph);
...@@ -65,7 +78,7 @@ function bl = gtDefFwdProjGvdm2P(grain, selectedph, gv, fedpars, parameters, det ...@@ -65,7 +78,7 @@ function bl = gtDefFwdProjGvdm2P(grain, selectedph, gv, fedpars, parameters, det
instr_t = gtGeoDiffractometerTensor(diff_acq, 'sam2lab', ... instr_t = gtGeoDiffractometerTensor(diff_acq, 'sam2lab', ...
'reference_diffractometer', diff_ref, 'angles_rotation', omega); 'reference_diffractometer', diff_ref, 'angles_rotation', omega);
pw_shifts = round(or_pw)'; p_shifts = round(phi ./ ph_step ./ blobs_p_interp)';
linear_interp = ~(isfield(fedpars, 'projector') ... linear_interp = ~(isfield(fedpars, 'projector') ...
&& isstruct(fedpars.projector) && isfield(fedpars.projector, 'interp') ... && isstruct(fedpars.projector) && isfield(fedpars.projector, 'interp') ...
...@@ -124,16 +137,16 @@ function bl = gtDefFwdProjGvdm2P(grain, selectedph, gv, fedpars, parameters, det ...@@ -124,16 +137,16 @@ function bl = gtDefFwdProjGvdm2P(grain, selectedph, gv, fedpars, parameters, det
numel(inds_bad), numel(ph), ii_b) numel(inds_bad), numel(ph), ii_b)
end end
p_bl = ph ./ ph_step; p_bl = ph ./ ph_step ./ blobs_p_interp(ii_b);
% Transforming into offsets from average orientation % Transforming into offsets from average orientation
p_bl = p_bl - pw_shifts(ii_b); p_bl = p_bl - p_shifts(ii_b);
p{ii_b} = p_bl; p{ii_b} = p_bl;
p_min(ii_b) = min(p{ii_b}); p_min(ii_b) = min(p{ii_b});
p_max(ii_b) = max(p{ii_b}); p_max(ii_b) = max(p{ii_b});
if (any(p_min(ii_b) > 0) || any(p_max(ii_b) < 0)) if ((min(ph) > phi(ii_b)) || (max(ph) < phi(ii_b)))
warning([mfilename ':wrong_result'], ... warning([mfilename ':wrong_result'], ...
'\nThe average orientation seems to project outside the blob!\n') '\nThe average orientation seems to project outside the blob!\n')
end end
...@@ -206,8 +219,9 @@ function bl = gtDefFwdProjGvdm2P(grain, selectedph, gv, fedpars, parameters, det ...@@ -206,8 +219,9 @@ function bl = gtDefFwdProjGvdm2P(grain, selectedph, gv, fedpars, parameters, det
bl(ii_b).bbsize = blob_p_sizes(ii_b); bl(ii_b).bbsize = blob_p_sizes(ii_b);
im_low_lims = pw_shifts(ii_b) - blob_orig_p_shifts(ii_b) + 1; im_low_lims = p_shifts(ii_b) - blob_orig_p_shifts(ii_b) + 1;
bl(ii_b).bbpim = [im_low_lims, im_low_lims + blob_p_sizes(ii_b) - 1]; bl(ii_b).bbpim = [im_low_lims, im_low_lims + blob_p_sizes(ii_b) - 1] * blobs_p_interp(ii_b);
bl(ii_b).interp_p = blobs_p_interp(ii_b);
o.fprintf(repmat('\b', [1, num_chars])); o.fprintf(repmat('\b', [1, num_chars]));
end end
......
...@@ -235,7 +235,7 @@ function bl = gtDefFwdProjGvdm2W(grain, ref_sel, gv, fedpars, parameters, det_in ...@@ -235,7 +235,7 @@ function bl = gtDefFwdProjGvdm2W(grain, ref_sel, gv, fedpars, parameters, det_in
im_low_lim = w_shifts(ii_b) - blob_orig_w_shifts(ii_b) + 1; im_low_lim = w_shifts(ii_b) - blob_orig_w_shifts(ii_b) + 1;
bl(ii_b).bbwim = [im_low_lim, im_low_lim + bl(ii_b).bbsize - 1] * blobs_w_interp(ii_b); bl(ii_b).bbwim = [im_low_lim, im_low_lim + bl(ii_b).bbsize - 1] * blobs_w_interp(ii_b);
bl(ii_b).interpw = blobs_w_interp(ii_b); bl(ii_b).interp_w = blobs_w_interp(ii_b);
o.fprintf(repmat('\b', [1, num_chars])); o.fprintf(repmat('\b', [1, num_chars]));
end end
......
...@@ -12,12 +12,13 @@ function blob = gtFwdSimBlobDefinition(type, num_blobs) ...@@ -12,12 +12,13 @@ function blob = gtFwdSimBlobDefinition(type, num_blobs)
'intm', [], ... % The normalized shape function 'intm', [], ... % The normalized shape function
'bbwim', zeros(0, 2), ... % Shape function's limits in W 'bbwim', zeros(0, 2), ... % Shape function's limits in W
'bbsize', zeros(0, 1), ... % Shape function's BoundingBox (includes margins) 'bbsize', zeros(0, 1), ... % Shape function's BoundingBox (includes margins)
'interpw', zeros(0, 1) ); % Size of the W interpolation (num_interp) 'interp_w', zeros(0, 1) ); % Size of the W interpolation (num_interp)
case 'sf_p' case 'sf_p'
blob = struct( ... blob = struct( ...
'intm', [], ... % The normalized shape function 'intm', [], ... % The normalized shape function
'bbpim', zeros(0, 2), ... % Shape function's limits in P 'bbpim', zeros(0, 2), ... % Shape function's limits in P
'bbsize', zeros(0, 1) ); % Shape function's BoundingBox (includes margins) 'bbsize', zeros(0, 1), ... % Shape function's BoundingBox (includes margins)
'interp_p', zeros(0, 1) ); % Size of the P interpolation (num_interp)
case 'sf_n' case 'sf_n'
blob = struct( ... blob = struct( ...
'intm', [], ... % The normalized shape function 'intm', [], ... % The normalized shape function
...@@ -29,7 +30,7 @@ function blob = gtFwdSimBlobDefinition(type, num_blobs) ...@@ -29,7 +30,7 @@ function blob = gtFwdSimBlobDefinition(type, num_blobs)
'bbnim', zeros(0, 2), ... % Shape function's limits in eta 'bbnim', zeros(0, 2), ... % Shape function's limits in eta
'bbwim', zeros(0, 2), ... % Shape function's limits in W 'bbwim', zeros(0, 2), ... % Shape function's limits in W
'bbsize', zeros(0, 2), ... % Shape function's BoundingBox (includes margins) 'bbsize', zeros(0, 2), ... % Shape function's BoundingBox (includes margins)
'interpw', zeros(0, 1) ); % Size of the W interpolation (num_interp) 'interp_w', zeros(0, 1) ); % Size of the W interpolation (num_interp)
case {'blob', 'sf_uvw'} case {'blob', 'sf_uvw'}
blob = struct( ... blob = struct( ...
'intm', [], ... % The normalized blob 'intm', [], ... % The normalized blob
......
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