⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 batch_create_datamat.m

📁 绝对经典,老外制作的功能强大的matlab实现PLS_TOOBOX
💻 M
📖 第 1 页 / 共 3 页
字号:

      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 + -