📄 batch_create_datamat.m
字号:
function batch_create_datamat(fid)
session.prefix = ''; % all
session.dataset_path = ''; % struct
session.brain_region = ''; % all but erp
session.win_size = 8; % fmri
session.across_run = 1; % mri
session.single_subj = 0; % mri
session.normalize = ''; % struct
session.cond_name = {}; % all
session.cond_filter = {}; % struct
ref_scan_onset = []; % mri
num_ref_scan = []; % mri
subj_file = {}; % erp, pet, struct
session.subject = {}; % erp, pet, struct
session.subj_name = {}; % struct, (erp, pet)
session.subj_files = {}; % erp, pet, struct
session.img_ext = '*.img'; % pet, struct
session.chan_in_col = 0; % erp
session.prestim = 0; % erp
session.interval = 2; % erp
session.chan_order = []; % erp
system_class = 1; % erp
system_type = 1; % erp
binary_vendor = ''; % erp
binary_endian = 'ieee-le'; % erp
session.data_files = {}; % mri
session.data_path = {}; % mri
session.file_pattern = {}; % mri
event_onsets = {}; % fmri
block_onsets = {}; % bfm
block_length = {}; % bfm
wrongbatch = 0;
while ~feof(fid)
tmp = fgetl(fid);
if ischar(tmp) & ~isempty(tmp)
tmp = strrep(tmp, char(9), ' ');
tmp = deblank(fliplr(deblank(fliplr(tmp))));
end
while ~feof(fid) & (isempty(tmp) | isnumeric(tmp) | strcmpi(tmp(1), '%'))
tmp = fgetl(fid);
if ischar(tmp) & ~isempty(tmp)
tmp = strrep(tmp, char(9), ' ');
tmp = deblank(fliplr(deblank(fliplr(tmp))));
end
end
if ischar(tmp) & ~isempty(tmp)
[tok rem] = strtok(tmp);
if ~isempty(rem)
[rem junk] = strtok(rem, '%');
rem = deblank(fliplr(deblank(fliplr(rem))));
end
else
tok = '';
end
switch tok
case 'prefix'
if isempty(rem), wrongbatch = 1; end;
session.prefix = rem;
case 'dataset_path'
if isempty(rem), wrongbatch = 1; end;
session.dataset_path = rem;
case 'brain_region'
if isempty(rem), wrongbatch = 1; end;
if isempty(str2num(rem))
session.brain_region = rem;
else
session.brain_region = str2num(rem);
end
case 'win_size'
session.win_size = str2num(rem);
if isempty(session.win_size), session.win_size = 8; end;
case 'across_run'
session.across_run = str2num(rem);
if isempty(session.across_run), session.across_run = 1; end;
case 'single_subj'
session.single_subj = str2num(rem);
if isempty(session.single_subj), session.single_subj = 0; end;
case 'cond_name'
if isempty(rem), wrongbatch = 1; end;
session.cond_name = [session.cond_name {rem}];
case 'cond_filter'
if isempty(rem), wrongbatch = 1; end;
session.cond_filter = [session.cond_filter {rem}];
case 'ref_scan_onset'
rem = str2num(rem);
if isempty(rem), rem = 0; end;
ref_scan_onset = [ref_scan_onset rem];
case 'num_ref_scan'
rem = str2num(rem);
if isempty(rem), rem = 1; end;
num_ref_scan = [num_ref_scan rem];
case 'data_files'
session.data_files = [session.data_files {rem}];
case 'event_onsets'
if isempty(rem), wrongbatch = 1; end;
event_onsets = [event_onsets {str2num(rem)}];
case 'block_onsets'
if isempty(rem), wrongbatch = 1; end;
block_onsets = [block_onsets {str2num(rem)}];
case 'block_length'
if isempty(rem), wrongbatch = 1; end;
block_length = [block_length {str2num(rem)}];
case 'prestim'
session.prestim = str2num(rem);
if isempty(session.prestim), session.prestim = 0; end;
case 'interval'
session.interval = str2num(rem);
if isempty(session.interval), session.interval = 2; end;
case 'chan_order'
if isempty(rem), wrongbatch = 1; end;
session.chan_order = str2num(rem);
case 'system_class'
system_class = str2num(rem);
if isempty(system_class), system_class = 1; end;
case 'system_type'
system_type = str2num(rem);
if isempty(system_type), system_type = 1; end;
case 'binary_vendor'
binary_vendor = rem;
if ~strcmpi(binary_vendor, 'NeuroScan') & ...
~strcmpi(binary_vendor, 'ANT') & ...
~strcmpi(binary_vendor, 'EGI')
binary_vendor = '';
end
case 'binary_endian'
binary_endian = rem;
if ~strcmpi(binary_endian, 'ieee-be') & ~strcmpi(binary_endian, 'b') ...
& ~strcmpi(binary_endian, 'ieee-le.l64') & ~strcmpi(binary_endian, 'a') ...
& ~strcmpi(binary_endian, 'ieee-be.l64') & ~strcmpi(binary_endian, 's') ...
& ~strcmpi(binary_endian, 'vaxd') & ~strcmpi(binary_endian, 'd') ...
& ~strcmpi(binary_endian, 'vaxg') & ~strcmpi(binary_endian, 'g') ...
& ~strcmpi(binary_endian, 'cray') & ~strcmpi(binary_endian, 'c') ...
& ~strcmpi(binary_endian, 'native') & ~strcmpi(binary_endian, 'n')
binary_endian = 'ieee-le';
end
case 'chan_in_col'
session.chan_in_col = str2num(rem);
if isempty(session.chan_in_col), session.chan_in_col = 0; end;
case 'subj_name'
if isempty(rem), wrongbatch = 1; end;
session.subj_name = [session.subj_name {rem}];
case 'subj_file'
if isempty(rem), wrongbatch = 1; end;
subj_file = [subj_file {rem}];
case 'normalize'
if isempty(rem), wrongbatch = 1; end;
session.normalize = str2num(rem);
end
end
fclose(fid);
if wrongbatch
error('There is error(s) in batch file, please read ''UserGuide.htm'' for help');
end
session.num_cond = length(session.cond_name);
if ~isempty(event_onsets) % fmri
if wrongbatch | isempty(session.data_files)
error('There is error(s) in batch file, please read ''UserGuide.htm'' for help');
end
session.num_run = length(session.data_files);
for i = 1:session.num_run
[session.data_path{i} session.file_pattern{i}] ...
= rri_fileparts(session.data_files{i});
for j = 1:session.num_cond
session.evt_onsets{i}{j} = event_onsets{(i-1)*session.num_cond+j}(:);
end
end
for i = 1:session.num_cond
session.baseline{i} = [ref_scan_onset(i) num_ref_scan(i)];
end
create_fmri_datamat(session);
elseif ~isempty(block_onsets) % bfm
if wrongbatch | isempty(session.data_files)
error('There is error(s) in batch file, please read ''UserGuide.htm'' for help');
end
session.num_run = length(session.data_files);
for i = 1:session.num_run
[session.data_path{i} session.file_pattern{i}] ...
= rri_fileparts(session.data_files{i});
for j = 1:session.num_cond
session.blk_onsets{i}{j} = block_onsets{(i-1)*session.num_cond+j}(:);
session.blk_length{i}{j} = block_length{(i-1)*session.num_cond+j}(:);
end
end
for i = 1:session.num_cond
session.baseline{i} = [ref_scan_onset(i) num_ref_scan(i)];
end
create_bfm_datamat(session);
elseif ~isempty(session.chan_order) % erp
if isempty(binary_vendor)
session.eeg_format = [];
else
session.eeg_format.vendor = binary_vendor;
session.eeg_format.machineformat = binary_endian;
end
session.system.class = system_class;
session.system.type = system_type;
session.num_subj = round(length(subj_file) / session.num_cond);
session.subj_files = cell(session.num_cond, session.num_subj);
for i = 1:session.num_cond
for j = 1:session.num_subj
[session.subject{j} session.subj_files{i,j}] = ...
rri_fileparts(subj_file{(i-1)*session.num_subj+j});
end
end
for j = 1:session.num_subj
[tmp subj_name] = rri_fileparts(session.subject{j});
session.subj_name = [session.subj_name {subj_name}];
end
create_erp_datamat(session)
elseif ~isempty(session.dataset_path) % struct
session.num_subj = round(length(subj_file) / session.num_cond);
session.subj_files = cell(session.num_cond, session.num_subj);
for i = 1:session.num_cond
for j = 1:session.num_subj
[junk session.subj_files{i,j}] = ...
rri_fileparts(subj_file{(i-1)*session.num_subj+j});
end
end
subject = session.subj_files(1,:);
% replace pattern with '*'
%
[p f] = fileparts(session.cond_filter{1});
f = strrep(f, '*', ''); % remove * in pattern
subject = strrep(subject, f, '*'); % replace with '*'
% replace '.nii' or '.img' with '.*'
%
subject = strrep(subject, '.nii', '.*');
subject = strrep(subject, '.img', '.*');
session.subject = subject;
subject = session.subj_files{1,1};
[p f e] = fileparts(subject);
session.img_ext = ['*' e];
create_struct_datamat(session)
else % pet
session.num_subj = round(length(subj_file) / session.num_cond);
session.subj_files = cell(session.num_cond, session.num_subj);
for i = 1:session.num_cond
for j = 1:session.num_subj
[session.subject{j} session.subj_files{i,j}] = ...
rri_fileparts(subj_file{(i-1)*session.num_subj+j});
end
end
for j = 1:session.num_subj
[tmp subj_name] = rri_fileparts(session.subject{j});
session.subj_name = [session.subj_name {subj_name}];
end
subject = session.subj_files{1,1};
[p f e] = fileparts(subject);
session.img_ext = ['*' e];
create_pet_datamat(session)
end
return; % batch_create_datamat
%---------------------------------------------------------------------------
function create_fmri_datamat(session)
if exist('plslog.m','file')
plslog('Batch create fMRI datamat');
end
session_info.description = '';
session_info.pls_data_path = pwd;
session_info.datamat_prefix = session.prefix;
if session.across_run
session_info.num_conditions = session.num_cond;
session_info.condition = session.cond_name;
session_info.condition_baseline = session.baseline;
else
session_info.num_conditions = session.num_run * session.num_cond;
for i = 1:session.num_run
for j = 1:session.num_cond
session_info.condition{ (i-1)*session.num_cond + j } = ...
[ 'Run' num2str(i) session.cond_name{j} ];
end
end
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).evt_onsets = session.evt_onsets{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 '_fMRIsession.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.TemporalWindowSize = session.win_size;
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)
fmri_get_datamat(session_file,options.RunsIncluded, ...
options.BrainRegionFile, ...
options.MaxStdDev, ...
options.SliceIgnored, ...
options.NormalizeVolumeMean, ...
options.NumScansSkipped, ...
options.TemporalWindowSize, ...
options.MergeDataAcrossRuns, ...
options.BehavData, ...
options.BehavName, ...
options.session_win_hdl, ...
options.NormalizeSignalMean, ...
options.ConsiderAllVoxels, ...
options.SingleSubject, ...
orient, 1);
else
fmri_get_datamat(session_file,options.RunsIncluded, ...
options.Threshold, ...
options.MaxStdDev, ...
options.SliceIgnored, ...
options.NormalizeVolumeMean, ...
options.NumScansSkipped, ...
options.TemporalWindowSize, ...
options.MergeDataAcrossRuns, ...
options.BehavData, ...
options.BehavName, ...
options.session_win_hdl, ...
options.NormalizeSignalMean, ...
options.ConsiderAllVoxels, ...
options.SingleSubject, ...
orient, 1);
end
return; % create_fmri_datamat
%---------------------------------------------------------------------------
function create_bfm_datamat(session)
if exist('plslog.m','file')
plslog('Batch create BfMRI datamat');
end
session_info.description = '';
session_info.pls_data_path = pwd;
session_info.datamat_prefix = session.prefix;
if session.across_run
session_info.num_conditions = session.num_cond;
session_info.condition = session.cond_name;
session_info.condition_baseline = session.baseline;
else
session_info.num_conditions = session.num_run * session.num_cond;
for i = 1:session.num_run
for j = 1:session.num_cond
session_info.condition{ (i-1)*session.num_cond + j } = ...
[ 'Run' num2str(i) session.cond_name{j} ];
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -