Newer
Older
function [] = tsg_mergesample( hTsgGUI, PARA )
Yves Gouriou
committed
%
Yves Gouriou
committed
%
% Merge the 2 types of 'bucket' records, if they exists
%
% Input
% _WS ........ Water sample
% _EXT ....... External samples (ARGO, CTD, etc.)
Yves Gouriou
committed
%
% Ouptut
%
% Get bucket data in ASCII or NETCDF format. If the data does not exist
% getappdata return an empty matrix
% ---------------------------------------------------------------------
tsg = getappdata( hTsgGUI, 'tsg_data');
Yves Gouriou
committed
% There are only SSTP samples. The SSJT time series should
% be compared to the SSTP samples. To simplfies the soft we use a
% variable SSJT sample equal to the SSTP sample structure
% ---------------------------------------------------------------
PARA_OLD = PARA;
if strcmp( PARA, 'SSJT' )
PARA_OLD = PARA;
PARA = 'SSTP';
end
% Create a structure with an NaN
% No other solution as I can't add a structure to an empty one
% ------------------------------------------------------------
sample = struct('DAYD',NaN , 'LATX',NaN , 'LONX',NaN , ...
'PARM',NaN , 'PARM_QC',NaN , 'PARM_DIF',NaN ,...
'PARM_SMOOTH',NaN , 'PARM_TYPE', NaN, 'PARM_INDICE', NaN);
Yves Gouriou
committed
% Fill the structure sample with the bucket data.
% WS exist only for SSPS
Yves Gouriou
committed
% This measurements are of TYPE 1
% ------------------------------------------------
if strcmp( PARA, 'SSPS') & ~isempty(tsg.([PARA '_WS']))
sample.DAYD = [sample.DAYD; tsg.DAYD_WS];
sample.LATX = [sample.LATX; tsg.LATX_WS];
sample.LONX = [sample.LONX; tsg.LONX_WS];
sample.PARM = [sample.PARM; tsg.([PARA '_WS']) ];
if ~isempty(tsg.([PARA '_WS_QC']))
sample.PARM_QC = [sample.PARM_QC; tsg.([PARA '_WS_QC']) ];
sample.PARM_QC = [sample.PARM_QC; ones(size(tsg.DAYD_WS))];
% Fill the structure with NaN. NaN is tested in diffTsgSample
% -----------------------------------------------------------
sample.PARM_DIF = [sample.PARM_DIF; NaN*ones(size(tsg.DAYD_WS))];
sample.PARM_SMOOTH = [sample.PARM_SMOOTH; NaN*ones(size(tsg.DAYD_WS))];
Yves Gouriou
committed
% INDICE is used to put back the QC once the validation procedure has
% been applied
% -------------------------------------------------------------------
sample.PARM_INDICE = [sample.PARM_INDICE; [1:length(tsg.DAYD_WS)]'];
Yves Gouriou
committed
% Used for the plots : WS are given a type 1
% ------------------------------------------
sample.PARM_TYPE = [sample.PARM_TYPE; ones(size(tsg.DAYD_WS))];
Yves Gouriou
committed
end
% Fill the structure sample with the external sample
% This measurements are of TYPE EXT
% --------------------------------------------------
if ~isempty(tsg.([PARA '_EXT']))
sample.DAYD = [sample.DAYD; tsg.DAYD_EXT];
sample.LATX = [sample.LATX; tsg.LATX_EXT];
sample.LONX = [sample.LONX; tsg.LONX_EXT];
sample.PARM = [sample.PARM; tsg.([PARA '_EXT'])];
if ~isempty(tsg.([PARA '_EXT_QC']))
sample.PARM_QC = [sample.PARM_QC; tsg.([PARA '_EXT_QC'])];
sample.PARM_QC = [sample.PARM_QC; ones(size(sample.DAYD_EXT))];
% Fill the following structures with NaN. NaN is test in diffTsgSample
% --------------------------------------------------------------------
sample.PARM_DIF = [sample.PARM_DIF; NaN*ones(size(tsg.DAYD_EXT))];
sample.PARM_SMOOTH = [sample.PARM_SMOOTH; NaN*ones(size(tsg.DAYD_EXT))];
Yves Gouriou
committed
% Used for the plots : EXT sample are given a type 2
% --------------------------------------------------
sample.PARM_TYPE = [sample.PARM_TYPE; 2*ones(size(tsg.DAYD_EXT))];
Yves Gouriou
committed
% INDICE is used to put back the QC once the validation procedure has
% been applied
% -------------------------------------------------------------------
sample.PARM_INDICE = [sample.PARM_INDICE; [1:length(tsg.DAYD_EXT)]'];
Yves Gouriou
committed
end
% Eliminate the first element if NaN
% ----------------------------------
if isnan(sample.DAYD(1))
sample.DAYD(1) = [];
sample.LATX(1) = [];
sample.LONX(1) = [];
sample.PARM(1) = [];
sample.PARM_QC(1) = [];
sample.PARM_DIF(1) = [];
sample.PARM_SMOOTH(1) = [];
sample.PARM_TYPE(1) = [];
sample.PARM_INDICE(1) = [];
Yves Gouriou
committed
% Sort the struct sample - increasing time.
% -----------------------------------------
if ~isempty(sample)
[sample.DAYD, iOrder] = sort(sample.DAYD);
sample.LATX = sample.LATX(iOrder);
sample.LONX = sample.LONX(iOrder);
sample.PARM = sample.PARM(iOrder);
sample.PARM_QC = sample.PARM_QC(iOrder);
sample.PARM_DIF = sample.PARM_DIF(iOrder);
sample.PARM_SMOOTH = sample.PARM_SMOOTH(iOrder);
sample.PARM_TYPE = sample.PARM_TYPE(iOrder);
sample.PARM_INDICE = sample.PARM_INDICE(iOrder);
Yves Gouriou
committed
% put the structure sample in the tsg structure
% ---------------------------------------------
tsg.DAYD_SPL = sample.DAYD;
tsg.LATX_SPL = sample.LATX;
tsg.LONX_SPL = sample.LONX;
tsg.([PARA '_SPL']) = sample.PARM;
tsg.([PARA '_SPL_QC']) = sample.PARM_QC;
tsg.([PARA '_SPL_DIF']) = sample.PARM_DIF;
tsg.([PARA '_SPL_SMOOTH']) = sample.PARM_SMOOTH;
tsg.([PARA '_SPL_TYPE']) = sample.PARM_TYPE;
tsg.([PARA '_SPL_INDICE']) = sample.PARM_INDICE;
Yves Gouriou
committed
end
% There are only SSTP samples. The SSJT time series should
% be compared to the SSTP samples. To simplfies the soft we use a
% variable SSJT sample equla to the SSTP sample structure
% ---------------------------------------------------------------
if strcmp( PARA_OLD, 'SSJT' )
tsg.SSJT_SPL = tsg.SSTP_SPL;
tsg.SSJT_SPL_QC = tsg.SSTP_SPL_QC;
tsg.SSJT_SPL_DIF = tsg.SSTP_SPL_DIF;
tsg.SSJT_SPL_SMOOTH = tsg.SSTP_SPL_SMOOTH;
tsg.SSJT_SPL_TYPE = tsg.SSTP_SPL_TYPE;
tsg.SSJT_SPL_INDICE = tsg.SSTP_SPL_INDICE;
end
% Update application data
% -----------------------
setappdata( hTsgGUI, 'tsg_data', tsg );