From b2b3de10c55f2ec6921d4c5eb4a59c7bb999dd9b Mon Sep 17 00:00:00 2001
From: Jacques Grelet <jacques.grelet@ird.fr>
Date: Sat, 28 Jan 2017 06:27:58 +0000
Subject: [PATCH] move quitProgram as nested function in tsgqc resolve problem
 with icons path under R2016b compiler need to tested with R2012b compiler
 remove debug info in readTsgIniLabview.m

---
 compiler/Windows (x64)/R2016b/tsgqc.prj |   87 +-
 tsg_io/readTsgIniLabview.m              |    6 +-
 tsg_util/quitProgram.m                  |   42 -
 tsg_util/tsg_preferences.m              |    9 +-
 tsgqc.m                                 | 1135 ++++++++++++-----------
 5 files changed, 678 insertions(+), 601 deletions(-)
 delete mode 100644 tsg_util/quitProgram.m

diff --git a/compiler/Windows (x64)/R2016b/tsgqc.prj b/compiler/Windows (x64)/R2016b/tsgqc.prj
index 3dc7259..d632163 100644
--- a/compiler/Windows (x64)/R2016b/tsgqc.prj	
+++ b/compiler/Windows (x64)/R2016b/tsgqc.prj	
@@ -1,9 +1,9 @@
 <deployment-project plugin="plugin.ezdeploy" plugin-version="1.0">
-  <configuration build-checksum="3362879886" file="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc.prj" location="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b" name="tsgqc" preferred-package-location="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc\for_redistribution" preferred-package-type="package.type.exe" target="target.ezdeploy.standalone" target-name="Application Compiler">
+  <configuration build-checksum="1123329992" file="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc.prj" location="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b" name="tsgqc" preferred-package-location="C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc\for_redistribution" preferred-package-type="package.type.exe" target="target.ezdeploy.standalone" target-name="Application Compiler">
     <param.appname>tsgqc</param.appname>
     <param.icon />
     <param.icons />
-    <param.version>1.45</param.version>
+    <param.version>1.46</param.version>
     <param.authnamewatermark>Jacques Grelet</param.authnamewatermark>
     <param.email>Jacques.Grelet@ird.fr</param.email>
     <param.company>IRD</param.company>
@@ -31,7 +31,7 @@
     <param.web.mcr.name>MyAppInstaller_web</param.web.mcr.name>
     <param.package.mcr.name>MyAppInstaller_mcr</param.package.mcr.name>
     <param.no.mcr.name>MyAppInstaller_app</param.no.mcr.name>
-    <param.windows.command.prompt>true</param.windows.command.prompt>
+    <param.windows.command.prompt>false</param.windows.command.prompt>
     <param.create.log>false</param.create.log>
     <param.log.file />
     <unset>
@@ -57,16 +57,91 @@
       <param.web.mcr.name />
       <param.package.mcr.name />
       <param.no.mcr.name />
-      <param.windows.command.prompt />
       <param.create.log />
       <param.log.file />
     </unset>
     <fileset.main>
       <file>C:\svn\tsg-qc\trunk\tsgqc.m</file>
     </fileset.main>
-    <fileset.resources />
+    <fileset.resources>
+      <file>C:\svn\oceano\lib\matlab\isas13_annual_surf.nc</file>
+      <file>C:\svn\oceano\lib\matlab\isas13_monthly_surf.nc</file>
+      <file>C:\svn\oceano\lib\matlab\isas13_seasonal_surf.nc</file>
+      <file>C:\svn\oceano\lib\matlab\woa01_annual_surf.nc</file>
+      <file>C:\svn\oceano\lib\matlab\woa01_monthly_surf.nc</file>
+      <file>C:\svn\oceano\lib\matlab\woa01_seasonal_surf.nc</file>
+      <file>C:\svn\oceano\lib\matlab\woa05_annual_surf.nc</file>
+      <file>C:\svn\oceano\lib\matlab\woa05_monthly_surf.nc</file>
+      <file>C:\svn\oceano\lib\matlab\woa05_seasonal_surf.nc</file>
+      <file>C:\svn\tsg-qc\trunk\@dynaload</file>
+      <file>C:\svn\tsg-qc\trunk\@hashtable</file>
+      <file>C:\svn\tsg-qc\trunk\@kml</file>
+      <file>C:\svn\tsg-qc\trunk\@kmlAnimation</file>
+      <file>C:\svn\tsg-qc\trunk\@netcdf_native</file>
+      <file>C:\svn\tsg-qc\trunk\@node</file>
+      <file>C:\svn\tsg-qc\trunk\@stack</file>
+      <file>C:\svn\tsg-qc\trunk\@tsg_nc</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_data</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\bottleicon.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\climicon.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\delbottleicon.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\Google-Earth-icon.gif</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\hdricon.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\interp.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\mapicon.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\outils.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\pan.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\printdoc.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\qcicon.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\reporticon.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\savedoc.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\selecttime.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\Thermo.jpg</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_icon\zoom.mat</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_io</file>
+      <file>C:\svn\tsg-qc\trunk\tsg_util</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\m_map</file>
+    </fileset.resources>
     <fileset.package />
-    <fileset.depfun />
+    <fileset.depfun>
+      <file>${MATLAB_ROOT}\toolbox\matlab\demos\topo.mat</file>
+      <file>C:\svn\oceano\lib\matlab\dd2dm.m</file>
+      <file>C:\svn\oceano\lib\matlab\medianf.m</file>
+      <file>C:\svn\oceano\lib\matlab\tbase.m</file>
+      <file>C:\svn\oceano\lib\matlab\to_date.m</file>
+      <file>C:\svn\oceano\lib\matlab\to_day.m</file>
+      <file>C:\svn\oceano\lib\matlab\to_sec.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\camera.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\captureScreen.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\colorbar.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\contour.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\contour3.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\contourf.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\createFolder.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\kml.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\model.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\modelTour.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\newAnimation.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\newFolder.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\overlay.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\parseIconURL.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\plot.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\plot3.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\point.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\poly.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\poly3.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\polyMap.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\quadoverlay.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\quiver.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\quiver3d.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\scatter.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\scatter3.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\screenoverlay.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\surf.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\text.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kml\transfer.m</file>
+      <file>C:\Users\jgrelet\Matlab\toolbox\kml_toolbox\@kmlAnimation\kmlAnimation.m</file>
+    </fileset.depfun>
     <build-deliverables>
       <file location="${PROJECT_ROOT}\tsgqc\for_testing" name="tsgqc.exe" optional="false">C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc\for_testing\tsgqc.exe</file>
       <file location="${PROJECT_ROOT}\tsgqc\for_testing" name="splash.png" optional="false">C:\svn\tsg-qc\trunk\compiler\Windows (x64)\R2016b\tsgqc\for_testing\splash.png</file>
diff --git a/tsg_io/readTsgIniLabview.m b/tsg_io/readTsgIniLabview.m
index dbd1111..19e0168 100644
--- a/tsg_io/readTsgIniLabview.m
+++ b/tsg_io/readTsgIniLabview.m
@@ -79,7 +79,7 @@ while ~feof(fid)
         
         % for debbuging only
         % ------------------
-        fprintf('%s -> %s\n', clef, tsg.(clef));
+        %fprintf('%s -> %s\n', clef, tsg.(clef));
         continue
       end
       
@@ -154,7 +154,7 @@ while ~feof(fid)
             
             % for debbuging only
             % ------------------
-            fprintf('%s => %s\n', clef, tsg.(clef));
+            %fprintf('%s => %s\n', clef, tsg.(clef));
             
           case 2
             
@@ -166,7 +166,7 @@ while ~feof(fid)
             
             % for debbuging only
             % ------------------
-            fprintf('%s => %f\n', clef, tsg.(clef));
+            %fprintf('%s => %f\n', clef, tsg.(clef));
             
         end
         
diff --git a/tsg_util/quitProgram.m b/tsg_util/quitProgram.m
deleted file mode 100644
index b5405c9..0000000
--- a/tsg_util/quitProgram.m
+++ /dev/null
@@ -1,42 +0,0 @@
-function quitProgram(DEFAULT_PATH_FILE, varargin)
-% QUITPROGRAM Exit tsgqc_GUI application
-%
-% Input
-% -----
-% hTsgGUI ............ Handel to the main user interface
-%
-% Output
-% ------
-% none
-%
-% $Id$
-
-% close all windows
-% -----------------
-for i=1:size(varargin,2)
-  delete(varargin{i});
-end
-
-% reset userdata property of root Matalab object (0) for next use
-% ---------------------------------------------------------------
-set(0, 'userdata', []);
-
-% reset Matlab search path to default
-% addpath isn't mandatory and failed with compiled applications
-% --------------------------------------------------------------
-if (~isdeployed)
-    rmpath( [DEFAULT_PATH_FILE filesep 'tsg_util'] );
-    rmpath( [DEFAULT_PATH_FILE filesep 'tsg_data'] );
-    rmpath( [DEFAULT_PATH_FILE filesep 'tsg_io'] );
-end
-
-% Refresh file system caches
-% --------------------------
-rehash;
-
-% clear base workspace just before quit, this is the only method
-% to clear NetCDF variables assign to base workspace with assignin
-% ----------------------------------------------------------------
-evalin('base','clear all');
-
-end
diff --git a/tsg_util/tsg_preferences.m b/tsg_util/tsg_preferences.m
index 04eb35d..7d90b30 100644
--- a/tsg_util/tsg_preferences.m
+++ b/tsg_util/tsg_preferences.m
@@ -1,4 +1,4 @@
-function tsg_preferences(hTsgGUI, app_name, DEFAULT_PATH_FILE)
+function ok = tsg_preferences(hTsgGUI, app_name, DEFAULT_PATH_FILE)
 % tsg_preferences(S1,S2) returns structure tsg saved in S1.mat file
 % and with S2 internal version number.
 % If S1.mat dosn't exist, call tsg_initialisation to create it in
@@ -11,7 +11,7 @@ function tsg_preferences(hTsgGUI, app_name, DEFAULT_PATH_FILE)
 %
 % Output
 % ------
-% none
+% boolean
 %
 % $Id$
 
@@ -73,7 +73,8 @@ switch fid
       
       % quit program
       % ------------
-      quitProgram(DEFAULT_PATH_FILE, hTsgGUI);
+      ok = false;
+      return 
       
     end
     
@@ -119,6 +120,8 @@ close(wb)
 % ---------------------
 set(hTsgGUI,'Pointer','arrow');
 
+ok = true;
+return 
 
 % ----------------------------------------------------------------------
 % nested function new_config
diff --git a/tsgqc.m b/tsgqc.m
index bc382b3..e581751 100644
--- a/tsgqc.m
+++ b/tsgqc.m
@@ -38,9 +38,9 @@ global GOSUD_FORMAT_VERSION
 % version number, may be used to initialize some files when it change
 % 0.90x -> 1.0RCx
 % -------------------------------------------------------------------
-VERSION      = 1.450;  % -> 1.44
-CHAR_VERSION = '1.450';
-DATE_VERSION = 'july 5 2016';
+VERSION      = 1.460;  % -> 1.44
+CHAR_VERSION = '1.460';
+DATE_VERSION = 'january 27 2017';
 
 % netcdf file version, see DATA FORMAT TSG document:
 % CORTSG_format_gosud.doc
@@ -63,24 +63,33 @@ tsgqcname = mfilename;
 fulltsgqcname = mfilename('fullpath');
 
 % regular expression expr if it occurs at the end of the input string
+% on windows: 'tsgqc\\?$', linux: 'tsgqc/?$' 
 % -------------------------------------------------------------------
-expr = strcat(tsgqcname, '$');
+if ispc
+  expr = strcat(tsgqcname, filesep, filesep, '?$');
+else
+  expr = strcat(tsgqcname, filesep, '?$');
+end
 
 % get pathname
 % ------------
 DEFAULT_PATH_FILE =  regexprep(fulltsgqcname, expr, '');
+if (isdeployed)
+  DEFAULT_PATH_FILE =  regexprep(DEFAULT_PATH_FILE, expr, '');
+end
+DEFAULT_PATH_FILE
 
 % update Matlab pathdef only for session
 % addpath isn't mandatory and failed with compiled applications
 % -------------------------------------------------------------
 if (~isdeployed)
-    p = [pathsep,...
-        DEFAULT_PATH_FILE,[ 'tsg_util' pathsep],...
-        DEFAULT_PATH_FILE,[ 'tsg_data' pathsep],...
-        DEFAULT_PATH_FILE,[ 'tsg_io'   pathsep]
-        ];
-    addpath( p, '-end' );
-    rehash;
+  p = [pathsep,...
+    DEFAULT_PATH_FILE,[ 'tsg_util' pathsep],...
+    DEFAULT_PATH_FILE,[ 'tsg_data' pathsep],...
+    DEFAULT_PATH_FILE,[ 'tsg_io'   pathsep]
+    ];
+  addpath( p, '-end' );
+  rehash;
 end
 
 % define 'HandleVisibility' property for all objects
@@ -91,7 +100,7 @@ handleVisibility = 'on';
 % % ------------------------------
 % set(0,'Units','pixels');
 % screenSize = get(0,'ScreenSize');
-% 
+%
 % % set default font size
 % % ---------------------
 % if screenSize(3) <= 1024
@@ -143,14 +152,14 @@ if strcmp(display, 'on')
   fprintf('inputFile: %s\noutpuFile: %s\n', inputFile, outputFile);
   return;
 end
- 
+
 % if property help is set to on, display help and quit
 % -----------------------------------------------------------
 if strcmp(help, 'on')
   fprintf('tsgqc\n');
   fprintf('tsgqc(inputfile,<file>, outputfile, <file>)\n');
   fprintf('tsgqc(inputfile,<file>, outputfile, <file>),''display'',''on''\n');
-  fprintf('tsgqc(''help'',''on'')\n'); 
+  fprintf('tsgqc(''help'',''on'')\n');
   return;
 end
 
@@ -164,13 +173,13 @@ 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.
@@ -190,7 +199,7 @@ hMainFig = figure(...
   'Units', 'normalized',...
   'Position',guiLimits, ...
   'Color', get( 0, 'DefaultUIControlBackgroundColor' ));
-  
+
 %% Check Matlab version for use of KeyPressFcn and KeyReleaseFcn properties
 % -------------------------------------------------------------------------
 switch ( version('-release') )
@@ -198,15 +207,17 @@ switch ( version('-release') )
     % dont process KeyPressFcn and KeyReleaseFcn events
   otherwise
     
-   % show crossline when shitf key is pressed, vertical bar when ctrl key
-   % --------------------------------------------------------------------
-   set( hMainFig, 'KeyPressFcn',   @keyPressFcnCallback,...
-                  'KeyReleaseFcn', @keyReleaseFcnCallback);
-end  
+    % show crossline when shitf key is pressed, vertical bar when ctrl key
+    % --------------------------------------------------------------------
+    set( hMainFig, 'KeyPressFcn',   @keyPressFcnCallback,...
+      'KeyReleaseFcn', @keyReleaseFcnCallback);
+end
 
 %% Initialize tsg structure with tsg_preference function
 % -----------------------------------------------------
-tsg_preferences(hMainFig, tsgqcname, DEFAULT_PATH_FILE);
+if ~tsg_preferences(hMainFig, tsgqcname, DEFAULT_PATH_FILE)
+  quitProgram(DEFAULT_PATH_FILE, hMainFig, hMapFig);
+end
 
 % Retrieve named application data
 % -------------------------------
@@ -810,17 +821,17 @@ count = 0;
 % iterate (loop) on each key store inside hastable
 % ------------------------------------------------
 for key = qc_list
-
+  
   % get key and some values in hashtable tsg.qc.hash
   % ------------------------------------------------
   label = tsg.qc.hash.(key).label;
   color = tsg.qc.hash.(key).color;
   state = 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(...
@@ -829,7 +840,7 @@ for key = qc_list
       'Label', label,...
       'ForegroundColor', color,...
       'Callback', {@Qc, key});
-
+    
     % add button QC to hbgQc uibuttongroup
     % ------------------------------------
     uicontrol(...
@@ -841,7 +852,7 @@ for key = qc_list
       'String', label,...
       'Tag', ['TAG_QC_RADIO_' char(key)], ...
       'Units', 'normalized', 'Position', [.01, .85-count*.12, .6, 0.09]);
-
+    
     % add text QC display statistic on hQcPanel
     % -----------------------------------------
     uicontrol(...
@@ -853,7 +864,7 @@ for key = qc_list
       'String', 'N/A ',...
       'Tag', ['TAG_QC_TEXT_' char(key)],...
       'Units', 'normalized', 'Position', [.61, .85-count*.12, .37, 0.09]);
-
+    
     % increment count
     % ---------------
     count = count + 1;
@@ -880,23 +891,23 @@ count = 0;
 % iterate (loop) on each key store inside hastable
 % ------------------------------------------------
 for key = qc_list
-
+  
   % get key and some values in hashtable tsg.qc.hash
   % ------------------------------------------------
   label = tsg.qc.hash.(key).label;
   color = tsg.qc.hash.(key).color;
   state = tsg.qc.hash.(key).state;
-
+  
   value = 0;
   if strcmp(char(key), 'HARBOUR') || strcmp(char(key), 'GOOD') ||...
       strcmp(char(key), 'PROBABLY_GOOD')
     value = 1;
   end
-
+  
   % construct context menu with only code set to 'on' (valid)
   % ---------------------------------------------------------
   if strcmp( state, 'on')
-
+    
     % add button QC to hbgQc uibuttongroup
     % ------------------------------------
     cbCorr(i) = uicontrol(...
@@ -908,7 +919,7 @@ for key = qc_list
       'Tag',  ['TAG_CHECK_CORRECTION_' char(key)], ...
       'HandleVisibility', 'on',...
       'Units', 'normalized', 'Position', [.01, .85-count*.12, .6, 0.09]);
-
+    
     % increment count
     % ---------------
     count = count + 1;
@@ -1227,7 +1238,7 @@ hrbInterpCancel = uicontrol( ...
 
 %
 % end of main function (GUI definition)
-% 
+%
 
 %% *************************** CALLBACKS **********************************
 %  All following callback are in nested functions
@@ -1236,7 +1247,7 @@ hrbInterpCancel = uicontrol( ...
 %% OpenMenuCallback function run when the Open menu item is selected
 %----------------------------------------------------------------------
   function OpenMenuCallback(hObject, eventdata)
-
+    
     % Activate or desactivate uipanels
     % --------------------------------
     set( hpCalCoef,            'Visible', 'off' );
@@ -1244,7 +1255,7 @@ hrbInterpCancel = uicontrol( ...
     set( hpInterpPos,          'Visible', 'off' );
     %     set( hMapFig,            'Visible', 'off' );
     %    set( hbgParameter,         'Visible', 'off');
-
+    
     % Toggle button
     % -------------
     set( hBottleToggletool,    'state', 'off' );
@@ -1256,93 +1267,93 @@ hrbInterpCancel = uicontrol( ...
     %     set( hMapToggletool,       'state', 'off' );
     set( hTimelimitToggletool, 'state', 'off' );
     %    set( hZoomToggletool,      'state', 'off' );
-
+    
     % Open standard dialog box for retrieving files
     % ---------------------------------------------
     fileExtension = ({'*.lbv';'*.nc';'*.arg';'*.ast';'*.btl';'*.ora';...
       '*.sdf';'*.spl'; '*.transmit*'; '*.tsgqc';'*.xml';'*.cnv'});
     [fileName, pathname, filterIndex] = uigetfile( fileExtension, '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, errSpl] = read_data( hMainFig, char(fileExtension(filterIndex)), fullFileName);
-
+      [errTsg, errSpl] = read_data( hMainFig, char(fileExtension(filterIndex)), fullFileName);
+      
       % Get the tsg structure
       % ---------------------
       tsg = getappdata( hMainFig, 'tsg_data');
-
+      
       % Keep the pathname of the tsgqc m_file
       % -------------------------------------
-      tsgqcname = mfilename;
-      fulltsgqcname = mfilename('fullpath');
-      tsg.DEFAULT_PATH_FILE = strrep(fulltsgqcname, tsgqcname, '') ;
-      setappdata( hMainFig, 'tsg_data', tsg);
-
+%       tsgqcname = mfilename;
+%       fulltsgqcname = mfilename('fullpath');
+%       tsg.DEFAULT_PATH_FILE = strrep(fulltsgqcname, tsgqcname, '') ;
+%       setappdata( hMainFig, 'tsg_data', tsg);
+      
       % 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');
         set(hQCMenu, 'Enable', 'on');
-
+        
         % update some fields in tsg structure and restore tsg
         % ---------------------------------------------------
-%         updateTsgStruct(hMainFig );
-%         tsg = getappdata( hMainFig, 'tsg_data');
-
+        %         updateTsgStruct(hMainFig );
+        %         tsg = getappdata( hMainFig, 'tsg_data');
+        
         % update the filename display
         % ---------------------------
         set( hInfoFileText, 'String', strcat(tsg.file.name, tsg.file.ext));
-
+        
         % The callback to detect the mouse motion can be set to on
         % --------------------------------------------------------
         set( hMainFig, 'UserData', 'ButtonMotionOn');
-
+        
         % Update QC statistics
         % --------------------
         display_QC( hMainFig );
-
+        
         % Initialise the popupmenu displaying the parameters that can be
         % plot
         % --------------------------------------------------------------
         initParameterChoice( hMainFig, pmhPara );
         tsg = getappdata( hMainFig, 'tsg_data');
-
+        
         % Test if there is records with the same date and time.
         % very simple test made because of a bug in the acquisition
         % software used on IRD VOS
@@ -1354,7 +1365,7 @@ hrbInterpCancel = uicontrol( ...
         testMissPos(hMainFig);
         
       elseif errTsg > -2
-
+        
         % Problem to read the file or
         % Choice of parameters for Labview file canceled by the user
         % TSG structure has been reinitialize
@@ -1362,13 +1373,13 @@ hrbInterpCancel = uicontrol( ...
         % ----------------------------------------------------------
         hdl_pushtool = findobj('-regexp','Tag', 'PUSHTOOL_');
         set(hdl_pushtool, 'Enable', 'off');
-
+        
         set( hOpenPushtool, 'Enable', 'on' );
-
+        
       end    %if errTsg > 0
-
+      
       if errTsg == 1 || errSpl == 1
-
+        
         % 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
@@ -1378,7 +1389,7 @@ hrbInterpCancel = uicontrol( ...
         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]);
@@ -1388,30 +1399,30 @@ hrbInterpCancel = uicontrol( ...
         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, tsg.plot.parameter{1} );
         plot_Validation( hMainFig, hPlotAxes, 2, tsg.plot.parameter{2} );
         plot_Validation( hMainFig, hPlotAxes, 3, tsg.plot.parameter{3} );
-
+        
         set( hMapFig, 'Name', tsg.file.name);
-
+        
         % Update the map if already displayed
         % -----------------------------------
         if strcmp( get(hMapFig,'visible'), 'on') == 1
           erase_Line( hPlotAxes, 4 );
           plot_map( hMainFig, hPlotAxes);
         end
-
+        
       end
-
+      
     end    % if ~isequal(fileName, 0)
-
+    
     % Pointer reset to arrow
     % ----------------------
     set( hMainFig, 'Pointer', 'arrow' );
-
+    
   end
 
 %% Inter_OnMenuCallback ................................... Interpolation
@@ -1419,7 +1430,7 @@ hrbInterpCancel = uicontrol( ...
 % Callback function run when
 %
   function Inter_OnMenuCallback( hObject, eventdata)
-
+    
     % Activate or desactivate uipanels
     % --------------------------------
     set( hpDateLimit,          'Visible', 'on' );
@@ -1427,7 +1438,7 @@ hrbInterpCancel = uicontrol( ...
     set( hpCalCoef,            'Visible', 'off');
     set( hbgQc,                'Visible', 'off');
     set( hbgParameter,         'Visible', 'off');
-
+    
     % Toggle button
     % -------------
     set( hBottleToggletool,    'state', 'off', 'enable', 'off');
@@ -1438,26 +1449,26 @@ hrbInterpCancel = uicontrol( ...
     set( hTimelimitToggletool, 'state', 'off', 'enable', 'on' );
     set( hZoomInToggletool,    'state', 'off', 'enable', 'on' );
     set( hZoomOutToggletool,   '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
@@ -1465,14 +1476,14 @@ hrbInterpCancel = uicontrol( ...
 % 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' );
@@ -1483,23 +1494,23 @@ hrbInterpCancel = uicontrol( ...
     set( hTimelimitToggletool, 'state', 'off', 'enable', 'off' );
     set( hZoomInToggletool,    'state', 'off', 'enable', 'on' );
     set( hZoomOutToggletool,   '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.plot.parameter{1} );
     plot_Validation( hMainFig, hPlotAxes, 2, tsg.plot.parameter{2} );
     plot_Validation( hMainFig, hPlotAxes, 3, tsg.plot.parameter{3} );
-
+    
     % Set the pointer
     % ---------------
     set( hMainFig, 'Pointer', 'arrow');
-
+    
   end
 
 %% InterpLinearCallback ...............................Interpolation Linear
@@ -1507,29 +1518,29 @@ hrbInterpCancel = uicontrol( ...
 % 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
@@ -1537,7 +1548,7 @@ hrbInterpCancel = uicontrol( ...
 % Callback function run when
 %----------------------------------------------------------------------
   function InterpPosOtherCallback( hObject, eventdata)
-
+    
     msgbox( 'Method not yet implemented', ...
       'Function InterpOtherCallback', ...
       'warn',...
@@ -1548,33 +1559,33 @@ hrbInterpCancel = uicontrol( ...
 %----------------------------------------------------------------------
   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         = tsg.qc.hash.NO_CONTROL.code;
     INTERPOLATED_VALUE = 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
 
 
@@ -1583,13 +1594,13 @@ hrbInterpCancel = uicontrol( ...
 % 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' );
@@ -1597,22 +1608,22 @@ hrbInterpCancel = uicontrol( ...
     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( hZoomInToggletool,    'state', 'off', 'enable', 'on' );
     set( hZoomOutToggletool,   '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' );
-
+    
     % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array
     % ------------------------------------------------------------
     A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV);
@@ -1621,7 +1632,7 @@ hrbInterpCancel = uicontrol( ...
     B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV);
     A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV);
     B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV);
-
+    
     % Write the Cal Coef in the Editable uicontrol
     % --------------------------------------------
     set( hetCalCNDCSlope,  'String', num2str(tsg.CNDC_LINCOEF(A_CNDC)));
@@ -1630,7 +1641,7 @@ hrbInterpCancel = uicontrol( ...
     set( hetCalSSJTOffset, 'String', num2str(tsg.SSJT_LINCOEF(B_SSJT)));
     set( hetCalSSTPSlope,  'String', num2str(tsg.SSTP_LINCOEF(A_SSTP)));
     set( hetCalSSTPOffset, 'String', num2str(tsg.SSTP_LINCOEF(B_SSTP)));
-
+    
     % Intermediate variables
     % ----------------------
     tsg.CNDC_LINCOEF_NEW(A_CNDC) = str2num(get( hetCalCNDCSlope,  'String'));
@@ -1639,11 +1650,11 @@ hrbInterpCancel = uicontrol( ...
     tsg.SSJT_LINCOEF_NEW(B_SSJT) = str2num(get( hetCalSSJTOffset, 'String'));
     tsg.SSTP_LINCOEF_NEW(A_SSTP) = str2num(get( hetCalSSTPSlope,  'String'));
     tsg.SSTP_LINCOEF_NEW(B_SSTP) = str2num(get( hetCalSSTPOffset, 'String'));
-
+    
     % Save tsg application data
     % --------------------------
     setappdata( hMainFig, 'tsg_data', tsg );
-
+    
   end
 
 
@@ -1652,12 +1663,12 @@ hrbInterpCancel = uicontrol( ...
 % 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' );
@@ -1669,11 +1680,11 @@ hrbInterpCancel = uicontrol( ...
     set( hTimelimitToggletool, 'state', 'off', 'enable', 'on' );
     set( hZoomInToggletool,    'state', 'off', 'enable', 'on' );
     set( hZoomOutToggletool,   'state', 'off', 'enable', 'on' );
-
+    
     % Get tsg application data
     % ------------------------
     tsg = getappdata( hMainFig, 'tsg_data' );
-
+    
     % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array
     % ------------------------------------------------------------
     A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV);
@@ -1682,7 +1693,7 @@ hrbInterpCancel = uicontrol( ...
     B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV);
     A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV);
     B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV);
-
+    
     % Save the calibration coefficient
     % --------------------------------
     tsg.CNDC_LINCOEF(A_CNDC) = tsg.CNDC_LINCOEF_NEW(A_CNDC);
@@ -1691,32 +1702,32 @@ hrbInterpCancel = uicontrol( ...
     tsg.SSJT_LINCOEF(B_SSJT) = tsg.SSJT_LINCOEF_NEW(B_SSJT);
     tsg.SSTP_LINCOEF(A_SSTP) = tsg.SSTP_LINCOEF_NEW(A_SSTP);
     tsg.SSTP_LINCOEF(B_SSTP) = tsg.SSTP_LINCOEF_NEW(B_SSTP);
-
+    
     tsg.CNDC_LINCOEF_NEW = [];
     tsg.SSJT_LINCOEF_NEW = [];
     tsg.SSTP_LINCOEF_NEW = [];
-
+    
     % Save tsg application data
     % --------------------------
     setappdata( hMainFig, 'tsg_data', tsg );
-
+    
     % Draw the 3 plots of the validation figure
     % -----------------------------------------
     plot_Validation( hMainFig, hPlotAxes, 1, tsg.plot.parameter{1} );
     plot_Validation( hMainFig, hPlotAxes, 2, tsg.plot.parameter{2} );
     plot_Validation( hMainFig, hPlotAxes, 3, tsg.plot.parameter{3} );
-
-
+    
+    
   end
 
 %% CalibrateCallback .......................................... Calibration
   function CalibrateCallback(hObject, eventdata)
     % Callback function run when
-
+    
     % Get tsg application data
     % ------------------------
     tsg = getappdata( hMainFig, 'tsg_data' );
-
+    
     % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array
     % ------------------------------------------------------------
     A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV);
@@ -1725,7 +1736,7 @@ hrbInterpCancel = uicontrol( ...
     B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV);
     A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV);
     B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV);
-
+    
     % Get the calibration coefficients.
     % They will be used in the function calibration
     % ---------------------------------------------
@@ -1735,54 +1746,54 @@ hrbInterpCancel = uicontrol( ...
     tsg.SSJT_LINCOEF_NEW(B_SSJT) = str2num(get( hetCalSSJTOffset, 'String'));
     tsg.SSTP_LINCOEF_NEW(A_SSTP) = str2num(get( hetCalSSTPSlope,  'String'));
     tsg.SSTP_LINCOEF_NEW(B_SSTP) = 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 );
-
+    
     % find SLOPE (A) and OFFSET (B) indices in _LINCOEF_CONV array
     % ------------------------------------------------------------
     A_CNDC = strmatch('SLOPE', tsg.CNDC_LINCOEF_CONV);
@@ -1791,7 +1802,7 @@ hrbInterpCancel = uicontrol( ...
     B_SSJT = strmatch('OFFSET',tsg.SSJT_LINCOEF_CONV);
     A_SSTP = strmatch('SLOPE', tsg.SSTP_LINCOEF_CONV);
     B_SSTP = strmatch('OFFSET',tsg.SSTP_LINCOEF_CONV);
-
+    
     % Write the Cal Coef in the Editable uicontrol
     % --------------------------------------------
     set( hetCalCNDCSlope,  'String', num2str(tsg.CNDC_LINCOEF(A_CNDC)));
@@ -1800,17 +1811,17 @@ hrbInterpCancel = uicontrol( ...
     set( hetCalSSJTOffset, 'String', num2str(tsg.SSJT_LINCOEF(B_SSJT)));
     set( hetCalSSTPSlope,  'String', num2str(tsg.SSTP_LINCOEF(A_SSTP)));
     set( hetCalSSTPOffset, 'String', num2str(tsg.SSTP_LINCOEF(B_SSTP)));
-
+    
     % 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
 
 %% ZoomIn_OnMenuCallback
@@ -1819,7 +1830,7 @@ hrbInterpCancel = uicontrol( ...
 % is pressed
 %----------------------------------------------------------------------
   function ZoomIn_OnMenuCallback(hObject, eventdata)
-
+    
     % Desactivate some toggle buttons, hZoomOutToggletool changed state
     % must be call before zoom function because the callback set zoom to
     % off
@@ -1828,37 +1839,37 @@ hrbInterpCancel = uicontrol( ...
     set( hQCToggletool,        'state', 'off' );
     set( hPanToggletool,       'state', 'off' );
     set( hTimelimitToggletool, 'state', 'off' );
-
+    
     % Hide the map. Otherwise it slows down the zooming
     % -------------------------------------------------
     %     set( hMapToggletool,       'state', 'off' );
-
+    
     % returns a zoom mode object for the figure hMainFig handle
     % ---------------------------------------------------------
     hZoom = zoom(hMainFig);
-
+    
     % Turns off the automatic adaptation of date ticks
     % ------------------------------------------------
     zoomAdaptiveDateTicks('off');
-
+    
     % turns interactive zooming to in (increase)
     % ------------------------------------------
     set(hZoom, 'direction', 'in');
-
+    
     % 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');
-
+    
     % Set this callback to listen to when a zoom operation finishes
     % must be call after enable zoom (bug ?)
     % -------------------------------------------------------------
     set(hZoom, 'ActionPostCallback', @ZoomPan_PostCallback);
-
+    
   end
 
 %% ZoomIn_OffMenuCallback
@@ -1867,11 +1878,11 @@ hrbInterpCancel = uicontrol( ...
 % is pressed
 %----------------------------------------------------------------------
   function ZoomIn_OffMenuCallback(hObject, eventdata)
-
+    
     % disable zoom mode
     % -----------------
     zoom off;
-
+    
   end
 
 %% ZoomOut_OnMenuCallback
@@ -1880,39 +1891,39 @@ hrbInterpCancel = uicontrol( ...
 % is pressed
 %------------------------------------------------------------------------
   function ZoomOut_OnMenuCallback(hObject, eventdata)
-
+    
     % Desactivate Zoom In Toggle toggle button
     % -----------------------------------------
     set( hZoomInToggletool,    'state', 'off' );
     set( hQCToggletool,        'state', 'off' );
     set( hPanToggletool,       'state', 'off' );
     set( hTimelimitToggletool, 'state', 'off' );
-
+    
     % Hide the map. Otherwise it slows down the zooming
     % -------------------------------------------------
     %     set( hMapToggletool,       'state', 'off' );
-
+    
     % returns a zoom mode object for the figure hMainFig handle
     % ---------------------------------------------------------
     hZoom = zoom(hMainFig);
-
+    
     % turns interactive zooming out (decrease)
     % ----------------------------------------
     set(hZoom, 'direction', 'out');
-
+    
     % 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');
-
+    
     % Set this callback to listen to when a zoom operation finishes
     % -------------------------------------------------------------
     set(hZoom, 'ActionPostCallback', @ZoomPan_PostCallback);
-
+    
   end
 
 %% ZoomOut_OffMenuCallback
@@ -1921,15 +1932,15 @@ hrbInterpCancel = uicontrol( ...
 % is pressed
 %------------------------------------------------------------------------
   function ZoomOut_OffMenuCallback(hObject, eventdata)
-
+    
     % turns interactive zooming off
     % -----------------------------
     zoom off;
-
+    
     % cursor back to normal, test if it's really necessery
     % -----------------------------------------------------
     %set(hMainFig, 'Pointer', 'arrow');
-
+    
   end
 
 %% Pan_OnMenuCallback
@@ -1937,36 +1948,36 @@ hrbInterpCancel = uicontrol( ...
 % Callback function run when the pan toggle toolbar is selected
 %----------------------------------------------------------------------
   function Pan_OnMenuCallback(hObject, eventdata)
-
+    
     % Desactivate some toggle buttons
     % -------------------------------
     set( hQCToggletool,        'state', 'off' );
     set( hTimelimitToggletool, 'state', 'off' );
     set( hZoomInToggletool,    'state', 'off' );
     set( hZoomOutToggletool,   'state', 'off' );
-
+    
     % Hide the map. Otherwise it slows down the panning
     % -------------------------------------------------
     %     set( hMapToggletool,       'state', 'off' );
-
+    
     % 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');
-
+    
     % Set this callback to listen to when a zoom operation finishes
     % must be call after enable zoom (bug ?)
     % -------------------------------------------------------------
     set(hPan, 'ActionPostCallback', @ZoomPan_PostCallback);
-
+    
   end
 
 %% Pan_OffMenuCallback
@@ -1974,15 +1985,15 @@ hrbInterpCancel = uicontrol( ...
 % Callback function run when the pan toggle toolbar is released
 %----------------------------------------------------------------------
   function Pan_OffMenuCallback(hObject, eventdata)
-
+    
     % turns interactive pan off
     % -------------------------
     pan off;
-
+    
     % cursor back to normal, test if it's really necessery
     % -----------------------------------------------------
     %set(hMainFig, 'Pointer', 'arrow');
-
+    
   end
 
 %% ZoomPan_PostCallback
@@ -1990,21 +2001,21 @@ hrbInterpCancel = uicontrol( ...
 % Callback function run when zoom or pan action finishes: redraw axes
 %------------------------------------------------------------------------
   function ZoomPan_PostCallback(hObject, eventdata)
-
+    
     % 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
-
+    
     % Re-draw the map once the zoom/pan is off
     % ----------------------------------------
     if strcmp( get(hMapFig,'visible'), 'on') == 1
       erase_Line( hPlotAxes, 4 );
       plot_map( hMainFig, hPlotAxes);
     end
-
+    
   end
 
 %% QCMenuCallback
@@ -2039,12 +2050,12 @@ hrbInterpCancel = uicontrol( ...
       otherwise
         msgbox('QCMenuCallback : erreur', 'QCMenuCallback','error', 'modal');
     end
-
+    
     % --------------------------
     % refresh QC statistic panel
     % --------------------------
     display_QC( hMainFig );
-
+    
     % ------------------
     % Refresh the plots
     %-------------------
@@ -2052,18 +2063,18 @@ hrbInterpCancel = uicontrol( ...
     % Get the parameter displayed on plot number 1 : figure at the top
     % -----------------------------------------------------------------
     PARA = getParaCorModule( hMainFig );
-
+    
     % Draw plot 1
     % -----------
     plot_Validation( hMainFig, hPlotAxes, 1, PARA{1} );
-
+    
     % Update the map if already displayed
     % -----------------------------------
     if strcmp( get(hMapFig,'visible'), 'on') == 1
       erase_Line( hPlotAxes, 4 );
       plot_map( hMainFig, hPlotAxes);
     end
-
+    
   end
 
 
@@ -2072,12 +2083,12 @@ hrbInterpCancel = uicontrol( ...
 % Callback function run when the QC toggle tool is pressed
 %----------------------------------------------------------------------
   function QC_OnMenuCallback(gcbo, eventdata)
-      
+    
     % Make the QC code uipanel visible
     % --------------------------------
     set( hbgQc,                'Visible' ,'on');
     set( hbgParameter,         'Visible', 'off');
-
+    
     % Desactivate toggletools.
     % ------------------------
     set( hZoomInToggletool,    'state', 'off', 'enable', 'on' );
@@ -2086,146 +2097,146 @@ hrbInterpCancel = uicontrol( ...
     set( hTimelimitToggletool,  'state', 'off' );
     set( hCalToggletool,        'state', 'off', 'enable', 'off'  );
     set( hInterpToggletool,     'state', 'off', 'enable', 'off' );
-
+    
     % Retrieve named application data
     % -------------------------------
     tsg = getappdata( hMainFig, 'tsg_data');
     
     PARA = getParaCorModule( hMainFig );
     SAMPLE = tsg.plot.sample;
-
+    
     % refresh QC statistic panel
     % --------------------------
     display_QC( hMainFig );
-
+    
     % 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', []);
-
+      
       % 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
           % --------------------------
           if ~isempty(tsg.DAYD_EXT)
-
+            
             ind = find(tsg.DAYD_EXT > p1(1) &  tsg.DAYD_EXT < p2(1) & ...
               tsg.EXT_DIF  > p1(2) &  tsg.EXT_DIF  < p2(2));
-
+            
             % Keep the information on the indices of the selected zone
             % --------------------------------------------------------
             tsg.rbboxind = ind .* ones(size(ind));
-
+            
             % Modifiy the QC
             % --------------
             tsg.([SAMPLE '_EXT_QC'])(ind) = tsg.qc.active.Code;
-
+            
             % Save the modifications
             % ----------------------
             setappdata( hMainFig, 'tsg_data', tsg);
-
+            
             % plot selected data with selected code
             % --------------------------------------
             plot_Correction( hMainFig, hPlotAxes, PARA);
-
+            
           end
-
+          
         else
-
+          
           % get index on selected zone
           % ---------------------------
           ind = find(tsg.DAYD   > p1(1,1) & tsg.DAYD   < p2(1,1) & ...
             tsg.(PARA{1}) > p1(1,2) & tsg.(PARA{1}) < p2(1,2));
-
+          
           % Keep the information on the indices of the selected zone
           % --------------------------------------------------------
           tsg.rbboxind = ind .* ones(size(ind));
-
+          
           % Modifiy the QC
           % --------------
           tsg.([PARA{1} '_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{1} );
-
+          
           % refresh QC statistic panel
           % --------------------------
           display_QC( hMainFig );
-
+          
           % Update the map if already displayed
           % -----------------------------------
           if strcmp( get(hMapFig,'visible'), 'on') == 1
             erase_Line( hPlotAxes, 4 );
             plot_map( hMainFig, hPlotAxes);
           end
-
+          
           % 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
 
@@ -2234,24 +2245,24 @@ hrbInterpCancel = uicontrol( ...
 % 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' );
-
+    
     if strcmp( get(hBottleToggletool, 'state'), 'off' )
       set( hCalToggletool,        'state', 'off', 'enable', 'on' );
       set( hInterpToggletool,     'state', 'off', 'enable', 'on' );
     end
-
+    
     % uibuttongroup uipanel used to choose a parameter is set to
     % on only if the Correction screen (bottle toggletool) is off
     % -----------------------------------------------------------
@@ -2265,7 +2276,7 @@ hrbInterpCancel = uicontrol( ...
     tsg.POSITION_QC = max(tsg.LATX_QC,tsg.LONX_QC );
     tsg.LATX_QC = tsg.POSITION_QC;
     tsg.LONX_QC = tsg.POSITION_QC;
- 
+    
     % Save the modifications
     % ----------------------
     setappdata( hMainFig, 'tsg_data', tsg);
@@ -2273,7 +2284,7 @@ hrbInterpCancel = uicontrol( ...
     % cursor back to normal
     % ---------------------
     set(hMainFig,'Pointer','arrow');
-
+    
   end
 
 %% Qc context menu selected ........................ Quality Control Module
@@ -2284,59 +2295,59 @@ hrbInterpCancel = uicontrol( ...
 %
 %-----------------------------------------------------------
   function Qc(hObject, eventdata, key)
-
+    
     % Retrieve Default Quality Code and Color
     % ---------------------------------------
     tsg = getappdata( hMainFig, 'tsg_data');
-
+    
     % Get the parameter (SSPS, SSJT or SSTP)
     % --------------------------------------
     PARA = getParaCorModule( hMainFig );
     SAMPLE = tsg.plot.sample;
-
+    
     % get key and some values in hashtable
     % ------------------------------------
     code  = tsg.qc.hash.(key).code;
     color = 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 isfield(tsg, 'rbboxind') && ~isempty( tsg.rbboxind )
-
+      
       if strcmp( get(hBottleToggletool, 'state'), 'on')
-
+        
         tsg.([SAMPLE '_EXT_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{1} '_QC'])(tsg.rbboxind) = tsg.qc.active.Code;
-
-        % Save tsg.SSPS_QC in the application data before use 
+        
+        % Save tsg.SSPS_QC in the application data before use
         % inside plot_Validation
         % ---------------------------------------------------
         setappdata( hMainFig, 'tsg_data', tsg );
-
+        
         % Draw plot 1 of the validation figure
         % ------------------------------------
         plot_Validation( hMainFig, hPlotAxes, 1, PARA{1} );
-
+        
       end
-
+      
     end
-
+    
     % Update the radio button corresponding to the selected
     % QC context menu (rbg : RadioButtonGroup)
     % -----------------------------------------------------
@@ -2346,11 +2357,11 @@ hrbInterpCancel = uicontrol( ...
     %     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
-
+    
     display_QC( hMainFig);
-
+    
     setappdata( hMainFig, 'tsg_data', tsg );
-
+    
   end
 
 %% Radiobutton Quality Control ..................... Quality Control Module
@@ -2358,29 +2369,29 @@ hrbInterpCancel = uicontrol( ...
 % 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);
-
+    
     % set active code and color from selected context menu
     % ----------------------------------------------------
     tsg.qc.active.Code  = tsg.qc.hash.(key).code;
     tsg.qc.active.Color = tsg.qc.hash.(key).color;
-
+    
     % save tsg struct
     % ----------------
     setappdata( hMainFig, 'tsg_data', tsg );
-
+    
   end
 
 %% preQcPanCallback .................................Quality Control Module
@@ -2388,9 +2399,9 @@ hrbInterpCancel = uicontrol( ...
 % Callback function ... to be completed
 % ---------------------------------------------------------------
   function preQcPanCallback(obj, evd)
-
+    
     set(hQCToggletool, 'state', 'off' );
-
+    
   end
 
 %% postQcPanCallback ............................... Quality Control Module
@@ -2398,27 +2409,27 @@ hrbInterpCancel = uicontrol( ...
 % Callback function ... to be completed
 % ---------------------------------------------------------------
   function postQcPanCallback(obj, evd)
-
+    
     % 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
-
+    
     % Re-draw the map once the pan is off -  only valide in QC mode
     % -------------------------------------------------------------
     if strcmp( get(hMapFig, 'visible'), 'on') == 1
       erase_Line( hPlotAxes, 4 );
       plot_map( hMainFig, hPlotAxes);
     end
-
+    
     % restacks the figure to the top of the screen
     % --------------------------------------------
     figure( hMainFig);
-
+    
     set(hQCToggletool, 'state', 'on' );
-
+    
   end
 
 %% MouseMotion
@@ -2427,27 +2438,27 @@ hrbInterpCancel = uicontrol( ...
 % 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 :
@@ -2458,11 +2469,11 @@ hrbInterpCancel = uicontrol( ...
       % if we are in QC mode
       % ---------------------
       if strcmp( get(hQCToggletool, 'state' ), '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);
@@ -2477,12 +2488,12 @@ hrbInterpCancel = uicontrol( ...
         end % end of cursor test location
         
       end % end of QC mode test
-
+      
       % Dynamically display data in uicontrol for valid data
       % ----------------------------------------------------
       if x > tsg.DAYD(1) && x < tsg.DAYD(end)
-
-        % get index of cursor location 
+        
+        % get index of cursor location
         % ----------------------------
         indCursor = find( tsg.DAYD > x, 1, 'first');
         
@@ -2490,14 +2501,14 @@ hrbInterpCancel = uicontrol( ...
         % ---------------------------------------------------------
         set( hInfoDateText, 'String',...
           datestr(tsg.DAYD(indCursor),'dd/mm/yyyy   HH:MM'));
-        if tsg.preference.positions_format_value == 1 
-        set( hInfoLatText,  'String', dd2dm(tsg.LATX(indCursor), 0) );
-        set( hInfoLongText, 'String', ...
-          dd2dm(mod(tsg.LONX(indCursor) + 180, 360) - 180, 1) );
+        if tsg.preference.positions_format_value == 1
+          set( hInfoLatText,  'String', dd2dm(tsg.LATX(indCursor), 0) );
+          set( hInfoLongText, 'String', ...
+            dd2dm(mod(tsg.LONX(indCursor) + 180, 360) - 180, 1) );
         else
-                set( hInfoLatText,  'String', tsg.LATX(indCursor) );
-        set( hInfoLongText, 'String', ...
-          mod(tsg.LONX(indCursor) + 180, 360) - 180 );
+          set( hInfoLatText,  'String', tsg.LATX(indCursor) );
+          set( hInfoLongText, 'String', ...
+            mod(tsg.LONX(indCursor) + 180, 360) - 180 );
         end
         if ~isempty(tsg.SSPS)
           set( hInfoSSPSText, 'String', tsg.SSPS(indCursor) );
@@ -2508,23 +2519,23 @@ hrbInterpCancel = uicontrol( ...
         if ~isempty(tsg.SSTP)
           set( hInfoSSTPText, 'String', tsg.SSTP(indCursor) );
         end
-
+        
         % Plot the position on the map if this one is active
         % --------------------------------------------------
         if strcmp( get(hMapFig, 'Visible'), 'on')
-
+          
           % Select the map axes
           % -------------------
           axes( hPlotAxes(4));
-
+          
           % Look for a MARKER (Red point) on the ship track
           % -----------------------------------------------
           h = findobj( hPlotAxes(4), '-regexp','Tag', 'TAG_PLOT4_LINE_MARKER');
-
+          
           if isempty( h )   % if no Marker
-
+            
             if ~isnan( tsg.LONX(indCursor) )
-
+              
               % Plot a Marker (Red point) on the ship track
               % -------------------------------------------
               hMarker = m_line( mod(tsg.LONX(indCursor(1)) + ...
@@ -2532,17 +2543,17 @@ hrbInterpCancel = uicontrol( ...
                 tsg.LATX(indCursor(1)),...
                 'Marker', 'o', 'MarkerSize', 5, ...
                 'Color', 'r', 'MarkerFaceColor', 'r');
-
+              
               % Put a tag on the Marker - This tag allows to get the handle
               % of the Marker
               % -----------------------------------------------------------
               set( hMarker, 'TAG', 'TAG_PLOT4_LINE_MARKER' );
             end
-
+            
           else         % a marker exists
-
+            
             if ~isnan( tsg.LONX(indCursor) )
-
+              
               % Delete the Marker and redraw it
               % -------------------------------
               delete( h);
@@ -2550,15 +2561,15 @@ hrbInterpCancel = uicontrol( ...
                 tsg.LONX(indCursor), tsg.LATX(indCursor),...
                 'Marker', 'o', 'MarkerSize', 5, ...
                 'Color', 'r', 'MarkerFaceColor', 'r');
-
+              
               % Put a tag on the Marker - This tag allows to get the handle
               % of the Marker
               % -----------------------------------------------------------
               set( hMarker, 'TAG', 'TAG_PLOT4_LINE_MARKER' );
             end
           end
-
-         end % end of map visible
+          
+        end % end of map visible
         
       else
         
@@ -2581,25 +2592,25 @@ hrbInterpCancel = uicontrol( ...
 % Callback function run when the Map tool bar item is selected
 %---------------------------------------------------------------------
   function Map_OnMenuCallback(hObject, eventdata)
-
+    
     % Desactivate Zoom and Pan toggle buttons
     % ---------------------------------------
     set(hZoomInToggletool,  'state', 'off' );
     set(hZoomOutToggletool,  'state', 'off' );
     set(hPanToggletool,   'state', 'off' );
-
+    
     % Make the earth map visible
     % --------------------------
     set(hMapFig, 'Visible', 'on' );
-
+    
     erase_Line( hPlotAxes, 4 );
-
+    
     plot_map( hMainFig, hPlotAxes)
     
     % De-activate keyPressFcn callback on main fig
     % --------------------------------------------
     set(hMainFig, 'KeyPressFcn', []);
-
+    
   end
 
 %% Map_OffMenuCallback
@@ -2607,15 +2618,15 @@ hrbInterpCancel = uicontrol( ...
 % Callback function run when the Map tool bar item is unselected
 %---------------------------------------------------------------------
   function Map_OffMenuCallback(hObject, eventdata)
-
+    
     % Make the earth map invisible
     % ----------------------------
     set(hMapFig, 'Visible', 'off' );
     
-     % Re-activate keyPressFcn callback on main fig
+    % Re-activate keyPressFcn callback on main fig
     % ---------------------------------------------
     set(hMainFig, 'KeyPressFcn', @keyPressFcnCallback);
-
+    
   end
 
 %% Bottle_OnMenuCallback ................................ Correction Module
@@ -2624,16 +2635,16 @@ hrbInterpCancel = uicontrol( ...
 %---------------------------------------------------------------------
   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)
     % ------------------------------------------------------
     SAMPLE = tsg.plot.sample;
     PARA = getParaCorModule( hMainFig );
-
+    
     % Switch somme buttons
     % --------------------
     set( hQCToggletool,         'state',  'off' );
@@ -2645,7 +2656,7 @@ hrbInterpCancel = uicontrol( ...
     set( hCalToggletool,        'enable', 'off' );
     set( hInterpToggletool,     'enable', 'off' );
     set( hTimelimitToggletool,  'enable', 'on' );
-
+    
     % Activate or desactivate uipanels
     % ---------------------------------
     set( hpDateLimit,           'Visible', 'on' );
@@ -2653,7 +2664,7 @@ hrbInterpCancel = uicontrol( ...
     set( hCorPanel,             'Visible', 'on' );
     set( hbgParameter,          'Visible', 'off');
     set( hbgQc,                 'Visible', 'off');
-
+    
     if ~isempty( tsg.([SAMPLE '_EXT']) )
       
       % Compute the sample-TSG differences
@@ -2680,15 +2691,15 @@ hrbInterpCancel = uicontrol( ...
     noNaN = tsg.DAYD(~isnan( tsg.DAYD ));
     set( hetDateMin, 'String', datestr(noNaN(1), 31));
     set( hetDateMax, 'String', datestr(noNaN(end), 31));
-
-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( hQCToggletool,        'state',  'off' );
@@ -2700,42 +2711,42 @@ end
     set( hCalToggletool,       'enable', 'on'  );
     set( hInterpToggletool,    'enable', 'on' );
     set( hTimelimitToggletool, 'enable', 'off' );
-
+    
     % Activate or Desactivate uipanel
     % --------------------------------
     set( hpDateLimit,          'Visible', 'off' );
     set( hCorPanel,            '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' );
-
+    
     % Draw the 3 plots of the validation figure
     % -----------------------------------------
     plot_Validation( hMainFig, hPlotAxes, 1, tsg.plot.parameter{1} );
     plot_Validation( hMainFig, hPlotAxes, 2, tsg.plot.parameter{2} );
     plot_Validation( hMainFig, hPlotAxes, 3, tsg.plot.parameter{3} );
-
+    
     % Necessary to unzoom as the new plot keep in memory the preceding zoom
     % ---------------------------------------------------------------------
     zoom out;
-
+    
     % Set the pointer
     % ---------------
     set( hMainFig, 'Pointer', 'arrow');
-
+    
   end
 
 %% OldCorCancelCallback .................................... Correction Module
   function OldCorCancelCallback(hObject, eventdata)
     % Callback function run when ...
-
+    
     % Desactivate somme Toggle button
     % -------------------------------
     set( hZoomInToggletool,       'state', 'off' );
@@ -2743,31 +2754,31 @@ end
     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)
     % or SSPS_CAL, SSJT_CAL, SSTP_CAL
     % -------------------------------------------------
     PARA = getParaCorModule( hMainFig );
-
+    
     % To cancel the correction set the ADJUSTED variable
     % to []
     % --------------------------------------------------
     tsg.([PARA{1} '_ADJUSTED']) = [];
     tsg.([PARA{1} '_ADJUSTED_QC']) = [];
     tsg.([PARA{1} '_ADJUSTED_ERROR']) = [];
-
+    
     % Save tsg data
     % -------------
     setappdata(hMainFig, 'tsg_data', tsg);
-
+    
     % Plot in the 3 axes
     % ------------------
     plot_Correction( hMainFig, hPlotAxes, PARA );
-
+    
   end
 %% cancelCorrectionCallback .................................... Correction Module
   function cancelCorrectionCallback(hObject, eventdata, Limits)
@@ -2775,8 +2786,8 @@ end
     % corrections made from comparison with bottles or ARGO data.
     % The deletion can be made for th whole time series or
     % between 2 dates.
-% $Id$
-
+    % $Id$
+    
     % Desactivate somme Toggle button
     % -------------------------------
     set( hZoomInToggletool,       'state', 'off' );
@@ -2784,19 +2795,19 @@ end
     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)
     % or SSPS_CAL, SSJT_CAL, SSTP_CAL
     % -------------------------------------------------
     PARA = getParaCorModule( hMainFig );
     
-   % The correction will be cancelled either for the entire 
-   % time series or within date limits
-   % ------------------------------------------------------
+    % The correction will be cancelled either for the entire
+    % time series or within date limits
+    % ------------------------------------------------------
     ind = 0;
     switch Limits
       
@@ -2805,28 +2816,28 @@ end
       case 'total'
         
         ind = find( tsg.DAYD >= tsg.DAYD(1) &  tsg.DAYD <= tsg.DAYD(end) );
-
-%         ind = size(tsg.([PARA{1} '_ADJUSTED']));
-
-      % Get the indices between 2 dates
-      % --------------------------------
+        
+        %         ind = size(tsg.([PARA{1} '_ADJUSTED']));
+        
+        % Get the indices between 2 dates
+        % --------------------------------
       case 'part'
-
+        
         % Get the date limits used for the correction
         % -------------------------------------------
         dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
         dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
-
+        
         % Find indices within date limits
         % --------------------------------
         if dateMax > dateMin
           ind = find( tsg.DAYD >= dateMin &  tsg.DAYD <= dateMax );
         end
-
+        
       otherwise
         msgbox( 'CorCancelCallback : error', 'CorCancelCallback', 'error', modal);
     end
-
+    
     if ~isempty(ind) && ~isempty( tsg.([PARA{1} '_ADJUSTED']) )
       
       % Cancel the correction : set the ADJUSTED variable to NaN
@@ -2840,22 +2851,22 @@ end
         NaN*ones(size(tsg.([PARA{1} '_ADJUSTED_ERROR'])(ind))) ;
       
     end
-
+    
     % Save tsg data
     % -------------
     setappdata(hMainFig, 'tsg_data', tsg);
-
+    
     % Plot in the 3 axes
     % ------------------
     plot_Correction( hMainFig, hPlotAxes, PARA );
-
+    
   end
 
 
 %% gradientCorrectionCallback .................................... Correction Module
   function gradientCorrectionCallback(hObject, eventdata)
     % Callback function run when
-
+    
     % Desactivate somme Toggle button
     % -------------------------------
     set( hZoomInToggletool,     'state', 'off' );
@@ -2863,57 +2874,57 @@ end
     set( hPanToggletool,        'state', 'off' );
     set( hQCToggletool,         'state', 'off' );
     set( hTimelimitToggletool,  'state', 'off' );
-
+    
     % Get the time limits for the correction
     % --------------------------------------
     dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
     dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
-
+    
     % Get tsg application data
     % ------------------------
     tsg    = getappdata(hMainFig, 'tsg_data');
-
+    
     % Get parameter we are working on (SSPS, SSJT, SSTP)
     % or SSPS_CAL, SSJT_CAL, SSTP_CAL
     % -------------------------------------------------
     PARA = getParaCorModule( hMainFig );
     SAMPLE = tsg.plot.sample;
-
+    
     if ~isempty( tsg.([SAMPLE '_EXT']) )
-
+      
       % Compute the sample-TSG differences
       % ----------------------------------
       diffTsgSample( hMainFig, PARA );
-
+      
       % Correction
       % ----------
       error = corTsgGradient(hMainFig, PARA, dateMin, dateMax);
-
+      
       switch error
-
+        
         case 1
-
+          
           % Plot in the 3 axes
           % ------------------
           plot_Correction( hMainFig, hPlotAxes, PARA );
-
+          
         case -1
-
+          
           if DateMax <= DateMin
             msgbox( 'Date limits are not correct',...
               'Correction module', 'warn', 'modal');
           end
-
+          
       end
-
+      
     end
-
+    
   end
 
 %% biasCorrectionCallback .................................... Correction Module
   function biasCorrectionCallback(hObject, eventdata)
     % Callback function run when
-
+    
     % Desactivate somme Toggle button
     % -------------------------------
     set( hZoomInToggletool,     'state', 'off' );
@@ -2921,24 +2932,24 @@ end
     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 tsg application data
     % ------------------------
     tsg    = getappdata(hMainFig, 'tsg_data');
-
+    
     % Get parameter we are working on (SSPS, SSJT, SSTP)
     % or SSPS_CAL, SSJT_CAL, SSTP_CAL
     % -------------------------------------------------
     PARA = getParaCorModule( hMainFig );
     SAMPLE = tsg.plot.sample;
-
+    
     if ~isempty( tsg.([SAMPLE '_EXT']) )
-
+      
       % Compute the sample-TSG differences
       % ----------------------------------
       diffTsgSample( hMainFig, PARA );
@@ -2948,17 +2959,17 @@ end
     % Correction
     % ----------
     error = corTsgBias(hMainFig, PARA, dateMin, dateMax);
-
+    
     switch error
-
+      
       case 1
-
+        
         % Plot in the 3 axes
         % ------------------
         plot_Correction( hMainFig, hPlotAxes, PARA );
-
+        
       case -1
-
+        
         if DateMax <= DateMin
           msgbox( 'Date limits are not correct',...
             'Correction module', 'warn', 'modal');
@@ -2966,14 +2977,14 @@ end
         
       otherwise
         msgbox( 'CorBiasCallback : Error different   or -1',' ', 'error');
-
+        
     end
   end
-    
+
 %% linearCorrectionCallback .................................... Correction Module
   function linearCorrectionCallback(hObject, eventdata)
     % Callback function run when
-
+    
     % Desactivate somme Toggle button
     % -------------------------------
     set( hZoomInToggletool,     'state', 'off' );
@@ -2981,53 +2992,53 @@ end
     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 tsg application data
     % ------------------------
     tsg    = getappdata(hMainFig, 'tsg_data');
-
+    
     % Get parameter we are working on (SSPS, SSJT, SSTP)
     % or SSPS_CAL, SSJT_CAL, SSTP_CAL
     % -------------------------------------------------
     PARA = getParaCorModule( hMainFig );
     SAMPLE = tsg.plot.sample;
-
+    
     if ~isempty( tsg.([SAMPLE '_EXT']) )
-
+      
       % 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
-
+    
   end
 
 %% medianCorrectionCallback .................................... Correction Module
   function medianCorrectionCallback(hObject, eventdata)
     % Callback function run when
-
+    
     % Desactivate somme Toggle button
     % -------------------------------
     set( hZoomInToggletool,       'state', 'off' );
@@ -3035,45 +3046,45 @@ end
     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 tsg application data
     % ------------------------
     tsg = getappdata(hMainFig, 'tsg_data');
-
+    
     % Get parameter we are working on (SSPS, SSJT, SSTP)
     % or SSPS_CAL, SSJT_CAL, SSTP_CAL
     % -------------------------------------------------
     PARA = getParaCorModule( hMainFig );
     SAMPLE = tsg.plot.sample;
-
+    
     if ~isempty( tsg.([SAMPLE '_EXT']) )
-
+      
       % 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 );
-
+          
         otherwise
-
+          
           % Nothing is done - Error msg within the corTsgMedian function
       end
-
+      
     end
   end
 
@@ -3082,17 +3093,17 @@ end
 % ---------------------------
   function SelectParameter(hObject, eventdata, nplot)
     % Callback function run when the ....
-
+    
     % Get application data
     % --------------------
     tsg = getappdata( hMainFig, 'tsg_data');
-
+    
     % Get the active string of the selected box
     % -----------------------------------------
     val             = get( hObject, 'Value' );
     string_list     = get( hObject, 'String' );
     selected_string = string_list{val};
-
+    
     % Get the default parameter
     % -------------------------
     tsg.plot.parameter{nplot} =  selected_string;
@@ -3102,11 +3113,11 @@ end
         tsg.plot.sample = 'SSTP';
       end
     end
-
+    
     % Save application data
     % --------------------
     setappdata( hMainFig, 'tsg_data', tsg);
-
+    
     % Disable the climatology
     % -----------------------
     plotClim = 0;
@@ -3114,36 +3125,36 @@ end
       set( hClimToggletool, 'state', 'off' );
       plotClim = 1;
     end
-
+    
     % Disable the climatology
     % -----------------------
     set( hClimToggletool, 'state', 'off' );
-
+    
     plot_Validation( hMainFig, hPlotAxes, 1, tsg.plot.parameter{1} );
     plot_Validation( hMainFig, hPlotAxes, 2, tsg.plot.parameter{2} );
     plot_Validation( hMainFig, hPlotAxes, 3, tsg.plot.parameter{3} );
-
+    
     % Plot the climatology if it was already plotted
     % ----------------------------------------------
     if plotClim
       set( hClimToggletool, 'state', 'on' );
       plot_Climatology(hMainFig, hPlotAxes);
     end
-
+    
   end
 
 %% SelectTime_OnMenuCallback
 %---------------------------
   function SelectTime_OnMenuCallback(hObject, eventdata)
     % Callback function run when the ....
-
+    
     % Desactivate Zoom and Pan functions.
     % ----------------------------------
     set( hZoomInToggletool, 'state', 'off' );
     set( hZoomOutToggletool, 'state', 'off' );
     set( hQCToggletool,   'state', 'off' );
     set( hPanToggletool,  'state', 'off' );
-
+    
     % Create a pointer to select the time limits
     % ------------------------------------------
     selTimePointer = ones(16)+1;
@@ -3152,51 +3163,51 @@ end
     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);
@@ -3207,15 +3218,15 @@ end
 %----------------------------
   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
@@ -3223,15 +3234,15 @@ end
 % 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
@@ -3239,15 +3250,15 @@ end
 % 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
 
@@ -3256,35 +3267,35 @@ end
 % 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
@@ -3292,30 +3303,30 @@ end
 % Callback function run when Option/Preference is selected
 % -------------------------------------------------------------------
   function PreferencesMenuCallback(hObject, eventdata)
-
+    
     oldmapres=tsg.preference.map_resolution;
-
+    
     % call preferences form function
     % ------------------------------
     if( preferencesForm(hMainFig) )
-
+      
       % if form is validate, update plots only if plot exist
       % ----------------------------------------------------
       if ~isempty(findobj( '-regexp', 'Tag', ('TAG_PLOT\d_LINE_')))
         SelectParameter(pmhPara(1),[],1);
       end
-
+      
       % Update the map (if visible) if ship speed QC has been applied
       % or map resolution has been changed
       % -------------------------------------------------------------
       if (strcmp( get(hMapFig,'visible'), 'on') == 1 & ...
-              tsg.preference.map_resolution ~= oldmapres)
+          tsg.preference.map_resolution ~= oldmapres)
         erase_Line( hPlotAxes, 4 );
         plot_map( hMainFig, hPlotAxes);
       end
-
+      
     end
-
+    
   end
 
 %% HelpMenuCallback
@@ -3340,11 +3351,11 @@ end
 % Callback function run when the headerForm tool bar item is selected
 % -------------------------------------------------------------------
   function HeaderMenuCallback(hObject, eventdata)
-
+    
     % call header form function
     % -------------------------
     headerForm(hMainFig);
-
+    
   end
 
 %% PrintFigMenuCallback
@@ -3352,65 +3363,65 @@ end
 % Callback function run when the Report tool bar item is selected
 % -------------------------------------------------------------------
   function PrintFigMenuCallback(hObject, eventdata)
-
+    
     % disable ButtonMotion on main fig during select
     % ----------------------------------------------
     set( hMainFig, 'WindowButtonMotionFcn', []);
-
+    
     % Get the tsg structure
     % ---------------------
     tsg = getappdata( hMainFig, 'tsg_data');
-
-
+    
+    
     hPrintFig = figure( 'Name', 'Print','NumberTitle', 'off','Resize', 'on');
     hPlot(1) = subplot(3,1,1);
     hPlot(2) = subplot(3,1,2);
     hPlot(3) = subplot(3,1,3);
     title( hPlot(1), tsg.file.name, 'interpreter', 'none');
-
+    
     if strcmp(get(hBottleToggletool,'state'), 'on')
-
+      
       % Default parameter
       % -----------------------------------------------------
       PARA = getParaCorModule( hMainFig );
-
+      
       plot_Correction( hMainFig, hPlot, PARA );
-
+      
     elseif strcmp(get(hCalToggletool,'state'), 'on')
-
+      
       plot_Calibration( hMainFig, hPlot, 1, 'SSPS' );
       plot_Calibration( hMainFig, hPlot, 2, 'SSJT' );
       plot_Calibration( hMainFig, hPlot, 3, 'SSTP' );
       %     elseif strcmp(get(hMapToggletool,'state'), 'on')
       %      plot_map( hMainFig, hPlot)
-
+      
     elseif strcmp(get(hInterpToggletool,'state'), 'on')
-
+      
       plot_Interpolation( hMainFig, hPlot, 1 );
       plot_Interpolation( hMainFig, hPlot, 2 );
       plot_Interpolation( hMainFig, hPlot, 3 );
-
+      
     else
-
+      
       plot_Validation( hMainFig, hPlot, 1, tsg.plot.parameter{1} );
       plot_Validation( hMainFig, hPlot, 2, tsg.plot.parameter{2} );
       plot_Validation( hMainFig, hPlot, 3, tsg.plot.parameter{3} );
-
+      
       %       I = getframe(hPlotAxes(1));
       %       imwrite(I.cdata, 'myplot.png');
     end
-
+    
     linkaxes([hPlot(1),hPlot(2),hPlot(3)], 'x');
     for i = 1 : length( hPlot )
       %      set(hPlot(i), 'box', 'on','XTickMode','auto');
       set(hPlot(i), 'box', 'on','XTickMode','auto');
       datetick(hPlot(i),'x','mm/dd','keepticks' );
     end
-
+    
     % enable ButtonMotion on main fig after select QC area
     % ----------------------------------------------------
     set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion);
-
+    
   end
 
 %% ReportMenuCallback
@@ -3418,11 +3429,11 @@ end
 % Callback function run when the Report tool bar item is selected
 % -------------------------------------------------------------------
   function ReportMenuCallback(hObject, eventdata)
-
+    
     % call report function
     % --------------------
     saveReport(hMainFig);
-
+    
   end
 
 %% GoogleEarthMenuCallback
@@ -3430,8 +3441,8 @@ end
 % Callback function run when the Google Earth tool bar item is selected
 % -------------------------------------------------------------------
   function GoogleEarthMenuCallback(hObject, eventdata)
-
-        % Get tsg application data
+    
+    % Get tsg application data
     % ------------------------
     tsg = getappdata( hMainFig, 'tsg_data' );
     
@@ -3439,11 +3450,11 @@ end
     % --------------------------
     k = kml(tsg.CYCLE_MESURE);
     
-    % Color value format must be passed as a character array according 
+    % Color value format must be passed as a character array according
     % to the format string 'AABBGGRR', eg: red = 'FF0000FF'
     k.plot(tsg.LONX,tsg.LATX, 'linewidth', 2, 'linecolor', 'FF0000FF');
     k.run;
-
+    
   end
 
 %% SaveMenuCallback
@@ -3451,43 +3462,43 @@ end
 % 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
       % ------------------------------
@@ -3496,17 +3507,17 @@ end
           'NetCDF writing error: %s %s', pathName, fileName);
         return;
       end
-
+      
       % update the display
       % ------------------
       set( hInfoFileText, 'String', strcat(tsg.file.name, tsg.file.ext));
-
+      
       % enable Quality Control mode
       % ---------------------------
       hdl_pushtool = findobj('Tag', 'QC');
       set(hdl_pushtool, 'Enable', 'on');
     end
-
+    
   end
 
 %% ExportTsgCallback
@@ -3514,47 +3525,47 @@ end
 % Callback function run when the Export menu item is selected
 % -------------------------------------------------------------------
   function ExportTsgCallback(hObject, eventdata)
-
+    
     % Retrieve named application data
     % -------------------------------
     tsg = getappdata( hMainFig, 'tsg_data');
-
+    
     % Desactivate MouseMotion 'off'
     % ----------------------------
     set( hMainFig, 'WindowButtonMotionFcn', []);
-
+    
     % Open standard dialog box for saving files
     % -----------------------------------------
     [fileName, pathName, filterindex] = uiputfile('*.tsgqc', ...
       'Save file name', strcat(tsg.file.name, '.tsgqc'));
-
+    
     % 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' );
-
+    
     % Write a .TSG (ascii)  file
     % --------------------------
     error = writeAsciiTsg(hMainFig, strcat(pathName, fileName));
-
+    
     % Pointer reset to arrow
     % ----------------------
     set( hMainFig, 'Pointer', 'arrow' );
-
+    
     % enable Quality Control mode
     % ---------------------------
     hdl_pushtool = findobj('Tag', 'QC');
     set(hdl_pushtool, 'Enable', 'on');
-
+    
     % Set MouseMotion 'on'
     % --------------------
     set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion);
-
+    
     % Check for .TSG writing error - must to be rewriting
     % Because of the 'return' - These line must be at the end
     % --------------------------------------------------------
@@ -3563,54 +3574,54 @@ end
         'TSG no ouput: %s %s', pathName, fileName);
       return;
     end
-
+    
   end
 %% ExportSampleCallback
 % -------------------------------------------------------------------
 % Callback function run when the Export menu item is selected
 % -------------------------------------------------------------------
   function ExportSampleCallback(hObject, eventdata)
-
+    
     % Retrieve named application data
     % -------------------------------
     tsg = getappdata( hMainFig, 'tsg_data');
-
+    
     % Desactivate MouseMotion 'off'
     % ----------------------------
     set( hMainFig, 'WindowButtonMotionFcn', []);
-
+    
     % Open standard dialog box for saving files
     % -----------------------------------------
     [fileName, pathName, filterindex] = uiputfile('*.spl', ...
       'Save file name', strcat(tsg.file.name, '.spl'));
-
+    
     % 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' );
-
+    
     % Write a .SPL (ascii)  file
     % --------------------------
     error = writeAsciiSample(hMainFig, strcat(pathName, fileName));
-
+    
     % Pointer reset to arrow
     % ----------------------
     set( hMainFig, 'Pointer', 'arrow' );
-
+    
     % enable Quality Control mode
     % ---------------------------
     hdl_pushtool = findobj('Tag', 'QC');
     set(hdl_pushtool, 'Enable', 'on');
-
+    
     % Set MouseMotion 'on'
     % --------------------
     set( hMainFig, 'WindowButtonMotionFcn', @MouseMotion);
-
+    
     % Check for .TSG writing error - must to be rewriting
     % Because of the 'return' - These line must be at the end
     % --------------------------------------------------------
@@ -3619,7 +3630,7 @@ end
         'TSG no ouput: %s %s', pathName, fileName);
       return;
     end
-
+    
   end
 
 %% UndoMenuCallback
@@ -3627,18 +3638,18 @@ end
 % 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
@@ -3646,11 +3657,11 @@ end
 % 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
 
 %% KeyPressFcnCallback
@@ -3658,45 +3669,45 @@ end
 % Callback function run when key is pressed
 % -----------------------------------------------------------------------
   function keyPressFcnCallback(hObject, evnt)
-
+    
     % MATLAB generates repeated KeyPressFcn events, desactivate callback
     % ------------------------------------------------------------------
     set(hObject, 'KeyPressFcn', []);
-
+    
     % check if key is pressed
     % -----------------------
     if ~isempty(evnt.Key)
-
+      
       % test key, shift or control
       % --------------------------
       switch evnt.Key
-
+        
         case 'shift'
-
+          
           % get current pointer shape
           % -------------------------
           pointerShape = get(hObject, 'pointer');
-
+          
           % save current cursor shape
           % -------------------------
           setappdata( hMainFig, 'tsg_pointer', pointerShape);
-
+          
           % set cursor to fullcross or reset to normal arrow
           % ------------------------------------------------
           set(hObject, 'pointer', 'fullcrosshair');
-
+          
         case 'control'
-
+          
           % Get current position of cusor and return its coordinates in
           % axes
           % -----------------------------------------------------------
           a = get(hPlotAxes(1), 'CurrentPoint');
           x = a(2,1);
-
+          
           % Test if cursor is inside data interval
           % -------------------------------------
           if x > tsg.DAYD(1) && x < tsg.DAYD(end)
- 
+            
             % loop over 3 subplot and draw vertical lines
             % -------------------------------------------
             for iplot = 1:3
@@ -3707,11 +3718,11 @@ end
             end
             
           end
-
+          
       end % end of switch
-
+      
     end
-
+    
   end
 
 
@@ -3720,41 +3731,41 @@ end
 % Callback function run when key is release
 % -----------------------------------------------------------------------
   function keyReleaseFcnCallback(hObject, evnt)
-
+    
     % check if key is pressed
     % -----------------------
     if ~isempty(evnt.Key)
-
+      
       % test key, shift or control
       % --------------------------
       switch evnt.Key
-
+        
         case 'shift'
-
+          
           % get stored cursor shape
           % -----------------------
           pointerShape = getappdata( hMainFig, 'tsg_pointer');
-
+          
           % if pointer equal to fullcrosshair, oups, error, reset to arrow
           % ---------------------------------------------------------------
           if strcmp(pointerShape, 'fullcrosshair')
             pointerShape = 'arrow';
             set(hObject, 'pointer', pointerShape);
           end
-
+          
           % set pointer
           % -----------
           set(hObject, 'pointer', pointerShape);
-
+          
         case 'control'
           
-           % find vertical lines and delete them
-           % -----------------------------------
-            hdl_lines = findobj( 'Tag', 'VERTICAL_TAG_LINE' );
-            delete(hdl_lines);
-
+          % find vertical lines and delete them
+          % -----------------------------------
+          hdl_lines = findobj( 'Tag', 'VERTICAL_TAG_LINE' );
+          delete(hdl_lines);
+          
       end  % end of switch
-
+      
     end  % end of if
     
     % Re-activate callback
@@ -3768,12 +3779,12 @@ end
 % Callback function run when the Quit Map Figure item is selected
 % -----------------------------------------------------------------
   function QuitMapCallback(hObject, eventdata)
-
+    
     % Make the earth map invisible
     % ----------------------------
     set(hMapFig, 'Visible', 'off' );
     set(hMapToggletool, 'state',  'off' );
-
+    
   end
 
 %% QuitMenuCallback
@@ -3785,22 +3796,22 @@ end
     % Get the data from the application GUI
     % -------------------------------------
     tsg = getappdata(hMainFig, 'tsg_data');
-
+    
     % in case of bad initialisation, the user could close the windows
     % ---------------------------------------------------------------
     try
-
+      
       % save config mat file in prefdir
       % -------------------------------
       config_file = [prefdir, filesep, tsgqcname, '.mat'];
-
+      
       % save preference mat file
       % ------------------------
       if exist('tsg', 'var') && isfield( tsg, 'preference')
         preference = tsg.preference;
         save( config_file, 'preference');
       end
-
+      
       % If the data have been modified and not save, the program
       % ask to save the data
       % --------------------------------------------------------
@@ -3809,19 +3820,19 @@ end
           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(DEFAULT_PATH_FILE, hMainFig, hMapFig);
-
+        
       else
         selection = ...
           questdlg(['Quit ' get(hMainFig, 'Name') '?'],...
@@ -3833,7 +3844,7 @@ end
           quitProgram(DEFAULT_PATH_FILE, hMainFig, hMapFig);
         end
       end
-
+      
       % catch error during close windows
       % --------------------------------
     catch
@@ -3842,9 +3853,39 @@ end
       fprintf('abnormal program termination during close user request\n');
       quitProgram(DEFAULT_PATH_FILE, hMainFig);
     end
+    
+  end % end of QuitMenuCallback 
 
-  end
+  function quitProgram(DEFAULT_PATH_FILE, varargin)
+    
+    % close all windows
+    % -----------------
+    for ii=1:size(varargin,2)
+      delete(varargin{ii});
+    end
+    
+    % reset userdata property of root Matalab object (0) for next use
+    % ---------------------------------------------------------------
+    set(0, 'userdata', []);
+    
+    % reset Matlab search path to default
+    % addpath isn't mandatory and failed with compiled applications
+    % --------------------------------------------------------------
+    if (~isdeployed)
+      rmpath( [DEFAULT_PATH_FILE filesep 'tsg_util'] );
+      rmpath( [DEFAULT_PATH_FILE filesep 'tsg_data'] );
+      rmpath( [DEFAULT_PATH_FILE filesep 'tsg_io'] );
+    end
+    
+    % Refresh file system caches
+    % --------------------------
+    rehash;
+    
+    % clear base workspace just before quit, this is the only method
+    % to clear NetCDF variables assign to base workspace with assignin
+    % ----------------------------------------------------------------
+    evalin('base','clear all');
+    
+  end % end of quitProgram
 
-% end of tsgqc
-% ----------------
-end
+end % end of tsgqc
-- 
GitLab