From d4a7139fb591e8734724e71fb57495c838ad99ba Mon Sep 17 00:00:00 2001 From: pulipakaa24 Date: Sun, 12 Apr 2026 18:47:00 -0500 Subject: [PATCH] HW3 --- .gitattributes | 1 + .../subj1.mat | 3 + .../subj2.mat | 3 + .../topoplot.m | 2288 +++++++++++++++++ ...p26_Plasticity_ECE374N-385J_Neural_Eng.pdf | Bin 0 -> 796255 bytes ...ing_Plasticity_ECE374N-385J_Neural_Eng.pdf | Bin 0 -> 434785 bytes HW-3/ch32Locations.mat | 3 + HW-3/readlocs.m | 862 +++++++ HW_1_PNS_EE379K-385V_Neural_Eng/data.mat | Bin 2022768 -> 132 bytes .../subject1.mat | Bin 9404053 -> 132 bytes .../subject2.mat | Bin 7495269 -> 132 bytes 11 files changed, 3160 insertions(+) create mode 100644 .gitattributes create mode 100644 HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/subj1.mat create mode 100644 HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/subj2.mat create mode 100644 HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/topoplot.m create mode 100644 HW-3/HW_3_sp26_Plasticity_ECE374N-385J_Neural_Eng.pdf create mode 100644 HW-3/HW_3_sp26_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng.pdf create mode 100644 HW-3/ch32Locations.mat create mode 100644 HW-3/readlocs.m diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4d5d840 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.mat filter=lfs diff=lfs merge=lfs -text diff --git a/HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/subj1.mat b/HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/subj1.mat new file mode 100644 index 0000000..4829419 --- /dev/null +++ b/HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/subj1.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38450c9dc79a1abf5345b1396d0077fdb53a696230dde5fabe7d7c2780f8f80a +size 190256910 diff --git a/HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/subj2.mat b/HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/subj2.mat new file mode 100644 index 0000000..9e0c353 --- /dev/null +++ b/HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/subj2.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee3b73f9b3ec9d94af08c516faa453ac6d3ecf33f50114a3b75c3fa7188e446d +size 209407408 diff --git a/HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/topoplot.m b/HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/topoplot.m new file mode 100644 index 0000000..49665bb --- /dev/null +++ b/HW-3/HW_3_sp23_longitudinalTraining_Plasticity_ECE374N-385J_Neural_Eng/topoplot.m @@ -0,0 +1,2288 @@ +% topoplot() - plot a topographic map of a scalp data field in a 2-D circular view +% (looking down at the top of the head) using interpolation on a fine +% cartesian grid. Can also show specified channnel location(s), or return +% an interpolated value at an arbitrary scalp location (see 'noplot'). +% By default, channel locations below head center (arc_length 0.5) are +% shown in a 'skirt' outside the cartoon head (see 'plotrad' and 'headrad' +% options below). Nose is at top of plot; left is left; right is right. +% Using option 'plotgrid', the plot may be one or more rectangular grids. +% Usage: +% >> topoplot(datavector, EEG.chanlocs); % plot a map using an EEG chanlocs structure +% >> topoplot(datavector, 'my_chan.locs'); % read a channel locations file and plot a map +% >> topoplot('example'); % give an example of an electrode location file +% >> [h grid_or_val plotrad_or_grid, xmesh, ymesh]= ... +% topoplot(datavector, chan_locs, 'Input1','Value1', ...); +% Required Inputs: +% datavector - single vector of channel values. Else, if a vector of selected subset +% (int) channel numbers -> mark their location(s) using 'style' 'blank'. +% chan_locs - name of an EEG electrode position file (>> topoplot example). +% Else, an EEG.chanlocs structure (>> help readlocs or >> topoplot example) +% Optional inputs: +% 'maplimits' - 'absmax' -> scale map colors to +/- the absolute-max (makes green 0); +% 'maxmin' -> scale colors to the data range (makes green mid-range); +% [lo.hi] -> use user-definined lo/hi limits +% {default: 'absmax'} +% 'style' - 'map' -> plot colored map only +% 'contour' -> plot contour lines only +% 'both' -> plot both colored map and contour lines +% 'fill' -> plot constant color between contour lines +% 'blank' -> plot electrode locations only {default: 'both'} +% 'electrodes' - 'on','off','labels','numbers','ptslabels','ptsnumbers'. To set the 'pts' +% marker,,see 'Plot detail options' below. {default: 'on' -> mark electrode +% locations with points ('.') unless more than 64 channels, then 'off'}. +% 'plotchans' - [vector] channel numbers (indices) to use in making the head plot. +% {default: [] -> plot all chans} +% 'chantype' - cell array of channel type(s) to plot. Will also accept a single quoted +% string type. Channel type for channel k is field EEG.chanlocs(k).type. +% If present, overrides 'plotchans' and also 'chaninfo' with field +% 'chantype'. Ex. 'EEG' or {'EEG','EOG'} {default: all, or 'plotchans' arg} +% 'plotgrid' - [channels] Plot channel data in one or more rectangular grids, as +% specified by [channels], a position matrix of channel numbers defining +% the topographic locations of the channels in the grid. Zero values are +% given the figure background color; negative integers, the color of the +% polarity-reversed channel values. Ex: >> figure; ... +% >> topoplot(values,'chanlocs','plotgrid',[11 12 0; 13 14 15]); +% % Plot a (2,3) grid of data values from channels 11-15 with one empty +% grid cell (top right) {default: no grid plot} +% 'nosedir' - ['+X'|'-X'|'+Y'|'-Y'] direction of nose {default: '+X'} +% 'chaninfo' - [struct] optional structure containing fields 'nosedir', 'plotrad' +% and/or 'chantype'. See these (separate) field definitions above, below. +% {default: nosedir +X, plotrad 0.5, all channels} +% 'plotrad' - [0.15<=float<=1.0] plotting radius = max channel arc_length to plot. +% See >> topoplot example. If plotrad > 0.5, chans with arc_length > 0.5 +% (i.e. below ears-eyes) are plotted in a circular 'skirt' outside the +% cartoon head. See 'intrad' below. {default: max(max(chanlocs.radius),0.5); +% If the chanlocs structure includes a field chanlocs.plotrad, its value +% is used by default}. +% 'headrad' - [0.15<=float<=1.0] drawing radius (arc_length) for the cartoon head. +% NOTE: Only headrad = 0.5 is anatomically correct! 0 -> don't draw head; +% 'rim' -> show cartoon head at outer edge of the plot {default: 0.5} +% 'intrad' - [0.15<=float<=1.0] radius of the scalp map interpolation area (square or +% disk, see 'intsquare' below). Interpolate electrodes in this area and use +% this limit to define boundaries of the scalp map interpolated data matrix +% {default: max channel location radius} +% 'intsquare' - ['on'|'off'] 'on' -> Interpolate values at electrodes located in the whole +% square containing the (radius intrad) interpolation disk; 'off' -> Interpolate +% values from electrodes shown in the interpolation disk only {default: 'on'}. +% 'conv' - ['on'|'off'] Show map interpolation only out to the convext hull of +% the electrode locations to minimize extrapolation. {default: 'off'} +% 'noplot' - ['on'|'off'|[rad theta]] do not plot (but return interpolated data). +% Else, if [rad theta] are coordinates of a (possibly missing) channel, +% returns interpolated value for channel location. For more info, +% see >> topoplot 'example' {default: 'off'} +% 'verbose' - ['on'|'off'] comment on operations on command line {default: 'on'}. +% +% Plot detail options: +% 'drawaxis' - ['on'|'off'] draw axis on the top left corner. +% 'emarker' - Matlab marker char | {markerchar color size linewidth} char, else cell array +% specifying the electrode 'pts' marker. Ex: {'s','r',32,1} -> 32-point solid +% red square. {default: {'.','k',[],1} where marker size ([]) depends on the number +% of channels plotted}. +% 'emarker2' - {markchans}|{markchans marker color size linewidth} cell array specifying +% an alternate marker for specified 'plotchans'. Ex: {[3 17],'s','g'} +% {default: none, or if {markchans} only are specified, then {markchans,'o','r',10,1}} +% 'hcolor' - color of the cartoon head. Use 'hcolor','none' to plot no head. {default: 'k' = black} +% 'shading' - 'flat','interp' {default: 'flat'} +% 'numcontour' - number of contour lines {default: 6} +% 'contourvals' - values for contour {default: same as input values} +% 'pmask' - values for masking topoplot. Array of zeros and 1 of the same size as the input +% value array {default: []} +% 'color' - color of the contours {default: dark grey} +% 'whitebk ' - ('on'|'off') make the background color white (e.g., to print empty plotgrid channels) +% {default: 'off'} +% 'gridscale' - [int > 32] size (nrows) of interpolated scalp map data matrix {default: 67} +% 'colormap' - (n,3) any size colormap {default: existing colormap} +% 'circgrid' - [int > 100] number of elements (angles) in head and border circles {201} +% +% Dipole plotting options: +% 'dipole' - [xi yi xe ye ze] plot dipole on the top of the scalp map +% from coordinate (xi,yi) to coordinates (xe,ye,ze) (dipole head +% model has radius 1). If several rows, plot one dipole per row. +% Coordinates returned by dipplot() may be used. Can accept +% an EEG.dipfit.model structure (See >> help dipplot). +% Ex: ,'dipole',EEG.dipfit.model(17) % Plot dipole(s) for comp. 17. +% 'dipnorm' - ['on'|'off'] normalize dipole length {default: 'on'}. +% 'diporient' - [-1|1] invert dipole orientation {default: 1}. +% 'diplen' - [real] scale dipole length {default: 1}. +% 'dipscale' - [real] scale dipole size {default: 1}. +% 'dipsphere' - [real] size of the dipole sphere. {default: 85 mm}. +% 'dipcolor' - [color] dipole color as Matlab code code or [r g b] vector +% {default: 'k' = black}. +% Outputs: +% h - plot axes handle +% grid_or_val - [matrix] the interpolated data image (with off-head points = NaN). +% Else, single interpolated value at the specified 'noplot' arg channel +% location ([rad theta]), if any. +% plotrad_or_grid - IF grid image returned above, then the 'plotrad' radius of the grid. +% Else, the grid image +% xmesh, ymesh - x and y values of the returned grid (above) +% +% Chan_locs format: +% See >> topoplot 'example' +% +% Examples: +% +% To plot channel locations only: +% >> figure; topoplot([],EEG.chanlocs,'style','blank','electrodes','labelpoint','chaninfo',EEG.chaninfo); +% +% Notes: - To change the plot map masking ring to a new figure background color, +% >> set(findobj(gca,'type','patch'),'facecolor',get(gcf,'color')) +% - Topoplots may be rotated. From the commandline >> view([deg 90]) {default: [0 90]) +% +% Authors: Andy Spydell, Colin Humphries, Arnaud Delorme & Scott Makeig +% CNL / Salk Institute, 8/1996-/10/2001; SCCN/INC/UCSD, Nov. 2001 - +% +% See also: timtopo(), envtopo() + +% Deprecated options: +% 'shrink' - ['on'|'off'|'force'|factor] Deprecated. 'on' -> If max channel arc_length +% > 0.5, shrink electrode coordinates towards vertex to plot all channels +% by making max arc_length 0.5. 'force' -> Normalize arc_length +% so the channel max is 0.5. factor -> Apply a specified shrink +% factor (range (0,1) = shrink fraction). {default: 'off'} +% 'electcolor' {'k'} ... electrode marking details and their {defaults}. +% 'emarker' {'.'}|'emarkersize' {14}|'emarkersizemark' {40}|'efontsize' {var} - +% electrode marking details and their {defaults}. +% 'ecolor' - color of the electrode markers {default: 'k' = black} +% 'interplimits' - ['electrodes'|'head'] 'electrodes'-> interpolate the electrode grid; +% 'head'-> interpolate the whole disk {default: 'head'}. + +% Unimplemented future options: + +% Copyright (C) Colin Humphries & Scott Makeig, CNL / Salk Institute, Aug, 1996 +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 2 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +% $Log: topoplot.m,v $ +% Revision 1.294 2010/02/09 06:05:18 arno +% colored channels +% +% Revision 1.293 2010/02/01 18:57:40 arno +% Plotting single channels +% +% Revision 1.292 2009/11/11 03:21:28 dev +% Changed the EMARKERSIZE if statements as per bug 748 +% +% Revision 1.291 2009/09/27 05:15:29 arno +% Do not assume file type +% +% Revision 1.290 2009/08/29 04:24:52 arno +% new statistics +% +% Revision 1.289 2009/08/19 01:40:02 arno +% change line size for significance masking +% +% Revision 1.288 2009/08/09 04:57:25 arno +% change transparency +% +% Revision 1.287 2009/05/17 21:53:04 arno +% add pmask and contourvals option +% +% Revision 1.286 2008/12/20 00:45:10 arno +% revert 1.284 +% +% Revision 1.284 2008/04/19 21:01:34 arno +% fix 'example'. +% +% Revision 1.283 2008/01/10 01:24:55 nima +% dipole direction line problem fixed. +% +% Revision 1.282 2007/11/29 17:49:56 arno +% header typo +% +% Revision 1.281 2007/09/11 10:57:53 arno +% catch error when plotting channels outside bounadries +% +% Revision 1.280 2007/08/08 17:50:55 arno +% fix typo +% +% Revision 1.279 2007/08/08 17:38:13 arno +% handle better fieldtrip +% +% Revision 1.278 2007/08/07 21:33:01 arno +% remove debug message +% +% Revision 1.277 2007/08/07 21:22:34 arno +% changed optional arguments to use varargin, call topoplot from fieldtrip if necessary +% +% Revision 1.276 2007/02/05 20:25:58 toby +% fixed bug when entering channels to plot instead of channel values as the first Input +% +% Revision 1.275 2006/09/14 09:31:43 arno +% fix the white background command +% +% Revision 1.274 2006/07/21 03:05:34 toby +% *** empty log message *** +% +% Revision 1.273 2006/07/21 02:44:48 toby +% commented out faulty error message +% +% Revision 1.272 2006/05/07 18:10:15 arno +% channels indices were not accurate -> fixing them +% +% Revision 1.271 2006/04/12 02:54:13 toby +% help text edit +% +% Revision 1.270 2006/03/13 22:44:32 arno +% change default marker +% +% Revision 1.269 2006/03/09 17:15:37 arno +% change default marker size +% / +% +% Revision 1.268 2006/01/17 23:01:27 scott +% clarified status of 'plotgrid' -sm +% +% Revision 1.267 2005/12/08 00:22:19 arno +% fixing ploting one channel +% +% Revision 1.266 2005/12/01 20:28:29 arno +% typo +% +% Revision 1.265 2005/11/30 19:07:58 arno +% fixing ploting electrodes only +% +% Revision 1.264 2005/11/30 19:02:40 arno +% generic plotchan +% +% Revision 1.263 2005/11/21 21:30:08 toby +% Corrected a crash-error when attempting to use "plotgrid" and "maplimit>absmax" options +% +% Revision 1.262 2005/11/11 00:58:03 arno +% nothing +% +% Revision 1.261 2005/10/29 03:57:01 scott +% chantype help +% +% Revision 1.260 2005/10/27 22:00:26 toby +% adding channel type +% +% Revision 1.258 2005/09/29 14:56:41 scott +% nothing +% +% Revision 1.257 2005/09/27 21:59:49 arno +% fix plotrad issue call from pop_chanedit +% +% Revision 1.256 2005/09/05 15:58:14 scott +% nothing - spacing while looking through code -sm +% +% Revision 1.255 2005/07/27 18:12:59 arno +% removing datachan check +% +% Revision 1.254 2005/07/16 16:36:08 scott +% same +% +% Revision 1.253 2005/07/16 16:27:25 scott +% fixed 'maplimits',[min max] execution, added test -sm +% +% Revision 1.252 2005/07/12 17:03:25 scott +% documented 'whitebk' option -sm +% +% Revision 1.251 2005/06/09 23:33:46 arno +% remove getdatachan function +% +% Revision 1.250 2005/06/09 23:33:21 arno +% fixing datachan +% +% Revision 1.249 2005/06/09 16:36:25 arno +% getdatachans +% +% Revision 1.248 2005/03/09 17:08:03 arno +% implementing nosedir +% +% Revision 1.247 2005/03/07 17:11:19 arno +% implement chaninfo +% +% Revision 1.246 2005/01/28 17:26:10 arno +% fix typo +% +% Revision 1.245 2005/01/25 18:47:01 scott +% fixed recent bug that made all topoplot colors positive!! +% worked on bug when removing gridchans from specified plotchans (using setxor) +% +% Revision 1.244 2005/01/25 01:32:53 scott +% help msg +% +% Revision 1.243 2005/01/10 20:26:34 scott +% adjust color limits for 'gridplot' +% +% Revision 1.242 2005/01/10 19:46:47 scott +% added (undoc) arg 'whitebk' +% +% Revision 1.241 2005/01/07 22:39:40 scott +% fixed 'labelpoint' keyword for 'electrodes' (used in eeglab.m) +% +% Revision 1.240 2005/01/07 19:55:47 scott +% remove traces of 'gridpos' +% +% Revision 1.239 2005/01/06 19:27:17 scott +% implemented 'gridplot' | 'plotgrid' option +% +% Revision 1.238 2005/01/03 02:27:32 scott +% made 'grid' rectangular (each element square) +% +% Revision 1.237 2005/01/03 02:10:33 scott +% added 'gridplot' option +% +% Revision 1.236 2005/01/02 18:42:25 scott +% implementing 'plotgrid' +% +% Revision 1.235 2004/12/26 05:48:57 scott +% enlarged definition of 'emarker', deprecated 'ecolor','emarkersize'... +% +% Revision 1.234 2004/12/24 19:48:23 scott +% fixed and extended 'emarker2' args; added 'hcolor','none' option; changed 'emarkersize1chan' to +% 'emarkersizemark' (preserving backwards compatability as well). tested with /home/www/eeglab/test_topoplot.m +% +% Revision 1.233 2004/12/24 01:32:29 scott +% documented xmesh, ymesh optional outputs +% +% Revision 1.232 2004/12/24 01:25:28 scott +% clarified 'plotchans', added 'emarker2' +% +% Revision 1.231 2004/12/21 23:18:48 hilit +% change x and y axis to depend on squeezfac, in case 'intrad' is provided +% +% Revision 1.230 2004/12/20 22:05:44 scott +% if intrad specified, then make plotrad <= intrad +% +% Revision 1.229 2004/12/20 21:13:41 scott +% made specifying 'intrad' -> actually use intrad to define the interp grid. +% returned Xi, Yi for toporeplot() (undocumented) +% +% Revision 1.228 2004/12/17 16:36:53 scott +% cleaning up 'plotgrid' code +% +% Revision 1.227 2004/12/17 06:49:57 scott +% tested if isstruct or string chan_loc; worked on plotgrid - still unimplemented +% +% Revision 1.226 2004/12/10 21:00:17 scott +% made 3rd output plotrad (by default). Documented reading of chanlocs.plotrad +% if it exists. +% +% Revision 1.225 2004/11/23 01:52:12 hilit +% fixing 'style' 'blank' problems +% +% Revision 1.224 2004/11/22 21:55:46 hilit +% undo some of the changes +% +% Revision 1.223 2004/11/22 21:47:14 hilit +% debugging 'style' 'blank' problems +% +% Revision 1.222 2004/11/22 20:11:38 scott +% trying to fix style 'blank' problems +% +% Revision 1.221 2004/11/22 05:41:43 arno +% more debugging +% +% Revision 1.220 2004/11/22 05:39:05 arno +% function was crashing on regular topoplot, debuging +% +% Revision 1.219 2004/11/22 05:02:51 scott +% fixing topoplot([],EEG.chanlocs,'emarker','o') +% +% Revision 1.218 2004/11/22 04:58:21 scott +% fixed topoplot(32,EEG.chanlocs) and topoplot([],EEG.chanlocs,'emarker','o') +% to plot marked channel 32 in red disk +% +% Revision 1.217 2004/11/18 20:29:14 hilit +% enabled the 'example' option +% +% Revision 1.216 2004/11/18 19:22:22 scott +% made 3rd output, 'grid'. [] unless interpolated value asked for +% +% Revision 1.215 2004/11/09 19:25:08 arno +% move plotgrid help outsie of header since unimplemented +% +% Revision 1.214 2004/10/27 17:34:35 scott +% help msg adjust -sm +% +% Revision 1.213 2004/10/27 16:39:06 arno +% remove infinite and NaN values +% +% Revision 1.212 2004/10/09 22:26:18 scott +% iv interp. value output, then output grid too -sm +% +% Revision 1.211 2004/10/08 21:34:25 scott +% same -sm +% +% Revision 1.210 2004/10/08 21:32:09 scott +% help message clarification on outputs -sm +% +% Revision 1.209 2004/10/07 15:55:15 scott +% made Values==[] work with plotchans -sm +% +% Revision 1.208 2004/09/29 15:44:46 scott +% added 'plotchans' option. upgraded 'plotgrid' (still unimplemented) -sm +% +% Revision 1.207 2004/09/29 01:04:22 scott +% created input 'plotgrid' - plotting not yet implemented -sm +% +% Revision 1.206 2004/09/10 00:53:08 hilit +% converted input arguments to text() to double +% +% Revision 1.205 2004/07/07 22:21:30 arno +% debug shrink +% +% Revision 1.204 2004/06/10 19:11:53 arno +% remove debug msg +% +% Revision 1.203 2004/05/14 23:41:09 arno +% allowing negative shrink +% +% Revision 1.202 2004/05/14 23:29:32 arno +% fixing toggle name/number +% +% Revision 1.201 2004/05/10 15:14:34 scott +% more flexible labels/numbers/points argument reading; defined ELECTRODE_HEIGHT +% +% Revision 1.200 2004/05/07 15:12:51 scott +% removed textax, instead plot3() electrode labels/pts/numbers above the rest with plot3() -sm +% +% Revision 1.199 2004/05/07 04:35:10 scott +% superimpose textax again - making both axes square +% +% Revision 1.198 2004/05/05 21:57:23 hilit +% removed text from the previous log message +% +% Revision 1.197 2004/05/05 20:56:20 hilit +% change the defult setting of dipnorm to 'on'. +% +% Revision 1.197 2004/05/05 13:55:00 hilit +% Set the defult option of dipnorm to 'on' +% +% Revision 1.196 2004/05/05 20:36:04 scott +% DIPOLE scaling +% +% Revision 1.195 2004/05/05 20:21:02 scott +% *** empty log message *** +% +% Revision 1.194 2004/04/29 18:58:48 scott +% removed new axes - scaling problem. Toggling pts|numbers doesnt work inside head cartoon. +% +% Revision 1.193 2004/04/29 18:36:46 scott +% test +% +% Revision 1.192 2004/04/29 18:23:03 scott +% make overplot axis limits the same as topoplot limits +% +% Revision 1.191 2004/04/28 18:19:06 scott +% put labels/numbers on another axes so that clicking numbers<->labels +% will work inside the head cartoon patch +% +% Revision 1.190 2004/04/28 17:00:42 scott +% no blanking ring when style is 'blank' +% +% Revision 1.189 2004/04/01 17:10:46 scott +% converted 'conv' interpolation to polar +% +% Revision 1.188 2004/03/31 18:23:15 scott +% debug 'conv' mode - plot ears and nose above map surface to avoid masking by 'conv' +% +% Revision 1.187 2004/03/31 18:06:53 scott +% adding 'conv' mode for plotting convex hull; corrected shrink in 'interp' mode +% +% Revision 1.186 2004/03/31 05:15:05 scott +% *** empty log message *** +% +% Revision 1.185 2004/03/31 05:06:27 scott +% implementing 'conv' (undocumented) +% +% Revision 1.184 2004/03/31 03:19:02 scott +% adjust ear lines +% +% Revision 1.183 2004/03/31 02:53:35 scott +% made blanking ring and head filled rings; made default electrodes 'off' iff chans>64; made contour color +% dark grey; adjusted nose and ear shapes +% +% Revision 1.182 2004/03/31 02:08:07 scott +% *** empty log message *** +% +% Revision 1.181 2004/03/30 18:48:21 scott +% same +% +% Revision 1.180 2004/03/30 18:29:08 scott +% testing fill ring +% +% Revision 1.179 2004/03/30 17:38:15 scott +% plot ring patch instead of blanking circle +% +% Revision 1.178 2004/03/25 22:30:13 arno +% same thing +% +% Revision 1.177 2004/03/25 22:26:45 arno +% same thing +% +% Revision 1.176 2004/03/25 22:24:41 arno +% fixing shrinkfactor bug +% +% Revision 1.175 2004/03/24 16:35:25 scott +% added 'cricgrid' plotting detail argument +% +% Revision 1.174 2004/03/23 19:19:34 scott +% made 'electrodes' default 'off' +% +% Revision 1.173 2004/03/23 19:18:32 scott +% default: plotrad >= 0.5 +% +% Revision 1.172 2004/03/23 15:20:39 scott +% made only 2 outputs +% +% Revision 1.171 2004/03/23 00:40:06 scott +% clarifying handling of un-located channels +% +% Revision 1.170 2004/03/22 17:57:21 scott +% added arg 'intrad' - separated interpolation and plotting areas +% Now, by default, interpolates over all the (radius<=1) electrodes. +% Added 'intsquare' option - interpolated values in electrodes in the entire +% interpolation square, not just the (plotting) disk. Can give more accurate +% interpolation at edges of the plotting disk i.e. interpolation instead of +% extrapolation), if there are additional channel locations beyond the plotting area +% +% Revision 1.169 2004/03/22 03:25:41 scott +% re-implmenting shrink options +% +% Revision 1.168 2004/03/21 19:19:18 scott +% help message +% +% Revision 1.167 2004/03/21 18:02:08 scott +% debugged deprecated 'shrink' mode code +% +% Revision 1.166 2004/03/21 17:31:44 scott +% nothing +% +% Revision 1.165 2004/03/21 17:25:39 scott +% corrected dipole plotting +% +% Revision 1.164 2004/03/21 16:52:37 scott +% debugged plotrad, headrad plot size setting +% +% Revision 1.163 2004/03/20 18:20:14 scott +% created 'headrad' (removed 'forcehead'). Now uses only 'plotrad' and 'headrad' +% to set plotting scales. 'shrink' mode disabled temporarily +% +% Revision 1.162 2004/03/19 21:57:58 scott +% do not plot channels with arc_length > 1 +% +% Revision 1.161 2004/03/19 19:47:13 arno +% remove str2num +% +% Revision 1.160 2004/03/19 19:05:26 scott +% read string plotrad from channel locations structure +% +% Revision 1.159 2004/03/19 17:46:19 scott +% added 'forcehead'; changed 'pointnumbers' and 'pointlabels' to 'ptnumbers', 'ptlabels' +% but kept backwards compatibility. Allowed marking of multiple channel locations +% without requiring an explicit 'style','blank'. Allowed [] data -> plot channel +% locations. Improved help message and 'example' text. Switched order of plotting +% of head border, electrodes and head cartoon. Made head cartoon not appear by +% default when plotrad<0.5 or 'shrink' is severe (but see 'forcehead'). -sm +% +% Revision 1.158 2004/03/19 02:33:40 scott +% plotting head, ears and/or skirt as appropriate from plotrad and shrink args +% +% Revision 1.157 2004/03/19 01:49:07 scott +% plotrad +% +% Revision 1.156 2004/03/19 00:30:08 scott +% plotrad minmax +% +% Revision 1.155 2004/03/18 17:05:20 arno +% fixed plotrad +% +% Revision 1.154 2004/03/18 16:36:53 arno +% debug shrink and plotrad +% +% Revision 1.153 2004/03/18 16:22:12 arno +% debug shrink +% +% Revision 1.152 2004/03/18 01:47:24 scott +% debug +% +% Revision 1.151 2004/03/18 01:44:28 scott +% 'plotrad' arg and help message re skirt +% +% Revision 1.150 2004/03/18 01:26:33 arno +% plotrad +% +% Revision 1.149 2004/03/18 00:29:07 arno +% debug skirt option +% +% Revision 1.148 2004/03/18 00:18:09 arno +% skirt option +% +% Revision 1.147 2004/02/25 15:29:39 scott +% dont plot border if shrinkfac < .01 +% +% Revision 1.146 2004/02/25 15:25:07 scott +% adjust border of 'skirt' +% +% Revision 1.145 2004/02/25 15:19:38 scott +% not allowing shrink to be negative +% +% Revision 1.144 2004/02/23 16:55:51 scott +% don't let ears go outside axes if shrink is 'skirt' but shrink factor is 0 or small +% +% Revision 1.143 2004/02/19 15:56:28 scott +% plot dipole(s) last +% +% Revision 1.142 2004/02/19 15:49:58 scott +% plot dipoles inside head in 'skirt' mode +% +% Revision 1.141 2004/02/18 01:16:53 scott +% help message adjust +% +% Revision 1.140 2004/02/18 01:02:58 scott +% 'dipole' help message. Adaptive AXHEADFAC. +% +% Revision 1.139 2004/02/17 22:44:54 arno +% now processing DIPFIT structure and fixed normalization bug +% +% Revision 1.138 2004/02/17 18:16:35 scott +% adjust EMARKERSIZE +% +% Revision 1.137 2004/02/17 18:11:36 scott +% fixed 'skirt'&'fill' problem. Also, made heads bigger +% +% Revision 1.136 2004/02/17 16:58:24 scott +% change color of outer 'shrink' mode ring to almost white, to avoid print bug +% +% Revision 1.135 2004/02/17 03:14:44 scott +% expand skirt border radius +% +% Revision 1.134 2004/02/15 21:30:01 scott +% same +% +% Revision 1.133 2004/02/15 21:17:07 scott +% omit QUAD_SKIRT option - not ready ! +% +% Revision 1.132 2004/02/15 21:02:13 scott +% same +% Revision 1.96 2004/02/15 19:41:48 scott +% skirt with wedges +% +% Revision 1.95 2004/02/15 17:35:49 scott +% added 'style','skirt' +% +% Revision 1.72 2004/02/15 15:58:33 scott +% formatting, try 'shrink','skirt' ... +% +% Revision 1.71 2004/01/20 04:25:05 scott +% help msg edit +% ., +% +% Revision 1.70 2003/12/17 15:49:45 arno +% debug chan with no coordinates +% +% Revision 1.69 2003/12/17 01:25:37 arno +% debug plot electrode subset +% +% Revision 1.68 2003/12/17 00:57:17 arno +% subset of electrodes +% +% Revision 1.67 2003/11/29 23:34:00 scott +% help msg +% +% Revision 1.66 2003/11/06 16:31:18 arno +% changing dipnorm +% +% Revision 1.65 2003/11/06 02:04:41 arno +% correct orientation +% +% Revision 1.64 2003/11/06 01:40:31 arno +% diporient +% +% Revision 1.63 2003/11/06 01:00:57 arno +% adjusting corrdinates +% for dipole +% +% Revision 1.62 2003/11/05 20:35:21 arno +% dipole options +% +% Revision 1.61 2003/11/05 19:44:32 arno +% header text +% +% Revision 1.60 2003/08/08 17:36:12 arno +% shrink factor overwrite problem fixed +% +% Revision 1.59 2003/08/08 17:34:41 arno +% -cos -> cos +% +% Revision 1.58 2003/08/07 20:49:12 arno +% option 'masksurf' to speed up display +% +% Revision 1.57 2003/08/07 16:02:35 scott +% typo +% +% Revision 1.56 2003/08/07 16:01:49 scott +% debug +% +% Revision 1.55 2003/08/07 15:56:54 scott +% debug +% +% Revision 1.54 2003/08/07 15:54:49 scott +% debug last +% +% Revision 1.53 2003/08/07 15:51:05 scott +% added 'noplot' option to return interpolated channel value +% +% Revision 1.52 2003/07/18 01:34:07 scott +% text placement +% +% Revision 1.51 2003/07/18 01:33:19 scott +% text placement +% +% Revision 1.50 2003/07/18 01:31:49 scott +% debug +% +% Revision 1.49 2003/07/18 01:27:17 scott +% debug +% +% Revision 1.48 2003/07/18 01:26:05 scott +% debug +% +% Revision 1.47 2003/07/18 01:18:12 scott +% debug last +% +% Revision 1.46 2003/07/18 01:17:34 scott +% formatting, debug axes size message +% +% Revision 1.45 2003/07/17 23:42:32 scott +% nothing +% +% Revision 1.44 2003/07/17 23:13:03 scott +% rm debug message +% +% Revision 1.43 2003/07/16 16:29:46 arno +% replacing with topoplottest - added image output, gridscale arg +% +% Revision 1.41 2003/07/15 23:55:40 arno +% retreiving version 1.28 +% +% Revision 1.28 2003/06/27 18:53:04 arno +% header msg +% +% Revision 1.27 2003/05/12 22:27:44 arno +% debug verbose +% +% Revision 1.26 2003/05/12 22:23:38 arno +% adding verbose option +% +% Revision 1.25 2002/11/27 01:23:53 arno +% change warning message +% +% Revision 1.24 2002/11/12 23:06:48 arno +% still debugging last insert +% +% Revision 1.23 2002/11/12 22:19:01 arno +% typo +% +% Revision 1.22 2002/11/12 21:43:51 scott +% tmpelocs -> tmpeloc +% +% Revision 1.21 2002/11/12 19:33:24 arno +% remove last channel of eloc structure if necessary (common ref) +% +% Revision 1.20 2002/11/01 03:50:08 erik +% same +% +% Revision 1.19 2002/11/01 03:47:40 erik +% added test for locs_file string to readlocs call +% +% Revision 1.18 2002/10/31 22:51:25 luca +% now also plotting n < nchans single channels +% +% Revision 1.17 2002/10/30 18:50:37 arno +% debugging dipole +% +% Revision 1.16 2002/10/30 16:41:21 arno +% adding the dipole option +% +% Revision 1.15 2002/10/26 20:09:35 arno +% error typo +% +% Revision 1.14 2002/10/14 00:40:44 arno +% *** empty log message *** +% +% Revision 1.13 2002/09/23 18:09:11 arno +% fixing single channel plotting +% +% Revision 1.12 2002/08/13 17:45:58 arno +% undo last change +% +% Revision 1.11 2002/08/13 17:44:37 arno +% remove color setting +% +% Revision 1.10 2002/08/12 01:34:53 arno +% color +% +% Revision 1.9 2002/08/11 22:31:20 arno +% color +% +% Revision 1.8 2002/05/01 18:49:20 arno +% modifying default shrink +% +% Revision 1.7 2002/05/01 02:40:10 arno +% typo +% +% Revision 1.6 2002/04/24 17:30:47 arno +% auto shrink +% +% Revision 1.5 2002/04/24 17:07:28 arno +% debugging error message problem +% +% Revision 1.4 2002/04/17 18:40:23 arno +% display real electrode number +% +% Revision 1.3 2002/04/06 03:47:44 arno +% adding emarkersize1chan input +% +% Revision 1.2 2002/04/06 03:37:24 arno +% adding single channel vector input +% +% Revision 1.1 2002/04/05 17:36:45 jorn +% Initial revision +% + +% Topoplot Version 2.1 +% Early development history: +% Begun by Andy Spydell and Scott Makeig, NHRC, 7-23-96 +% 8-96 Revised by Colin Humphries, CNL / Salk Institute, La Jolla CA +% -changed surf command to imagesc (faster) +% -can now handle arbitrary scaling of electrode distances +% -can now handle non integer angles in chan_locs +% 4-4-97 Revised again by Colin Humphries, reformatted by SM +% -added parameters +% -changed chan_locs format +% 2-26-98 Revised by Colin +% -changed image back to surface command +% -added fill and blank styles +% -removed extra background colormap entry (now use any colormap) +% -added parameters for electrode colors and labels +% -now each topoplot axes use the caxis command again. +% -removed OUTPUT parameter +% 3-11-98 changed default emarkersize, improve help msg -sm +% 5-24-01 made default emarkersize vary with number of channels -sm +% 01-25-02 reformated help & license, added link -ad +% 03-15-02 added readlocs and the use of eloc input structure -ad +% 03-25-02 added 'labelpoint' options and allow Values=[] -ad &sm +% 03-25-02 added details to "Unknown parameter" warning -sm & ad + +function [handle,Zi,grid,Xi,Yi] = topoplot(Values,loc_file,varargin) + +% +%%%%%%%%%%%%%%%%%%%%%%%% Set defaults %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% icadefs % read defaults MAXTOPOPLOTCHANS and DEFAULT_ELOC and BACKCOLOR +if ~exist('BACKCOLOR') % if icadefs.m does not define BACKCOLOR + BACKCOLOR = [.93 .96 1]; % EEGLAB standard +end +whitebk = 'off'; % by default, make gridplot background color = EEGLAB screen background color + +plotgrid = 'off'; +plotchans = []; +noplot = 'off'; +handle = []; +Zi = []; +chanval = NaN; +rmax = 0.5; % actual head radius - Don't change this! +INTERPLIMITS = 'head'; % head, electrodes +INTSQUARE = 'on'; % default, interpolate electrodes located though the whole square containing + % the plotting disk +default_intrad = 1; % indicator for (no) specified intrad +MAPLIMITS = 'absmax'; % absmax, maxmin, [values] +GRID_SCALE = 67; % plot map on a 67X67 grid +CIRCGRID = 201; % number of angles to use in drawing circles +AXHEADFAC = 1.3; % head to axes scaling factor +CONTOURNUM = 6; % number of contour levels to plot +STYLE = 'both'; % default 'style': both,straight,fill,contour,blank +HEADCOLOR = [0 0 0]; % default head color (black) +CCOLOR = [0.2 0.2 0.2]; % default contour color +ELECTRODES = []; % default 'electrodes': on|off|label - set below +MAXDEFAULTSHOWLOCS = 64;% if more channels than this, don't show electrode locations by default +EMARKER = '.'; % mark electrode locations with small disks +ECOLOR = [0 0 0]; % default electrode color = black +EMARKERSIZE = []; % default depends on number of electrodes, set in code +EMARKERLINEWIDTH = 1; % default edge linewidth for emarkers +EMARKERSIZE1CHAN = 20; % default selected channel location marker size +EMARKERCOLOR1CHAN = 'red'; % selected channel location marker color +EMARKER2CHANS = []; % mark subset of electrode locations with small disks +EMARKER2 = 'o'; % mark subset of electrode locations with small disks +EMARKER2COLOR = 'r'; % mark subset of electrode locations with small disks +EMARKERSIZE2 = 10; % default selected channel location marker size +EMARKER2LINEWIDTH = 1; +EFSIZE = get(0,'DefaultAxesFontSize'); % use current default fontsize for electrode labels +HLINEWIDTH = 1.7; % default linewidth for head, nose, ears +BLANKINGRINGWIDTH = .035;% width of the blanking ring +HEADRINGWIDTH = .007;% width of the cartoon head ring +SHADING = 'flat'; % default 'shading': flat|interp +shrinkfactor = []; % shrink mode (dprecated) +intrad = []; % default interpolation square is to outermost electrode (<=1.0) +plotrad = []; % plotting radius ([] = auto, based on outermost channel location) +headrad = []; % default plotting radius for cartoon head is 0.5 +squeezefac = 1.0; +MINPLOTRAD = 0.15; % can't make a topoplot with smaller plotrad (contours fail) +VERBOSE = 'off'; +MASKSURF = 'off'; +CONVHULL = 'off'; % dont mask outside the electrodes convex hull +DRAWAXIS = 'off'; +CHOOSECHANTYPE = 0; +ContourVals = Values; +PMASKFLAG = 0; + +%%%%%% Dipole defaults %%%%%%%%%%%% +DIPOLE = []; +DIPNORM = 'on'; +DIPSPHERE = 85; +DIPLEN = 1; +DIPSCALE = 1; +DIPORIENT = 1; +DIPCOLOR = [0 0 0]; +NOSEDIR = '+X'; +CHANINFO = []; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% +%%%%%%%%%%%%%%%%%%%%%%% Handle arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if nargin< 1 + help topoplot; + return +end + +% calling topoplot from Fieldtrip +% ------------------------------- +fieldtrip = 0; +if nargin < 2, loc_file = []; end; +if isstruct(Values) | ~isstruct(loc_file), fieldtrip == 1; end; +if isstr(loc_file), if exist(loc_file) ~= 2, fieldtrip == 1; end; end; +if fieldtrip + disp('Calling topoplot from Fieldtrip'); + dir1 = which('topoplot'); dir1 = fileparts(dir1); + dir2 = which('electrodenormalize'); dir2 = fileparts(dir2); + addpath(dir2); + try, + topoplot(Values, loc_file, varargin{:}); + catch, + end; + addpath(dir1); + return; +end; + +nargs = nargin; +if nargs == 1 + if isstr(Values) + if any(strcmp(lower(Values),{'example','demo'})) + fprintf(['This is an example of an electrode location file,\n',... + 'an ascii file consisting of the following four columns:\n',... + ' channel_number degrees arc_length channel_name\n\n',... + 'Example:\n',... + ' 1 -18 .352 Fp1 \n',... + ' 2 18 .352 Fp2 \n',... + ' 5 -90 .181 C3 \n',... + ' 6 90 .181 C4 \n',... + ' 7 -90 .500 A1 \n',... + ' 8 90 .500 A2 \n',... + ' 9 -142 .231 P3 \n',... + '10 142 .231 P4 \n',... + '11 0 .181 Fz \n',... + '12 0 0 Cz \n',... + '13 180 .181 Pz \n\n',... + ... + 'In topoplot() coordinates, 0 deg. points to the nose, positive\n',... + 'angles point to the right hemisphere, and negative to the left.\n',... + 'The model head sphere has a circumference of 2; the vertex\n',... + '(Cz) has arc_length 0. Locations with arc_length > 0.5 are below\n',... + 'head center and are plotted outside the head cartoon.\n'.... + 'Option plotrad controls how much of this lower-head "skirt" is shown.\n',... + 'Option headrad controls if and where the cartoon head will be drawn.\n',... + 'Option intrad controls how many channels will be included in the interpolation.\n',... + ]) + return + end + end +end +if nargs < 2 + loc_file = DEFAULT_ELOC; + if ~exist(loc_file) + fprintf('default locations file "%s" not found - specify chan_locs in topoplot() call.\n',loc_file) + error(' ') + end +end +if isempty(loc_file) + loc_file = 0; +end +if isnumeric(loc_file) & loc_file == 0 + loc_file = DEFAULT_ELOC; +end + +if nargs > 2 + if ~(round(nargs/2) == nargs/2) + error('Odd number of input arguments??') + end + for i = 1:2:length(varargin) + Param = varargin{i}; + Value = varargin{i+1}; + if ~isstr(Param) + error('Flag arguments must be strings') + end + Param = lower(Param); + switch Param + case 'conv' + CONVHULL = lower(Value); + if ~strcmp(CONVHULL,'on') & ~strcmp(CONVHULL,'off') + error('Value of ''conv'' must be ''on'' or ''off''.'); + end + case 'colormap' + if size(Value,2)~=3 + error('Colormap must be a n x 3 matrix') + end + colormap(Value) + case 'intsquare' + INTSQUARE = lower(Value); + if ~strcmp(INTSQUARE,'on') & ~strcmp(INTSQUARE,'off') + error('Value of ''intsquare'' must be ''on'' or ''off''.'); + end + case {'interplimits','headlimits'} + if ~isstr(Value) + error('''interplimits'' value must be a string') + end + Value = lower(Value); + if ~strcmp(Value,'electrodes') & ~strcmp(Value,'head') + error('Incorrect value for interplimits') + end + INTERPLIMITS = Value; + case 'verbose' + VERBOSE = Value; + case 'nosedir' + NOSEDIR = Value; + if isempty(strmatch(lower(NOSEDIR), { '+x', '-x', '+y', '-y' })) + error('Invalid nose direction'); + end; + case 'chaninfo' + CHANINFO = Value; + if isfield(CHANINFO, 'nosedir'), NOSEDIR = CHANINFO.nosedir; end; + if isfield(CHANINFO, 'shrink' ), shrinkfactor = CHANINFO.shrink; end; + if isfield(CHANINFO, 'plotrad') & isempty(plotrad), plotrad = CHANINFO.plotrad; end; + if isfield(CHANINFO, 'chantype') + chantype = CHANINFO.chantype; + if ischar(chantype), chantype = cellstr(chantype); end + CHOOSECHANTYPE = 1; + end + case 'chantype' + chantype = Value; + CHOOSECHANTYPE = 1; + if ischar(chantype), chantype = cellstr(chantype); end + if ~iscell(chantype), error('chantype must be cell array. e.g. {''EEG'', ''EOG''}'); end + case 'drawaxis' + DRAWAXIS = Value; + case 'maplimits' + MAPLIMITS = Value; + case 'masksurf' + MASKSURF = Value; + case 'circgrid' + CIRCGRID = Value; + if isstr(CIRCGRID) | CIRCGRID<100 + error('''circgrid'' value must be an int > 100'); + end + case 'style' + STYLE = lower(Value); + case 'numcontour' + CONTOURNUM = Value; + case 'electrodes' + ELECTRODES = lower(Value); + if strcmpi(ELECTRODES,'pointlabels') | strcmpi(ELECTRODES,'ptslabels') ... + | strcmpi(ELECTRODES,'labelspts') | strcmpi(ELECTRODES,'ptlabels') ... + | strcmpi(ELECTRODES,'labelpts') + ELECTRODES = 'labelpoint'; % backwards compatability + elseif strcmpi(ELECTRODES,'pointnumbers') | strcmpi(ELECTRODES,'ptsnumbers') ... + | strcmpi(ELECTRODES,'numberspts') | strcmpi(ELECTRODES,'ptnumbers') ... + | strcmpi(ELECTRODES,'numberpts') | strcmpi(ELECTRODES,'ptsnums') ... + | strcmpi(ELECTRODES,'numspts') + ELECTRODES = 'numpoint'; % backwards compatability + elseif strcmpi(ELECTRODES,'nums') + ELECTRODES = 'numbers'; % backwards compatability + elseif strcmpi(ELECTRODES,'pts') + ELECTRODES = 'on'; % backwards compatability + elseif ~strcmp(ELECTRODES,'off') ... + & ~strcmpi(ELECTRODES,'on') ... + & ~strcmp(ELECTRODES,'labels') ... + & ~strcmpi(ELECTRODES,'numbers') ... + & ~strcmpi(ELECTRODES,'labelpoint') ... + & ~strcmpi(ELECTRODES,'numpoint') + error('Unknown value for keyword ''electrodes'''); + end + case 'dipole' + DIPOLE = Value; + case 'dipsphere' + DIPSPHERE = Value; + case 'dipnorm' + DIPNORM = Value; + case 'diplen' + DIPLEN = Value; + case 'dipscale' + DIPSCALE = Value; + case 'contourvals' + ContourVals = Value; + case 'pmask' + ContourVals = Value; + PMASKFLAG = 1; + case 'diporient' + DIPORIENT = Value; + case 'dipcolor' + DIPCOLOR = Value; + case 'emarker' + if ischar(Value) + EMARKER = Value; + elseif ~iscell(Value) | length(Value) > 4 + error('''emarker'' argument must be a cell array {marker color size linewidth}') + else + EMARKER = Value{1}; + end + if length(Value) > 1 + ECOLOR = Value{2}; + end + if length(Value) > 2 + EMARKERSIZE2 = Value{3}; + end + if length(Value) > 3 + EMARKERLINEWIDTH = Value{4}; + end + case 'emarker2' + if ~iscell(Value) | length(Value) > 5 + error('''emarker2'' argument must be a cell array {chans marker color size linewidth}') + end + EMARKER2CHANS = abs(Value{1}); % ignore channels < 0 + if length(Value) > 1 + EMARKER2 = Value{2}; + end + if length(Value) > 2 + EMARKER2COLOR = Value{3}; + end + if length(Value) > 3 + EMARKERSIZE2 = Value{4}; + end + if length(Value) > 4 + EMARKER2LINEWIDTH = Value{5}; + end + case 'shrink' + shrinkfactor = Value; + case 'intrad' + intrad = Value; + if isstr(intrad) | (intrad < MINPLOTRAD | intrad > 1) + error('intrad argument should be a number between 0.15 and 1.0'); + end + case 'plotrad' + plotrad = Value; + if isstr(plotrad) | (plotrad < MINPLOTRAD | plotrad > 1) + error('plotrad argument should be a number between 0.15 and 1.0'); + end + case 'headrad' + headrad = Value; + if isstr(headrad) & ( strcmpi(headrad,'off') | strcmpi(headrad,'none') ) + headrad = 0; % undocumented 'no head' alternatives + end + if isempty(headrad) % [] -> none also + headrad = 0; + end + if ~isstr(headrad) + if ~(headrad==0) & (headrad < MINPLOTRAD | headrad>1) + error('bad value for headrad'); + end + elseif ~strcmpi(headrad,'rim') + error('bad value for headrad'); + end + case {'headcolor','hcolor'} + HEADCOLOR = Value; + case {'contourcolor','ccolor'} + CCOLOR = Value; + case {'electcolor','ecolor'} + ECOLOR = Value; + case {'emarkersize','emsize'} + EMARKERSIZE = Value; + case {'emarkersize1chan','emarkersizemark'} + EMARKERSIZE1CHAN= Value; + case {'efontsize','efsize'} + EFSIZE = Value; + case 'shading' + SHADING = lower(Value); + if ~any(strcmp(SHADING,{'flat','interp'})) + error('Invalid shading parameter') + end + case 'noplot' + noplot = Value; + if ~isstr(noplot) + if length(noplot) ~= 2 + error('''noplot'' location should be [radius, angle]') + else + chanrad = noplot(1); + chantheta = noplot(2); + noplot = 'on'; + end + end + case 'gridscale' + GRID_SCALE = Value; + if isstr(GRID_SCALE) | GRID_SCALE ~= round(GRID_SCALE) | GRID_SCALE < 32 + error('''gridscale'' value must be integer > 32.'); + end + case {'plotgrid','gridplot'} + plotgrid = 'on'; + gridchans = Value; + case 'plotchans' + plotchans = Value(:); + if find(plotchans<=0) + error('''plotchans'' values must be > 0'); + end + % if max(abs(plotchans))>max(Values) | max(abs(plotchans))>length(Values) -sm ??? + case {'whitebk','whiteback','forprint'} + whitebk = Value; + otherwise + error(['Unknown input parameter ''' Param ''' ???']) + end + end +end +if strcmpi(whitebk, 'on') + BACKCOLOR = [ 1 1 1 ]; +end; + +cmap = colormap; +cmaplen = size(cmap,1); + +if strcmp(STYLE,'blank') % else if Values holds numbers of channels to mark + if length(Values) < length(loc_file) + ContourVals = zeros(1,length(loc_file)); + ContourVals(Values) = 1; + Values = ContourVals; + end; +end; + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% test args for plotting an electrode grid %%%%%%%%%%%%%%%%%%%%%% +% +if strcmp(plotgrid,'on') + STYLE = 'grid'; + gchans = sort(find(abs(gridchans(:))>0)); + + % if setdiff(gchans,unique(gchans)) + % fprintf('topoplot() warning: ''plotgrid'' channel matrix has duplicate channels\n'); + % end + + if ~isempty(plotchans) + if intersect(gchans,abs(plotchans)) + fprintf('topoplot() warning: ''plotgrid'' and ''plotchans'' have channels in common\n'); + end + end +end + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% misc arg tests %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if isempty(ELECTRODES) % if electrode labeling not specified + if length(Values) > MAXDEFAULTSHOWLOCS % if more channels than default max + ELECTRODES = 'off'; % don't show electrodes + else % else if fewer chans, + ELECTRODES = 'on'; % do + end +end + +if isempty(Values) + STYLE = 'blank'; +end +[r,c] = size(Values); +if r>1 & c>1, + error('input data must be a single vector'); +end +Values = Values(:); % make Values a column vector +ContourVals = ContourVals(:); % values for contour + +if ~isempty(intrad) & ~isempty(plotrad) & intrad < plotrad + error('intrad must be >= plotrad'); +end + +if ~strcmpi(STYLE,'grid') % if not plot grid only + +% +%%%%%%%%%%%%%%%%%%%% Read the channel location information %%%%%%%%%%%%%%%%%%%%%%%% +% + if isstr(loc_file) + [tmpeloc labels Th Rd indices] = readlocs( loc_file); + elseif isstruct(loc_file) % a locs struct + [tmpeloc labels Th Rd indices] = readlocs( loc_file ); + % Note: Th and Rd correspond to indices channels-with-coordinates only + else + error('loc_file must be a EEG.locs struct or locs filename'); + end + Th = pi/180*Th; % convert degrees to radians + allchansind = 1:length(Th); + + + if ~isempty(plotchans) + if max(plotchans) > length(Th) + error('''plotchans'' values must be <= max channel index'); + end + end + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% channels to plot %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if ~isempty(plotchans) + plotchans = intersect(plotchans, indices); +end; +if ~isempty(Values) & ~strcmpi( STYLE, 'blank') & isempty(plotchans) + plotchans = indices; +end +if isempty(plotchans) & strcmpi( STYLE, 'blank') + plotchans = indices; +end + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% filter for channel type(s), if specified %%%%%%%%%%%%%%%%%%%%% +% + +if CHOOSECHANTYPE, + newplotchans = eeg_chantype(loc_file,chantype); + plotchans = intersect(newplotchans, plotchans); +end + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% filter channels used for components %%%%%%%%%%%%%%%%%%%%% +% +if isfield(CHANINFO, 'icachansind') & ~isempty(Values) & length(Values) ~= length(tmpeloc) + + % test if ICA component + % --------------------- + if length(CHANINFO.icachansind) == length(Values) + + % if only a subset of channels are to be plotted + % and ICA components also use a subject of channel + % we must find the new indices for these channels + + plotchans = intersect(CHANINFO.icachansind, plotchans); + tmpvals = zeros(1, length(tmpeloc)); + tmpvals(CHANINFO.icachansind) = Values; + Values = tmpvals; + tmpvals = zeros(1, length(tmpeloc)); + tmpvals(CHANINFO.icachansind) = ContourVals; + ContourVals = tmpvals; + + end; +end; + +% +%%%%%%%%%%%%%%%%%%% last channel is reference? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if length(tmpeloc) == length(Values) + 1 % remove last channel if necessary + % (common reference channel) + if plotchans(end) == length(tmpeloc) + plotchans(end) = []; + end; + +end; + +% +%%%%%%%%%%%%%%%%%%% remove infinite and NaN values %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if length(Values) > 1 + inds = union(find(isnan(Values)), find(isinf(Values))); % NaN and Inf values + plotchans = setdiff(plotchans, inds); +end; +if strcmp(plotgrid,'on') + plotchans = setxor(plotchans,gchans); % remove grid chans from head plotchans +end + +[x,y] = pol2cart(Th,Rd); % transform electrode locations from polar to cartesian coordinates +plotchans = abs(plotchans); % reverse indicated channel polarities +allchansind = allchansind(plotchans); +Th = Th(plotchans); +Rd = Rd(plotchans); +x = x(plotchans); +y = y(plotchans); +labels = labels(plotchans); % remove labels for electrodes without locations +labels = strvcat(labels); % make a label string matrix +if ~isempty(Values) & length(Values) > 1 + Values = Values(plotchans); + ContourVals = ContourVals(plotchans); +end; + +% +%%%%%%%%%%%%%%%%%% Read plotting radius from chanlocs %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if isempty(plotrad) & isfield(tmpeloc, 'plotrad'), + plotrad = tmpeloc(1).plotrad; + if isstr(plotrad) % plotrad shouldn't be a string + plotrad = str2num(plotrad) % just checking + end + if plotrad < MINPLOTRAD | plotrad > 1.0 + fprintf('Bad value (%g) for plotrad.\n',plotrad); + error(' '); + end + if strcmpi(VERBOSE,'on') & ~isempty(plotrad) + fprintf('Plotting radius plotrad (%g) set from EEG.chanlocs.\n',plotrad); + end +end; +if isempty(plotrad) + plotrad = min(1.0,max(Rd)*1.02); % default: just outside the outermost electrode location + plotrad = max(plotrad,0.5); % default: plot out to the 0.5 head boundary +end % don't plot channels with Rd > 1 (below head) + +if isempty(intrad) + default_intrad = 1; % indicator for (no) specified intrad + intrad = min(1.0,max(Rd)*1.02); % default: just outside the outermost electrode location +else + default_intrad = 0; % indicator for (no) specified intrad + if plotrad > intrad + plotrad = intrad; + end +end % don't interpolate channels with Rd > 1 (below head) +if isstr(plotrad) | plotrad < MINPLOTRAD | plotrad > 1.0 + error('plotrad must be between 0.15 and 1.0'); +end + +% +%%%%%%%%%%%%%%%%%%%%%%% Set radius of head cartoon %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if isempty(headrad) % never set -> defaults + if plotrad >= rmax + headrad = rmax; % (anatomically correct) + else % if plotrad < rmax + headrad = 0; % don't plot head + if strcmpi(VERBOSE, 'on') + fprintf('topoplot(): not plotting cartoon head since plotrad (%5.4g) < 0.5\n',... + plotrad); + end + end +elseif strcmpi(headrad,'rim') % force plotting at rim of map + headrad = plotrad; +end + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Shrink mode %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if ~isempty(shrinkfactor) | isfield(tmpeloc, 'shrink'), + if isempty(shrinkfactor) & isfield(tmpeloc, 'shrink'), + shrinkfactor = tmpeloc(1).shrink; + if strcmpi(VERBOSE,'on') + if isstr(shrinkfactor) + fprintf('Automatically shrinking coordinates to lie above the head perimter.\n'); + else + fprintf('Automatically shrinking coordinates by %3.2f\n', shrinkfactor); + end; + end + end; + + if isstr(shrinkfactor) + if strcmpi(shrinkfactor, 'on') | strcmpi(shrinkfactor, 'force') | strcmpi(shrinkfactor, 'auto') + if abs(headrad-rmax) > 1e-2 + fprintf(' NOTE -> the head cartoon will NOT accurately indicate the actual electrode locations\n'); + end + if strcmpi(VERBOSE,'on') + fprintf(' Shrink flag -> plotting cartoon head at plotrad\n'); + end + headrad = plotrad; % plot head around outer electrodes, no matter if 0.5 or not + end + else % apply shrinkfactor + plotrad = rmax/(1-shrinkfactor); + headrad = plotrad; % make deprecated 'shrink' mode plot + if strcmpi(VERBOSE,'on') + fprintf(' %g%% shrink applied.'); + if abs(headrad-rmax) > 1e-2 + fprintf(' Warning: With this "shrink" setting, the cartoon head will NOT be anatomically correct.\n'); + else + fprintf('\n'); + end + end + end +end; % if shrink + +% +%%%%%%%%%%%%%%%%% Issue warning if headrad ~= rmax %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% + +if headrad ~= 0.5 & strcmpi(VERBOSE, 'on') + fprintf(' NB: Plotting map using ''plotrad'' %-4.3g,',plotrad); + fprintf( ' ''headrad'' %-4.3g\n',headrad); + fprintf('Warning: The plotting radius of the cartoon head is NOT anatomically correct (0.5).\n') +end +% +%%%%%%%%%%%%%%%%%%%%% Find plotting channels %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% + +pltchans = find(Rd <= plotrad); % plot channels inside plotting circle + +if strcmpi(INTSQUARE,'on') % interpolate channels in the radius intrad square + intchans = find(x <= intrad & y <= intrad); % interpolate and plot channels inside interpolation square +else + intchans = find(Rd <= intrad); % interpolate channels in the radius intrad circle only +end + +% +%%%%%%%%%%%%%%%%%%%%% Eliminate channels not plotted %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% + +allx = x; +ally = y; +intchans; % interpolate using only the 'intchans' channels +pltchans; % plot using only indicated 'plotchans' channels + +if length(pltchans) < length(Rd) & strcmpi(VERBOSE, 'on') + fprintf('Interpolating %d and plotting %d of the %d scalp electrodes.\n', ... + length(intchans),length(pltchans),length(Rd)); +end; + + +% fprintf('topoplot(): plotting %d channels\n',length(pltchans)); +if ~isempty(EMARKER2CHANS) + if strcmpi(STYLE,'blank') + error('emarker2 not defined for style ''blank'' - use marking channel numbers in place of data'); + else % mark1chans and mark2chans are subsets of pltchans for markers 1 and 2 + [tmp1 mark1chans tmp2] = setxor(pltchans,EMARKER2CHANS); + [tmp3 tmp4 mark2chans] = intersect(EMARKER2CHANS,pltchans); + end +end + +if ~isempty(Values) + if length(Values) == length(Th) % if as many map Values as channel locs + intValues = Values(intchans); + intContourVals = ContourVals(intchans); + Values = Values(pltchans); + ContourVals = ContourVals(pltchans); + end; +end; % now channel parameters and values all refer to plotting channels only + +allchansind = allchansind(pltchans); +intTh = Th(intchans); % eliminate channels outside the interpolation area +intRd = Rd(intchans); +intx = x(intchans); +inty = y(intchans); +Th = Th(pltchans); % eliminate channels outside the plotting area +Rd = Rd(pltchans); +x = x(pltchans); +y = y(pltchans); + +labels= labels(pltchans,:); +% +%%%%%%%%%%%%%%% Squeeze channel locations to <= rmax %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% + +squeezefac = rmax/plotrad; +intRd = intRd*squeezefac; % squeeze electrode arc_lengths towards the vertex +Rd = Rd*squeezefac; % squeeze electrode arc_lengths towards the vertex + % to plot all inside the head cartoon +intx = intx*squeezefac; +inty = inty*squeezefac; +x = x*squeezefac; +y = y*squeezefac; +allx = allx*squeezefac; +ally = ally*squeezefac; +% Note: Now outermost channel will be plotted just inside rmax + +else % if strcmpi(STYLE,'grid') + intx = rmax; inty=rmax; +end % if ~strcmpi(STYLE,'grid') + +% +%%%%%%%%%%%%%%%% rotate channels based on chaninfo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if strcmpi(lower(NOSEDIR), '+x') + rotate = 0; +else + if strcmpi(lower(NOSEDIR), '+y') + rotate = 3*pi/2; + elseif strcmpi(lower(NOSEDIR), '-x') + rotate = pi; + else rotate = pi/2; + end; + allcoords = (inty + intx*sqrt(-1))*exp(sqrt(-1)*rotate); + intx = imag(allcoords); + inty = real(allcoords); + allcoords = (ally + allx*sqrt(-1))*exp(sqrt(-1)*rotate); + allx = imag(allcoords); + ally = real(allcoords); + allcoords = (y + x*sqrt(-1))*exp(sqrt(-1)*rotate); + x = imag(allcoords); + y = real(allcoords); +end; + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Make the plot %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if ~strcmpi(STYLE,'blank') % if draw interpolated scalp map + if ~strcmpi(STYLE,'grid') % not a rectangular channel grid + % + %%%%%%%%%%%%%%%% Find limits for interpolation %%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + if default_intrad % if no specified intrad + if strcmpi(INTERPLIMITS,'head') % intrad is 'head' + xmin = min(-rmax,min(intx)); xmax = max(rmax,max(intx)); + ymin = min(-rmax,min(inty)); ymax = max(rmax,max(inty)); + + else % INTERPLIMITS = rectangle containing electrodes -- DEPRECATED OPTION! + xmin = max(-rmax,min(intx)); xmax = min(rmax,max(intx)); + ymin = max(-rmax,min(inty)); ymax = min(rmax,max(inty)); + end + else % some other intrad specified + xmin = -intrad*squeezefac; xmax = intrad*squeezefac; % use the specified intrad value + ymin = -intrad*squeezefac; ymax = intrad*squeezefac; + end + % + %%%%%%%%%%%%%%%%%%%%%%% Interpolate scalp map data %%%%%%%%%%%%%%%%%%%%%%%% + % + xi = linspace(xmin,xmax,GRID_SCALE); % x-axis description (row vector) + yi = linspace(ymin,ymax,GRID_SCALE); % y-axis description (row vector) + + [Xi,Yi,Zi] = griddata(inty,intx,intValues,yi',xi,'v4'); % interpolate data + [Xi,Yi,ZiC] = griddata(inty,intx,intContourVals,yi',xi,'v4'); % interpolate data + + % + %%%%%%%%%%%%%%%%%%%%%%% Mask out data outside the head %%%%%%%%%%%%%%%%%%%%% + % + mask = (sqrt(Xi.^2 + Yi.^2) <= rmax); % mask outside the plotting circle + ii = find(mask == 0); + Zi(ii) = NaN; % mask non-plotting voxels with NaNs + ZiC(ii) = NaN; % mask non-plotting voxels with NaNs + grid = plotrad; % unless 'noplot', then 3rd output arg is plotrad + % + %%%%%%%%%% Return interpolated value at designated scalp location %%%%%%%%%% + % + if exist('chanrad') % optional first argument to 'noplot' + chantheta = (chantheta/360)*2*pi; + chancoords = round(ceil(GRID_SCALE/2)+GRID_SCALE/2*2*chanrad*[cos(-chantheta),... + -sin(-chantheta)]); + if chancoords(1)<1 ... + | chancoords(1) > GRID_SCALE ... + | chancoords(2)<1 ... + | chancoords(2)>GRID_SCALE + error('designated ''noplot'' channel out of bounds') + else + chanval = Zi(chancoords(1),chancoords(2)); + grid = Zi; + Zi = chanval; % return interpolated value instead of Zi + end + end + % + %%%%%%%%%%%%%%%%%%%%%%%%%% Return interpolated image only %%%%%%%%%%%%%%%%% + % + if strcmpi(noplot, 'on') + if strcmpi(VERBOSE,'on') + fprintf('topoplot(): no plot requested.\n') + end + return; + end + % + %%%%%%%%%%%%%%%%%%%%%%% Calculate colormap limits %%%%%%%%%%%%%%%%%%%%%%%%%% + % + if isstr(MAPLIMITS) + if strcmp(MAPLIMITS,'absmax') + amax = max(max(abs(Zi))); + amin = -amax; + elseif strcmp(MAPLIMITS,'maxmin') | strcmp(MAPLIMITS,'minmax') + amin = min(min(Zi)); + amax = max(max(Zi)); + else + error('unknown ''maplimits'' value.'); + end + elseif length(MAPLIMITS) == 2 + amin = MAPLIMITS(1); + amax = MAPLIMITS(2); + else + error('unknown ''maplimits'' value'); + end + delta = xi(2)-xi(1); % length of grid entry + + end % if ~strcmpi(STYLE,'grid') + % + %%%%%%%%%%%%%%%%%%%%%%%%%% Scale the axes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + cla % clear current axis + hold on + h = gca; % uses current axes + + % instead of default larger AXHEADFAC + if squeezefac<0.92 & plotrad-headrad > 0.05 % (size of head in axes) + AXHEADFAC = 1.05; % do not leave room for external ears if head cartoon + % shrunk enough by the 'skirt' option + end + + set(gca,'Xlim',[-rmax rmax]*AXHEADFAC,'Ylim',[-rmax rmax]*AXHEADFAC); + % specify size of head axes in gca + + unsh = (GRID_SCALE+1)/GRID_SCALE; % un-shrink the effects of 'interp' SHADING + + % + %%%%%%%%%%%%%%%%%%%%%%%% Plot grid only %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + if strcmpi(STYLE,'grid') % plot grid only + + % + % The goal below is to make the grid cells square - not yet achieved in all cases? -sm + % + g1 = size(gridchans,1); + g2 = size(gridchans,2); + gmax = max([g1 g2]); + Xi = linspace(-rmax*g2/gmax,rmax*g2/gmax,g1+1); + Xi = Xi+rmax/g1; Xi = Xi(1:end-1); + Yi = linspace(-rmax*g1/gmax,rmax*g1/gmax,g2+1); + Yi = Yi+rmax/g2; Yi = Yi(1:end-1); Yi = Yi(end:-1:1); % by trial and error! + % + %%%%%%%%%%% collect the gridchans values %%%%%%%%%%%%%%%%%%%%%%%%%%% + % + gridvalues = zeros(size(gridchans)); + for j=1:size(gridchans,1) + for k=1:size(gridchans,2) + gc = gridchans(j,k); + if gc > 0 + gridvalues(j,k) = Values(gc); + elseif gc < 0 + gridvalues(j,k) = -Values(gc); + else + gridvalues(j,k) = nan; % not-a-number = no value + end + end + end + % + %%%%%%%%%%% reset color limits for grid plot %%%%%%%%%%%%%%%%%%%%%%%%% + % + if isstr(MAPLIMITS) + if strcmp(MAPLIMITS,'maxmin') | strcmp(MAPLIMITS,'minmax') + amin = min(min(gridvalues(~isnan(gridvalues)))); + amax = max(max(gridvalues(~isnan(gridvalues)))); + elseif strcmp(MAPLIMITS,'absmax') + % 11/21/2005 Toby edit + % This should now work as specified. Before it only crashed (using + % "plotgrid" and "maplimits>absmax" options). + amax = max(max(abs(gridvalues(~isnan(gridvalues))))); + amin = -amax; + %amin = -max(max(abs([amin amax]))); + %amax = max(max(abs([amin amax]))); + else + error('unknown ''maplimits'' value'); + end + elseif length(MAPLIMITS) == 2 + amin = MAPLIMITS(1); + amax = MAPLIMITS(2); + else + error('unknown ''maplimits'' value'); + end + % + %%%%%%%%%% explicitly compute grid colors, allowing BACKCOLOR %%%%%% + % + gridvalues = 1+floor(cmaplen*(gridvalues-amin)/(amax-amin)); + gridvalues(find(gridvalues == cmaplen+1)) = cmaplen; + gridcolors = zeros([size(gridvalues),3]); + for j=1:size(gridchans,1) + for k=1:size(gridchans,2) + if ~isnan(gridvalues(j,k)) + gridcolors(j,k,:) = cmap(gridvalues(j,k),:); + else + if strcmpi(whitebk,'off') + gridcolors(j,k,:) = BACKCOLOR; % gridchans == 0 -> background color + % This allows the plot to show 'space' between separate sub-grids or strips + else % 'on' + gridcolors(j,k,:) = [1 1 1]; BACKCOLOR; % gridchans == 0 -> white for printing + end + end + end + end + + % + %%%%%%%%%% draw the gridplot image %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + handle=imagesc(Xi,Yi,gridcolors); % plot grid with explicit colors + axis square + + % + %%%%%%%%%%%%%%%%%%%%%%%% Plot map contours only %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + elseif strcmp(STYLE,'contour') % plot surface contours only + [cls chs] = contour(Xi,Yi,ZiC,CONTOURNUM,'k'); + % for h=chs, set(h,'color',CCOLOR); end + % + %%%%%%%%%%%%%%%%%%%%%%%% Else plot map and contours %%%%%%%%%%%%%%%%%%%%%%%%% + % + elseif strcmp(STYLE,'both') % plot interpolated surface and surface contours + if strcmp(SHADING,'interp') + tmph = surface(Xi*unsh,Yi*unsh,zeros(size(Zi))-0.1,Zi,... + 'EdgeColor','none','FaceColor',SHADING); + else % SHADING == 'flat' + tmph = surface(Xi-delta/2,Yi-delta/2,zeros(size(Zi))-0.1,Zi,... + 'EdgeColor','none','FaceColor',SHADING); + end + if strcmpi(MASKSURF, 'on') + set(tmph, 'visible', 'off'); + handle = tmph; + end; + + warning off; + if ~PMASKFLAG + [cls chs] = contour(Xi,Yi,ZiC,CONTOURNUM,'k'); + else + ZiC(find(ZiC > 0.5 )) = NaN; + [cls chs] = contourf(Xi,Yi,ZiC,0,'k'); + subh = get(chs, 'children'); + for indsubh = 1:length(subh) + numfaces = size(get(subh(indsubh), 'XData'),1); + set(subh(indsubh), 'FaceVertexCData', ones(numfaces,3), 'Cdatamapping', 'direct', 'facealpha', 0.5, 'linewidth', 2); + end; + end; + for h=chs, set(h,'color',CCOLOR); end + warning on; + % + %%%%%%%%%%%%%%%%%%%%%%%% Else plot map only %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + elseif strcmp(STYLE,'straight') | strcmp(STYLE,'map') % 'straight' was former arg + + if strcmp(SHADING,'interp') % 'interp' mode is shifted somehow... but how? + tmph = surface(Xi*unsh,Yi*unsh,zeros(size(Zi)),Zi,'EdgeColor','none',... + 'FaceColor',SHADING); + else + tmph = surface(Xi-delta/2,Yi-delta/2,zeros(size(Zi)),Zi,'EdgeColor','none',... + 'FaceColor',SHADING); + end + if strcmpi(MASKSURF, 'on') + set(tmph, 'visible', 'off'); + handle = tmph; + end; + % + %%%%%%%%%%%%%%%%%% Else fill contours with uniform colors %%%%%%%%%%%%%%%%%% + % + elseif strcmp(STYLE,'fill') + [cls chs] = contourf(Xi,Yi,Zi,CONTOURNUM,'k'); + + % for h=chs, set(h,'color',CCOLOR); end + % <- 'not line objects.' Why does 'both' work above??? + + else + error('Invalid style') + end + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Set color axis %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + caxis([amin amax]); % set coloraxis + +else % if STYLE 'blank' +% +%%%%%%%%%%%%%%%%%%%%%%% Draw blank head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% + if strcmpi(noplot, 'on') + if strcmpi(VERBOSE,'on') + fprintf('topoplot(): no plot requested.\n') + end + return; + end + cla + hold on + + set(gca,'Xlim',[-rmax rmax]*AXHEADFAC,'Ylim',[-rmax rmax]*AXHEADFAC) + % pos = get(gca,'position'); + % fprintf('Current axes size %g,%g\n',pos(3),pos(4)); + + if strcmp(ELECTRODES,'labelpoint') | strcmp(ELECTRODES,'numpoint') + text(-0.6,-0.6, ... + [ int2str(length(Rd)) ' of ' int2str(length(tmpeloc)) ' electrode locations shown']); + text(-0.6,-0.7, [ 'Click on electrodes to toggle name/number']); + tl = title('Channel locations'); + set(tl, 'fontweight', 'bold'); + end; +end % STYLE 'blank' + +if exist('handle') ~= 1 + handle = gca; +end; + +if ~strcmpi(STYLE,'grid') % if not plot grid only + +% +%%%%%%%%%%%%%%%%%%% Plot filled ring to mask jagged grid boundary %%%%%%%%%%%%%%%%%%%%%%%%%%% +% +hwidth = HEADRINGWIDTH; % width of head ring +hin = squeezefac*headrad*(1- hwidth/2); % inner head ring radius + +if strcmp(SHADING,'interp') + rwidth = BLANKINGRINGWIDTH*1.3; % width of blanking outer ring +else + rwidth = BLANKINGRINGWIDTH; % width of blanking outer ring +end +rin = rmax*(1-rwidth/2); % inner ring radius +if hin>rin + rin = hin; % dont blank inside the head ring +end + +if strcmp(CONVHULL,'on') %%%%%%%%% mask outside the convex hull of the electrodes %%%%%%%%% + cnv = convhull(allx,ally); + cnvfac = round(CIRCGRID/length(cnv)); % spline interpolate the convex hull + if cnvfac < 1, cnvfac=1; end; + CIRCGRID = cnvfac*length(cnv); + + startangle = atan2(allx(cnv(1)),ally(cnv(1))); + circ = linspace(0+startangle,2*pi+startangle,CIRCGRID); + rx = sin(circ); + ry = cos(circ); + + allx = allx(:)'; % make x (elec locations; + to nose) a row vector + ally = ally(:)'; % make y (elec locations, + to r? ear) a row vector + erad = sqrt(allx(cnv).^2+ally(cnv).^2); % convert to polar coordinates + eang = atan2(allx(cnv),ally(cnv)); + eang = unwrap(eang); + eradi =spline(linspace(0,1,3*length(cnv)), [erad erad erad], ... + linspace(0,1,3*length(cnv)*cnvfac)); + eangi =spline(linspace(0,1,3*length(cnv)), [eang+2*pi eang eang-2*pi], ... + linspace(0,1,3*length(cnv)*cnvfac)); + xx = eradi.*sin(eangi); % convert back to rect coordinates + yy = eradi.*cos(eangi); + yy = yy(CIRCGRID+1:2*CIRCGRID); + xx = xx(CIRCGRID+1:2*CIRCGRID); + eangi = eangi(CIRCGRID+1:2*CIRCGRID); + eradi = eradi(CIRCGRID+1:2*CIRCGRID); + xx = xx*1.02; yy = yy*1.02; % extend spline outside electrode marks + + splrad = sqrt(xx.^2+yy.^2); % arc radius of spline points (yy,xx) + oob = find(splrad >= rin); % enforce an upper bound on xx,yy + xx(oob) = rin*xx(oob)./splrad(oob); % max radius = rin + yy(oob) = rin*yy(oob)./splrad(oob); % max radius = rin + + splrad = sqrt(xx.^2+yy.^2); % arc radius of spline points (yy,xx) + oob = find(splrad < hin); % don't let splrad be inside the head cartoon + xx(oob) = hin*xx(oob)./splrad(oob); % min radius = hin + yy(oob) = hin*yy(oob)./splrad(oob); % min radius = hin + + ringy = [[ry(:)' ry(1) ]*(rin+rwidth) yy yy(1)]; + ringx = [[rx(:)' rx(1) ]*(rin+rwidth) xx xx(1)]; + + ringh2= patch(ringy,ringx,ones(size(ringy)),BACKCOLOR,'edgecolor','none'); hold on + + % plot(ry*rmax,rx*rmax,'b') % debugging line + +else %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% mask the jagged border around rmax %%%%%%%%%%%%%%%5%%%%%% + + circ = linspace(0,2*pi,CIRCGRID); + rx = sin(circ); + ry = cos(circ); + ringx = [[rx(:)' rx(1) ]*(rin+rwidth) [rx(:)' rx(1)]*rin]; + ringy = [[ry(:)' ry(1) ]*(rin+rwidth) [ry(:)' ry(1)]*rin]; + + if ~strcmpi(STYLE,'blank') + ringh= patch(ringx,ringy,0.01*ones(size(ringx)),BACKCOLOR,'edgecolor','none'); hold on + end + % plot(ry*rmax,rx*rmax,'b') % debugging line +end + + %f1= fill(rin*[rx rX],rin*[ry rY],BACKCOLOR,'edgecolor',BACKCOLOR); hold on + %f2= fill(rin*[rx rX*(1+rwidth)],rin*[ry rY*(1+rwidth)],BACKCOLOR,'edgecolor',BACKCOLOR); + +% Former line-style border smoothing - width did not scale with plot +% brdr=plot(1.015*cos(circ).*rmax,1.015*sin(circ).*rmax,... % old line-based method +% 'color',HEADCOLOR,'Linestyle','-','LineWidth',HLINEWIDTH); % plot skirt outline +% set(brdr,'color',BACKCOLOR,'linewidth',HLINEWIDTH + 4); % hide the disk edge jaggies + +% +%%%%%%%%%%%%%%%%%%%%%%%%% Plot cartoon head, ears, nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if headrad > 0 % if cartoon head to be plotted +% +%%%%%%%%%%%%%%%%%%% Plot head outline %%%%%%%%%%%%%%%%%%%%%%%%%%% +% +headx = [[rx(:)' rx(1) ]*(hin+hwidth) [rx(:)' rx(1)]*hin]; +heady = [[ry(:)' ry(1) ]*(hin+hwidth) [ry(:)' ry(1)]*hin]; + +if ~isstr(HEADCOLOR) | ~strcmpi(HEADCOLOR,'none') + ringh= patch(headx,heady,ones(size(headx)),HEADCOLOR,'edgecolor',HEADCOLOR); hold on +end + +% rx = sin(circ); rX = rx(end:-1:1); +% ry = cos(circ); rY = ry(end:-1:1); +% for k=2:2:CIRCGRID +% rx(k) = rx(k)*(1+hwidth); +% ry(k) = ry(k)*(1+hwidth); +% end +% f3= fill(hin*[rx rX],hin*[ry rY],HEADCOLOR,'edgecolor',HEADCOLOR); hold on +% f4= fill(hin*[rx rX*(1+hwidth)],hin*[ry rY*(1+hwidth)],HEADCOLOR,'edgecolor',HEADCOLOR); + +% Former line-style head +% plot(cos(circ).*squeezefac*headrad,sin(circ).*squeezefac*headrad,... +% 'color',HEADCOLOR,'Linestyle','-','LineWidth',HLINEWIDTH); % plot head outline + +% +%%%%%%%%%%%%%%%%%%% Plot ears and nose %%%%%%%%%%%%%%%%%%%%%%%%%%% +% + base = rmax-.0046; + basex = 0.18*rmax; % nose width + tip = 1.15*rmax; + tiphw = .04*rmax; % nose tip half width + tipr = .01*rmax; % nose tip rounding + q = .04; % ear lengthening + EarX = [.497-.005 .510 .518 .5299 .5419 .54 .547 .532 .510 .489-.005]; % rmax = 0.5 + EarY = [q+.0555 q+.0775 q+.0783 q+.0746 q+.0555 -.0055 -.0932 -.1313 -.1384 -.1199]; + sf = headrad/plotrad; % squeeze the model ears and nose + % by this factor + if ~isstr(HEADCOLOR) | ~strcmpi(HEADCOLOR,'none') + plot3([basex;tiphw;0;-tiphw;-basex]*sf,[base;tip-tipr;tip;tip-tipr;base]*sf,... + 2*ones(size([basex;tiphw;0;-tiphw;-basex])),... + 'Color',HEADCOLOR,'LineWidth',HLINEWIDTH); % plot nose + plot3(EarX*sf,EarY*sf,2*ones(size(EarX)),'color',HEADCOLOR,'LineWidth',HLINEWIDTH) % plot left ear + plot3(-EarX*sf,EarY*sf,2*ones(size(EarY)),'color',HEADCOLOR,'LineWidth',HLINEWIDTH) % plot right ear + end +end + +% +% %%%%%%%%%%%%%%%%%%% Show electrode information %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% + plotax = gca; + axis square % make plotax square + axis off + + pos = get(gca,'position'); + xlm = get(gca,'xlim'); + ylm = get(gca,'ylim'); + % textax = axes('position',pos,'xlim',xlm,'ylim',ylm); % make new axes so clicking numbers <-> labels + % will work inside head cartoon patch + % axes(textax); + axis square % make textax square + + pos = get(gca,'position'); + set(plotax,'position',pos); + + xlm = get(gca,'xlim'); + set(plotax,'xlim',xlm); + + ylm = get(gca,'ylim'); + set(plotax,'ylim',ylm); % copy position and axis limits again + +%get(textax,'pos') % test if equal! +%get(plotax,'pos') +%get(textax,'xlim') +%get(plotax,'xlim') +%get(textax,'ylim') +%get(plotax,'ylim') + + if isempty(EMARKERSIZE) + EMARKERSIZE = 10; + if length(y)>=160 + EMARKERSIZE = 3; + elseif length(y)>=128 + EMARKERSIZE = 3; + elseif length(y)>=100 + EMARKERSIZE = 3; + elseif length(y)>=80 + EMARKERSIZE = 4; + elseif length(y)>=64 + EMARKERSIZE = 5; + elseif length(y)>=48 + EMARKERSIZE = 6; + elseif length(y)>=32 + EMARKERSIZE = 8; + end + end +% +%%%%%%%%%%%%%%%%%%%%%%%% Mark electrode locations only %%%%%%%%%%%%%%%%%%%%%%%%%% +% +ELECTRODE_HEIGHT = 2.1; % z value for plotting electrode information (above the surf) + +if strcmp(ELECTRODES,'on') % plot electrodes as spots + if isempty(EMARKER2CHANS) + hp2 = plot3(y,x,ones(size(x))*ELECTRODE_HEIGHT,... + EMARKER,'Color',ECOLOR,'markersize',EMARKERSIZE,'linewidth',EMARKERLINEWIDTH); + else % plot markers for normal chans and EMARKER2CHANS separately + hp2 = plot3(y(mark1chans),x(mark1chans),ones(size((mark1chans)))*ELECTRODE_HEIGHT,... + EMARKER,'Color',ECOLOR,'markersize',EMARKERSIZE,'linewidth',EMARKERLINEWIDTH); + hp2b = plot3(y(mark2chans),x(mark2chans),ones(size((mark2chans)))*ELECTRODE_HEIGHT,... + EMARKER2,'Color',EMARKER2COLOR,'markerfacecolor',EMARKER2COLOR,'linewidth',EMARKER2LINEWIDTH,'markersize',EMARKERSIZE2); + end +% +%%%%%%%%%%%%%%%%%%%%%%%% Print electrode labels only %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +elseif strcmp(ELECTRODES,'labels') % print electrode names (labels) + for i = 1:size(labels,1) + text(double(y(i)),double(x(i)),... + ELECTRODE_HEIGHT,labels(i,:),'HorizontalAlignment','center',... + 'VerticalAlignment','middle','Color',ECOLOR,... + 'FontSize',EFSIZE) + end +% +%%%%%%%%%%%%%%%%%%%%%%%% Mark electrode locations plus labels %%%%%%%%%%%%%%%%%%% +% +elseif strcmp(ELECTRODES,'labelpoint') + if isempty(EMARKER2CHANS) + hp2 = plot3(y,x,ones(size(x))*ELECTRODE_HEIGHT,... + EMARKER,'Color',ECOLOR,'markersize',EMARKERSIZE,'linewidth',EMARKERLINEWIDTH); + else + hp2 = plot3(y(mark1chans),x(mark1chans),ones(size((mark1chans)))*ELECTRODE_HEIGHT,... + EMARKER,'Color',ECOLOR,'markersize',EMARKERSIZE,'linewidth',EMARKERLINEWIDTH); + hp2b = plot3(y(mark2chans),x(mark2chans),ones(size((mark2chans)))*ELECTRODE_HEIGHT,... + EMARKER2,'Color',EMARKER2COLOR,'markerfacecolor',EMARKER2COLOR,'linewidth',EMARKER2LINEWIDTH,'markersize',EMARKERSIZE2); + end + for i = 1:size(labels,1) + hh(i) = text(double(y(i)+0.01),double(x(i)),... + ELECTRODE_HEIGHT,labels(i,:),'HorizontalAlignment','left',... + 'VerticalAlignment','middle','Color', ECOLOR,'userdata', num2str(allchansind(i)), ... + 'FontSize',EFSIZE, 'buttondownfcn', ... + ['tmpstr = get(gco, ''userdata'');'... + 'set(gco, ''userdata'', get(gco, ''string''));' ... + 'set(gco, ''string'', tmpstr); clear tmpstr;'] ); + end +% +%%%%%%%%%%%%%%%%%%%%%%% Mark electrode locations plus numbers %%%%%%%%%%%%%%%%%%% +% +elseif strcmp(ELECTRODES,'numpoint') + if isempty(EMARKER2CHANS) + hp2 = plot3(y,x,ones(size(x))*ELECTRODE_HEIGHT,... + EMARKER,'Color',ECOLOR,'markersize',EMARKERSIZE,'linewidth',EMARKERLINEWIDTH); + else + hp2 = plot3(y(mark1chans),x(mark1chans),ones(size((mark1chans)))*ELECTRODE_HEIGHT,... + EMARKER,'Color',ECOLOR,'markersize',EMARKERSIZE,'linewidth',EMARKERLINEWIDTH); + hp2b = plot3(y(mark2chans),x(mark2chans),ones(size((mark2chans)))*ELECTRODE_HEIGHT,... + EMARKER2,'Color',EMARKER2COLOR,'markerfacecolor',EMARKER2COLOR,'linewidth',EMARKER2LINEWIDTH,'markersize',EMARKERSIZE2); + end + for i = 1:size(labels,1) + hh(i) = text(double(y(i)+0.01),double(x(i)),... + ELECTRODE_HEIGHT,num2str(allchansind(i)),'HorizontalAlignment','left',... + 'VerticalAlignment','middle','Color', ECOLOR,'userdata', labels(i,:) , ... + 'FontSize',EFSIZE, 'buttondownfcn', ... + ['tmpstr = get(gco, ''userdata'');'... + 'set(gco, ''userdata'', get(gco, ''string''));' ... + 'set(gco, ''string'', tmpstr); clear tmpstr;'] ); + end +% +%%%%%%%%%%%%%%%%%%%%%% Print electrode numbers only %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +elseif strcmp(ELECTRODES,'numbers') + for i = 1:size(labels,1) + text(double(y(i)),double(x(i)),... + ELECTRODE_HEIGHT,int2str(allchansind(i)),'HorizontalAlignment','center',... + 'VerticalAlignment','middle','Color',ECOLOR,... + 'FontSize',EFSIZE) + end +% +%%%%%%%%%%%%%%%%%%%%%% Mark emarker2 electrodes only %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +elseif strcmp(ELECTRODES,'off') & ~isempty(EMARKER2CHANS) + hp2b = plot3(y(mark2chans),x(mark2chans),ones(size((mark2chans)))*ELECTRODE_HEIGHT,... + EMARKER2,'Color',EMARKER2COLOR,'markerfacecolor',EMARKER2COLOR,'linewidth',EMARKER2LINEWIDTH,'markersize',EMARKERSIZE2); +end +% +%%%%%%%% Mark specified electrode locations with red filled disks %%%%%%%%%%%%%%%%%%%%%% +% +try, + if strcmpi(STYLE,'blank') % if mark-selected-channel-locations mode + for kk = 1:length(1:length(x)) + if Values(kk) == 3 + hp2 = plot3(y(kk),x(kk),ELECTRODE_HEIGHT,EMARKER,'Color', [0 0 1], 'markersize', EMARKERSIZE1CHAN); + elseif Values(kk) == 2 + hp2 = plot3(y(kk),x(kk),ELECTRODE_HEIGHT,EMARKER,'Color', [0 1 0], 'markersize', EMARKERSIZE1CHAN); + elseif Values(kk) == 1 + hp2 = plot3(y(kk),x(kk),ELECTRODE_HEIGHT,EMARKER,'Color', [1 0 0], 'markersize', EMARKERSIZE1CHAN); + elseif strcmpi(ELECTRODES,'on') + hp2 = plot3(y(kk),x(kk),ELECTRODE_HEIGHT,EMARKER,'Color', ECOLOR, 'markersize', EMARKERSIZE); + end + end + end +catch, end; +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot dipole(s) on the scalp map %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +if ~isempty(DIPOLE) + hold on; + tmp = DIPOLE; + if isstruct(DIPOLE) + if ~isfield(tmp,'posxyz') + error('dipole structure is not an EEG.dipfit.model') + end + DIPOLE = []; % Note: invert x and y from dipplot usage + DIPOLE(:,1) = -tmp.posxyz(:,2)/DIPSPHERE; % -y -> x + DIPOLE(:,2) = tmp.posxyz(:,1)/DIPSPHERE; % x -> y + DIPOLE(:,3) = -tmp.momxyz(:,2); + DIPOLE(:,4) = tmp.momxyz(:,1); + else + DIPOLE(:,1) = -tmp(:,2); % same for vector input + DIPOLE(:,2) = tmp(:,1); + DIPOLE(:,3) = -tmp(:,4); + DIPOLE(:,4) = tmp(:,3); + end; + for index = 1:size(DIPOLE,1) + if ~any(DIPOLE(index,:)) + DIPOLE(index,:) = []; + end + end; + DIPOLE(:,1:4) = DIPOLE(:,1:4)*rmax*(rmax/plotrad); % scale radius from 1 -> rmax (0.5) + DIPOLE(:,3:end) = (DIPOLE(:,3:end))*rmax/100000*(rmax/plotrad); + if strcmpi(DIPNORM, 'on') + for index = 1:size(DIPOLE,1) + DIPOLE(index,3:4) = DIPOLE(index,3:4)/norm(DIPOLE(index,3:end))*0.2; + end; + end; + DIPOLE(:, 3:4) = DIPORIENT*DIPOLE(:, 3:4)*DIPLEN; + + PLOT_DIPOLE=1; + if sum(DIPOLE(1,3:4).^2) <= 0.00001 + if strcmpi(VERBOSE,'on') + fprintf('Note: dipole is length 0 - not plotted\n') + end + PLOT_DIPOLE = 0; + end + if 0 % sum(DIPOLE(1,1:2).^2) > plotrad + if strcmpi(VERBOSE,'on') + fprintf('Note: dipole is outside plotting area - not plotted\n') + end + PLOT_DIPOLE = 0; + end + if PLOT_DIPOLE + for index = 1:size(DIPOLE,1) + hh = plot( DIPOLE(index, 1), DIPOLE(index, 2), '.'); + set(hh, 'color', DIPCOLOR, 'markersize', DIPSCALE*30); + hh = line( [DIPOLE(index, 1) DIPOLE(index, 1)+DIPOLE(index, 3)]', ... + [DIPOLE(index, 2) DIPOLE(index, 2)+DIPOLE(index, 4)]',[10 10]); + set(hh, 'color', DIPCOLOR, 'linewidth', DIPSCALE*30/7); + end; + end; +end; + +end % if ~ 'gridplot' + +% +%%%%%%%%%%%%% Plot axis orientation %%%%%%%%%%%%%%%%%%%% +% +if strcmpi(DRAWAXIS, 'on') + axes('position', [0 0.85 0.08 0.1]); + axis off; + coordend1 = sqrt(-1)*3; + coordend2 = -3; + coordend1 = coordend1*exp(sqrt(-1)*rotate); + coordend2 = coordend2*exp(sqrt(-1)*rotate); + + line([5 5+round(real(coordend1))]', [5 5+round(imag(coordend1))]', 'color', 'k'); + line([5 5+round(real(coordend2))]', [5 5+round(imag(coordend2))]', 'color', 'k'); + if round(real(coordend2))<0 + text( 5+round(real(coordend2))*1.2, 5+round(imag(coordend2))*1.2-2, '+Y'); + else text( 5+round(real(coordend2))*1.2, 5+round(imag(coordend2))*1.2, '+Y'); + end; + if round(real(coordend1))<0 + text( 5+round(real(coordend1))*1.2, 5+round(imag(coordend1))*1.2+1.5, '+X'); + else text( 5+round(real(coordend1))*1.2, 5+round(imag(coordend1))*1.2, '+X'); + end; + set(gca, 'xlim', [0 10], 'ylim', [0 10]); +end; + +% +%%%%%%%%%%%%% Set EEGLAB background color to match head border %%%%%%%%%%%%%%%%%%%%%%%% +% +try, + icadefs; + set(gcf, 'color', BACKCOLOR); + catch, +end; + +hold off +axis off +return diff --git a/HW-3/HW_3_sp26_Plasticity_ECE374N-385J_Neural_Eng.pdf b/HW-3/HW_3_sp26_Plasticity_ECE374N-385J_Neural_Eng.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4afa2fc3fedc1b29e966b7e82ac1f13d63bdb89b GIT binary patch literal 796255 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