Skip to content
Snippets Groups Projects
interpPosLinear.m 1.9 KiB
Newer Older
function [error] = interpPosLinear( hMainFig, dateMin, dateMax )
%
% Function that interpolate linearly Latitude and position when they are
% set to NaN
%
% Input
% hMainFig ..... Handle to the main GUI
% 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 NO_CONTROL and INTERPOLATED_VALUE codes
% -------------------------------------------
NO_CONTROL         = get(tsg.qc.hash, 'NO_CONTROL', 'code');
INTERPOLATED_VALUE = get(tsg.qc.hash, 'INTERPOLATED_VALUE', 'code');

error = 1;
if dateMax > dateMin

  % Indices of the records to interpolate
  % -------------------------------------
  iRec = find( tsg.DAYD >= dateMin & tsg.DAYD <= dateMax );
  if ~isempty( iRec )
    % Look for records with Good Position
    % -----------------------------------
    iGP = find( isnan(tsg.LATX(iRec)) == 0 );
    % Look for records with No Position
    % -----------------------------------
    iNP = find( isnan(tsg.LATX(iRec)) == 1 );
    if ~isempty( iNP ) && ~isempty( iGP )

      Y = interp1(tsg.DAYD(iRec(iGP)), tsg.LATX(iRec(iGP)), tsg.DAYD(iRec) );
      
      tsg.LATX(iRec(iNP)) = Y(iRec(iNP) - iRec(1) + 1);

      Y = interp1(tsg.DAYD(iRec(iGP)), tsg.LONX(iRec(iGP)), tsg.DAYD(iRec) );
      
      tsg.LONX(iRec(iNP)) = Y(iRec(iNP) - iRec(1) + 1);

      if isempty( tsg.POSITION_QC )
        tsg.POSITION_QC = castByteQC( NO_CONTROL, tsg.DAYD );
      end

      tsg.POSITION_QC(iRec(iNP)) = INTERPOLATED_VALUE;
      
  
  % Update tsg application data
  % ---------------------------
  setappdata( hMainFig, 'tsg_data', tsg);

else

  error = -1;

end

end