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