📄 batch_create_datamat.m
字号:
session_info.condition_baseline = ...
repmat(session.baseline, [session.num_run 1]);
session_info.condition_baseline = session_info.condition_baseline';
session_info.condition_baseline = [session_info.condition_baseline(:)]';
end
session_info.num_conditions0 = session.num_cond;
session_info.condition0 = session.cond_name;
session_info.condition_baseline0 = session.baseline;
session_info.num_runs = session.num_run;
for i = 1:session.num_run
file_lst = dir(session.data_files{i});
flist = {file_lst.name};
flist = flist(:);
session_info.run(i).num_scans = 0;
for j = 1:length(flist)
session_info.run(i).num_scans = session_info.run(i).num_scans + ...
get_nii_frame(fullfile(session.data_path{i}, flist{j}));
end
session_info.run(i).data_path = session.data_path{i};
session_info.run(i).data_files = flist;
session_info.run(i).file_pattern = session.file_pattern{i};
session_info.run(i).blk_onsets = session.blk_onsets{i};
session_info.run(i).blk_length = session.blk_length{i};
end
session_info.across_run = session.across_run;
session_info.behavname_all = {};
session_info.behavdata_all = [];
session_info.behavname_each = {};
session_info.behavdata_each = [];
session_info.behavname_all_single = {};
session_info.behavdata_all_single = [];
session_info.behavname_each_single = {};
session_info.behavdata_each_single = [];
create_ver = plsgui_vernum;
filename = [session.prefix '_BfMRIsession.mat'];
session_file = fullfile(session_info.pls_data_path, filename);
if(exist(session_file, 'file')==2)
disp(['WARNING: File ',filename,' is overwritten.']);
end
try
save (session_file, 'session_info','create_ver');
catch
msg = sprintf('Cannot save session information to ''%s'' ',filename);
error(msg);
end;
% create datamat
% ==============
if isnumeric(session.brain_region)
options.UseBrainRegionFile = 0;
options.BrainRegionFile = [];
options.Threshold = session.brain_region;
else
options.UseBrainRegionFile = 1;
options.BrainRegionFile = session.brain_region;
options.Threshold = [];
end
orient = [];
progress_hdl = rri_progress_status('create', ['Processing "' session_file '"']);
options.RunsIncluded = 1:session.num_run;
options.MaxStdDev = 4;
options.SliceIgnored = [];
options.NormalizeVolumeMean = 0;
options.NumScansSkipped = 0;
options.MergeDataAcrossRuns = session.across_run;
options.BehavData = [];
options.BehavName = {};
options.session_win_hdl = [];
options.NormalizeSignalMean = 1;
options.ConsiderAllVoxels = 0;
options.SingleSubject = session.single_subj;
if (options.UseBrainRegionFile == 1)
bfm_get_datamat(session_file,options.RunsIncluded, ...
options.BrainRegionFile, ...
options.MaxStdDev, ...
options.SliceIgnored, ...
options.NormalizeVolumeMean, ...
options.NumScansSkipped, ...
options.MergeDataAcrossRuns, ...
options.BehavData, ...
options.BehavName, ...
options.session_win_hdl, ...
options.NormalizeSignalMean, ...
options.ConsiderAllVoxels, ...
options.SingleSubject, ...
orient, 1);
else
bfm_get_datamat(session_file,options.RunsIncluded, ...
options.Threshold, ...
options.MaxStdDev, ...
options.SliceIgnored, ...
options.NormalizeVolumeMean, ...
options.NumScansSkipped, ...
options.MergeDataAcrossRuns, ...
options.BehavData, ...
options.BehavName, ...
options.session_win_hdl, ...
options.NormalizeSignalMean, ...
options.ConsiderAllVoxels, ...
options.SingleSubject, ...
orient, 1);
end
return; % create_bfm_datamat
%---------------------------------------------------------------------------
function create_erp_datamat(session)
if exist('plslog.m','file')
plslog('Batch create ERP datamat');
end
session_info.description = '';
session_info.pls_data_path = pwd;
session_info.contrastdata = '';
session_info.behavdata = '';
session_info.behavname = {};
session_info.chan_order = session.chan_order(:);
session_info.eeg_format = session.eeg_format;
session_info.num_contrast = 0;
session_info.num_behavior = 0;
session_info.num_channels = length(session.chan_order);
session_info.prestim_baseline = session.prestim;
session_info.digit_interval = session.interval;
session_info.datamat_prefix = session.prefix;
session_info.num_conditions = session.num_cond;
session_info.condition = session.cond_name;
session_info.num_subjects = session.num_subj;
session_info.subject = session.subject;
session_info.subj_name = session.subj_name;
session_info.subj_files = session.subj_files;
session_info.chan_in_col = session.chan_in_col;
session_info.system = session.system;
session_info.num_subj_init = -1;
create_ver = plsgui_vernum;
filename = [session.prefix '_ERPsession.mat'];
session_file = fullfile(session_info.pls_data_path, filename);
if(exist(session_file, 'file')==2)
disp(['WARNING: File ',filename,' is overwritten.']);
end
try
save (session_file, 'session_info','create_ver');
catch
msg = sprintf('Cannot save session information to ''%s'' ',filename);
error(msg);
end;
% create datamat
% ==============
switch session_info.system.class
case 1
type_str = 'BESAThetaPhi|EGI128|EGI256';
switch session_info.system.type
case 1
load('erp_loc_besa148');
case 2
load('erp_loc_egi128');
case 3
load('erp_loc_egi256');
end
case 2
type_str = 'CTF-150';
switch session_info.system.type
case 1
load('erp_loc_ctf150');
end
end
prescan_fn = fullfile(session_info.subject{1}, session_info.subj_files{1,1});
% prescan = load(prescan_fn); % prescan 1 wave
if isfield(session_info,'eeg_format')
eeg_format = session_info.eeg_format;
else
eeg_format = [];
end
[prescan, eeg_format] = read_eeg(prescan_fn, eeg_format);
if session_info.chan_in_col
prescan = prescan';
end
prescan_time = size(prescan, 2);
chan_name = chan_nam(session_info.chan_order,:);
subj_name = session_info.subj_name;
cond_name = session_info.condition;
if isfield(session_info,'behavname')
behavname = session_info.behavname;
else
behavname = {};
for i=1:size(session_info.behavdata,2)
behavname = [behavname, {['behav', num2str(i)]}];
end
session_info.behavname = behavname;
end
pls_data_path = session_info.pls_data_path;
filename = [session_info.datamat_prefix, '_ERPdatamat.mat'];
dataname = [session_info.datamat_prefix, '_ERPdata.mat'];
selected_channels = ones(1, session_info.num_channels); % select all
selected_subjects = ones(1, session_info.num_subjects); % select all
selected_conditions = ones(1, session_info.num_conditions); % select all
selected_behav = ones(1, size(session_info.behavdata,2)); % select all
prestim = session_info.prestim_baseline;
digit_interval = session_info.digit_interval;
% sweep = (prescan_time - 1) * digit_interval; % -1 means start from 0
sweep = prescan_time * digit_interval; % "- digit_interval" later
end_epoch = sweep + prestim;
start_time = prestim;
end_time = end_epoch;
time_info.prestim = prestim;
time_info.digit_interval = digit_interval;
time_info.end_epoch = end_epoch - digit_interval; % "- digit_interval" here
time_info.timepoint = prescan_time;
time_info.start_timepoint = floor(prestim/digit_interval);
time_info.start_time = start_time;
time_info.end_time = end_time - digit_interval; % "- digit_interval" here
chan_value = find(selected_channels);
subj_value = find(selected_subjects);
cond_value = find(selected_conditions);
behav_value = find(selected_behav);
pls_data_path = session_info.pls_data_path;
datamat_prefix = session_info.datamat_prefix;
num_channels = session_info.num_channels;
num_subjects = session_info.num_subjects;
num_conditions = session_info.num_conditions;
num_behav = size(session_info.behavdata, 2);
subject = session_info.subject;
subj_files = session_info.subj_files;
chan_in_col = session_info.chan_in_col;
curr = pwd;
if isempty(curr)
curr = filesep;
end
savepwd = curr;
k = num_conditions; % num of conditions
n = num_subjects; % num of subjects
progress_hdl = rri_progress_status('create', ['Processing "' session_file '"']);
factor = 1/(n*k);
rri_progress_ui(progress_hdl, '', 0.5*factor);
% add path for all subject
%
for i = 1:k
for j = 1:n
subj_files{i,j} = [subject{j}, filesep, subj_files{i,j}];
end
end
datamat=[];
for i = 1:k
temp=[];
for j=1:n
message=['Loading condition ',num2str(i),', subject ',num2str(j),'.'];
rri_progress_ui(progress_hdl,'',message);
% img = load(subj_files{i,j});
img = read_eeg(subj_files{i,j}, eeg_format);
if chan_in_col
img = img';
end
% img =reshape(img',[1,length(img(:))]);
% temp = [temp; img(:)'];
% temp = [temp; img];
% temp = cat(3, temp, img');
temp = [temp img'];
end
[r c] = size(img');
% datamat=[datamat;temp];
% datamat(:,:,:,i) = temp;
datamat(:,:,:,i) = reshape(temp,[r c n]);
rri_progress_ui(progress_hdl, '', ((i-1)*n+j)*factor);
end
datamatfile = fullfile(curr, filename);
datafile = fullfile(curr, dataname);
if(exist(datamatfile,'file')==2) % datamat file with same filename exist
disp(['WARNING: File ',datamatfile,' is overwritten.']);
end
if(exist(datafile,'file')==2) % data file with same filename exist
disp(['WARNING: File ',datafile,' is overwritten.']);
end
selected_channels = zeros(1, num_channels);
selected_channels(chan_value) = 1;
selected_subjects = zeros(1, num_subjects);
selected_subjects(subj_value) = 1;
selected_conditions = zeros(1, session_info.num_conditions);
selected_conditions(cond_value) = 1;
selected_behav = zeros(1, num_behav);
selected_behav(behav_value) = 1;
setting1.font_size_selection = 4;
setting1.eta = 0.07;
setting1.chan_name_status = 1;
setting1.chan_axes_status = 1;
setting1.chan_tick_status = 1;
setting1.bs_field = [];
setting1.wave_selection = 1;
setting1.avg_selection = 0;
setting1.bs_selection = 1;
setting1.x_interval_selection = 1;
setting1.y_interval_selection = 1;
create_ver = plsgui_vernum;
try
save(datafile, 'datamat', 'create_ver');
catch
msg = sprintf('Cannot save ERP data to ''%s'' ',datafile);
error(msg);
end;
try
save(datamatfile, 'datafile', 'create_ver', ...
'session_file', 'session_info', 'selected_behav', ...
'selected_conditions', 'selected_subjects', ...
'selected_channels', 'time_info', 'setting1');
catch
msg = sprintf('Cannot save ERP datamat to ''%s'' ',datamatfile);
error(msg);
end;
cd(savepwd);
close(progress_hdl);
return; % create_erp_datamat
%----------------------------------------------------------------------------
function nonbrain_coords = find_nonbrain_coords(dataset,coord_thresh,considerall)
[num_scans num_voxels] = size(dataset);
nonbrain_coords = zeros(1,num_voxels);
for i=1:num_scans,
scan_threshold = double(max(dataset(i,:))) * coord_thresh;
if considerall
idx = find(dataset(i,:) < scan_threshold);
else
idx = find(dataset(i,:) <= scan_threshold);
end
nonbrain_coords(idx) = 1;
end
return; % find_nonbrain_coords
%---------------------------------------------------------------------------
function create_struct_datamat(session)
if exist('plslog.m','file')
plslog('Batch create STRUCT datamat');
end
session_info.description = '';
session_info.pls_data_path = pwd;
session_info.dataset_path = session.dataset_path;
session_info.num_behavior = 0;
session_info.behavdata = [];
session_info.behavname = {};
session_info.datamat_prefix = session.prefix;
session_info.num_conditions = session.num_cond;
session_info.condition = session.cond_name;
session_info.num_subjects = session.num_subj;
session_info.subject = session.subject;
session_info.subj_name = session.subj_name;
session_info.cond_filter = session.cond_filter;
session_info.subj_files = session.subj_files;
session_info.img_ext = session.img_ext;
session_info.num_subj_init = -1;
create_ver = plsgui_vernum;
filename = [session.prefix '_STRUCTsession.mat'];
session_file = fullfile(session_info.pls_data_path, filename);
if(exist(session_file, 'file')==2)
disp(['WARNING: File ',filename,' is overwritten.']);
end
try
save (session_file, 'session_info','create_ver');
catch
msg = sprintf('Cannot save session information to ''%s'' ',filename);
error(msg);
end;
% create datamat
% ==============
if isnumeric(session.brain_region)
msg = sprintf('A brain mask file must be given in "brain_region" field.');
error(msg);
else
options.UseBrainRegionFile = 1;
options.BrainRegionFile = session.brain_region;
options.Threshold = [];
end
options.session_win_hdl = [];
options.ConsiderAllVoxels = 0;
options.NormalizeVolumeMean = session.normalize;
behavdata = [];
behavname = {};
pls_data_path = session_info.pls_data_path;
num_behavior = session_info.num_behavior;
datamat_prefix = session_info.datamat_prefix;
num_conditions = session_info.num_conditions;
condition = session_info.condition;
num_subjects = session_info.num_subjects;
subject = session_info.subject;
subj_name = session_info.subj_name;
subj_files = session_info.subj_files;
k = num_conditions;
n = num_subjects;
filename = [session_info.datamat_prefix, '_STRUCTdatamat.mat'];
dataname = [session_info.datamat_prefix, '_STRUCTdata.mat'];
selected_subjects = ones(1, session_info.num_subjects); % select all
use_brain_mask = options.UseBrainRegionFile;
brain_mask_file = options.BrainRegionFile;
brain_mask = [];
mask_dims = [];
brain_mask = load_nii(brain_mask_file, 1);
brain_mask = reshape(int8(brain_mask.img), [brain_mask.hdr.dime.dim(2:3) 1 brain_mask.hdr.dime.dim(4)]);
mask_dims = size(brain_mask);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -