-
Yves Gouriou authored
Function that concatenates TSG structures
Yves Gouriou authoredFunction that concatenates TSG structures
concatStructTSG.m 8.66 KiB
function error = concatStructTSG( hMainFig, tsg_old )
error = 1;
% retrieve tsg struct
% -------------------
tsg = getappdata( hMainFig, 'tsg_data' );
% Get NO_CONTROL code value
% -------------------------
NO_CONTROL = tsg.qc.hash.NO_CONTROL.code;
%
DAYD = [tsg.DAYD; tsg_old.DAYD];
[DAYD, iOrder] = sort(DAYD);
tsg.DATE = [tsg.DATE; tsg_old.DATE];
tsg.DATE = tsg.DATE(iOrder,:);
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'LATX');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'LONX');
tsg = concatInt8Tsg( iOrder, NO_CONTROL, tsg, tsg_old, 'POSITION_QC');
%
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SPDC');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'PRES');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'FLOW');
%
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'CNDC');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'CNDC_STD');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'CNDC_CAL');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'CNDC_FREQ');
%
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSJT');
tsg = concatInt8Tsg( iOrder, NO_CONTROL, tsg, tsg_old, 'SSJT_QC');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSJT_STD');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSJT_CAL');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSJT_FREQ');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSJT_ADJUSTED');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSJT_ADJUSTED_ERROR');
tsg = concatInt8Tsg( iOrder, NO_CONTROL, tsg, tsg_old, 'SSJT_ADJUSTED_QC');
% % concatStrTsg( iOrder, tsg.SSJT_ADJUSTED_HIST, tsg_old.SSJT_ADJUSTED_HIST);
%
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSPS');
tsg = concatInt8Tsg( iOrder, NO_CONTROL, tsg, tsg_old, 'SSPS_QC');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSPS_STD');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSPS_CAL');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSPS_ADJUSTED');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSPS_ADJUSTED_ERROR');
tsg = concatInt8Tsg( iOrder, NO_CONTROL, tsg, tsg_old, 'SSPS_ADJUSTED_QC');
% % concatStrTsg( iOrder, tsg.SSPS_ADJUSTED_HIST, tsg_old.SSPS_ADJUSTED_HIST);
%
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSTP');
tsg = concatInt8Tsg( iOrder, NO_CONTROL, tsg, tsg_old, 'SSTP_QC');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSTP_CAL');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSTP_FREQ');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSTP_ADJUSTED');
tsg = concatNumTsg( iOrder, tsg, tsg_old, 'SSTP_ADJUSTED_ERROR');
tsg = concatInt8Tsg( iOrder, NO_CONTROL, tsg, tsg_old, 'SSTP_ADJUSTED_QC');
% % concatStrTsg( iOrder, tsg.SSTP_ADJUSTED_HIST, tsg_old.SSTP_ADJUSTED_HIST);
tsg.DAYD = DAYD;
% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! reste traiter les doubles
% Test : suppress measurements made at the same date
% The comparison cannot be made using tsg.DAYD. This cannot be done using
% the Matlab Serial Date format as there can be
% some loss of precision.. Especially when a floating number was written in
% a file.
%
% Use tsg.DATE
% ------------------------------------------------------------------------
Y = str2num( tsg.DATE(:,1:4) );
M = str2num( tsg.DATE(:,5:6) );
D = str2num( tsg.DATE(:,7:8) );
H = str2num( tsg.DATE(:,9:10) );
M = str2num( tsg.DATE(:,11:12) );
S = str2num( tsg.DATE(:,13:14) );
date = datenum( [Y M D H M S] );
date_diff = find( diff( date ) == 0 );
if ~isempty( date_diff )
tsg.DAYD(date_diff) = [];
tsg.DATE(date_diff,:) = [];
tsg.LATX(date_diff) = [];
tsg.LONX(date_diff) = [];
tsg.POSITION_QC(date_diff) = [];
tsg.SPDC(date_diff) = [];
tsg.PRES(date_diff) = [];
tsg.FLOW(date_diff) = [];
tsg.CNDC(date_diff) = [];
tsg.CNDC_STD(date_diff) = [];
tsg.CNDC_CAL(date_diff) = [];
tsg.CNDC_FREQ(date_diff) = [];
tsg.SSJT(date_diff) = [];
tsg.SSJT_QC(date_diff) = [];
tsg.SSJT_STD(date_diff) = [];
tsg.SSJT_CAL(date_diff) = [];
tsg.SSJT_FREQ(date_diff) = [];
tsg.SSJT_ADJUSTED(date_diff) = [];
tsg.SSJT_ADJUSTED_ERROR(date_diff) = [];
tsg.SSJT_ADJUSTED_QC(date_diff) = [];
% tsg.SSJT_ADJUSTED_HIST(date_diff,:) = [];
tsg.SSPS(date_diff) = [];
tsg.SSPS_QC(date_diff) = [];
tsg.SSPS_STD(date_diff) = [];
tsg.SSPS_CAL(date_diff) = [];
tsg.SSPS_ADJUSTED(date_diff) = [];
tsg.SSPS_ADJUSTED_ERROR(date_diff) = [];
tsg.SSPS_ADJUSTED_QC(date_diff) = [];
% tsg.SSPS_ADJUSTED_HIST(date_diff,:) = [];
tsg.SSTP(date_diff) = [];
tsg.SSTP_QC(date_diff) = [];
tsg.SSTP_CAL(date_diff) = [];
tsg.SSTP_FREQ(date_diff) = [];
tsg.SSTP_ADJUSTED(date_diff) = [];
tsg.SSTP_ADJUSTED_ERROR(date_diff) = [];
tsg.SSTP_ADJUSTED_QC(date_diff) = [];
% tsg.SSTP_ADJUSTED_HIST(date_diff) = [];
end
setappdata( hMainFig, 'tsg_data', tsg );
% Traitement des donnes Externes (les chantillons discrets)
% -----------------------------------------------------------
tsg.DAYD_EXT = [tsg.DAYD_EXT; tsg_old.DAYD_EXT];
tsg.DATE_EXT = [tsg.DATE_EXT; tsg_old.DATE_EXT];
tsg.LATX_EXT = [tsg.LATX_EXT; tsg_old.LATX_EXT];
tsg.LONX_EXT = [tsg.LONX_EXT; tsg_old.LONX_EXT];
tsg.SSPS_EXT = [tsg.SSPS_EXT; tsg_old.SSPS_EXT];
tsg.SSPS_EXT_BOTTLE = strvcat(tsg.SSPS_EXT_BOTTLE, tsg_old.SSPS_EXT_BOTTLE);
tsg.SSPS_EXT_QC = [tsg.SSPS_EXT_QC; tsg_old.SSPS_EXT_QC];
tsg.SSPS_EXT_TYPE = strvcat(tsg.SSPS_EXT_TYPE, tsg_old.SSPS_EXT_TYPE);
tsg.SSPS_EXT_ANALDATE = strvcat(tsg.SSPS_EXT_ANALDATE,tsg_old.SSPS_EXT_ANALDATE);
tsg.SSTP_EXT = [tsg.SSTP_EXT; tsg_old.SSTP_EXT];
tsg.SSTP_EXT_QC = [tsg.SSTP_EXT_QC; tsg_old.SSTP_EXT_QC];
tsg.SSTP_EXT_TYPE = strvcat(tsg.SSTP_EXT_TYPE, tsg_old.SSTP_EXT_TYPE);
if ~isempty(tsg.DAYD_EXT)
[tsg.DAYD_EXT, iOrder] = sort(tsg.DAYD_EXT);
tsg.DATE_EXT = tsg.DATE_EXT(iOrder,:);
tsg.LATX_EXT = tsg.LATX_EXT(iOrder);
tsg.LONX_EXT = tsg.LONX_EXT(iOrder);
tsg.SSPS_EXT = tsg.SSPS_EXT(iOrder);
tsg.SSPS_EXT_QC = tsg.SSPS_EXT_QC(iOrder);
tsg.SSPS_EXT_BOTTLE = tsg.SSPS_EXT_BOTTLE(iOrder,:);
tsg.SSPS_EXT_TYPE = tsg.SSPS_EXT_TYPE(iOrder,:);
tsg.SSPS_EXT_ANALDATE = tsg.SSPS_EXT_ANALDATE(iOrder,:);
tsg.SSTP_EXT = tsg.SSTP_EXT(iOrder);
tsg.SSTP_EXT_QC = tsg.SSTP_EXT_QC(iOrder);
tsg.SSTP_EXT_TYPE = tsg.SSTP_EXT_TYPE(iOrder,:);
end
% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! reste traiter les doubles
% Test : suppress measurements made at the same date
% The comparison cannot be made using tsg.DAYD_EXT. This cannot be done using
% the Matlab Serial Date format as there can be
% some loss of precision.. Especially when a floating number was written in
% a file.
%
% Use tsg.DATE_EXT
% ------------------------------------------------------------------------
if ~isempty( tsg.DATE_EXT )
Y = str2num( tsg.DATE_EXT(:,1:4) );
M = str2num( tsg.DATE_EXT(:,5:6) );
D = str2num( tsg.DATE_EXT(:,7:8) );
H = str2num( tsg.DATE_EXT(:,9:10) );
M = str2num( tsg.DATE_EXT(:,11:12) );
S = str2num( tsg.DATE_EXT(:,13:14) );
date = datenum( [Y M D H M S] );
date_diff = find( diff( date ) == 0 );
if ~isempty( date_diff )
tsg.DAYD_EXT(date_diff) = [];
tsg.DATE_EXT(date_diff,:) = [];
tsg.LATX_EXT(date_diff) = [];
tsg.LONX_EXT(date_diff) = [];
tsg.SSPS_EXT(date_diff) = [];
tsg.SSPS_EXT_QC(date_diff) = [];
tsg.SSPS_EXT_BOTTLE(date_diff,:) = [];
tsg.SSPS_EXT_TYPE(date_diff,:) = [];
tsg.SSPS_EXT_ANALDATE(date_diff,:)= [];
tsg.SSTP_EXT(date_diff) = [];
tsg.SSTP_EXT_QC(date_diff) = [];
tsg.SSTP_EXT_TYPE(date_diff,:) = [];
end
end
setappdata( hMainFig, 'tsg_data', tsg );
end
% *************************************************************************
function tsg = concatNumTsg( iOrder, tsg, tsg_old, Para)
if isempty(tsg.(Para)) && isempty(tsg_old.(Para))
return;
elseif isempty(tsg.(Para))
tsg.(Para) = NaN * ones( size( tsg.DAYD ) );
elseif isempty(tsg_old.(Para))
tsg_old.(Para) = NaN * ones( size( tsg_old.DAYD ) );
end
tsg.(Para) = [tsg.(Para); tsg_old.(Para)];
tsg.(Para) = tsg.(Para)(iOrder);
end
% *************************************************************************
function tsg = concatInt8Tsg( iOrder, NO_CONTROL, tsg, tsg_old, Para)
if isempty(tsg.(Para)) && isempty(tsg_old.(Para))
return;
elseif isempty(tsg.(Para))
tsg.(Para) = int8(NO_CONTROL) * int8(ones( size( tsg.DAYD )));
elseif isempty(tsg_old.(Para))
tsg_old.(Para) = int8(NO_CONTROL) * int8(ones( size( tsg_old.DAYD )));
end
tsg.(Para) = [tsg.(Para); tsg_old.(Para)];
tsg.(Para) = tsg.(Para)(iOrder);
end