From 114c0226b68e6dcad83cde9875c87cfd0ab787e4 Mon Sep 17 00:00:00 2001
From: Lewin Probst <info@emirror.de>
Date: Wed, 11 Dec 2019 15:48:33 +0100
Subject: [PATCH] Added option to save the optimum tables to a mat file.

---
 VERSION                                       |  2 +-
 .../+edit/+offsets/buttonCalculateOffsets.m   |  3 +-
 .../+controller/+file/saveOptimumTables.m     | 33 +++++++++++++++++++
 lib/+artoa/+controller/+main/open.m           |  1 +
 lib/+artoa/+gui/main.m                        |  7 ++++
 lib/+artoa/+offsets/solve.m                   |  6 ++--
 6 files changed, 47 insertions(+), 5 deletions(-)
 create mode 100644 lib/+artoa/+controller/+file/saveOptimumTables.m

diff --git a/VERSION b/VERSION
index b9c6c00..dd1ec20 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-131
\ No newline at end of file
+132
\ No newline at end of file
diff --git a/lib/+artoa/+controller/+edit/+offsets/buttonCalculateOffsets.m b/lib/+artoa/+controller/+edit/+offsets/buttonCalculateOffsets.m
index d541802..f6b0c67 100644
--- a/lib/+artoa/+controller/+edit/+offsets/buttonCalculateOffsets.m
+++ b/lib/+artoa/+controller/+edit/+offsets/buttonCalculateOffsets.m
@@ -14,7 +14,8 @@ satData = artoaWorkspace.satData;
     artoaWorkspace.editOffsets.A, ...
     artoaWorkspace.editOffsets.B, ...
     artoaWorkspace.editOffsets.X, ...
-    ~ ...
+    artoaWorkspace.editOffsets.unfilteredA, ...
+    artoaWorkspace.editOffsets.unfilteredB ...
 ] = artoa.offsets.solve( ...
     artoaDataInput.rfb, ...
     soundsources, ...
diff --git a/lib/+artoa/+controller/+file/saveOptimumTables.m b/lib/+artoa/+controller/+file/saveOptimumTables.m
new file mode 100644
index 0000000..2028b3a
--- /dev/null
+++ b/lib/+artoa/+controller/+file/saveOptimumTables.m
@@ -0,0 +1,33 @@
+function [] = saveOptimumTables(~, ~)
+%SAVERFC Summary of this function goes here
+%   Detailed explanation goes here
+
+global artoaWorkspace artoaDataInput;
+
+%% Get offsets
+unfilteredA = artoa.data.getMember(artoaWorkspace, {'editOffsets', 'unfilteredA'}, false);
+unfilteredB = artoa.data.getMember(artoaWorkspace, {'editOffsets', 'unfilteredB'}, false);
+A = artoa.data.getMember(artoaWorkspace, {'editOffsets', 'A'}, false);
+B = artoa.data.getMember(artoaWorkspace, {'editOffsets', 'B'}, false);
+X = artoa.data.getMember(artoaWorkspace, {'editOffsets', 'X'}, false);
+
+if islogical(unfilteredA) || islogical(unfilteredB) ...
+        || islogical(A) || islogical(B) || islogical(X)
+    errordlg('At least one of the matrices to save is not available. Please recalculate!', 'Matrices not found');
+    return;
+end
+
+%% Get required variables
+folder = artoa.data.getMember(artoaDataInput, {'ini', 'directory', 'optimumtables'}, pwd());
+filter = artoa.data.getMember(artoaDataInput, {'ini', 'filemask', 'optimumtables'}, '*.mat');
+
+%% Ask for filename
+[filename, pathname] = uiputfile(fullfile(folder, filter));
+
+filepath = fullfile(pathname, filename);
+
+save(filepath, 'unfilteredA', 'unfilteredB', 'A', 'B', 'X');
+
+
+end
+
diff --git a/lib/+artoa/+controller/+main/open.m b/lib/+artoa/+controller/+main/open.m
index 0784c9c..4d4e68d 100644
--- a/lib/+artoa/+controller/+main/open.m
+++ b/lib/+artoa/+controller/+main/open.m
@@ -21,6 +21,7 @@ callbacks.loadInterim = @artoa.controller.file.loadInterim;
 callbacks.loadSoundsourceFile = @artoa.controller.file.loadSoundSourceFile;
 callbacks.saveRfc = @artoa.controller.file.saveRfc;
 callbacks.saveInterim = @artoa.controller.file.saveInterim;
+callbacks.saveOptimumTables = @artoa.controller.file.saveOptimumTables;
 callbacks.loadArtoaIni = @artoa.controller.file.loadArtoaIni;
 callbacks.openEditTemperature = @artoa.controller.edit.temperature.open;
 callbacks.openEditPressure = @artoa.controller.edit.pressure.open;
diff --git a/lib/+artoa/+gui/main.m b/lib/+artoa/+gui/main.m
index e6dd5dd..1ba00e0 100644
--- a/lib/+artoa/+gui/main.m
+++ b/lib/+artoa/+gui/main.m
@@ -13,6 +13,7 @@ availableCallbacks = { ...
     'loadSoundsourceFile', ...
     'saveRfc', ...
     'saveInterim', ...
+    'saveOptimumTables', ...
     'loadArtoaIni', ...
     'quit', ...
     'openEditTemperature', ...
@@ -90,6 +91,12 @@ uimenu( ...
     'Callback', pCallbacks.saveInterim ...
 );
 
+uimenu( ...
+    artoaGui.main.menus.fileSave, ...
+    'Label', 'Optimum tables', ...
+    'Callback', pCallbacks.saveOptimumTables ...
+);
+
 artoaGui.main.menus.fileReloadArtoaIni = uimenu( ...
     artoaGui.main.menus.file, ...
     'Label', 'Reload artoa.ini', ...
diff --git a/lib/+artoa/+offsets/solve.m b/lib/+artoa/+offsets/solve.m
index 47e50d9..bc02ca6 100644
--- a/lib/+artoa/+offsets/solve.m
+++ b/lib/+artoa/+offsets/solve.m
@@ -1,9 +1,9 @@
-function [A, B, X, unfilteredA] = solve(pRfb, pSoundsources, pTrackingParameter, pToaData, pSatData, pAppliedTemperature, pAppliedPressure, pLeapsecondsMatrix, pOffsetsParameter)
+function [A, B, X, unfilteredA, unfilteredB] = solve(pRfb, pSoundsources, pTrackingParameter, pToaData, pSatData, pAppliedTemperature, pAppliedPressure, pLeapsecondsMatrix, pOffsetsParameter)
 %UNTITLED Summary of this function goes here
 %   Detailed explanation goes here
 
 %% Construct matrices A and B
-[unfilteredA, B] = artoa.offsets.createCalculationTables( ...
+[unfilteredA, unfilteredB] = artoa.offsets.createCalculationTables( ...
     pRfb, ...
     pSoundsources, ...
     pTrackingParameter, ...
@@ -17,7 +17,7 @@ function [A, B, X, unfilteredA] = solve(pRfb, pSoundsources, pTrackingParameter,
 %% Subtract all known offsets
 [B] = artoa.offsets.subtractKnownOffsets( ...
     unfilteredA, ...
-    B, ...
+    unfilteredB, ...
     pOffsetsParameter.offsets ...
 );
 
-- 
GitLab