0001 function [data, ch_info] = vb_msrmnt_make_trial_data(proc_spec)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057 if ~exist('proc_spec', 'var'), proc_spec = []; end
0058 [proc_spec] = inner_check_arguments(proc_spec);
0059
0060
0061
0062 result = [];
0063
0064
0065 [base_file_def, trigger_def, pretrigger_def, posttrigger_def, ...
0066 sample_freq_def] = ...
0067 inner_read_trigger_file(proc_spec.root_dir, proc_spec.trig_file);
0068
0069
0070 [base_file_sub, trigger_sub, pretrigger_sub, posttrigger_sub, ...
0071 sample_freq_sub] = ...
0072 inner_read_proc_parm(proc_spec.root_dir, proc_spec.proc_parm);
0073
0074
0075 if ~isempty(base_file_sub)
0076 base_file = base_file_sub;
0077 else
0078 base_file = base_file_def;
0079 end
0080
0081 if ~isempty(trigger_sub)
0082 trigger = trigger_sub;
0083 else
0084 trigger = trigger_def;
0085 end
0086
0087 if ~isempty(pretrigger_sub)
0088 pretrigger_ms = pretrigger_sub;
0089 else
0090 pretrigger_ms = pretrigger_def;
0091 end
0092
0093 if ~isempty(posttrigger_sub)
0094 posttrigger_ms = posttrigger_sub;
0095 else
0096 posttrigger_ms = posttrigger_def;
0097 end
0098
0099
0100 if ~isempty(sample_freq_sub)
0101 sample_freq = sample_freq_sub;
0102 else
0103 sample_freq = sample_freq_def;
0104 end
0105
0106
0107 info = vb_load_measurement_info(base_file);
0108 Measurement = vb_info_get_measurement(info);
0109
0110
0111 if strcmp(Measurement, 'MEG')
0112 if ~isempty(proc_spec.new_bin_dir)
0113 new_spec.trigger = trigger;
0114 new_spec.pretrigger_ms = pretrigger_ms;
0115 new_spec.posttrigger_ms = posttrigger_ms;
0116 new_spec.sample_freq = sample_freq;
0117 new_spec.new_file = proc_spec.new_file;
0118 new_spec.new_bin_dir = proc_spec.new_bin_dir;
0119 [data, ch_info] = vb_megfile_make_trial_data(base_file, new_spec);
0120 return;
0121 end
0122 end
0123
0124
0125
0126
0127 info = vb_load_measurement_info(base_file);
0128 fs = vb_info_get_sampling_frequency(info);
0129
0130
0131 load_spec.Trigger = round(trigger * (fs/sample_freq));
0132
0133
0134 load_spec.Pretrigger = ceil(pretrigger_ms *(fs/1000));
0135 load_spec.Posttrigger = ceil(posttrigger_ms *(fs/1000));
0136
0137 load_spec.ChannelType = 'ALL';
0138 load_spec.ActiveChannel = false;
0139 new_file = proc_spec.new_file;
0140
0141 [data, ch_info] = vb_load_meg_data(base_file, load_spec, new_file);
0142 return;
0143
0144
0145
0146
0147
0148
0149
0150 function [proc_spec] = inner_check_arguments(proc_spec)
0151 func_ = mfilename;
0152
0153 if isempty(proc_spec)
0154 error('(%s) proc_spec is a required parameter', func_);
0155 end
0156
0157
0158
0159
0160
0161
0162
0163 if ~isfield(proc_spec, 'root_dir') || isempty(proc_spec.root_dir)
0164 proc_spec.root_dir = '.';
0165 end
0166
0167 if ~isfield(proc_spec, 'trig_file')
0168 proc_spec.trig_file = '';
0169 end
0170
0171 if ~isfield(proc_spec, 'new_file')
0172 proc_spec.new_file = '';
0173 end
0174
0175 if ~isfield(proc_spec, 'new_bin_dir')
0176 proc_spec.new_bin_dir = '';
0177 end
0178
0179 if ~isfield(proc_spec, 'proc_parm')
0180 proc_spec.proc_parm = [];
0181 end
0182
0183 if isempty(proc_spec.trig_file) && isempty(proc_spec.proc_parm)
0184 error('(%s) either trig_file or proc_parm is required', func_);
0185 end
0186 return;
0187
0188
0189
0190
0191
0192
0193 function [base_file, trigger, pretrigger, posttrigger, sample_freq] = ...
0194 inner_read_trigger_file(root_dir, trig_file)
0195
0196 func_ = mfilename;
0197
0198 base_file = '';
0199 trigger = [];
0200 pretrigger = [];
0201 posttrigger = [];
0202 sample_freq = 1024;
0203
0204 if isempty(trig_file)
0205 return;
0206 end
0207
0208
0209 trig_file = [root_dir '/' trig_file];
0210
0211 if exist(trig_file, 'file') ~= 2
0212 error('(%s) cannot find trig_file : %s', func_, trig_file);
0213 end
0214
0215 trig = load(trig_file);
0216 if isfield(trig, 'trig') && ~isempty(trig.trig)
0217 trigger = trig.trig;
0218 end
0219
0220 if isfield(trig, 'parm') && ~isempty(trig.parm)
0221 if isfield(trig.parm, 'data_file') && ~isempty(trig.parm.data_file)
0222 base_file = [root_dir '/' trig.parm.data_file];
0223 end
0224
0225 if isfield(trig.parm, 'Pretrigger_ms')
0226 pretrigger = trig.parm.Pretrigger_ms;
0227 end
0228
0229 if isfield(trig.parm, 'Posttrigger_ms')
0230 posttrigger = trig.parm.Posttrigger_ms;
0231 end
0232
0233 if isfield(trig.parm, 'fsamp')
0234 sample_freq = trig.parm.fsamp;
0235 end
0236 end
0237 return;
0238
0239
0240
0241
0242
0243
0244 function [base_file, trigger, pretrigger, posttrigger, sample_freq] = ...
0245 inner_read_proc_parm(root_dir, parm)
0246
0247 base_file = '';
0248 trigger = [];
0249 pretrigger = [];
0250 posttrigger = [];
0251 sample_freq = [];
0252
0253 if isempty(parm)
0254 return;
0255 end
0256
0257 if isfield(parm, 'trigger') && ~isempty(parm.trigger)
0258 trigger = parm.trigger;
0259 end
0260
0261 if isfield(parm, 'data_file')
0262 base_file = [root_dir '/' parm.data_file];
0263 end
0264
0265 if isfield(parm, 'Pretrigger_ms')
0266 pretrigger = parm.Pretrigger_ms;
0267 end
0268
0269 if isfield(parm, 'Posttrigger_ms')
0270 posttrigger = parm.Posttrigger_ms;
0271 end
0272
0273 if isfield(parm, 'sample_freq')
0274 sample_freq = parm.sample_freq;
0275 end
0276 return;
0277
0278
0279
0280
0281
0282