Newer
Older
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 from the checkbox the QC code on which the correction will be applied
% -------------------------------------------------------------------------
% get list of keys from hashtable tsg.qc.hash, defined inside
% tsg_initialisation.m
% -----------------------------------------------------------
qc_list = get(tsg.qc.hash);
% iterate (loop) on each key store inside hastable
% ------------------------------------------------
code = [];
for i=1:numel(qc_list)
% get key and some values in hashtable
% ------------------------------------
key = qc_list{i};
% get handle of checkbox
% ----------------------
hCb = findobj(hMainFig, 'tag', ['TAG_CHECK_CORRECTION_' key]);
if get( hCb, 'value' )
keptCode(i) = get(tsg.qc.hash, key, 'code');
end
end
% 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');
% intialisation
% -------------
if isempty( tsg.([PARA '_ADJUSTED']) )
tsg.([PARA '_ADJUSTED']) = tsg.(PARA);
tsg.([PARA '_ADJUSTED_QC']) = tsg.([PARA '_QC']);
end
% If only calibration have been applied ERROR is empty
% ---------------------------------------------------
if isempty( tsg.([PARA '_ADJUSTED_ERROR']) )
tsg.([PARA '_ADJUSTED_ERROR']) = NaN* ones(size(tsg.(PARA)));
end
% Find samples within TIME_WINDOWS with Good, probably Good, , probably bad QC
% ---------------------------------------------------------------
ind = find( tsg.DAYD_SPL >= dateMin & tsg.DAYD_SPL <= dateMax &...
tsg.([PARA '_SPL_QC']) <= PROBABLY_BAD);
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(tsg.([PARA '_SPL_DIF'])(ind(ind2)))
% Linear fit applied to the difference tsg-sample
% -----------------------------------------------
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 better than
% PROBABLY_BAD QC
% ----------------------------------------------------------------------
for icode = 1 : length( keptCode )
dtTsg = find( tsg.DAYD >= dateMin & tsg.DAYD <= dateMax &...
tsg.([PARA '_QC']) == keptCode( icode ));
[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);
% Line commented - We do not used anymore the VALUE_CHANGED code for
% the ADJUSTED variable
% ------------------------------------------------------------------
% tsg.([PARA '_ADJUSTED_QC'])(dtTsg) = VALUE_CHANGED;
% 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;