From c4bd8b4f80a5c54560dcb471c7729673833c1db9 Mon Sep 17 00:00:00 2001
From: Yves Gouriou <yves.gouriou@ird.fr>
Date: Wed, 25 Mar 2009 17:55:08 +0000
Subject: [PATCH] La variable ADJUSTED est calcule en utilisant : soit la
 variable SSPS ou SSJT, SSTP soit les variables _CAL si elles existent.

---
 TSGQC_amelioration.xls           | Bin 25600 -> 25600 bytes
 tsg_data/DATA_FORMAT_TSG_V1-6.nc | Bin 1803596 -> 1803596 bytes
 tsg_util/corTsgLinear.m          |  43 ++++++++++++++-------------
 tsg_util/corTsgMedian.m          |  21 ++++++++------
 tsg_util/diffTsgSample.m         |  19 +++++++++---
 tsg_util/plot_Correction.m       |  48 ++++++++++++++++++-------------
 tsg_util/tsg_average.m           |  24 ++++++++++------
 tsgqc.m                          |  45 ++++++++++++++---------------
 8 files changed, 115 insertions(+), 85 deletions(-)

diff --git a/TSGQC_amelioration.xls b/TSGQC_amelioration.xls
index 3aededec1253305dc644757f578c597baa9e5077..90ebe87f65f6276904ba0446e0f439ebd2d18069 100644
GIT binary patch
delta 3911
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

delta 3878
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
Dxrh!J

diff --git a/tsg_data/DATA_FORMAT_TSG_V1-6.nc b/tsg_data/DATA_FORMAT_TSG_V1-6.nc
index 44430545a6b479c390a6c49761841f8203673750..2ae81e21b06bea2dba3ba8c4609beeb5e8fab7e7 100644
GIT binary patch
delta 168
zcmX@pm3O8qZ^L<Jc2h$$LklCr=4;ID*O(cBm<fnMY!)D91!6WJW(Q&pAm-eDjhTz@
z@%9B~95GL)Kk#OiXpcC<4a7X#BhK*pyh4_cn8V*LF-HK11%X&-yTlw}1+Mlh>&1as
qV*8c#k}(^$UzpB&OJw^6arS1F_K*EyKr9Z#5<o1u{bRpW^j81?8AjUx

delta 177567
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
P`f`1B^zzBqKmPMC8)%ni

diff --git a/tsg_util/corTsgLinear.m b/tsg_util/corTsgLinear.m
index e5c2375..991cd75 100644
--- a/tsg_util/corTsgLinear.m
+++ b/tsg_util/corTsgLinear.m
@@ -4,7 +4,10 @@ function [error] = corTsgLinear(hMainFig, PARA, dateMin, dateMax)
 % 
 % Input
 % hMainFig ..... Handle to the main GUI
-% PARA ......... Parameter
+% PARA ..........Cell array
+%                   PARA{1} contains the characters (SSP, SSJT, SSTP)
+%                   PARA{2} contains either the cahracters (SSPS, SSJT, SSTP)
+%                           or (SSPS_CAL, SSJT_CAL, SSTP_CAL)
 % dateMin ...... the correction is applied between dateMin and date Max
 % dateMax ...... the correction is applied between dateMin and date Max
 %
@@ -66,10 +69,10 @@ VALUE_CHANGED = tsg.qc.hash.VALUE_CHANGED.code;
 % Intialisation
 % 01/09/2009 : intialisation to NaN
 % ---------------------------------
-if isempty( tsg.([PARA '_ADJUSTED']) )  
-  tsg.([PARA '_ADJUSTED'])       = NaN*ones(size(tsg.(PARA)));
-  tsg.([PARA '_ADJUSTED_QC'])    = NaN*ones(size(tsg.([PARA '_QC'])));
-  tsg.([PARA '_ADJUSTED_ERROR']) = NaN*ones(size(tsg.(PARA))); 
+if isempty( tsg.([PARA{1} '_ADJUSTED']) )  
+  tsg.([PARA{1} '_ADJUSTED'])       = NaN*ones(size(tsg.(PARA{1})));
+  tsg.([PARA{1} '_ADJUSTED_QC'])    = NaN*ones(size(tsg.([PARA{1} '_QC'])));
+  tsg.([PARA{1} '_ADJUSTED_ERROR']) = NaN*ones(size(tsg.(PARA{1}))); 
 end
 
 if dateMax > dateMin
@@ -77,7 +80,7 @@ if dateMax > dateMin
   % Find samples within TIME_WINDOWS with Good, probably Good, QC
   % -------------------------------------------------------------
   ind = find( tsg.DAYD_EXT    >= dateMin &  tsg.DAYD_EXT    <= dateMax &...
-    tsg.([SAMPLE '_EXT_QC']) <= PROBABLY_GOOD);
+              tsg.([SAMPLE '_EXT_QC']) <= PROBABLY_GOOD);
 
   if ~isempty(ind)
 
@@ -102,24 +105,24 @@ if dateMax > dateMin
       % ------------------------------------------------------------------------
       for icode = 1 : length( keptCode )
         dtTsg = find( tsg.DAYD    >= dateMin  & tsg.DAYD <= dateMax &...
-          tsg.([PARA '_QC']) == keptCode( icode ));
+                      tsg.([PARA{1} '_QC']) == keptCode( icode ));
 
         if ~isempty( dtTsg )
 
           % Compute the correction + the error
           % ----------------------------------
-          [tsg.([PARA '_ADJUSTED'])(dtTsg),...
-            tsg.([PARA '_ADJUSTED_ERROR'])(dtTsg)] =...
+          [tsg.([PARA{1} '_ADJUSTED'])(dtTsg),...
+            tsg.([PARA{1} '_ADJUSTED_ERROR'])(dtTsg)] =...
                                             polyval( p, tsg.DAYD(dtTsg), S, mu);
 
           % Compute the corrected value : orignal value + correction
           % --------------------------------------------------------
-          tsg.([PARA '_ADJUSTED'])(dtTsg) =...
-                            tsg.(PARA)(dtTsg) + tsg.([PARA '_ADJUSTED'])(dtTsg);
+          tsg.([PARA{1} '_ADJUSTED'])(dtTsg) =...
+                   tsg.(PARA{2})(dtTsg) + tsg.([PARA{1} '_ADJUSTED'])(dtTsg);
 
           % Transfer the QC
           % ---------------
-          tsg.([PARA '_ADJUSTED_QC'])(dtTsg) = tsg.([PARA '_QC'])(dtTsg);
+          tsg.([PARA{1} '_ADJUSTED_QC'])(dtTsg) = tsg.([PARA{1} '_QC'])(dtTsg);
         end
       end
 
@@ -134,12 +137,12 @@ if dateMax > dateMin
       % ------------------------------------------------------------------------
       for icode = 1 : length( keptCode )
         dtTsg = find( tsg.DAYD    >= dateMin  & tsg.DAYD <= dateMax &...
-                      tsg.([PARA '_QC']) == keptCode( icode ));
+                      tsg.([PARA{1} '_QC']) == keptCode( icode ));
 
         if ~isempty( dtTsg )
-          tsg.([PARA '_ADJUSTED'])(dtTsg)       = tsg.(PARA)(dtTsg) + meanDif;
-          tsg.([PARA '_ADJUSTED_ERROR'])(dtTsg) = meanDif / 2;
-          tsg.([PARA '_ADJUSTED_QC'])(dtTsg)    = tsg.([PARA '_QC'])(dtTsg);
+          tsg.([PARA{1} '_ADJUSTED'])(dtTsg) = tsg.(PARA{2})(dtTsg) + meanDif;
+          tsg.([PARA{1} '_ADJUSTED_ERROR'])(dtTsg) = meanDif / 2;
+          tsg.([PARA{1} '_ADJUSTED_QC'])(dtTsg) = tsg.([PARA{1} '_QC'])(dtTsg);
         end
       end
 
@@ -148,11 +151,11 @@ if dateMax > dateMin
     % The error minimum cannot be lower than 0.01 or equal to Inf
     % -----------------------------------------------------------
     if ~isempty(ind2) && length(ind2) >= 2
-      tsg.([PARA '_ADJUSTED_ERROR'])...
-                               ( tsg.([PARA '_ADJUSTED_ERROR']) < 0.01 ) = 0.01;
+      tsg.([PARA{1} '_ADJUSTED_ERROR'])...
+                               ( tsg.([PARA{1} '_ADJUSTED_ERROR']) < 0.01 ) = 0.01;
 
-      tsg.([PARA '_ADJUSTED_ERROR'])...
-                            (isinf(tsg.([PARA '_ADJUSTED_ERROR'])) == 1) = 0.01;
+      tsg.([PARA{1} '_ADJUSTED_ERROR'])...
+                            (isinf(tsg.([PARA{1} '_ADJUSTED_ERROR'])) == 1) = 0.01;
     end
     %       end
   end
diff --git a/tsg_util/corTsgMedian.m b/tsg_util/corTsgMedian.m
index f55e748..401c936 100644
--- a/tsg_util/corTsgMedian.m
+++ b/tsg_util/corTsgMedian.m
@@ -6,7 +6,10 @@ function [error] = corTsgMedian(hMainFig, PARA, dateMin, dateMax)
 % 
 % Input
 % hMainFig ..... Handle to the main GUI
-% PARA ......... Parameter (SSPS, SSJT, SSTP)
+% PARA ..........Cell array
+%                   PARA{1} contains the characters (SSP, SSJT, SSTP)
+%                   PARA{2} contains either the cahracters (SSPS, SSJT, SSTP)
+%                           or (SSPS_CAL, SSJT_CAL, SSTP_CAL)
 % dateMin ...... the correction is applied between dateMin and date Max
 % dateMax ...... the correction is applied between dateMin and date Max
 %
@@ -62,10 +65,10 @@ VALUE_CHANGED = tsg.qc.hash.VALUE_CHANGED.code;
 
 % intialisation
 % -------------
-if isempty( tsg.([PARA '_ADJUSTED']) )  
-  tsg.([PARA '_ADJUSTED'])       = NaN*ones(size(tsg.(PARA)));
-  tsg.([PARA '_ADJUSTED_QC'])    = NaN*ones(size(tsg.([PARA '_QC'])));
-  tsg.([PARA '_ADJUSTED_ERROR']) = NaN*ones(size(tsg.(PARA))); 
+if isempty( tsg.([PARA{1} '_ADJUSTED']) )  
+  tsg.([PARA{1} '_ADJUSTED'])       = NaN*ones(size(tsg.(PARA{1})));
+  tsg.([PARA{1} '_ADJUSTED_QC'])    = NaN*ones(size(tsg.([PARA{1} '_QC'])));
+  tsg.([PARA{1} '_ADJUSTED_ERROR']) = NaN*ones(size(tsg.(PARA{1}))); 
 end
 
 % Create a structure with an NaN
@@ -185,13 +188,13 @@ if dateMax > dateMin
     % ----------------------------------------------------------------------
     for icode = 1 : length( keptCode )
       dtTsg = find( tsg.DAYD    >= dateMin  & tsg.DAYD <= dateMax &...
-                    tsg.([PARA '_QC']) == keptCode( icode ));
+                    tsg.([PARA{1} '_QC']) == keptCode( icode ));
 
-      tsg.([PARA '_ADJUSTED'])(dtTsg)       = tsg.(PARA)(dtTsg) + ...
+      tsg.([PARA{1} '_ADJUSTED'])(dtTsg)       = tsg.(PARA{2})(dtTsg) + ...
                                   interp1(cor.DAYD, cor.DIFF, tsg.DAYD(dtTsg));
-      tsg.([PARA '_ADJUSTED_ERROR'])(dtTsg) = ...
+      tsg.([PARA{1} '_ADJUSTED_ERROR'])(dtTsg) = ...
                                   interp1(cor.DAYD, cor.ERROR, tsg.DAYD(dtTsg));
-      tsg.([PARA '_ADJUSTED_QC'])(dtTsg) = tsg.([PARA '_QC'])(dtTsg);
+      tsg.([PARA{1} '_ADJUSTED_QC'])(dtTsg) = tsg.([PARA{1} '_QC'])(dtTsg);
     end
         
   end
diff --git a/tsg_util/diffTsgSample.m b/tsg_util/diffTsgSample.m
index 0f4158b..d9a8784 100644
--- a/tsg_util/diffTsgSample.m
+++ b/tsg_util/diffTsgSample.m
@@ -1,12 +1,22 @@
 function diffTsgSample(hMainFig, PARA)
 %
 % Co-location of sample and TSG measurements
-% Compute the sample-TSG difference
+% Compute the Sample - TSG difference
+% 
+% The TSG value is either the raw parameter either the calibrated parameter
+% depending if a calibration has been done.
+%
+% Input
+% hMainFig ........ Handle to the main GUI : TSGQC
+% PARA ............ Cell array
+%                   PARA{1} contains the characters (SSP, SSJT, SSTP)
+%                   PARA{2} contains either the cahracters (SSPS, SSJT, SSTP)
+%                           or (SSPS_CAL, SSJT_CAL, SSTP_CAL)
 %
 
 % Get the tsg and sample structures from the application
 % ------------------------------------------------------
-tsg    = getappdata( hMainFig, 'tsg_data');
+tsg = getappdata( hMainFig, 'tsg_data');
 
 % Get PROBABLY_GOOD code
 % ----------------------
@@ -16,14 +26,14 @@ defaultValueCode = tsg.qc.hash.MISSING_VALUE.code;
 % For temperature : 
 % IF PARA = 'SSJT' use 'SSTP' to get the samples
 % ----------------------------------------------
-SAMPLE = PARA;
+SAMPLE = char( PARA{1} );
 if strcmp( SAMPLE, 'SSJT')
   SAMPLE = 'SSTP';
 end
 
 % Consider only tsg data with NO_CONTROL, GOOD and PROBABLY_GOOD code
 % -------------------------------------------------------------------
-indTsg = find( tsg.([PARA '_QC']) < defaultValueCode );
+indTsg = find( tsg.([PARA{1} '_QC']) < defaultValueCode );
 
 if ~isempty( indTsg )
 
@@ -46,6 +56,7 @@ if ~isempty( indTsg )
     % Keep the smooth TSG value
     % -------------------------
     smooth = tsg_average(hMainFig, PARA, indMin);
+    
     if  timeDiff(indMin) < tsg.cst.TSG_WS_TIMEDIFF && ~isnan(smooth)
 
       % The smooth TSG time series (tsg_moveaverage) is
diff --git a/tsg_util/plot_Correction.m b/tsg_util/plot_Correction.m
index 2bab3d7..9e766c2 100644
--- a/tsg_util/plot_Correction.m
+++ b/tsg_util/plot_Correction.m
@@ -1,4 +1,12 @@
 function plot_Correction( hMainFig, hPlotAxes, PARA )
+%
+% Input
+% hMainFig ........ Handle to the main GUI : TSGQC
+% hPlotAxes ....... Handle des axes
+% PARA ............ Cell array
+%                   PARA{1} contains the characters (SSP, SSJT, SSTP)
+%                   PARA{2} contains either the cahracters (SSPS, SSJT, SSTP)
+%                           or (SSPS_CAL, SSJT_CAL, SSTP_CAL)
 
 % Reinitialise plot 1 and 3
 % -------------------------
@@ -27,7 +35,7 @@ if ~isempty( tsg.([SAMPLE '_EXT']) )
   if ~isempty(indWS)
     plot_Tsg( hMainFig, hPlotAxes, 1, tsg.DAYD_EXT(indWS),...
               tsg.EXT_DIF(indWS), tsg.([SAMPLE '_EXT_QC'])(indWS),...
-              [PARA '_WS'],'','none','square',5);
+              [PARA{1} '_WS'],'','none','square',5);
   end
   
   % Plot other (external) samples
@@ -36,68 +44,68 @@ if ~isempty( tsg.([SAMPLE '_EXT']) )
   if ~isempty(indEXT)
     plot_Tsg( hMainFig, hPlotAxes, 1, tsg.DAYD_EXT(indEXT),...
               tsg.EXT_DIF(indEXT), tsg.([SAMPLE '_EXT_QC'])(indEXT),...
-              [PARA '_EXT'],'','none','o',5);
+              [PARA{1} '_EXT'],'','none','o',5);
   end
 end
 
 % Select the records CORRECTED 
 % Records corrected have an error value
 % -------------------------------------------
-iERR = find( isnan(tsg.([PARA '_ADJUSTED_ERROR'])) == 0);
+iERR = find( isnan(tsg.([PARA{1} '_ADJUSTED_ERROR'])) == 0);
 
 % Plot the difference tsg.SSPS_ADJUSTED-tsg.SSPS on axe 1
 % but only for records that were corrected using Water Sample
-% and but not corrected with the calibration coefficients.
 % -----------------------------------------------------------
 if iERR ~= 0
   plot_Tsg( hMainFig, hPlotAxes, 1,...
             tsg.DAYD(iERR),...
-            tsg.([PARA '_ADJUSTED'])(iERR)-tsg.(PARA)(iERR),...
-            [], [PARA '_ADJUSTED'],'b','none','.',1);
+            tsg.([PARA{1} '_ADJUSTED'])(iERR)-tsg.(PARA{2})(iERR),...
+            [], [PARA{1} '_ADJUSTED'],'b','none','.',1);
 end
 
 % **************************** AXE 2 ***********************************
 
-% Plot SSPS, SSJT, SSTP and SAMPLE, with code color, on axe 2
+% Plot SAMPLE and SSPS (SSJT, SSTP) with code color, on axe 2
 % -----------------------------------------------------------
-plot_Tsg( hMainFig, hPlotAxes, 2, tsg.DAYD, tsg.(PARA), tsg.([PARA '_QC']),...
-          PARA,'','none','*',2);
-        
 if ~isempty( tsg.([SAMPLE '_EXT']) )
   ind   = 1: length( tsg.([SAMPLE '_EXT_TYPE']));
   indWS = strmatch( 'WS', tsg.([SAMPLE '_EXT_TYPE']), 'exact');
   if ~isempty(indWS)
     plot_Tsg( hMainFig, hPlotAxes, 2, tsg.DAYD_EXT(indWS),...
               tsg.([SAMPLE '_EXT'])(indWS), tsg.([SAMPLE '_EXT_QC'])(indWS),...
-              [PARA '_WS'],'','none','square',5);
+              [PARA{1} '_WS'],'','none','square',5);
   end
   indEXT = setxor(ind, indWS);
   if ~isempty(indEXT)
     plot_Tsg( hMainFig, hPlotAxes, 2, tsg.DAYD_EXT(indEXT),...
               tsg.([SAMPLE '_EXT'])(indEXT), tsg.([SAMPLE '_EXT_QC'])(indEXT),...
-              [PARA '_EXT'],'','none','o',5);
+              [PARA{1} '_EXT'],'','none','o',5);
   end
 end
 
+plot_Tsg( hMainFig, hPlotAxes, 2, tsg.DAYD, tsg.(PARA{2}), tsg.([PARA{1} '_QC']),...
+          PARA{2},'','none','*',2);
+        
+
 % **************************** AXE 3 ***********************************
 
 % Plot SSPS, with no code, on axe3
 % --------------------------------
-plot_Tsg( hMainFig, hPlotAxes, 3, tsg.DAYD, tsg.([PARA '_ADJUSTED']), [],...
-            [PARA '_ADJUSTED'],'r','none','*',2);
+plot_Tsg( hMainFig, hPlotAxes, 3, tsg.DAYD, tsg.([PARA{1} '_ADJUSTED']), [],...
+          [PARA{1} '_ADJUSTED'],'r','none','*',2);
           
-plot_Tsg( hMainFig, hPlotAxes, 3, tsg.DAYD, tsg.(PARA),...
-          [],PARA,'k','none','*',2);
+plot_Tsg( hMainFig, hPlotAxes, 3, tsg.DAYD, tsg.(PARA{2}),...
+          [],PARA{2},'k','none','*',2);
 
 % Plot TSG_ADJUSTED + ERROR on axe 3
 % -----------------------------------
 if iERR ~= 0
   plot_Tsg( hMainFig, hPlotAxes, 3, tsg.DAYD(iERR),...
-          tsg.([PARA '_ADJUSTED'])(iERR) + tsg.([PARA '_ADJUSTED_ERROR'])(iERR),...
-          [], [PARA '_ADJUSTED'],'g','none','*',2);
+          tsg.([PARA{1} '_ADJUSTED'])(iERR) + tsg.([PARA{1} '_ADJUSTED_ERROR'])(iERR),...
+          [], [PARA{1} '_ADJUSTED'],'g','none','*',2);
   plot_Tsg( hMainFig, hPlotAxes, 3, tsg.DAYD(iERR),...
-          tsg.([PARA '_ADJUSTED'])(iERR) - tsg.([PARA '_ADJUSTED_ERROR'])(iERR),...
-          [], [PARA '_ADJUSTED'],'g','none','*',2);
+          tsg.([PARA{1} '_ADJUSTED'])(iERR) - tsg.([PARA{1} '_ADJUSTED_ERROR'])(iERR),...
+          [], [PARA{1} '_ADJUSTED'],'g','none','*',2);
 end
 
 end
diff --git a/tsg_util/tsg_average.m b/tsg_util/tsg_average.m
index 4464827..ffe8d9e 100644
--- a/tsg_util/tsg_average.m
+++ b/tsg_util/tsg_average.m
@@ -6,7 +6,13 @@ function [smooth] = tsg_average(hMainFig, PARA, iTsg)
 % are not taken into account.
 %
 % Input
-% hMainFig ............ Handle to the main user interface
+% hMainFig ........ Handle to the main GUI : TSGQC
+% PARA ............ Cell array
+%                   PARA{1} contains the characters (SSP, SSJT, SSTP)
+%                   PARA{2} contains either the cahracters (SSPS, SSJT, SSTP)
+%                           or (SSPS_CAL, SSJT_CAL, SSTP_CAL)
+% iTsg ............ Indice of the TSG measurement the closest to the sample
+%                   taking into account the TSG quality code
 %
 % No computation : NaN
 %
@@ -20,7 +26,7 @@ tsg = getappdata( hMainFig, 'tsg_data');
 % ind2 : indices of tsg.PARA not rejected by the S.D. test
 % -----------------------------------------------------------------------
 ind1 = find( tsg.DAYD >= tsg.DAYD(iTsg) - tsg.cst.TSG_DT_SMOOTH/2 & ...
-  tsg.DAYD <= tsg.DAYD(iTsg) + tsg.cst.TSG_DT_SMOOTH/2 );
+             tsg.DAYD <= tsg.DAYD(iTsg) + tsg.cst.TSG_DT_SMOOTH/2 );
 
 ind2 = ind1;
 if ~isempty(ind2)
@@ -30,22 +36,22 @@ if ~isempty(ind2)
 
   % Compare Standard Deviation to the MAX acceptable STD
   % ----------------------------------------------------
-  while currentStd > tsg.([PARA '_STDMAX']) && currentStd ~= previousStd
+  while currentStd > tsg.([PARA{1} '_STDMAX']) && currentStd ~= previousStd
 
     previousStd = currentStd;
 
     % Standard deviation and average over timeInterval
     % ------------------------------------------------
-    currentStd = nanstd(  tsg.(PARA)(ind2) );
-    meanParam  = nanmean( tsg.(PARA)(ind2) );
+    currentStd = nanstd(  tsg.(PARA{2})(ind2) );
+    meanParam  = nanmean( tsg.(PARA{2})(ind2) );
 
-    % Indices of 'good' values of Param
+    % Indices of 'good' values of Para
     % ---------------------------------
-    ind2 = ind1( tsg.(PARA)(ind1) >= meanParam - currentStd & ...
-      tsg.(PARA)(ind1) <= meanParam + currentStd );
+    ind2 = ind1( tsg.(PARA{2})(ind1) >= meanParam - currentStd & ...
+                 tsg.(PARA{2})(ind1) <= meanParam + currentStd );
   end
 
-  smooth = nanmean( tsg.(PARA)(ind2) );
+  smooth = nanmean( tsg.(PARA{2})(ind2) );
 
 else
   smooth = NaN;
diff --git a/tsgqc.m b/tsgqc.m
index 6d4ba5c..d5c3fee 100644
--- a/tsgqc.m
+++ b/tsgqc.m
@@ -2384,12 +2384,7 @@ hrbInterpCancel = uicontrol( ...
     % Get the parameter we are working on (SSPS, SSJT, SSTP)
     % ------------------------------------------------------
     SAMPLE = tsg.plot.sample;
-    PARA   = tsg.plot.parameter{1};
-%     % test if _CAL variable exist
-%     % ---------------------------
-%     if ~isempty( tsg.([PARA '_CAL']) )
-%       PARA = [PARA '_CAL'];
-%     end
+    PARA = getParaCorModule( hMainFig );
 
     % Switch somme buttons
     % --------------------
@@ -2506,25 +2501,21 @@ hrbInterpCancel = uicontrol( ...
     tsg = getappdata(hMainFig, 'tsg_data');
 
     % Get parameter we are working on (SSPS, SSJT, SSTP)
-    % --------------------------------------------------
-    PARA = tsg.plot.parameter{1};
+    % or SSPS_CAL, SSJT_CAL, SSTP_CAL
+    % -------------------------------------------------
+    PARA = getParaCorModule( hMainFig );
 
     % To cancel the correction set the ADJUSTED variable
     % to []
     % --------------------------------------------------
-    tsg.([PARA '_ADJUSTED']) = [];
-    tsg.([PARA '_ADJUSTED_QC']) = [];
-    tsg.([PARA '_ADJUSTED_ERROR']) = [];
+    tsg.([PARA{1} '_ADJUSTED']) = [];
+    tsg.([PARA{1} '_ADJUSTED_QC']) = [];
+    tsg.([PARA{1} '_ADJUSTED_ERROR']) = [];
 
     % Save tsg data
     % -------------
     setappdata(hMainFig, 'tsg_data', tsg);
 
-    % Set the ADJUSTED variable either to the raw variable or to
-    % the calibrated variable
-    % ----------------------------------------------------------
-    % updateAdjustedVariable( hMainFig );
-
     % Plot in the 3 axes
     % ------------------
     plot_Correction( hMainFig, hPlotAxes, PARA );
@@ -2548,10 +2539,14 @@ hrbInterpCancel = uicontrol( ...
     dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
     dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
 
-    % Get the parameter (SSPS, SSJT, or SSTP)
-    % ---------------------------------------
+    % Get tsg application data
+    % ------------------------
     tsg    = getappdata(hMainFig, 'tsg_data');
-    PARA   = tsg.plot.parameter{1};
+    
+    % 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']) )
@@ -2598,10 +2593,14 @@ hrbInterpCancel = uicontrol( ...
     dateMin = datenum(get( hetDateMin, 'String'), 'yyyy-mm-dd HH:MM:SS');
     dateMax = datenum(get( hetDateMax, 'String'), 'yyyy-mm-dd HH:MM:SS');
 
-    % Get the parameter (SSPS, SSJT, or SSTP)
-    % ---------------------------------------
-    tsg    = getappdata(hMainFig, 'tsg_data');
-    PARA   = tsg.plot.parameter{1};
+    % 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']) )
-- 
GitLab