Newer
Older
%
% function [] = automaticQC( hTsgGUI )
%
% Automatic controlon TSG time series
%
% Test for :
% 1 -
% 2 - Increasing date
% 3 - SSS < 0 and SSS > 40
%
% TODO : Create a log file with the results of these tests
%
% Get application data : TSG structure
% --------------------------------------
MISSING_VALUE = get(tsg.qc.hash, 'MISSING_VALUE', 'code');
% ************************** TEST 1 ***********************************
%
% Detect records with date and time at NaN.
% This is done in the reading function
% ************************** TEST 2 ***********************************
%
% Test if the records are correctly sorted : increasing date
% Delete the records with inversion
%
% Find negative differences between successive dates
nbBadDate = 0;
difDate = diff( tsg.DAYD );
ind = find( difDate < 0 ) + 1;
nbBadDate = nbBadDate + length( nbBadDate );
if ~isempty( tsg.DAYD ); tsg.DAYD(ind) = []; end;
if ~isempty( tsg.DATE ); tsg.DATE(ind, :) = []; end;
if ~isempty( tsg.LATX ); tsg.LATX(ind) = []; end;
if ~isempty( tsg.LONX ); tsg.LONX(ind) = []; end;
if ~isempty( tsg.SSPS ); tsg.SSPS(ind) = []; end;
if ~isempty( tsg.SSPS_QC ); tsg.SSPS_QC(ind) = []; end;
if ~isempty( tsg.SSJT ); tsg.SSJT(ind) = []; end;
if ~isempty( tsg.SSJT_QC ); tsg.SSJT_QC(ind) = []; end;
if ~isempty( tsg.SSTP ); tsg.SSTP(ind) = []; end;
if ~isempty( tsg.SSTP_QC ); tsg.SSTP_QC(ind) = []; end;
if ~isempty( tsg.CNDC ); tsg.CNDC(ind) = []; end;
if ~isempty( tsg.SPDC ); tsg.SPDC(ind) = []; end;
if ~isempty( tsg.CNDC_FREQ ); tsg.CNDC_FREQ(ind) = []; end;
if ~isempty( tsg.SSJT_FREQ ); tsg.SSJT_FREQ(ind) = []; end;
difDate = diff( tsg.DAYD );
ind = find( difDate < 0 ) + 1;
end
% Keep the number of data not in increasing date
% ----------------------------------------------
tsg.report.sortdate = nbBadDate;
% NO_VALUE code
% -------------
ind = find( isnan(tsg.SSPS) == 1);
if ~isempty( ind )
tsg.SSPS_QC(ind) = MISSING_VALUE;
ind = find( isnan(tsg.SSJT) == 1);
if ~isempty( ind )
tsg.SSJT_QC(ind) = MISSING_VALUE;
end
ind = find( isnan(tsg.SSTP) == 1);
if ~isempty( ind )
tsg.SSTP_QC(ind) = MISSING_VALUE;
end
% ************************** TEST 3 ***********************************
%
% Get BAD code value
% ------------------
badCode = get(tsg.qc.hash, 'BAD', 'code');
% Set salinity QC to BAD for SSS > 40
% -----------------------------------
ind = find(tsg.SSPS > 40);
if ~isempty( ind )
tsg.SSPS_QC(ind) = castByteQC( badCode, ind );
end
% Set salinity QC to BAD for SSS < 0
% -----------------------------------
ind = find(tsg.SSPS < 0);
if ~isempty( ind )
tsg.SSPS_QC(ind) = castByteQC( badCode, ind );
end
% Set salinity QC to BAD for SSTP > 40
% -----------------------------------
ind = find(tsg.SSTP > 40);
if ~isempty( ind )
tsg.SSTP_QC(ind) = castByteQC( badCode, ind );
end
% Set salinity QC to BAD for STP < -3
% -----------------------------------
ind = find(tsg.SSTP < -3);
if ~isempty( ind )
tsg.SSTP_QC(ind) = castByteQC( badCode, ind );
end
% Save the data in the application GUI
% ------------------------------------