-
Notifications
You must be signed in to change notification settings - Fork 6
/
cleanline_check.m
40 lines (36 loc) · 3.51 KB
/
cleanline_check.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function [EEG, Sorig, Sclean, f, amps, freqs, g] = cleanline_check(varargin)
% CLEANLINE_CHECK confirms CLEANLINE input parameters without actually
% running the function.
% Reason for a sseprate function is the incompatibility of two backend
% fucntions, one for handling the inptu arguments (ARG_GUIDIALOG) and the
% other for running fucntions EEG structure arrays (EEG_EVAL).
%
% Seyed Yahya Shirazi, 7/2024, SCCN, INC, UCSD
EEG = arg_extract(varargin,'EEG',[],[]);
if isempty(EEG)
EEG = eeg_emptyset;
end
if ~isempty(EEG.icawinv);
defSigType = {'Components','Channels'};
else
defSigType = {'Channels'};
end
g = arg_define([0 1], varargin, ...
arg_norep('EEG',mandatory), ...
arg({'linefreqs','LineFrequencies'}, 60, [],'Line noise frequencies to remove.'),...
arg({'scanforlines','ScanForLines'},false,[],'Scan for line noise. This will scan for the exact line frequency in a narrow range around the specified LineFrequencies'),...
arg({'p','LineAlpha','alpha'},0.01,[0 1],'p-value for detection of significant sinusoid'), ...
arg({'bandwidth','Bandwidth'},2,[],'Bandwidth (Hz). This is the width of a spectral peak for a sinusoid at fixed frequency. As such, this defines the multi-taper frequency resolution.'), ...
arg({'sigtype','SignalType','chantype'},defSigType{1},defSigType,'Type of signal to clean. Cleaned ICA components will be backprojected to channels. If channels are cleaned, ICA activations are reconstructed based on clean channels.'), ...
arg({'chanlist','ChanCompIndices','ChanComps'},sprintf('1:%d',EEG.nbchan),[1 EEG.nbchan],'Indices of Channels/Components to clean.','type','expression'),...
arg({'taperbandwidth','TaperBandWidth'},2,[0 Inf],'Taper bandwidth'), ...
arg({'winsize','SlidingWinLength'},fastif(EEG.trials==1,4,EEG.pnts/EEG.srate),[0 EEG.pnts/EEG.srate],'Sliding window length (sec). Default for epoched data is the epoch length. Default for continuous data is 4 seconds'), ...
arg({'winstep','SlidingWinStep'},fastif(EEG.trials==1,1,EEG.pnts/EEG.srate),[0 EEG.pnts/EEG.srate],'Sliding window step size (sec). This determines the amount of overlap between sliding windows. Default for epoched data is window length (no overlap). Default for continuous data is 1 second.'), ...
arg({'tau','SmoothingFactor'},100,[1 Inf],'Window overlap smoothing factor. A value of 1 means (nearly) linear smoothing between adjacent sliding windows. A value of Inf means no smoothing. Intermediate values produce sigmoidal smoothing between adjacent windows.'), ...
arg({'pad','PaddingFactor'},2,[-1 Inf],'FFT padding factor. Signal will be zero-padded to the desired power of two greater than the sliding window length. The formula is NFFT = 2^nextpow2(SlidingWinLen*(PadFactor+1)). e.g. For N = 500, if PadFactor = -1, we do not pad; if PadFactor = 0, we pad the FFT to 512 points, if PadFactor=1, we pad to 1024 points etc.'), ...
arg({'computepower','ComputeSpectralPower'},true,[],'Visualize Original and Cleaned Spectra. Original and clean spectral power will be computed and visualized at end'), ...
arg({'normSpectrum','NormalizeSpectrum'},false,[],'Normalize log spectrum by detrending. Not generally recommended.'), ...
arg({'verb','VerboseOutput','VerbosityLevel'},true,[],'Produce verbose output.'), ...
arg({'plotfigures','PlotFigures'},false,[],'Plot Individual Figures. This will generate figures of F-statistic, spectrum, etc for each channel/comp while processing'), ...
arg({'newversion','Newversion'},false,[],'Use new implementation (send us feedback)') ...
);