From cda02b61d5b587d103289afca0117899ce87004d Mon Sep 17 00:00:00 2001 From: Jacques Grelet <jacques.grelet@ird.fr> Date: Tue, 8 Jan 2008 15:17:31 +0000 Subject: [PATCH] renomme le fichier --- tsg_util/writeTSGDataNetCDF.m | 147 ++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 tsg_util/writeTSGDataNetCDF.m diff --git a/tsg_util/writeTSGDataNetCDF.m b/tsg_util/writeTSGDataNetCDF.m new file mode 100644 index 0000000..4c49a29 --- /dev/null +++ b/tsg_util/writeTSGDataNetCDF.m @@ -0,0 +1,147 @@ +function [error] = tsg_writeTSGDataNetCDF( hTsgGUI, filename) +% Function to write TSG data in NetCDF file. +% +% Input +% ----- +% hTsgGUI ............ Handel to the main user interface +% filename ........... Data filename +% +% Output +% ------ +% error ............. 1 : OK +% ............. -1 : an error occured +% +% The data are store using setappdata - Variable name : 'tsg_data' +% +% Caution : replace the fill-value with NaN +% $Id$ + +% Open the file +% ------------- +nc = netcdf(filename, 'clobber'); +if isempty(nc) + msg_error = ['TSG_GOSUD file_lecture : Open file error : ' filename]; + warndlg( msg_error, 'NetCDF write dialog'); + error = -1; + return; +end + +% Initialize loading NetCDF file waitbar +% -------------------------------------- +wb = waitbar(0, 'Initializing NetCDF file. Please wait...'); + +% We cannot change title property to 'none' (default set as 'tex') inside +% waitbar function (line 81), see +% http://www.mathworks.co.uk/matlabcentral/newsreader/view_thread/115725 +% ----------------------------------------------------------------------- +hchild = get(wb,'children'); +htitle = get(hchild,'title'); +set(htitle,'Interpreter','None'); + +% Get the data from the application GUI +% ------------------------------------- +tsg = getappdata( hTsgGUI, 'tsg_data'); + +% Get global attributes list from class tsg_nc with file 'tsg_ncattr.csv' +% ----------------------------------------------------------------------- +nca = tsg_nc('tsg_ncattr.csv'); +nca_keys = keys(nca); + +% Get GF3 variables list codes from class tsg_nc with file 'tsg_ncvar.csv' +% ----------------------------------------------------------------------- +ncv = tsg_nc('tsg_ncvar.csv'); +ncv_keys = keys(ncv); +ncv_fieldNames = get_fieldnames(ncv); + +% Create NetCDF file: +% ------------------- + +% Variable dimensions +% ------------------- +nc('DAYD') = numel(tsg.DAYD); % number of TSG measurements +nc('DAYD_WS') = numel(tsg.DAYD_WS); % number of water samples +nc('DAYD_EXT') = numel(tsg.DAYD_EXT); % number of external SSPS or SSTP comparison +nc('NCOEF_CAL') = 5; % number of calibration coefficients +nc('NCOEF_LIN') = 2; % number of linearisation coefficients + +% Fixed dimensions +% ---------------- +nc('STRING256') = 256; +nc('STRING14') = 14; +nc('STRING4') = 4; +nc('N1') = 1; + +% display filename after 'Interpreter','None' initialization to prevent +% display console warning +% --------------------------------------------------------------------- +waitbar(1/50,wb,['Writing file: ' filename ' Please wait...']); + +% Create NetCDF global attributes +% ------------------------------- +for i=1:numel(nca_keys) + nc.(nca_keys{i}) = tsg.(nca_keys{i}); +end + +% Create NetCDF variables and attributes +% --------------------------------------------------- +for i=1:numel(ncv_keys) + for j=1:numel(ncv_fieldNames) + fn = ncv_fieldNames{j}; + % define dimension + if strcmp(fn,'dimension') + nc{ncv_keys{i}} = ncfloat(get(ncv, ncv_keys{i}, fn)); + % define variable atributes + elseif ~isempty(get(ncv, ncv_keys{i}, fn)) + if ischar(get(ncv, ncv_keys{i}, fn)) + nc{ncv_keys{i}}.(fn) = ncchar(get(ncv, ncv_keys{i}, fn)); + else + nc{ncv_keys{i}}.(fn) = ncfloat(get(ncv, ncv_keys{i}, fn)); + end + end + end +end + +% Create data to NetCDF file: +% --------------------------- + +% Write global attributes +% ----------------------- +for i=1:numel(nca_keys) + nc.(nca_keys{i}) = tsg.(nca_keys{i}); +end + +% Convert Matlab julian days (datenum) to 1950 reference +% ------------------------------------------------------ +d = strmatch('DAYD',ncv_keys); +for i=1:numel(d) + tsg.(ncv_keys{d(i)}) = datenumToJulian(tsg.(ncv_keys{d(i)})); +end + +% Write measurements (variables) +% ------------------------------- +for i=1:numel(ncv_keys) + % display waitbar + waitbar( i/numel(ncv_keys), wb, ['writing ' ncv_keys{i} ' variable']); + % DATE as two dimension + if strmatch('DATE',ncv_keys(i)) + nc{ncv_keys{i}}(:,:) = tsg.(ncv_keys{i}); + else + % other one dimension + nc{ncv_keys{i}}(:) = tsg.(ncv_keys{i}); + end +end + +% Close waitbar +% ------------- +close(wb) + +% Close NetCDF file +% ----------------- +endef(nc) +close(nc) + +% Everything OK +% ------------- +error = 1; + +end -- GitLab