From 6a786a2c10119b0d9ef4c0a5ac8fdba9a4a7e6e7 Mon Sep 17 00:00:00 2001
From: Wolfgang Ludwig <wolfgang.ludwig@esrf.fr>
Date: Wed, 6 Jun 2018 19:48:48 +0200
Subject: [PATCH] Some additional fixes related to sample shifting / absorption
 volume vertial center Signed-off-by: Wolfgang Ludwig
 <wolfgang.ludwig@esrf.fr>

---
 1_preprocessing/gtPreprocessing.m              |  7 ++++---
 zUtil_ForwardSim/gtFwdSimBuildBlob.m           |  8 ++++++--
 .../gtFwdSimComputeCircumscribingPolyhedron.m  | 18 ++++++++++--------
 zUtil_ForwardSim/gtFwdSimFindCandidates.m      |  7 +++----
 4 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/1_preprocessing/gtPreprocessing.m b/1_preprocessing/gtPreprocessing.m
index 7e95e09b..ecfe0a82 100644
--- a/1_preprocessing/gtPreprocessing.m
+++ b/1_preprocessing/gtPreprocessing.m
@@ -74,7 +74,7 @@ totproj = prep.totproj;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % check preprocessing parameters
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-parameters = gtCheckParameters(parameters, 'prep', 'verbose', true);
+%parameters = gtCheckParameters(parameters, 'prep', 'verbose', true);
 save(parameters_name,'parameters');
 
 check = inputwdefault('Do you want to verify/change the (default) preprocessing parameters? [y/n]', 'n');
@@ -198,9 +198,10 @@ else
         check = inputwdefault(['Do you want to (re)-calculate the Rotation Axis position (currently ' sprintf('%0.1f',rot) ')? [y/n]'], 'n');
     end
     if strcmpi(check,'y')
-        parameters.acq.rotu = gtFindRotationAxis(parameters.acq,bbdir);
+        parameters.acq.rotu = gtFindRotationAxis(parameters.acq, bbdir);
         parameters.acq.rotx = parameters.acq.rotu;
-        parameters.detgeo.detrefpos(2) = -(parameters.acq.rotu - parameters.acq.xdet / 2) * parameters.detgeo.pixelsizeu;
+        parameters.detgeo.detrefpos(2) = -(parameters.acq.rotu - parameters.acq.xdet / 2 - 0.5) * parameters.detgeo.pixelsizeu;
+        parameters.detgeo.detrefpos(3) =  0;  % Here we define the LabZ = 0 position as the center of the detector
     end
     save(parameters_name,'parameters');
 
diff --git a/zUtil_ForwardSim/gtFwdSimBuildBlob.m b/zUtil_ForwardSim/gtFwdSimBuildBlob.m
index f3da32c5..4e304d81 100644
--- a/zUtil_ForwardSim/gtFwdSimBuildBlob.m
+++ b/zUtil_ForwardSim/gtFwdSimBuildBlob.m
@@ -10,8 +10,12 @@ function [blob, bb, mask, bint] = gtFwdSimBuildBlob(candidateID, parameters, det
     end
 
     base_dir = fullfile(parameters.acq(det_index).dir, '2_difblob');
-    [blob, bb, mask] = gtReadBlobFromHDF5(base_dir, candidateID);
-
+    try
+        [blob, bb, mask] = gtReadBlobFromHDF5(base_dir, candidateID);
+    catch
+        [blob, bb] = gtReadBlobFromHDF5(base_dir, candidateID);
+        mask = true(size(blob));
+    end
     % Let's filter NaNs out
     mask(isnan(blob)) = false;
 
diff --git a/zUtil_ForwardSim/gtFwdSimComputeCircumscribingPolyhedron.m b/zUtil_ForwardSim/gtFwdSimComputeCircumscribingPolyhedron.m
index 5229bac3..26e6aadc 100644
--- a/zUtil_ForwardSim/gtFwdSimComputeCircumscribingPolyhedron.m
+++ b/zUtil_ForwardSim/gtFwdSimComputeCircumscribingPolyhedron.m
@@ -1,4 +1,4 @@
-function verts = gtFwdSimComputeCircumscribingPolyhedron(gr_center, projvecs, omegas, bb, parameters, det_index, criterion, display_figure)
+function verts = gtFwdSimComputeCircumscribingPolyhedron(gr_center, projvecs, omegas, bb, gr_shift_lab, parameters, det_index, criterion, display_figure)
 % verts = gtFwdSimComputeCircumscribingPolyhedron(gr_center, d_beam_dirs, omegas, bb, parameters, det_index, display_figure)
 %
 % bb is [x_origin, y_origin, x_size, y_size]
@@ -39,10 +39,10 @@ function verts = gtFwdSimComputeCircumscribingPolyhedron(gr_center, projvecs, om
     % Taking the four corners: ctl = corner top left, cbr = corner bottom
     % right, ...
     % Here we compute their positions in the lab coordinates
-    ctl_pos_lab = gtGeoDet2Lab([bb(:, 1), bb(:, 2)], detgeo, false);
-    ctr_pos_lab = gtGeoDet2Lab([(bb(:, 1) + bb(:, 3)), bb(:, 2)], detgeo, false);
-    cbl_pos_lab = gtGeoDet2Lab([bb(:, 1), (bb(:, 2) + bb(:, 4))], detgeo, false);
-    cbr_pos_lab = gtGeoDet2Lab([(bb(:, 1) + bb(:, 3)), (bb(:, 2) + bb(:, 4))], detgeo, false);
+    ctl_pos_lab = gtGeoDet2Lab([bb(:, 1), bb(:, 2)], detgeo, false) - gr_shift_lab;
+    ctr_pos_lab = gtGeoDet2Lab([(bb(:, 1) + bb(:, 3)), bb(:, 2)], detgeo, false) - gr_shift_lab;
+    cbl_pos_lab = gtGeoDet2Lab([bb(:, 1), (bb(:, 2) + bb(:, 4))], detgeo, false) - gr_shift_lab;
+    cbr_pos_lab = gtGeoDet2Lab([(bb(:, 1) + bb(:, 3)), (bb(:, 2) + bb(:, 4))], detgeo, false) - gr_shift_lab;
 
     % positions in the reconstruction coordinates
     ctl_pos_rec = gtGeoLab2Sam(ctl_pos_lab, rot_s2l_w, labgeo, recgeo, false);
@@ -135,22 +135,24 @@ function verts = gtFwdSimComputeCircumscribingPolyhedron(gr_center, projvecs, om
         grid(ax, 'on');
         scatter3(ax, 0, 0, 0, 30, 'r', 'filled');
         for ii = 1:numel(omegas)
+            disp(ii)
             quiver3(ax, 0, 0, 0, projvecs_rec(ii, 1), projvecs_rec(ii, 2), projvecs_rec(ii, 3));
 
             scatter3(ax, ctl_pos_rec(ii, 1), ctl_pos_rec(ii, 2), ctl_pos_rec(ii, 3), 20, 'b');
             scatter3(ax, ctr_pos_rec(ii, 1), ctr_pos_rec(ii, 2), ctr_pos_rec(ii, 3), 20, 'b');
 
-            quiver3(ax, 0, 0, 0, pv_t_rec(ii, 1), pv_t_rec(ii, 2), pv_t_rec(ii, 3));
-%             pause
+%            quiver3(ax, 0, 0, 0, pv_t_rec(ii, 1), pv_t_rec(ii, 2), pv_t_rec(ii, 3));
+%            pause
 
             scatter3(ax, cbl_pos_rec(ii, 1), cbl_pos_rec(ii, 2), cbl_pos_rec(ii, 3), 20, 'b');
             scatter3(ax, cbr_pos_rec(ii, 1), cbr_pos_rec(ii, 2), cbr_pos_rec(ii, 3), 20, 'b');
 
             quiver3(ax, 0, 0, 0, pv_b_rec(ii, 1), pv_b_rec(ii, 2), pv_b_rec(ii, 3));
-%             pause
+%            pause
 
             quiver3(ax, 0, 0, 0, pu_l_rec(ii, 1), pu_l_rec(ii, 2), pu_l_rec(ii, 3));
             quiver3(ax, 0, 0, 0, pu_r_rec(ii, 1), pu_r_rec(ii, 2), pu_r_rec(ii, 3));
+            pause
         end
         hold(ax, 'off');
     end
diff --git a/zUtil_ForwardSim/gtFwdSimFindCandidates.m b/zUtil_ForwardSim/gtFwdSimFindCandidates.m
index 7fbd9352..108ddd9f 100644
--- a/zUtil_ForwardSim/gtFwdSimFindCandidates.m
+++ b/zUtil_ForwardSim/gtFwdSimFindCandidates.m
@@ -23,10 +23,9 @@ function [candidateIDs, cands_info] = gtFwdSimFindCandidates(spot_props, gr, spo
     dist_v_pix = abs(spots_info.BoundingBoxYorigin + spots_info.BoundingBoxYsize / 2 - uvw(2));
     dist_w_im = abs(spots_info.CentroidImage - uvw(3));
 
-    dist_u_ok = dist_u_pix < (spots_info.BoundingBoxXsize - spot_props.XsizeMin / 2) / 2;
-    dist_v_ok = dist_v_pix < (spots_info.BoundingBoxYsize - spot_props.YsizeMin / 2) / 2;
-%     dist_u_ok = dist_u_pix < (spot_props.XsizeMax / 2);
-%     dist_v_ok = dist_v_pix < (spot_props.YsizeMax / 2);
+    dist_u_ok = dist_u_pix < (spots_info.BoundingBoxXsize - spot_props.XsizeAvg / 2) / 2;
+    dist_v_ok = dist_v_pix < (spots_info.BoundingBoxYsize - spot_props.YsizeAvg / 2) / 2;
+
     dist_w_ok = dist_w_im <=  spot_props.max_w_offset_im;
 
     if (isfield(spot_props, 'max_n_offset') && ~isempty(spot_props.max_n_offset))
-- 
GitLab