0001 function vb_trial_extractor_callback(fig, hObj)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 if ~exist('fig', 'var') || ~ishandle(fig) || isempty(fig)
0021 error('Invalid figure handle were specified.');
0022 end
0023 if ~exist('hObj', 'var')
0024 error('hObj is a required parameter.');
0025 end
0026
0027
0028
0029
0030
0031 data = guidata(fig);
0032 H = data.H;
0033
0034 switch(hObj)
0035
0036
0037 case H.load_settings
0038 [d, f] = vb_file_select({'.trx.mat'}, ...
0039 'Load batch parameter');
0040 if isempty(d), return; end
0041 file = [d, filesep, f{1}];
0042 data = vb_trial_extractor_load_parm(data, file);
0043 data = vb_trial_extractor_update_screen(data);
0044 case H.save_settings
0045 [d, f] = vb_file_select({'.trx.mat'}, ...
0046 'Save batch parameter', true);
0047 if isempty(d), return; end
0048 file = [d, filesep, f{1}];
0049 vb_trial_extractor_save_parm(data, file);
0050
0051
0052
0053 case H.continuous_file_edit
0054 file = get(hObj, 'String');
0055 data = vb_trial_extractor_set_continuous_file(data, file);
0056 case H.continuous_file_push
0057 [d, f] = vb_file_select({'.meg.mat', '.eeg.mat'}, ...
0058 'Select MEG/EEG file which contains continuous data');
0059 if isempty(d), return; end
0060 file = [d, filesep, f{1}];
0061 data = vb_trial_extractor_set_continuous_file(data, file);
0062
0063
0064 case { H.pretrigger_length_edit, H.posttrigger_length_edit}
0065 Value = get(hObj, 'String');
0066 Value = str2double(Value);
0067 if hObj == H.pretrigger_length_edit
0068 field = 'pretrigger_ms';
0069 elseif hObj == H.posttrigger_length_edit
0070 field = 'posttrigger_ms';
0071 end
0072 if isnan(Value) || ~isnumeric(Value) || Value <= 0
0073 set(hObj, 'String', '');
0074 data.trial_setting.(field) = 0;
0075 errordlg('Invalid value was specified. Please input positive value.', 'Trial settings');
0076 else
0077
0078 data.trial_setting.(field) = Value;
0079 end
0080 data = vb_trial_extractor_update_screen(data);
0081 case H.minimum_distance_edit
0082 val = get(hObj, 'String');
0083 if isempty(val)
0084
0085 data.trial_setting.minimum_distance_ms = [];
0086 else
0087 val = str2double(val);
0088 if isnan(val) || ~isnumeric(val) || val < 0
0089 errordlg('Invalid value was specified. Please input positive value. If empty is specified, stop checking.', 'Trial settings');
0090 else
0091 data.trial_setting.minimum_distance_ms = val;
0092 end
0093 end
0094 data = vb_trial_extractor_update_screen(data);
0095
0096
0097
0098 case H.trigger_channel_listbox
0099 data = vb_trial_extractor_update_screen(data);
0100 case H.trigger_view_push
0101 data = vb_trial_extractor_preview_trial(data, 1);
0102 case H.ch_property_push
0103 data = vb_trial_extractor_show_channel_property(data);
0104 case H.trigger_type_popup
0105 data = vb_trial_extractor_update_screen(data);
0106 case H.trigger_slope_popup
0107 case H.trigger_level_edit
0108 case H.flag_pattern_push
0109 [data] = vb_trial_extractor_input_multi_pattern(data);
0110 case H.trigger_help_push
0111 fid = fopen(which('vb_trial_extractor_trig_help.txt'));
0112 if fid ~= -1
0113 help_txt = char(fread(fid, inf, 'char'))';
0114 vb_text_area('trigger', help_txt);
0115 fclose(fid);
0116 end
0117 case H.trigger_add_push
0118
0119 trig_obj = vb_trial_extractor_create_trigger(data);
0120
0121 Ntrigger = length(data.trigger_list);
0122 data.trigger_list{Ntrigger+1} = trig_obj;
0123
0124 set(H.trigger_list_listbox, 'Value', 1);
0125 set(H.tag_listbox, 'Value', 1);
0126 data = vb_trial_extractor_update_screen(data);
0127 case {H.optional_parm_push, H.advanced_parm_push}
0128 trig_type_list = get(H.trigger_type_popup, 'String');
0129 trig_type = trig_type_list{get(H.trigger_type_popup, 'Value')};
0130 switch(trig_type)
0131 case {'bit', 'integer'}
0132 field = 'data.trigger_adjust_parameter';
0133 caption = 'Adjustment parameter for digital trigger';
0134 case 'emg'
0135 if hObj == H.optional_parm_push
0136 field = 'data.emg_parm.optional_parm';
0137 caption = 'EMG(Optional parameter)';
0138 else
0139 field = 'data.emg_parm.advanced_parm';
0140 caption = 'EMG(Advanced parameter)';
0141 end
0142 case 'voice'
0143 if hObj == H.optional_parm_push
0144 field = 'data.voice_parm.optional_parm';
0145 caption = 'Voice(Optional parameter)';
0146 else
0147 field = 'data.voice_parm.advanced_parm';
0148 caption = 'Voice(Advanced parameter)';
0149 end
0150 otherwise
0151 error('Unknown trigger type is selected.');
0152 end
0153
0154 edit = true;
0155 parm = eval(field);
0156 while(edit)
0157 [parm, cancelled] = ...
0158 vb_edit_struct(parm, caption);
0159 if ~cancelled
0160 try
0161
0162
0163
0164
0165 edit = false;
0166 eval([field ' = parm;']);
0167 catch
0168 [msg, msg_f] = vb_get_error_msg(lasterror);
0169 h = errordlg(msg_f, caption);
0170 waitfor(h);
0171 edit = true;
0172 end
0173 else
0174 return;
0175 end
0176 end
0177 case H.trigger_list_view_push
0178 data = vb_trial_extractor_preview_trial(data, 2);
0179 case H.trigger_list_remove_push
0180 ix = get(H.trigger_list_listbox, 'Value');
0181 data.trigger_list(ix) = [];
0182 Ntrig = length(data.trigger_list);
0183 if max(ix) > Ntrig && Ntrig >= 1
0184 set(H.trigger_list_listbox, 'Value', Ntrig);
0185 end
0186 data = vb_trial_extractor_update_screen(data);
0187 case H.trigger_edit_push
0188 disp('Not implemented yet.');
0189 case H.trigger_detect_push
0190 data = vb_trial_extractor_extract_trial(data);
0191 data = vb_trial_extractor_update_screen(data);
0192
0193
0194
0195 case H.tag_listbox
0196 set(H.trial_set_listbox, 'Value', 1);
0197 data = vb_trial_extractor_update_screen(data);
0198 case H.trial_set_listbox
0199 data = vb_trial_extractor_update_screen(data);
0200 case H.tag_remove_push
0201 val = get(H.tag_listbox, 'Value');
0202 if ~isempty(val)
0203 data.label_list(val) = [];
0204 Ntag = length(data.label_list);
0205 if max(val) > Ntag && Ntag >= 1
0206 set(H.tag_listbox, 'Value', Ntag);
0207 end
0208 end
0209 data = vb_trial_extractor_update_screen(data);
0210 case H.trial_add_push
0211 data = vb_trial_extractor_add_trial(data);
0212 data = vb_trial_extractor_update_screen(data);
0213 case H.trial_remove_push
0214 data = vb_trial_extractor_remove_trial(data);
0215 data = vb_trial_extractor_update_screen(data);
0216 case H.trial_edit_push
0217 data = vb_trial_extractor_edit_trial(data);
0218 data = vb_trial_extractor_update_screen(data);
0219 case H.tag_file_push
0220 row = get(H.tag_listbox, 'Value');
0221 if isempty(row), return; end
0222 [d, f] = vb_file_select({'.txt'}, 'Select Label file(*.txt)');
0223 if isempty(d), return; end
0224 tag_file = [d, filesep, f{1}];
0225
0226 tags = get(H.tag_listbox, 'String');
0227 selected_tags = tags(row);
0228
0229 tag_spec.label_file = tag_file;
0230 tag_spec.base_label = selected_tags;
0231 tag_spec.overwrite = false;
0232 data = vb_trial_extractor_tag_by_file(data, tag_spec);
0233 data = vb_trial_extractor_update_screen(data);
0234 case H.tag_selected_trial_push
0235 list_index = get(H.trial_set_listbox, 'Value')';
0236 if isempty(list_index), return; end
0237 new_tag = inputdlg('Input Label name : ', 'Create Label for selected trial.');
0238 if ~isempty(new_tag) && ~isempty(new_tag{1})
0239 data = vb_trial_extractor_tag_by_hand(data, list_index, new_tag{1});
0240 data = vb_trial_extractor_update_screen(data);
0241 end
0242 case H.trial_select_all_push
0243 Ntrial = length(get(H.trial_set_listbox, 'String'));
0244 set(H.trial_set_listbox, 'Value', [1:Ntrial]);
0245 data = vb_trial_extractor_update_screen(data);
0246 case H.channel_selection_push
0247 data = vb_trial_extractor_specify_display_channel(data);
0248 case H.preview_push
0249 data = vb_trial_extractor_preview_trial(data);
0250 case H.add_to_output_list_button
0251 tag_id_list = get(H.tag_listbox, 'Value')';
0252 data = vb_trial_extractor_add_tag_to_output_list(data, tag_id_list);
0253 data = vb_trial_extractor_update_screen(data);
0254
0255
0256 case H.output_file_remove_push
0257 idx = get(H.output_listbox, 'Value')';
0258 data = vb_trial_extractor_remove_output_file(data, idx);
0259 Nfile = size(data.output_file, 2);
0260 if max(idx) > Nfile && Nfile >= 1
0261 set(H.output_listbox, 'Value', Nfile);
0262 end
0263 data = vb_trial_extractor_update_screen(data);
0264 case H.output_settings_push
0265 cur.output_sampling_frequency = data.output_sample_freq;
0266 loop = true;
0267 while(loop)
0268 [cur, canceled] = vb_edit_struct(cur, 'Output settings');
0269 if canceled
0270 loop = false;
0271 else
0272 val = cur.output_sampling_frequency;
0273 if ~isnan(val) && isnumeric(val) && val > 0
0274 data.output_sample_freq = cur.output_sampling_frequency;
0275 loop = false;
0276 else
0277 h = errordlg('Invalid value was specified. Please input positive value.',...
0278 'Output sampling frequency');
0279 uiwait(h);
0280 end
0281 end
0282 end
0283 case H.output_file_push
0284 data = vb_trial_extractor_output_file(data);
0285 end
0286
0287 guidata(fig, data);