% POP_PRECLUST - prepare STUDY components' location and activity measures for later clustering.
% Collect information in an interactive pop-up query window. To pre-cluster
% from the commandline, use STD_PRECLUST. After data entry into the pop window,
% selected measures (one or more from options: ERP, dipole locations, spectra,
% scalp maps, ERSP, and ITC) are computed for each dataset in the STUDY
% set, unless they already present. After all requested measures are computed
% and saved in the STUDY datasets, a PCA matrix (by RUNICA with 'pca' option)
% is constructed (this is the feature reduction step). This matrix will be used
% as input to the clustering algorithm in POP_CLUST. POP_PRECLUST allows
% selection of a subset of components to cluster. This subset may either be
% user-specified, all components with dipole model residual variance lower than
% a defined threshold (see DIPFIT), or components from an already existing cluster
% (for hierarchical clustering). The EEG datasets in the ALLEEG structure are
% updated; then the updated EEG sets are saved to disk. Calls STD_PRECLUST.
% Usage:
% >> [STUDY, ALLEEG] = pop_preclust(STUDY, ALLEEG); % pop up interactive window
% >> [STUDY, ALLEEG] = pop_preclust(STUDY, ALLEEG, clustind); % sub-cluster
%
% Inputs:
% STUDY - STUDY set structure containing (loaded) EEG dataset structures
% ALLEEG - ALLEEG vector of EEG structures, else a single EEG dataset.
% clustind - (single) cluster index to sub-cluster, Hhierarchical clustering may be
% useful, for example, to separate a bilteral cluster into left and right
% hemisphere sub-clusters. Should be empty for whole STUDY (top level) clustering
% {default: []}
% Outputs:
% STUDY - the input STUDY set with added pre-clustering data for use by POP_CLUST
% ALLEEG - the input ALLEEG vector of EEG dataset structures modified by adding
% pre-clustering data (pointers to .mat files that hold cluster measure information).
%
% Authors: Arnaud Delorme, Hilit Serby & Scott Makeig, SCCN, INC, UCSD, May 13, 2004-
%
% See also: STD_PRECLUST
% Copyright (C) Hilit Serby, SCCN, INC, UCSD, May 13,2004, hilit@sccn.ucsd.edu
%
% This file is part of EEGLAB, see http://www.eeglab.org
% for the documentation and details.
%
% Redistribution and use in source and binary forms, with or without
% modification, are permitted provided that the following conditions are met:
%
% 1. Redistributions of source code must retain the above copyright notice,
% this list of conditions and the following disclaimer.
%
% 2. Redistributions in binary form must reproduce the above copyright notice,
% this list of conditions and the following disclaimer in the documentation
% and/or other materials provided with the distribution.
%
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
% THE POSSIBILITY OF SUCH DAMAGE.
function [STUDY, ALLEEG, com] = pop_preclust(varargin)
com = '';
if ~ischar(varargin{1}) %initial settings
if length(varargin) < 2
error('pop_preclust(): needs both ALLEEG and STUDY structures');
end
STUDY = varargin{1};
ALLEEG = varargin{2};
if length(varargin) >= 3
if length(varargin{3}) > 1
error('pop_preclust(): To cluster components from several clusters, merge them first!');
end
cluster_ind = varargin{3};
else
cluster_ind = [];
end
scalp_options = {'Use channel values' 'Use Laplacian values' 'Use Gradient values'} ;
if isempty(ALLEEG)
error('STUDY contains no datasets');
end
if any(isnan(STUDY.cluster(1).sets(:)))
warndlg2( [ 'FOR CLUSTERING, YOU MAY ONLY USE DIPOLE OR SCALP MAP CLUSTERING.' 10 ...
'This is because some datasets do not have ICA pairs. Look for NaN values in ' 10 ...
'STUDY.cluster(1).sets which indicate missing datasets. Each column in this ' 10 ...
'array indicate datasets with common ICA decompositions' ]);
end
if length(STUDY.design(STUDY.currentdesign).cases.value) ~= length(STUDY.subject)
warndlg2( [ 'GO BACK TO THE DESIGN INTERFACE AND SELECT A DESIGN THAT ' 10 ...
'INCLUDES ALL DATASETS. Some subjects or datasets have been excluded' 10 ...
'in the current design. ICA clusters are common to all designs, so all' 10 ...
'all datasets must be included for clustering. After clustering, you' 10 ...
'will then be able to select a different design (and keep the clustered' 10 ...
'components) if you wish to exclude a subject or group of dataset.' ]);
return;
end
% cluster text
% ------------
% load leaf clusters
num_cls = 0;
cls = 1:length(STUDY.cluster);
N = length(cls); %number of clusters
show_options{1} = [STUDY.cluster(1).name ' (' num2str(length(STUDY.cluster(1).comps)) ' ICs)'];
cls(1) = 1;
count = 2;
for index1 = 1:length(STUDY.cluster(1).child)
indclust1 = strmatch( STUDY.cluster(1).child(index1), { STUDY.cluster.name }, 'exact');
show_options{count} = [' ' STUDY.cluster(indclust1).name ' (' num2str(length(STUDY.cluster(indclust1).comps)) ' ICs)'];
cls(count) = indclust1;
count = count+1;
for index2 = 1:length( STUDY.cluster(indclust1).child )
indclust2 = strmatch( STUDY.cluster(indclust1).child(index2), { STUDY.cluster.name }, 'exact');
show_options{count} = [' ' STUDY.cluster(indclust2).name ' (' num2str(length(STUDY.cluster(indclust2).comps)) ' ICs)'];
cls(count) = indclust2;
count = count+1;
for index3 = 1:length( STUDY.cluster(indclust2).child )
indclust3 = strmatch( STUDY.cluster(indclust2).child(index3), { STUDY.cluster.name }, 'exact');
show_options{count} = [' ' STUDY.cluster(indclust3).name ' (' num2str(length(STUDY.cluster(indclust3).comps)) ' ICs)'];
cls(count) = indclust3;
count = count+1;
end
end
end
% callbacks
% ---------
erspparams_str = [ '''cycles'', [3 0.5], ''padratio'', 1' ];
specparams_str = '';
show_clust = [ 'pop_preclust(''showclust'',gcf);'];
show_comps = [ 'pop_preclust(''showcomplist'',gcf);'];
help_spectopo = ['pophelp(''spectopo'')'];
set_spectra = ['pop_preclust(''setspec'',gcf);'];
set_erp = ['pop_preclust(''seterp'',gcf);'];
set_scalp = ['pop_preclust(''setscalp'',gcf);'];
set_dipole = ['pop_preclust(''setdipole'',gcf);'];
set_moment = ['pop_preclust(''setmoment'',gcf);'];
set_ersp = ['pop_preclust(''setersp'',gcf);'];
set_itc = ['pop_preclust(''setitc'',gcf);'];
set_secpca = ['pop_preclust(''setsec'',gcf);'];
set_mpcluster = ['tmp_preclust(''mpcluster'',gcf);']; % nima
help_clusteron = ['pophelp(''std_helpselecton'');'];
help_ersp = ['pophelp(''pop_timef'')'];
preclust_PCA = ['pop_preclust(''preclustOK'',gcf);'];
ersp_params = ['pop_preclust(''erspparams'',gcf);'];
ersp_edit = ['pop_preclust(''erspedit'',gcf);'];
test_ersp = ['pop_precomp(''testersp'',gcf);'];
itc_edit = 'set(findobj(gcbf, ''tag'', ''ersp_params''), ''string'', get(gcbo, ''string''));';
ersp_edit = 'set(findobj(gcbf, ''tag'', ''itc_params'' ), ''string'', get(gcbo, ''string''));';
saveSTUDY = [ 'set(findobj(''parent'', gcbf, ''userdata'', ''save''), ''enable'', fastif(get(gcbo, ''value'')==1, ''on'', ''off''));' ];
browsesave = [ '[filename, filepath] = uiputfile2(''*.study'', ''Save STUDY with .study extension -- pop_preclust()''); ' ...
'set(findobj(''parent'', gcbf, ''tag'', ''studyfile''), ''string'', [filepath filename]);' ];
str_name = ['Build pre-clustering matrix for STUDY set: ' STUDY.name '' ];
str_time = '';
str_lpfilt = '20';
help_secpca = [ 'warndlg2(strvcat(''This is the final number of dimensions (otherwise use the sum'',' ...
'''of dimensions for all the selected options). See tutorial for more info''), ''Final number of dimensions'');' ];
cb_help = [ 'warndlg2( strvcat(''When clustering on both time- and location-based measures, take care'',' ...
'''when performing statistical tests on cluster measures to avoid so-called'',' ...
'''''''double dipping'''' problems in interpreting the results: Adequate nonparametric'',' ...
'''statistical testing should be performed to test their robustness.''));' ];
gui_spec = { ...
{'style' 'text' 'string' str_name 'FontWeight' 'Bold' 'horizontalalignment' 'left'} ...
{'style' 'text' 'string' 'Only measures that have been precomputed may be used for clustering'} ...
{'style' 'text' 'string' 'Mixing time-based and location-based measures might result in statistical double-dipping'} ...
{'style' 'pushbutton' 'string' 'Help' 'callback' cb_help } ...
{'style' 'text' 'string' 'Time-based info PCA Weight' 'FontWeight' 'Bold'} ...
{'style' 'checkbox' 'string' '' 'tag' 'spectra_on' 'value' 0 'Callback' set_spectra 'userdata' '1'} ...
{'style' 'text' 'string' 'spectra' 'horizontalalignment' 'center' } ...
{'style' 'edit' 'string' '3' 'tag' 'spectra_PCA' 'enable' 'off' 'userdata' 'specP'} { } ...
{'style' 'edit' 'string' '1' 'tag' 'spectra_weight' 'enable' 'off' 'userdata' 'specP'} ...
{'style' 'text' 'string' 'Freq.range [Hz]' 'tag' 'spectra_freq_txt' 'userdata' 'spec' 'enable' 'off' } ...
{'style' 'edit' 'string' '3 25' 'tag' 'spectra_freq_edit' 'userdata' 'spec' 'enable' 'off' } { } { } ...
...
{'style' 'checkbox' 'string' '' 'tag' 'erp_on' 'value' 0 'Callback' set_erp 'userdata' '1'} ...
{'style' 'text' 'string' 'ERPs' 'horizontalalignment' 'center' } ...
{'style' 'edit' 'string' '3' 'tag' 'erp_PCA' 'enable' 'off' 'userdata' 'erpP'} { } ...
{'style' 'edit' 'string' '1' 'tag' 'erp_weight' 'enable' 'off' 'userdata' 'erpP'} ...
{'style' 'text' 'string' 'Time range [ms]' 'tag' 'erp_time_txt' 'userdata' 'erp' 'enable' 'off' } ...
{'style' 'edit' 'string' str_time 'tag' 'erp_time_edit' 'userdata' 'erp' 'enable' 'off' }...
{'style' 'text' 'string' 'Lowpass [Hz]' 'tag' 'erp_filter_txt' 'userdata' 'erp' 'enable' 'off' } ...
{'style' 'edit' 'string' str_lpfilt 'tag' 'erp_filter_edit' 'userdata' 'erp' 'enable' 'off' }...
...
{'style' 'checkbox' 'string' '' 'tag' 'ersp_on' 'value' 0 'Callback' set_ersp 'userdata' '1'} ...
{'style' 'text' 'string' 'ERSPs' 'horizontalalignment' 'center' } ...
{'style' 'edit' 'string' '3' 'tag' 'ersp_PCA' 'enable' 'off' 'userdata' 'erspP'} { } ...
{'style' 'edit' 'string' '1' 'tag' 'ersp_weight' 'enable' 'off' 'userdata' 'erspP'} ...
{'style' 'text' 'string' 'Time range [ms]' 'tag' 'ersp_time_txt' 'userdata' 'ersp' 'enable' 'off' } ...
{'style' 'edit' 'string' str_time 'tag' 'ersp_time_edit' 'userdata' 'ersp' 'enable' 'off' } ...
{'style' 'text' 'string' 'Freq. range [Hz]' 'tag' 'ersp_time_txt' 'userdata' 'ersp' 'enable' 'off' } ...
{'style' 'edit' 'string' str_time 'tag' 'ersp_freq_edit' 'userdata' 'ersp' 'enable' 'off' } ...
...
{'style' 'checkbox' 'string' '' 'tag' 'itc_on' 'value' 0 'Callback' set_itc 'userdata' '1'} ...
{'style' 'text' 'string' 'ITCs' 'horizontalalignment' 'center' } ...
{'style' 'edit' 'string' '3' 'tag' 'itc_PCA' 'enable' 'off' 'userdata' 'itcP'} { } ...
{'style' 'edit' 'string' '1' 'tag' 'itc_weight' 'enable' 'off' 'userdata' 'itcP'} ...
{'style' 'text' 'string' 'Time range [ms]' 'tag' 'itc_time_txt' 'userdata' 'itcP' 'enable' 'off' } ...
{'style' 'edit' 'string' str_time 'tag' 'itc_time_edit' 'userdata' 'itcP' 'enable' 'off' } ...
{'style' 'text' 'string' 'Freq. range [Hz]' 'tag' 'itc_time_txt' 'userdata' 'itcP' 'enable' 'off' } ...
{'style' 'edit' 'string' str_time 'tag' 'itc_freq_edit' 'userdata' 'itcP' 'enable' 'off' } ...
...
{'style' 'text' 'string' 'Location-based info PCA Weight' 'FontWeight' 'Bold'} ...
{'style' 'checkbox' 'string' '' 'tag' 'dipole_on' 'value' 0 'Callback' set_dipole 'userdata' '1'} ...
{'style' 'text' 'string' 'dipole locations' 'HorizontalAlignment' 'center' } ...
{'style' 'text' 'string' '3' 'enable' 'off' 'userdata' 'dipoleP' } { } ...
{'style' 'edit' 'string' '1' 'tag' 'locations_weight' 'enable' 'off' 'userdata' 'dipoleP'} {} {} {} {} ...
...
{'style' 'checkbox' 'string' '' 'tag' 'moment_on' 'value' 0 'Callback' set_moment 'userdata' '1'} ...
{'style' 'text' 'string' 'dipole orient.' 'HorizontalAlignment' 'center' } ...
{'style' 'text' 'string' '3' 'enable' 'off' 'userdata' 'dipoleM' } { } ...
{'style' 'edit' 'string' '1' 'tag' 'moment_weight' 'enable' 'off' 'userdata' 'dipoleM'} ...
{'style' 'text' 'string' 'Amplitude & polarity is ignored'} {} {} {} ...
...
{'style' 'checkbox' 'string' '' 'tag' 'scalp_on' 'value' 0 'Callback' set_scalp 'userdata' '1'} ...
{'style' 'text' 'string' 'scalp maps' 'HorizontalAlignment' 'center' } ...
{'style' 'edit' 'string' '3' 'tag' 'scalp_PCA' 'enable' 'off' 'userdata' 'scalpP'} { } ...
{'style' 'edit' 'string' '1' 'tag' 'scalp_weight' 'enable' 'off' 'userdata' 'scalpP'} ...
{'style' 'popupmenu' 'string' scalp_options 'value' 1 'tag' 'scalp_choice' 'enable' 'off' 'userdata' 'scalp' } {} ...
{'style' 'checkbox' 'string' 'Absolute values' 'value' 1 'tag' 'scalp_absolute' 'enable' 'off' 'userdata' 'scalp' } {} ...
...
{} };
% {'link2lines' 'style' 'text' 'string' '' } {} {} {} ...
% {'style' 'text' 'string' 'Time/freq. parameters' 'tag' 'ersp_push' 'value' 1 'enable' 'off' 'userdata' 'ersp' 'Callback' ersp_params} ...
% {'style' 'edit' 'string' erspparams_str 'tag' 'ersp_params' 'enable' 'off' 'userdata' 'ersp' 'Callback' ersp_edit}...
% {'style' 'text' 'string' 'Time/freq. parameters' 'tag' 'itc_push' 'value' 1 'enable' 'off' 'userdata' 'itc' 'Callback' ersp_params} ...
% {'style' 'edit' 'string' erspparams_str 'tag' 'itc_params' 'enable' 'off' 'userdata' 'itc' 'Callback' itc_edit}% {'style' 'checkbox' 'string' '' 'tag' 'preclust_PCA' 'Callback' preclust_PCA 'value' 0} ...
% {'style' 'text' 'string' 'Do not prepare dataset for clustering at this time.' 'FontWeight' 'Bold' } {} ...
fig_arg{1} = { ALLEEG STUDY cls };
geomline = [0.5 2 1 0.5 1 2 1 2 1 ];
geometry = { [1] [1] [1 0.2] ...
[3] geomline geomline geomline geomline [1] geomline [0.5 2 1 0.5 1 5.4 0.2 0.2 0.2 ] [0.5 2 1 0.5 1 2.9 .1 2.9 .1 ] [1] };
geomvert = [ 1 1 1 1 1 1 1 1 1 1 1 1 0.5 ];
%if length(show_options) < 3
% gui_spec(2:6) = { {} ...
% { 'style' 'text' 'string' [ 'Among the pre-selected components (Edit study),' ...
% 'remove those which dipole res. var, exceed' ] 'tag' 'dipole_select_on' } ...
% {'style' 'edit' 'string' '0.15' 'horizontalalignment' 'center' 'tag' 'dipole_rv'} ...
% {'style' 'text' 'string' '(empty=all)'} {} };
% geometry{3} = [2.5 0.25 0.4];
% geomvert(3) = 1;
%end
disp('Even though the graphics have changed, this function remains 100% backward compatible.');
[preclust_param, userdat2, strhalt, os] = inputgui( 'geometry', geometry, 'uilist', gui_spec, 'geomvert', geomvert, ...
'helpcom', 'pophelp(''std_preclust'')', ...
'title', 'Select and compute component measures for later clustering -- pop_preclust()', ...
'userdata', fig_arg);
if isempty(preclust_param), return; end
options = { STUDY, ALLEEG, 1};
% Spectrum option is on
% --------------------
if os.spectra_on== 1
options{end+1} = { 'spec' 'npca' str2num(os.spectra_PCA) ...
'weight' str2num(os.spectra_weight) 'freqrange' str2num(os.spectra_freq_edit) };
end
% ERP option is on
% ----------------
if os.erp_on == 1
options{end+1} = { 'erp' 'npca' str2num(os.erp_PCA) ...
'weight' str2num(os.erp_weight) 'timewindow' str2num(os.erp_time_edit), 'erpfilter', os.erp_filter_edit };
end
% Scalp maps option is on
% ----------------------
if os.scalp_on == 1
if os.scalp_absolute %absolute maps
abso = 1;
else abso = 0;
end
if (os.scalp_choice == 2) %Laplacian scalp maps
options{end+1} = { 'scalpLaplac' 'npca' str2num(os.scalp_PCA) ...
'weight' str2num(os.scalp_weight) 'abso' abso };
elseif (os.scalp_choice == 3) %Gradient scalp maps
options{end+1} = { 'scalpGrad' 'npca' str2num(os.scalp_PCA) ...
'weight' str2num(os.scalp_weight) 'abso' abso };
elseif (os.scalp_choice == 1) %scalp map case
options{end+1} = { 'scalp' 'npca' str2num(os.scalp_PCA) ...
'weight' str2num(os.scalp_weight) 'abso' abso };
end
end
% Dipole option is on
% -------------------
if os.dipole_on == 1
options{end+1} = { 'dipoles' 'weight' str2num(os.locations_weight) };
end
if os.moment_on == 1
options{end+1} = { 'moments' 'weight' str2num(os.moment_weight) };
end
% ERSP option is on
% -----------------
if os.ersp_on == 1
options{end+1} = { 'ersp' 'npca' str2num(os.ersp_PCA) 'freqrange' str2num(os.ersp_freq_edit) ...
'timewindow' str2num(os.ersp_time_edit) 'weight' str2num(os.ersp_weight) };
end
% ITC option is on
% ----------------
if os.itc_on == 1
options{end+1} = { 'itc' 'npca' str2num(os.itc_PCA) 'freqrange' str2num(os.itc_freq_edit) 'timewindow' ...
str2num(os.itc_time_edit) 'weight' str2num(os.itc_weight) };
end
% evaluate command
% ----------------
if length(options) == 3
warndlg2('No measure selected: aborting.');
return;
end
[STUDY ALLEEG] = std_preclust(options{:});
com = sprintf('[STUDY ALLEEG] = std_preclust(STUDY, ALLEEG, %s);', vararg2str(options(3:end)));
% save updated STUDY to the disk
% ------------------------------
% if os.saveSTUDY == 1
% if ~isempty(os.studyfile)
% [filepath filename ext] = fileparts(os.studyfile);
% STUDY.filename = [ filename ext ];
% STUDY.filepath = filepath;
% end
% STUDY = pop_savestudy(STUDY, ALLEEG, 'filename', STUDY.filename, 'filepath', STUDY.filepath);
% com = sprintf('%s\nSTUDY = pop_savestudy(STUDY, ALLEEG, %s);', com, ...
% vararg2str( { 'filename', STUDY.filename, 'filepath', STUDY.filepath }));
% end
else
hdl = varargin{2}; %figure handle
userdat = get(varargin{2}, 'userdat');
ALLEEG = userdat{1}{1};
STUDY = userdat{1}{2};
cls = userdat{1}{3};
N = length(cls);
switch varargin{1}
case 'setspec'
set_spec = get(findobj('parent', hdl, 'tag', 'spectra_on'), 'value');
set(findobj('parent', hdl, 'userdata', 'spec'), 'enable', fastif(set_spec,'on','off'));
PCA_on = get(findobj('parent', hdl, 'tag', 'preclust_PCA'), 'value');
if PCA_on
set(findobj('parent', hdl, 'userdata', 'specP'), 'enable', 'off');
else
set(findobj('parent', hdl, 'userdata', 'specP'), 'enable', fastif(set_spec,'on','off'));
end
case 'mpcluster' % nima
mpclust = get(findobj('parent', hdl, 'tag', 'mpclust'), 'value');
if mpclust
set(findobj('parent', hdl, 'tag', 'spectra_PCA'), 'visible','off');
set(findobj('parent', hdl, 'tag', 'spectra_weight'), 'visible','off');
set(findobj('parent', hdl, 'tag', 'erp_PCA' ), 'visible','off');
set(findobj('parent', hdl, 'tag','erp_weight' ), 'visible','off');
set(findobj('parent', hdl, 'tag','locations_weight'), 'visible','off');
set(findobj('parent', hdl, 'tag', 'scalp_PCA'), 'visible','off');
set(findobj('parent', hdl, 'tag','scalp_weight'), 'visible','off');
set(findobj('parent', hdl, 'tag','ersp_PCA'), 'visible','off');
set(findobj('parent', hdl, 'tag','ersp_weight' ), 'visible','off');
set(findobj('parent', hdl, 'tag', 'itc_PCA'), 'visible','off');
set(findobj('parent', hdl, 'tag','itc_weight'), 'visible','off');
set(findobj('parent', hdl, 'tag','sec_PCA'), 'visible','off');
set(findobj('parent', hdl, 'tag','sec_on'), 'visible','off');
set(findobj('parent', hdl, 'userdata' ,'dipoleP'), 'visible','off');
set(findobj('parent', hdl, 'userdata' ,'dipoleM'), 'visible','off');
set(findobj('parent', hdl, 'string','Final dimensions'), 'visible','off');
set(findobj('parent', hdl, 'tag','finalDimHelp' ), 'visible','off');
set(findobj('parent', hdl, 'tag','spectra_freq_txt'), 'visible','off');
set(findobj('parent', hdl, 'tag','spectra_freq_edit'), 'visible','off');
%% these are made invisible for now, but in future we might use them in the new method
set(findobj('parent', hdl, 'tag','erp_time_txt'), 'visible','off');
set(findobj('parent', hdl, 'tag','erp_time_edit'), 'visible','off');
set(findobj('parent', hdl, 'tag','scalp_choice'), 'visible','off');
set(findobj('parent', hdl, 'tag','scalp_absolute'), 'visible','off');
set(findobj('parent', hdl, 'tag','ersp_time_txt'), 'visible','off');
set(findobj('parent', hdl, 'tag','ersp_time_edit'), 'visible','off');
set(findobj('parent', hdl, 'tag','ersp_freq_edit'), 'visible','off');
set(findobj('parent', hdl, 'tag','itc_time_txt'), 'visible','off');
set(findobj('parent', hdl, 'tag','itc_time_edit'), 'visible','off');
set(findobj('parent', hdl, 'tag','itc_freq_edit'), 'visible','off');
set(findobj('parent', hdl, 'string','Measures Dims. Rel. Wt.'), 'string','Measures');
else
set(findobj('parent', hdl, 'tag', 'spectra_PCA'), 'visible','on');
set(findobj('parent', hdl, 'tag', 'spectra_weight'), 'visible','on');
set(findobj('parent', hdl, 'tag', 'erp_PCA' ), 'visible','on');
set(findobj('parent', hdl, 'tag','erp_weight' ), 'visible','on');
set(findobj('parent', hdl, 'tag','locations_weight'), 'visible','on');
set(findobj('parent', hdl, 'tag', 'scalp_PCA'), 'visible','on');
set(findobj('parent', hdl, 'tag','scalp_weight'), 'visible','on');
set(findobj('parent', hdl, 'tag','ersp_PCA'), 'visible','on');
set(findobj('parent', hdl, 'tag','ersp_weight' ), 'visible','on');
set(findobj('parent', hdl, 'tag', 'itc_PCA'), 'visible','on');
set(findobj('parent', hdl, 'tag','itc_weight'), 'visible','on');
set(findobj('parent', hdl, 'tag','sec_PCA'), 'visible','on');
set(findobj('parent', hdl, 'tag','sec_on'), 'visible','on');
set(findobj('parent', hdl, 'userdata' ,'dipoleP'), 'visible','on');
set(findobj('parent', hdl, 'userdata' ,'dipoleM'), 'visible','on');
set(findobj('parent', hdl, 'string','Final dimensions'), 'visible','on');
set(findobj('parent', hdl, 'tag','finalDimHelp' ), 'visible','on');
set(findobj('parent', hdl, 'tag','spectra_freq_txt'), 'visible','on');
set(findobj('parent', hdl, 'tag','spectra_freq_edit'), 'visible','on');
%% these are made invisible for now, but in future we might use them in the new method
set(findobj('parent', hdl, 'tag','erp_time_txt'), 'visible','on');
set(findobj('parent', hdl, 'tag','erp_time_edit'), 'visible','on');
set(findobj('parent', hdl, 'tag','scalp_choice'), 'visible','on');
set(findobj('parent', hdl, 'tag','scalp_absolute'), 'visible','on');
set(findobj('parent', hdl, 'tag','ersp_time_txt'), 'visible','on');
set(findobj('parent', hdl, 'tag','ersp_time_edit'), 'visible','on');
set(findobj('parent', hdl, 'tag','ersp_freq_edit'), 'visible','on');
set(findobj('parent', hdl, 'tag','itc_time_txt'), 'visible','on');
set(findobj('parent', hdl, 'tag','itc_time_edit'), 'visible','on');
set(findobj('parent', hdl, 'tag','itc_freq_edit'), 'visible','on');
set(findobj('parent', hdl, 'string','Measures to Cluster on:'), 'string','Load Dims. Rel. Wt.');
set(findobj('parent', hdl, 'string','Measures'), 'string', 'Measures Dims. Rel. Wt.');
end
% set_mpcluster = get(findobj('parent', hdl, 'tag', 'spectra_on'), 'value');
% set(findobj('parent', hdl, 'userdata', 'spec'), 'enable', fastif(set_spec,'on','off'));
% PCA_on = get(findobj('parent', hdl, 'tag', 'preclust_PCA'), 'value');
% if PCA_on
% set(findobj('parent', hdl, 'userdata', 'specP'), 'enable', 'off');
% else
% set(findobj('parent', hdl, 'userdata', 'specP'), 'enable', fastif(set_spec,'on','off'));
% end
case 'seterp'
set_erp = get(findobj('parent', hdl, 'tag', 'erp_on'), 'value');
set(findobj('parent', hdl, 'userdata', 'erp'), 'enable', fastif(set_erp,'on','off'));
PCA_on = get(findobj('parent', hdl, 'tag', 'preclust_PCA'), 'value');
if PCA_on
set(findobj('parent', hdl, 'userdata', 'erpP'), 'enable', 'off');
else
set(findobj('parent', hdl, 'userdata', 'erpP'), 'enable', fastif(set_erp,'on','off'));
end
case 'setscalp'
set_scalp = get(findobj('parent', hdl, 'tag', 'scalp_on'), 'value');
set(findobj('parent', hdl, 'userdata', 'scalp'), 'enable', fastif(set_scalp,'on','off'));
PCA_on = get(findobj('parent', hdl, 'tag', 'preclust_PCA'), 'value');
if PCA_on
set(findobj('parent', hdl, 'userdata', 'scalpP'), 'enable', 'off');
else
set(findobj('parent', hdl, 'userdata', 'scalpP'), 'enable', fastif(set_scalp,'on','off'));
end
case 'setdipole'
set_dipole = get(findobj('parent', hdl, 'tag', 'dipole_on'), 'value');
set(findobj('parent', hdl, 'userdata', 'dipole'), 'enable', fastif(set_dipole,'on','off'));
PCA_on = get(findobj('parent', hdl, 'tag', 'preclust_PCA'), 'value');
if PCA_on
set(findobj('parent', hdl, 'userdata', 'dipoleP'), 'enable','off');
else
set(findobj('parent', hdl, 'userdata', 'dipoleP'), 'enable', fastif(set_dipole,'on','off'));
end
case 'setmoment'
moment_on = get(findobj('parent', hdl, 'tag', 'moment_on'), 'value');
set(findobj('parent', hdl, 'userdata', 'moment'), 'enable', fastif(moment_on,'on','off'));
PCA_on = get(findobj('parent', hdl, 'tag', 'preclust_PCA'), 'value');
if PCA_on
set(findobj('parent', hdl, 'userdata', 'dipoleM'), 'enable','off');
else
set(findobj('parent', hdl, 'userdata', 'dipoleM'), 'enable', fastif(moment_on,'on','off'));
end
case 'setersp'
set_ersp = get(findobj('parent', hdl, 'tag', 'ersp_on'), 'value');
set(findobj('parent', hdl,'userdata', 'ersp'), 'enable', fastif(set_ersp,'on','off'));
PCA_on = get(findobj('parent', hdl, 'tag', 'preclust_PCA'), 'value');
if PCA_on
set(findobj('parent', hdl,'userdata', 'erspP'), 'enable', 'off');
else
set(findobj('parent', hdl,'userdata', 'erspP'), 'enable', fastif(set_ersp,'on','off'));
end
set_itc = get(findobj('parent', hdl, 'tag', 'itc_on'), 'value');
set(findobj('parent', hdl,'tag', 'ersp_push'), 'enable', fastif(set_itc,'off','on'));
set(findobj('parent', hdl,'tag', 'ersp_params'), 'enable', fastif(set_itc,'off','on'));
if (set_itc && (~set_ersp) )
set(findobj('parent', hdl,'tag', 'itc_push'), 'enable', 'on');
set(findobj('parent', hdl,'tag', 'itc_params'), 'enable', 'on');
end
case 'setitc'
set_itc = get(findobj('parent', hdl, 'tag', 'itc_on'), 'value');
set(findobj('parent', hdl,'userdata', 'itc'), 'enable', fastif(set_itc,'on','off'));
PCA_on = get(findobj('parent', hdl, 'tag', 'preclust_PCA'), 'value');
if PCA_on
set(findobj('parent', hdl,'userdata', 'itcP'), 'enable','off');
else
set(findobj('parent', hdl,'userdata', 'itcP'), 'enable', fastif(set_itc,'on','off'));
end
set_ersp = get(findobj('parent', hdl, 'tag', 'ersp_on'), 'value');
set(findobj('parent', hdl,'tag', 'itc_push'), 'enable', fastif(set_ersp,'off','on'));
set(findobj('parent', hdl,'tag', 'itc_params'), 'enable', fastif(set_ersp,'off','on'));
if (set_ersp && (~set_itc) )
set(findobj('parent', hdl,'tag', 'ersp_push'), 'enable', 'on');
set(findobj('parent', hdl,'tag', 'ersp_params'), 'enable', 'on');
end
case 'setsec'
set_sec = get(findobj('parent', hdl, 'tag', 'sec_on'), 'value');
set(findobj('parent', hdl,'userdata', 'sec'), 'enable', fastif(set_sec,'on','off'));
case 'erspparams'
ersp = userdat{2};
[ersp_paramsout, erspuserdat, strhalt, erspstruct] = inputgui( { [1] [3 1] [3 1] [3 1] [3 1] [3 1] [1]}, ...
{ {'style' 'text' 'string' 'ERSP and ITC time/freq. parameters' 'FontWeight' 'Bold'} ...
{'style' 'text' 'string' 'Frequency range [Hz]' 'tag' 'ersp_freq' } ...
{'style' 'edit' 'string' ersp.f 'tag' 'ersp_f' 'Callback' ERSP_timewindow } ...
{'style' 'text' 'string' 'Wavelet cycles (see >> help timef())' 'tag' 'ersp_cycle' } ...
{'style' 'edit' 'string' ersp.c 'tag' 'ersp_c' 'Callback' ERSP_timewindow} ...
{'style' 'text' 'string' 'Significance level (< 0.1)' 'tag' 'ersp_alpha' } ...
{'style' 'edit' 'string' ersp.a 'tag' 'ersp_a'} ...
{'style' 'text' 'string' 'timef() padratio' 'tag' 'ersp_pad' } ...
{'style' 'edit' 'string' ersp.p 'tag' 'ersp_p' 'Callback' ERSP_timewindow} ...
{'style' 'text' 'string' 'Desired time window within the indicated latency range [ms]' 'tag' 'ersp_trtxt' } ...
{'style' 'edit' 'string' ersp.t 'tag' 'ersp_timewindow' 'Callback' ERSP_timewindow} {} }, ...
'pophelp(''pop_timef'')', 'Select clustering ERSP and ITC time/freq. parameters -- pop_preclust()');
if ~isempty(ersp_paramsout)
ersp.f = erspstruct(1).ersp_f;
ersp.c = erspstruct(1).ersp_c;
ersp.p = erspstruct(1).ersp_p;
ersp.a = erspstruct(1).ersp_a;
ersp.t = erspstruct(1).ersp_timewindow;
userdat{2} = ersp;
set(findobj('parent', hdl, 'tag', 'ersp_params'), 'string', ...
[' ''frange'', [' ersp.f '], ''cycles'', [' ...
ersp.c '], ''alpha'', ' ersp.a ', ''padratio'', ' ersp.p ', ''tlimits'', [' ersp.t ']']);
set(findobj('parent', hdl, 'tag', 'itc_params'), 'string', ...
[' ''frange'', [' ersp.f '], ''cycles'', [' ...
ersp.c '], ''alpha'', ' ersp.a ', ''padratio'', ' ersp.p ', ''tlimits'', [' ersp.t ']']);
set(hdl, 'userdat',userdat);
end
case 'preclustOK'
set_PCA = get(findobj('parent', hdl, 'tag', 'preclust_PCA'), 'value');
set_ersp = get(findobj('parent', hdl, 'tag', 'ersp_on'), 'value');
set(findobj('parent', hdl,'userdata', 'erspP'), 'enable', fastif(~set_PCA && set_ersp,'on','off'));
set_itc = get(findobj('parent', hdl, 'tag', 'itc_on'), 'value');
set(findobj('parent', hdl,'userdata', 'itcP'), 'enable', fastif(~set_PCA && set_itc,'on','off'));
set_erp = get(findobj('parent', hdl, 'tag', 'erp_on'), 'value');
set(findobj('parent', hdl,'userdata', 'erpP'), 'enable', fastif(~set_PCA && set_erp,'on','off'));
set_spec = get(findobj('parent', hdl, 'tag', 'spectra_on'), 'value');
set(findobj('parent', hdl,'userdata', 'specP'), 'enable', fastif(~set_PCA && set_spec,'on','off'));
set_scalp = get(findobj('parent', hdl, 'tag', 'scalp_on'), 'value');
set(findobj('parent', hdl,'userdata', 'scalpP'), 'enable', fastif(~set_PCA && set_scalp,'on','off'));
set_dipole = get(findobj('parent', hdl, 'tag', 'dipole_on'), 'value');
set(findobj('parent', hdl,'userdata', 'dipoleP'), 'enable', fastif(~set_PCA && set_dipole,'on','off'));
set(findobj('parent', hdl,'tag', 'chosen_component'), 'enable', fastif(~set_PCA,'on','off'));
set(findobj('parent', hdl,'tag', 'dipole_rv'), 'enable', fastif(~set_PCA,'on','off'));
set(findobj('parent', hdl,'tag', 'compstd_str'), 'enable', fastif(~set_PCA,'on','off'));
end
end
STUDY.saved = 'no';