diff --git a/@tsg_nc/tsg_platform.csv b/@tsg_nc/tsg_platform.csv index 45ef28b4369b8b13122e485f94a7262f62dae865..8c0114d923066361c24185cccccbc409c65ce0d2 100644 --- a/@tsg_nc/tsg_platform.csv +++ b/@tsg_nc/tsg_platform.csv @@ -1,4 +1,4 @@ -% tsg_platform.csv: 14 members & 3 lines with data +% tsg_platform.csv: 14 members & 4 lines with data % $Id$ % id;PLATFORM_NAME;SHIP_CALL_SIGN;SHIP_MMSI;TSG_TYPE;TSG_NUMBER;TINT_TYPE;TINT_NUMBER;SAMPLING_PERIOD;SSPS_DEPH;SSPS_DEPH_MIN;SSPS_DEPH_MAX;SSTP_DEPH;SSTP_DEPH_MIN;SSTP_DEPH_MAX;DATE_TSG;endl @@ -6,3 +6,4 @@ char;char;char;char;char;char;char;char;integer;integer;integer;integer;integer; #;PASTEUR;ELWT7;228288228;SBE21;3197;SBE38;;300;5;3;6;;;;;# #;ANTEA;FNUR;228111000;SBE21;2725;NA;;30;3;3;3;3;3;3;;# #;TOUCAN;FNAV;227278000;SBE21;2725;NA;;30;;;;;;;;# +#;COLIBRI;;;SBE21;;SBE38;;;;;;;;;;# diff --git a/tsg_io/readTsgDataTsg.m b/tsg_io/readTsgDataTsg.m deleted file mode 100644 index 7d8044cac08fc44b6f9a308b298b263a8b8b2392..0000000000000000000000000000000000000000 --- a/tsg_io/readTsgDataTsg.m +++ /dev/null @@ -1,156 +0,0 @@ -function [error] = readTsgDataTsg( hMainFig, filename) -% Function to read the TSG data. Should be a NetCDF file -% -% Input -% ----- -% hMainFig ............ Handle to the main user interface -% filename ........... Data filename -% -% Output -% ------ -% error .............. 1: OK - -1 : an error occured -% -% The data are store using setappdata - Variable name : 'tsg_data' -% -% Caution : replace the fill-value with NaN -% $Id: readTsgDataTxt.m 297 2008-03-20 16:33:37Z ygouriou $ - -% Get the data from the application GUI -% ------------------------------------- -tsg = getappdata( hMainFig, 'tsg_data'); - -% Get the fieldnames of tsg structure -% ----------------------------------- -tsgNames = fieldnames(tsg); -nbFieldNames = length( tsgNames ); - -% Display read file info on console -% --------------------------------- -fprintf('\nREAD_ASCII_FILE\n'); tic; - -% Open the file -% ------------- -fid = fopen( filename, 'r' ); - -% Check file -% ----------- -if fid == -1 - msg_error = ['TSG_GOSUD file_lecture : Open file error : ' filename]; - warndlg( msg_error, 'ASCII error dialog'); - sprintf('...cannot locate %s\n', filename); - error = -1; - return; -end - -% Display more info about read file on console -% -------------------------------------------- -fprintf('...reading %s : ', filename); - -% Read the header till the header line has been read -% -------------------------------------------------- -OK = 0; -while ~OK - - % Read every line - % --------------- - line = fgetl( fid ); - c = textscan( line, '%s'); - - switch char( c{1}(1) ) - - case '%HEADER' - - % Read the header then quit the while loop - % ---------------------------------------- - header = c{1}(2:end); - nHeader = length( header ); - OK = 1; - - otherwise - - % Get the paramete Name (Delete '%') - % ---------------------------------- - Para = char( strtok(c{1}(1), '%') ); - - % Read the parameter value - % ------------------------ - ind = strmatch( Para, tsgNames); - if ~isempty( ind ) - tsg.(Para) = char( c{1}(2) ); - end - - end -end - -% Read the data in a cell -% ----------------------- -cellData = textscan( fid, '%f' ); - -% Convert the data to double -% -------------------------- -nCol = nHeader; -mLine = length( cellData{:} )/nCol; -data = NaN * ones( mLine, nCol ); -ind = 0; -for i = 1:mLine - for j = 1:nCol - ind = ind + 1; - data(i,j) = cellData{1}(ind); - end -end - -clear cellData - -% Date (y m d h m s) in the first 6 elements in data -% -------------------------------------------------- -tsg.DAYD = datenum(data(:,1), data(:,2),data(:,3),data(:,4),data(:,5),data(:,6)); - -% Loop over the header. Skip the 6 first elements -% ----------------------------------------------- -for i = 7 : nHeader - - % QC should be converted in int8 - % ------------------------------ - if ~isempty( strfind(char(header(i)), '_QC')) - tsg.(char(header(i))) = int8( data(:,i) ); - else - tsg.(char(header(i))) = data(:,i); - end -end - -% populate tsg.file structure -% --------------------------- -[tsg.file.pathstr, tsg.file.name, tsg.file.ext, tsg.file.versn] = ... - fileparts(filename); -%tsg.file.name = filename; -tsg.file.type = 'ASCII'; - -% Keep somme information for the log file -% --------------------------------------- -tsg.report.tsgfile = filename; - -% Save the data in the application GUI -% ------------------------------------ -setappdata( hMainFig, 'tsg_data', tsg ); - -% Perform somme automatic tests -% ----------------------------- -automaticQC( hMainFig ); - -% Close the file -% -------------- -fclose( fid ); - -% Clear the Workspace -% ------------------- -clear data - -% Display time to read file on console -% ------------------------------------ -t = toc; fprintf('...done (%6.2f sec).\n\n',t); - -% Everything OK -% ------------- -error = 1; - -end diff --git a/tsg_io/readTsgDataTxt.m b/tsg_io/readTsgDataTxt.m deleted file mode 100644 index 0f1fed8550466daf5b6fce92bb75f8a1c7881501..0000000000000000000000000000000000000000 --- a/tsg_io/readTsgDataTxt.m +++ /dev/null @@ -1,100 +0,0 @@ -function [error] = readTsgDataTxt( hMainFig, filename) -% Function to read the TSG data. Should be a NetCDF file -% -% Input -% ----- -% hMainFig ............ Handle to the main user interface -% filename ........... Data filename -% -% Output -% ------ -% error .............. 1: OK - -1 : an error occured -% -% The data are store using setappdata - Variable name : 'tsg_data' -% -% -% Caution : replace the fill-value with NaN -% $Id$ - -% Get the data from the application GUI -% ------------------------------------- -tsg = getappdata( hMainFig, 'tsg_data'); - -% Display read file info on console -% --------------------------------- -fprintf('\nREAD_ASCII_FILE\n'); tic; - -% Open the file -% ------------- -fid = fopen( filename, 'r' ); - -% Check file -% ----------- -if fid == -1 - msg_error = ['TSG_GOSUD file_lecture : Open file error : ' filename]; - warndlg( msg_error, 'ASCII error dialog'); - sprintf('...cannot locate %s\n', filename); - error = -1; - return; -end - -% Display more info about read file on console -% -------------------------------------------- -fprintf('...reading %s : ', filename); - -% Read the file -% ------------- -tsgData = fscanf(fid, '%d/%d/%d %d:%d:%d %f %f %f %f %d %f %f', [13 Inf])'; - -% Every variable are put in a structure -% ------------------------------------- -tsg.DAYD = datenum(tsgData(:,3), tsgData(:,2),tsgData(:,1), ... - tsgData(:,4),tsgData(:,5),tsgData(:,6)); - -% save original date -% ------------------ -tsg.DATE = datestr( tsg.DAYD, 'yyyymmddHHMMSS' ); -tsg.LATX = tsgData(:,7); -tsg.LONX = tsgData(:,8); -tsg.SSJT = tsgData(:,9); -tsg.SSPS = tsgData(:,10); -tsg.SSPS_QC = tsgData(:,11); -tsg.SSPS_ADJUSTED = tsgData(:,12); -tsg.SSPS_ADJUSTED_ERROR = tsgData(:,13); - -tsg.SSJT_QC = tsg.SSPS_QC; - -% populate tsg.file structure -% --------------------------- -[tsg.file.pathstr, tsg.file.name, tsg.file.ext, tsg.file.versn] = ... - fileparts(filename); -%tsg.file.name = filename; -tsg.file.type = 'ASCII'; - -% Keep somme information for the log file -% --------------------------------------- -tsg.report.tsgfile = filename; - -% Save the data in the application GUI -% ------------------------------------ -setappdata( hMainFig, 'tsg_data', tsg ); - -% Perform somme automatic tests -% ----------------------------- -automaticQC( hMainFig ); - -% Close the file -% -------------- -fclose( fid ); - -% Clear the Workspace -% ------------------- -clear tsgdata - -% Display time to read file on console -% ------------------------------------ -t = toc; fprintf('...done (%6.2f sec).\n\n',t); - -% Everything OK -% ------------- -error = 1; diff --git a/tsg_util/plot_Validation.m b/tsg_util/plot_Validation.m index bcf46d84d9590b13e30eb3afa77e77d68d1cf754..43c097f6346432d21cc1969575e346571f55fb95 100644 --- a/tsg_util/plot_Validation.m +++ b/tsg_util/plot_Validation.m @@ -16,8 +16,9 @@ switch nPlot PARA,'','none','*',2); end - % Plot Salinity bucket - % -------------------- + % Plot PARA bucket + % ----------------------------- + if ~isempty( tsg.([PARA '_SPL']) ) ind = find( tsg.([PARA '_SPL_TYPE']) == 1 ); if ~isempty(ind) diff --git a/tsg_util/tsg_initialisation.m b/tsg_util/tsg_initialisation.m index 12dd7442b8ac7de9df30314c4b3d1a2208d369e7..2144101d6aaa9ce1a1ab89c2f6f93c857b698591 100644 --- a/tsg_util/tsg_initialisation.m +++ b/tsg_util/tsg_initialisation.m @@ -94,6 +94,9 @@ tsg.SSPS_SPL_TYPE = []; tsg.SSTP_SPL = []; tsg.SSTP_SPL_QC = []; tsg.SSTP_SPL_TYPE = []; +tsg.SSJT_SPL = []; +tsg.SSJT_SPL_QC = []; +tsg.SSJT_SPL_TYPE = []; % ------------------------------------------------------------------------- %% Constants for the quality control procedure diff --git a/tsgqc.m b/tsgqc.m index 314649dd2f4dc1d780c9294a243238b795b0c358..9c0e4535d3f5d2f09105752518f3450d327b3712 100644 --- a/tsgqc.m +++ b/tsgqc.m @@ -2893,19 +2893,6 @@ end % ------------------ set( hInfoFileText, 'String', strcat(tsg.file.name, tsg.file.ext)); - % Write a TXT file - % ---------------- - fileName = strcat(tsg.file.name, '_w.txt'); - error = writeTsgDataTxt(hMainFig, strcat(pathName, fileName)); - - % Check for TxT writing error - must to be rewriting - % -------------------------------------------------- - if error == -1 - warning('tsgqc:SaveMenuCallback', ... - 'TxT writing error: %s %s', pathName, fileName); - return; - end - % enable Quality Control mode % --------------------------- hdl_pushtool = findobj('Tag', 'QC'); diff --git a/tsgqc_GUI.m b/tsgqc_GUI.m deleted file mode 100644 index 00abece14291b23c435254ebbd8451a4a6404c3a..0000000000000000000000000000000000000000 --- a/tsgqc_GUI.m +++ /dev/null @@ -1,2933 +0,0 @@ -function tsgqc_GUI -% tsgqc_GUI -% -% TSG (Thermosalinograph) Quality Control software -% -% $Id$ -% - -%% COPYRIGHT & LICENSE -% Copyright 2007 - IRD US191, all rights reserved. -% -% This file is part of tsgqc_GUI. -% -% Datagui is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% tsgqc_GUI is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Datagui; if not, write to the Free Software -% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - -%% Initialization tasks -% ******************** - -% Clear Command Window display, giving up a "clean screen." -% --------------------------------------------------------- -clc; - -% Define global variable VERSION number -% ------------------------------------- -global VERSION - -VERSION = '0.2f'; - -% Find program directory. -% functions (icons) should be store at a lower level -% add directories to Matlab search path, works on UNIX -% and Windows host -% --------------------------------------------------- -tsgqcname = mfilename; -fulltsgqcname = mfilename('fullpath'); -DEFAULT_PATH_FILE = strrep(fulltsgqcname, tsgqcname, '') ; -p = [pathsep,... - DEFAULT_PATH_FILE,[filesep 'tsg_util' pathsep],... - DEFAULT_PATH_FILE,[filesep 'tsg_data' pathsep],... - DEFAULT_PATH_FILE,[filesep 'tsg_io' pathsep] - ]; -addpath( p, '-END' ); -rehash; - -% define 'HandleVisibility' property for all objects -% -------------------------------------------------- -handleVisibility = 'on'; - -% get screen dimensions (pixels) -% ------------------------------ -set(0,'Units','pixels'); -screenSize = get(0,'ScreenSize'); - -% define default font size based on screen resolution -% --------------------------------------------------- -if screenSize(3) <= 1024 - tsg.fontSize = 9; -end - -% Screen limits for the GUI -% ------------------------- -set(0,'Units','normalized'); -guiLimits = get(0,'ScreenSize'); -guiLimits(1) = guiLimits(1) + 0.01; -guiLimits(2) = guiLimits(2) + 0.05; -guiLimits(3) = guiLimits(3) - 0.02; -guiLimits(4) = guiLimits(4) - 0.15; - - -%% Main TSGQC GUI -% --------------- - -% Check if main TSGQC figure exist -% -------------------------------- -hMainFig = findobj('Tag', 'TAG_TSG-QC_GUI'); - -% if TSGQC figure exist and still running, don't create a new instance -% -------------------------------------------------------------------- -if ~isempty(hMainFig) - - % display error dialog box and quit - % --------------------------------- - errordlg({'An instance of TSGQC is still running !!!', ... - 'Open it from you task bar'}, 'Warning TSGQC'); - return; - -end - -% Create and then hide the GUI as it is being constructed. -% -------------------------------------------------------- -hMainFig = figure(... - 'Name', 'TSG Validation', ... - 'NumberTitle', 'off', ... - 'Resize', 'on', ... - 'Menubar','none', ... - 'Toolbar', 'none', ... - 'UserData', 'ButtonMotionOff', ... - 'WindowButtonMotionFcn', @MouseMotion, ... -%{ - CloseRequestFcn is remove at this time - use use block comments, see: - http://blogs.mathworks.com/loren/2006/08/30/commenting-code/ - -------------------------------------- - 'CloseRequestFcn', @QuitMenuCallback,... -%} -'HandleVisibility', handleVisibility,... - 'Visible','on',... - 'Tag','TAG_TSG-QC_GUI',... - 'Units', 'normalized',... - 'Position',guiLimits, ... - 'Color', get( 0, 'DefaultUIControlBackgroundColor' )); - - - -%% Initialize tsg structure with tsg_preference function -% ----------------------------------------------------- -tsg_preferences(hMainFig, tsgqcname, DEFAULT_PATH_FILE); - -% Retrieve named application data -% ------------------------------- -tsg = getappdata( hMainFig, 'tsg_data'); - -%% Menu File -% ----------------------------------------------------------------------- -hFileMenu = uimenu(... - 'Parent', hMainFig,... - 'HandleVisibility', handleVisibility,... - 'Label', 'File'); -hOpenMenu = uimenu(... - 'Parent', hFileMenu,... - 'Label','Open',... - 'Accelerator','O',... - 'HandleVisibility', handleVisibility,... - 'UserData', 'off',... - 'Callback', @OpenMenuCallback); -hSaveMenu = uimenu(... - 'Parent', hFileMenu,... - 'Label','Save',... - 'Accelerator','S',... - 'Enable', 'off',... - 'UserData', 'off',... - 'HandleVisibility', handleVisibility,... - 'Callback',@SaveMenuCallback); -hExportMenu = uimenu(... - 'Parent', hFileMenu,... - 'Label','Export',... - 'Accelerator','E',... - 'Enable', 'off',... - 'UserData', 'off',... - 'HandleVisibility', handleVisibility,... - 'Callback',@ExportMenuCallback); -hQuitMenu = uimenu(... - 'Parent',hFileMenu,... - 'Label','Quit',... - 'Separator','on',... - 'Accelerator','Q',... - 'HandleVisibility', handleVisibility,... - 'Callback',@QuitMenuCallback); - -%% Menu Edit with Undo/Redo submenu -% --------------------------------- -hEditMenu = uimenu(hMainFig,'Label','Edit'); -uimenu(hEditMenu,'Label','Undo',... - 'Accelerator','Z',... - 'Tag','UIMENU_UNDO',... - 'Enable', 'off',... - 'Callback',@UndoMenuCallback); -uimenu(hEditMenu,'Label','Redo',... - 'Accelerator','R',... - 'Tag','UIMENU_REDO',... - 'Enable', 'off',... - 'Callback',@RedoMenuCallback); - -%% Menu Climatology with Annual/Seasonal/Monthly submenu -% -------------------------------------------------------- - -% define structure s stored in userdata -% ------------------------------------- -s = struct('type', 'annual', 'time', 1); - -hClimatoMenu = uimenu(hMainFig,'Label','Climatology', ... - 'Tag', 'TAG_UIMENU_CLIMATO_MAIN', ... - 'UserData', s); - -% by defautl at startup, select climatology to annual -% --------------------------------------------------- -uimenu(hClimatoMenu,'Label','Annual',... - 'Checked','on',... - 'Tag','TAG_UIMENU_CLIMATO_ANNUAL',... - 'Enable', 'on',... - 'Callback', {@ClimatoSelectMenuCallback, 'annual', 1}); - -% declare top-level seasonal menu -% ------------------------------- -hClimatoSeasonalMenu = uimenu(hClimatoMenu,'Label','Seasonal'); - -% declare label for seasonal submenu -% ---------------------------------- -label = {'jan-feb-mar','apr-may-jun','jul-aug-sept','oct-nov-dec'}; - -% loop over the four submenu -% -------------------------- -for i=1:4 -uimenu(hClimatoSeasonalMenu,'Label',label{i},... - 'Checked','off',... - 'Tag',['TAG_UIMENU_CLIMATO_SEASONAL_' i],... - 'Enable', 'on',... - 'Callback',{@ClimatoSelectMenuCallback, 'seasonal', i}); -end - -% declare top-level monthly menu -% ------------------------------- -hClimatoMonthlyMenu = uimenu(hClimatoMenu,'Label','Monthly'); - -% declare label for monthly submenu -% ---------------------------------- -label = {'january','february','march','april','may','june','july','august',... - 'september','october','november','december'}; - -% loop over the four submenu -% -------------------------- -for i=1:12 -uimenu(hClimatoMonthlyMenu,'Label',label{i},... - 'Checked','off',... - 'Tag',['TAG_UIMENU_CLIMATO_MONTHLY_' i],... - 'Enable', 'on',... - 'Callback',{@ClimatoSelectMenuCallback, 'monthly', i}); -end - - -%% Menu Option with Preferences submenu -% -------------------------------------------------------- -hOptionMenu = uimenu(hMainFig,'Label','Option'); -uimenu(hOptionMenu,'Label','Preferences',... - 'Checked', tsg.preference.autoload,... - 'Tag','TAG_UIMENU_OPTION_PREFERENCES',... - 'Enable', 'on',... - 'Callback', {@PreferencesMenuCallback}); - -%% Toolbar pushbuttons -% ----------------------------------------------------------------------- -hToolbar = uitoolbar(... % Toolbar for Open and Print buttons - 'Parent',hMainFig, ... - 'HandleVisibility','on'); -hOpenPushtool = uipushtool(... % Opendoc toolbar button - 'Parent',hToolbar,... - 'TooltipString','Open file',... - 'CData', iconRead(fullfile(matlabroot, ... - '/toolbox/matlab/icons/opendoc.mat')),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_OPEN',... - 'UserData', 'off',... - 'Enable', 'on',... - 'ClickedCallback', @OpenMenuCallback); -hSavePushtool = uipushtool(... % Open Save toolbar button - 'Parent',hToolbar,... - 'TooltipString','Save NetCDF file',... - 'CData',iconRead( ... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'savedoc.mat']),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_SAVE',... - 'Enable', 'off',... - 'ClickedCallback', @SaveMenuCallback); -hPrintFigPushtool = uipushtool(... % Open Save toolbar button - 'Parent',hToolbar,... - 'TooltipString','Print figures',... - 'CData',iconRead( ... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'printdoc.mat']),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_PRINTFIG',... - 'Enable', 'off',... - 'ClickedCallback', @PrintFigMenuCallback); -hZoomToggletool = uitoggletool(... % Open Zoom toolbar button - 'Parent',hToolbar,... - 'Separator', 'on', ... - 'TooltipString','Zoom',... - 'CData', iconRead(fullfile(matlabroot, ... - '/toolbox/matlab/icons/zoom.mat')),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_ZOOM',... - 'Enable', 'off',... - 'OffCallback', @Zoom_OffMenuCallback,... - 'ONCallback', @Zoom_OnMenuCallback); -hPanToggletool = uitoggletool(... % Open Pan toolbar button - 'Parent',hToolbar,... - 'TooltipString','Pan',... - 'CData',iconRead(fullfile(matlabroot, ... - '/toolbox/matlab/icons/pan.mat')),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_PAN',... - 'Enable', 'off',... - 'OffCallback', @Pan_OffMenuCallback,... - 'OnCallback', @Pan_OnMenuCallback); -hQCToggletool = uitoggletool(... % Open QC toolbar button - 'Parent',hToolbar,... - 'TooltipString','Validation codes',... - 'Separator', 'on', ... - 'CData',iconRead(... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'qcicon.mat']),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_QC',... - 'UserData', 'off',... - 'Enable', 'off',... - 'OffCallback', @QC_OffMenuCallback,... - 'OnCallback', @QC_OnMenuCallback); -hTimelimitToggletool = uitoggletool(... - 'Parent',hToolbar,... - 'TooltipString','Select time limit',... - 'CData',iconRead(... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'selecttime.mat']),... - 'HandleVisibility','on', ... - 'Tag', 'CORRECT_STARTTIME', ... - 'UserData', 'off',... - 'Enable', 'off',... - 'OffCallback', @SelectTime_OffMenuCallback,... - 'OnCallback', @SelectTime_OnMenuCallback); -hMapToggletool = uitoggletool(... % Open Map toolbar button - 'Parent',hToolbar,... - 'TooltipString','Map and ship track',... - 'Separator', 'on', ... - 'CData',iconRead(... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'mapicon.mat']),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_MAP',... - 'UserData', 'off', ... - 'Enable', 'off',... - 'OffCallback', @Map_OffMenuCallback,... - 'OnCallback', @Map_OnMenuCallback); -hClimToggletool = uitoggletool(... % Open Climatology toolbar button - 'Parent',hToolbar,... - 'TooltipString','Climatology',... - 'CData',iconRead(... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'climicon.mat']),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_CLIM',... - 'UserData', 'off',... - 'Enable', 'off',... - 'OffCallback', @Clim_OffMenuCallback,... - 'OnCallback', @Clim_OnMenuCallback); -hCalToggletool = uitoggletool(... % - 'Parent',hToolbar,... - 'TooltipString','Calibration sensors',... - 'Separator', 'on', ... - 'CData',iconRead(... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'outils.mat']),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_CAL',... - 'UserData', 'off',... - 'Enable', 'off',... - 'OffCallback', @Cal_OffMenuCallback,... - 'OnCallback', @Cal_OnMenuCallback); -hInterpToggletool = uitoggletool(... % - 'Parent',hToolbar,... - 'TooltipString','Interpolate missing position',... - 'CData',iconRead(... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'interp.mat']),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_INTERP',... - 'UserData', 'off',... - 'Enable', 'off',... - 'OffCallback', @Inter_OffMenuCallback,... - 'OnCallback', @Inter_OnMenuCallback); -hBottleToggletool = uitoggletool(... % Correction module toolbar button - 'Parent',hToolbar,... - 'TooltipString','Correct the SSS TSG data',... - 'CData',iconRead(... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'bottleicon.mat']),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_BOTTLE',... - 'UserData', 'off',... - 'Enable', 'off',... - 'OffCallback', @Bottle_OffMenuCallback,... - 'OnCallback', @Bottle_OnMenuCallback); - -hHeaderPushtool = uipushtool(... % Open headerForm button - 'Parent',hToolbar,... - 'TooltipString','Fill the header form',... - 'Separator', 'on', ... - 'CData',iconRead(... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'hdricon.mat']),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_HEADER',... - 'Enable', 'off',... - 'ClickedCallback', @HeaderMenuCallback); - -hReportPushtool = uipushtool(... % Open Report saving button - 'Parent',hToolbar,... - 'TooltipString','Save a report',... - 'CData',iconRead(... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'reporticon.mat']),... - 'HandleVisibility','on', ... - 'Tag','PUSHTOOL_REPORT',... - 'Enable', 'off',... - 'ClickedCallback', @ReportMenuCallback); - -%% Dynamic text area -% ----------------------------------------------------------------------- -% Dynamic text area that displays the loaded filename, date, position and -% salinity, temperature -% ------------------------------------------------------------------------ - -% Create an uipanel -% ----------------- -hInfoPanel = uipanel( ... - 'Parent', hMainFig, ... - 'Units', 'normalized', ... - 'BorderType', 'none',... - 'Visible', 'on', ... - 'Position',[.01, .96, .98, .04]); - -% Dynamic text area that displays the date -% ---------------------------------------- -uicontrol(... - 'Parent', hInfoPanel, ... - 'Units', 'normalized', ... - 'Style', 'Text', ... - 'Fontsize', tsg.fontSize, ... - 'Fontweight', 'bold', ... - 'HorizontalAlignment', 'left', ... - 'Position',[.01, .25, .04, .6], ... - 'String', 'File:'); -hInfoFileText = uicontrol(... - 'Parent', hInfoPanel, ... - 'Style', 'text', ... - 'Fontsize', tsg.fontSize, ... - 'Visible','on',... - 'Units', 'normalized',... - 'HorizontalAlignment', 'left', ... - 'String', 'No file loaded', ... - 'Position', [.05, .25, .1, .6]); - -% Text area that displays the date -% -------------------------------- -uicontrol(... - 'Parent', hInfoPanel, ... - 'Units', 'normalized', ... - 'Style', 'Text', ... - 'Fontsize', tsg.fontSize, ... - 'Fontweight', 'bold', ... - 'HorizontalAlignment', 'left', ... - 'Position',[.15, .25, .04, .6], ... - 'String', 'Date:'); -hInfoDateText = uicontrol(... - 'Parent', hInfoPanel, ... - 'Style', 'text', ... - 'Fontsize', tsg.fontSize, ... - 'Visible','on',... - 'Units', 'normalized',... - 'HorizontalAlignment', 'left', ... - 'String', 'N/A', ... - 'Position', [.20, .25, .13, .6]); - -% Text area that displays the latitude -% ------------------------------------ -uicontrol(... - 'Parent', hInfoPanel, ... - 'Units', 'normalized', ... - 'Style', 'Text', ... - 'Fontsize', tsg.fontSize, ... - 'Fontweight', 'bold', ... - 'HorizontalAlignment', 'left', ... - 'Position',[.33, .25, .06, .6], ... - 'String', 'Latitude:'); -hInfoLatText = uicontrol(... - 'Parent', hInfoPanel, ... - 'Style', 'text', ... - 'Fontsize', tsg.fontSize, ... - 'Visible','on',... - 'Units', 'normalized',... - 'HorizontalAlignment', 'left', ... - 'String', 'N/A', ... - 'Position', [.4, .25, .9, .6]); - -% Text area that displays the longitude -% ------------------------------------- -uicontrol(... - 'Parent', hInfoPanel, ... - 'Units', 'normalized', ... - 'Style', 'Text', ... - 'Fontsize', tsg.fontSize, ... - 'Fontweight', 'bold', ... - 'HorizontalAlignment', 'left', ... - 'Position',[.495, .25, .08, .6], ... - 'String', 'Longitude:'); -hInfoLongText = uicontrol(... - 'Parent', hInfoPanel, ... - 'Style', 'text', ... - 'Fontsize', tsg.fontSize, ... - 'Visible','on',... - 'Units', 'normalized',... - 'HorizontalAlignment', 'left', ... - 'String', 'N/A', ... - 'Position', [.585, .25, .09, .6]); - -% Text area that display salinity and temperature -% ----------------------------------------------- -uicontrol(... - 'Parent', hInfoPanel, ... - 'Units', 'normalized', ... - 'Style', 'Text', ... - 'Fontsize', tsg.fontSize, ... - 'Fontweight', 'bold', ... - 'HorizontalAlignment', 'left', ... - 'Position', [.68, .25, .05, .6], ... - 'String', 'SSPS:'); -hInfoSSPSText = uicontrol(... - 'Parent', hInfoPanel, ... - 'Style', 'text', ... - 'Fontsize', tsg.fontSize, ... - 'Visible','on',... - 'Units', 'normalized',... - 'HorizontalAlignment', 'left', ... - 'String', 'N/A', ... - 'Position', [.73, .25, .05, .6]); -uicontrol(... - 'Parent', hInfoPanel, ... - 'Units', 'normalized', ... - 'Style', 'Text', ... - 'Fontsize', tsg.fontSize, ... - 'Fontweight', 'bold', ... - 'HorizontalAlignment', 'left', ... - 'Position',[.785, .25, .05, .6], ... - 'String', 'SSJT:'); -hInfoSSJTText = uicontrol(... - 'Parent', hInfoPanel, ... - 'Style', 'text', ... - 'Fontsize', tsg.fontSize, ... - 'Visible','on',... - 'Units', 'normalized',... - 'HorizontalAlignment', 'left', ... - 'String', 'N/A', ... - 'Position', [.835, .25, .05, .6]); -uicontrol(... - 'Parent', hInfoPanel, ... - 'Units', 'normalized', ... - 'Style', 'Text', ... - 'Fontsize', tsg.fontSize, ... - 'Fontweight', 'bold', ... - 'HorizontalAlignment', 'left', ... - 'Position',[.89, .25, .05, .6], ... - 'String', 'SSTP:'); -hInfoSSTPText = uicontrol(... - 'Parent', hInfoPanel, ... - 'Style', 'text', ... - 'Fontsize', tsg.fontSize, ... - 'Visible','on',... - 'Units', 'normalized',... - 'HorizontalAlignment', 'left', ... - 'String', 'N/A', ... - 'Position', [.94, .25, .05, .6]); - -%% Plot axes -% ----------------------------------------------------------------------- -% The axes 1,2 and 3 will be plot in a uipanel -% axe 1 as propertie 'HandleVisibility' set to 'on' to prevent hidden -% visibility when first plot is empty -%-------------------------------------------------------------------- -hPlotsPanel = uipanel( ... - 'Parent', hMainFig, ... - 'Units', 'normalized', ... - 'BorderType', 'etchedin',... - 'Visible', 'on',... - 'Position',[0.15, 0.0, .85, .95]); -hPlotAxes(1) = axes( 'Parent', hPlotsPanel, 'Visible', 'off', ... - 'box', 'on', 'Units', 'normalized','Tag', 'TAG_AXES_1', ... - 'HandleVisibility','on', 'Position',[.05, .64, .93, .35]); -hPlotAxes(2) = axes( 'Parent', hPlotsPanel, 'Visible', 'off',... - 'box', 'on', 'Units', 'normalized', 'Tag', 'TAG_AXES_2', ... - 'HandleVisibility','on', 'Position',[.05, .33, .93, .27]); -hPlotAxes(3) = axes('Parent', hPlotsPanel, 'Visible', 'off',... - 'box', 'on', 'Units', 'normalized', 'Tag', 'TAG_AXES_3', ... - 'HandleVisibility','on', 'Position',[.05, .02, .93, .27]); - -% The map will be plot in a uipanel -hMapPanel = uipanel( ... - 'Parent', hMainFig, ... - 'Units', 'normalized', ... - 'Visible', 'off', ... - 'Position',[0.15, 0, .85, .58]); -hPlotAxes(4) = axes(... % the axes for plotting ship track map - 'Parent', hMapPanel, ... - 'Units', 'normalized', ... - 'Visible', 'off', ... - 'Tag', 'TAG_AXES_MAP', ... - 'Color', 'none', ... - 'UserData', 'off', ... - 'HandleVisibility','on', ... - 'Position',[.05, .05, .9, .9]); - -%% uipanel for Quality Control Buttons - uibutton group -% ----------------------------------------------------------------------- -hbgQc = uibuttongroup(... - 'Parent', hMainFig, ... - 'Title', 'Validation Codes', ... - 'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ... - 'tag', 'TAG_QC_DISPLAY_PANEL',... - 'HandleVisibility','on',... - 'Visible', 'off',... - 'BorderType', 'etchedin',... - 'Units', 'normalized', 'Position', [.0, .71, .15, .25]); - -% Initialize CallBack for button group properties -% ----------------------------------------------- -set(hbgQc,'SelectionChangeFcn',@RadiobuttonQc); - -%% Context Menu and RadioButtons for Quality control -% ----------------------------------------------------------------------- -hQcCmenu = uicontextmenu(... - 'Parent', hMainFig, ... - 'HandleVisibility','on' ); - -% get list of keys from hashtable tsg.qc.hash, defined inside -% tsg_initialisation.m -% ----------------------------------------------------------- -qc_list = get(tsg.qc.hash); - -% internal loop count with state to on -% ------------------------------------ -count = 0; - -% iterate (loop) on each key store inside hastable -% ------------------------------------------------ -for i=1:numel(qc_list) - - % get key and some values in hashtable - % ------------------------------------ - key = qc_list{i}; - label = get(tsg.qc.hash, key, 'label'); - color = get(tsg.qc.hash, key, 'color'); - state = get(tsg.qc.hash, key, 'state'); - - % construct context menu with only code set to 'on' (valid) - % --------------------------------------------------------- - if strcmp( state, 'on') - - % add menu to hQcCmenu uicontextmenu - % ---------------------------------- - uimenu(... - 'Parent', hQcCmenu,... - 'HandleVisibility','on', ... - 'Label', label,... - 'ForegroundColor', color,... - 'Callback', {@Qc, key}); - - % add button QC to hbgQc uibuttongroup - % ------------------------------------ - uicontrol(... - 'Parent', hbgQc,... - 'Style', 'radiobutton',... - 'Fontsize', tsg.fontSize-1, 'ForegroundColor', color,... - 'HorizontalAlignment', 'left', ... - 'HandleVisibility','on', ... - 'String', label,... - 'Tag', ['TAG_QC_RADIO_' key], ... - 'Units', 'normalized', 'Position', [.01, .85-count*.12, .6, 0.09]); - - % add text QC display statistic on hQcPanel - % ----------------------------------------- - uicontrol(... - 'Parent', hbgQc,... - 'Style', 'text',... - 'Fontsize', tsg.fontSize-1, 'ForegroundColor', color,... - 'HorizontalAlignment', 'right', ... - 'HandleVisibility','on', ... - 'String', 'N/A ',... - 'Tag', ['TAG_QC_TEXT_' key],... - 'Units', 'normalized', 'Position', [.61, .85-count*.12, .37, 0.09]); - - % increment count - % --------------- - count = count + 1; - end -end - -%% uibutton group panel - Choose the parameter (SSPS - SSTP - SSJT) -% ----------------------------------------------------------------------- -hbgParameter = uibuttongroup(... - 'Parent', hMainFig, ... - 'Title', 'TSG Parameter', ... - 'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ... - 'tag', 'TAG_PARA_DISPLAY_PANEL',... - 'HandleVisibility','on',... - 'Visible', 'off',... - 'BorderType', 'etchedin',... - 'Units', 'normalized', 'Position', [.0, .81, .15, .15]); - -para = [ 'SSPS'; 'SSJT'; 'SSTP' ]; -strPara = [ ['Salinity ' para(1,:) ' ']; ... - ['Temperature ' para(2,:)]; ... - ['Temperature ' para(3,:)] ]; -for i = 1:3 - - % add button QC to hbgParameter uibuttongroup - % ------------------------------------------- - uicontrol(... - 'Parent', hbgParameter,... - 'Style', 'radiobutton',... - 'Fontsize', tsg.fontSize-1, 'ForegroundColor', color,... - 'HorizontalAlignment', 'left', ... - 'HandleVisibility','on', ... - 'String', strPara(i, :),... - 'Tag', ['TAG_PARA_RADIO_' para(i,:)], ... - 'Units', 'normalized', 'Position', [.05, .8-(i-1)*.30, .90, 0.12]); - -end - -% Initialize CallBack for button group properties -% ----------------------------------------------- -set(hbgParameter,'SelectionChangeFcn',@RadiobuttonParameter); - - -%% uiButtonGroup set to choose the Correction method -% ------------------------------------------------------------------------- - -% Create the button group -hbgCorMethod = uibuttongroup( ... - 'Parent',hMainFig, ... - 'Title','Correction Method', ... - 'Units', 'normalized', ... - 'FontSize',tsg.fontSize-1, 'Fontweight', 'bold',... - 'Visible', 'off', ... - 'Position',[.0, .25, .15, .18]); - -% Create 2 radio buttons in the button group -hrbCorCancel = uicontrol( ... - 'Style','pushbutton', ... - 'Parent',hbgCorMethod, ... - 'Units', 'normalized', ... - 'String','Cancel the adjustment',... - 'FontSize',tsg.fontSize-1,... - 'Tag', 'CORRECT_CANCEL_PUSH', ... - 'pos',[.05 .08 .9 .25],... - 'HandleVisibility', handleVisibility, ... - 'Callback', @CorCancelCallback); -hrbCorLinear = uicontrol( ... - 'Style','pushbutton', ... - 'Parent',hbgCorMethod, ... - 'Units', 'normalized', ... - 'String','Linear adjustment',... - 'FontSize',tsg.fontSize-1,... - 'Tag', 'CORRECT_LINEAR_PUSH', ... - 'pos',[.05 .38 .9 .25], ... - 'HandleVisibility', handleVisibility, ... - 'Callback', @CorLinearCallback); -hrbCorMedian = uicontrol( ... - 'Style','pushbutton', ... - 'Parent',hbgCorMethod, ... - 'Units', 'normalized', ... - 'String','Running median filter',... - 'FontSize',tsg.fontSize-1,... - 'Tag', 'CORRECT_MEDIAN_PUSH', ... - 'pos',[.05 .68 .9 .25], ... - 'HandleVisibility', handleVisibility, ... - 'Callback', @CorMedianCallback); - -%% uiPanel for the Date limits used in the Correction module - -% Choose the date limits for the correction -% -------------------------------------------------- -% Create the uipanel -hpDateLimit = uipanel( ... - 'Parent', hMainFig, ... - 'Title', 'Date Limits', ... - 'Units', 'normalized', ... - 'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ... - 'Visible', 'off', ... - 'Position', [.0, .46, .15, .18]); - -htDateMin = uicontrol( ... - 'Parent', hpDateLimit, ... - 'Style', 'Text', ... - 'String', 'Min : yyyy-mm-dd hh:mm:ss', ... - 'HorizontalAlignment', 'left', ... - 'Units', 'normalized', ... - 'FontSize', tsg.fontSize-1, ... - 'Position',[.01 .8 .95 .15]); -hetDateMin = uicontrol( ... - 'Parent', hpDateLimit, ... - 'Style', 'edit', ... - 'Units', 'normalized', ... - 'BackgroundColor', 'white',... - 'FontSize', tsg.fontSize, ... - 'Tag', 'CORRECT_DATEMIN_EDIT',... - 'Position',[.01 .6 .95 .17]); - -htDateMax = uicontrol( ... - 'Parent', hpDateLimit, ... - 'Style', 'Text', ... - 'String', 'Max : yyyy-mm-dd hh:mm:ss', ... - 'HorizontalAlignment', 'left', ... - 'Units', 'normalized', ... - 'FontSize', tsg.fontSize-1, ... - 'Position',[.01 .35 .95 .15]); -hetDateMax = uicontrol( ... - 'Parent', hpDateLimit, ... - 'Style', 'edit', ... - 'Units', 'normalized', ... - 'BackgroundColor', 'white',... - 'FontSize', tsg.fontSize, ... - 'Tag', 'CORRECT_DATEMAX_EDIT',... - 'Position',[.01 .15 .95 .17]); - -%% uiPanel for the Calibration coefficient used the Correction module - -% Create the uipanel -hpCalCoef = uipanel( ... - 'Parent', hMainFig, ... - 'Title', 'Calibration', ... - 'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ... - 'Visible', 'off', ... - 'Units', 'normalized','Position', [.0, .46, .15, .50]); - - htCalCNDC1 = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'Text', 'String', 'Conductivity : C = A*C + B', ... - 'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ... - 'Units', 'normalized', 'Position',[.01 .925 .95 .05]); - htCalCNDC2 = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'Text', 'String', 'A', ... - 'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ... - 'Units', 'normalized', 'Position',[.01 .85 .08 .05]); - hetCalCNDCSlope = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'edit', ... - 'FontSize', tsg.fontSize, 'BackgroundColor', 'white',... - 'Tag', 'CORRECT_CAL_CNDC_A',... - 'HandleVisibility','on', ... - 'Units', 'normalized', 'Position',[.1 .85 .85 .05]); - htCalCNDC3 = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'Text', 'String', 'B', ... - 'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ... - 'Units', 'normalized', 'Position',[.01 .775 .08 .05]); - hetCalCNDCOffset = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'edit', ... - 'FontSize', tsg.fontSize, 'BackgroundColor', 'white',... - 'HandleVisibility','on', ... - 'Tag', 'CORRECT_CAL_CNDC_B',... - 'Units', 'normalized', 'Position',[.1 .775 .85 .05]); - - htCalSSJT1 = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'Text', 'String', 'SSJT : T = A*T + B', ... - 'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ... - 'Units', 'normalized', 'Position',[.01 .675 .95 .05]); - htCalSSJT2 = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'Text', 'String', 'A', ... - 'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ... - 'Units', 'normalized', 'Position',[.01 .6 .08 .05]); - hetCalSSJTSlope = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'edit', ... - 'BackgroundColor', 'white',... - 'FontSize', tsg.fontSize, ... - 'HandleVisibility','on', ... - 'Tag', 'CORRECT_CAL_SSJT_A',... - 'Units', 'normalized', 'Position',[.1 .6 .85 .05]); - htCalSSJT3 = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'Text', 'String', 'B', ... - 'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ... - 'Units', 'normalized', 'Position',[.01 .525 .08 .05]); - hetCalSSJTOffset = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'edit', ... - 'FontSize', tsg.fontSize, 'BackgroundColor', 'white',... - 'HandleVisibility','on', ... - 'Tag', 'CORRECT_CAL_SSJT_B',... - 'Units', 'normalized', 'Position',[.1 .525 .85 .05]); - - htCalSSTP1 = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'Text', 'String', 'SSPT : T = A*T + B', ... - 'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ... - 'Units', 'normalized', 'Position',[.01 .425 .95 .05]); - htCalSSTP2 = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'Text', 'String', 'A', ... - 'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ... - 'Units', 'normalized', 'Position',[.01 .35 .08 .05]); - hetCalSSTPSlope = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'edit', ... - 'BackgroundColor', 'white',... - 'FontSize', tsg.fontSize, ... - 'HandleVisibility','on', ... - 'Tag', 'CORRECT_CAL_SSJT_A',... - 'Units', 'normalized', 'Position',[.1 .35 .85 .05]); - htCalSSTP3 = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'Text', 'String', 'B', ... - 'HorizontalAlignment', 'left', 'FontSize', tsg.fontSize-1, ... - 'Units', 'normalized', 'Position',[.01 .275 .08 .05]); - hetCalSSTPOffset = uicontrol( ... - 'Parent', hpCalCoef, ... - 'Style', 'edit', ... - 'FontSize', tsg.fontSize, 'BackgroundColor', 'white',... - 'HandleVisibility','on', ... - 'Tag', 'CORRECT_CAL_SSJT_B',... - 'Units', 'normalized', 'Position',[.1 .275 .85 .05]); - - hrbCal = uicontrol( ... - 'Style','pushbutton', 'Parent',hpCalCoef, ... - 'String','Calibrate',... - 'FontSize',tsg.fontSize-1,... - 'Tag', 'CORRECT_CAL_PUSH', ... - 'Units', 'normalized','pos',[.05 .15 .9 .075], ... - 'HandleVisibility', handleVisibility, ... - 'Callback', @CalibrateCallback); - hrbCancelCal = uicontrol( ... - 'Style','pushbutton', 'Parent',hpCalCoef, ... - 'String','Cancel calibration',... - 'FontSize',tsg.fontSize-1,... - 'Tag', 'CORRECT_CAL_PUSH', ... - 'Units', 'normalized','pos',[.05 .05 .9 .075], ... - 'HandleVisibility', handleVisibility, ... - 'Callback', @CancelCalibrationCallback); - - -%% uiPanel for Interpolation of position - -% Create the uipanel -hpInterpPos = uipanel( ... - 'Parent', hMainFig, ... - 'Title', 'Lat-Lon interpolation', ... - 'FontSize', tsg.fontSize-1, 'Fontweight', 'bold', ... - 'Visible', 'off', ... - 'Units', 'normalized','Position', [.0, .75, .15, .21]); -hrbInterpLinear = uicontrol( ... - 'Style','pushbutton', 'Parent',hpInterpPos, ... - 'String','Linear interpolation',... - 'FontSize',tsg.fontSize-1,... - 'Tag', 'TAG_PUSH_INTERP_LINEAR', ... - 'Units', 'normalized','pos',[.05 .65 .9 .25], ... - 'HandleVisibility', handleVisibility, ... - 'Callback', @InterpPosLinearCallback); -hrbInterpOther = uicontrol( ... - 'Style','pushbutton', 'Parent',hpInterpPos, ... - 'String','Other method',... - 'FontSize',tsg.fontSize-1,... - 'Tag', 'TAG_PUSH_INTERP_OTHER', ... - 'Units', 'normalized','pos',[.05 .35 .9 .25], ... - 'HandleVisibility', handleVisibility, ... - 'Callback', @InterpPosOtherCallback); -hrbInterpCancel = uicontrol( ... - 'Style','pushbutton', 'Parent',hpInterpPos, ... - 'String','Cancel interpolation',... - 'FontSize',tsg.fontSize-1,... - 'Tag', 'TAG_PUSH_INTERP_CANCEL', ... - 'Units', 'normalized','pos',[.05 .05 .9 .25], ... - 'HandleVisibility', handleVisibility, ... - 'Callback', @InterpPosCancelCallback); - - -%% test if user preference autoload field is checked (on) -% ------------------------------------------------------- -if strcmp(tsg.preference.autoload, 'on') - - % A TSG file has been open and read - % --------------------------------- - set( hOpenMenu, 'UserData', 'on' ); - - % Show handles marked as hidden with HandleVisibility property set to - % callback or off - % ------------------------------------------------------------------- - set(0, 'ShowHiddenHandles', 'on'); - - % enable toolbar menu pushtool - % ---------------------------- - hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_'); - set(hdl_pushtool, 'Enable', 'on'); - - % enable Save menu - % ---------------- - set(hSaveMenu, 'Enable', 'on'); - - % update the filename display - % --------------------------- - set( hInfoFileText, 'String', strcat(tsg.file.name, tsg.file.ext)); - - % update some fields in tsg structure - % ----------------------------------- - updateTsgStruct( hMainFig ); - - % Get application data for the test - % --------------------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % Get the default parameter - % ------------------------- - PARA = tsg.preference.parameter; - - % The smooth TSG time series (tsg_moveaverage) is - % no more computed : too long - % We now computed a smooth value only at the position of the sample - % in diffTsgSample - % ----------------------------------------------------------------- - %tsg_moveaverage( hMainFig, PARA ); - - % Merge sample from different origins : WS and EXT - % ------------------------------------------------ - tsg_mergesample( hMainFig, PARA ); - - % Draw the 3 plots of the validation figure - % The plots need to be re-initialize because of a bug with - % the zoom function. When you open a new TSG file and you - % have used the zoom funtion with the preceding file. - % The zoom function keep the X and Y limits of the preceding file - % --------------------------------------------------------------- - delete( hPlotAxes(1) ); - delete( hPlotAxes(2) ); - delete( hPlotAxes(3) ); - - hPlotAxes(1) = axes( 'Parent', hPlotsPanel, 'Visible', 'off', ... - 'box', 'on', 'Units', 'normalized','Tag', 'TAG_AXES_1', ... - 'HandleVisibility','on', 'Position',[.05, .64, .93, .35]); - hPlotAxes(2) = axes( 'Parent', hPlotsPanel, 'Visible', 'off',... - 'box', 'on', 'Units', 'normalized', 'Tag', 'TAG_AXES_2', ... - 'HandleVisibility','on', 'Position',[.05, .33, .93, .27]); - hPlotAxes(3) = axes('Parent', hPlotsPanel, 'Visible', 'off',... - 'box', 'on', 'Units', 'normalized', 'Tag', 'TAG_AXES_3', ... - 'HandleVisibility','on', 'Position',[.05, .02, .93, .27]); - - resetAxes( hMainFig, hPlotAxes ); - - plot_Validation( hMainFig, hPlotAxes, 1, PARA ); - plot_Validation( hMainFig, hPlotAxes, 2, 'SSJT' ); - plot_Validation( hMainFig, hPlotAxes, 3, 'SPDC' ); - - % Draw the map with the ship track - % -------------------------------- - plot_map( hMainFig, hPlotAxes); - - % The callback to detect the mouse motion can be set to on - % -------------------------------------------------------- - set( hMainFig, 'UserData', 'ButtonMotionOn'); - - % Hide handles marked as hidden with HandleVisibility property set to - % callback or off - % ------------------------------------------------------------------- - set(0, 'ShowHiddenHandles', 'off'); - -end - - -%% *************************** CALLBACKS ********************************** - -%% OpenMenuCallback - %---------------------------------------------------------------------- - % Callback function run when the Open menu item is selected - %---------------------------------------------------------------------- - function OpenMenuCallback(hObject, eventdata) - - % Activate or desactivate uipanels - % -------------------------------- - set( hpCalCoef, 'Visible', 'off' ); - set( hpDateLimit, 'Visible', 'off' ); - set( hpInterpPos, 'Visible', 'off' ); -% set( hbgParameter, 'Visible', 'off'); - - % Toggle button - % ------------- - set( hBottleToggletool, 'state', 'off' ); - set( hCalToggletool, 'state', 'off' ); - set( hClimToggletool, 'state', 'off' ); - set( hInterpToggletool, 'state', 'off' ); - set( hPanToggletool, 'state', 'off' ); - set( hQCToggletool, 'state', 'off' ); - set( hTimelimitToggletool, 'state', 'off' ); - set( hZoomToggletool, 'state', 'off' ); - - set( hHeaderPushtool, 'enable', 'off' ); - - % Open standard dialog box for retrieving files - % --------------------------------------------- - [fileName, pathname, filterIndex] = uigetfile( ... - {'*.tsg';'*.xml';'*.nc';'*.lbv';'*.btl'; '*.arg'}, 'Pick a file'); - - % flushes the event queue and updates the closed uigetfile window - % --------------------------------------------------------------- - drawnow; - - % if the user clicks the Cancel button or closes the dialog window, - % FileName and PathName are set to 0. - % ----------------------------------------------------------------- - if ~isequal(fileName, 0) - - % Pointer set to watch during reading and plotting - % ------------------------------------------------ - set( hMainFig, 'Pointer', 'watch' ); - - % construct valid and full file path - % ----------------------------------- - fullFileName = strcat(pathname, fileName); - - % Read the data - % ------------- - errTsg = -2; - errSpl = -2; - switch filterIndex - - case 1 % read TSG text file *.txt - tsg_initialisation(hMainFig); -errTsg = readTsgDataTsg( hMainFig, fullFileName); - %errTsg = readTsgDataTxt( hMainFig, fullFileName ); - - case 2 % read TSG XML file *.xml - tsg_initialisation(hMainFig); - errTsg = readTsgDataXML( hMainFig, fullFileName ); - - case 3 % read TSG netcdf file *.nc - tsg_initialisation(hMainFig); - errTsg = readTsgDataNetCDF( hMainFig, fullFileName ); - - case 4 % read TSG labview file *.lbv - tsg_initialisation(hMainFig); - errTsg = readTsgDataLabview( hMainFig, fullFileName ); - - case 5 % Read bucket file *.btl - if ~isempty( tsg.SSPS ) - errSpl = readBucketData( hMainFig, fullFileName ); - else - msgbox( 'Load a TSG file before a Water sample file', 'Read Bucket'); - end - - case 6 % Read Argo file *.arg (G. Reverdin format) - if ~isempty( tsg.SSPS ) - errSpl = readCoriolisData( hMainFig, fullFileName ); - else - msgbox( 'Load a TSG file before a Water sample file', 'Read Bucket'); - end - - otherwise - - % Reset pointer to arrow - % ---------------------- - set( hMainFig, 'Pointer', 'arrow' ); - - % diplay warning msgbox - % --------------------- - msgbox( {['Invalid TSG file: ' fileName],... - 'Please select another file'},... - 'Warning open file', 'warn', 'modal' ); - - return; - - end % switch filterIndex - - % Get the tsg structure - % --------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % Default parameter - % ----------------- - PARA = tsg.preference.parameter; - - % A TSG file has been read - % ------------------------ - if errTsg > 0 - - % set WindowButtonMotionFcn on - % ---------------------------- - set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion); - - % A TSG file has been open and read - % --------------------------------- - set( hOpenMenu, 'UserData', 'on' ); - - % enable toolbar menu pushtool - % ---------------------------- - hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_'); - set(hdl_pushtool, 'Enable', 'on'); - - set( hbgParameter, 'Visible', 'on'); - - % Enable Save and Export menu - % --------------------------- - set(hSaveMenu, 'Enable', 'on'); - set(hExportMenu, 'Enable', 'on'); - - % update some fields in tsg structure and restore tsg - % --------------------------------------------------- - updateTsgStruct(hMainFig ); - - % update the filename display - % --------------------------- - set( hInfoFileText, 'String', strcat(tsg.file.name, tsg.file.ext)); - - % The smooth TSG time series (tsg_moveaverage) is - % no more computed : too long - % We now computed a smooth value only at the position of the sample - % in diffTsgSample - % ----------------------------------------------------------------- - %tsg_moveaverage(hMainFig, PARA); - - % The callback to detect the mouse motion can be set to on - % -------------------------------------------------------- - set( hMainFig, 'UserData', 'ButtonMotionOn'); - - % Update QC statistics - % -------------------- - display_QC( hMainFig, hPlotAxes); - - elseif errTsg > -2 - - % Problem to read the file or - % Choice of parameters for Labview file canceled by the user - % TSG structure has been reinitialize - % Disable toolbar menu pushtool except the open file button - % ---------------------------------------------------------- - hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_'); - set(hdl_pushtool, 'Enable', 'off'); - - set( hOpenPushtool, 'Enable', 'on' ); - - end %if errTsg > 0 - - % Merge sample from different origins : WS and EXT - % ------------------------------------------------ - tsg_mergesample( hMainFig, PARA ); - - % Draw the 3 plots of the validation figure - % The plots need to be re-initialize because of a bug with - % the zoom function. When you open a new TSG file and you - % have used the zoom funtion with the preceding file. - % The zoom function keep the X and Y limits of the preceding file - % --------------------------------------------------------------- - delete( hPlotAxes(1) ); - delete( hPlotAxes(2) ); - delete( hPlotAxes(3) ); - - hPlotAxes(1) = axes( 'Parent', hPlotsPanel, 'Visible', 'off', ... - 'box', 'on', 'Units', 'normalized','Tag', 'TAG_AXES_1', ... - 'HandleVisibility','on', 'Position',[.05, .64, .93, .35]); - hPlotAxes(2) = axes( 'Parent', hPlotsPanel, 'Visible', 'off',... - 'box', 'on', 'Units', 'normalized', 'Tag', 'TAG_AXES_2', ... - 'HandleVisibility','on', 'Position',[.05, .33, .93, .27]); - hPlotAxes(3) = axes('Parent', hPlotsPanel, 'Visible', 'off',... - 'box', 'on', 'Units', 'normalized', 'Tag', 'TAG_AXES_3', ... - 'HandleVisibility','on', 'Position',[.05, .02, .93, .27]); - - resetAxes( hMainFig, hPlotAxes ) - - plot_Validation( hMainFig, hPlotAxes, 1, PARA ); - plot_Validation( hMainFig, hPlotAxes, 2, 'SSJT' ); - plot_Validation( hMainFig, hPlotAxes, 3, 'SPDC' ); - - % Pointer reset to arrow - % ---------------------- - set( hMainFig, 'Pointer', 'arrow' ); - - end % if ~isequal(fileName, 0) - - end - -%% Inter_OnMenuCallback ................................... Interpolation - %---------------------------------------------------------------------- - % Callback function run when - % - function Inter_OnMenuCallback( hObject, eventdata) - - % Activate or desactivate uipanels - % -------------------------------- - set( hpDateLimit, 'Visible', 'on' ); - set( hpInterpPos, 'Visible', 'on' ); - set( hpCalCoef, 'Visible', 'off'); - set( hbgQc, 'Visible', 'off'); - set( hbgParameter, 'Visible', 'off'); - - % Toggle button - % ------------- - set( hBottleToggletool, 'state', 'off', 'enable', 'off'); - set( hCalToggletool, 'state', 'off', 'enable', 'off'); - set( hClimToggletool, 'state', 'off', 'enable', 'off'); - set( hPanToggletool, 'state', 'off', 'enable', 'on' ); - set( hQCToggletool, 'enable', 'off'); - set( hTimelimitToggletool, 'state', 'off', 'enable', 'on' ); - set( hZoomToggletool, 'state', 'off', 'enable', 'on' ); - - set( hHeaderPushtool, 'enable', 'off' ); - - % Get application data TSG - % ------------------------ - tsg = getappdata( hMainFig, 'tsg_data'); - - % Get the information on time limits of the time series - % Write them in the uipanel - % ----------------------------------------------------- - noNaN = tsg.DAYD(~isnan( tsg.DAYD )); - set( hetDateMin, 'String', datestr(noNaN(1), 31)); - set( hetDateMax, 'String', datestr(noNaN(end), 31)); - - % Draw the 3 plots of the interpolation figure - % -------------------------------------------- - plot_Interpolation( hMainFig, hPlotAxes, 1 ); - plot_Interpolation( hMainFig, hPlotAxes, 2 ); - plot_Interpolation( hMainFig, hPlotAxes, 3 ); - - end - -%% Inter_OffMenuCallback .................................. Interpolation - %---------------------------------------------------------------------- - % Callback function run when - % - function Inter_OffMenuCallback( hObject, eventdata) - - % Activate or desactivate uipanels - % -------------------------------- - set( hpCalCoef, 'Visible', 'off' ); - set( hpDateLimit, 'Visible', 'off' ); - set( hpInterpPos, 'Visible', 'off' ); - set( hbgParameter, 'Visible', 'on' ); - - % Enable Pushbuttons - % ------------------ - set( hBottleToggletool, 'state', 'off', 'enable', 'on' ); - set( hCalToggletool, 'state', 'off', 'enable', 'on' ); - set( hClimToggletool, 'state', 'off', 'enable', 'on' ); - set( hPanToggletool, 'state', 'off', 'enable', 'on' ); - set( hQCToggletool, 'state', 'off', 'enable', 'on' ); - set( hTimelimitToggletool, 'state', 'off', 'enable', 'off' ); - set( hZoomToggletool, 'state', 'off', 'enable', 'on' ); - - set( hHeaderPushtool, 'enable', 'on' ); - - % Get tsg structure - % ----------------- - tsg = getappdata( hMainFig, 'tsg_data' ); - - % Draw the 3 plots of the validation figure - % ----------------------------------------- - plot_Validation( hMainFig, hPlotAxes, 1, tsg.preference.parameter ); - plot_Validation( hMainFig, hPlotAxes, 2, 'SSJT' ); - plot_Validation( hMainFig, hPlotAxes, 3, 'SPDC' ); - - % Set the pointer - % --------------- - set( hMainFig, 'Pointer', 'arrow'); - - end - -%% InterpLinearCallback ...............................Interpolation Linear - %------------------------------------------------------------------------ - % Callback function run when - %---------------------------------------------------------------------- - function InterpPosLinearCallback( hObject, eventdata) - - % Get the time limits for the correction A TESTER - % -------------------------------------- - dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS'); - dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS'); - - error = interpPosLinear( hMainFig, dateMin, dateMax ); - - switch error - - case 1 - - % Plot in the 3 axes - % ------------------ - plot_Interpolation( hMainFig, hPlotAxes, 2 ); - plot_Interpolation( hMainFig, hPlotAxes, 3 ); - - case -1 - msgbox( 'Date limits are not correct',... - 'Correction module', 'warn', 'modal'); - end - - - end - -%% InterpOtherCallback ...............................Interpolation OTher - %---------------------------------------------------------------------- - % Callback function run when - %---------------------------------------------------------------------- - function InterpPosOtherCallback( hObject, eventdata) - - msgbox( 'Method not yet implemented', ... - 'Function InterpOtherCallback', ... - 'warn',... - 'modal' ); - end - -%% InterpPosCancelCallback ..........................Cancel Interpolation - %---------------------------------------------------------------------- - function InterpPosCancelCallback(hObject, eventdata) - % Callback function run when - - % Get tsg application data - % ------------------------ - tsg = getappdata( hMainFig, 'tsg_data' ); - - % Get NO_CONTROL and INTERPOLATED_VALUE codes - % ------------------------------------------- - NO_CONTROL = get(tsg.qc.hash, 'NO_CONTROL', 'code'); - INTERPOLATED_VALUE = get(tsg.qc.hash, 'INTERPOLATED_VALUE', 'code'); - - if ~isempty( tsg.POSITION_QC ) - iINTERP = find( tsg.POSITION_QC == INTERPOLATED_VALUE); - tsg.LATX( iINTERP ) = NaN * ones( size( iINTERP), 1 ); - tsg.LONX( iINTERP ) = NaN * ones( size( iINTERP), 1 ); - tsg.POSITION_QC = []; - end - - % Save tsg application data - % -------------------------- - setappdata( hMainFig, 'tsg_data', tsg ); - - % Refresh plots - % ------------- - plot_Interpolation( hMainFig, hPlotAxes, 1 ); - plot_Interpolation( hMainFig, hPlotAxes, 2 ); - plot_Interpolation( hMainFig, hPlotAxes, 3 ); - - end - - -%% Cal_OnMenuCallback ..................................... Calibration - %---------------------------------------------------------------------- - % Callback function run when - %---------------------------------------------------------------------- - function Cal_OnMenuCallback( hObject, eventdata) - - % Activate or desactivate uipanels - % -------------------------------- - set( hpCalCoef, 'Visible', 'on' ); - set( hbgParameter, 'Visible', 'off'); - set( hbgQc, 'Visible', 'off'); - - % Pushbutton - % ---------- - set( hQCToggletool, 'enable', 'off' ); - set( hClimToggletool, 'enable', 'off', 'state', 'off' ); - set( hBottleToggletool, 'enable', 'off' ); - set( hInterpToggletool, 'enable', 'off' ); - set( hHeaderPushtool, 'enable', 'off' ); - - set( hPanToggletool, 'state', 'off', 'enable', 'on' ); - set( hTimelimitToggletool, 'state', 'off', 'enable', 'off' ); - set( hZoomToggletool, 'state', 'off', 'enable', 'on' ); - - % Get tsg application data - % ------------------------ - tsg = getappdata( hMainFig, 'tsg_data' ); - - % Draw the 3 plots of the validation figure - % ----------------------------------------- - plot_Calibration( hMainFig, hPlotAxes, 1, 'SSPS' ); - plot_Calibration( hMainFig, hPlotAxes, 2, 'SSJT' ); - plot_Calibration( hMainFig, hPlotAxes, 3, 'SSTP' ); - - % Write the Cal Coef in the Editable uicontrol - % -------------------------------------------- - set( hetCalCNDCSlope, 'String', num2str(tsg.CNDC_LINCOEF(1))); - set( hetCalCNDCOffset, 'String', num2str(tsg.CNDC_LINCOEF(2))); - set( hetCalSSJTSlope, 'String', num2str(tsg.SSJT_LINCOEF(1))); - set( hetCalSSJTOffset, 'String', num2str(tsg.SSJT_LINCOEF(2))); - set( hetCalSSTPSlope, 'String', num2str(tsg.SSTP_LINCOEF(1))); - set( hetCalSSTPOffset, 'String', num2str(tsg.SSTP_LINCOEF(2))); - - end - - -%% Cal_OffMenuCallback ..................................... Calibration - %---------------------------------------------------------------------- - % Callback function run when - %---------------------------------------------------------------------- - function Cal_OffMenuCallback( hObject, eventdata) - - % Activate or desactivate uipanels - % -------------------------------- - set( hpCalCoef, 'Visible', 'off' ); - set( hbgParameter, 'Visible', 'on'); - - % Enable Pushbuttons - % ------------------ - set( hClimToggletool, 'enable', 'on' ); - set( hBottleToggletool, 'enable', 'on' ); - set( hInterpToggletool, 'enable', 'on' ); - set( hHeaderPushtool, 'enable', 'on' ); - set( hQCToggletool, 'state', 'off', 'enable', 'on' ); - set( hPanToggletool, 'state', 'off', 'enable', 'on' ); - set( hTimelimitToggletool, 'state', 'off', 'enable', 'on' ); - set( hZoomToggletool, 'state', 'off', 'enable', 'on' ); - - % Get tsg application data - % ------------------------ - tsg = getappdata( hMainFig, 'tsg_data' ); - - % Save the calibration coefficient - % -------------------------------- - tsg.CNDC_LINCOEF(1) = str2num(get( hetCalCNDCSlope, 'String')); - tsg.CNDC_LINCOEF(2) = str2num(get( hetCalCNDCOffset, 'String')); - tsg.SSJT_LINCOEF(1) = str2num(get( hetCalSSJTSlope, 'String')); - tsg.SSJT_LINCOEF(2) = str2num(get( hetCalSSJTOffset, 'String')); - tsg.SSTP_LINCOEF(1) = str2num(get( hetCalSSTPSlope, 'String')); - tsg.SSTP_LINCOEF(2) = str2num(get( hetCalSSTPOffset, 'String')); - - % Save tsg application data - % -------------------------- - setappdata( hMainFig, 'tsg_data', tsg ); - - % Draw the 3 plots of the validation figure - % ----------------------------------------- - plot_Validation( hMainFig, hPlotAxes, 1, tsg.preference.parameter ); - plot_Validation( hMainFig, hPlotAxes, 2, 'SSJT' ); - plot_Validation( hMainFig, hPlotAxes, 3, 'SPDC' ); - - end - -%% CalibrateCallback .......................................... Calibration - function CalibrateCallback(hObject, eventdata) - % Callback function run when - - % Get tsg application data - % ------------------------ - tsg = getappdata( hMainFig, 'tsg_data' ); - - % Get the calibration coefficients. - % They will be used in the function calibration - % --------------------------------------------- - tsg.CNDC_LINCOEF(1) = str2num(get( hetCalCNDCSlope, 'String')); - tsg.CNDC_LINCOEF(2) = str2num(get( hetCalCNDCOffset, 'String')); - tsg.SSJT_LINCOEF(1) = str2num(get( hetCalSSJTSlope, 'String')); - tsg.SSJT_LINCOEF(2) = str2num(get( hetCalSSJTOffset, 'String')); - tsg.SSTP_LINCOEF(1) = str2num(get( hetCalSSTPSlope, 'String')); - tsg.SSTP_LINCOEF(2) = str2num(get( hetCalSSTPOffset, 'String')); - - % Save tsg application data - % -------------------------- - setappdata( hMainFig, 'tsg_data', tsg ); - - % Calibrate the sensors - % --------------------- - calibration( hMainFig ); - - % Update the Adjusted variables (SSPS - SSJT) with calibrated records - % ------------------------------------------------------------------- - updateAdjustedVariable( hMainFig ); - - % Refresh plot #1 - % --------------- - plot_Calibration( hMainFig, hPlotAxes, 1, 'SSPS' ); - plot_Calibration( hMainFig, hPlotAxes, 2, 'SSJT' ); - plot_Calibration( hMainFig, hPlotAxes, 3, 'SSTP' ); - - % As soon as a modification took place the data should be saved - % ------------------------------------------------------------- - set( hSaveMenu, 'UserData', 'on' ); - - end - -%% CancelCalibrationCallback .................................. Calibration - function CancelCalibrationCallback(hObject, eventdata) - % Callback function run when - - % Get tsg application data - % ------------------------ - tsg = getappdata( hMainFig, 'tsg_data' ); - - % Emptied the CAL variables - % ------------------------- - tsg.CNDC_CAL = []; - tsg.SSPS_CAL = []; - tsg.SSJT_CAL = []; - tsg.SSTP_CAL = []; - - % Save tsg application data - % -------------------------- - setappdata( hMainFig, 'tsg_data', tsg ); - - % Update the Adjusted variables - % ----------------------------- - updateAdjustedVariable( hMainFig ); - - % Refresh plot #1 - % --------------- - plot_Calibration( hMainFig, hPlotAxes, 1, 'SSPS' ); - plot_Calibration( hMainFig, hPlotAxes, 2, 'SSJT' ); - plot_Calibration( hMainFig, hPlotAxes, 3, 'SSTP' ); - - % As soon as a modification took place the data should be saved - % ------------------------------------------------------------- - set( hSaveMenu, 'UserData', 'on' ); - - end - -%% Zoom_OffMenuCallback - %---------------------------------------------------------------------- - % Callback function run when the zoom toggle toolbar is released - %---------------------------------------------------------------------- - function Zoom_OffMenuCallback(hObject, eventdata) - - % turns interactive zooming off - % ----------------------------- - zoom off; - - % Set the right limit and interval to the 3 axes - % ---------------------------------------------- - for iaxe = 1:3 - set(hPlotAxes(iaxe),'XTickMode','auto') - datetick(hPlotAxes(iaxe),'x','keeplimits') - end - - % Turns off the automatic adaptation of date ticks - % ------------------------------------------------ - zoomAdaptiveDateTicks('off'); - - end - -%% Zoom_OnMenuCallback - %---------------------------------------------------------------------- - % Callback function run when the zoom toggle toolbar is released - %---------------------------------------------------------------------- - function Zoom_OnMenuCallback(hObject, eventdata) - - % cursor back to normal - % --------------------- - set(hMainFig,'Pointer','arrow'); - - % returns a zoom mode object for the figure hMainFig handle - % -------------------------------------------------------- - hZoom = zoom(hMainFig); - - % Disallows a zoom operation on the MAP axes objects - % -------------------------------------------------- - setAllowAxesZoom(hZoom, hPlotAxes(4), false); - - % turns on interactive zooming (same effect than zoom on) but prevent - % side effect on another figure - % ------------------------------------------------------------------- - set(hZoom, 'enable', 'on'); - %zoom on; - - % Turns on the automatic adaptation of date ticks - % ----------------------------------------------- - zoomAdaptiveDateTicks('on'); - - % Desactivate some toggle buttons - % ------------------------------- - set( hQCToggletool, 'state', 'off' ); - set( hPanToggletool, 'state', 'off' ); - set( hTimelimitToggletool, 'state', 'off' ); - - end - -%% Pan_OffMenuCallback - %---------------------------------------------------------------------- - % Callback function run when the pan toggle toolbar is released - %---------------------------------------------------------------------- - function Pan_OffMenuCallback(hObject, eventdata) - - % turns interactive pan off - % ------------------------- - pan off; - - % Set the right limit and interval to the 3 axes - % ---------------------------------------------- - for iaxe = 1:3 - set(hPlotAxes(iaxe), 'XTickMode', 'auto') - datetick(hPlotAxes(iaxe), 'x', 'keeplimits') - end - - % Turns off the automatic adaptation of date ticks - % ------------------------------------------------ - panAdaptiveDateTicks('off'); - - end - -%% Pan_OnMenuCallback - %---------------------------------------------------------------------- - % Callback function run when the pan toggle toolbar is selected - %---------------------------------------------------------------------- - function Pan_OnMenuCallback(hObject, eventdata) - - % cursor back to normal - % --------------------- - set(hMainFig, 'Pointer', 'arrow'); - - % Returns a pan mode object for the figure handle - % ----------------------------------------------- - hPan = pan(hMainFig); - - % Disallows a pan operation on the MAP axes objects - % -------------------------------------------------- - setAllowAxesPan(hPan, hPlotAxes(4), false); - - % turns on interactive pan (same effect than pan on) but prevent - % side effect on another figure - % -------------------------------------------------------------- - set(hPan, 'enable', 'on'); - - % Turns on the automatic adaptation of date ticks - % ----------------------------------------------- - panAdaptiveDateTicks('on'); - - % Desactivate some toggle buttons - % ------------------------------- - set( hQCToggletool, 'state', 'off' ); - set( hZoomToggletool, 'state', 'off' ); - set( hTimelimitToggletool, 'state', 'off' ); - - end - -%% QC_OnMenuCallback ............................... Quality Control Module - %---------------------------------------------------------------------- - % Callback function run when the QC toggle tool is pressed - %---------------------------------------------------------------------- - function QC_OnMenuCallback(gcbo, eventdata) - - PARA = tsg.preference.parameter; - - % Make the QC code uipanel visible - % -------------------------------- - set( hbgQc, 'Visible' ,'on'); - set( hbgParameter, 'Visible', 'off'); - - % Desactivate toggletools. - % ------------------------ - set( hZoomToggletool, 'state', 'off' ); - set( hPanToggletool, 'state', 'off' ); - set( hTimelimitToggletool, 'state', 'off' ); - set( hCalToggletool, 'state', 'off', 'enable', 'off' ); - set( hInterpToggletool, 'state', 'off', 'enable', 'off' ); - - % Activate right clic context menu on first axes (salinity) - % --------------------------------------------------------- - set(hPlotAxes(1),'UIContextMenu', hQcCmenu); - - % Activate clic mouse menu on first axes (salinity) for next rbbox - % ---------------------------------------------------------------- - set(hPlotAxes(1),'ButtonDownFcn', @QC_SelectCallback); - - % change cursor to crosshair aspect - % --------------------------------- - set( hMainFig, 'Pointer', 'crosshair'); - - % ------------------------------------------------------------- - % nested function on mouse clic when QC toggle tool is selected - % ------------------------------------------------------------- - function QC_SelectCallback(gcbo, eventdata) - - % disable ButtonMotion on main fig during select - % prevent drawing to map - % ---------------------------------------------- - set( hMainFig, 'WindowButtonMotionFcn', []); - - % Retrieve named application data - % ------------------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % Selection of the data within the figure - % --------------------------------------- - point1 = get(gca,'CurrentPoint'); % button down detected - finalRect = rbbox; % return figure units - point2 = get(gca,'CurrentPoint'); % button up detected - - point1 = point1(1,1:2); % extract x and y - point2 = point2(1,1:2); - - p1 = min(point1,point2); - p2 = max(point1,point2); % calculate locations - - % The following code is only executed if the left mouse button is clicked. - % If the right mouse button is clicked, this code must not be - % executed as the variable 'ind' will be emptied. And this variable - % is used when the context menu (callback 'Qc') is called - % ----------------------------------------------------------------- - if ~strcmp( get(gcf, 'SelectionType'), 'alt') - - % The QC is applied either on TSG data either on Sample data. - % it depends if the Botte Toggle button has been cliked on - % ----------------------------------------------------------- - if strcmp( get(hBottleToggletool, 'state'), 'on') - - % get index on selected zone - % -------------------------- - ind = find(tsg.DAYD_SPL > p1(1,1) &... - tsg.DAYD_SPL < p2(1,1) & ... - tsg.([PARA '_SPL_DIF']) > p1(1,2) &... - tsg.([PARA '_SPL_DIF']) < p2(1,2)); - - % Keep the information on the indices of the selected zone - % -------------------------------------------------------- - tsg.rbboxind = ind .* ones(size(ind)); - - % Modifiy the QC - % -------------- - tsg.([PARA '_SPL_QC'])(ind) = tsg.qc.active.Code; - - % Save the modifications - % ---------------------- - setappdata( hMainFig, 'tsg_data', tsg); - - % Update sample QC in the _WS and _EXT records - % -------------------------------------------- - updateSampleQC( hMainFig, PARA ); - - % plot selected data with selected code - % -------------------------------------- - plot_Correction( hMainFig, hPlotAxes, PARA); - - else - - % get index on selected zone - % --------------------------- - ind = find(tsg.DAYD > p1(1,1) & tsg.DAYD < p2(1,1) & ... - tsg.(PARA) > p1(1,2) & tsg.(PARA) < p2(1,2)); - - % Keep the information on the indices of the selected zone - % -------------------------------------------------------- - tsg.rbboxind = ind .* ones(size(ind)); - - % Modifiy the QC - % -------------- - tsg.([PARA '_QC'])(ind) = tsg.qc.active.Code; - - % put last SSPS_QC in queue (Undo/Redo) - % ------------------------------------- - tsg.queue = push( tsg.queue, tsg.([PARA '_QC'])); - - % store QC in queue object, for undo - % ---------------------------------- - tsg.queue = push(tsg.queue, tsg.([PARA '_QC'])); - - % Save the modifications - % ---------------------- - setappdata( hMainFig, 'tsg_data', tsg); - - % Draw plot 1 of the validation figure - % ------------------------------------ - plot_Validation( hMainFig, hPlotAxes, 1, PARA ); - - % refresh QC statistic panel - % -------------------------- - display_QC( hMainFig, hPlotAxes ); - - % enable undo menu - % ---------------- - set(findobj('tag','UIMENU_UNDO'),'enable','on'); - end - - % As soon as a modification took place the data should be saved - % ------------------------------------------------------------- - set( hSaveMenu, 'UserData', 'on' ); - - end - - % enable ButtonMotion on main fig after select QC area - % ---------------------------------------------------- - set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion); - - end - end - -%% QC_OffMenuCallback .............................. Quality Control Module - %---------------------------------------------------------------------- - % Callback function run when the QC toggle tool is released - %---------------------------------------------------------------------- - function QC_OffMenuCallback(gcbo, eventdata) - - % Desactive right clic menu on first axes (salinity) - % --------------------------------------------------- - set(hPlotAxes(1),'UIContextMenu', []); - - % Desactive clic mouse menu (zoom) on first axes (salinity) - % ---------------------------------------------------------- - set(hPlotAxes(1),'ButtonDownFcn', []); - - % Uipanel visible or not - % ----------------------- - set( hbgQc, 'Visible', 'off' ); - - set( hTimelimitToggletool, 'state', 'off' ); - set( hCalToggletool, 'state', 'off', 'enable', 'on' ); - set( hInterpToggletool, 'state', 'off', 'enable', 'on' ); - - % uibuttongroup uipanel used to choose a parameter is set to - % on only if the Correction screen (bottle toggletool) is off - % ----------------------------------------------------------- - if strcmp( get( hBottleToggletool, 'state'), 'off') - set( hbgParameter, 'Visible', 'on'); - end - % cursor back to normal - % --------------------- - set(hMainFig,'Pointer','arrow'); - - end - -%% Qc context menu selected ........................ Quality Control Module - %----------------------------------------------------------- - % Callback function run when the QC context menu is selected - % - % Context menu used to attribute a QC to the TSG time series - % - %----------------------------------------------------------- - function Qc(hObject, eventdata, key) - - % Retrieve Default Quality Code and Color - % --------------------------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % Get the parameter (SSPS, SSJT or SSTP) - % -------------------------------------- - PARA = tsg.preference.parameter; - - % get key and some values in hashtable - % ------------------------------------ - code = get(tsg.qc.hash, key, 'code'); - color = get(tsg.qc.hash, key, 'color'); - - % set active code and color from selected context menu - % ---------------------------------------------------- - tsg.qc.active.Code = code; - tsg.qc.active.Color = color; - - % Modify and plot the last selected tsg data - % ------------------------------------------ - if ~isempty( tsg.rbboxind ) - - if strcmp( get(hBottleToggletool, 'state'), 'on') - - tsg.([PARA '_SPL_QC'])(tsg.rbboxind) = tsg.qc.active.Code; - - % Save tsg.SSPS_QC and tsg.qc.active.Code - % in the application data - % ---------------------------------------- - setappdata( hMainFig, 'tsg_data', tsg ); - - % Draw the 3 plots of the Correction figure - % ----------------------------------------- - plot_Correction( hMainFig, hPlotAxes, PARA ); - - else - tsg.([PARA '_QC'])(tsg.rbboxind) = tsg.qc.active.Code; - - % Save tsg.SSPS_QC in the application data - % ---------------------------------------- - setappdata( hMainFig, 'tsg_data', tsg ); - - % Draw plot 1 of the validation figure - % ------------------------------------ - plot_Validation( hMainFig, hPlotAxes, 1, PARA ); - - end - - end - - % Update the radio button corresponding to the selected - % QC context menu (rbg : RadioButtonGroup) - % ----------------------------------------------------- - radioTag = ['TAG_QC_RADIO_' key]; % Build the TAG of the CODE - hbgChildren = get(hbgQc,'Children'); % Get the handles of the rbg - hbgTagCell = get(hbgChildren, 'tag'); % get the TAG of the rbg - ind = strcmp(radioTag, hbgTagCell); % Compare the TAG - hRadioButton = hbgChildren( ind == 1 ); % Get the handle of the button - set(hbgQc, 'SelectedObject', hRadioButton); % Make this button active - - setappdata( hMainFig, 'tsg_data', tsg ); - - end - -%% Radiobutton Quality Control ..................... Quality Control Module - % --------------------------------------------------------------- - % Callback to select CODE and COLOR QC from the RadioButton Group - % --------------------------------------------------------------- - function RadiobuttonQc(source, eventdata) - - % Retrieve Default Quality Code and Color - % --------------------------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % Retrieve the key from the active RadioButton - % -------------------------------------------- - rbTag = get(eventdata.NewValue,'Tag'); - key = strrep(rbTag, 'TAG_QC_RADIO_', ''); - - % store his handle to uibuttongroup userdata - % ------------------------------------------ - set(hbgQc,'Userdata', eventdata.NewValue); - - % get key and some values in hashtable - % ------------------------------------ - code = get(tsg.qc.hash, key, 'code'); - color = get(tsg.qc.hash, key, 'color'); - - % set active code and color from selected context menu - % ---------------------------------------------------- - tsg.qc.active.Code = code; - tsg.qc.active.Color = color; - - setappdata( hMainFig, 'tsg_data', tsg ); - - end - -%% Radiobutton Parameter choice ..................... Parameter choice - % --------------------------------------------------------------- - % Callback to select CODE and COLOR QC from the RadioButton Group - % --------------------------------------------------------------- - function RadiobuttonParameter(source, eventdata) - - % If the map is visible, hide it - % ------------------------------ - set( hMapPanel, 'visible', 'off' ); - set( hMapToggletool, 'state', 'off'); - set( hClimToggletool, 'state', 'off'); - - % Retrieve Default Quality Code and Color - % --------------------------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % Retrieve the key from the active RadioButton - % -------------------------------------------- - rbTag_Old = get(eventdata.OldValue,'Tag'); - rbTag = get(eventdata.NewValue,'Tag'); - PARA = strrep(rbTag, 'TAG_PARA_RADIO_', ''); - - % Test if PARA exists - % ------------------- - ind = find( isnan(tsg.(PARA)) == 0 ); - if ~isempty( tsg.(PARA) ) & ~isempty (ind ) - - % store his handle to uibuttongroup userdata - % ------------------------------------------ - set(hbgParameter,'Userdata', eventdata.NewValue); - - tsg.preference.parameter = PARA; - - setappdata( hMainFig, 'tsg_data', tsg ); - - % Get sample data - % --------------- - tsg_mergesample( hMainFig, PARA ); - - % The smooth TSG time series (tsg_moveaverage) is - % no more computed : too long - % We now computed a smooth value only at the position of the sample - % in diffTsgSample - % ----------------------------------------------------------------- - %tsg_moveaverage(hMainFig, PARA); - - % Draw the 3 plots of the validation figure - % ----------------------------------------- - resetAxes( hMainFig, hPlotAxes ) - - plot_Validation( hMainFig, hPlotAxes, 1, PARA ); - plot_Validation( hMainFig, hPlotAxes, 2, 'SSJT' ); - plot_Validation( hMainFig, hPlotAxes, 3, 'SPDC' ); - - else - msgbox( ['No ' PARA ' data in the file'], 'Parameter choice', 'warn', 'modal'); - - % Set the old radio-button active - % ------------------------------- - hbgChildren = get(hbgParameter,'Children'); % Get the handles of the rbg - hbgTagCell = get(hbgChildren, 'tag'); % get the TAG of the rbg - ind = strcmp(rbTag_Old, hbgTagCell); % Compare the TAG - hRadioButton = hbgChildren( ind == 1 ); % Get the handle of the button - set(hbgParameter, 'SelectedObject', hRadioButton); % Make this button active - - end - - end - -%% preQcPanCallback .................................Quality Control Module - % --------------------------------------------------------------- - % Callback function ... to be completed - % --------------------------------------------------------------- - function preQcPanCallback(obj, evd) - - set(hQCToggletool, 'state', 'off' ); - - end - -%% postQcPanCallback ............................... Quality Control Module - % --------------------------------------------------------------- - % Callback function ... to be completed - % --------------------------------------------------------------- - function postQcPanCallback(obj, evd) - - set(hQCToggletool, 'state', 'on' ); - - % Set the right limit and interval to the 3 axes - % ---------------------------------------------- - for iaxe = 1:3 - set(hPlotAxes(iaxe),'XTickMode','auto') - datetick(hPlotAxes(iaxe),'x','keeplimits') - end - - end - -%% MouseMotion - %--------------------------------------------------------------------- - % Callback function run when mouse pointer is moving on temperature plot - % draw corresponding measurement position on map - %--------------------------------------------------------------------- - function MouseMotion(hObject, eventdata) - - % Test if the callback can be activated - % ------------------------------------- - if strcmp( get( hMainFig, 'UserData'), 'ButtonMotionOn') - - % Retrieve named application data - % ------------------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % Get current position of cusor and return its coordinates in - % axes with handle h_axes - % ----------------------------------------------------------- - a = get(hPlotAxes(1), 'CurrentPoint'); - x = a(2,1); - y = a(2,2); - - % Get the Limits of axes 1 - % ------------------------ - limx = get(hPlotAxes(1), 'XLim'); - limy = get(hPlotAxes(1), 'YLim'); - - % Code to Activate the PAN function when QC mode is active - % A PAN zone is defined in the bottom (10%) of PlotAxes(1) - % 2 callback are needed : - % 1 - one to desactivate QC when Pan is set to on. - % 2 - one to reactivate QC once the pan has been used. - % --------------------------------------------------------- - qcState = get(hQCToggletool, 'state' ); - if strcmp(qcState, 'on' ); - - % Suppose that Y axes is increasing from the bottom to the top - % ------------------------------------------------------------ - limy2 = limy(1) + (limy(2)-limy(1)) * 0.10; - - if x > limx(1) && x < limx(2) && y <= limy2 && y >= limy(1) - hPan = pan(hMainFig); - set(hPan,'ActionPreCallback', @preQcPanCallback); - set(hPan,'ActionPostCallback', @postQcPanCallback); - set(hPan,'Enable','on'); - else - pan off - end - end - - % Dynamically display data in uicontrol - % ------------------------------------- - if x > tsg.DAYD(1) && x < tsg.DAYD(end) - %if x > limx(1) && x < limx(2) - - indCursor = find( tsg.DAYD > x); - set( hInfoDateText, 'String',... - datestr(tsg.DAYD(indCursor(1)),'dd/mm/yyyy HH:MM')); - set( hInfoLatText, 'String', dd2dm(tsg.LATX(indCursor(1)),0)); - set( hInfoLongText, 'String', dd2dm(tsg.LONX(indCursor(1)),1)); - set( hInfoSSPSText, 'String', tsg.SSPS(indCursor(1))); - set( hInfoSSJTText, 'String', tsg.SSJT(indCursor(1))); - if ~isempty(tsg.SSTP) - set( hInfoSSTPText, 'String', tsg.SSTP(indCursor(1))); - end - - % Plot the position on the map if this one is active - % -------------------------------------------------- - if strcmp( get(hMapPanel, 'Visible'), 'on') - - % Select the map axes - % ------------------- - axes( hPlotAxes(4)); - - if isempty( get(hMapPanel, 'UserData')) - if ~isnan( tsg.LONX(indCursor(1)) ) - hMarker = m_line( tsg.LONX(indCursor(1)), tsg.LATX(indCursor(1)),... - 'Marker','o','MarkerSize',5, ... - 'Color','r', 'MarkerFaceColor','r'); - set(hMapPanel, 'UserData', hMarker); - end - else - if ~isnan( tsg.LONX(indCursor(1)) ) - - delete(get(hMapPanel, 'UserData')); - hMarker = m_line( ... - tsg.LONX(indCursor(1)), tsg.LATX(indCursor(1)),... - 'Marker','o','MarkerSize',5, ... - 'Color','r', 'MarkerFaceColor','r'); - set(hMapPanel, 'UserData', hMarker); - end - end - - end - end - end - end - -%% Map_OffMenuCallback - %--------------------------------------------------------------------- - % Callback function run when the Map tool bar item is unselected - %--------------------------------------------------------------------- - function Map_OffMenuCallback(hObject, eventdata) - - % Make the earth map invisible - % ---------------------------- - set(hMapPanel, 'Visible', 'off' ); - - end - -%% Map_OnMenuCallback - %--------------------------------------------------------------------- - % Callback function run when the Map tool bar item is selected - %--------------------------------------------------------------------- - function Map_OnMenuCallback(hObject, eventdata) - - % Desactivate Zoom and Pan toggle buttons - % may be change in the futur ... - % --------------------------------------- - set(hZoomToggletool, 'state', 'off' ); - set(hPanToggletool, 'state', 'off' ); - - % Make the earth map visible - % -------------------------- - set(hMapPanel, 'Visible', 'on' ); - - erase_Line( hPlotAxes, 4 ); - - plot_map( hMainFig, hPlotAxes) - - end - -%% Bottle_OnMenuCallback ................................ Correction Module - %--------------------------------------------------------------------- - % Callback function run when the bootle push tool is selected - %--------------------------------------------------------------------- - function Bottle_OnMenuCallback(hObject, eventdata) - % Callback function run when the Bottle tool bar item is selected - - % Get the tsg structure - % --------------------- - tsg = getappdata(hMainFig, 'tsg_data'); - - % Get the parameter we are working on (SSPS, SSJT, SSTP) - % ------------------------------------------------------ - PARA = tsg.preference.parameter; - - % Switch somme buttons - % -------------------- - set( hZoomToggletool, 'state', 'off' ); - set( hQCToggletool, 'state', 'off' ); - set( hPanToggletool, 'state', 'off' ); - set( hMapToggletool, 'state', 'off' ); - set( hClimToggletool, 'state', 'off', 'enable', 'off'); - set( hCalToggletool, 'enable', 'off' ); - set( hInterpToggletool, 'enable', 'off' ); - set( hTimelimitToggletool, 'enable', 'on' ); - - % Activate ord desactivate uipanels - % --------------------------------- - set( hpDateLimit, 'Visible', 'on' ); - set( hbgCorMethod, 'Visible', 'on' ); - set( hbgParameter, 'Visible', 'off'); - set( hbgQc, 'Visible', 'off'); - - % Test if tsg and sample data have been loaded - % -------------------------------------------- - if ~isempty( tsg.([PARA '_SPL']) ) - -% % Running average of TSG time series -% % ---------------------------------- -% tsg_moveaverage(hMainFig, PARA); - - % Compute the sample-TSG differences - % ---------------------------------- - diffTsgSample( hMainFig, PARA ); - - % Plot in the 3 axes - % ------------------ - plot_Correction( hMainFig, hPlotAxes, PARA ); - - % Get the information on time limits of the time series - % Write them in the uipanel - % ----------------------------------------------------- - noNaN = tsg.DAYD(~isnan( tsg.DAYD )); - set( hetDateMin, 'String', datestr(noNaN(1), 31)); - set( hetDateMax, 'String', datestr(noNaN(end), 31)); - - else - - % Desactivate the corretion module - % -------------------------------- - set( hBottleToggletool, 'state', 'off' ); - - msgbox('Sample data not loaded in the program', 'modal'); - - end - end - -%% Bottle_OffMenuCallback ............................... Correction module - %--------------------------------------------------------------------- - % Callback function run when the bootle push tool is selected - %--------------------------------------------------------------------- - function Bottle_OffMenuCallback(hObject, eventdata) - - % If necessary toggle off some buttons - % ------------------------------------ - set( hZoomToggletool, 'state', 'off' ); - set( hQCToggletool, 'state', 'off' ); - set( hPanToggletool, 'state', 'off' ); - set( hMapToggletool, 'state', 'off' ); - set( hClimToggletool, 'enable', 'on'); - set( hCalToggletool, 'enable', 'on' ); - set( hInterpToggletool, 'enable', 'on' ); - set( hTimelimitToggletool, 'enable', 'off' ); - - % Activate or Desactivate uipanel - % -------------------------------- - set( hpDateLimit, 'Visible', 'off' ); - set( hbgCorMethod, 'Visible', 'off' ); - set( hbgParameter, 'Visible', 'on'); - - % Desactivate Click Mouse on figure - % --------------------------------- - set( hMainFig, 'WindowButtonDownFcn', []); - - % Get tsg structure - % ----------------- - tsg = getappdata( hMainFig, 'tsg_data' ); - - % Get the parameter (SSPS, SSJT, SSTP) - % ------------------------------------ - PARA = tsg.preference.parameter; - - % Drawing only necessary if the Correction moduel has been activated - % ------------------------------------------------------------------ - if ~isempty( tsg.([PARA '_SPL']) ) - - % Draw the 3 plots of the validation figure - % ----------------------------------------- - plot_Validation( hMainFig, hPlotAxes, 1, PARA ); - plot_Validation( hMainFig, hPlotAxes, 2, 'SSJT' ); - plot_Validation( hMainFig, hPlotAxes, 3, 'SPDC' ); - end - - % Set the pointer - % --------------- - set( hMainFig, 'Pointer', 'arrow'); - - end - -%% CorCancelCallback .................................... Correction Module - function CorCancelCallback(hObject, eventdata) - % Callback function run when ... - - % Desactivate somme Toggle button - % ------------------------------- - set( hZoomToggletool, 'state', 'off' ); - set( hPanToggletool, 'state', 'off' ); - set( hQCToggletool, 'state', 'off' ); - set( hTimelimitToggletool, 'state', 'off' ); - - % Get tsg application data - % ------------------------ - tsg = getappdata(hMainFig, 'tsg_data'); - - % Get parameter we are working on (SSPS, SSJT, SSTP) - % -------------------------------------------------- - PARA = tsg.preference.parameter; - - % To cancel the correction set the ERROR to [] then - % call updateAdjustedVariable. - % -------------------------------------------------- - tsg.([PARA '_ADJUSTED_ERROR']) = []; - - % Save tsg data - % ------------- - setappdata(hMainFig, 'tsg_data', tsg); - - % Set the ADJUSTED variable either to the raw variable or to - % the calibrated variable - % ---------------------------------------------------------- - updateAdjustedVariable( hMainFig ); - - % Plot in the 3 axes - % ------------------ - plot_Correction( hMainFig, hPlotAxes, PARA ); - - end - -%% CorLinearCallback .................................... Correction Module - function CorLinearCallback(hObject, eventdata) - % Callback function run when - - % Desactivate somme Toggle button - % ------------------------------- - set( hZoomToggletool, 'state', 'off' ); - set( hPanToggletool, 'state', 'off' ); - set( hQCToggletool, 'state', 'off' ); - set( hTimelimitToggletool, 'state', 'off' ); - - % Get the time limits for the correction A TESTER - % ----------------------------------------------- - dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS'); - dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS'); - - % Get the parameter (SSPS, SSJT, or SSTP) - % --------------------------------------- - tsg = getappdata(hMainFig, 'tsg_data'); - PARA = tsg.preference.parameter; - - % Compute the sample-TSG differences - % ---------------------------------- - diffTsgSample( hMainFig, PARA ); - - % Correction - % ---------- - error = corTsgLinear(hMainFig, PARA, dateMin, dateMax); - - switch error - - case 1 - - % Plot in the 3 axes - % ------------------ - plot_Correction( hMainFig, hPlotAxes, PARA ); - - case -1 - msgbox( 'Date limits are not correct',... - 'Correction module', 'warn', 'modal'); - end - - end - -%% CorMedianCallback .................................... Correction Module - function CorMedianCallback(hObject, eventdata) - % Callback function run when - - % Desactivate somme Toggle button - % ------------------------------- - set( hZoomToggletool, 'state', 'off' ); - set( hPanToggletool, 'state', 'off' ); - set( hQCToggletool, 'state', 'off' ); - set( hTimelimitToggletool, 'state', 'off' ); - - % Get the time limits for the correction A TESTER - % -------------------------------------- - dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS'); - dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS'); - - % Get the parameter (SSPS, SSJT, or SSTP) - % --------------------------------------- - tsg = getappdata(hMainFig, 'tsg_data'); - PARA = tsg.preference.parameter; - - % Compute the sample-TSG differences - % ---------------------------------- - diffTsgSample( hMainFig, PARA ); - - % Correction - % ---------- - error = corTsgMedian(hMainFig, PARA, dateMin, dateMax); - - switch error - - case 1 - - % Plot in the 3 axes - % ------------------ - plot_Correction( hMainFig, hPlotAxes, PARA ); - - case -1 - msgbox( 'Date limits are not correct',... - 'Correction module', 'warn', 'modal'); - end - - end - -%% SelectTime_OnMenuCallback -%--------------------------- - function SelectTime_OnMenuCallback(hObject, eventdata) - % Callback function run when the .... - - % Desactivate Zoom and Pan functions. - % ---------------------------------- - set( hZoomToggletool, 'state', 'off' ); - set( hQCToggletool, 'state', 'off' ); - set( hPanToggletool, 'state', 'off' ); - - % Create a pointer to select the time limits - % ------------------------------------------ - selTimePointer = ones(16)+1; - selTimePointer(1,:) = 1; selTimePointer(16,:) = 1; - selTimePointer(:,1) = 1; selTimePointer(:,16) = 1; - selTimePointer(1:4,8:9) = 1; selTimePointer(13:16,8:9) = 1; - selTimePointer(8:9,1:4) = 1; selTimePointer(8:9,13:16) = 1; - selTimePointer(5:12,5:12) = NaN; % Create a transparent region in the center - - % Activate clic mouse menu on second axes (salinity) for next rbbox - % ---------------------------------------------------------------- - set(hMainFig,'WindowButtonDownFcn', @Time_SelectCallback); - - % change cursor - % --------------- - set( hMainFig, 'Pointer', 'custom',... - 'PointerShapeCData', selTimePointer, 'PointerShapeHotSpot',[9 9]); - - % ---------------------------------------------------------------------- - % nested function on mouse clic when Select Time toggle tool is selected - % ---------------------------------------------------------------------- - function Time_SelectCallback(gcbo, eventdata) - - % disable ButtonMotion on main fig during select - % prevent drawing to map - % ---------------------------------------------- - set( hMainFig, 'WindowButtonMotionFcn', []); - - % Retrieve named application data - % ------------------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % Selection of the data within the figure - % --------------------------------------- - point1 = get(gca,'CurrentPoint'); % button down detected - finalRect = rbbox; % return figure units - point2 = get(gca,'CurrentPoint'); % button up detected - - point1 = point1(1,1:2); % extract x and y - point2 = point2(1,1:2); - - p1 = min(point1,point2); - p2 = max(point1,point2); % calculate locations - - % get index on selected zone - Only on X axes (time) - % -------------------------------------------------- - ind = find(tsg.DAYD >= p1(1,1) & tsg.DAYD <= p2(1,1)); - - % Write the date in the Editable uicontrol - % ---------------------------------------- - set( hetDateMin, 'String', datestr(tsg.DAYD(ind(1)), 31)); - set( hetDateMax, 'String', datestr(tsg.DAYD(ind(end)), 31)); - - % enable ButtonMotion on main fig after select QC area - % ---------------------------------------------------- - set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion); - end - end - -%% SelectTime_OffMenuCallback -%---------------------------- - function SelectTime_OffMenuCallback(hObject, eventdata) - % Callback function run when the .... - - % Desactivate time limit buttons - % ------------------------------ - set( hTimelimitToggletool, 'state', 'off'); - - set( hMainFig, 'WindowButtonDownFcn', []); - - set( hMainFig, 'Pointer', 'arrow'); - - end - -%% Clim_OffMenuCallback - %------------------------------------------------------------------------ - % Callback function run when the Levitus climatology toolbar is unselected - %------------------------------------------------------------------------ - function Clim_OffMenuCallback(hObject, eventdata) - - % Get lines handles from tag - % -------------------------- - hLines = findobj('-regexp', 'Tag', 'TAG_LINE_CLIMATO_'); - - % Delete climatology lines on axes - % --------------------------------- - delete(hLines); - - end - -%% Clim_OnMenuCallback - %------------------------------------------------------------------------ - % Callback function run when the Levitus climatology toolbar is unselected - %------------------------------------------------------------------------ - function Clim_OnMenuCallback(hObject, eventdata) - - % Test if the TSG and bucket files have been read - % ----------------------------------------------- - if strcmp( get(hOpenMenu, 'UserData'), 'on' ) - - % plot climatology - % ---------------- - plot_Climatology(hMainFig, hPlotAxes); - - end - end - -%% ClimatoSelectMenuCallback - % ------------------------------------------------------------------- - % Callback function run when climato submenu is selected - % ------------------------------------------------------------------- - function ClimatoSelectMenuCallback(hObject, eventdata, climato, time) - - % find all climato submenu and set 'checked' property to 'off' - % ------------------------------------------------------------ - hdl = findobj( '-regexp', 'tag', 'TAG_UIMENU_CLIMATO'); - set(hdl, 'checked', 'off'); - - % set current climato submenu checked - % ----------------------------------- - set(hObject, 'checked', 'on'); - - % memorize action on climatology menu for next use - % ------------------------------------------------ - s.type = climato; - s.time = time; - set(hClimatoMenu, 'userdata', s); - - % check if climatology toggle button is set - % ----------------------------------------- - if strcmp(get(hClimToggletool, 'state'), 'on') - - % clear last plotted climatology - % ------------------------------ - Clim_OffMenuCallback; - - % plot and read (eventually) new climatology - % ------------------------------------------ - plot_Climatology(hMainFig, hPlotAxes); - end - - end - -%% PreferencesMenuCallback - % ------------------------------------------------------------------- - % Callback function run when Option/Preference is selected - % ------------------------------------------------------------------- - function PreferencesMenuCallback(hObject, eventdata) - - % Test if the preference menu is allready checked - % ----------------------------------------------- - if strcmp( get(hObject, 'checked'), 'on' ) - - % set preference autoload off (unchecked) - % --------------------------------------- - tsg.preference.autoload = 'off'; - - else - - % set preference autoload on (checked) - % ------------------------------------ - tsg.preference.autoload = 'on'; - - end - - % set current option/preference submenu state - % ------------------------------------------- - set(hObject, 'checked', tsg.preference.autoload); - - end - - -%% HeaderMenuCallback -% ------------------------------------------------------------------- -% Callback function run when the headerForm tool bar item is selected -% ------------------------------------------------------------------- - function HeaderMenuCallback(hObject, eventdata) - - % call header form function - % ------------------------- - headerForm(hMainFig); - - end - -%% PrintFigMenuCallback -% ------------------------------------------------------------------- -% Callback function run when the Report tool bar item is selected -% ------------------------------------------------------------------- - function PrintFigMenuCallback(hObject, eventdata) - - % disable ButtonMotion on main fig during select - % prevent drawing to map - % ---------------------------------------------- - set( hMainFig, 'WindowButtonMotionFcn', []); - - msgbox( 'Function not yet implemented', 'warn', 'modal'); - -% printpreview(hMainFig); - -%printdlg; -%dlg = pagesetupdlg(hMainFig); - -%waitfor(dlg) - % enable ButtonMotion on main fig after select QC area - % ---------------------------------------------------- - set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion); - - end - - -%% ReportMenuCallback -% ------------------------------------------------------------------- -% Callback function run when the Report tool bar item is selected -% ------------------------------------------------------------------- - function ReportMenuCallback(hObject, eventdata) - - % call report function - % -------------------- - saveReport(hMainFig); - - end - -%% SaveMenuCallback -% ------------------------------------------------------------------- -% Callback function run when the Save menu item is selected -% ------------------------------------------------------------------- - function SaveMenuCallback(hObject, eventdata) - - % Retrieve named application data - % ------------------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % fill or append header form - % ------------------------- - error = headerForm(hMainFig); - - % if user press continue button, ask for netcdf file - % ------------------------------------------------ - if error ~= -1 - [fileName, pathName, filterindex] = uiputfile('*.nc', ... - 'Save file name', strcat(tsg.file.name, '.nc')); - - % if user press cancel button, all var are set to zero - % ---------------------------------------------------- - if filterindex == 0 - return; - end - - % Pointer set to watch during reading and plotting - % ------------------------------------------------ - set( hMainFig, 'Pointer', 'watch' ); - - % flushes the event queue and updates the closed uiputfile window - % --------------------------------------------------------------- - drawnow; - - % write netcdf file - % ----------------- - error = writeTSGDataNetCDF(hMainFig, strcat(pathName, fileName)); - - % Pointer reset to arrow - % ---------------------- - set( hMainFig, 'Pointer', 'arrow' ); - - % Check for NetCDF writing error - % must to be rewriting - % ------------------------------ - if error == -1 - warning('tsgqc_GUI:SaveMenuCallback', ... - 'NetCDF writing error: %s %s', pathName, fileName); - return; - end - - % update the display - % ------------------ - set( hInfoFileText, 'String', strcat(tsg.file.name, tsg.file.ext)); - - % Write a TXT file - % ---------------- - fileName = strcat(tsg.file.name, '_w.txt'); - error = writeTsgDataTxt(hMainFig, strcat(pathName, fileName)); - - % Check for TxT writing error - must to be rewriting - % -------------------------------------------------- - if error == -1 - warning('tsgqc_GUI:SaveMenuCallback', ... - 'TxT writing error: %s %s', pathName, fileName); - return; - end - - % enable Quality Control mode - % --------------------------- - hdl_pushtool = findobj('Tag', 'QC'); - set(hdl_pushtool, 'Enable', 'on'); - end - - end - -%% ExportMenuCallback -% ------------------------------------------------------------------- -% Callback function run when the Export menu item is selected -% ------------------------------------------------------------------- - function ExportMenuCallback(hObject, eventdata) - - % Retrieve named application data - % ------------------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % - % ------------------------------------------------ - [fileName, pathName, filterindex] = uiputfile('*.tsg', ... - 'Save file name', strcat(tsg.file.name, '.tsg')); - - % if user press cancel button, all var are set to zero - % ---------------------------------------------------- - if filterindex == 0 - return; - end - - % Pointer set to watch during reading and plotting - % ------------------------------------------------ - set( hMainFig, 'Pointer', 'watch' ); - - % update the display - % ------------------ - set( hInfoFileText, 'String', strcat(tsg.file.name, tsg.file.ext)); - - % Write a .TSG (ascii) file - % -------------------------- - error = writeTsgDataTsg(hMainFig, strcat(pathName, fileName)); - - % Check for .TSG writing error - must to be rewriting - % -------------------------------------------------- - if error == -1 - warning('tsgqc_GUI:SaveMenuCallback', ... - 'TSG writing error: %s %s', pathName, fileName); - return; - end - - % Pointer reset to arrow - % ---------------------- - set( hMainFig, 'Pointer', 'arrow' ); - - % enable Quality Control mode - % --------------------------- - hdl_pushtool = findobj('Tag', 'QC'); - set(hdl_pushtool, 'Enable', 'on'); - - end - -%% UndoMenuCallback - % ----------------------------------------------------------------------- - % Callback function run when the Edit/Undo menu item is selected (Ctrl+Z) - % ----------------------------------------------------------------------- - function UndoMenuCallback(hObject, eventdata) - - % Undo module not yet implemented - % ------------------------------- - % msgbox('Undo module not yet implemented', 'modal'); - - tsg.queue = undo(tsg.queue); - tsg.SSPS_QC = get(tsg.queue); - - % Make the Salinity, temperature and velocity plot - % ------------------------------------------------ - plot_SalTempVel( hMainFig, hPlotAxes ); - - end - -%% RedoMenuCallback - % ----------------------------------------------------------------------- - % Callback function run when the Edit/Redo menu item is selected (Ctrl+R) - % ----------------------------------------------------------------------- - function RedoMenuCallback(hObject, eventdata) - - % Redo module not yet implemented - % ------------------------------- - msgbox('Redo module not yet implemented', 'modal'); - - end - -%% QuitMenuCallback - % ----------------------------------------------------------------- - % Callback function run when the Quit menu item is selected - % ----------------------------------------------------------------- - function QuitMenuCallback(hObject, eventdata) - - % save config mat file in prefdir - % ------------------------------- - config_file = [prefdir, filesep, tsgqcname, '.mat']; - - % set tsg.levitus empty before save preferences in mat file - % --------------------------------------------------------- - tsg.levitus = []; - - % save preference mat file - % ------------------------ - save( config_file, 'tsg'); - - % If the data have been modified and not save, the program - % ask to save the data - % -------------------------------------------------------- - if strcmp( get( hSaveMenu, 'UserData' ), 'on') - selection = ... - questdlg('The file has been modified. Do you want to save it ?',... - 'Save before Quit?',... - 'Yes', 'No', 'Yes'); - - if strcmp(selection, 'Yes') - - % call File/Save Menu Callback before before quit - % ----------------------------------------------- - SaveMenuCallback; - - end - - % quit program - % ------------ - quitProgram(hMainFig, DEFAULT_PATH_FILE); - - else - selection = ... - questdlg(['Quit ' get(hMainFig, 'Name') '?'],... - ['Quit ' get(hMainFig, 'Name') '?'],... - 'Yes', 'No', 'Yes'); - if strcmp(selection, 'No') - return; - else - quitProgram(hMainFig, DEFAULT_PATH_FILE); - end - end - - end - -% end of tsgqc_GUI -% ---------------- -end