Writing EELAB Scripts的笔记

原文链接:https://sccn.ucsd.edu/wiki/Chapter_02:_Writing_EEGLAB_Scripts

EEGLAB中的data structure:
EEG - the current EEG dataset (当前的EEG数据集)
ALLEEG - array of all loaded EEG datasets (在EEGLAB中加载的所有数据集)
CURRENTSET - the index of the current dataset (在EEGLAB中加载数据集的索引)
LASTCOM - the last command issued from the EEGLAB menu
ALLCOM - all the commands issued from the EEGLAB menu

1. “dataset history”

EEG.history 字段:
在EEGLAB菜单中加载一个数据集,对当前数据集的相应处理操作(函数)会被存储在EEG.history字段中。

因此以相同的方式处理多个数据集时(例:预处理),可以先通过EEGLAB菜单导入一个数据集,在EEGLAB图形菜单上对该数据集进行处理以后:
第一种方法:在Maltab命令窗口输入EEG.history ,copy那些命令,放到一个 .m 文件中,在保存。
第二种方法:在EEGLAB菜单中 File -> History scripts -> save dataset history script
Note:
由于保存了所有对第一个数据集的操作,包括导入数据时的文件路径,设置数据集的名字(在gui上每操作点什么就要给数据集起个名),。。。这些都将被保存在字段中。
事实上,EEG结构体本身的含义就是指当前数据集,所以对EEG.history中额外的那些“函数”可直接省略掉,把对数据集主要操作的函数留下,赋给EEG,最后处理完以后,在保存的时候,给当前数据集起个名即可。

对某数据集的操作如下,导出数据集历史脚本是这样子:
在这里插入图片描述
实际上可以略掉一些(第一次写script的时候,把所有的函数都复制了,后来才知道…):
在这里插入图片描述
这儿只是示例,处理以后,可以把数据集另存为set格式(加一个pop_saveset函数)
另:通常写脚本批处理的时候,不会写pop_loadbv函数,这个函数会弹出一个交互窗口,让你点导入的数据。
一般的做法是把数据放在某个文件夹下,然后可以用dir函数。

tmp = dir(loadpath); % loadpath为数据文件路径
n_raw = 0;
for m=3:numel(tmp)
    if strcmp(tmp(m).name(end-3:end),'vhdr')  % 要读取的数据后缀名
        n_raw = n_raw+1;
        filenames{n_raw} = tmp(m).name;    % 存下来
    end
end

eeglabr redraw 命令:对EEG数据集所作的更改可以反映在EEGLAB窗口中。

2.“session history”

“session history”:保存了当前EEGLAB会话中所有数据集调用函数的“历史”。
“dataset history”:仅保存修改当前数据集的函数调用。

对打开的EEGLAB,查看session history,在命令窗口输入: eegh
在matlab命令窗口打印出会话历史记录。
session history命令的保存可通过 File -> History scripts -> save session history script

[ALLEEG EEG CURRENTSET ALLCOM] = eeglab;
运行EEGLAB并初始化函数输出中列出的几个EEGLAB变量。

注意事项

在EEGLAB菜单项中,File -> Memory and other options 打开,勾选了“Retain parent dataset”(默认是勾选的),则当前所有加载的数据集被存在 ALLEEG 变量中。
(1)对某一个数据集修改以后,则应注意将修改后的EEG数据集复制到 ALLEEG 中。
一种方法是使用 eeg_store.m (在存储修改后的数据集之前,对数据集的一致性进行检查)。
例,将新数据集设置为编号2
[ALLEEG EEG] = eeg_store(ALLEEG, EEG, 2);
or
[ALLEEG EEG CURRENTSET] = eeg_store(ALLEEG, EEG);
第二种会在 ALLEEG 变量中的下一个可用空间创建新数据集。新数据集的编号可通过 CURRENTSET 获得。
Note:若所有加载的数据集中,已经有编号为2的数据集,则只有第二个命令不会覆盖。
查看数据集的改变,可通过命令 eeglab redraw。

(2)另一种做法是使用 pop_newset.m (该命令也会执行数据集一致性检查)。
当对某个数据集进行一系列的处理后,把处理后的数据在重新存储。(eeg_store的使用是对数据集每进行一次操作,就需要在后面加一条,可参考 session history打印出的命令)
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, CURRENTSET, ‘overwrite’, ‘on’);
or
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, CURRENTSET);
第一种是对已加载的数据集处理后并覆盖当前数据集。第二种是存储为一个新的数据集,编号存在变量 CURRENSET中。

有关 eeg_ 函数的帮助信息,可通过
(1)EEGLAB菜单选项 help -> EEGLAB functions -> Admin. functions
(2)在命令行直接输入 help functioname

猜你喜欢

转载自blog.csdn.net/zhu_wendao/article/details/87804430