0001 function [fileinfo,flg] = vb_job_bad_trial_interact(datafile,job_mode, ...
0002 thred_val,prob_val,thred_ch,actfile,stat_file,std_mode)
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 if ~exist('std_mode','var') , std_mode = 1; end;
0039
0040 if ~isempty(datafile) && ~iscell(datafile),
0041 tmp = datafile;
0042 datafile = {tmp};
0043 end;
0044
0045 if exist('stat_file','var') && exist([stat_file '.info.mat'],'file')
0046
0047 load([stat_file '.info.mat'],'fileinfo')
0048 else
0049
0050
0051 fileinfo = vb_get_multi_fileinfo(datafile);
0052 end
0053
0054
0055
0056
0057
0058
0059 if isfield(fileinfo,'ymax1')
0060 ymax1 = fileinfo.ymax1;
0061 ymax2 = fileinfo.ymax2;
0062 ystd1 = fileinfo.ystd1;
0063 ystd2 = fileinfo.ystd2;
0064 if ~isempty(datafile)
0065 fileinfo = vb_get_multi_fileinfo(datafile);
0066 end
0067 else
0068 ymax1 = [];
0069 ymax2 = [];
0070 ystd1 = [];
0071 ystd2 = [];
0072 fprintf('Load data ')
0073 for n=1:length(datafile)
0074
0075 fprintf('-')
0076 data_tmp = vb_load_meg_data(datafile{n});
0077 [max1,max2,std1,std2] = vb_channel_statics(data_tmp);
0078 ymax1 = [ymax1 , max1];
0079 ymax2 = [ymax2 , max2];
0080 ystd1 = [ystd1 , std1];
0081 ystd2 = [ystd2 , std2];
0082 end
0083 fprintf('\n')
0084 end
0085
0086 if std_mode == 0
0087 ystd1 = mean(ystd1,2);
0088 ystd2 = mean(ystd2,2);
0089 end
0090
0091 ratio1 = ymax1;
0092 ratio2 = ymax2;
0093
0094 ix1 = find(ystd1 > 0);
0095 ix2 = find(ystd2 > 0);
0096
0097 if size(ystd1,2) == 1
0098 ratio1(ix1,:) = vb_repmultiply(ymax1(ix1,:), 1./ystd1(ix1));
0099 ratio2(ix2,:) = vb_repmultiply(ymax2(ix2,:), 1./ystd2(ix2));
0100 else
0101 ratio1(ix1) = ymax1(ix1)./ystd1(ix1);
0102 ratio2(ix2) = ymax2(ix2)./ystd2(ix2);
0103 end
0104
0105 if ~exist('data','var')
0106 Nchannel = fileinfo.Nchannel;
0107 Nsample = fileinfo.Nsample ;
0108 Ntrial = fileinfo.Ntrial ;
0109 Ntotal = fileinfo.Ntotal ;
0110
0111 tstep = 5;
0112 t = 1:tstep:Nsample;
0113 data = zeros(Nchannel,length(t),Ntotal);
0114 jtry = 1;
0115 fprintf('Load data ')
0116 for n=1:length(datafile)
0117
0118 fprintf('-')
0119 data_tmp = vb_load_meg_data(datafile{n});
0120 data(:,:,jtry:jtry+Ntrial(n)-1) = data_tmp(:,t,:);
0121 jtry = jtry+Ntrial(n);
0122 end
0123 [Nch,T,Ntry] = size(data);
0124 fprintf('[Nch,T,Ntry] = [%d, %d, %d] \n',Nch,T,Ntry)
0125 else
0126 data = [];
0127 end
0128
0129 [Nch,Ntry] = size(ymax1);
0130 thred_num = Nch * thred_ch;
0131
0132 switch job_mode
0133 case 5
0134
0135
0136
0137 ch_act = [1:Nch];
0138 [try_err ,flg]= vb_find_bad_trial(ratio1,ratio2,ch_act,thred_val,thred_num);
0139 try_act = vb_setdiff2([1:Ntry],try_err);
0140
0141
0142 ch_bad = vb_find_bad_channel(ratio1(:,try_act),ratio2(:,try_act),...
0143 thred_val,prob_val);
0144
0145
0146 ch_bad = vb_plot_bad_channel(data,ch_bad,flg);
0147
0148
0149 ch_act = vb_setdiff2([1:Nch],ch_bad);
0150 try_bad = vb_find_bad_trial(ratio1,ratio2,ch_act,thred_val);
0151 try_bad = vb_plot_bad_trial(data(ch_act,:,:),try_bad,flg(ch_act,:));
0152 try_act = vb_setdiff2([1:Ntry],try_bad);
0153 case 6
0154
0155
0156 ch_act = [1:Nch];
0157 [try_err ,flg]= vb_find_bad_trial(ratio1,ratio2,ch_act,thred_val,thred_num);
0158
0159
0160 try_bad = vb_plot_bad_trial(data(ch_act,:,:),try_err,flg(ch_act,:));
0161 try_act = vb_setdiff2([1:Ntry],try_bad);
0162
0163
0164 ch_bad = vb_find_bad_channel(ratio1(:,try_act),ratio2(:,try_act),...
0165 thred_val,prob_val);
0166
0167 ch_act = vb_setdiff2([1:Nch],ch_bad);
0168 case 7
0169
0170
0171 ch_act = [1:Nch];
0172 [try_err ,flg]= vb_find_bad_trial(ratio1,ratio2,ch_act,thred_val,thred_num);
0173 try_act = vb_setdiff2([1:Ntry],try_err);
0174
0175
0176 ch_bad = vb_find_bad_channel(ratio1(:,try_act),ratio2(:,try_act),...
0177 thred_val,prob_val);
0178 ch_act = vb_setdiff2([1:Nch],ch_bad);
0179
0180
0181 try_bad = vb_find_bad_trial(ratio1,ratio2,ch_act,thred_val);
0182 try_bad = vb_plot_bad_trial(data(ch_act,:,:),try_bad,flg(ch_act,:));
0183 try_act = vb_setdiff2([1:Ntry],try_bad);
0184 case 8
0185
0186
0187
0188 [ch_bad,flg] = vb_find_bad_channel(ratio1,ratio2,thred_val,prob_val);
0189
0190
0191 ch_act = vb_setdiff2([1:Nch],ch_bad);
0192 try_bad = vb_find_bad_trial(ratio1,ratio2,ch_act,thred_val);
0193
0194
0195 try_bad = vb_plot_bad_trial(data(ch_act,:,:),try_bad,flg(ch_act,:));
0196 try_act = vb_setdiff2([1:Ntry],try_bad);
0197 try_err = [];
0198 end
0199
0200 Ntry = length(try_act);
0201 Nact = length(ch_act);
0202
0203 if job_mode==1 || job_mode==2
0204 fprintf('Active %d channel & %d epoch\n',Nact, Ntry)
0205 fprintf('Err trial= %d\n',length(try_err));
0206 end
0207
0208
0209 fileinfo.ymax1 = ymax1;
0210 fileinfo.ymax2 = ymax2;
0211 fileinfo.ystd1 = ystd1;
0212 fileinfo.ystd2 = ystd2;
0213
0214 fileinfo.channel_id = ch_act;
0215 fileinfo.act_trial = try_act;
0216 fileinfo.err_trial = try_err;
0217
0218 if ~exist('actfile','var')||isempty(actfile), return;end
0219
0220 vb_save_active_info(fileinfo, [actfile '.info.mat']);
0221
0222 return
0223