0001 function [trial_list] = vb_continuous_file_extract_trial(obj, trig_list, trial_setting)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 if nargin < 3
0026 error('This function needs 3 arguments. Please check your code.');
0027 end
0028
0029
0030
0031 if ~isfield(trial_setting, 'minimum_distance_ms')
0032 trial_setting.minimum_distance_ms = [];
0033 end
0034 trial_list = cell(0);
0035
0036 freq = vb_continuous_file_get_sample_freq(obj);
0037 minimum_distance = freq * trial_setting.minimum_distance_ms/1000;
0038
0039 for k=1:length(trig_list)
0040
0041
0042
0043
0044
0045
0046 parm = vb_trigger_get_parameter(trig_list{k});
0047
0048
0049 parm.fsamp = vb_continuous_file_get_sample_freq(obj);
0050
0051
0052 parm.Pretrigger_ms = trial_setting.pretrigger_ms;
0053 parm.Posttrigger_ms = trial_setting.posttrigger_ms;
0054
0055
0056
0057
0058
0059
0060 load_spec = struct;
0061 load_spec.ChannelName = parm.status_ch;
0062 status_data = vb_load_meg_data(obj.filename, load_spec);
0063 vb_disp(sprintf('extracting from continuous_file :%s....', obj.filename'));
0064
0065 [ix_trial, trig, cond_id, status_val, status] = ...
0066 vb_get_trial_time_index(status_data, parm);
0067
0068
0069 trial_set = [];
0070 Ntrial = size(ix_trial, 2);
0071 for j=1:Ntrial
0072 trial_samples = ix_trial(:, j);
0073
0074 from = trial_samples(1);
0075 to = trial_samples(end);
0076 onset = trig(j);
0077
0078 trial = vb_trial_new(from, to, onset);
0079
0080 if ~isempty(trial_set)
0081 previous_onset = trial_set(end).onset;
0082 distance = onset - previous_onset;
0083 if distance < minimum_distance
0084 continue;
0085 end
0086 end
0087 trial_set = [trial_set; trial];
0088 end
0089
0090
0091 trial_list{k} = trial_set;
0092 end
0093
0094
0095
0096
0097 if nargout < 1
0098 error('your program didn''t receive extracted trial set list.');
0099 end