Newer
Older
function [smooth] = tsg_average(hMainFig, PARA, iTsg)
% Perform the average of a time series at the position of a WS sample
%
% The average is made for a period equal to 'tsg.cst.TSG_DT_SMOOTH'
% Data exceeding the average over that period by 'tsg.cst.TSG_STDMAX'
% are not taken into account.
%
% 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)
% iTsg ............ Indice of the TSG measurement the closest to the sample
% taking into account the TSG quality code
%
% No computation : NaN
% Get the tsg structure from the application
% ------------------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
% Get QC codes
% ------------
probablyGoodCode = tsg.qc.hash.PROBABLY_GOOD.code;
GoodCode = tsg.qc.hash.GOOD.code;
harbourCode = tsg.qc.hash.HARBOUR.code;
noControlCode = tsg.qc.hash.NO_CONTROL.code;
% Select the param data over 'tsg.cst.TSG_DT_SMOOTH' time interval
% taking into account the TSG quality code
% ind1 : indices of tsg.PARA in the 'tsg.cst.TSG_DT_SMOOTH' time interval
% 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.([PARA{1} '_QC']) == probablyGoodCode | ...
tsg.([PARA{1} '_QC']) == GoodCode | ...
tsg.([PARA{1} '_QC']) == harbourCode | ...
tsg.([PARA{1} '_QC']) == noControlCode));
ind2 = ind1;
if ~isempty(ind2)
currentStd = Inf;
previousStd = 0;
% Compare Standard Deviation to the MAX acceptable STD
% ----------------------------------------------------
while currentStd > tsg.([PARA{1} '_STDMAX']) && currentStd ~= previousStd
previousStd = currentStd;
% Standard deviation and average over timeInterval
% ------------------------------------------------
currentStd = nanstd( tsg.(PARA{2})(ind2) );
meanParam = nanmean( tsg.(PARA{2})(ind2) );
% Indices of 'good' values of Para
% ---------------------------------
ind2 = ind1( tsg.(PARA{2})(ind1) >= meanParam - currentStd & ...
tsg.(PARA{2})(ind1) <= meanParam + currentStd );
smooth = nanmean( tsg.(PARA{2})(ind2) );
else
smooth = NaN;
end