function updateTsgStruct(hMainFig) % % This function is called after reading data and update tsg structure % with common values % % Input % ----- % hMainFig ............ Handel to the main user interface % % $Id$ % Compute ship velocity from positions if sog not available % Must be done first as we use getappdata and setappdata within % the function % --------------------------------------------------------- shipVelocity( hMainFig ); % Get the data from the application GUI % ------------------------------------- tsg = getappdata( hMainFig, 'tsg_data'); PARA = {'SSPS', 'SSJT', 'SSTP'}; % Get NO_CONTROL and INTERPOLATED_VALUE codes % a modifier !!!!!!!!!!!!! % ------------------------------------------- s = tsg.qc.hash.NO_CONTROL; NO_CONTROL = s.code; % shift to [-180 180] longitude by default % ---------------------------------------- tsg.LONX = mod(tsg.LONX + 180, 360) - 180; % Suppress longitude discontinuity at -180 or 180 crossing % -------------------------------------------------------- deflon = find(isfinite(tsg.LONX)); dlon = diff(tsg.LONX(deflon)); tsg.indcross = find(abs(dlon) > 180); if ~isempty(tsg.indcross) tsg.loncross = sign(dlon(tsg.indcross)) * 360; tsg.indcross = deflon(tsg.indcross); for i=1:length(tsg.indcross) tsg.LONX(tsg.indcross(i)+1:end) = ... tsg.LONX(tsg.indcross(i)+1:end) - tsg.loncross(i); end end tsg.lonplus = 0; tsg.lonmod = 0; % get min and max values for position and set to globals attributes % ----------------------------------------------------------------- tsg.SOUTH_LATX = min(tsg.LATX); tsg.NORTH_LATX = max(tsg.LATX); if (max(tsg.LONX)-min(tsg.LONX)) > 360 tsg.WEST_LONX = -180; tsg.EAST_LONX = 180; else tsg.WEST_LONX = mod(min(tsg.LONX)+180, 360) - 180; tsg.EAST_LONX = mod(max(tsg.LONX)+180, 360) - 180; end % get date start and end value and set to globals attributes % by default db-oceano use this format yyyymmddHHMMSS % ---------------------------------------------------------- tsg.DATE_START = datestr(min(tsg.DAYD), tsg.preference.date_format_attribute); tsg.DATE_END = datestr(max(tsg.DAYD), tsg.preference.date_format_attribute); % if date is in standard format, change, if not, user need to update % inside headerform % ------------------------------------------------------------------ if size(tsg.DATE, 2) == 14 tsg.DATE_CREATION = datestr(datenum(tsg.DATE_CREATION, ... 'yyyyddmmHHMMSS'), tsg.preference.date_format_attribute); end if size(tsg.DATE, 2) == 14 tsg.DATE_UPDATE = datestr(datenum(tsg.DATE_UPDATE, ... 'yyyyddmmHHMMSS'), tsg.preference.date_format_attribute); end % update tsg.xxx_DATE_xxx with new or ISO8601 format if necessary % conventions for variables are saved in tsg.conventions structure % see updateTsgStruct.m % ---------------------------------------------------------------- if ~isempty(tsg.REFERENCE_DATE_TIME) && ~isempty(tsg.conventions) tsg.REFERENCE_DATE_TIME = datestr(datenum(tsg.REFERENCE_DATE_TIME,... tsg.conventions.REFERENCE_DATE_TIME), tsg.preference.date_format_variable); end if ~isempty(tsg.DATE) && ~isempty(tsg.conventions) tsg.DATE = datestr(datenum(tsg.DATE, ... tsg.conventions.DATE), tsg.preference.date_format_variable); end if ~isempty(tsg.DATE_EXT) && ~isempty(tsg.conventions) tsg.DATE_EXT = datestr(datenum(tsg.DATE_EXT, ... tsg.conventions.DATE_EXT), tsg.preference.date_format_variable); end if ~isempty(tsg.SSPS_EXT_ANALDATE) && ~isempty(tsg.conventions) tsg.SSPS_EXT_ANALDATE = datestr(datenum(tsg.DATE_EXT, ... tsg.conventions.SSPS_EXT_ANALDATE), tsg.preference.date_format_variable); end % Variables must exists % --------------------- for para = PARA para = char(para); if ~isempty( tsg.(para) ) && isempty( tsg.([para '_QC']) ) % If QC variables are emptied, fill them with NO_CONTROL code value % ----------------------------------------------------------------- tsg.([para '_QC']) = castByteQC( NO_CONTROL, tsg.DAYD ); end if ~isempty( tsg.(para) ) && isempty( tsg.([para '_ADJUSTED_QC']) ) % If QC variables are emptied, fill them with NO_CONTROL code value % ----------------------------------------------------------------- tsg.([para '_ADJUSTED_QC']) = castByteQC( NO_CONTROL, tsg.DAYD ); end end % initialize POSITION_QC % ---------------------- tsg.('POSITION_QC') = castByteQC( NO_CONTROL, tsg.DAYD ); % Empty variables filled with NaN % ------------------------------- names = fieldnames( tsg ); for i = 1: length(names) para = char( names(i) ); if ~isstruct(tsg.(para)) && ~isempty(tsg.(para)) && ~iscell(tsg.(para)) A = tsg.(para); ind = find( isnan( A ) == 0 ); if isempty( ind ) tsg.(para) = []; end end end % Save tsg structure % ------------------ setappdata( hMainFig, 'tsg_data', tsg); % reset calibration coefficients for this not comptatible version % --------------------------------------------------------------- if strcmp(tsg.FORMAT_VERSION, '1.4') tsg.SSJT_CALCOEF = []; tsg.CNDC_CALCOEF = []; tsg.SSTP_CALCOEF = []; tsg.SSJT_LINCOEF = []; tsg.CNDC_LINCOEF = []; tsg.SSTP_LINCOEF = []; % Save tsg structure % ------------------ setappdata( hMainFig, 'tsg_data', tsg); end % fill tsg calibration variables % ------------------------------ updateTsgStructWithCalCoeff(hMainFig); % Get the data from the application GUI % ------------------------------------- tsg = getappdata( hMainFig, 'tsg_data'); % Initialise 'variables_LINCOEF' % in tsg_initialisation now % ------------------------------- var ={'SSJT_LINCOEF', 'CNDC_LINCOEF', 'SSTP_LINCOEF'}; lin_type = {padding('SLOPE',tsg.dim.COEF_CONV_SIZE),... padding('OFFSET',tsg.dim.COEF_CONV_SIZE)}; lin_val = [1,0]; % loop over each variables % ------------------------ for i = 1:numel(var) % check if var_LINCOEF not empty % ----------------------------------- if isempty(tsg.(var{i})) for j = 1:tsg.dim.LINCOEF tsg.(var{i})(j) = lin_val(j); end % write LINCOEF_CONV's % convert cell array of string to char array % ------------------------------------------ tsg.([var{i} '_CONV']) = char(lin_type); end end % Save tsg structure % ------------------ setappdata( hMainFig, 'tsg_data', tsg); end