From c140d0d9e7350db822ba88587af53b90c8f6364e Mon Sep 17 00:00:00 2001 From: Yves Gouriou <yves.gouriou@ird.fr> Date: Tue, 4 Dec 2007 16:23:44 +0000 Subject: [PATCH] =?UTF-8?q?Poursuite=20du=20d=C3=A9veloppement=20du=20modu?= =?UTF-8?q?le=20de=20correction=20:=20affichage,=20mise=20en=20place=20de?= =?UTF-8?q?=20l'interface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev_tsgcor_GUI.m | 659 ------------------------------- tsg_util/tsg_initialisation.m | 11 +- tsg_util/tsg_plot_SalTsgSample.m | 20 +- tsgcor_GUI.m | 51 ++- tsgqc_GUI.m | 30 +- 5 files changed, 81 insertions(+), 690 deletions(-) delete mode 100644 dev_tsgcor_GUI.m diff --git a/dev_tsgcor_GUI.m b/dev_tsgcor_GUI.m deleted file mode 100644 index a31f2e0..0000000 --- a/dev_tsgcor_GUI.m +++ /dev/null @@ -1,659 +0,0 @@ -function dev_tsgcor_GUI( hMainFig ) -% dev_tsgcor_GUI -% -% GUI for correction of TSG data by comparison to samples -% this GUI is a children of tsgqc_GUI -% -% - -%% 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 -% ******************** - clc - - % 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] - ]; - addpath( p, '-END' ); - rehash; - - % Screen limits for the GUI - % ------------------------- - set(0,'Units','normalized'); - guiLimits = get(0,'ScreenSize'); - guiLimits(1) = guiLimits(1) + 0.05; - guiLimits(2) = guiLimits(2) + 0.05; - guiLimits(3) = guiLimits(3) - 0.1; - guiLimits(4) = guiLimits(4) - 0.2; - - % Create and then hide the GUI as it is being constructed. - % -------------------------------------------------------- - hChild1Fig = figure(... - 'Name', 'TSG Correction', ... - 'NumberTitle', 'off', ... - 'Resize', 'on', ... - 'Menubar','none', ... - 'Toolbar', 'none', ... - 'Tag', 'ButtonMotionOff', ... - 'WindowButtonMotionFcn', @MouseMotion, ... - 'CloseRequestFcn', @QuitProgram,... - 'HandleVisibility','callback',... - 'Visible','on',... - 'Units', 'normalized',... - 'Position',guiLimits); - - % Construct the Menu - % ----------------- - hFileMenu = uimenu(... - 'Parent', hChild1Fig,... - 'HandleVisibility','callback',... - 'Label', 'File'); - hSaveMenu = uimenu(... - 'Parent', hFileMenu,... - 'Label','Save',... - 'Accelerator','S',... - 'Tag', 'off', ... - 'HandleVisibility','callback',... - 'Callback',@SaveMenuCallback); - hQuitMenu = uimenu(... - 'Parent',hFileMenu,... - 'Label','Quit',... - 'Separator','on',... - 'Accelerator','Q',... - 'HandleVisibility','callback',... - 'Callback',@QuitMenuCallback); - - % Construct the Toolbar - % ----------------- - hToolbar = uitoolbar(... % Toolbar for Open and Print buttons - 'Parent',hChild1Fig, ... - 'HandleVisibility','callback'); - hSavePushtool = uipushtool(... % Open Save toolbar button - 'Parent',hToolbar,... - 'TooltipString','Save file',... - 'CData',iconRead( ... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'savedoc.mat']),... - 'HandleVisibility','callback', ... - 'ClickedCallback', @SaveMenuCallback); - hZoomPushtool = uipushtool(... % Open Zoom toolbar button - 'Parent',hToolbar,... - 'Separator', 'on', ... - 'TooltipString','Zoom',... - 'CData', iconRead(fullfile(matlabroot, ... - '/toolbox/matlab/icons/zoom.mat')),... - 'HandleVisibility','callback', ... - 'ClickedCallback', @ZoomMenuCallback); - hPanPushtool = uipushtool(... % Open Pan toolbar button - 'Parent',hToolbar,... - 'TooltipString','Pan',... - 'CData',iconRead(fullfile(matlabroot, ... - '/toolbox/matlab/icons/pan.mat')),... - 'HandleVisibility','callback', ... - 'ClickedCallback', @PanMenuCallback); - hBottlePushtool = uipushtool(... % Open toolbar button - 'Parent',hToolbar,... - 'TooltipString','Plot the Samples',... - 'Separator', 'on', ... - 'Tag', 'off', ... - 'CData',iconRead(... - [DEFAULT_PATH_FILE 'tsg_icon' filesep 'bottleicon.mat']),... - 'HandleVisibility','callback', ... - 'ClickedCallback', @BottleMenuCallback); - - % Static text that displays the position, salinity and temperature - % ---------------------------------------------------------------- - hInfoText = uicontrol(... - 'Parent', hChild1Fig, ... - 'Style', 'text', ... - 'Fontsize', 12, ... - 'Fontweight', 'bold', ... - 'Visible','on',... - 'Units', 'normalized',... - 'String', 'Information sur la position du curseur', ... - 'Position', [.05, .95, .9, .03]); - - % Construct the plot axes - % ----------------------- - hPlotAxes(1) = axes(... % the axes for plotting Salinity - 'Parent', hChild1Fig, ... - 'Units', 'normalized', ... - 'Visible', 'on', ... - 'HandleVisibility','callback', ... - 'Position',[.25, .6, .7, .32]); - hPlotAxes(2) = axes(... % the axes for plotting temperature - 'Parent', hChild1Fig, ... - 'Units', 'normalized', ... - 'Visible', 'on', ... - 'HandleVisibility','callback', ... - 'Position',[.25, .3, .7, .25]); - hPlotAxes(3) = axes(... % the axes for plotting ship velocity - 'Parent', hChild1Fig, ... - 'Units', 'normalized', ... - 'Visible', 'on', ... - 'HandleVisibility','callback', ... - 'Position',[.25, .05, .7, .2]); - - % Choose the date limits for the correction - % -------------------------------------------------- - % Create the uipanel - hpDateLimit = uipanel( ... - 'Parent', hChild1Fig, ... - 'Title', 'Date Limits', ... - 'Units', 'normalized', ... - 'FontSize', 11, ... - 'Fontweight', 'bold', ... - 'BackgroundColor', 'white',... - 'Position',[.01 .75 .2 .19]); - - htDateMin = uicontrol( ... - 'Parent', hpDateLimit, ... - 'Style', 'Text', ... - 'String', 'Minimum (mm/dd/yyyy)', ... - 'HorizontalAlignment', 'left', ... - 'Units', 'normalized', ... - 'backgroundcolor', 'white', ... - 'FontSize', 10, ... - 'Position',[.05 .8 .9 .15]); - - hetDateMin = uicontrol( ... - 'Parent', hpDateLimit, ... - 'Style', 'edit', ... - 'Units', 'normalized', ... - 'FontSize', 10, ... - 'Position',[.05 .6 .9 .18]); - - htDateMax = uicontrol( ... - 'Parent', hpDateLimit, ... - 'Style', 'Text', ... - 'String', 'Maximum (mm/dd/yyyy)', ... - 'HorizontalAlignment', 'left', ... - 'Units', 'normalized', ... - 'backgroundcolor', 'white', ... - 'FontSize', 10, ... - 'Position',[.05 .3 .9 .15]); - - hetDateMax = uicontrol( ... - 'Parent', hpDateLimit, ... - 'Style', 'edit', ... - 'Units', 'normalized', ... - 'FontSize', 10, ... - 'Position',[.05 .1 .9 .18]); - - - % Choose the correction method - % -------------------------------------------------- - % Create the button group - hbgMethod = uibuttongroup( ... - 'Parent',hChild1Fig, ... - 'Title','Correction Method', ... - 'Units', 'normalized', ... - 'FontSize',11, ... - 'Fontweight', 'bold', ... - 'BackgroundColor','white',... - 'Position',[.01 .6 .2 .14]); - - % Create 2 radio buttons in the button group - hrbLinear = uicontrol( ... - 'Style','Radio', ... - 'Parent',hbgMethod, ... - 'Units', 'normalized', ... - 'String','Linear adjustment',... - 'pos',[.05 .55 .9 .4], ... - 'HandleVisibility','off'); - hrbMedian = uicontrol( ... - 'Style','Radio', ... - 'Parent',hbgMethod, ... - 'Units', 'normalized', ... - 'String','Running median filter',... - 'pos',[.05 .05 .9 .4],... - 'HandleVisibility','off'); - - % Initialize some button group properties - set(hbgMethod,'SelectionChangeFcn',@selcbk); - set(hbgMethod,'SelectedObject',[]); % No selection - set(hbgMethod,'Visible','on'); - - % Construct the context menu to delete samples - % -------------------------------------------- - hSampleCmenu = uicontextmenu(... - 'Parent', hChild1Fig, ... - 'HandleVisibility','callback' ); - hSampleCmenuDel = uimenu(... - 'Parent', hSampleCmenu,... - 'HandleVisibility','off', ... - 'Label', 'Delete',... - 'ForegroundColor', 'k',... - 'Callback', @QcDel); - hSampleCmenuNoDel = uimenu(... - 'Parent', hSampleCmenu,... - 'HandleVisibility','off', ... - 'Label', 'Keep',... - 'ForegroundColor', 'b',... - 'Callback', @QcKeep); - - % Initialisation - % -------------- - % tsg_initialisation(hMainFig, hQcCmenu) - -% Lecture fichier TSG -% ------------------- -% filename = 'F:\work\M_TsgQc\tsg_data\past0601.txt'; -% [tsg, error] = dev_readTsg( filename); - -% Lecture fichier bucket -% ----------------------- -% filename = 'F:\work\M_TsgQc\tsg_data\past0601.btl'; -% [bucketASCII, error] = dev_readBucket( filename); - -tsg = getappdata( hMainFig, 'tsg_data' ); -sample = getappdata( hMainFig, 'sample' ); - -% Salinity, in one 1 hour interval, should not depart the average for more -% than SAL_STD_MAX standard deviation -TSG_STDMAX = 0.1; - -% 1 hour interval expressed in MATLAB serial Number -TSG_DT_SMOOTH = datenum(0, 0, 0, 1, 0 , 0); - -% dt between 2 tsg measurements -TSG_SAMPLING_TIME = tsg.TIME(2) - tsg.TIME(1); - -% Period used to comput the correction -COR_TIME_WINDOWS = 10; - -% Running average of TSG time series over TSG_DT_SMOOTH hour. -[psal_smooth, nval] = ... - dev_moveaverage(tsg.TIME, tsg.PSAL, TSG_DT_SMOOTH, TSG_STDMAX); - -% Merge the 2 types of 'bucket' records, if they exists -%bucketNETCDF = bucketASCII; -%bucketNETCDF.TIME = bucketNETCDF.TIME + 1; -%bucketNETCDF.PSAL = bucketNETCDF.PSAL + 1; -%bucketNETCDF = struct([]); -%sample = dev_mergesample( bucketNETCDF, bucketASCII); - -% Compute the sample-TSG differences -sample = dev_diffTsgSample(tsg, psal_smooth, sample, TSG_SAMPLING_TIME); - -% Tracé -% ----- -tsg_plot_SalTsgSample( hMainFig, hPlotAxes ); - -% The callback to detect the mouse motion can be set to on -% -------------------------------------------------------- -set( hChild1Fig, 'Tag', 'ButtonMotionOn'); - - -% tsg = dev_corMethod1(tsg, sample, dateMin, dateMax, COR_TIME_WINDOWS); - - -% Callbacks for tsgcqc_GUI -% ************************ - - %---------------------------------------------------------------------- - function ZoomMenuCallback(hObject, eventdata) - % Callback function run when the ... - - % Returns a zoom mode object for the figure handle - % ------------------------------------------------ - hZoom = zoom(hChild1Fig); - - % Specifies whether this mode is currently enabled on the figure - % -------------------------------------------------------------- - zoomOnOff = get(hZoom, 'Enable' ); - switch zoomOnOff - case 'on' - zoom off - zoomAdaptiveDateTicks('off'); - case 'off' - pan off -% set(hQCPushtool, 'Tag', 'off' ); - - zoom on - zoomAdaptiveDateTicks('on'); - end - end - - %---------------------------------------------------------------------- - function PanMenuCallback(hObject, eventdata) - % Callback function run when the .... - - % Returns a pan mode object for the figure handle - % ----------------------------------------------- - hPan = pan(hChild1Fig); - - % Specifies whether this mode is currently enabled on the figure - % -------------------------------------------------------------- - panOnOff = get(hPan, 'Enable' ); - switch panOnOff - case 'on' - pan off - panAdaptiveDateTicks('off'); - case 'off' - zoom off -% set(hQCPushtool, 'Tag', 'off' ); - - pan on - panAdaptiveDateTicks('on'); - end - end - - %---------------------------------------------------------------------- - function QCMenuCallback(gcbo, eventdata,handles) - % Callback function run when the QC pushbutton is selected - - % Desactivate the Zoom and Pan functions. - % --------------------------------------- -% zoom off; pan off -% panAdaptiveDateTicks('off');zoomAdaptiveDateTicks('off'); - - % Retrieve named application data - % ------------------------------- -% tsg = getappdata( hMainFig, 'tsg_data'); - - % Toggle the tag of the Qc pushbutton to 'on' or 'off' - % ---------------------------------------------------- -% switch get(hQCPushtool, 'Tag'); -% case 'off' -% set(hQCPushtool, 'Tag', 'on' ); -% set(hPlotAxes(1),'UIContextMenu', hQcCmenu); -% set( hMainFig, 'Pointer', 'crosshair'); -% case 'on' -% set(hQCPushtool, 'Tag', 'off' ); -% set(hPlotAxes(1),'UIContextMenu', []); -% set(hMainFig,'Pointer','arrow'); -% end - -% qualityCode = -1; -% ind = []; -% while strcmp( get(hQCPushtool, 'Tag'),'on') - -% k = waitforbuttonpress; - - % If the QC pushbutton is pressed we quit the callback - % ---------------------------------------------------- -% if strcmp( get(hQCPushtool, 'Tag'),'off') - - % Desactivate the context menu use to choose the - % Quality Codes - % ---------------------------------------------- -% set(hQcCmenu, 'Visible', 'off'); -% break -% end - - % Test if the right mouse button is clicked - % ----------------------------------------- -% if strcmp(get(hMainFig, 'SelectionType'), 'alt') && ~isempty(ind) - % Wait for a QC Context Menu choice : The user choose the - % quality code - % ------------------------------------------------------- -% uiwait -% qualityCode = 1; - -% else - - % Mouse motion callback desactivated when a selection is - % made. Otherwise there is a conflict with the map if it - % is activated - % ------------------------------------------------------- -% set( hMainFig, 'Tag', 'ButtonMotionOff'); - - % 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 - -% ind = find(tsg.TIME > p1(1,1) & tsg.TIME < p2(1,1) & ... -% tsg.PSAL > p1(1,2) & tsg.PSAL < p2(1,2)); - - % As soon as a modification took place the data should be - % saved - % ------------------------------------------------------- -% set( hSaveMenu, 'Tag', 'on' ); - - % Selection made : Mouse motion callback re-activated - % -------------------------------------------------- -% set( hMainFig, 'Tag', 'ButtonMotionOn'); - -% end - - % Plot the data with the color of the chosen quality Code. - % Is it the right place for this source code ???? - % -------------------------------------------------------- -% if qualityCode ~= -1 - -% quality = get( hQcCmenu, 'UserData'); - -% tsg.PSAL_QC(ind) = quality.Code; - - % Save the modifications - % ---------------------- -% setappdata( hMainFig, 'tsg_data', tsg); - -% axes(hPlotAxes(1)); -% hold on -% color = ['.' quality.Color]; -% plot(tsg.TIME(ind), tsg.PSAL(ind), color ); -% hold off - -% end -% end - end - - %--------------------------------------------------------------------- - function QcDel(hObject, eventdata) - % Callback function run when the QC context menu is selected - - % Retrieve Default Quality Code and Color - % --------------------------------------- - %qc = getappdata( hMainFig, 'qcColor'); - - %quality.Code = qc.Code.NO_CONTROL; - %quality.Color = qc.Color.NO_CONTROL; - %set( hQcCmenu, 'UserData', quality ); - - % uiwait in the QCMenuCallback function - % ------------------------------------- - %uiresume - end - - %--------------------------------------------------------------------- - function QcKeep(hObject, eventdata) - % Callback function run when the QC context menu is selected - - % Retrieve named application data - % ------------------------------- - %qc = getappdata( hMainFig, 'qcColor'); - - %quality.Code = qc.Code.GOOD; - %quality.Color = qc.Color.GOOD; - %set( hQcCmenu, 'UserData', quality ); - - % uiwait in the QCMenuCallback function - % ------------------------------------- - %uiresume - end - - %--------------------------------------------------------------------- - function MouseMotion(hObject, eventdata) - - % Test if the callback can be activated - % ------------------------------------- - if strcmp( get( hChild1Fig, 'Tag'), 'ButtonMotionOn') - - % Retrieve named application data - % ------------------------------- - tsg = getappdata( hMainFig, 'tsg_data'); - - % Get the mouse position - % ---------------------- - point = get(gcf,'CurrentPoint'); - - if point(1) > .05 && point(2) > .6 && point(1) < .95 && point(2) < .92 - - % Get current position of cusor and return its coordinates in - % axes with handle h_axes - % ----------------------------------------------------------- - [x, y] = gpos(hPlotAxes(1)); - - if x > tsg.TIME(1) && x < tsg.TIME(end) - - indCursor = find( tsg.TIME > x); - % use sprintf with format instead strcat & num2str but flag - % - don't work with 0, eg %+07.4f - set( hInfoText, 'String',... - sprintf(['%s - Latitude = %s - Longitude = %s '... - ' - Salinity = %07.4f - Temperature = %07.4f'],... - datestr(tsg.TIME(indCursor(1)),'dd/mm/yyyy HH:MM'),... - dd2dm(tsg.LATITUDE(indCursor(1)),0), ... - dd2dm(tsg.LONGITUDE(indCursor(1)),1), ... - tsg.PSAL(indCursor(1)), ... - tsg.TEMP_TSG(indCursor(1))... - )); - - end - end - end - end - - %--------------------------------------------------------------------- - function BottleMenuCallback(hObject, eventdata) - % Callback function run when the Bottle tool bar item is selected - % - % Plot or Delete the buckets measurements on the Salinity graph - % - % Need to read them right now - but they will be soon in the NetCdf - % file - - % Test if the sample Push button has been pressed - % ----------------------------------------------- -% if strcmp( get(hBottlePushtool, 'Tag'), 'off') - - % Sample Push button - Tag set to 'on' - % ------------------------------------ -% set( hBottlePushtool, 'Tag', 'on' ); - - % Retrieve named application data - % ------------------------------- -% sample = getappdata( hMainFig, 'sample'); -% hLine = get( hPlotAxes(1), 'UserData'); - - - % Plot the samples if the TSG file has been read - % ---------------------------------------------- -% if strcmp( get(hOpenMenu, 'Tag'), 'on' ) && ~isempty( sample ) -% axes( hPlotAxes(1) ); -% hLine.Sample = line( ... -% sample.TIME, sample.PSAL,... -% 'Linestyle', 'none', 'Marker','o','MarkerSize',5, ... -% 'Color','r', 'MarkerFaceColor','r'); - - % Store the handle of the bucketline - % ---------------------------------- -% set( hPlotAxes(1), 'UserData', hLine ); -% end - -% else - -% set( hBottlePushtool, 'Tag', 'off' ); - - % The bucket pushbutton has been pressed again : - % Delete the bucket on figure - % ---------------------------------------------- -% hLine = get( hPlotAxes(1), 'UserData'); -% if ~isempty( hLine ) && ishandle( hLine.Sample ) -% delete(hLine.Sample); -% end -% end - end - - - % ----------------------------------------------------------------- - function SaveMenuCallback(hObject, eventdata) - % Callback function run when the Save menu item is selected - -% [fileName, pathName, filterIndex] = uiputfile('*.txt', ... -% 'Save file name'); - -% fileName = [pathName fileName]; -% error = tsg_writeTsgData( hMainFig, fileName ); -% if ~error - % -% end - end - - - % ----------------------------------------------------------------- - function QuitMenuCallback(hObject, eventdata) - % Callback function run when the Quit menu item is selected - - % If the data have been modified and not save, the program - % propose to save the data - % -------------------------------------------------------- - if strcmp( get( hSaveMenu, 'Tag' ), 'on') - selection = ... - questdlg('The file has been modified. Do you want to save it ?',... - 'Save before Quit?',... - 'Yes', 'No', 'Yes'); - if strcmp(selection, 'Yes') - return; - else - QuitProgram; - end - else - selection = ... - questdlg(['Quit ' get(hChild1Fig, 'Name') '?'],... - ['Quit ' get(hChild1Fig, 'Name') '?'],... - 'Yes', 'No', 'Yes'); - if strcmp(selection, 'No') - return; - else - QuitProgram; - end - end - - end - - % ---------------------------------------------------------------- - function QuitProgram(hObject, eventdata) - - delete(hChild1Fig); - - end - -end diff --git a/tsg_util/tsg_initialisation.m b/tsg_util/tsg_initialisation.m index 6d3019f..cf501c3 100644 --- a/tsg_util/tsg_initialisation.m +++ b/tsg_util/tsg_initialisation.m @@ -3,7 +3,8 @@ function tsg_initialisation(hTsgGUI, hQcCmenu) % Input % ----- % hTsgGUI ............ Handel to the main user interface -% hQcCmenu ........... Handel to the QC code context menu +% hQcCmenu ........... Handel to the QC code context menu +% % Output % ------ % $Id$ @@ -43,22 +44,22 @@ setappdata( hTsgGUI, 'qcColor', qc); % Smoothing of tsg time series over 1 hour interval % 1 hour interval expressed in MATLAB serial Number % ------------------------------------------------- -const.TSG_DT_SMOOTH = datenum(0, 0, 0, 1, 0 , 0); +cst.TSG_DT_SMOOTH = datenum(0, 0, 0, 1, 0 , 0); % Smoothing of tsg time series : % Salinity, in one 1 hour interval, should not depart the average for more % than SAL_STD_MAX standard deviation % ----------------------------------------------------------------------- -const.TSG_STDMAX = 0.1; +cst.TSG_STDMAX = 0.1; % Correction is estimated by computing the median value of X tsg-sample % differences % Amount of days used to compute the correction % --------------------------------------------------------------------- -const.COR_TIME_WINDOWS = 10; +cst.COR_TIME_WINDOWS = 10; % store the 'const' structure as an application data % -------------------------------------------------- -setappdata( hTsgGUI, 'constante', const); +setappdata( hTsgGUI, 'constante', cst); end diff --git a/tsg_util/tsg_plot_SalTsgSample.m b/tsg_util/tsg_plot_SalTsgSample.m index dd7ab95..df1f5a0 100644 --- a/tsg_util/tsg_plot_SalTsgSample.m +++ b/tsg_util/tsg_plot_SalTsgSample.m @@ -42,23 +42,39 @@ plot(hAxes(1), tsg.TIME(ind), tsg.PSAL(ind), ... ind = find(tsg.PSAL_QC == qc.Code.BAD ); plot(hAxes(1), tsg.TIME(ind), tsg.PSAL(ind), ... strcat('.',qc.Color.BAD)); + +% Plot salinity sample on TSG plot +% -------------------------------- +if ~isempty(sample) + plot(hAxes(1), sample.TIME, sample.PSAL, 'r*'); +end + % Plot sample measurements % ------------------------ -plot(hAxes(2), sample.TIME, sample.PSAL, '.'); +ind = find( sample.TYPE == 1); +if ~isempty( ind ) + plot(hAxes(2), sample.TIME(ind), sample.PSAL(ind), '.'); +end +ind = find( sample.TYPE == 2); +if ~isempty( ind ) + plot(hAxes(2), sample.TIME(ind), sample.PSAL_DIF(ind), 'o'); +end %plot(hAxes(3), tsg.TIME, tsg.TEMP_TSG, '.'); % Formatted x-TIME axes % --------------------- datetick(hAxes(1), 'x'); +get(hAxes(1), 'Xlim'); datetick(hAxes(2), 'x'); +set(hAxes(2), 'Xlim', get(hAxes(1), 'Xlim')); %datetick(hAxes(3), 'x'); % Write some 'Y' label % ------------------ set(get(hAxes(1), 'Ylabel'), 'String', 'Salinity'); -set(get(hAxes(2), 'Ylabel'), 'String', 'Salinity (samples'); +set(get(hAxes(2), 'Ylabel'), 'String', 'Salinity Difference'); %set(get(hAxes(3), 'Ylabel'), 'String', 'Ship Velocity'); % Make the axes visible diff --git a/tsgcor_GUI.m b/tsgcor_GUI.m index 690a379..62657e3 100644 --- a/tsgcor_GUI.m +++ b/tsgcor_GUI.m @@ -222,19 +222,23 @@ function tsgcor_GUI( hMainFig ) % Create 2 radio buttons in the button group hrbLinear = uicontrol( ... - 'Style','Radio', ... + 'Style','pushbutton', ... 'Parent',hbgMethod, ... 'Units', 'normalized', ... 'String','Linear adjustment',... 'pos',[.05 .55 .9 .4], ... - 'HandleVisibility','off'); + 'HandleVisibility','callback', ... + 'Callback', @CorLinearCallback); + hrbMedian = uicontrol( ... - 'Style','Radio', ... + 'Style','pushbutton', ... 'Parent',hbgMethod, ... 'Units', 'normalized', ... 'String','Running median filter',... 'pos',[.05 .05 .9 .4],... - 'HandleVisibility','off'); + 'HandleVisibility','callback', ... + 'Callback', @CorMedianCallback); + % Initialize some button group properties set(hbgMethod,'SelectionChangeFcn',@selcbk); @@ -269,6 +273,11 @@ tsg = getappdata( hMainFig, 'tsg_data' ); sample = getappdata( hMainFig, 'sample' ); cst = getappdata( hMainFig, 'constante'); +dateMin = datestr(tsg.TIME(1), 23); +dateMax = datestr(tsg.TIME(end), 23); +set( hetDateMin, 'String', dateMin); +set( hetDateMax, 'String', dateMax); + % dt between 2 tsg measurements TSG_SAMPLING_TIME = tsg.TIME(2) - tsg.TIME(1); @@ -290,14 +299,9 @@ tsg_plot_SalTsgSample( hMainFig, hPlotAxes ); % ---------------------- set( hChild1Fig, 'Pointer', 'arrow' ); - % The callback to detect the mouse motion can be set to on % -------------------------------------------------------- set( hChild1Fig, 'Tag', 'ButtonMotionOn'); - - -% tsg = dev_corMethod1(tsg, sample, dateMin, dateMax, cst.COR_TIME_WINDOWS); - % Callbacks for tsgcqc_GUI % ************************ @@ -601,7 +605,36 @@ set( hChild1Fig, 'Tag', 'ButtonMotionOn'); % end end + % ----------------------------------------------------------------- + function CorLinearCallback(hObject, eventdata) + % Callback function run when + + msgbox('Method not yet implemented', 'modal' ); + + end + + % ----------------------------------------------------------------- + function CorMedianCallback(hObject, eventdata) + % Callback function run when + + msgbox('Method not yet implemented', 'modal' ); + + % Get the time limits for the correction A TESTER + % -------------------------------------- + %dateMin = get( hetDateMin, 'String'); + %dateMax = get( hetDateMax, 'String'); + + % Correction + % ---------- + % tsg = dev_corMethod1(tsg, sample, dateMin, dateMax, cst.COR_TIME_WINDOWS); + % Update application data 'tsg' + % ---------------------------- + %tsg = getappdata( hMainFig, 'tsg_data' ); + + end + + % ----------------------------------------------------------------- function QuitMenuCallback(hObject, eventdata) % Callback function run when the Quit menu item is selected diff --git a/tsgqc_GUI.m b/tsgqc_GUI.m index 6bf087d..ab23dae 100644 --- a/tsgqc_GUI.m +++ b/tsgqc_GUI.m @@ -315,19 +315,19 @@ function tsgqc_GUI tsg_plotmap( hMainFig, hPlotAxes) end - - % Merge the different water sample (NetCdf or ASCII files) in - % a unique structure : 'sample' - % ----------------------------------------------------------- - if error2 ~= -1 - [sample] = tsg_mergesample( hMainFig ); - - % Save the 'sample' struct. as an application data - % ------------------------------------------------ - setappdata( hMainFig, 'sample', sample ); - end end + + % Merge the different water sample (NetCdf or ASCII files) in + % a unique structure : 'sample' + % ----------------------------------------------------------- + [sample] = tsg_mergesample( hMainFig ); + % Save the 'sample' struct. as an application data + % ------------------------------------------------ + if ~isempty( sample ) + setappdata( hMainFig, 'sample', sample ); + end + % Pointer reset to arrow % ---------------------- set( hMainFig, 'Pointer', 'arrow' ); @@ -566,7 +566,7 @@ function tsgqc_GUI quality.Code = qc.Code.BAD; quality.Color = qc.Color.BAD; - set( hQcCmenu, 'UserData', quality ); + set( hQcCmenu, 'UserData', quality ); % uiwait in the QCMenuCallback function % ------------------------------------- @@ -674,12 +674,12 @@ function tsgqc_GUI % Call the GUI for tsg correction % ------------------------------- - msgbox('The correction module has not been implemented'); - %dev_tsgcor_GUI( hMainFig ); + %msgbox('The correction module has not been implemented', 'modal'); + tsgcor_GUI( hMainFig ); else - msgbox('TSG or Sample data not loaded in the program'); + msgbox('TSG or Sample data not loaded in the program', 'modal'); end -- GitLab