Home > functions > gui > bayes_parm_editor_dir > bayes_parm_editor.m

bayes_parm_editor

PURPOSE ^

bayes_parm_editor controller

SYNOPSIS ^

function varargout = bayes_parm_editor(obj, command, varargin)

DESCRIPTION ^

 bayes_parm_editor controller
 [USAGE]
    [out] = bayes_parm_editor(obj, command, someparm);
 [IN]
         obj : bayes_parm_editor object
     command : command to the object
    varargin : 

 Copyright (C) 2011, ATR All Rights Reserved.
 License : New BSD License(see VBMEG_LICENSE.txt)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function varargout = bayes_parm_editor(obj, command, varargin)
0002 % bayes_parm_editor controller
0003 % [USAGE]
0004 %    [out] = bayes_parm_editor(obj, command, someparm);
0005 % [IN]
0006 %         obj : bayes_parm_editor object
0007 %     command : command to the object
0008 %    varargin :
0009 %
0010 % Copyright (C) 2011, ATR All Rights Reserved.
0011 % License : New BSD License(see VBMEG_LICENSE.txt)
0012 
0013 %
0014 % --- Previous check
0015 %
0016 if ~exist('obj', 'var') || isempty(obj) || ~ishandle(obj)
0017     error('invalid obj is specified.');
0018 end
0019 if ~exist('command', 'var') || isempty(command)
0020     error('command is a required paramteter.');
0021 end
0022 
0023 %
0024 % --- Main Procedure
0025 %
0026 
0027 % load data
0028 data = guidata(obj);
0029 
0030 switch(command)
0031     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0032     % GUI initialize/exit function
0033     %
0034     case 'finish_request'
0035         bayes_parm_advanced_close(data.adv_fig);
0036         bayes_parm_basic_close(data.basic_fig);
0037         return;
0038 
0039     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0040     % bayes_parm getter/setter functions
0041     %
0042     case 'merge_bayes_parm'
0043         parms = varargin{1};
0044         parm_names = fieldnames(parms);
0045         for k=1:length(parm_names)
0046             data.bayes_parm.(parm_names{k}) = parms.(parm_names{k});
0047         end
0048     case 'set_a0_act_auto'
0049         data.a0_act_auto = varargin{1};
0050     case 'get_a0_act_auto'
0051         varargout{1} = data.a0_act_auto;
0052     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0053     % meg_file data getter/settter functions
0054     %
0055     case 'set_megfile_info'
0056         filename = varargin{1};
0057         if isempty(filename)
0058             data.meg_info = [];
0059         else
0060             data.meg_info = vb_load_meg_info(filename);
0061             pre_trigger = vb_meginfo_get_pre_trigger(data.meg_info);
0062             if isempty(pre_trigger)
0063                 data.meg_info = vb_meginfo_set_pre_trigger(data.meg_info, 1);
0064             end
0065         end
0066     case 'get_megfile_info'
0067         varargout{1} = data.meg_info;
0068         
0069     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0070     % sensor_noise_file data getter/settter functions
0071     %
0072     case 'set_sensor_noise_file_info'
0073         filename = varargin{1};
0074         if isempty(filename)
0075             data.sensor_noise_info = [];
0076         else
0077             data.sensor_noise_info = vb_load_meg_info(filename);
0078             pre_trigger = vb_meginfo_get_pre_trigger(data.sensor_noise_info);
0079             if isempty(pre_trigger)
0080                 data.sensor_noise_info = ...
0081                     vb_meginfo_set_pre_trigger(data.sensor_noise_info, 1);
0082             end
0083         end
0084     case 'get_sensor_noise_file_info'
0085         varargout{1} = data.sensor_noise_info;
0086 
0087     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0088     % data save/load functions
0089     %
0090     case 'save_bayes_parm'
0091         % Why bayes_parm is not assigned to H.bayes_parm,
0092         % User inputted value bayes_parm.a0_act will be lost.
0093         % If user checked a0_act automatic setting ON, and
0094         % a0_act value was inputted, User may change
0095         % a0_act automatic setting OFF.
0096 %        bayes_parm_advanced_close(data.adv_fig, true);
0097 %        % data is updated previous line (by advanced parameter gui close).
0098 %        % reload data.
0099 %        data = guidata(obj);
0100         bayes_parm = bayes_parm_check(data, data.bayes_parm);
0101         
0102         [dirname, filename, selected] = bayes_parm_gui_util(...
0103                                                 'filedlg',...
0104                                                 {'.bayes_param.mat'},...
0105                                                 1, pwd);
0106         proj_root = bayes_parm_basic_gui(data.basic_fig, 'get_project_root');
0107         if selected
0108             filename = [dirname, filesep, filename{1}];
0109             vb_save(filename, 'bayes_parm', 'proj_root');
0110             %msgbox('save finished.', 'notice');
0111         end
0112     case 'load_bayes_parm'
0113 %        bayes_parm_advanced_close(data.adv_fig, true);
0114 %        % data is updated previous line (by advanced parameter gui close).
0115 %        % reload data.
0116 %        data = guidata(obj);
0117         [dirname, filename, selected] = bayes_parm_gui_util(...
0118                                                 'filedlg',...
0119                                                 {'.bayes_param.mat'},...
0120                                                 0, pwd);
0121         if selected
0122             filename = [dirname, filesep, filename{1}];
0123             load(filename, 'bayes_parm', 'proj_root');
0124             data.bayes_parm = bayes_parm;
0125             if isempty(data.bayes_parm.a0_act)
0126                 data.a0_act_auto = 1;
0127             else
0128                 data.a0_act_auto = 0;
0129             end
0130             bayes_parm_basic_gui(data.basic_fig, 'set_project_root', proj_root);
0131             bayes_parm_basic_gui(data.basic_fig, ...
0132                                 'gui_update', data.bayes_parm);
0133             % The data of sensornoise_info and meg_info data are updated
0134             % previous line (by setting basic parameter).
0135             % reload here.
0136             data_tmp = guidata(obj);
0137             data.sensor_noise_info = data_tmp.sensor_noise_info;
0138             data.meg_info          = data_tmp.meg_info;
0139     end
0140         
0141     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0142     % execute functions
0143     %
0144     case 'exec_estimation'
0145         % Why bayes_parm is not assigned to H.bayes_parm,
0146         % User inputted value bayes_parm.a0_act will be lost.
0147         % If user checked a0_act automatic setting ON, and
0148         % a0_act value was inputted, User may change
0149         % a0_act automatic setting OFF.
0150  %       bayes_parm_advanced_close(data.adv_fig, true);
0151  %       % data is updated previous line (by advanced parameter gui close).
0152  %       % reload data.
0153  %       data = guidata(obj);
0154         [bayes_parm, err, errormsg] = bayes_parm_check(data, data.bayes_parm);
0155         if err, errordlg(errormsg, 'error');, return; end
0156         proj_root = bayes_parm_basic_gui(data.basic_fig, 'get_project_root');
0157         vb_job_vb(proj_root, bayes_parm);
0158  
0159     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0160     % time <--> sampling data conversion functions
0161     %
0162     case 'time_to_index'
0163         time = varargin{1}; % time point(msec)
0164         type = varargin{2}; % 'meg' or 'noise' file
0165         [index, err] = time_to_index_inner(data, time, type);
0166         varargout{1} = index;
0167         varargout{2} = err;
0168     case 'index_to_time'
0169         index = varargin{1}; % data index
0170         type = varargin{2}; % 'meg' or 'noise' file
0171         [time, err] = index_to_time_inner(data, index, type);
0172         varargout{1} = time;
0173         varargout{2} = err;
0174     case 'time_len_to_data_len'
0175         time_len = varargin{1}; %time length(msec)
0176         type = varargin{2}; % 'meg' or 'noise' file
0177         [data_len, err] = time_len_to_data_len(data, time_len, type);
0178         varargout{1} = data_len;
0179         varargout{2} = err;
0180     case 'data_len_to_time_len'
0181         data_len = varargin{1}; %data length
0182         type = varargin{2}; % 'meg' or 'noise' file
0183         [time_len, err] = data_len_to_time_len(data, data_len, type);
0184         varargout{1} = time_len;
0185         varargout{2} = err;
0186 end
0187 
0188 % save data
0189 guidata(obj, data);
0190 
0191 function [index, err] = time_to_index_inner(data, time, file_type)
0192 % This function returns nearest rounded up sampling index from
0193 % specified time.
0194 % [IN]
0195 %         data : application data (@see bayes_parm_editor_init)
0196 %         time : time point(msec)
0197 %    file_type : 'meg'   (use meg_file)
0198 %                'noise' (use sensor_noise_file)
0199 % [OUT]
0200 %      index : nearest rounded up sampling index from specified time.
0201 %      err       : 1 or 2 (1:file does not specified, 2:user input error)
0202 
0203     err = false;
0204     index = [];
0205     
0206     meg_info = [];
0207     switch(file_type)
0208         case 'meg'
0209             meg_info = data.meg_info;
0210         case 'noise'
0211             meg_info = data.sensor_noise_info;
0212     end
0213     
0214     if isempty(meg_info)
0215         err = 1;
0216         return;
0217     end
0218 
0219     try
0220       index = vb_time_to_index(time,meg_info);
0221         % sampling length(msec).
0222         %sampling_length = 1000/sample_freq;
0223         %
0224         % time list of sample points
0225         %sampling_point = -(sampling_length * pretrigger) : sampling_length : ...
0226         %                  (sampling_length * (Nsample-pretrigger-1));
0227         %
0228         %for k=1:length(time)
0229         %    if time(k) < min(sampling_point)
0230         %        time(k) = min(sampling_point);
0231         %    elseif time(k) > max(sampling_point)
0232         %        time(k) = max(sampling_point);
0233         %    end
0234         %
0235         %    % Index of MEG data
0236         %    index(k) = min(find(sampling_point>=time(k)));
0237         %end
0238     catch
0239         err = 2;
0240     end
0241 
0242 function [time, err] = index_to_time_inner(data, index, file_type)
0243 % This function returns time that corresponds to sampling data index.
0244 % [IN]
0245 %         data : application data (@see bayes_parm_editor_init)
0246 %        index : sampling data index number.
0247 %    file_type : 'meg'   (use meg_file)
0248 %                  'noise' (use sensor_noise_file)
0249 % [OUT]
0250 %    time      : time that corresponds to sampleing data index.
0251 %    err       : 1 or 2 (1:file does not specified, 2:user input error)
0252 
0253     err = false;
0254     time = [];
0255     
0256     meg_info = [];
0257     switch(file_type)
0258         case 'meg'
0259             meg_info = data.meg_info;
0260         case 'noise'
0261             meg_info = data.sensor_noise_info;
0262     end
0263 
0264     if isempty(meg_info)
0265         err = 1;
0266         return;
0267     end        
0268 
0269     try
0270       time = vb_index_to_time(index,meg_info);
0271         %% sampling length(msec).
0272         %sampling_length = 1000/sample_freq;
0273         %% time list of sample points(msec)
0274         %sampling_point = -(sampling_length * pretrigger) : sampling_length : ...
0275         %                    (sampling_length * (Nsample-pretrigger-1));
0276         %
0277         %for k=1:length(index)
0278         %    % array over flow check
0279         %    if index(k) > length(sampling_point)
0280         %        index(k) = length(sampling_point);
0281         %    end
0282         %    % return time
0283         %    time(k) = sampling_point(index(k));
0284         %end
0285     catch
0286         err = 2;
0287         return;
0288     end
0289 
0290 function [data_len, err] = time_len_to_data_len(data, time_len, file_type)
0291 % This function converts from time length to sampling length.
0292 % [IN]
0293 %         data : application data (@see bayes_parm_editor_init)
0294 %     time_len : time length(msec)
0295 %    file_type : 'meg'   (use meg_file)
0296 %                'noise' (use sensor_noise_file)
0297 % [OUT]
0298 %    data_len : sampling length
0299 %         err : 1 or 2 (1:file does not specified, 2:user input error)
0300 
0301     err = false;
0302     data_len = [];
0303     
0304     meg_info = [];
0305     switch(file_type)
0306         case 'meg'
0307             meg_info = data.meg_info;
0308         case 'noise'
0309             meg_info = data.sensor_noise_info;
0310     end
0311 
0312     if isempty(meg_info)
0313         err = 1;
0314         return;
0315     end        
0316 
0317     try
0318       sample_freq     = vb_meginfo_get_sampling_frequency(meg_info);
0319       data_len = vb_time_to_numsamp(time_len,sample_freq);
0320         
0321         % time length adjust(multiple of sampling_length)
0322         %sampling_length = 1000/sample_freq;
0323         %data_len = ceil(time_len / sampling_length);
0324     catch
0325         err = 2;
0326     end
0327 
0328 function [time_len, err] = data_len_to_time_len(data, data_len, file_type)
0329 % This function converts from sampling length to time length.
0330 % [IN]
0331 %         data : application data (@see bayes_parm_editor_init)
0332 %     data_len : sampling length
0333 %    file_type : 'meg'   (use meg_file)
0334 %                'noise' (use sensor_noise_file)
0335 % [OUT]
0336 %    time_len  : time length(msec)
0337 %         err  : 1 or 2 (1:file does not specified, 2:user input error)
0338 
0339     err = false;
0340     time_len = [];
0341     
0342     meg_info = [];
0343     switch(file_type)
0344         case 'meg'
0345             meg_info = data.meg_info;
0346         case 'noise'
0347             meg_info = data.sensor_noise_info;
0348     end
0349 
0350     if isempty(meg_info)
0351         err = 1;
0352         return;
0353     end        
0354 
0355     try
0356         sample_freq     = vb_meginfo_get_sampling_frequency(meg_info);
0357         time_len = vb_numsamp_to_time(data_len,sample_freq);
0358         %sampling_len = 1000/sample_freq;
0359         %time_len = sampling_len .* data_len;x
0360     catch
0361         err = 2;
0362     end
0363 
0364 function [bayes_parm, err, errormsg] = bayes_parm_check(data, bayes_parm)
0365 % This function check and repair bayes_parm.
0366 % Before saving or execute estimation, call this function.
0367 % [IN]
0368 %          data : application data (@see bayes_parm_editor_init)
0369 %    bayes_parm : structure of bayes parameter.
0370 % [OUT]
0371 %      bayes_parm  : checked structure of bayes parameter.
0372 %      err         : check result(true: ex.parameter dependency error)
0373 %                                (false: This parameter can use for
0374 %                                estimation)
0375 
0376     global vbmeg_inst;
0377     const = vbmeg_inst.const;
0378 
0379     err = false;
0380     errormsg = [];
0381     
0382     % project root directory
0383     proj_root = bayes_parm_basic_gui(data.basic_fig, 'get_project_root');
0384     
0385     % basis_file_global
0386     if ~isfield(bayes_parm, 'basisfile_global') | isempty(bayes_parm.basisfile_global)
0387         bayes_parm.basisfile_global = bayes_parm.basisfile;
0388     end
0389     
0390     % area_key_global
0391     if ~isfield(bayes_parm, 'area_key_global') | isempty(bayes_parm.area_key_global)
0392         bayes_parm.area_key_global = bayes_parm.area_key;
0393     end
0394     
0395     % Rfilt_global
0396     if ~isfield(bayes_parm, 'Rfilt_global') | isempty(bayes_parm.Rfilt_global)
0397         bayes_parm.Rfilt_global = bayes_parm.Rfilt;
0398     end
0399     
0400     % a0_act
0401     if data.a0_act_auto == 1
0402         bayes_parm.a0_act = [];
0403     end
0404 
0405     % When soft_mode = ON, previous leadfield calculation parameter should be
0406     %                      basis_parm.Basis_mode = CURRENT_3D;
0407     %                                .normal_mode = NORMAL_NEIGHBOR_MEAN;
0408     if bayes_parm.soft_mode == ON
0409         project_root = bayes_parm_basic_gui(data.basic_fig, 'get_project_root');
0410         for k=1:length(bayes_parm.basisfile)
0411             basis_file = [project_root, '/', bayes_parm.basisfile{k}];
0412             [Norient, normal_mode] = vb_load_basis_info(basis_file);
0413             if ~((Norient == const.CURRENT_3D ) && (normal_mode == const.NORMAL_NEIGHBOR_MEAN))
0414                 err = true;
0415                 errormsg = sprintf(['When you use soft_mode, specified basis_parm should be as follows.\n',...
0416                         'basis_parm.normal_mode = NORMAL_NEIGHBOR_MEAN\n',...
0417                         'basis_parm.Basis_mode = CURRENT_3D\n']);
0418             end
0419         end
0420     end
0421     
0422     % Time window(Manual mode) error check
0423     if length(bayes_parm.Tnext) == 0 || length(bayes_parm.Tperiod) == 0
0424         err = true;
0425         errormsg = 'Check Analysis time parameters.';
0426     end
0427     
0428     % File exist check(.brain.mat, .area.mat, .act.mat)
0429     brain_file = [proj_root, '/', bayes_parm.brainfile];
0430     area_file  = [proj_root, '/', bayes_parm.areafile];
0431     act_file   = [proj_root, '/', bayes_parm.actfile];
0432     
0433     if exist(brain_file, 'file') ~= 2
0434         err = true;
0435         errormsg = sprintf('Cortical model file not specified.');
0436     end
0437     if exist(area_file, 'file') ~= 2
0438         err = true;
0439         errormsg = sprintf('Cortical area file not specified.');
0440     end
0441     if exist(act_file, 'file') ~= 2
0442         err = true;
0443         errormsg = sprintf('Cortical activity file not specified.');
0444     end
0445     
0446     % File exist check(.basis.mat)
0447     Nbasis_file = length(bayes_parm.basisfile);
0448     if Nbasis_file == 0
0449         err = true;
0450         errormsg = sprintf('Leadfield file not specified.');
0451     end
0452     for k=1:Nbasis_file
0453         basis_file = [proj_root, '/', bayes_parm.basisfile{k}];
0454         if exist(basis_file, 'file') ~= 2
0455             err = true;
0456             errormsg = sprintf('Leadfield file not specified.');
0457             break;
0458         end
0459     end
0460     
0461     % File exist check(.meg.mat)
0462     Nmeg_file = length(bayes_parm.megfile);
0463     if Nmeg_file == 0
0464         err = true;
0465         errormsg = sprintf('MEG/EEG file not specified.');
0466     end
0467     for k=1:Nmeg_file
0468         meg_file = [proj_root, '/', bayes_parm.megfile{k}];
0469         if exist(meg_file, 'file') ~= 2
0470             err = true;
0471             errormsg = sprintf('MEG/EEG file not specified.');
0472             break;
0473         end
0474     end
0475 
0476     % Output directory/file check
0477     [p_, f_, e_] = vb_get_file_parts([proj_root, '/', bayes_parm.bayesfile]);
0478     if exist(p_, 'dir') ~= 7 || isempty(f_) || isempty(e_)
0479         err = true;
0480         errormsg = sprintf('Output setting for Current variance file is invalid.');
0481     end
0482     
0483     % Project root directory check
0484     if exist(proj_root, 'dir') ~= 7
0485         err = true;
0486         errormsg = sprintf('Project root directory is invalid.');
0487     end
0488

Generated on Tue 27-Aug-2013 11:46:04 by m2html © 2005