From 282a6ada125cde9d56d52449c65928402e67324b Mon Sep 17 00:00:00 2001
From: Lewin Probst <info@emirror.de>
Date: Sat, 27 Jun 2020 12:09:04 +0200
Subject: [PATCH] Adjusted reloadRfb function so that it only overwrites the
 metadata.

The offsets get recalculated.
---
 VERSION                                     |  2 +-
 lib/+artoa/+controller/+file/reloadRfb.m    | 76 ++++++++++++++-------
 lib/+artoa/+controller/copyRfbToWorkspace.m | 41 +++++++----
 lib/+artoa/+gui/main.m                      |  2 +-
 4 files changed, 79 insertions(+), 42 deletions(-)

diff --git a/VERSION b/VERSION
index dd4a900..b8e817d 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-254
\ No newline at end of file
+255
\ No newline at end of file
diff --git a/lib/+artoa/+controller/+file/reloadRfb.m b/lib/+artoa/+controller/+file/reloadRfb.m
index d62b08f..6db3c98 100644
--- a/lib/+artoa/+controller/+file/reloadRfb.m
+++ b/lib/+artoa/+controller/+file/reloadRfb.m
@@ -1,47 +1,73 @@
 function [] = reloadRfb(~, ~)
 %LOADRFB Creates a file selection dialog and reads the file into memory.
 
-global artoaDataInput;
+global artoaDataInput artoaWorkspace;
 
 %% Check if path is available
 if ~isfield(artoaDataInput, 'path_rfb')
-    error([mfilename ': No rfb file available, please load it manually.']);
-end
+    waitfor( ...
+        msgbox( ...
+            [ ...
+                'You cannot reload the rfb file, because the reference is missing. ' ...
+                'Please specify the path to the file in the next dialog.' ...
+            ] ...
+            , 'RFB Path missing' ...
+            , 'error' ...
+            ) ...
+        );
+    [filename, pathname] = uigetfile('*.rfb', 'Specify rfb filename');
+    if filename == 0
+        return;
+    end
 
-%% Initialize variables
-artoaDataInput.rfb = false;
+    artoaDataInput.path_rfb = fullfile(pathname, filename);
+end
 
 %% Check if file exists
 if ~isfile(artoaDataInput.path_rfb)
-    error([mfilename ': Selected file ' filepath ' is not a file! Please try again!']);
+    waitfor(msgbox(['The file ' artoaDataInput.path_rfb ' does not exist!'], 'Error', 'error'));
+    artoaDataInput = rmfield(artoaDataInput, 'path_rfb');
+    return;
 end
 
-%% Close all windows
-artoa.controller.edit.pressure.close();
-artoa.controller.edit.temperature.close();
-artoa.controller.edit.timeOfArrival.close();
-artoa.controller.track.trajectoryOutput.close();
+%% Ask for confirmation
+answer = questdlg( ...
+        [ ...
+            'Reload RFB file "'...
+            artoaDataInput.path_rfb ...
+            '"?' ...
+        ], ...
+        'Reload rfb file?', ...
+        'Yes', ...
+        'No', ...
+        struct('Default', 'Yes', 'Interpreter', 'none') ...
+    );
+
+if strcmp(answer, 'No')
+    return;
+end
 
-%% Load file into memory
-artoaDataInput.rfb = artoa.load.rfb(artoaDataInput.path_rfb);
+%% Load rfb file
+rfb = artoa.load.rfb(artoaDataInput.path_rfb);
+
+%% Update artoaDataInput variable
+artoaDataInput.rfb.FLOAT = rfb.FLOAT;
+artoaDataInput.rfb.SAT_FORMAT = rfb.SAT_FORMAT;
+artoaDataInput.rfb.SAT_DATA = rfb.SAT_DATA;
+artoaDataInput.rfb.VARIABLE_LIST = rfb.VARIABLE_LIST;
 
 %% Update workspace
-artoa.controller.initializeArtoa4();
-artoa.controller.copyRfbToWorkspace();
+artoa.controller.copyRfbToWorkspace(true);
+%% Update offset table
+artoaWorkspace.editOffsets.offsets = artoa.offsets.generateOffsetTable( ...
+    artoaWorkspace.float, ...
+    artoa.controller.getSoundsourcesWithAppliedToa() ...
+    );
 
-%% Initialize tracking parameter
-artoa.controller.track.parameter.initialize(true);
+%% Update GUI
 artoa.controller.track.parameter.updateGui();
-%% Initialize offsets
-artoa.controller.edit.offsets.initialize(true);
 artoa.controller.edit.offsets.updateGui();
 
-%% Calculate soundspeed
-artoa.controller.edit.offsets.updateMeasuredSoundspeed();
-
-%% Update menu buttons
-artoa.controller.updateMenuButtons();
-
 %% Update status text in main window
 artoa.controller.main.updateLoadedFloatInformation();
 
diff --git a/lib/+artoa/+controller/copyRfbToWorkspace.m b/lib/+artoa/+controller/copyRfbToWorkspace.m
index 437bc91..1cc671e 100644
--- a/lib/+artoa/+controller/copyRfbToWorkspace.m
+++ b/lib/+artoa/+controller/copyRfbToWorkspace.m
@@ -1,4 +1,4 @@
-function [] = copyRfbToWorkspace()
+function [] = copyRfbToWorkspace(pIgnoreDataSection)
 %COPYRFBTOWORKSPACE Copies rfb input data to the workspace.
 %   Gets all required data from the artoaDataInput variable, prepares it
 %   for calculations and operations and stores them in the artoaWorkspace
@@ -6,9 +6,32 @@ function [] = copyRfbToWorkspace()
 
 global artoaDataInput artoaConfig artoaWorkspace;
 
-%% Generate workspace
+%% Parameter check
+if ~exist('pIgnoreDataSection', 'var')
+    pIgnoreDataSection = false;
+end
+
+%% FLOAT DETAILS
+artoaWorkspace.float = artoaDataInput.rfb.FLOAT;
+
+%% SAT DATA
+fnames = fieldnames(artoaDataInput.rfb.SAT_FORMAT);
+artoaWorkspace.satData = struct();
+for i = 1:length(fnames)
+    artoaWorkspace.satData.(fnames{i}) = artoaDataInput.rfb.SAT_DATA( ...
+        :, ...
+        artoaDataInput.rfb.SAT_FORMAT.(fnames{i}) ...
+    );
+end
+
+%% STOP IF DATA SHOULD BE IGNORED
+if pIgnoreDataSection
+    return;
+end
+
 
 %% RAFOS DATE
+
 artoaWorkspace.rafosDate = artoa.convert.dmy2rd( ...
     artoaDataInput.rfb.DATA(:, artoaDataInput.rfb.VARIABLE_LIST.start_listen_day), ...
     artoaDataInput.rfb.DATA(:, artoaDataInput.rfb.VARIABLE_LIST.start_listen_mon), ...
@@ -21,6 +44,7 @@ artoa.convert.hms2rd( ...
     artoaDataInput.rfb.DATA(:, artoaDataInput.rfb.VARIABLE_LIST.start_listen_sec) ...
 );
 
+
 %% TOA
 artoaWorkspace.toaData = struct();
 artoaWorkspace.toaData.status = zeros( ...
@@ -85,19 +109,6 @@ artoa.data.replaceValuesWithNaN( ...
     artoaWorkspace.pressure, artoaConfig.defaults.pressure ...
 );
 
-%% FLOAT DETAILS
-artoaWorkspace.float = artoaDataInput.rfb.FLOAT;
-
-%% SAT DATA
-fnames = fieldnames(artoaDataInput.rfb.SAT_FORMAT);
-artoaWorkspace.satData = struct();
-for i = 1:length(fnames)
-    artoaWorkspace.satData.(fnames{i}) = artoaDataInput.rfb.SAT_DATA( ...
-        :, ...
-        artoaDataInput.rfb.SAT_FORMAT.(fnames{i}) ...
-    );
-end
-
 %% GET SOUNDSOURCES THAT ARE ALIVE DURING THE FLOAT MISSION
 artoaWorkspace.filteredSoundsources = artoa.soundsources.filter( ...
     artoaDataInput.soundsources, min(artoaWorkspace.rafosDate), max(artoaWorkspace.rafosDate) ...
diff --git a/lib/+artoa/+gui/main.m b/lib/+artoa/+gui/main.m
index 17a5831..d302809 100644
--- a/lib/+artoa/+gui/main.m
+++ b/lib/+artoa/+gui/main.m
@@ -181,7 +181,7 @@ artoaGui.main.menus.fileReloadSoundsourceFile = uimenu( ...
 % RFB FILE
 artoaGui.main.menus.fileReloadRfbeFile = uimenu( ...
     artoaGui.main.menus.fileReload, ...
-    'Label', 'RFB file', ...
+    'Label', 'RFB metadata', ...
     'Callback', pCallbacks.reloadRfbFile ...
 );
 
-- 
GitLab