0001 function elec_distance_bad(filename)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 if ~exist('filename','var')
0023 filename = 'eeg_example_data/elec_124_cart.txt';
0024 end
0025
0026
0027
0028 [elec,type,X,Y,Z] = elec_load(filename);
0029
0030
0031 electrodes = ones(size(type)) * 69;
0032 Index = find(type == electrodes);
0033
0034 Ei = elec(Index); Xi = X(Index); Yi = Y(Index); Zi = Z(Index);
0035
0036
0037 elec_meshplot(Xi,Yi,Zi);
0038
0039 view(2);
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050 [dist_e, dist_d] = elec_distance(Ei,Xi,Yi,Zi);
0051
0052
0053
0054
0055 [C_e, C_d] = elec_distance_consec(dist_e, dist_d);
0056 [NN_e, NN_d] = elec_distance_nn(dist_e, dist_d);
0057
0058
0059
0060 NN_d = NN_d(:,2:end);
0061 NN_e = NN_e(:,2:end);
0062
0063
0064
0065
0066 fprintf('\n%s\n', 'Calculating outliers of electrode distances.');
0067
0068 NN_bad_e = cell(0);
0069 NN_bad_d = [];
0070
0071 NN_Mean = mean(NN_d(:,1));
0072 NN_StDev = std(NN_d(:,1));
0073 NN_low = NN_Mean - (2 * NN_StDev);
0074 NN_high = NN_Mean + (2 * NN_StDev);
0075
0076 for e = 1:length(NN_d(:,1))
0077
0078 if(NN_d(e,1) > 0)
0079
0080 if (NN_d(e,1) < NN_low)
0081
0082 NN_bad_e(end + 1) = NN_e(e,1);
0083 NN_bad_d(end + 1) = NN_d(e,1);
0084
0085 elseif (NN_d(e,1) > NN_high)
0086
0087 NN_bad_e(end + 1) = NN_e(e,1);
0088 NN_bad_d(end + 1) = NN_d(e,1);
0089 end
0090 end
0091 end
0092 clear e;
0093
0094
0095 C_bad_e = cell(0);
0096 C_bad_d = [];
0097
0098 C_Mean = mean(C_d);
0099 C_StDev = std(C_d);
0100 C_low = C_Mean - (2 * C_StDev);
0101 C_high = C_Mean + (2 * C_StDev);
0102
0103 for e = 1:length(C_d)
0104
0105 if(C_d(e) > 0)
0106
0107 if (C_d(e) < C_low)
0108
0109 C_bad_e(end + 1) = C_e(e);
0110 C_bad_d(end + 1) = C_d(e);
0111
0112 elseif (C_d(e) > C_high)
0113
0114 C_bad_e(end + 1) = C_e(e);
0115 C_bad_d(end + 1) = C_d(e);
0116 end
0117 end
0118 end
0119 clear e;
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131 if ~isempty(NN_bad_d)
0132
0133 Xb = []; Yb = []; Zb = [];
0134
0135 for n = 1:length(NN_bad_e)
0136 e = str2num(char(NN_bad_e(n)));
0137 index = strmatch(num2str(e(1)), char(elec), 'exact');
0138 Xb(n) = X(index);
0139 Yb(n) = Y(index);
0140 Zb(n) = Z(index);
0141 end
0142 clear index e n;
0143
0144
0145 plot3(Xb,Yb,Zb,'gx',Xb,Yb,Zb,'gd');
0146 end
0147
0148
0149
0150
0151 if ~isempty(C_bad_d)
0152
0153 Xb = []; Yb = []; Zb = [];
0154
0155 for n = 1:length(C_bad_e)
0156 e = str2num(char(C_bad_e(n)));
0157 index = strmatch(num2str(e(1)), char(elec), 'exact');
0158 Xb(n) = X(index);
0159 Yb(n) = Y(index);
0160 Zb(n) = Z(index);
0161 end
0162 clear index e n;
0163
0164 plot3(Xb,Yb,Zb,'bx',Xb,Yb,Zb,'bd');
0165 end
0166
0167
0168
0169
0170
0171
0172 [pathstr,name,ext,versn] = fileparts(filename);
0173 nnfile = fullfile(pathstr,strcat(name,'.nn'));
0174
0175 FID = fopen(nnfile,'w');
0176
0177 fprintf( 1,'%20s%10.4f\n','mean',NN_Mean,'stdev',NN_StDev,'low',NN_low,'high',NN_high);
0178 fprintf(FID,'%20s%10.4f\n','mean',NN_Mean,'stdev',NN_StDev,'low',NN_low,'high',NN_high);
0179
0180 labels = str2num(char(NN_e(:,1)));
0181 nn = [labels NN_d(:,1)];
0182
0183 for n = 2:10
0184 labels = str2num(char(NN_e(:,n)));
0185 nn(:,(end+1):(end+2)) = [labels(:,2) NN_d(:,n)];
0186 end
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196 [pathstr,name,ext,versn] = fileparts(filename);
0197 bfile = fullfile(pathstr,strcat(name,'.bad'));
0198
0199 FID = fopen(bfile,'w');
0200
0201 if(NN_bad_d)
0202
0203 NN_bad_en = str2num(char(NN_bad_e));
0204 NN_bad = [NN_bad_en(:,1) NN_bad_d']';
0205 fprintf('\n%s\n\n', 'Nearest neighbour summary stats:');
0206 fprintf('%-10s%10.4f\n','NN_Mean',NN_Mean,'NN_StDev',NN_StDev,'NN_low',NN_low,'NN_high',NN_high);
0207 fprintf('\n%s\n\n', 'Nearest neighbour outliers (green):');
0208 fprintf('%10d%10.4f\n', NN_bad);
0209
0210 fprintf(FID,'\n%s\n\n', 'Nearest neighbour summary stats:');
0211 fprintf(FID,'%-10s%10.4f\n','NN_Mean',NN_Mean,'NN_StDev',NN_StDev,'NN_low',NN_low,'NN_high',NN_high);
0212
0213 fprintf(FID,'\n%s\n\n', 'Nearest neighbour outliers:');
0214 fprintf(FID,'%10d%10.4f\n', NN_bad);
0215
0216
0217 end
0218
0219 if(C_bad_d)
0220
0221 C_bad_en = str2num(char(C_bad_e));
0222 C_bad = [C_bad_en(:,1) C_bad_d'];
0223 fprintf('\n%s\n\n', 'Consecutive electrode summary stats:');
0224 fprintf('%-10s%10.4f\n','C_Mean',C_Mean,'C_StDev',C_StDev,'C_low',C_low,'C_high',C_high);
0225 fprintf('\n%s\n\n', 'Consecutive electrode outliers (blue):');
0226 fprintf('%10.0f%10.4f\n', C_bad);
0227
0228 fprintf(FID,'\n%s\n\n', 'Consecutive electrode summary stats:');
0229 fprintf(FID,'%-10s%10.4f\n','C_Mean',C_Mean,'C_StDev',C_StDev,'C_low',C_low,'C_high',C_high);
0230
0231 fprintf(FID,'\n%s\n\n', 'Consecutive electrode outliers:');
0232 fprintf(FID,'%10d%10.4f\n', C_bad);
0233
0234 end