diff --git a/zUtil_Geo/gtGeoLab2Sam.m b/zUtil_Geo/gtGeoLab2Sam.m index 8f4354742418073a31ac81117d52436a6f983697..aacee4d3debd864fa5d9e5d1ef9cb2386714e06d 100644 --- a/zUtil_Geo/gtGeoLab2Sam.m +++ b/zUtil_Geo/gtGeoLab2Sam.m @@ -74,13 +74,20 @@ if (~isfield(samgeo,'lab2sam') || (isfield(samgeo,'lab2sam') && isempty(samgeo.l elseif (conf.only_rot) error('Transformation matrix already defined. Set ''only_rot'' to false.') else - lab2sam = samgeo.lab2sam; + lab2sam = samgeo.lab2sam; end %%%%%%%%%%%%%%%%%%%%% %%% Rotation in Lab %%%%%%%%%%%%%%%%%%%%% +ones_in = ones(size(labXYZ, 1), 1); + +if (~freevec) + % Vectors relative to rotation axis position + labXYZ = labXYZ - labgeo.rotpos(ones_in, :); +end + if (use_diffractometer) if (use_instr_tensor_4x4) rottensors = omega; @@ -108,8 +115,6 @@ if (use_diffractometer) labXYZ_rot = reshape(labXYZ_rot, 3, [])'; end else - ones_in = ones(size(labXYZ, 1), 1); - % Tensor which rotates with omega from Lab back to Sample: if (use_instr_tensor_3x3) % This means that the rotation tensors were passed already! @@ -123,11 +128,6 @@ else rottensors = gtMathsRotationTensor(omega, rotcomp); end - if (~freevec) - % Vectors relative to rotation axis position - labXYZ = labXYZ - labgeo.rotpos(ones_in, :); - end - rottensors_t = reshape(rottensors, 3, []); if (conf.element_wise) @@ -143,12 +143,12 @@ else labXYZ_rot = labXYZ * rottensors_t; labXYZ_rot = reshape(labXYZ_rot', 3, [])'; end +end - if (~freevec) - ones_out = ones(size(labXYZ_rot, 1), 1); - % Set offset back to get rotated vector - labXYZ_rot = labXYZ_rot + labgeo.rotpos(ones_out, :) - samgeo.orig(ones_out, :); - end +if (~freevec) + ones_out = ones(size(labXYZ_rot, 1), 1); + % Set offset back to get rotated vector + labXYZ_rot = labXYZ_rot + labgeo.rotpos(ones_out, :) - samgeo.orig(ones_out, :); end samXYZ = labXYZ_rot * lab2sam; diff --git a/zUtil_Geo/gtGeoSam2Lab.m b/zUtil_Geo/gtGeoSam2Lab.m index 561ce2443372e7ab68b9fadc322b360b2d6960a4..aa5fa5ffeb889c513d1966f4787e3c8f2bc0aef6 100644 --- a/zUtil_Geo/gtGeoSam2Lab.m +++ b/zUtil_Geo/gtGeoSam2Lab.m @@ -81,6 +81,14 @@ end % Vectors in Lab reference at the origin before rotation labXYZprerot = samXYZ * sam2lab; +ones_in = ones(size(samXYZ, 1), 1); + +if (~freevec) + % Vectors relative to rot. axis position in Lab reference + vv = samgeo.orig - labgeo.rotpos; + labXYZprerot = labXYZprerot + vv(ones_in,:); +end + if (use_diffractometer) if (use_instr_tensor_4x4) rottensors = omega; @@ -90,6 +98,7 @@ if (use_diffractometer) 'angles_rotation', conf.omega, ... 'angles_sam_tilt', conf.sample_tilts ); end + if (conf.element_wise) labXYZprerot = permute(labXYZprerot, [2 3 1]); labXYZprerot(4, 1, :) = 1; @@ -108,7 +117,6 @@ if (use_diffractometer) labXYZ = reshape(labXYZ, 3, [])'; end else - ones_in = ones(size(samXYZ, 1), 1); % Tensor which rotates with omega from Sample to Lab if (use_instr_tensor_3x3) @@ -123,12 +131,6 @@ else rottensors = gtMathsRotationTensor(-omega, rotcomp); end - if (~freevec) - % Vectors relative to rot. axis position in Lab reference - vv = samgeo.orig - labgeo.rotpos; - labXYZprerot = labXYZprerot + vv(ones_in,:); - end - rottensors_t = reshape(rottensors, 3, []); if (conf.element_wise) @@ -144,12 +146,12 @@ else labXYZ = labXYZprerot * rottensors_t; labXYZ = reshape(labXYZ', 3, [])'; end +end - if (~freevec) - ones_out = ones(size(labXYZ, 1), 1); - % Set offset back - labXYZ = labXYZ + labgeo.rotpos(ones_out, :); - end +if (~freevec) + ones_out = ones(size(labXYZ, 1), 1); + % Set offset back + labXYZ = labXYZ + labgeo.rotpos(ones_out, :); end end % of function