function [] = automaticQC( hMainFig ) % % function [] = automaticQC( hTsgGUI ) % % Automatic controlon TSG time series % % Test for : % 1 - % 2 - Increasing date % 3 - SSS < 0 and SSS > 50 % % TODO : Create a log file with the results of these tests % % Get application data : TSG structure % -------------------------------------- tsg = getappdata( hMainFig, 'tsg_data'); % Get tsg fieldnames % ------------------ tsgNames = fieldnames(tsg); nbFieldNames = length( tsgNames ); % Get the size of the times series array % -------------------------------------- tsgLength = length( tsg.DAYD ); 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 ); while ~isempty( ind ) % if DAYD is of length N, DIFF is of length N-1 % Need to add one to the indices % --------------------------------------------- ind = ind + 1; % Store the number of bad date % ----------------------------- nbBadDate = nbBadDate + length( ind ); % Delete bad records % ------------------ for i = 1 : nbFieldNames para = char( tsgNames{i} ); % Find array of length DAYD in the TSG structure % ---------------------------------------------- if length( tsg.(para) ) == tsgLength tsg.(para)(ind,:) = []; end end % Tsg length has been modified % ---------------------------- tsgLength = tsgLength - length( ind ); difDate = diff( tsg.DAYD ); ind = find( difDate < 0 ); 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; end 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 > 50 % ----------------------------------- ind = find(tsg.SSPS > 50); 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 temperature QC to BAD for SSTP > 40 % --------------------------------------- ind = find(tsg.SSTP > 40); if ~isempty( ind ) tsg.SSTP_QC(ind) = castByteQC( badCode, ind ); end % Set temperature 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 % ------------------------------------ setappdata( hMainFig, 'tsg_data', tsg ); end