Commit e33787acfff2607f60b4967fa9fd3cc53ddf868f

Authored by Jean-Luc Shaw
0 parents
Exists in master

Initial commit. Basic features work nicely. This is bare bones but ready to be used.

GUI_drifter_cleanup.m 0 → 100644
  1 +++ a/GUI_drifter_cleanup.m
... ... @@ -0,0 +1,186 @@
  1 +function varargout = GUI_drifter_cleanup(varargin)
  2 +% GUI_DRIFTER_CLEANUP MATLAB code for GUI_drifter_cleanup.fig
  3 +% GUI_DRIFTER_CLEANUP, by itself, creates a new GUI_DRIFTER_CLEANUP or raises the existing
  4 +% singleton*.
  5 +%
  6 +% H = GUI_DRIFTER_CLEANUP returns the handle to a new GUI_DRIFTER_CLEANUP or the handle to
  7 +% the existing singleton*.
  8 +%
  9 +% GUI_DRIFTER_CLEANUP('CALLBACK',hObject,eventData,handles,...) calls the local
  10 +% function named CALLBACK in GUI_DRIFTER_CLEANUP.M with the given input arguments.
  11 +%
  12 +% GUI_DRIFTER_CLEANUP('Property','Value',...) creates a new GUI_DRIFTER_CLEANUP or raises the
  13 +% existing singleton*. Starting from the left, property value pairs are
  14 +% applied to the GUI before GUI_drifter_cleanup_OpeningFcn gets called. An
  15 +% unrecognized property name or invalid value makes property application
  16 +% stop. All inputs are passed to GUI_drifter_cleanup_OpeningFcn via varargin.
  17 +%
  18 +% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
  19 +% instance to run (singleton)".
  20 +%
  21 +% See also: GUIDE, GUIDATA, GUIHANDLES
  22 +
  23 +% Edit the above text to modify the response to help GUI_drifter_cleanup
  24 +
  25 +% Last Modified by GUIDE v2.5 09-Apr-2018 17:14:52
  26 +
  27 +% Begin initialization code - DO NOT EDIT
  28 +gui_Singleton = 1;
  29 +gui_State = struct('gui_Name', mfilename, ...
  30 + 'gui_Singleton', gui_Singleton, ...
  31 + 'gui_OpeningFcn', @GUI_drifter_cleanup_OpeningFcn, ...
  32 + 'gui_OutputFcn', @GUI_drifter_cleanup_OutputFcn, ...
  33 + 'gui_LayoutFcn', [] , ...
  34 + 'gui_Callback', []);
  35 +if nargin && ischar(varargin{1})
  36 + gui_State.gui_Callback = str2func(varargin{1});
  37 +end
  38 +
  39 +if nargout
  40 + [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
  41 +else
  42 + gui_mainfcn(gui_State, varargin{:});
  43 +end
  44 +% End initialization code - DO NOT EDIT
  45 +
  46 +
  47 +% --- Executes just before GUI_drifter_cleanup is made visible.
  48 +function GUI_drifter_cleanup_OpeningFcn(hObject, eventdata, handles, varargin)
  49 +% This function has no output args, see OutputFcn.
  50 +% hObject handle to figure
  51 +% eventdata reserved - to be defined in a future version of MATLAB
  52 +% handles structure with handles and user data (see GUIDATA)
  53 +% varargin command line arguments to GUI_drifter_cleanup (see VARARGIN)
  54 +
  55 +% Choose default command line output for GUI_drifter_cleanup
  56 +handles.output = hObject;
  57 +
  58 +% Link to dependencies
  59 +addpath(genpath('lib')) ;
  60 +
  61 +% Get input spot files
  62 +info = dir('data/raw/*.mat');
  63 +list = {info.name}';
  64 +set(handles.menu_files,'String',list) ;
  65 +
  66 +% Update handles structure
  67 +guidata(hObject, handles);
  68 +
  69 +% UIWAIT makes GUI_drifter_cleanup wait for user response (see UIRESUME)
  70 +% uiwait(handles.figure1);
  71 +
  72 +
  73 +% --- Outputs from this function are returned to the command line.
  74 +function varargout = GUI_drifter_cleanup_OutputFcn(hObject, eventdata, handles)
  75 +% varargout cell array for returning output args (see VARARGOUT);
  76 +% hObject handle to figure
  77 +% eventdata reserved - to be defined in a future version of MATLAB
  78 +% handles structure with handles and user data (see GUIDATA)
  79 +
  80 +% Get default command line output from handles structure
  81 +varargout{1} = handles.output;
  82 +
  83 +
  84 +
  85 +% --- Executes during object creation, after setting all properties.
  86 +function menu_files_CreateFcn(hObject, eventdata, handles)
  87 +% hObject handle to menu_files (see GCBO)
  88 +% eventdata reserved - to be defined in a future version of MATLAB
  89 +% handles empty - handles not created until after all CreateFcns called
  90 +
  91 +% Hint: popupmenu controls usually have a white background on Windows.
  92 +% See ISPC and COMPUTER.
  93 +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  94 + set(hObject,'BackgroundColor','white');
  95 +end
  96 +
  97 +
  98 +% --- Executes during object creation, after setting all properties.
  99 +function edit_I0_CreateFcn(hObject, eventdata, handles)
  100 +% hObject handle to edit_I0 (see GCBO)
  101 +% eventdata reserved - to be defined in a future version of MATLAB
  102 +% handles empty - handles not created until after all CreateFcns called
  103 +
  104 +% Hint: edit controls usually have a white background on Windows.
  105 +% See ISPC and COMPUTER.
  106 +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  107 + set(hObject,'BackgroundColor','white');
  108 +end
  109 +
  110 +% --- Executes during object creation, after setting all properties.
  111 +function edit_If_CreateFcn(hObject, eventdata, handles)
  112 +% hObject handle to edit_If (see GCBO)
  113 +% eventdata reserved - to be defined in a future version of MATLAB
  114 +% handles empty - handles not created until after all CreateFcns called
  115 +
  116 +% Hint: edit controls usually have a white background on Windows.
  117 +% See ISPC and COMPUTER.
  118 +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  119 + set(hObject,'BackgroundColor','white');
  120 +end
  121 +
  122 +
  123 +%% TOGGLES
  124 +
  125 +function grp_aux_data_SelectionChangedFcn(hObject, eventdata, handles)
  126 +
  127 +global S
  128 +
  129 +% GET SCREEN DATA
  130 +I0 = str2num(handles.edit_I0.String);
  131 +If = str2num(handles.edit_If.String);
  132 +
  133 +blah = get(handles.grp_aux_data,'SelectedObject') ;
  134 +whatever = get(blah,'String') ;
  135 +
  136 +switch whatever
  137 + case 'Speed'
  138 + axes(handles.ax_aux_data);
  139 + try delete(handles.aux_line) ; catch ; end
  140 +
  141 + [~,~,spd,~] = llt2spd(S.lon(I0:If),S.lat(I0:If),S.dnum(I0:If)) ;
  142 + handles.aux_line = plot(I0:If,spd,'k') ;
  143 + xlim([I0 If])
  144 + xlabel('Index')
  145 + ylabel('Speed (m/s)')
  146 + case 'Time'
  147 + axes(handles.ax_aux_data);
  148 + try delete(handles.aux_line) ; catch ; end
  149 + handles.aux_line = plot(I0:If,S.dnum(I0:If),'k') ;
  150 + xlim([I0 If])
  151 + xlabel('Index')
  152 + ylabel('Time (mm/dd)')
  153 + datetick('y','mm/dd') ;
  154 + case 'Distance'
  155 + axes(handles.ax_aux_data);
  156 + try delete(handles.aux_line) ; catch ; end
  157 + dist = [0 ; m_lldist(S.lon(I0:If),S.lat(I0:If))] ;
  158 + handles.aux_line = plot(I0:If,dist,'k') ;
  159 + xlim([I0 If])
  160 + xlabel('Index')
  161 + ylabel('Distance (km)')
  162 + case 'None'
  163 + axes(handles.ax_aux_data);
  164 + XL = handles.ax_aux_data.XLim;
  165 + YL = handles.ax_aux_data.YLim;
  166 + try delete(handles.aux_line) ; catch ; end
  167 + handles.ax_aux_data.XLim = XL ;
  168 + xlabel('Index')
  169 +end
  170 +
  171 +% Update handles structure
  172 +guidata(hObject, handles);
  173 +
  174 +
  175 +
  176 +% --- Executes during object creation, after setting all properties.
  177 +function edit_interpolate_step_CreateFcn(hObject, eventdata, handles)
  178 +% hObject handle to edit_interpolate_step (see GCBO)
  179 +% eventdata reserved - to be defined in a future version of MATLAB
  180 +% handles empty - handles not created until after all CreateFcns called
  181 +
  182 +% Hint: edit controls usually have a white background on Windows.
  183 +% See ISPC and COMPUTER.
  184 +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  185 + set(hObject,'BackgroundColor','white');
  186 +end
... ...
data/fixLonLat.m 0 → 100644
  1 +++ a/data/fixLonLat.m
... ... @@ -0,0 +1,20 @@
  1 +clear all;
  2 +
  3 +dirst = dir('raw/*.mat') ;
  4 +fname = {dirst.name}' ;
  5 +fpath = {dirst.folder}' ;
  6 +
  7 +for ii = 1:numel(fname)
  8 + load([fpath{ii} '/' fname{ii}]) ;
  9 + indata = data;
  10 + data = [] ;
  11 + data.spot = indata.spot;
  12 + data.lon = indata.lat;
  13 + data.lat = indata.lon;
  14 + data.timeM = indata.timeM;
  15 + data.timeU = indata.timeU;
  16 + data.flag = indata.flag;
  17 +
  18 + save(['raw2/' fname{ii}(1:end-4)],'data') ;
  19 +end
  20 +
... ...
lib/but_delete_Callback.m 0 → 100644
  1 +++ a/lib/but_delete_Callback.m
... ... @@ -0,0 +1,65 @@
  1 +function but_delete_Callback(hObject, eventdata, handles)
  2 +
  3 +global S
  4 +
  5 +I0 = str2num(handles.edit_I0.String);
  6 +If = str2num(handles.edit_If.String);
  7 +
  8 +%% Cut this data from the S raw structure
  9 +S.lon(I0:If) = [];
  10 +S.lat(I0:If) = [];
  11 +S.dnum(I0:If) = [];
  12 +
  13 +%% Update plots zooming out
  14 +N = numel(S.dnum) ;
  15 +I0 = 1 ;
  16 +If = N ;
  17 +handles.edit_I0.String = '1' ;
  18 +handles.edit_If.String = num2str(N) ;
  19 +
  20 +axes(handles.ax_track) ;
  21 +plot(S.lon,S.lat,'b',S.lon,S.lat,'ko')
  22 +
  23 +%% update aux plot
  24 +blah = get(handles.grp_aux_data,'SelectedObject') ;
  25 +whatever = get(blah,'String') ;
  26 +
  27 +switch whatever
  28 + case 'Speed'
  29 + axes(handles.ax_aux_data);
  30 + try delete(handles.aux_line) ; catch ; end
  31 +
  32 + [~,~,spd,~] = llt2spd(S.lon(I0:If),S.lat(I0:If),S.dnum(I0:If)) ;
  33 + handles.aux_line = plot(I0:If,spd,'k') ;
  34 + xlim([I0 If])
  35 + xlabel('Index')
  36 + ylabel('Speed (m/s)')
  37 + case 'Time'
  38 + axes(handles.ax_aux_data);
  39 + try delete(handles.aux_line) ; catch ; end
  40 + handles.aux_line = plot(I0:If,S.dnum(I0:If),'k') ;
  41 + xlim([I0 If])
  42 + xlabel('Index')
  43 + ylabel('Time (mm/dd)')
  44 + datetick('y','mm/dd') ;
  45 + case 'Distance'
  46 + axes(handles.ax_aux_data);
  47 + try delete(handles.aux_line) ; catch ; end
  48 + dist = [0 ; m_lldist(S.lon(I0:If),S.lat(I0:If))] ;
  49 + handles.aux_line = plot(I0:If,dist,'k') ;
  50 + xlim([I0 If])
  51 + xlabel('Index')
  52 + ylabel('Distance (km)')
  53 + case 'None'
  54 + axes(handles.ax_aux_data);
  55 + XL = handles.ax_aux_data.XLim;
  56 + YL = handles.ax_aux_data.YLim;
  57 + try delete(handles.aux_line) ; catch ; end
  58 + handles.ax_aux_data.XLim = XL ;
  59 + xlabel('Index')
  60 +end
  61 +
  62 +% Update handles structure
  63 +guidata(hObject, handles);
  64 +
  65 +end
0 66 \ No newline at end of file
... ...
lib/but_interpolate_Callback.m 0 → 100644
  1 +++ a/lib/but_interpolate_Callback.m
... ... @@ -0,0 +1,74 @@
  1 +function edit_interpolate_step_Callback(hObject, eventdata, handles)
  2 +
  3 +global S
  4 +
  5 +step = str2num(handles.edit_interpolate_step.String)/(24*3600) ;
  6 +
  7 +I0 = str2num(handles.edit_I0.String);
  8 +If = str2num(handles.edit_If.String);
  9 +tq = [S.dnum(I0):step:S.dnum(If)]' ;
  10 +iN = numel(tq) ;
  11 +
  12 +%% get interpolated coordinate values
  13 +ilon = interp1(S.dnum(I0:If),S.lon(I0:If),tq) ;
  14 +ilat = interp1(S.dnum(I0:If),S.lat(I0:If),tq) ;
  15 +
  16 +%% Cut this data from the S raw structure
  17 +S.lon(I0:If) = [];
  18 +S.lat(I0:If) = [];
  19 +S.dnum(I0:If) = [];
  20 +
  21 +%% Insert the interpolated values at I0
  22 +S.lon = insertAt(S.lon ,I0,ilon) ;
  23 +S.lat = insertAt(S.lat ,I0,ilat) ;
  24 +S.dnum = insertAt(S.dnum,I0,tq) ;
  25 +
  26 +%% Update plots
  27 +If = I0 + iN -1 ;
  28 +
  29 +axes(handles.ax_track) ;
  30 +plot(S.lon(I0:If),S.lat(I0:If),'b',S.lon(I0:If),S.lat(I0:If),'ko')
  31 +
  32 +%% update aux plot
  33 +blah = get(handles.grp_aux_data,'SelectedObject') ;
  34 +whatever = get(blah,'String') ;
  35 +
  36 +switch whatever
  37 + case 'Speed'
  38 + axes(handles.ax_aux_data);
  39 + try delete(handles.aux_line) ; catch ; end
  40 +
  41 + [~,~,spd,~] = llt2spd(S.lon(I0:If),S.lat(I0:If),S.dnum(I0:If)) ;
  42 + handles.aux_line = plot(I0:If,spd,'k') ;
  43 + xlim([I0 If])
  44 + xlabel('Index')
  45 + ylabel('Speed (m/s)')
  46 + case 'Time'
  47 + axes(handles.ax_aux_data);
  48 + try delete(handles.aux_line) ; catch ; end
  49 + handles.aux_line = plot(I0:If,S.dnum(I0:If),'k') ;
  50 + xlim([I0 If])
  51 + xlabel('Index')
  52 + ylabel('Time (mm/dd)')
  53 + datetick('y','mm/dd') ;
  54 + case 'Distance'
  55 + axes(handles.ax_aux_data);
  56 + try delete(handles.aux_line) ; catch ; end
  57 + dist = [0 ; m_lldist(S.lon(I0:If),S.lat(I0:If))] ;
  58 + handles.aux_line = plot(I0:If,dist,'k') ;
  59 + xlim([I0 If])
  60 + xlabel('Index')
  61 + ylabel('Distance (km)')
  62 + case 'None'
  63 + axes(handles.ax_aux_data);
  64 + XL = handles.ax_aux_data.XLim;
  65 + YL = handles.ax_aux_data.YLim;
  66 + try delete(handles.aux_line) ; catch ; end
  67 + handles.ax_aux_data.XLim = XL ;
  68 + xlabel('Index')
  69 +end
  70 +
  71 +% Update handles structure
  72 +guidata(hObject, handles);
  73 +
  74 +end
... ...
lib/but_punch_out_Callback.m 0 → 100644
  1 +++ a/lib/but_punch_out_Callback.m
... ... @@ -0,0 +1,76 @@
  1 +function but_punch_out_Callback(hObject, eventdata, handles)
  2 +
  3 +global S O cnt
  4 +
  5 +I0 = str2num(handles.edit_I0.String);
  6 +If = str2num(handles.edit_If.String);
  7 +I = handles.menu_files.Value;
  8 +fname = handles.menu_files.String{I}(1:end-4) ;
  9 +
  10 +%% Make output structure
  11 +O = [] ;
  12 +O.lon = S.lon(I0:If) ;
  13 +O.lat = S.lat(I0:If) ;
  14 +O.dnum = S.dnum(I0:If) ;
  15 +[O.u,O.v,O.spd,O.head] = llt2spd(O.lon,O.lat,O.dnum) ;
  16 +
  17 +save(['data/clean/' fname '_' sprintf('%03d',cnt) '.mat'],'O') ; cnt = cnt+1 ;
  18 +
  19 +%% Cut this data from the S raw structure
  20 +S.lon(I0:If) = [];
  21 +S.lat(I0:If) = [];
  22 +S.dnum(I0:If) = [];
  23 +
  24 +%% Update plots zooming out
  25 +N = numel(S.dnum) ;
  26 +I0 = 1 ;
  27 +If = N ;
  28 +handles.edit_I0.String = '1' ;
  29 +handles.edit_If.String = num2str(N) ;
  30 +
  31 +axes(handles.ax_track) ;
  32 +plot(S.lon,S.lat,'b',S.lon,S.lat,'ko')
  33 +
  34 +%% update aux plot
  35 +blah = get(handles.grp_aux_data,'SelectedObject') ;
  36 +whatever = get(blah,'String') ;
  37 +
  38 +switch whatever
  39 + case 'Speed'
  40 + axes(handles.ax_aux_data);
  41 + try delete(handles.aux_line) ; catch ; end
  42 +
  43 + [~,~,spd,~] = llt2spd(S.lon(I0:If),S.lat(I0:If),S.dnum(I0:If)) ;
  44 + handles.aux_line = plot(I0:If,spd,'k') ;
  45 + xlim([I0 If])
  46 + xlabel('Index')
  47 + ylabel('Speed (m/s)')
  48 + case 'Time'
  49 + axes(handles.ax_aux_data);
  50 + try delete(handles.aux_line) ; catch ; end
  51 + handles.aux_line = plot(I0:If,S.dnum(I0:If),'k') ;
  52 + xlim([I0 If])
  53 + xlabel('Index')
  54 + ylabel('Time (mm/dd)')
  55 + datetick('y','mm/dd') ;
  56 + case 'Distance'
  57 + axes(handles.ax_aux_data);
  58 + try delete(handles.aux_line) ; catch ; end
  59 + dist = [0 ; m_lldist(S.lon(I0:If),S.lat(I0:If))] ;
  60 + handles.aux_line = plot(I0:If,dist,'k') ;
  61 + xlim([I0 If])
  62 + xlabel('Index')
  63 + ylabel('Distance (km)')
  64 + case 'None'
  65 + axes(handles.ax_aux_data);
  66 + XL = handles.ax_aux_data.XLim;
  67 + YL = handles.ax_aux_data.YLim;
  68 + try delete(handles.aux_line) ; catch ; end
  69 + handles.ax_aux_data.XLim = XL ;
  70 + xlabel('Index')
  71 +end
  72 +
  73 +% Update handles structure
  74 +guidata(hObject, handles);
  75 +
  76 +end
0 77 \ No newline at end of file
... ...
lib/edit_I0_Callback.m 0 → 100644
  1 +++ a/lib/edit_I0_Callback.m
... ... @@ -0,0 +1,19 @@
  1 +function edit_I0_Callback(hObject, eventdata, handles)
  2 +
  3 +global S
  4 +
  5 +I0 = str2num(handles.edit_I0.String);
  6 +If = str2num(handles.edit_If.String);
  7 +N = numel(S.dnum);
  8 +
  9 +% Security
  10 +if I0<1 ; I0 = 1; end
  11 +if I0>N ; I0 = N; end
  12 +
  13 +axes(handles.ax_track) ;
  14 +cla;
  15 +
  16 +plot(S.lon(I0:If),S.lat(I0:If),'b',S.lon(I0:If),S.lat(I0:If),'ko')
  17 +
  18 +
  19 +end
... ...
lib/edit_If_Callback.m 0 → 100644
  1 +++ a/lib/edit_If_Callback.m
... ... @@ -0,0 +1,67 @@
  1 +function edit_If_Callback(hObject, eventdata, handles)
  2 +
  3 +global S
  4 +
  5 +I0 = str2num(handles.edit_I0.String);
  6 +If = str2num(handles.edit_If.String);
  7 +N = numel(S.dnum);
  8 +
  9 +% Security
  10 +if If<I0
  11 + If = I0;
  12 + handles.edit_If.String = num2str(I0) ;
  13 +end
  14 +if If>N
  15 + If = N ;
  16 + handles.edit_If.String = num2str(N) ;
  17 +end
  18 +
  19 +axes(handles.ax_track) ;
  20 +cla;
  21 +
  22 +%% update main plot
  23 +plot(S.lon(I0:If),S.lat(I0:If),'b',S.lon(I0:If),S.lat(I0:If),'ko')
  24 +
  25 +%% update aux plot
  26 +blah = get(handles.grp_aux_data,'SelectedObject') ;
  27 +whatever = get(blah,'String') ;
  28 +
  29 +switch whatever
  30 + case 'Speed'
  31 + axes(handles.ax_aux_data);
  32 + try delete(handles.aux_line) ; catch ; end
  33 +
  34 + [~,~,spd,~] = llt2spd(S.lon(I0:If),S.lat(I0:If),S.dnum(I0:If)) ;
  35 + handles.aux_line = plot(I0:If,spd,'k') ;
  36 + xlim([I0 If])
  37 + xlabel('Index')
  38 + ylabel('Speed (m/s)')
  39 + case 'Time'
  40 + axes(handles.ax_aux_data);
  41 + try delete(handles.aux_line) ; catch ; end
  42 + handles.aux_line = plot(I0:If,S.dnum(I0:If),'k') ;
  43 + xlim([I0 If])
  44 + xlabel('Index')
  45 + ylabel('Time (mm/dd)')
  46 + datetick('y','mm/dd') ;
  47 + case 'Distance'
  48 + axes(handles.ax_aux_data);
  49 + try delete(handles.aux_line) ; catch ; end
  50 + dist = [0 ; m_lldist(S.lon(I0:If),S.lat(I0:If))] ;
  51 + handles.aux_line = plot(I0:If,dist,'k') ;
  52 + xlim([I0 If])
  53 + xlabel('Index')
  54 + ylabel('Distance (km)')
  55 + case 'None'
  56 + axes(handles.ax_aux_data);
  57 + XL = handles.ax_aux_data.XLim;
  58 + YL = handles.ax_aux_data.YLim;
  59 + try delete(handles.aux_line) ; catch ; end
  60 + handles.ax_aux_data.XLim = XL ;
  61 + xlabel('Index')
  62 +end
  63 +
  64 +% Update handles structure
  65 +guidata(hObject, handles);
  66 +
  67 +end
0 68 \ No newline at end of file
... ...
lib/edit_interpolate_step_Callback.m 0 → 100644
  1 +++ a/lib/edit_interpolate_step_Callback.m
... ... @@ -0,0 +1,4 @@
  1 +function edit_interpolate_step_Callback(hObject, eventdata, handles)
  2 +
  3 +
  4 +end
0 5 \ No newline at end of file
... ...
lib/menu_files_Callback.m 0 → 100644
  1 +++ a/lib/menu_files_Callback.m
... ... @@ -0,0 +1,24 @@
  1 +function menu_files_Callback(hObject, eventdata, handles)
  2 +
  3 +global S cnt
  4 +
  5 +%% Put the list of mat files in the file list menu
  6 +liste = get(hObject,'String') ;
  7 +I = get(hObject,'Value') ;
  8 +file = liste{I} ;
  9 +fpath = ['data/raw/' file] ;
  10 +load(['data/raw/' file]) ;
  11 +
  12 +N = numel(data.timeM) ;
  13 +handles.edit_I0.String = '1' ;
  14 +handles.edit_If.String = num2str(N) ;
  15 +
  16 +S = struct('lon',data.lon,'lat',data.lat,'dnum',data.timeM) ;
  17 +cnt = 0 ; % reset output punch counter
  18 +
  19 +axes(handles.ax_track) ;
  20 +plot(S.lon,S.lat,'b',S.lon,S.lat,'ko')
  21 +
  22 +% Update handles structure
  23 +guidata(hObject, handles);
  24 +end
0 25 \ No newline at end of file
... ...
lib/tog_speed_Callback.m 0 → 100644
  1 +++ a/lib/tog_speed_Callback.m
... ... @@ -0,0 +1,3 @@
  1 +function tog_speed_Callback(hObject, eventdata, handles)
  2 +
  3 +end
0 4 \ No newline at end of file
... ...