1 | function varargout = data_processing_tool(varargin)
|
---|
2 | %DATA_PROCESSING_TOOL - GUI to process binary data
|
---|
3 | %
|
---|
4 | % this routine is a GUI that helps the user to open
|
---|
5 | % a binary file (Little Endian, Big Endian, Float 32,
|
---|
6 | % double,...) and save a Matlab file (.mat) with the
|
---|
7 | % processed data and the coordinates
|
---|
8 | %
|
---|
9 | % Usage:
|
---|
10 | % data_processing_tool
|
---|
11 |
|
---|
12 | gui_Singleton = 1;
|
---|
13 | gui_State = struct('gui_Name', mfilename, ...
|
---|
14 | 'gui_Singleton', gui_Singleton, ...
|
---|
15 | 'gui_OpeningFcn', @data_processing_tool_OpeningFcn, ...
|
---|
16 | 'gui_OutputFcn', @data_processing_tool_OutputFcn, ...
|
---|
17 | 'gui_LayoutFcn', [] , ...
|
---|
18 | 'gui_Callback', []);
|
---|
19 | if nargin && ischar(varargin{1})
|
---|
20 | gui_State.gui_Callback = str2func(varargin{1});
|
---|
21 | end
|
---|
22 |
|
---|
23 | if nargout
|
---|
24 | [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
|
---|
25 | else
|
---|
26 | gui_mainfcn(gui_State, varargin{:});
|
---|
27 | end
|
---|
28 | end
|
---|
29 |
|
---|
30 | function data_processing_tool_OpeningFcn(hObject, eventdata, handles, varargin)
|
---|
31 | handles.output = hObject;
|
---|
32 |
|
---|
33 | %enable toolbar (useful for caxis...)
|
---|
34 | set(hObject,'toolbar','figure');
|
---|
35 |
|
---|
36 | % Update handles structure
|
---|
37 | guidata(hObject, handles);
|
---|
38 |
|
---|
39 | %this variable used to prevent users from breaking the GUI
|
---|
40 | %the variable is set to 1 once the data has been processed
|
---|
41 | handles.processDataCompleted=0;
|
---|
42 |
|
---|
43 | %initialize other variables
|
---|
44 | handles.Msize=NaN;
|
---|
45 | handles.Nsize=NaN;
|
---|
46 | handles.numvectors=NaN;
|
---|
47 | handles.endian=NaN;
|
---|
48 | handles.datatype=NaN;
|
---|
49 | handles.dx=NaN;
|
---|
50 | handles.dy=NaN;
|
---|
51 | handles.xEast=NaN;
|
---|
52 | handles.yNorth=NaN;
|
---|
53 |
|
---|
54 | %two files permitted
|
---|
55 | set(handles.inputFile,'Max',1);
|
---|
56 | set(handles.inputFile,'Min',0);
|
---|
57 |
|
---|
58 | % Update handles structure
|
---|
59 | guidata(hObject, handles);
|
---|
60 | end
|
---|
61 |
|
---|
62 | % --- Outputs from this function are returned to the command line.
|
---|
63 | function varargout = data_processing_tool_OutputFcn(hObject, eventdata, handles)
|
---|
64 |
|
---|
65 | % Get default command line output from handles structure
|
---|
66 | varargout{1} = handles.output;
|
---|
67 | end
|
---|
68 |
|
---|
69 |
|
---|
70 | function inputFile_Callback(hObject, eventdata, handles)
|
---|
71 | %no code needed for this callback, the listbox is only used as a visual
|
---|
72 | end
|
---|
73 |
|
---|
74 | function addFiles_pushbutton_Callback(hObject, eventdata, handles)
|
---|
75 | %gets input file(s) from user. the sample data files have extension .s2p
|
---|
76 | [input_file,pathname] = uigetfile( ...
|
---|
77 | {'*.*', 'All Files (*.*)'}, ...
|
---|
78 | 'Select files', ...
|
---|
79 | 'MultiSelect', 'on');
|
---|
80 |
|
---|
81 | %if file selection is cancelled, pathname should be zero
|
---|
82 | %and nothing should happen
|
---|
83 | if pathname==0
|
---|
84 | return
|
---|
85 | end
|
---|
86 |
|
---|
87 | handles.processDataCompleted=1;
|
---|
88 |
|
---|
89 | %gets the current data file names inside the listbox
|
---|
90 | inputFileName=get(handles.inputFile,'String');
|
---|
91 |
|
---|
92 | %if they only select one file, then the data will not be a cell
|
---|
93 | inputFileName= fullfile(pathname,input_file);
|
---|
94 |
|
---|
95 | %updates the gui to display all filenames in the listbox
|
---|
96 | set(handles.inputFile,'String',inputFileName);
|
---|
97 |
|
---|
98 | %make sure first file is always selected so it doesn't go out of range
|
---|
99 | %the GUI will break if this value is out of range
|
---|
100 | set(handles.inputFile,'Value',1);
|
---|
101 |
|
---|
102 | % Update handles structure
|
---|
103 | guidata(hObject, handles);
|
---|
104 | end
|
---|
105 |
|
---|
106 | function reset_pushbutton_Callback(hObject, eventdata, handles)
|
---|
107 | %resets the GUI by clearing all relevant fields
|
---|
108 |
|
---|
109 | handles.processDataCompleted = 0;
|
---|
110 |
|
---|
111 | %clears the axes
|
---|
112 | cla(handles.axes1,'reset');
|
---|
113 |
|
---|
114 | %set the popupmenu to default value
|
---|
115 | % set(handles.plot_popupmenu,'Value',1);
|
---|
116 |
|
---|
117 | %clears the contents of the listbox
|
---|
118 | set(handles.inputFile,'String','');
|
---|
119 | set(handles.inputFile,'Value',0);
|
---|
120 |
|
---|
121 | %updates the handles structure
|
---|
122 | guidata(hObject, handles);
|
---|
123 | end
|
---|
124 |
|
---|
125 | function plotdata_pushbutton_Callback(hObject, eventdata, handles)
|
---|
126 |
|
---|
127 | %get the list of input file names from the listbox
|
---|
128 | inputFileName=get(handles.inputFile,'String');
|
---|
129 |
|
---|
130 | %checks to see if the user selected any input files
|
---|
131 | %if not, nothing happens
|
---|
132 | if isempty(inputFileName)
|
---|
133 | errordlg('Select a file first!')
|
---|
134 | return
|
---|
135 | end
|
---|
136 |
|
---|
137 | %disables the button while data is processing
|
---|
138 | disableButtons(handles);
|
---|
139 | refresh(data_processing_tool);
|
---|
140 |
|
---|
141 | %parse options
|
---|
142 | if ~isnan(handles.Msize)
|
---|
143 | M=handles.Msize;
|
---|
144 | else
|
---|
145 | errordlg('Number of lines (M) not valid')
|
---|
146 | return
|
---|
147 | end
|
---|
148 | if ~isnan(handles.Nsize)
|
---|
149 | N=handles.Nsize;
|
---|
150 | else
|
---|
151 | errordlg('Number of rows (N) not valid')
|
---|
152 | return
|
---|
153 | end
|
---|
154 | if ~isnan(handles.numvectors)
|
---|
155 | numvectors=handles.numvectors;
|
---|
156 | %change M
|
---|
157 | M=numvectors*M;
|
---|
158 | else
|
---|
159 | numvectors=1;
|
---|
160 | end
|
---|
161 | if ~isnan(handles.endian)
|
---|
162 | endian=handles.endian;
|
---|
163 | else
|
---|
164 | endian=1;
|
---|
165 | end
|
---|
166 | if ~isnan(handles.datatype)
|
---|
167 | datatype=handles.datatype;
|
---|
168 | else
|
---|
169 | datatype='float32';
|
---|
170 | end
|
---|
171 |
|
---|
172 | %open file
|
---|
173 | if endian==1
|
---|
174 | fid=fopen(inputFileName,'r','ieee-be');
|
---|
175 | else
|
---|
176 | fid=fopen(inputFileName,'r','ieee-le');
|
---|
177 | end
|
---|
178 |
|
---|
179 | %read file
|
---|
180 | [u, numpoints]=fread(fid, [M,N],datatype);
|
---|
181 |
|
---|
182 | %close file
|
---|
183 | fclose(fid);
|
---|
184 |
|
---|
185 | %Pair of vectors?
|
---|
186 | if numvectors==2,
|
---|
187 | vx=u(1:2:M,:);vx=flipud(vx');
|
---|
188 | vy=u(2:2:M,:);vx=flipud(vx');
|
---|
189 |
|
---|
190 | %keep track
|
---|
191 | handles.vx=vx;
|
---|
192 | handles.vy=vy;
|
---|
193 |
|
---|
194 | u=sqrt(vx.^2+vy.^2);
|
---|
195 | end
|
---|
196 |
|
---|
197 | cla(handles.axes1); %clear the axes
|
---|
198 | axes(handles.axes1); %set the axes to plot
|
---|
199 | grid on
|
---|
200 | imagesc(u)
|
---|
201 | colorbar
|
---|
202 |
|
---|
203 | %keep track
|
---|
204 | handles.u=u;
|
---|
205 |
|
---|
206 | %to see whether the data has been processed or not
|
---|
207 | handles.processDataCompleted=2;
|
---|
208 |
|
---|
209 | %data is done processing, so re-enable the buttons
|
---|
210 | enableButtons(handles);
|
---|
211 | guidata(hObject, handles);
|
---|
212 | end
|
---|
213 |
|
---|
214 | function plotcoord_Callback(hObject, eventdata, handles)
|
---|
215 |
|
---|
216 | %check
|
---|
217 | if handles.processDataCompleted<2
|
---|
218 | errordlg('Process data first !')
|
---|
219 | return
|
---|
220 | end
|
---|
221 |
|
---|
222 | %parse options
|
---|
223 | if ~isnan(handles.dx)
|
---|
224 | dx=handles.dx;
|
---|
225 | else
|
---|
226 | errordlg('value of x-spacing not supported')
|
---|
227 | return
|
---|
228 | end
|
---|
229 | if ~isnan(handles.dy)
|
---|
230 | dy=handles.dy;
|
---|
231 | else
|
---|
232 | errordlg('value of y-spacing not supported')
|
---|
233 | return
|
---|
234 | end
|
---|
235 | if ~isnan(handles.xEast)
|
---|
236 | xEast=handles.xEast;
|
---|
237 | else
|
---|
238 | errordlg('value of xEast not supported')
|
---|
239 | return
|
---|
240 | end
|
---|
241 | if ~isnan(handles.yNorth)
|
---|
242 | yNorth=handles.yNorth;
|
---|
243 | else
|
---|
244 | errordlg('value of yNorth not supported')
|
---|
245 | return
|
---|
246 | end
|
---|
247 |
|
---|
248 | disableButtons(handles);
|
---|
249 |
|
---|
250 | %process coordinates
|
---|
251 | u=handles.u;
|
---|
252 | s=size(u);
|
---|
253 | M=s(1)+1;
|
---|
254 | N=s(2)+1;
|
---|
255 |
|
---|
256 | %correction North and East -> real
|
---|
257 | yNorth=yNorth-M*dy; % corner north
|
---|
258 | x_m=xEast+dx*(0:N-1)';
|
---|
259 | y_m=yNorth+dy*(0:M-1)';
|
---|
260 |
|
---|
261 | %plot new axes
|
---|
262 | cla(handles.axes1); %clear the axes
|
---|
263 | axes(handles.axes1); %set the axes to plot
|
---|
264 | grid on
|
---|
265 | imagesc(x_m,y_m,handles.u)
|
---|
266 | set(handles.axes1,'Ydir','Normal');
|
---|
267 | colorbar
|
---|
268 |
|
---|
269 | %Keep track of x_m and y_m
|
---|
270 | handles.x_m=x_m;
|
---|
271 | handles.y_m=y_m;
|
---|
272 |
|
---|
273 | %to see whether the data has been processed or not
|
---|
274 | handles.processDataCompleted=3;
|
---|
275 |
|
---|
276 | %data is done processing, so re-enable the buttons
|
---|
277 | enableButtons(handles);
|
---|
278 | guidata(hObject, handles);
|
---|
279 |
|
---|
280 | end
|
---|
281 |
|
---|
282 |
|
---|
283 | function save_pushbutton_Callback(hObject, eventdata, handles)
|
---|
284 | %if the data hasn't been processed yet,
|
---|
285 | %nothing happens when this button is pressed
|
---|
286 | if (handles.processDataCompleted ~= 3)
|
---|
287 | return
|
---|
288 | end
|
---|
289 |
|
---|
290 | disableButtons(handles);
|
---|
291 |
|
---|
292 | if handles.numvectors==2,
|
---|
293 |
|
---|
294 | prompt={'Enter the name of the variable 1:','Enter the name of the variable 2:','Enter the name of the file:'};
|
---|
295 | name='Save Matlab File';
|
---|
296 | numlines=1;
|
---|
297 | defaultanswer={'vx','vy','ProcessedFile'};
|
---|
298 | answer=inputdlg(prompt,name,numlines,defaultanswer);
|
---|
299 | variablename1=answer{1};
|
---|
300 | variablename2=answer{2};
|
---|
301 | filename=answer{3};
|
---|
302 |
|
---|
303 | if ~isempty(variablename1) & ~isempty(variablename2) & ~isempty(filename)
|
---|
304 | %get the variables
|
---|
305 | x_m=handles.x_m;
|
---|
306 | y_m=handles.y_m;
|
---|
307 | eval([variablename1 ' = handles.vx;']);
|
---|
308 | eval([variablename2 ' = handles.vy;']);
|
---|
309 | x_m=handles.x_m;
|
---|
310 | eval(['save ' filename ' x_m y_m ' variablename1 ' ' variablename2 ]);
|
---|
311 | disp(['in the file ' filename ' have been saved the following variables: x_m, y_m, ' variablename1 ' and ' variablename2])
|
---|
312 | end
|
---|
313 | else
|
---|
314 | prompt={'Enter the name of the variable:','Enter the name of the file:'};
|
---|
315 | name='Save Matlab File';
|
---|
316 | numlines=1;
|
---|
317 | defaultanswer={'thickness','ProcessedFile'};
|
---|
318 | answer=inputdlg(prompt,name,numlines,defaultanswer);
|
---|
319 | variablename=answer{1};
|
---|
320 | filename=answer{2};
|
---|
321 |
|
---|
322 | if ~isempty(variablename) & ~isempty(filename)
|
---|
323 | %get the variables
|
---|
324 | x_m=handles.x_m;
|
---|
325 | y_m=handles.y_m;
|
---|
326 | eval([variablename ' = handles.u;']);
|
---|
327 | eval(['save ' filename ' x_m y_m ' variablename]);
|
---|
328 | disp(['in the file ' filename ' have been saved the following variables: x_m, y_m, and ' variablename])
|
---|
329 | end
|
---|
330 | end
|
---|
331 | enableButtons(handles);
|
---|
332 | guidata(hObject, handles);
|
---|
333 | end
|
---|
334 |
|
---|
335 | function inputFile_CreateFcn(hObject, eventdata, handles)
|
---|
336 | if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
---|
337 | set(hObject,'BackgroundColor','white');
|
---|
338 | end
|
---|
339 | end
|
---|
340 |
|
---|
341 | function disableButtons(handles)
|
---|
342 | set(handles.figure1,'Pointer','watch');
|
---|
343 | set(handles.plotdata_pushbutton,'Enable','off');
|
---|
344 | set(handles.plotcoord,'Enable','off');
|
---|
345 | set(handles.save_pushbutton,'Enable','off');
|
---|
346 | set(handles.addFiles_pushbutton,'Enable','off');
|
---|
347 | set(handles.reset_pushbutton,'Enable','off');
|
---|
348 | end
|
---|
349 |
|
---|
350 | function enableButtons(handles)
|
---|
351 | set(handles.figure1,'Pointer','arrow');
|
---|
352 | set(handles.plotdata_pushbutton,'Enable','on');
|
---|
353 | set(handles.plotcoord,'Enable','on');
|
---|
354 | set(handles.save_pushbutton,'Enable','on');
|
---|
355 | set(handles.addFiles_pushbutton,'Enable','on');
|
---|
356 | set(handles.reset_pushbutton,'Enable','on');
|
---|
357 | end
|
---|
358 |
|
---|
359 | function EndianType_Callback(hObject, eventdata, handles)
|
---|
360 | handles.endian=get(handles.EndianType,'Value');
|
---|
361 | guidata(hObject, handles);
|
---|
362 | end
|
---|
363 |
|
---|
364 | function EndianType_CreateFcn(hObject, eventdata, handles)
|
---|
365 | if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
---|
366 | set(hObject,'BackgroundColor','white');
|
---|
367 | end
|
---|
368 | end
|
---|
369 |
|
---|
370 | function DataType_Callback(hObject, eventdata, handles)
|
---|
371 |
|
---|
372 | datatype= get(handles.DataType,'Value');
|
---|
373 | switch datatype
|
---|
374 | case 1
|
---|
375 | string='float32';
|
---|
376 |
|
---|
377 | case 2
|
---|
378 | string='single';
|
---|
379 |
|
---|
380 | case 3
|
---|
381 | string='float64';
|
---|
382 |
|
---|
383 | case 4
|
---|
384 | string='double';
|
---|
385 | end
|
---|
386 | handles.datatype=string;
|
---|
387 | guidata(hObject, handles);
|
---|
388 | end
|
---|
389 |
|
---|
390 | function DataType_CreateFcn(hObject, eventdata, handles)
|
---|
391 | if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
---|
392 | set(hObject,'BackgroundColor','white');
|
---|
393 | end
|
---|
394 | end
|
---|
395 |
|
---|
396 | function PairOfVectors_Callback(hObject, eventdata, handles)
|
---|
397 | handles.numvectors = get(handles.PairOfVectors,'Value');
|
---|
398 | guidata(hObject, handles);
|
---|
399 | end
|
---|
400 |
|
---|
401 | function PairOfVectors_CreateFcn(hObject, eventdata, handles)
|
---|
402 | if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
---|
403 | set(hObject,'BackgroundColor','white');
|
---|
404 | end
|
---|
405 | end
|
---|
406 |
|
---|
407 | function Msize_Callback(hObject, eventdata, handles)
|
---|
408 | handles.Msize=eval(get(hObject,'String'));
|
---|
409 | guidata(hObject, handles);
|
---|
410 | end
|
---|
411 |
|
---|
412 | function Msize_CreateFcn(hObject, eventdata, handles)
|
---|
413 | if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
---|
414 | set(hObject,'BackgroundColor','white');
|
---|
415 | end
|
---|
416 | end
|
---|
417 |
|
---|
418 | function Nsize_Callback(hObject, eventdata, handles)
|
---|
419 | handles.Nsize=eval(get(hObject,'String'));
|
---|
420 | guidata(hObject, handles);
|
---|
421 | end
|
---|
422 |
|
---|
423 | function Nsize_CreateFcn(hObject, eventdata, handles)
|
---|
424 | if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
---|
425 | set(hObject,'BackgroundColor','white');
|
---|
426 | end
|
---|
427 | end
|
---|
428 |
|
---|
429 | function dx_Callback(hObject, eventdata, handles)
|
---|
430 | handles.dx=eval(get(hObject,'String'));
|
---|
431 | guidata(hObject, handles);
|
---|
432 | end
|
---|
433 | function dx_CreateFcn(hObject, eventdata, handles)
|
---|
434 | if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
---|
435 | set(hObject,'BackgroundColor','white');
|
---|
436 | end
|
---|
437 | end
|
---|
438 |
|
---|
439 | function dy_Callback(hObject, eventdata, handles)
|
---|
440 | handles.dy=eval(get(hObject,'String'));
|
---|
441 | guidata(hObject, handles);
|
---|
442 | end
|
---|
443 | function dy_CreateFcn(hObject, eventdata, handles)
|
---|
444 | if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
---|
445 | set(hObject,'BackgroundColor','white');
|
---|
446 | end
|
---|
447 | end
|
---|
448 |
|
---|
449 | function xEast_Callback(hObject, eventdata, handles)
|
---|
450 | handles.xEast=eval(get(hObject,'String'));
|
---|
451 | guidata(hObject, handles);
|
---|
452 | end
|
---|
453 | function xEast_CreateFcn(hObject, eventdata, handles)
|
---|
454 | if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
---|
455 | set(hObject,'BackgroundColor','white');
|
---|
456 | end
|
---|
457 | end
|
---|
458 |
|
---|
459 | function yNorth_Callback(hObject, eventdata, handles)
|
---|
460 | handles.yNorth=eval(get(hObject,'String'));
|
---|
461 | guidata(hObject, handles);
|
---|
462 | end
|
---|
463 | function yNorth_CreateFcn(hObject, eventdata, handles)
|
---|
464 | if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
---|
465 | set(hObject,'BackgroundColor','white');
|
---|
466 | end
|
---|
467 | end
|
---|