Skip to content
Snippets Groups Projects
tsgqc_GUI.m 44.6 KiB
Newer Older
      % Sample Push button - UserData set to 'on'
      % ------------------------------------
      % set( hBottlePushtool, 'UserData', 'on' );

      % Plot the samples if the TSG file has been read
      % ----------------------------------------------
      %            if strcmp( get(hOpenMenu, 'UserData'), 'on' ) && ~isempty( sample )
      %                axes( hPlotAxes(1) );
      %                hLine.Sample = line( ...
      %                    sample.TIME, sample.PSAL,...
      %                    'Linestyle', 'none', 'Marker','o','MarkerSize',5, ...
      %                    'Color','r', 'MarkerFaceColor','r');

      % Store the handle of the bucketline
      % ----------------------------------
      %                set( hPlotAxes(1), 'UserData', hLine );
      %            end

      %        else

      % set( hBottlePushtool, 'UserData', 'off' );

      % The bucket pushbutton has been pressed again :
      % Delete the bucket on figure
      % ----------------------------------------------
      %            hLine = get( hPlotAxes(1), 'UserData');
      %            if ~isempty( hLine ) && ishandle( hLine.Sample )
      %                delete(hLine.Sample);
      %           end
  end
  %------------------------------------------------------------------------
  % Callback function run when the Levitus climatology toolbar is unselected
  %------------------------------------------------------------------------
  function Clim_OffMenuCallback(hObject, eventdata)
    % Get line handles
    % ----------------------------------------------
    hLine1 = get( hPlotAxes(1), 'UserData');
    hLine2 = get( hPlotAxes(2), 'UserData');
    
    % -----------------------------------
    try
      delete(hLine1.stdClimMinus);
      delete(hLine1.stdClimPlus);
      delete(hLine1.meanClim);
      delete(hLine2.stdClimMinus);
      delete(hLine2.stdClimPlus);
      delete(hLine2.meanClim);
    catch
    end
  end
  %------------------------------------------------------------------------
  % Callback function run when the Levitus climatology toolbar is unselected
  %------------------------------------------------------------------------
  function Clim_OnMenuCallback(hObject, eventdata)
    % Test if the TSG and bucket files have been read
    % -----------------------------------------------
    if strcmp( get(hOpenMenu, 'UserData'), 'on' )
      % Get data
      % -----------------------
      tsg = getappdata( hMainFig, 'tsg_data' );
      hLine1 = get( hPlotAxes(1), 'UserData');
      hLine2 = get( hPlotAxes(2), 'UserData');

      % Read Climatology
      % ----------------
      if isempty( tsg.levitus.data)
        levitus = read_file_woa01( 'woa01an.nc' );
        if ~isstruct(levitus)
          errordlg({'NetCDF climatology file not present in you path',...
            'Check your matlab path or download it from',...
            'ftp://ftp.ifremer.fr/ifremer/ird/us191/oceano/lib/matlab/woa01an.nc'},...
            'NetCDF climatology file access error');
          return;
        else
          tsg.levitus.data = levitus;
          tsg.levitus.type = 'woa01an';
        end
        setappdata( hMainFig, 'tsg_data', tsg );
      end

      % round positive latitude and Longitude toward zero
      % -------------------------------------------------
      ind = find(tsg.LATX > 0);
      lat(ind) = fix(tsg.LATX(ind)) + 0.5;

      ind = find(tsg.LONX > 0);
      lon(ind) = fix(tsg.LONX(ind)) + 0.5;

      % rounds negative latitude and Longitudeto the nearest lowest integers
      % ---------------------------------------------------------------------
      ind = find(tsg.LATX <= 0);
      lat(ind) = floor(tsg.LATX(ind)) + 0.5;

      ind = find(tsg.LONX <= 0);
      lon(ind) = floor(tsg.LONX(ind)) + 0.5;

      % Calculates differences between adjacent elements of X.
      % 0 if adajacent latitude or longitude are equal
      % - 1 or -1 otherwise
      % ------------------------------------------------------------
      lat_diff = [diff( lat )'; 0];
      lon_diff = [diff( lon )'; 0];

      % Select latitude and longitude
      % -----------------------------
      ind  = find(abs(lat_diff) == 1 | abs(lon_diff == 1));
      lat2 = lat( ind );
      lon2 = lon( ind );
      time = tsg.DAYD( ind );
      temp = tsg.SSJT( ind );
      psal = tsg.SSPS( ind );

      % Get Climatology
      %           LATX(80)  = -0.5 et LATX(81)  = 0.5
      %           LONX(180) = -0.5 et LONX(181) = 0.5
      % ----------------
      axes( hPlotAxes(1) );
      mean_temp = zeros(size(ind));
      mean_psal = zeros(size(ind));
      std_temp  = zeros(size(ind));
      std_psal  = zeros(size(ind));
      for i=1:length(ind)
        ilat         = find(tsg.levitus.data.WOA01_LATX == lat2(i));
        ilon         = find(tsg.levitus.data.WOA01_LONX == lon2(i));
        mean_temp(i) = tsg.levitus.data.WOA01_MEAN_TEMP(ilat,ilon,1);
        mean_psal(i) = tsg.levitus.data.WOA01_MEAN_PSAL(ilat,ilon,1);
        std_temp(i)  = tsg.levitus.data.WOA01_STD_TEMP(ilat,ilon,1);
        std_psal(i)  = tsg.levitus.data.WOA01_STD_PSAL(ilat,ilon,1);

      % Plot mean salinity climatology
      % ------------------------------
      hLine1.meanClim = line( ...
        time, mean_psal,'Linestyle', '-', 'Color','k');
      
      % Plot with 3 standard deviation
      % ------------------------------
      hLine1.stdClimPlus = line( ...
        time,  mean_psal + 3 * std_psal ,'Linestyle', '-', 'Color','r');
      hLine1.stdClimMinus = line( ...
        time,  mean_psal - 3 * std_psal ,'Linestyle', '-', 'Color','r');
      
      % Plot mean temperature climatology
      % ---------------------------------
      axes( hPlotAxes(2));
      hLine2.meanClim = line( ...
        time, mean_temp,'Linestyle', '-', 'Color','k');
      hLine2.stdClimPlus = line( ...
        time,  mean_temp + 3 * std_temp ,'Linestyle', '-', 'Color','r');
      hLine2.stdClimMinus = line( ...
        time,  mean_temp - 3 * std_temp ,'Linestyle', '-', 'Color','r');

      % Store the handle of the bucketline
      % ----------------------------------
      set( hPlotAxes(1), 'UserData', hLine1 );
      set( hPlotAxes(2), 'UserData', hLine2 );
  % -------------------------------------------------------------------
  % Callback function run when the headerForm tool bar item is selected
  % -------------------------------------------------------------------
    % call header form function
    % -------------------------
    headerForm(hMainFig);
  end

  % -------------------------------------------------------------------
  % Callback function run when the Save menu item is selected
  % -------------------------------------------------------------------
    
    % Retrieve named application data
    % -------------------------------
    tsg = getappdata( hMainFig, 'tsg_data');

    % get fileName without extension in cell
    % --------------------------------------
    file = textscan( tsg.file.name,'%s','delimiter','.');

    % fill or append header form
    % -------------------------
    error = headerForm(hMainFig);

    % if user press continue button, ask for netcdf file
    % ------------------------------------------------
    if error ~= -1
      [fileName, pathName, filterIndex] = uiputfile('*.nc', ...

      % if user press cancel button, all var set to zero
      % ------------------------------------------------
      if fileName == 0
        return;
      end

      % Pointer set to watch during reading and plotting
      % ------------------------------------------------
      set( hMainFig, 'Pointer', 'watch' );

      % flushes the event queue and updates the closed uiputfile window
      % ---------------------------------------------------------------
      drawnow;

      % write netcdf file
      % -----------------
      error = writeTSGDataNetCDF( hMainFig, [pathName fileName] );

      % Pointer reset to arrow
      % ----------------------
      set( hMainFig, 'Pointer', 'arrow' );

      % Check for a writing pb to NetCDF
      % must to be rewriting
      % --------------------------------
      if error == -1
        warning(['NetCDF writing error:'  [pathName fileName]]);
      
      % update the display
      % ------------------
      set( hInfoFileText, 'String', fileName);
      
      % enable Quality Control mode
      % ---------------------------
      hdl_pushtool = findobj('Tag', 'QC');
      set(hdl_pushtool, 'Enable', 'on');
  % -----------------------------------------------------------------
  % Callback function run when the Quit menu item is selected
  % -----------------------------------------------------------------
  function QuitMenuCallback(hObject, eventdata)  
    % If the data have been modified and not save, the program
    % --------------------------------------------------------
    if  strcmp( get( hSaveMenu, 'UserData' ), 'on')
      selection = ...
        questdlg('The file has been modified.  Do you want to save it ?',...
        'Save before Quit?',...
        'Yes', 'No', 'Yes');
      if strcmp(selection, 'Yes')
        return;
      else
        QuitProgram;
      end
    else
      selection = ...
        questdlg(['Quit ' get(hMainFig, 'Name') '?'],...
        ['Quit ' get(hMainFig, 'Name') '?'],...
        'Yes', 'No', 'Yes');
      if strcmp(selection, 'No')
        return;
      else
        QuitProgram;
      end
  % -----------------------------------------------------------------
  % call from: 
  %   QuitMenuCallback
  %   callback 'CloseRequestFcn', @QuitProgram
  % -----------------------------------------------------------------
  function QuitProgram(hObject, eventdata)
    rmpath( [DEFAULT_PATH_FILE filesep 'tsg_util'] );
    rmpath( [DEFAULT_PATH_FILE filesep 'tsg_data'] );
    rmpath( [DEFAULT_PATH_FILE filesep 'tsg_io'] );