Skip to content
Snippets Groups Projects
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