Skip to content
Snippets Groups Projects
read_Climatology.m 5.88 KiB
Newer Older
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
function isRead = read_Climatology(hMainFig)
% read_Climatology(hMainFig)
% Function to read climatology and store result to tsg structure
%
% Input
% -----
% type    ............ String describing climatology (annual,sesonal or
%                      monthly)
%
% Output
% ------
% none    ............ but update tsg structure with setappdata
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
% Caution:
% --------
% before V1.0RC5, structure was levitus.WOA01_TIME with DEPH = [0]
% after  V1.0RC5, structure is levitus.WOA_TIME with DEPH = [0, 10] and
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
% works with new WOA01_*_surf.nc & WOA05_*_surf.nc files
%
global DEBUGGING
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
global DEFAULT_PATH_FILE

ftp_addr = 'ftp.ifremer.fr';
ftp_dir = 'ifremer/ird/us191/oceano/Climatology';
isRead = false;
% Get data
% -----------------------
tsg = getappdata( hMainFig, 'tsg_data' );
% get last selected climatology
% -----------------------------
s = get(findobj('Tag', 'TAG_UIMENU_CLIMATO_MAIN'), 'Userdata');

jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
% get selected levitus version in preferencesForm
% -----------------------------------------------
lev_version = tsg.preference.levitus_version{tsg.preference.levitus_value};

% tsg.levitus.type = 'none' or new select climatology is different, load file
% -------------------------------------------------------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
if strcmp( tsg.levitus.type, 'none') || ~strcmp(tsg.levitus.type, s.type) ...
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    || ~strcmp(lev_version, tsg.levitus.version)
  
  % construct the climatology filename and try to found it
  % -------------------------------------------------------
  theFile = [lower(lev_version) '_' s.type  '_surf.nc'];
  file = which(theFile);
  
  % prepare full file ftp name
  % --------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
  ftp_all = sprintf('%s/%s/%s', ftp_addr, ftp_dir, lev_version);
  ftpLink = strcat(ftp_all, '/', theFile);
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
  % check for file existence
  % ------------------------
  if ~exist(file, 'file')
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    % show dialog box when climatology file are missing
    % -------------------------------------------------
    answer  = questdlg({['NetCDF climatology file:  ', theFile], ...
      'is not present in you Matlab path.',...
      'Do you want download it from ', ftp_all, '?'},...
      ['NetCDF ', lev_version, ' climatology file missing'],...
      'Yes', 'No', 'Yes');
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    % memorize current dir
    % --------------------
    currentDir = pwd;
    
    % handle user response
    % --------------------
    switch answer
      
      case 'Yes'
        
        % NetCDF files are automatically downloaded from ftp
        % --------------------------------------------------
        ftpobj = ftp(ftp_addr);
        cd(ftpobj, ftp_dir);
        if DEBUGGING
          dir(ftpobj);
        end
        cd(ftpobj, lev_version);
        cd(strcat(DEFAULT_PATH_FILE, filesep, 'tsg_climato'));
        h = showinfowindow(hMainFig,...
          {['Downloading NetCDF ', lev_version, ' files from : ', ftp_all],...
          'Please wait ...'}, 'TSG-QC Climatology');
        mget(ftpobj,'*.nc');
        close(ftpobj);
        close(h);
        rehash;
        cd(currentDir); % return back to current dir
        file = which(theFile);
        isRead = true;
        
      case 'No'
        
        % disable climatology toolbar
        % ---------------------------
        hdl = findobj( '-regexp', 'tag', 'PUSHTOOL_CLIM');
        % change the state call automatically Clim_OffMenuCallback function
        % -----------------------------------------------------------------
        set( hdl,      'state', 'off' );
        cd(currentDir); % return back to current dir
        
        % display ftp download adress in hypertext link in Matlab command Window
        % ----------------------------------------------------------------------
        fprintf(1,'download from ftp directory: <a href="ftp://%s">ftp://%s</a>\n', ftp_all, ftp_all);
        fprintf(1,'direct link: <a href="ftp://%s">ftp://%s</a>\n', ftpLink, ftpLink);
        
        isRead = false;
        return;
        
    end
  % open netcdf climatology file
  % ----------------------------
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
  levitus = read_file_woa(file);
  if DEBUGGING
    fprintf(1, 'Read climatology file: %s\n', file);
  end
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
  % update tsg.levitus.version
  % --------------------------
  tsg.levitus.version = lev_version;
  
  % test for structure concordance
  % ------------------------------
  if isstruct(levitus)
    
    % ok, save last climato state in tsg.levitus structure
    % ----------------------------------------------------
    tsg.levitus.type = s.type;
    tsg.levitus.data = levitus;
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    isRead = true;
    % display ftp download adress in hypertext link in Matlab command Window
    % ----------------------------------------------------------------------
    fprintf(1,'download from ftp directory: <a href="%s">%s</a>\n', ftp, ftp);
    fprintf(1,'direct link: <a href="%s">%s</a>\n', ftpLink, ftpLink);
    
    % show error dialog box with help to get climatology file
    % -------------------------------------------------------
    errordlg({['NetCDF climatology file:  ' theFile], ...
      'is wrong type or obsolete. Internal structure as changed',...
      'Download new one from: ',...
      ftp,...
      'see hypertext link in Matlab Command Window'},...
      'NetCDF climatology file error');
    % init tsg.levitus state
    % ----------------------
    tsg.levitus.data = [];
    tsg.levitus.type = 'none';
    
    % disable climatology toolbar
    hdl = findobj( '-regexp', 'tag', 'PUSHTOOL_CLIM');
    set( hdl,      'state', 'off' );
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
    isRead = false;
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
else
  isRead = true;
jacques.grelet_ird.fr's avatar
jacques.grelet_ird.fr committed
if DEBUGGING
  fprintf(1, 'Version: %s\n', tsg.levitus.version);
  fprintf(1, 'Type:    %s\n', tsg.levitus.type);
  tsg.levitus.data
end
% save tsg structure
% ------------------
setappdata( hMainFig, 'tsg_data', tsg );