IRootLab
An Open-Source MATLAB toolbox for vibrational biospectroscopy
datatool.m
Go to the documentation of this file.
1 %> @ingroup guigroup sheware mainguis
2 %> @file
3 %> @brief datatool, see also @ref objtool.m
4 %> @image html Screenshot-datatool.png
5 %>
6 %> @sa objtool.m
7 %
8 %> @cond
9 function varargout = datatool(varargin)
10 % Last Modified by GUIDE v2.5 08-Nov-2012 12:32:56
11 
12 % Begin initialization code - DO NOT EDIT
13 gui_Singleton = 1;
14 gui_State = struct('gui_Name', mfilename, ...
15  'gui_Singleton', gui_Singleton, ...
16  'gui_OpeningFcn', @datatool_OpeningFcn, ...
17  'gui_OutputFcn', @datatool_OutputFcn, ...
18  'gui_LayoutFcn', [] , ...
19  'gui_Callback', []);
20 if nargin && ischar(varargin{1})
21  gui_State.gui_Callback = str2func(varargin{1});
22 end
23 
24 if nargout
25  [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
26 else
27  gui_mainfcn(gui_State, varargin{:});
28 end
29 % End initialization code - DO NOT EDIT
30 
31 % --- Executes just before datatool is made visible.
32 function datatool_OpeningFcn(hObject, eventdata, handles, varargin) %#ok<*INUSL>
33 
34 % Choose default command line output for datatool
35 handles.output = hObject;
36 
37 handles.which_listbox = [handles.listboxDatasets, handles.listboxBlocks];
38 
39 
40 % Update handles structure
41 guidata(hObject, handles);
42 
43 % UIWAIT makes datatool wait for user response (see UIRESUME)
44 % uiwait(handles.figure1);
45 
46 global handles_datatool;
47 handles_datatool = handles;
48 handles_datatool.classname = 'irdata';
49 datatool_refresh(1);
51 
52 gui_set_position(hObject);
53 setup_load();
54 
55 check_hsc();
56 
57 % --- Outputs from this function are returned to the command line.
58 function varargout = datatool_OutputFcn(hObject, eventdata, handles)
59 varargout{1} = handles.output;
60 
61 
62 
63 
64 %##########################################################################
65 % AUXILIARY FUNCTIONS
66 %##########################################################################
67 
68 
69 %######################################
70 
71 
72 %#########
73 function datatool_refresh(which)
74 global handles_datatool;
75 datatool_load_from_workspace();
76 datatool_show_description(which);
77 nlog = length(get_varnames('irlog'));
78 data = eval([handles_datatool.classname, ';']);
79 set(handles_datatool.figure1, 'Color', data.color);
80 
81 
82 %#########
83 function datatool_load_from_workspace()
84 global handles_datatool;
85 listbox_load_from_workspace(handles_datatool.classname, handles_datatool.listboxDatasets);
86 listbox_load_from_workspace('block', handles_datatool.listboxBlocks);
87 
88 %#########
89 function datatool_status(s)
90 global handles_datatool;
91 set(handles_datatool.text_status, 'String', s);
92 
93 
94 %#########
95 function datatool_populate_block_more()
96 global handles_datatool;
97 blockname = get_selected_1stname(2);
98 a = {'More Actions>>'};
99 if ~isempty(blockname)
100  block = evalin('base', [blockname, ';']);
101  ma = block.moreactions;
102  handles_datatool.block_moreactions = ma;
103  guidata(handles_datatool.figure1, handles_datatool);
104 else
105  ma = {};
106 end;
107 a = [a, ma];
108 if get(handles_datatool.popupmenuBlockMore, 'Value') > numel(a)
109  set(handles_datatool.popupmenuBlockMore, 'Value', 1);
110 end;
111 set(handles_datatool.popupmenuBlockMore, 'String', a);
112 
113 
114 
115 %#########
116 function datatool_show_description(which)
117 global handles_datatool;
118 show_description(handles_datatool.which_listbox(which), handles_datatool.editDescription);
119 if which == 2
120  datatool_populate_block_more();
121 end;
122 
123 %#########
124 function a = get_selected_names(which)
125 global handles_datatool;
126 a = listbox_get_selected_names(handles_datatool.which_listbox(which));
127 
128 %#########
129 function s = get_selected_1stname(which)
130 global handles_datatool;
131 s = listbox_get_selected_1stname(handles_datatool.which_listbox(which));
132 
133 
134 %######################################
135 % Applies block that still doesn't exist.
136 function do_block(which, classname)
137 dsnames = get_selected_names(which);
138 if ~isempty(dsnames)
139  try
140  r = do_blockmenu(classname, dsnames);
141  if r.flag_ok
142  og = r.og;
143  og.flag_leave_block = which == 1; % Will leave the block in the workspace only if the button if from the left (data) panel
144  og = og.start();
145  og = og.m_create();
146  og = og.m_boot();
147  og = og.m_train();
148  og = og.m_use();
149  og = og.finish();
150  datatool_refresh(1);
151  end;
152  catch ME
153  datatool_refresh(1);
154  send_error(ME);
155  end;
156 else
157  datatool_status('No object, can''t do anything!');
158 end;
159 
160 
161 %######################################
162 %> This if for the "boot", "train", and "use" block options
163 function do_block2(what)
164 % global handles_datatool;
165 blockname = get_selected_1stname(2);
166 if ~isempty(blockname)
167  try
168  dsnames = get_selected_names(1);
169 
170  og = gencode();
171  og.blockname = blockname;
172  og.dsnames = dsnames;
173  og.flag_leave_block = 0;
174  og = og.start();
175  if ismember(what, {'boot', 'train', 'use'})
176  og = og.(['m_', what])();
177  else
178  og = og.m_generic(what);
179  end;
180  og = og.finish();
181  datatool_refresh(2);
182  catch ME
183  datatool_refresh(2);
184  send_error(ME);
185  end;
186 else
187  datatool_status('Cannot do anything: there is no block!');
188 end;
189 
190 
191 %######################################
192 function change_class_from_edit()
193 global handles_datatool;
194 classname = get(handles_datatool.edit_class, 'String');
195 flag_ok = 0;
196 try
197  data = eval([classname, ';']);
198  test = data.color;
199  flag_ok = 1;
200 catch ME
201  s = sprintf('Class not accepted: "%s"', ME.message);
202  datatool_status(s);
203  irerror(s);
204 end;
205 
206 if flag_ok
207  handles_datatool.classname = classname;
208  guidata(handles_datatool.figure1, handles_datatool);
209  datatool_refresh(1);
210 end;
211 
212 %##########################################################################
213 %##########################################################################
214 
215 
216 
217 % --- Executes during object creation, after setting all properties.
218 function listboxDatasets_CreateFcn(hObject, eventdata, handles)
219 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
220  set(hObject,'BackgroundColor','white');
221 end
222 
223 % --- Executes during object creation, after setting all properties.
224 function editDescription_CreateFcn(hObject, eventdata, handles)
225 
226 function editDescription_Callback(hObject, eventdata, handles)
227 datatool_status('');
228 
229 
230 % --- Executes on button press in pushbuttonLoad.
231 function pushbuttonLoad_Callback(hObject, eventdata, handles) %#ok<*INUSD,*DEFNU>
232 datatool_status('');
233 path_assert();
234 global PATH;
235 global ATRTOOL_LOAD_OK ATRTOOL_LOAD_RANGE;
236 try
237  types = {'mat', 'txt'};
238  [name, path, filterindex] = uigetfile({'*.mat;*.txt', 'Supported file types (*.mat;*.txt)'; ...
239  '*.*', 'All files (*.*)'; ...
240  '*.mat', 'MAT-files (*.mat)'; ...
241  '*.txt', 'TXT-files (*.txt)'; ...
242  '*.0', 'OPUS-files (*.txt)'; ...
243  }, 'Select file to open', PATH.data_load); %#ok<*NASGU>
244  if name > 0
245  name_full = fullfile(path, name);
246  classname = detect_file_type(name_full);
247 
248  % Either way, will update the path
249  PATH.data_load = path;
250  setup_write();
251 
252  if isempty(classname)
253  irerrordlg(sprintf('Could not detect type of file ''%s''', name), 'Sorry');
254  else
255  oio = eval(classname);
256  s_range = '';
257  flag_ok = 1;
258  if ~oio.flag_xaxis
259  datatool_fearange();
260  if ~isempty(ATRTOOL_LOAD_OK)
261  s_range = '';
262  if ~isempty(ATRTOOL_LOAD_RANGE)
263  s_range = [mat2str(ATRTOOL_LOAD_RANGE)]; %#ok<NBRAK>
264  end;
265  else
266  flag_ok = 0;
267  end;
268 
269  end;
270 
271  if flag_ok
272 
273  name_new = find_varname('ds');
274  code = sprintf('o = %s();\no.filename = ''%s'';\n%s = o.load(%s);', classname, name_full, name_new, s_range);
275 
276  ircode_eval(code, 'Dataset load');
277  datatool_refresh(1);
278 
279  end;
280  end;
281  end;
282 
283 catch ME
284  datatool_refresh(1);
285  send_error(ME);
286 end;
287 
288 % --- Executes on button press in pushbuttonRename.
289 function pushbuttonRename_Callback(hObject, eventdata, handles)
290 datatool_status('');
291 s = get_selected_1stname(1);
292 if ~isempty(s)
293  rename_object(s);
294  datatool_refresh(1);
295 else
296  datatool_status('No dataset to rename!');
297 end;
298 
299 % --- Executes on selection change in listboxDatasets.
300 function listboxDatasets_Callback(hObject, eventdata, handles)
301 datatool_status('');
302 datatool_show_description(1);
303 
304 % --- Executes on button press in pushbuttonClear.
305 function pushbuttonClear_Callback(hObject, eventdata, handles)
306 datatool_status('');
307 names = get_selected_names(1);
308 if ~isempty(names)
309  code = sprintf('clear %s;', sprintf('%s ', names{:}));
310  try
311  ircode_eval(code, 'Dataset clearing');
312  datatool_refresh(1);
313  catch ME
314  datatool_refresh(1);
315  send_error(ME);
316  end;
317 else
318  datatool_status('No dataset to clear!');
319 end;
320 
321 % --- Executes on button press in pushbuttonRefresh.
322 function pushbuttonRefresh_Callback(hObject, eventdata, handles)
323 datatool_status('');
324 datatool_refresh(1);
325 
326 % --- Executes on button press in pushbuttonVisualize.
327 function pushbuttonVisualize_Callback(hObject, eventdata, handles)
328 datatool_status('');
329 do_block(1, 'vis');
330 
331 
332 % --- Executes on button press in pushbuttonTransform.
333 function pushbuttonTransform_Callback(hObject, eventdata, handles)
334 datatool_status('');
335 do_block(1, 'fcon');
336 
337 % --- Executes on button press in pushbuttonPre.
338 function pushbuttonPre_Callback(hObject, eventdata, handles)
339 datatool_status('');
340 do_block(1, 'pre');
341 
342 % --- Executes on button press in pushbuttonMisc.
343 function pushbuttonMisc_Callback(hObject, eventdata, handles)
344 datatool_status('');
345 do_block(1, 'blmisc');
346 
347 % --- Executes on button press in pushbutton_fsel.
348 function pushbutton_fsel_Callback(hObject, eventdata, handles)
349 datatool_status('');
350 do_block(1, 'fsel');
351 
352 % --- Executes on button press in pushbuttonCascade.
353 function pushbuttonCascade_Callback(hObject, eventdata, handles)
354 datatool_status('');
355 do_block(1, 'block_cascade_base');
356 
357 
358 % --- Executes on button press in pushbuttonSaveas.
359 function pushbuttonSaveas_Callback(hObject, eventdata, handles)
360 datatool_status('');
361 path_assert();
362 global PATH;
363 dsname = get_selected_1stname(1);
364 if isempty(dsname)
365  datatool_status('No dataset to save!');
366  return;
367 end;
368 ds = evalin('base', [dsname ';']);
369 
370 [pa, na, ex] = fileparts(ds.filename);
371 
372 try
373  classnames = {'dataio_mat', 'dataio_txt_irootlab', 'dataio_txt_pir', 'dataio_txt_basic'};
374  [name, path, filterindex] = uiputfile({'*.mat', 'MAT file (*.mat)'; ...
375  '*.txt', 'TXT file (IRootLab format) (*.txt)'; ...
376  '*.txt', 'TXT file (pir format) (*.txt)'; ...
377  '*.txt', 'TXT file (basic format) (*.txt)' ...
378  }, 'Save as', fullfile(PATH.data_save, [na, ex]));
379 
380  if name > 0
381 % ds.filename = fullfile(path, name)
382 % evalin('base', [dsname '.filename = ''' ds.filename ''';']);
383  filename = fullfile(path, name);
384  o = eval(classnames{filterindex}); % creates instance of some dataio class
385  o.filename = filename;
386  o.save(ds);
387 
388  % If reached this point, will celebrate and write the path as default data path to the setup file
389  PATH.data_save = path;
390  setup_write();
391  end;
392 
393 catch ME
394  send_error(ME);
395 end;
396 
397 % --- Executes on button press in pushbuttonBlockRename.
398 function pushbuttonBlockRename_Callback(hObject, eventdata, handles)
399 datatool_status('');
400 s = get_selected_1stname(2);
401 if ~isempty(s)
402  rename_object(s);
403  datatool_refresh(2);
404 else
405  datatool_status('There is no block to rename!');
406 end;
407 
408 % --- Executes on selection change in listboxBlocks.
409 function listboxBlocks_Callback(hObject, eventdata, handles)
410 datatool_status('');
411 datatool_show_description(2);
412 
413 % --- Executes during object creation, after setting all properties.
414 function listboxBlocks_CreateFcn(hObject, eventdata, handles)
415 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
416  set(hObject,'BackgroundColor','white');
417 end
418 
419 % --- Executes on button press in pushbuttonBlockClear.
420 function pushbuttonBlockClear_Callback(hObject, eventdata, handles)
421 datatool_status('');
422 names = get_selected_names(2);
423 if ~isempty(names)
424  try
425  code = sprintf('clear %s;', sprintf('%s ', names{:}));
426  ircode_eval(code, 'Clearing blocks');
427  datatool_refresh(2);
428  catch ME
429  datatool_refresh(2);
430  send_error(ME);
431  end
432 else
433  datatool_status('There is no block to clear!');
434 end;
435 
436 % --- Executes on button press in pushbuttonBlockRefresh.
437 function pushbuttonBlockRefresh_Callback(hObject, eventdata, handles)
438 datatool_status('');
439 datatool_refresh(2);
440 
441 % --- Executes on button press in pushbuttonBlockVisualize.
442 function pushbuttonBlockVisualize_Callback(hObject, eventdata, handles)
443 datatool_status('');
444 do_block(2, 'vis');
445 
446 % --- Executes on button press in pushbuttonBlockUse.
447 function pushbuttonBlockUse_Callback(hObject, eventdata, handles)
448 datatool_status('');
449 do_block2('use');
450 
451 % --- Executes on button press in pushbuttonBlockTrain.
452 function pushbuttonBlockTrain_Callback(hObject, eventdata, handles)
453 datatool_status('');
454 s = get_selected_1stname(2);
455 if ~isempty(s)
456  o = evalin('base', [s, ';']); % gets object to see if it is trainable
457  if o.flag_trainable < 1
458  datatool_status('Cannot train: block not trainable!');
459  else
460  do_block2('train');
461  end;
462 else
463  datatool_status('Cannot train: there is no block!');
464 end;
465 
466 % --- Executes on button press in pushbuttonBlockBoot.
467 function pushbuttonBlockBoot_Callback(hObject, eventdata, handles)
468 datatool_status('');
469 s = get_selected_1stname(2);
470 if ~isempty(s)
471  o = evalin('base', [s, ';']); % gets object to see if it is bootable
472  if ~o.flag_bootable
473  datatool_status('Cannot boot: block not bootable!');
474  else
475  do_block2('boot');
476  end;
477 else
478  datatool_status('Cannot boot: there is no block!');
479 end;
480 
481 % --- Executes on selection change in popupmenu_sheware.
482 function popupmenu_sheware_Callback(hObject, eventdata, handles)
483 datatool_status('');
484 idx = get(handles.popupmenu_sheware, 'Value');
485 if idx == 2
486  % Load
487  sheload();
488  datatool_refresh(1);
489 end;
490 
491 % --- Executes during object creation, after setting all properties.
492 function popupmenu_sheware_CreateFcn(hObject, eventdata, handles)
493 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
494  set(hObject,'BackgroundColor','white');
495 end
496 
497 
498 % --- Executes on selection change in popupmenuBlockMore.
499 function popupmenuBlockMore_Callback(hObject, eventdata, handles)
500 datatool_status('');
501 idx = get(handles.popupmenuBlockMore, 'Value');
502 if idx > 1
503  aa = get(handles.popupmenuBlockMore, 'String');
504  do_block2(aa{idx});
505 else
506  datatool_status('There is no block!');
507 end;
508 
509 
510 % --- Executes during object creation, after setting all properties.
511 function popupmenuBlockMore_CreateFcn(hObject, eventdata, handles)
512 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
513  set(hObject,'BackgroundColor','white');
514 end
515 
516 
517 % --- Executes on button press in pushbuttonBlockOperate.
518 function pushbuttonBlockOperate_Callback(hObject, eventdata, handles)
519 datatool_status('');
520 do_block(2, ['blbl']);
521 
522 
523 
524 function edit_class_Callback(hObject, eventdata, handles)
525 change_class_from_edit();
526 
527 function edit_class_CreateFcn(hObject, eventdata, handles)
528 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
529  set(hObject,'BackgroundColor','white');
530 end
531 
532 function pushbutton_all_Callback(hObject, eventdata, handles)
533 datatool_status('');
534 do_block(1, 'block');
535 %> @endcond
function send_error(in ME)
Feature Selection (FSel) class.
Definition: fsel.m:4
function objtool(in varargin)
function show_description(in h_list, in h_edit)
Visualization base class.
Definition: vis.m:4
function listbox_get_selected_1stname(in h_listbox)
Pre-processing block base class.
Definition: pre.m:2
Miscellaneous block.
Definition: blmisc.m:4
Base Block class.
Definition: block.m:2
function get_varnames(in classname, in input)
function check_hsc()
Feature Construction (FCon) base class.
Definition: fcon.m:2
function ircode_eval(in s, in title)
function listbox_load_from_workspace(in classname, in h_list, in flag_blank, in string_empty, in input)
function listbox_get_selected_names(in h_listbox)
function colors_markers()
function gui_set_position(in hObject)
Other blocks.
Definition: blbl.m:3
Log base class.
Definition: irlog.m:5
function path_assert()
function find_varname(in prefix)
Cascade block: sequence of blocks represented by a block.
function rename_object(in s)
function setup_load()