0001 function [obj] = vb_timeseries_viewer_callback(obj, hObj)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 if ~exist('obj', 'var')
0018 error('obj is a required parameter.');
0019 end
0020 if ~exist('hObj', 'var')
0021 error('hObj is a required parameter.');
0022 end
0023
0024
0025
0026
0027 get(hObj, 'Tag');
0028
0029 obj.event_number = obj.event_number + 1;
0030
0031 H = obj.H;
0032
0033 Nsample = obj.Nsample;
0034 freq = obj.freq;
0035
0036 switch(hObj)
0037 case H.timeseries_slider
0038 obj = vb_timeseries_viewer_update_display_time_range(obj);
0039 case H.timepoint_current_text
0040 obj = vb_timeseries_viewer_specify_display_time(obj);
0041 case H.Yscale_slider
0042
0043 val = 1-get(hObj, 'Value');
0044 window_len = val * 100;
0045 if window_len >= obj.total_time_sec
0046 window_len = obj.total_time_sec;
0047 end
0048 obj.window_len = window_len;
0049
0050 obj = vb_timeseries_viewer_specify_display_time(obj);
0051 case H.make_preview_file_push
0052
0053 h = msgbox('Now creating preview file....', 'Please wait');
0054 bh = findall(h, 'Style', 'pushbutton');
0055 set(bh, 'Visible', 'off'); drawnow; pause(0.1);
0056
0057 MEGinfo = vb_continuous_file_get_meg_info(obj.org_file);
0058 measurement = vb_info_get_measurement(MEGinfo);
0059
0060
0061 if strcmpi(measurement, 'MEG')
0062 ext = '.meg.mat';
0063 func_name = 'vb_megfile_filter_ch_data';
0064 fieldname = 'new_meg';
0065 elseif strcmpi(measurement, 'EEG')
0066 ext = '.eeg.mat';
0067 func_name = 'vb_eegfile_filter_ch_data';
0068 fieldname = 'new_eeg';
0069 end
0070
0071 org_file = vb_continuous_file_get_filename(obj.org_file);
0072 [base_path, base_filename] = vb_get_file_parts(strrep(org_file, ext, ''));
0073
0074 preview_filename = [base_filename, '_50Hz', ext];
0075 proc_spec.(fieldname) = preview_filename;
0076 proc_spec.parm.fsamp = 50;
0077 try
0078 feval(func_name, org_file, proc_spec);
0079 catch
0080 errordlg(...
0081 ['Failed to make preview file: ' base_path, '/', ...
0082 preview_filename, ...
0083 sprintf(...
0084 '\nCheck directory permission.')], ...
0085 'Preview file');
0086 end
0087 if ishandle(h), delete(h); end
0088
0089 preview_file = [base_path, '/', preview_filename];
0090 if exist(preview_file, 'file') == 2
0091 obj.preview_file = vb_continuous_file_new(preview_file, obj.data_ch_list);
0092 obj = vb_timeseries_viewer_plot_measurement_data(obj);
0093
0094 obj = vb_timeseries_viewer_update_display_time_range(obj);
0095 end
0096 case {H.ylimit_high_edit, H.ylimit_low_edit}
0097 if isnan(str2double(get(hObj, 'String')))
0098 errordlg('Invalid value was specified(Not a number). please input again.', 'Range');
0099 set(hObj, 'String', '');
0100 return;
0101 end
0102 high = str2double(get(H.ylimit_high_edit, 'String'));
0103 low = str2double(get(H.ylimit_low_edit, 'String'));
0104 if ~isnan(high) && ~isnan(low)
0105 ylim(H.data_axes, [low, high]);
0106 range = ylim(H.data_axes);
0107 range = range * 0.98;
0108 Ydata = [range(1), range(1), range(2), range(2)];
0109 for k=1:length(obj.trial_patch_handles)
0110 set(obj.trial_patch_handles(k), 'Ydata', Ydata);
0111 end
0112 end
0113 case {H.ylimit_trigger_high_edit, H.ylimit_trigger_low_edit}
0114 if isnan(str2double(get(hObj, 'String')))
0115 errordlg('Invalid value was specified(Not a number). please input again.', 'Range');
0116 set(hObj, 'String', '');
0117 return;
0118 end
0119 high = str2double(get(H.ylimit_trigger_high_edit, 'String'));
0120 low = str2double(get(H.ylimit_trigger_low_edit, 'String'));
0121 ylim(H.trigger_axes, [low, high]);
0122 if ~isnan(high) && ~isnan(low)
0123 range = ylim(H.trigger_axes);
0124 Ydata = [range(1), range(1), range(2), range(2)];
0125 for k=1:length(obj.trigger_onset_patches_handle)
0126 set(obj.trigger_onset_patches_handle(k), 'Ydata', Ydata);
0127 end
0128 end
0129 case {H.scale_minus_push, H.scale_plus_push}
0130 val = get(H.Yscale_slider, 'Value');
0131 step = get(H.Yscale_slider, 'SliderStep');
0132 max_val = get(H.Yscale_slider, 'Max');
0133 min_val = get(H.Yscale_slider, 'Min');
0134 if hObj == H.scale_minus_push
0135 val = val - step(1);
0136 if val < min_val, val = min_val; end
0137 else
0138 val = val + step(1);
0139 if val > max_val, val = max_val; end
0140 end
0141 set(H.Yscale_slider, 'Value', val);
0142
0143
0144 obj = vb_timeseries_viewer_callback(obj, H.Yscale_slider);
0145 case H.trigger_yrange_fix_check
0146 if get(hObj, 'Value')
0147
0148 high = str2double(get(H.ylimit_trigger_high_edit, 'String'));
0149 low = str2double(get(H.ylimit_trigger_low_edit, 'String'));
0150
0151 if isnan(high) || isnan(low)
0152 range = ylim(H.trigger_axes);
0153 set(H.ylimit_trigger_low_edit, 'String', num2str(range(1)));
0154 set(H.ylimit_trigger_high_edit, 'String', num2str(range(2)));
0155 end
0156 set(H.trigger_axes, 'YLimMode', 'manual');
0157 else
0158 set(H.trigger_axes, 'YLimMode', 'auto');
0159 end
0160 case H.trigger_min_max_value_push
0161 parm.min_value = obj.trigger_min;
0162 parm.max_value = obj.trigger_max;
0163 vb_edit_struct(parm, 'min/max value of trigger data');
0164 case H.trigger_axes
0165 point = get(hObj, 'currentpoint');
0166 vb_text_area('Y value', num2str(point(1,2)));
0167 otherwise
0168 if strcmp(get(hObj, 'Tag'), 'ext_trig_line')
0169
0170 point = get(H.trigger_axes, 'currentpoint');
0171 h = vb_text_area('Y value', num2str(point(1,2)));
0172 end
0173
0174 end
0175
0176 pre = guidata(obj.figure);
0177 if pre.event_number < obj.event_number
0178 guidata(obj.figure, obj);
0179 else
0180 obj = pre;
0181 end