function [error] = corTsgLinear(hMainFig, PARA, dateMin, dateMax)
% Correct the TSG salinity time series with the Water sample.
% Use a linear fit to the water sample/tsg difference
% 
% Input
% hMainFig ..... Handle to the main GUI
% PARA ......... Parameter
% dateMin ...... the correction is applied between dateMin and date Max
% dateMax ...... the correction is applied between dateMin and date Max
%
% Output
% Error ........  1 everything OK
%       ........ -1 dateMax <= date Min

% Get application data
% --------------------
tsg    = getappdata( hMainFig, 'tsg_data');

% Get PROBABLY_GOOD, PROBABLY_BAD and VALUE_CHANGED codes
% -------------------------------------------------------
PROBABLY_GOOD = get(tsg.qc.hash, 'PROBABLY_GOOD', 'code');
PROBABLY_BAD  = get(tsg.qc.hash, 'PROBABLY_BAD',  'code');
VALUE_CHANGED = get(tsg.qc.hash, 'VALUE_CHANGED', 'code');

if dateMax > dateMin
   
  % intialisation
  % -------------
  if isempty( tsg.([PARA '_ADJUSTED']) )
    msgbox( ['Variable ' PARA '_ADJUSTED should be initialise in updateTsgStruct'],...
            'Function ''corTsgLinear''',...
            'warn', 'modal');
  end
 
  % Find samples within TIME_WINDOWS with Good and probably Good QC
  % ---------------------------------------------------------------
  ind = find( tsg.DAYD_SPL    >= dateMin &  tsg.DAYD_SPL    <= dateMax &...
              tsg.([PARA '_SPL_QC']) <= PROBABLY_GOOD);

  if ~isempty(ind)

    % detect NaN in sample.SSPS_DIF due to bad QC code for tsg.SSPS
    % -------------------------------------------------------------
    ind2 = find(~isnan(tsg.([PARA '_SPL_DIF'])(ind)));

    % Compute linear fit of the TSG/SAMPLE difference
    % -----------------------------------------------
    if ~isempty(ind2)
      if ~isempty(tsg.([PARA '_SPL_DIF'])(ind(ind2)))

        % Linear fit applied to the difference tsg-sample
        % -----------------------------------------------
        X = tsg.DAYD_SPL(ind(ind2));
        Y = tsg.([PARA '_SPL_DIF'])(ind(ind2));

        [p, S, mu] = polyfit( X, Y, 1);

        % The correction is applied to the TSG between dateMin and dateMax using
        % a linear interpolation only on measurements with GOOD and
        % PROBABLY_GOOD QC
        % ----------------------------------------------------------------------
        dtTsg = find( tsg.DAYD    >= dateMin  & tsg.DAYD <= dateMax &...
          tsg.([PARA '_QC']) <= PROBABLY_GOOD);

        [tsg.([PARA '_ADJUSTED'])(dtTsg), tsg.([PARA '_ADJUSTED_ERROR'])(dtTsg)] =...
                            polyval( p, tsg.DAYD(dtTsg), S, mu);
        tsg.([PARA '_ADJUSTED'])(dtTsg) = ...
                            tsg.(PARA)(dtTsg) + tsg.([PARA '_ADJUSTED'])(dtTsg);

        % VALUE_CHANGED code
        % ------------------
        tsg.([PARA '_ADJUSTED_QC'])(dtTsg) = VALUE_CHANGED;
      end
    end
  end

  % Update the QC sample Code
  % -------------------------
  updateSampleQC( hMainFig, PARA );

  % Update tsg application data
  % ---------------------------
  setappdata( hMainFig, 'tsg_data', tsg);

  % everything OK
  % -------------
  error = 1;

else

  % DateMax <= DateMin
  % ------------------
  error = -1;

end


