Skip to content
Snippets Groups Projects
Commit 553f5222 authored by Yves Gouriou's avatar Yves Gouriou
Browse files

Module de correction de smesures TSG - En developpement pas encore inclu dans le prgme principal

parent cbb95337
No related branches found
No related tags found
No related merge requests found
function dev_tsgcor_GUI
% 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.1;
guiLimits(3) = guiLimits(3) - 0.15;
guiLimits(4) = guiLimits(4) - 0.25;
% 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);
% 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
% -----
axes(hPlotAxes(1));
% 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( hChild1Fig, '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);
% reset Matlab search path to default
rmpath( [DEFAULT_PATH_FILE filesep 'tsg_util'] );
rmpath( [DEFAULT_PATH_FILE filesep 'tsg_data'] );
rehash;
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment