Dawn@4: function varargout = vs_OutputToEMU(varargin) Dawn@4: % VS_OUTPUTTOEMU M-file for vs_OutputToEMU.fig Dawn@4: % VS_OUTPUTTOEMU, by itself, creates a new VS_OUTPUTTOEMU or raises the existing Dawn@4: % singleton*. Dawn@4: % Dawn@4: % H = VS_OUTPUTTOEMU returns the handle to a new VS_OUTPUTTOEMU or the handle to Dawn@4: % the existing singleton*. Dawn@4: % Dawn@4: % VS_OUTPUTTOEMU('CALLBACK',hObject,eventData,handles,...) calls the local Dawn@4: % function named CALLBACK in VS_OUTPUTTOEMU.M with the given input arguments. Dawn@4: % Dawn@4: % VS_OUTPUTTOEMU('Property','Value',...) creates a new VS_OUTPUTTOEMU or raises the Dawn@4: % existing singleton*. Starting from the left, property value pairs are Dawn@4: % applied to the GUI before vs_OutputToEMU_OpeningFcn gets called. An Dawn@4: % unrecognized property name or invalid value makes property application Dawn@4: % stop. All inputs are passed to vs_OutputToEMU_OpeningFcn via varargin. Dawn@4: % Dawn@4: % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one Dawn@4: % instance to run (singleton)". Dawn@4: % Dawn@4: % See also: GUIDE, GUIDATA, GUIHANDLES Dawn@4: Dawn@4: % Edit the above text to modify the response to help vs_OutputToEMU Dawn@4: Dawn@4: % Last Modified by GUIDE v2.5 15-Oct-2009 12:44:26 Dawn@4: Dawn@4: % Begin initialization code - DO NOT EDIT Dawn@4: gui_Singleton = 1; Dawn@4: gui_State = struct('gui_Name', mfilename, ... Dawn@4: 'gui_Singleton', gui_Singleton, ... Dawn@4: 'gui_OpeningFcn', @vs_OutputToEMU_OpeningFcn, ... Dawn@4: 'gui_OutputFcn', @vs_OutputToEMU_OutputFcn, ... Dawn@4: 'gui_LayoutFcn', [] , ... Dawn@4: 'gui_Callback', []); Dawn@4: if nargin && ischar(varargin{1}) Dawn@4: gui_State.gui_Callback = str2func(varargin{1}); Dawn@4: end Dawn@4: Dawn@4: if nargout Dawn@4: [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); Dawn@4: else Dawn@4: gui_mainfcn(gui_State, varargin{:}); Dawn@4: end Dawn@4: % End initialization code - DO NOT EDIT Dawn@4: Dawn@4: Dawn@4: % --- Executes just before vs_OutputToEMU is made visible. Dawn@4: function vs_OutputToEMU_OpeningFcn(hObject, eventdata, handles, varargin) Dawn@4: % This function has no output args, see OutputFcn. Dawn@4: % hObject handle to figure Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles structure with handles and user data (see GUIDATA) Dawn@4: % varargin command line arguments to vs_OutputToEMU (see VARARGIN) Dawn@4: Dawn@4: % Choose default command line output for vs_OutputToEMU Dawn@4: handles.output = hObject; Dawn@4: Dawn@4: % YS: get the settings from the main figure Dawn@4: if (~isfield(handles, 'VSHandle')) Dawn@4: VSHandle = VoiceSauce; Dawn@4: handles.VSHandle = VSHandle; Dawn@4: end Dawn@4: Dawn@4: % Update handles structure Dawn@4: guidata(hObject, handles); Dawn@4: Dawn@4: VSData = guidata(handles.VSHandle); Dawn@4: set(handles.edit_matdir, 'String', VSData.vars.OTE_matdir); Dawn@4: set(handles.edit_outputdir, 'String', VSData.vars.OTE_outputdir); Dawn@4: Dawn@4: if (VSData.vars.recursedir) Dawn@4: func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'recurse', VSData.vars, '*.mat'); Dawn@4: else Dawn@4: func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'none', VSData.vars, '*.mat'); Dawn@4: end Dawn@4: Dawn@4: paramlist = func_getoutputparameterlist(); Dawn@4: Dawn@4: % default is everything selected Dawn@4: if (isempty(VSData.vars.OTE_paramselection)) Dawn@4: VSData.vars.OTE_paramselection = 1:length(paramlist); Dawn@4: guidata(handles.VSHandle, VSData); Dawn@4: end Dawn@4: Dawn@4: set(handles.listbox_paramlist, 'String', paramlist, 'Value', VSData.vars.OTE_paramselection); Dawn@4: Dawn@4: set(handles.checkbox_saveEMUwithmat, 'Value', VSData.vars.OTE_saveEMUwithmat); Dawn@4: Dawn@4: if (VSData.vars.OTE_saveEMUwithmat) Dawn@4: set(handles.edit_outputdir, 'Enable', 'Off'); Dawn@4: set(handles.pushbutton_outputdir_browse, 'Enable', 'Off'); Dawn@4: else Dawn@4: set(handles.edit_outputdir, 'Enable', 'On'); Dawn@4: set(handles.pushbutton_outputdir_browse, 'Enable', 'On'); Dawn@4: end Dawn@4: Dawn@4: set(handles.listbox_matfilelist, 'KeyPressFcn', @filelist_listbox_KeyPressFcn); Dawn@4: Dawn@4: Dawn@4: Dawn@4: % UIWAIT makes vs_OutputToEMU wait for user response (see UIRESUME) Dawn@4: % uiwait(handles.figure_OutputToEMU); Dawn@4: Dawn@4: Dawn@4: % --- Outputs from this function are returned to the command line. Dawn@4: function varargout = vs_OutputToEMU_OutputFcn(hObject, eventdata, handles) Dawn@4: % varargout cell array for returning output args (see VARARGOUT); Dawn@4: % hObject handle to figure Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles structure with handles and user data (see GUIDATA) Dawn@4: Dawn@4: % Get default command line output from handles structure Dawn@4: varargout{1} = handles.output; Dawn@4: Dawn@4: Dawn@4: Dawn@4: function edit_matdir_Callback(hObject, eventdata, handles) Dawn@4: % hObject handle to edit_matdir (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles structure with handles and user data (see GUIDATA) Dawn@4: new_dir = get(handles.edit_matdir, 'String'); Dawn@4: VSData = guidata(handles.VSHandle); Dawn@4: Dawn@4: if (exist(new_dir, 'dir') == 7) Dawn@4: VSData = func_setmatdir('OTE_matdir', new_dir, VSData); Dawn@4: set(handles.edit_matdir, 'String', new_dir); Dawn@4: Dawn@4: if (VSData.vars.recursedir) Dawn@4: func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'recurse', VSData.vars, '*.mat'); Dawn@4: else Dawn@4: func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'none', VSData.vars, '*.mat'); Dawn@4: end Dawn@4: Dawn@4: if (VSData.vars.OTE_saveEMUwithmat) Dawn@4: set(handles.edit_outputdir, 'String', new_dir); Dawn@4: VSData.vars.OTE_outputdir = new_dir; Dawn@4: end Dawn@4: Dawn@4: guidata(handles.VSHandle, VSData); Dawn@4: else Dawn@4: msgbox('Error: directory not found.', 'Error', 'error', 'modal'); Dawn@4: set(hObject, 'String', VSData.vars.OTE_matdir); Dawn@4: end Dawn@4: Dawn@4: % --- Executes during object creation, after setting all properties. Dawn@4: function edit_matdir_CreateFcn(hObject, eventdata, handles) Dawn@4: % hObject handle to edit_matdir (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles empty - handles not created until after all CreateFcns called Dawn@4: Dawn@4: % Hint: edit controls usually have a white background on Windows. Dawn@4: % See ISPC and COMPUTER. Dawn@4: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) Dawn@4: set(hObject,'BackgroundColor','white'); Dawn@4: end Dawn@4: Dawn@4: Dawn@4: % --- Executes on button press in pushbutton_matdir_browse. Dawn@4: function pushbutton_matdir_browse_Callback(hObject, eventdata, handles) Dawn@4: % hObject handle to pushbutton_matdir_browse (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles structure with handles and user data (see GUIDATA) Dawn@4: current_dir = get(handles.edit_matdir, 'String'); Dawn@4: new_dir = uigetdir(current_dir); Dawn@4: VSData = guidata(handles.VSHandle); Dawn@4: Dawn@4: if (ischar(new_dir)) Dawn@4: VSData = func_setmatdir('OTE_matdir', new_dir, VSData); Dawn@4: set(handles.edit_matdir, 'String', new_dir); Dawn@4: Dawn@4: if (VSData.vars.recursedir) Dawn@4: func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'recurse', VSData.vars, '*.mat'); Dawn@4: else Dawn@4: func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'none', VSData.vars, '*.mat'); Dawn@4: end Dawn@4: Dawn@4: if (VSData.vars.OTE_saveEMUwithmat) Dawn@4: set(handles.edit_outputdir, 'String', new_dir); Dawn@4: VSData.vars.OTE_outputdir = new_dir; Dawn@4: end Dawn@4: Dawn@4: guidata(handles.VSHandle, VSData); Dawn@4: end Dawn@4: Dawn@4: Dawn@4: Dawn@4: % --- Executes on selection change in listbox_matfilelist. Dawn@4: function listbox_matfilelist_Callback(hObject, eventdata, handles) Dawn@4: % hObject handle to listbox_matfilelist (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles structure with handles and user data (see GUIDATA) Dawn@4: Dawn@4: % Hints: contents = get(hObject,'String') returns listbox_matfilelist contents as cell array Dawn@4: % contents{get(hObject,'Value')} returns selected item from listbox_matfilelist Dawn@4: Dawn@4: Dawn@4: % --- Executes during object creation, after setting all properties. Dawn@4: function listbox_matfilelist_CreateFcn(hObject, eventdata, handles) Dawn@4: % hObject handle to listbox_matfilelist (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles empty - handles not created until after all CreateFcns called Dawn@4: Dawn@4: % Hint: listbox controls usually have a white background on Windows. Dawn@4: % See ISPC and COMPUTER. Dawn@4: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) Dawn@4: set(hObject,'BackgroundColor','white'); Dawn@4: end Dawn@4: Dawn@4: Dawn@4: % --- Executes on selection change in listbox_paramlist. Dawn@4: function listbox_paramlist_Callback(hObject, eventdata, handles) Dawn@4: % hObject handle to listbox_paramlist (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles structure with handles and user data (see GUIDATA) Dawn@4: VSData = guidata(handles.VSHandle); Dawn@4: Dawn@4: inx = get(hObject, 'Value'); Dawn@4: VSData.vars.OTE_paramselection = setxor(VSData.vars.OTE_paramselection, inx); Dawn@4: set(hObject, 'Value', [VSData.vars.OTE_paramselection]); Dawn@4: guidata(handles.VSHandle, VSData); Dawn@4: Dawn@4: Dawn@4: % --- Executes during object creation, after setting all properties. Dawn@4: function listbox_paramlist_CreateFcn(hObject, eventdata, handles) Dawn@4: % hObject handle to listbox_paramlist (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles empty - handles not created until after all CreateFcns called Dawn@4: Dawn@4: % Hint: listbox controls usually have a white background on Windows. Dawn@4: % See ISPC and COMPUTER. Dawn@4: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) Dawn@4: set(hObject,'BackgroundColor','white'); Dawn@4: end Dawn@4: Dawn@4: Dawn@4: Dawn@4: function edit_outputdir_Callback(hObject, eventdata, handles) Dawn@4: % hObject handle to edit_outputdir (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles structure with handles and user data (see GUIDATA) Dawn@4: new_dir = get(handles.edit_outputdir, 'String'); Dawn@4: VSData = guidata(handles.VSHandle); Dawn@4: Dawn@4: if (exist(new_dir, 'dir') == 7) Dawn@4: VSData.vars.OTE_outputdir = new_dir; Dawn@4: set(handles.edit_outputdir, 'String', new_dir); Dawn@4: guidata(handles.VSHandle, VSData); Dawn@4: else Dawn@4: msgbox('Error: directory not found.', 'Error', 'error', 'modal'); Dawn@4: end Dawn@4: Dawn@4: % --- Executes during object creation, after setting all properties. Dawn@4: function edit_outputdir_CreateFcn(hObject, eventdata, handles) Dawn@4: % hObject handle to edit_outputdir (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles empty - handles not created until after all CreateFcns called Dawn@4: Dawn@4: % Hint: edit controls usually have a white background on Windows. Dawn@4: % See ISPC and COMPUTER. Dawn@4: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) Dawn@4: set(hObject,'BackgroundColor','white'); Dawn@4: end Dawn@4: Dawn@4: Dawn@4: % --- Executes on button press in pushbutton_outputdir_browse. Dawn@4: function pushbutton_outputdir_browse_Callback(hObject, eventdata, handles) Dawn@4: % hObject handle to pushbutton_outputdir_browse (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles structure with handles and user data (see GUIDATA) Dawn@4: current_dir = get(handles.edit_outputdir, 'String'); Dawn@4: new_dir = uigetdir(current_dir); Dawn@4: VSData = guidata(handles.VSHandle); Dawn@4: Dawn@4: if (ischar(new_dir)) Dawn@4: VSData.vars.OTE_outputdir = new_dir; Dawn@4: set(handles.edit_outputdir, 'String', new_dir); Dawn@4: Dawn@4: guidata(handles.VSHandle, VSData); Dawn@4: end Dawn@4: Dawn@4: Dawn@4: % --- Executes on button press in togglebutton_start. Dawn@4: function togglebutton_start_Callback(hObject, eventdata, handles) Dawn@4: % hObject handle to togglebutton_start (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles structure with handles and user data (see GUIDATA) Dawn@4: Dawn@4: VSData = guidata(handles.VSHandle); Dawn@4: matfilelist = get(handles.listbox_matfilelist, 'String'); Dawn@4: if (isempty(matfilelist)) Dawn@4: msgbox('Error: no mat files found.', 'Error', 'error', 'modal'); Dawn@4: return; Dawn@4: end Dawn@4: Dawn@4: if (isempty(VSData.vars.OTE_paramselection)) Dawn@4: msgbox('Error: no parameters selected.', 'Error', 'error', 'modal'); Dawn@4: return; Dawn@4: end Dawn@4: Dawn@4: if (get(hObject, 'Value') == 1) % start the process Dawn@4: set(hObject, 'String', 'Processing...', 'ForegroundColor', 'red'); Dawn@4: Dawn@4: WriteEMUfiles(handles); Dawn@4: Dawn@4: set(hObject, 'String', 'Start!', 'ForegroundColor', 'black', 'Value', 0); Dawn@4: end Dawn@4: Dawn@4: Dawn@4: Dawn@4: Dawn@4: function filelist_listbox_KeyPressFcn(hObject, eventdata) Dawn@4: handles = guidata(hObject); Dawn@4: Dawn@4: key = double(get(gcbf, 'CurrentCharacter')); Dawn@4: if (gcbo == handles.listbox_matfilelist) Dawn@4: if (key == 127) % delete key Dawn@4: Dawn@4: inx = get(handles.listbox_matfilelist, 'Value'); Dawn@4: contents = get(handles.listbox_matfilelist, 'String'); Dawn@4: Dawn@4: %nothing to do Dawn@4: if (isempty(contents)) Dawn@4: return; Dawn@4: end Dawn@4: Dawn@4: newinx = setxor(inx, [1:length(contents)]); Dawn@4: Dawn@4: newcontents = contents(newinx); Dawn@4: set(handles.listbox_matfilelist, 'String', newcontents); Dawn@4: Dawn@4: if (inx(end) > length(newcontents)) Dawn@4: set(handles.listbox_matfilelist, 'Value', length(newcontents)); Dawn@4: else Dawn@4: set(handles.listbox_matfilelist, 'Value', inx(end)); Dawn@4: end Dawn@4: end Dawn@4: end Dawn@4: Dawn@4: Dawn@4: % --- Executes on button press in checkbox_saveEMUwithmat. Dawn@4: function checkbox_saveEMUwithmat_Callback(hObject, eventdata, handles) Dawn@4: % hObject handle to checkbox_saveEMUwithmat (see GCBO) Dawn@4: % eventdata reserved - to be defined in a future version of MATLAB Dawn@4: % handles structure with handles and user data (see GUIDATA) Dawn@4: Dawn@4: % Hint: get(hObject,'Value') returns toggle state of checkbox_saveEMUwithmat Dawn@4: VSData = guidata(handles.VSHandle); Dawn@4: VSData.vars.OTE_saveEMUwithmat = get(hObject, 'Value'); Dawn@4: Dawn@4: if (VSData.vars.OTE_saveEMUwithmat) Dawn@4: set(handles.edit_outputdir, 'Enable', 'Off'); Dawn@4: set(handles.pushbutton_outputdir_browse, 'Enable', 'Off'); Dawn@4: Dawn@4: set(handles.edit_outputdir, 'String', VSData.vars.OTE_matdir); Dawn@4: VSData.vars.OTE_outputdir = VSData.vars.OTE_matdir; Dawn@4: Dawn@4: else Dawn@4: set(handles.edit_outputdir, 'Enable', 'On'); Dawn@4: set(handles.pushbutton_outputdir_browse, 'Enable', 'On'); Dawn@4: end Dawn@4: Dawn@4: guidata(handles.VSHandle, VSData); Dawn@4: Dawn@4: Dawn@4: % -- main outputting function Dawn@4: function WriteEMUfiles(handles) Dawn@4: Dawn@4: VSData = guidata(handles.VSHandle); Dawn@4: MBox = MessageBox; Dawn@4: MBoxHandles = guidata(MBox); Dawn@4: Dawn@4: matfilelist = get(handles.listbox_matfilelist, 'String'); Dawn@4: messages = cell(length(matfilelist) + 1, 1); Dawn@4: Dawn@4: paramlist = get(handles.listbox_paramlist, 'String'); Dawn@4: params = paramlist(VSData.vars.OTE_paramselection); Dawn@4: Dawn@4: errcnt = 0; Dawn@4: Dawn@4: for k=1:length(matfilelist) Dawn@4: messages{k} = sprintf('%d/%d. %s: ', k, length(matfilelist), matfilelist{k}); Dawn@4: set(MBoxHandles.listbox_messages, 'String', messages, 'Value', k); Dawn@4: set(handles.listbox_matfilelist, 'Value', k); Dawn@4: drawnow; Dawn@4: Dawn@4: matfile = [VSData.vars.OTE_matdir VSData.vars.dirdelimiter matfilelist{k}]; Dawn@4: mdata = func_buildMData(matfile, VSData.vars.O_smoothwinsize); Dawn@4: Dawn@4: for n=1:length(params) Dawn@4: C = textscan(params{n}, '%s %s', 'delimiter', '('); Dawn@4: param = C{2}{1}(1:end-1); Dawn@4: Dawn@4: if (~isfield(mdata, param)) Dawn@4: messages{k} = [messages{k} param ' not found, ']; Dawn@4: set(MBoxHandles.listbox_messages, 'String', messages, 'Value', k); Dawn@4: set(handles.listbox_matfilelist, 'Value', k); Dawn@4: drawnow; Dawn@4: errcnt = errcnt + 1; Dawn@4: continue; Dawn@4: end Dawn@4: Dawn@4: messages{k} = [messages{k} param ', ']; Dawn@4: set(MBoxHandles.listbox_messages, 'String', messages, 'Value', k); Dawn@4: set(handles.listbox_matfilelist, 'Value', k); Dawn@4: drawnow; Dawn@4: Dawn@4: outfile = [VSData.vars.OTE_outputdir VSData.vars.dirdelimiter matfilelist{k}(1:end-3) param]; Dawn@4: Dawn@4: % check that the outputdir exists Dawn@4: pathname = fileparts(outfile); Dawn@4: if (exist(pathname, 'dir') ~= 7) Dawn@4: mkdir(pathname); Dawn@4: end Dawn@4: Dawn@4: func_VS2ssff(mdata.(param), param, outfile, VSData.vars); Dawn@4: Dawn@4: % check if user has requested a halt Dawn@4: if (get(MBoxHandles.figure_MessageBox, 'UserData') == 1) Dawn@4: messages{k+1} = 'Stop button pressed.'; Dawn@4: set(MBoxHandles.listbox_messages, 'String', messages, 'Value', k+1); Dawn@4: break; Dawn@4: end Dawn@4: Dawn@4: end Dawn@4: Dawn@4: if (get(MBoxHandles.figure_MessageBox, 'UserData') == 1) Dawn@4: break; Dawn@4: end Dawn@4: Dawn@4: end Dawn@4: Dawn@4: messages{length(matfilelist)+1} = sprintf('Completed. %d errors found.', errcnt); Dawn@4: set(MBoxHandles.listbox_messages, 'String', messages, 'Value', k); Dawn@4: set(handles.listbox_matfilelist, 'Value', k); Dawn@4: drawnow; Dawn@4: Dawn@4: set(MBoxHandles.pushbutton_close, 'Enable', 'On'); Dawn@4: set(MBoxHandles.pushbutton_stop, 'Enable', 'Off');