From d50bbb44c72b85c25f94436118b7c27672f5ca10 Mon Sep 17 00:00:00 2001
From: Nicola Vigano <nicola.vigano@esrf.fr>
Date: Wed, 8 Apr 2015 19:19:00 +0200
Subject: [PATCH] 6D-Reconstruction: changed dual TV behavior to return -div
 instead of div.

Signed-off-by: Nicola Vigano <nicola.vigano@esrf.fr>
---
 zUtil_Deformation/Gt6DBlobReconstructor.m | 8 ++++----
 zUtil_Deformation/gt6DUpdateDualTV.m      | 7 +++++--
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/zUtil_Deformation/Gt6DBlobReconstructor.m b/zUtil_Deformation/Gt6DBlobReconstructor.m
index 7b0dc9ed..448216e2 100644
--- a/zUtil_Deformation/Gt6DBlobReconstructor.m
+++ b/zUtil_Deformation/Gt6DBlobReconstructor.m
@@ -393,7 +393,7 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
 
                 % Computing update dual TV
                 self.statistics.tic('cp_dual_update_tv');
-                [divq, q] = gt6DUpdateDualTV(q, nextEnhancedSolution, 1, self.algo_ops_c_functions, self.num_threads);
+                [mdivq, q] = gt6DUpdateDualTV(q, nextEnhancedSolution, 1, self.algo_ops_c_functions, self.num_threads);
                 self.statistics.toc('cp_dual_update_tv');
 
                 % Computing update primal
@@ -409,7 +409,7 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
                     timing_bs = timing_bs + bs_time;
 
                     [self.currentSolution{n}, nextEnhancedSolution{n}, app_time] ...
-                        = gt6DUpdatePrimal(self.currentSolution{n}, v, -divq, tau{n}, self.algo_ops_c_functions, self.num_threads);
+                        = gt6DUpdatePrimal(self.currentSolution{n}, v, mdivq, tau{n}, self.algo_ops_c_functions, self.num_threads);
                     timing_app = timing_app + app_time;
                     clear v
                 end
@@ -505,7 +505,7 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
 
                 % Computing update dual TV
                 self.statistics.tic('cp_dual_update_tv');
-                [div_tv, q_tv] = gt6DUpdateDualTV(q_tv, nextEnhancedSolution, 1, self.algo_ops_c_functions, self.num_threads);
+                [mdiv_tv, q_tv] = gt6DUpdateDualTV(q_tv, nextEnhancedSolution, 1, self.algo_ops_c_functions, self.num_threads);
                 self.statistics.toc('cp_dual_update_tv');
 
                 % Computing update dual l1
@@ -526,7 +526,7 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
                     timing_bs = timing_bs + bs_time;
 
                     [self.currentSolution{n}, nextEnhancedSolution{n}, app_time] ...
-                        = gt6DUpdatePrimal(self.currentSolution{n}, v, q_l1{n}-div_tv, tau{n}, self.algo_ops_c_functions, self.num_threads);
+                        = gt6DUpdatePrimal(self.currentSolution{n}, v, q_l1{n}+mdiv_tv, tau{n}, self.algo_ops_c_functions, self.num_threads);
                     timing_app = timing_app + app_time;
                     clear v
                 end
diff --git a/zUtil_Deformation/gt6DUpdateDualTV.m b/zUtil_Deformation/gt6DUpdateDualTV.m
index 049d98b5..72967004 100644
--- a/zUtil_Deformation/gt6DUpdateDualTV.m
+++ b/zUtil_Deformation/gt6DUpdateDualTV.m
@@ -1,4 +1,4 @@
-function [divq, q] = gt6DUpdateDualTV(q, new_enh_sol, lambda, use_c_function, num_threads)
+function [mdivq, q] = gt6DUpdateDualTV(q, new_enh_sol, lambda, use_c_function, num_threads)
 % function q = gt6DUpdateDualTV(q, new_enh_sol, lambda, use_c_function)
 %
 
@@ -21,5 +21,8 @@ function [divq, q] = gt6DUpdateDualTV(q, new_enh_sol, lambda, use_c_function, nu
         end
     end
 
-    divq = gtMathsDivergence(q);
+    % Let's try to at least mark them for deletion
+    clear sES dsES
+
+    mdivq = -gtMathsDivergence(q);
 end
\ No newline at end of file
-- 
GitLab