Home > functions > gui > current_gui_dir > current_gui.m

current_gui

PURPOSE ^

This function is for using current gui.

SYNOPSIS ^

function varargout = current_gui(varargin)

DESCRIPTION ^

 This function is for using current gui.
 Usage :
    key : 'set_parm', 'get_parm'

      current_gui(fig, 'set_parm', <current_parm>)
        current_parm will be set to launched gui.

      current_gui(fig, 'get_parm')
        make current_parm structure from launched gui
        and returns current_parm.

 inner functions:
   set_parm_gui
   get_parm_gui
   exec
   vb_index_to_time
   vb_time_to_index
   subsmpl_index_to_index
   index_to_subsmpl_index
   data_len_to_time_len
   time_len_to_data_len
   callback
   set_result_file
   read_time_parameters
   change_save_mode
   select_time_window_time_course
   reload_gui_area_file
 Related functions:
   vb_job_current
   job_plot_meg

 --- History
 ??-??-?? Ryosuke Hayashi
 2009-04-02 Taku Yoshioka
  Parameter name changed within this code for readability
  (just replacing 'resultfile' to bayesfile)

 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 = current_gui(varargin)
0002 % This function is for using current gui.
0003 % Usage :
0004 %    key : 'set_parm', 'get_parm'
0005 %
0006 %      current_gui(fig, 'set_parm', <current_parm>)
0007 %        current_parm will be set to launched gui.
0008 %
0009 %      current_gui(fig, 'get_parm')
0010 %        make current_parm structure from launched gui
0011 %        and returns current_parm.
0012 %
0013 % inner functions:
0014 %   set_parm_gui
0015 %   get_parm_gui
0016 %   exec
0017 %   vb_index_to_time
0018 %   vb_time_to_index
0019 %   subsmpl_index_to_index
0020 %   index_to_subsmpl_index
0021 %   data_len_to_time_len
0022 %   time_len_to_data_len
0023 %   callback
0024 %   set_result_file
0025 %   read_time_parameters
0026 %   change_save_mode
0027 %   select_time_window_time_course
0028 %   reload_gui_area_file
0029 % Related functions:
0030 %   vb_job_current
0031 %   job_plot_meg
0032 %
0033 % --- History
0034 % ??-??-?? Ryosuke Hayashi
0035 % 2009-04-02 Taku Yoshioka
0036 %  Parameter name changed within this code for readability
0037 %  (just replacing 'resultfile' to bayesfile)
0038 %
0039 % Copyright (C) 2011, ATR All Rights Reserved.
0040 % License : New BSD License(see VBMEG_LICENSE.txt)
0041 
0042 %if nargin == 0
0043 %    key = 'init';
0044 %else
0045 %    key = varargin{1};
0046 %end
0047 %
0048 %if ~strcmp(key, 'init')
0049 %    h = get(0, 'CurrentFigure');
0050 %    data = figure_load_data(h);
0051 %end
0052 fig = varargin{1};
0053 key = varargin{2};
0054 data = guidata(fig);
0055 
0056 switch(key)
0057     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0058     % --- public
0059     % These interfaces are able to use from external function.
0060     %
0061     case 'set_parm'
0062         current_parm = varargin{3};
0063         data = set_parm_gui(data, current_parm);
0064         data.current_parm = current_parm;
0065     case 'get_parm'
0066         varargout{1} = data.current_parm(data);
0067     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0068     % --- protected
0069     % These interfaces are for current_gui.
0070     % Don't use from external function.
0071     %
0072     case 'callback'
0073         hObj = varargin{3};
0074         data = callback(data.H, hObj, data);
0075         current_parm = get_parm_gui(data);
0076         guidata(fig, data);
0077         current_gui(fig, 'merge_parm', current_parm);
0078     case 'merge_parm'
0079         merge_parm = varargin{3};
0080         parm_names = fieldnames(merge_parm);
0081         for k=1:length(parm_names)
0082             data.current_parm.(parm_names{k}) = merge_parm.(parm_names{k});
0083         end
0084 end
0085 
0086 % Save application data to the figure.
0087 guidata(fig, data);
0088 
0089 function [data] = set_parm_gui(data, current_parm)
0090 % Set parameters to GUI function.
0091 % [IN]
0092 %            data : application data
0093 %    current_parm : current parameter structure.
0094 % [OUT]
0095 %    data : some updated application data
0096 
0097     H = data.H;
0098 
0099     % Set default
0100     if isempty(current_parm) || ~exist('current_parm', 'var')
0101         current_parm = vb_set_current_parm;
0102     end
0103 
0104     % result file
0105     if isfield(current_parm, 'bayesfile') && ~isempty(current_parm.bayesfile)
0106         proj_root = get(H.proj_root_edit, 'String');
0107         if isfield(current_parm, 'megfile')
0108             megfile = current_parm.megfile;
0109         else
0110             megfile = [];
0111         end
0112         [err, t_parm] = set_result_file(H, proj_root, current_parm.bayesfile, megfile);
0113         if ~err, data.time_parm = t_parm; end
0114     end
0115 
0116     % current file
0117     if isfield(current_parm, 'currfile') && ~isempty(current_parm.currfile)
0118         [path_name, file_name, ext] = fileparts(current_parm.currfile);
0119         set(H.save_directory_edit, 'String', path_name);
0120         set(H.current_file_edit, 'String', current_parm.currfile);
0121         update_output_filename(H);
0122     end
0123 
0124     % trial average
0125     if isfield(current_parm, 'trial_average') && ~isempty(current_parm.trial_average)
0126         if current_parm.trial_average == ON
0127             change_trial_average(H, ON);
0128         else
0129             change_trial_average(H, OFF);
0130         end
0131     end
0132 
0133     % tsubsmpl
0134     if isfield(current_parm, 'tsubsmpl') && ~isempty(current_parm.tsubsmpl)
0135         tsubsmpl = current_parm.tsubsmpl;
0136         twin_msec = []; % [from, to] by msec
0137         twin_meg  = []; % [from, to] by sample
0138         step_time = data_len_to_time_len(...
0139                          tsubsmpl(2) - tsubsmpl(1), ...
0140                          data.time_parm); % sample
0141         Nsample = length(tsubsmpl);
0142         % Convert sample number to msec.
0143         [twin_meg(1), err, err_msg] = ...
0144             subsmpl_index_to_index(tsubsmpl(1), data.time_parm);
0145         [twin_msec(1), err, err_msg] = ...
0146             vb_index_to_time(twin_meg(1), data.time_parm);
0147         [twin_meg(2), err, err_msg] = ...
0148             subsmpl_index_to_index(tsubsmpl(Nsample), data.time_parm);
0149         [twin_msec(2), err, err_msg] = ...
0150             vb_index_to_time(twin_meg(2), data.time_parm);
0151         % set time to gui
0152         set(H.time_window_from_edit, 'String', sprintf('%.2f', twin_msec(1)));
0153         set(H.time_window_to_edit, 'String', sprintf('%.2f', twin_msec(2)));
0154         set(H.time_step_edit, 'String', sprintf('%.2f', step_time));
0155     end
0156 
0157     % jactdir
0158     if isfield(current_parm, 'jactdir') && ~isempty(current_parm.jactdir)
0159         if ~isempty(current_parm.jactdir)
0160             set(H.jact_directory_edit, 'String', current_parm.jactdir);
0161             change_save_mode(H, SAVE_MODE_MULTIPLE);
0162         end
0163     end
0164 
0165     % area_file, area_key
0166     if isfield(current_parm, 'areafile') && ~isempty(current_parm.areafile)
0167         if isfield(current_parm, 'area_key')
0168             reload_gui_area_file(H, current_parm.areafile, current_parm.area_key);
0169         else
0170             reload_gui_area_file(H, current_parm.areafile);
0171         end
0172     end
0173 
0174     % flag
0175     current_parm.flag = 0;
0176 
0177     % comment
0178     if isfield(current_parm, 'comment')
0179         set(H.comment_edit, 'String', current_parm.comment);
0180     end
0181 
0182     update_exec_button_state(H);
0183 
0184 % end of set_parm_gui()
0185 
0186 function current_parm = get_parm_gui(data)
0187 % Get parameters function from GUI.
0188 % [IN]
0189 %    data : application data
0190 % [OUT]
0191 %    current_parm : current parameter structure.
0192 
0193     H = data.H;
0194     
0195     current_parm = struct;
0196 
0197     % result file
0198     current_parm.bayesfile = get(H.result_file_edit, 'String');
0199 
0200     % MEG/EEG file
0201     meg_file = get(H.meg_file_edit, 'String');
0202     if ~isempty(meg_file)
0203         current_parm.megfile = meg_file;
0204     end
0205     
0206     % current file
0207     current_file = get(H.current_file_edit, 'String');
0208     current_parm.currfile = current_file;
0209 
0210     % trial average
0211     if get(H.trial_average_on_button, 'Value') == 1
0212         current_parm.trial_average = ON;
0213     else
0214         current_parm.trial_average = OFF;
0215     end
0216 
0217     % tsubsmpl
0218     twin_subsmple = [];
0219     twin_meg  = [];
0220     step_size_str = get(H.time_step_edit, 'String');
0221     twin_from_str = get(H.time_window_from_edit, 'String');
0222     twin_to_str   = get(H.time_window_to_edit, 'String');
0223 
0224     if ~isempty(data.time_parm)
0225         % Step size by sampling length
0226         step_size = time_len_to_data_len(...
0227                         str2double(step_size_str),...
0228                         data.time_parm);
0229         % msec-->index-->subsmpl_index
0230         [twin_meg(1), err, err_msg] = ...
0231             vb_time_to_index(str2double(twin_from_str), data.time_parm);
0232         [twin_meg(2), err, err_msg] = ...
0233             vb_time_to_index(str2double(twin_to_str), data.time_parm);
0234         [twin_subsmple(1), err, err_msg] = ...
0235             index_to_subsmpl_index(twin_meg(1), data.time_parm);
0236         [twin_subsmple(2), err, err_msg] = ...
0237             index_to_subsmpl_index(twin_meg(2), data.time_parm);
0238     
0239         current_parm.tsubsmpl = [twin_subsmple(1):step_size:twin_subsmple(2)];
0240     end
0241 
0242     % jactdir
0243     if get(H.save_file_multiple_button, 'Value') == 1
0244         current_parm.jactdir = get(H.jact_directory_edit, 'String');
0245         if isempty(current_parm.jactdir)
0246             current_parm.jactdir = '.';
0247         end
0248     end
0249 
0250     % area_file, area_key
0251     current_parm.areafile = get(H.area_file_edit, 'String');
0252     area_keys = get(H.area_key_listbox, 'String');
0253     if ischar(area_keys)
0254         current_parm.area_key = area_keys;
0255     else
0256         current_parm.area_key = area_keys{get(H.area_key_listbox, 'Value')};
0257     end
0258 
0259     % flag
0260     current_parm.flag = 0;
0261 
0262     % comment
0263     current_parm.comment = get(H.comment_edit, 'String');
0264 
0265 % end of get_parm_gui()
0266 
0267 function [err] = exec(H, data)
0268 % This function execute vb_job_current() by using gui parameters.
0269 % [IN]
0270 %    H : all handles of components
0271 % [OUT]
0272 %   err : true or false
0273 
0274     err = false;
0275 
0276     proj_root = get(H.proj_root_edit, 'String');
0277     current_parm = get_parm_gui(data);
0278 
0279     str = get(H.exec_push, 'String');
0280     set(H.exec_push, 'String', 'Processing...');
0281     drawnow;
0282     % Execute current estimation
0283     vb_job_current(proj_root, current_parm);
0284     set(H.exec_push, 'String', 'Exec');
0285 
0286 % end of exec()
0287 
0288 function [data] = callback(H, hObj, data)
0289 % GUI event processing function.
0290 % This function is called when user pushes, editing, any action.
0291 % [IN]
0292 %       H : gui component handles.
0293 %    hObj : action component
0294 %    data : application data
0295 % [OUT]
0296 %    data : some updated application data
0297 
0298     global vbmeg_inst;
0299     define = vbmeg_inst.const;
0300 
0301     switch(hObj)
0302         case H.proj_root_push
0303             dir_name = dir_dialog(get(H.proj_root_edit, 'String'));
0304             if dir_name ~= 0
0305                 set(H.proj_root_edit, 'String', dir_name);
0306             end
0307         case H.result_file_push
0308             proj_root = get(H.proj_root_edit, 'String');
0309             [dirname, fnames, cancelled] = pa_prjfile_select(proj_root, ...
0310                                                              {define.BAYES_EXTENSION}, ...
0311                                                              'Select current variance file');
0312             if ~cancelled
0313                 result_file = [dirname, '/', fnames{1}]; % relative from proj_root
0314                 [err, time_parm] = set_result_file(H, proj_root, result_file);
0315                 if ~err
0316                     data.time_parm = time_parm;
0317                 end
0318                 % make output current filename from bayes.mat
0319                 [p_, f_, e_] = vb_get_file_parts(result_file);
0320                 ix = find(f_ == '.');
0321                 if ~isempty(ix)
0322                     set(H.current_file_edit, 'String', ...
0323                                              [f_(1:ix(1)-1), define.CURRENT_EXTENSION]);
0324                 end
0325                 update_output_filename(H);
0326             end
0327         case H.meg_file_push
0328             proj_root = get(H.proj_root_edit, 'String');
0329             [dir fname] = pa_prjfile_select(proj_root, ...
0330                 {define.MEG2_EXTENSION, define.EEG_EXTENSION}, ...
0331                 'Select MEG/EEG file');
0332             if ~isempty(dir)
0333                 meg_file = [dir, filesep, fname{1}];
0334                 set(H.meg_file_edit, 'String', meg_file);
0335                 result_file = get(H.result_file_edit, 'String');
0336                 [err, time_parm] = set_result_file(H, proj_root, result_file, meg_file);
0337                 if ~err
0338                     data.time_parm = time_parm;
0339                 end
0340             end
0341         case {H.trial_average_on_button, H.trial_average_off_button}
0342             if hObj == H.trial_average_on_button
0343                 if get(H.save_file_multiple_button, 'Value')
0344                     change_trial_average(H, OFF);
0345                     uiwait(...
0346                         msgbox(['Set "Save file = single file " '...
0347                                 'before trial average switch ON.'],...
0348                                 'message', 'modal'));
0349                 else
0350                     change_trial_average(H, ON);
0351                 end
0352             else
0353                 change_trial_average(H, OFF);
0354             end
0355         case {H.time_window_from_edit, H.time_window_to_edit}
0356             time_value = str2double(get(hObj, 'String'));
0357             time_index = vb_time_to_index(time_value, data.time_parm);
0358             time_value = vb_index_to_time(time_index, data.time_parm);
0359             set(hObj, 'String', sprintf('%.2f', time_value));
0360         case H.select_time_window_push
0361             time_parm = data.time_parm;
0362             if isempty(time_parm)
0363                 errordlg('first, set result file.', 'error');
0364             else
0365                 select_time_window_time_course(H, time_parm);
0366             end
0367         case H.time_step_edit
0368             [time_len] = str2double(get(hObj, 'String'));
0369             if time_len <= 0
0370                 errordlg('Time step should be positive value.', 'error');
0371                 return;
0372             else
0373                 % Convert inputted time length to multiple number of
0374                 % minimum unit of time length.
0375                 [data_len] = time_len_to_data_len(time_len, data.time_parm);
0376                 [time_len] = data_len_to_time_len(data_len, data.time_parm);
0377                 set(hObj, 'String', sprintf('%.2f', time_len));
0378             end
0379         case H.area_file_push
0380             proj_root = get(H.proj_root_edit, 'String');
0381             [dirname, fnames, cancelled] = pa_prjfile_select(...
0382                                                     proj_root, ...
0383                                                     {define.AREA_EXTENSION}, ...
0384                                                     'Select cortical area file');
0385             if ~cancelled
0386                 area_file = [dirname '/' fnames{1}];
0387                 reload_gui_area_file(H, area_file);
0388             end
0389         case H.area_file_reset_push
0390             set(H.area_file_edit, 'String', []);
0391             set(H.area_key_listbox, 'String', []);
0392             set(H.area_key_listbox, 'Value', 1);
0393         case {H.save_file_single_button, H.save_file_multiple_button}
0394             if hObj == H.save_file_single_button
0395                 % single file
0396                 change_save_mode(H, SAVE_MODE_SINGLE);
0397             else
0398                 % multiple files
0399                 if get(H.trial_average_on_button, 'Value')
0400                     change_save_mode(H, SAVE_MODE_SINGLE);
0401                     uiwait(...
0402                         msgbox(['Set "trial average = OFF" ' ...
0403                                 'before save file multiple mode.'] ,...
0404                                 'message', 'modal'));
0405                 else
0406                     change_save_mode(H, SAVE_MODE_MULTIPLE);
0407                 end
0408             end
0409         case H.save_directory_push
0410             proj_root = get(H.proj_root_edit, 'String');
0411             [dirname, cancelled] = pa_prjdir_select(proj_root);
0412             if ~cancelled
0413                 set(H.save_directory_edit, 'String', dirname);
0414                 update_output_filename(H);
0415             end
0416         case H.exec_push
0417             err = exec(H, data);
0418         case H.advanced_parameter_push
0419             this = data.H.figure;
0420             if ishandle(data.adv_fig)
0421                 figure(data.adv_fig);
0422             else
0423                 data.adv_fig = current_gui_advanced_new(this, data.current_parm);
0424             end
0425     end
0426 
0427     update_exec_button_state(H);
0428 
0429 % end of callback()
0430 
0431 function update_exec_button_state(H)
0432 % This function check status of gui and change exec button status.
0433 % [IN]
0434 %    H : handles of GUI
0435     button_state = 'off';
0436     if ~isempty(get(H.result_file_edit, 'String')) & ...
0437        ~isempty(get(H.time_window_from_edit, 'String')) & ...
0438        ~isempty(get(H.time_window_to_edit, 'String')) & ...
0439        ~isempty(get(H.time_step_edit, 'String')) & ...
0440        ~isempty(get(H.save_directory_edit, 'String')) & ...
0441        ~isempty(get(H.current_file_edit, 'String'))
0442 
0443        button_state = 'on';
0444 %        % Save file single
0445 %        if get(H.save_file_single_button, 'Value')
0446 %            button_state = 'on';
0447 %        else
0448 %        % Save file multiple
0449 %            if ~isempty(get(H.jact_directory_edit, 'String'))
0450 %                button_state = 'on';
0451 %            end
0452 %        end
0453    end
0454 
0455    set(H.exec_push, 'Enable', button_state);
0456 
0457 % end of update_exec_button_state()
0458 
0459 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0460 % subsmpl_index, index, time Conversion
0461 %
0462 % bayes_parm.twin_meg  is meg_data index( = index)
0463 % current_parm.tsubsmpl is bayes_parm.twin_meg index ( = subsmpl_index)
0464 
0465 function [time, err, err_msg] = vb_index_to_time(index, time_parm)
0466 % Convert meg_data index to meg_data time.
0467 % [IN]
0468 %        index : meg_data index number.
0469 %    time_parm : time parameter.
0470 % [OUT]
0471 %        time : time corresponds to sampling data index.
0472 %         err : true or false
0473 %     err_msg : error reason
0474 % [exception]
0475 %     inputted index cannot be processed.
0476 %     check function usage.
0477 
0478     time = [];
0479     err = false;
0480     err_msg = [];
0481 
0482     if isempty(time_parm)
0483         err = true;
0484         err_msg = 'result file is not specified.';
0485         return;
0486     end
0487 
0488     if ~( (time_parm.twin_meg(1) <= index) &&  (index <= time_parm.twin_meg(2)) )
0489         error('vb_index_to_time : inputted index is out of range.');
0490     end
0491 
0492     time = (index - time_parm.pretrigger - 1) * (1000/time_parm.sample_freq);
0493 
0494 % end of vb_index_to_time()
0495 
0496 function [index, err, err_msg] = vb_time_to_index(time, time_parm)
0497 % Convert meg_data time to meg_data index.
0498 % [IN]
0499 %         time : meg_data time.
0500 %    time_parm : time parameter.
0501 % [OUT]
0502 %      index : meg_data index number
0503 %        err : true or false
0504 %    err_msg : error reason
0505 %
0506 
0507     index = [];
0508     err = false;
0509     err_msg = [];
0510 
0511     if isempty(time_parm)
0512         err = true;
0513         err_msg = 'result file is not specified.';
0514         return;
0515     end
0516 
0517     index = round(time * (time_parm.sample_freq/1000) + time_parm.pretrigger + 1);
0518 
0519     % out of range is checked and collect(set min or max).
0520     if index < time_parm.twin_meg(1), index = time_parm.twin_meg(1); end;
0521     if time_parm.twin_meg(2) < index, index = time_parm.twin_meg(2); end;
0522 
0523 % end of vb_time_to_index()
0524 
0525 function [data_len, err, err_msg] = time_len_to_data_len(time_len, time_parm)
0526 % Convert time length to sampling length.
0527 % [IN]
0528 %     time_len : time length.
0529 %    time_parm : time parameter.
0530 % [OUT]
0531 %    data_len : data length(sample)
0532 %         err : true or false
0533 %     err_msg : error reason
0534 
0535     data_len = [];
0536     err = false;
0537     err_msg = [];
0538 
0539     if time_len <= 0;
0540         err = true; 
0541         err_msg = 'Time length should be positive value.';
0542         return;
0543     end
0544     if isempty(time_parm)
0545         err = true;
0546         err_msg = 'result file is not specified.';
0547         return;
0548     end
0549 
0550     data_len = ceil(time_len * (time_parm.sample_freq/1000));
0551     twin_meg = time_parm.twin_meg;
0552 
0553 % end of time_len_to_data_len()
0554 
0555 function [time_len, err, err_msg] = data_len_to_time_len(data_len, time_parm)
0556 % Convert sampling number to time length.
0557 % [IN]
0558 %     data_len : sampling number.
0559 %    time_parm : time parameter.
0560 % [OUT]
0561 %    time_len : time length
0562 %         err : true or false
0563 %     err_msg : error reason
0564 % [exception]
0565 %     inputted data_len cannot be processed.
0566 %     check function usage.
0567 
0568     time_len = [];
0569     err = false;
0570     err_msg = [];
0571 
0572     data_len_int = double(int64(data_len));
0573     if( data_len <=0 || (data_len - data_len_int) > 0 )
0574         error('data_len_to_time_len : data_len should be positive integer.');
0575     end
0576     if isempty(time_parm)
0577         err = true;
0578         err_msg = 'result file is not specified.';
0579         return;
0580     end
0581 
0582     data_len = ceil(data_len);
0583     time_len = data_len * (1000/time_parm.sample_freq);
0584 
0585 % end of data_len_to_time_len()
0586 
0587 function [subsmpl_index, err, err_msg] = index_to_subsmpl_index(index, time_parm)
0588 % Convert meg_data index to tsubsmpl index
0589 % [IN]
0590 %        index : meg_data index number.
0591 %    time_parm : time parameter.
0592 % [OUT]
0593 %    subsmpl_index : current_parm.tsubsmpl index.
0594 %              err : true or false
0595 %          err_msg : error reason
0596 % [exception]
0597 %     inputted index cannot be processed.
0598 %     check function usage.
0599 
0600     subsmpl_index = [];
0601     err = false;
0602     err_msg = [];
0603 
0604     index_int = double(int64(index));
0605     if( index <= 0 || (index_int - index) > 0 )
0606         error('index_to_subsmpl_index : index should be positive integer.');
0607     end
0608     if isempty(time_parm)
0609         err = true;
0610         err_msg = 'result file is not specified.';
0611         return;
0612     end
0613 
0614     if ~( (time_parm.twin_meg(1) <= index) &&  (index <= time_parm.twin_meg(2)) )
0615         error('index_to_subsmpl_index : inputted index is out of range.');
0616     end
0617     subsmpl_index = index - time_parm.twin_meg(1) + 1;
0618 
0619 % end of index_to_subsmpl_index()
0620 
0621 function [index, err, err_msg] = subsmpl_index_to_index(subsmpl_index, time_parm);
0622 % Convert curret_parm.tsubsmpl index to meg_data index
0623 % [IN]
0624 %    subsmpl_index : current_parm.tsubsmpl index.
0625 %        time_parm : time parameter.
0626 % [OUT]
0627 %      index : meg_data index number.
0628 %        err : true or false
0629 %    err_msg : error reason
0630 % [exception]
0631 %     inputted subsmpl_index cannot be processed.
0632 %     check function usage.
0633 
0634     index = [];
0635     err = false;
0636     err_msg = [];
0637 
0638     subsmpl_int = double(int64(subsmpl_index));
0639     if( subsmpl_index <= 0 || (subsmpl_index - subsmpl_int) > 0 )
0640         error('subsmpl_index_to_index : subsmple_index should be positive integer.');
0641     end
0642     if isempty(time_parm)
0643         err = true;
0644         err_msg = 'result file is not specified.';
0645         return;
0646     end
0647 
0648     index = ceil(subsmpl_index) + time_parm.twin_meg(1) - 1;
0649     if ~( (time_parm.twin_meg(1) <= index) &&  (index <= time_parm.twin_meg(2)) )
0650         error('subsmpl_index_to_index : inputted subsmpl_index is out of range.');
0651     end
0652 
0653 % end of subsmpl_index_to_index()
0654 
0655 function [err, time_parm] = set_result_file(H, proj_root, result_file, meg_file)
0656 % This function read result file and initialize gui of timewindow part.
0657 % [IN]
0658 %              H : gui component handles
0659 %      proj_root : project root directory
0660 %    result_file : result_file(relative path from proj_root)
0661 %       meg_file : external meg file(optional:relative path from prj_root)
0662 %
0663 % [OUT]
0664 %          err : true(file read failed.) or false
0665 %    time_parm : time parameter
0666 
0667     err = false;
0668 
0669     % Read time parameter from result file
0670     if ~exist('meg_file', 'var')
0671         meg_file = [];
0672     end
0673     [time_parm, err, err_msg] = read_time_parameters(proj_root, result_file, meg_file);
0674     if err
0675         errordlg(['result file read error occured -- detail :' err_msg], 'error');
0676     else
0677         %
0678         %--- Initialize gui of timewindow part.
0679         %
0680 
0681         % result file name
0682         set(H.result_file_edit, 'String', result_file);
0683 
0684         % time window
0685         [time] = vb_index_to_time(time_parm.twin_meg(1), time_parm);
0686         set(H.time_window_from_edit, 'String', sprintf('%.2f', time)); 
0687         [time] = vb_index_to_time(time_parm.twin_meg(2), time_parm);
0688         set(H.time_window_to_edit, 'String', sprintf('%.2f', time));
0689 
0690         % time step
0691         [time_len] = data_len_to_time_len(1, time_parm); % 1 sample step
0692         set(H.time_step_edit, 'String', num2str(time_len-0.001));
0693         
0694         % meg_file
0695         set(H.meg_file_edit, 'String', time_parm.meg_file);
0696         set(H.meg_file_edit, 'Enable', 'on');
0697         set(H.meg_file_push, 'Enable', 'on');
0698     end
0699 
0700 % end of set_result_file()
0701 
0702 function [time_parm, err, err_msg] = read_time_parameters(proj_root, result_file, meg_file)
0703 % This function read result file and meg_file and make 'time_parm' structure.
0704 % [IN]
0705 %       proj_root : project root directory
0706 %     result_file : result file name(relative path from proj_root)
0707 %        meg_file : external meg file input(relative path from proj_root)
0708 % [OUT]
0709 %      time_parm : time parameters
0710 %            err : true(failed to read file) or false.
0711 %        err_msg : error reason string.
0712 %
0713 
0714     time_parm = [];
0715     err = false;
0716     err_msg = [];
0717     if ~exist('meg_file', 'var')
0718         meg_file = [];
0719     end
0720 
0721     % load bayes_parm
0722     result_file = [proj_root, '/', result_file]; % absolute path
0723     
0724     if ~exist(result_file, 'file'), 
0725         err = true;
0726         err_msg = 'result file does not exist.';
0727         return;
0728     end;
0729     load(result_file, 'bayes_parm');
0730 
0731     % load Meg data time parameter.
0732     if isempty(meg_file)
0733         meg_file = bayes_parm.megfile{1};
0734     end
0735 
0736 
0737     meg_file_abs = [proj_root, '/', meg_file];    % absolute path
0738     if ~exist(meg_file_abs, 'file')
0739         err = true;
0740         err_msg = 'megfile does not exist.';
0741         return;
0742     end
0743     [MEGinfo] = vb_load_meg_info(meg_file_abs);
0744 
0745     % make time parameter
0746     time_parm = struct;
0747     time_parm.meg_file    = meg_file;
0748     time_parm.pretrigger  = vb_meginfo_get_pre_trigger(MEGinfo);
0749     time_parm.sample_freq = vb_meginfo_get_sampling_frequency(MEGinfo);
0750     time_parm.Nsample     = vb_meginfo_get_sample_number(MEGinfo);
0751     time_parm.twin_meg    = bayes_parm.twin_meg;
0752 
0753 % end of read_time_parameters()
0754 
0755 function change_save_mode(H, mode)
0756 % This function changes save file mode on gui.
0757 % [IN]
0758 %       H : component handles of gui
0759 %    mode : SAVE_MODE_SINGLE or SAVE_MODE_MULTIPLE
0760 
0761     switch(mode)
0762         case SAVE_MODE_SINGLE
0763             set(H.save_file_single_button, 'Value', 1);
0764             set(H.save_file_multiple_button, 'Value', 0);
0765             set(H.jact_directory_text, 'Visible', 'off');
0766             set(H.jact_directory_text2, 'Visible', 'off');
0767             set(H.jact_directory_edit, 'Visible', 'off');
0768         case SAVE_MODE_MULTIPLE
0769             set(H.save_file_single_button, 'Value', 0);
0770             set(H.save_file_multiple_button, 'Value', 1);
0771             % 20091008 rhayashi visible on
0772             set(H.jact_directory_text, 'Visible', 'on');
0773             set(H.jact_directory_text2, 'Visible', 'on');
0774             set(H.jact_directory_edit, 'Visible', 'on');
0775     end
0776 
0777 % end of change_save_mode()
0778 
0779 function update_output_filename(H)
0780 % This function update output filenames(current file, jact directory).
0781 % [IN]
0782 %       H : component handles of gui.
0783 
0784     save_dir = get(H.save_directory_edit, 'String');
0785 
0786     current_file_edit = get(H.current_file_edit, 'String');
0787     jact_dir_edit = get(H.jact_directory_edit, 'String');
0788 
0789 %    [path_name, current_file, ext_cur] = fileparts(current_file_edit);
0790 %    [path_name, jact_dir] = fileparts(jact_dir_edit);
0791     [path_name, current_file, ext_cur] = vb_get_file_parts(current_file_edit);
0792     [path_name, jact_dir] = vb_get_file_parts(jact_dir_edit);
0793 
0794     set(H.current_file_edit, 'String', [save_dir, '/', current_file, ext_cur]);
0795 %    set(H.jact_directory_edit, 'String', [save_dir]);
0796 
0797 % end of update_output_filename()
0798 
0799 function change_trial_average(H, mode)
0800 % This function changes trial average mode on gui.
0801 % [IN]
0802 %       H : component handles of gui.
0803 %    mode : ON or OFF
0804 
0805     switch(mode)
0806         case ON
0807             set(H.trial_average_on_button, 'Value', 1);
0808             set(H.trial_average_off_button, 'Value', 0);
0809         case OFF
0810             set(H.trial_average_on_button, 'Value', 0);
0811             set(H.trial_average_off_button, 'Value', 1);
0812     end
0813 
0814 % end of change_trial_average()
0815 
0816 function select_time_window_time_course(H, time_parm)
0817 % This function launch job_plot_meg and set selected time window to gui.
0818 % [IN]
0819 %            H : component handles
0820 %    time_parm :
0821     %
0822     % --- Time window setting in current_gui.
0823     %
0824     twin_ini = [];
0825     [twin_ini(1)] = vb_time_to_index(...
0826                     str2double(get(H.time_window_from_edit, 'String')), time_parm);
0827     [twin_ini(2)] = vb_time_to_index(...
0828                     str2double(get(H.time_window_to_edit, 'String')), time_parm);
0829     %
0830     %  --- launch time window selection gui
0831     %
0832 
0833     % hide current_gui figure handle not to be painted from
0834     % job_plot_meg.
0835     gui_cancelled = true;
0836     set(H.figure, 'HandleVisibility', 'off'); 
0837     try
0838         proj_root = get(H.proj_root_edit, 'String');
0839         meg_file  = [proj_root, '/', time_parm.meg_file];
0840         [twin_meg, gui_cancelled] = ...
0841             job_plot_meg(meg_file, ...          % meg file
0842                         2, ...                  % intaraction mode
0843                         time_parm.twin_meg, ... % selectable range
0844                         twin_ini);              % initial selected range
0845     catch
0846         [last_msg, last_id] = lasterr;
0847         errordlg(last_msg, 'error');
0848     end
0849     set(H.figure, 'HandleVisibility', 'on');
0850     % set time window from job_plot_meg selection
0851     if ~gui_cancelled
0852         [time] = vb_index_to_time(twin_meg(1), time_parm);
0853         set(H.time_window_from_edit, 'String', sprintf('%.2f', time));
0854         [time] = vb_index_to_time(twin_meg(2), time_parm);
0855         set(H.time_window_to_edit, 'String', sprintf('%.2f', time));
0856     end
0857 
0858 % end of select_time_window_time_course()
0859 
0860 function reload_gui_area_file(H, area_file, area_key)
0861 % This function sets area_file data to gui.
0862 % [IN]
0863 %            H : gui component handles.
0864 %    area_file : area file(relative path)
0865 %  --- optional
0866 %     area_key : area_key string.
0867 %                If area_keys match this string, set focus.
0868 
0869     % set gui to area filename
0870     set(H.area_file_edit, 'String', area_file);
0871 
0872     % get area keys
0873     keys = {};
0874     proj_root = get(H.proj_root_edit, 'String');
0875     area_file = [proj_root '/' area_file];
0876 
0877     if exist(area_file, 'file') ~= 2
0878         return;
0879     end
0880 
0881     load(area_file, 'Area');
0882     for n = 1 : length(Area)
0883         keys{n} = Area{n}.key;
0884     end
0885 
0886     % search focus line when area_key is specified.
0887     if exist('area_key', 'var')
0888         focus_line = strmatch(area_key, keys, 'exact');
0889         if isempty(focus_line), focus_line = 1; end;
0890     else
0891         focus_line = 1;
0892     end
0893 
0894     % set area keys to the popup
0895     set(H.area_key_listbox, 'String', keys);
0896     set(H.area_key_listbox, 'Value', focus_line);
0897 
0898 % end of reload_gui_area_file()
0899 
0900 %
0901 %  --- Define constants
0902 %
0903 function v = DEFAULT_CURRENT_FNAME
0904     v = 'current.curr.mat';
0905 function v = SAVE_MODE_SINGLE
0906     v = 1;
0907 function v = SAVE_MODE_MULTIPLE
0908     v = 2;
0909 function v = OVERLAPPED_MODE
0910     v = 1;
0911 function v = CONCATENATE_MODE
0912     v = 2;
0913 function v = APPLICATION_NAME
0914     v = 'Current estimation';

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