0001 function [data] = vb_job_filter_trial_data(root_dir, parm)
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 if nargin==1,
0046 parm = root_dir;
0047 datafile = [parm.data_file];
0048 filename = [parm.new_file];
0049 else
0050 root_dir = vb_rm_trailing_slash(root_dir);
0051 datafile = [root_dir '/' parm.data_file];
0052 filename = [root_dir '/' parm.new_file];
0053 end
0054
0055
0056 [data, channel_info] = vb_load_meg_data(datafile);
0057
0058
0059 ch_id = channel_info.ID;
0060
0061
0062 info = vb_load_meg_info(datafile);
0063 parm.freq = info.SampleFreq;
0064
0065
0066 if isfield(parm,'trial') && ~isempty(parm.trial)
0067 if any(parm.trial < 1 | parm.trial > size(data,3)),
0068 error('trial index is not correct')
0069 end
0070 data = data(:,:,parm.trial);
0071 end
0072
0073
0074 if isfield(parm,'cutfreq')
0075 if iscell(parm.cutfreq)
0076 Nfilter = length(parm.cutfreq);
0077
0078 Parm = parm;
0079 Parm.cutfreq = [];
0080 Parm.filter_type = [];
0081 Parm.online = [];
0082 Parm.fsamp = [];
0083 Parm.common_flg = [];
0084
0085
0086 [data] = vb_filter_trial_data(data,Parm);
0087
0088 Parm.bias_flg = [];
0089
0090 for n=1:Nfilter
0091 Parm.cutfreq = parm.cutfreq{n};
0092 Parm.filter_type = parm.filter_type{n} ;
0093 Parm.online = parm.online(n) ;
0094 [data] = vb_filter_trial_data(data,Parm);
0095 end
0096
0097
0098 Parm = parm;
0099 Parm.cutfreq = [];
0100 Parm.filter_type = [];
0101 Parm.online = [];
0102
0103
0104 Parm.bias_flg = [];
0105
0106 [data] = vb_filter_trial_data(data,Parm);
0107 else
0108 [data] = vb_filter_trial_data(data,parm);
0109 end
0110 else
0111 [data] = vb_filter_trial_data(data,parm);
0112 end
0113
0114
0115 if isfield(parm,'trial_mean') && ~isempty(parm.trial_mean) ...
0116 && parm.trial_mean==1,
0117 data = mean(data ,3);
0118 end
0119
0120 [Nch,T,Ntr] = size(data);
0121
0122
0123 data_info = load(datafile);
0124
0125 measurement = vb_load_device(datafile);
0126 Measurement = upper(measurement);
0127
0128 switch Measurement
0129 case 'MEG'
0130 if ~isfield(data_info, 'bexp') || isempty(data_info.bexp)
0131 data_info.bexp = data;
0132 else
0133 if T~=info.Nsample
0134 data_info.bexp(:,T+1:end,:) = [];
0135 end
0136 if Ntr~=info.Nrepeat
0137 data_info.bexp(:,:,Ntr+1:end) = [];
0138 end
0139
0140 data_info.bexp(ch_id,:,:) = data;
0141 end
0142
0143
0144 trial = [];
0145 if isfield(parm,'trial') && ~isempty(parm.trial)
0146 trial = parm.trial;
0147 end
0148 if isfield(parm,'trial_mean') && ~isempty(parm.trial_mean) ...
0149 && parm.trial_mean==1,
0150 trial = 1;
0151 end
0152 if ~isempty(trial)
0153 data_info.MEGinfo.Nrepeat = length(trial);
0154 if isfield(data_info.MEGinfo ,'Trial')
0155 data_info.MEGinfo.Trial = data_info.MEGinfo.Trial(trial);
0156 end
0157 if isfield(data_info.MEGinfo ,'ActiveTrial')
0158 data_info.MEGinfo.ActiveTrial = ones(1,length(trial));
0159 end
0160 end
0161
0162
0163 if T ~= info.Nsample
0164 data_info.MEGinfo.Nsample = T;
0165 data_info.MEGinfo.SampleFreq = parm.fsamp;
0166 data_info.MEGinfo.Pretrigger = ...
0167 round(info.Pretrigger*parm.fsamp/info.SampleFreq);
0168 end
0169
0170 case 'EEG'
0171 if ~isfield(data_info, 'eeg_data') || isempty(data_info.eeg_data)
0172 data_info.eeg_data = data;
0173 else
0174 if T~=info.Nsample
0175 data_info.eeg_data(:,T+1:end,:) = [];
0176 end
0177 if Ntr~=info.Nrepeat
0178 data_info.eeg_data(:,:,Ntr+1:end) = [];
0179 end
0180
0181 data_info.eeg_data(ch_id,:,:) = data;
0182 end
0183
0184
0185 trial = [];
0186 if isfield(parm,'trial') && ~isempty(parm.trial)
0187 trial = parm.trial;
0188 end
0189 if isfield(parm,'trial_mean') && ~isempty(parm.trial_mean) ...
0190 && parm.trial_mean==1,
0191 trial = 1;
0192 end
0193 if ~isempty(trial)
0194 data_info.EEGinfo.Nrepeat = length(trial);
0195 if isfield(data_info.EEGinfo ,'Trial')
0196 data_info.EEGinfo.Trial = data_info.EEGinfo.Trial(trial);
0197 end
0198 if isfield(data_info.EEGinfo ,'ActiveTrial')
0199 data_info.EEGinfo.ActiveTrial = ones(1,length(trial));
0200 end
0201 end
0202
0203
0204 if T ~= info.Nsample
0205 data_info.EEGinfo.Nsample = T;
0206 data_info.EEGinfo.SampleFrequency = parm.fsamp;
0207 data_info.EEGinfo.Pretrigger = ...
0208 round(info.Pretrigger*parm.fsamp/info.SampleFreq);
0209 end
0210
0211 end
0212
0213
0214 vb_save_struct(filename, data_info);
0215
0216
0217 return
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243 clear data_info
0244
0245 [data2, channel_info2] = vb_load_meg_data(datafile);
0246
0247 err = max(abs(data(:)-data2(:)))/mean(data(:))
0248 err = sum(abs(ch_id - channel_info2.ID))
0249 return
0250
0251 [Nch,T,N]=size(data);
0252 data = reshape(data, [Nch T*N]);
0253 plot(data')