0001 function varargout = bayes_parm_editor(obj, command, varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
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
0025
0026
0027
0028 data = guidata(obj);
0029
0030 switch(command)
0031
0032
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
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
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
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
0089
0090 case 'save_bayes_parm'
0091
0092
0093
0094
0095
0096
0097
0098
0099
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
0111 end
0112 case 'load_bayes_parm'
0113
0114
0115
0116
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
0134
0135
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
0143
0144 case 'exec_estimation'
0145
0146
0147
0148
0149
0150
0151
0152
0153
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
0161
0162 case 'time_to_index'
0163 time = varargin{1};
0164 type = varargin{2};
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};
0170 type = varargin{2};
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};
0176 type = varargin{2};
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};
0182 type = varargin{2};
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
0189 guidata(obj, data);
0190
0191 function [index, err] = time_to_index_inner(data, time, file_type)
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
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
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238 catch
0239 err = 2;
0240 end
0241
0242 function [time, err] = index_to_time_inner(data, index, file_type)
0243
0244
0245
0246
0247
0248
0249
0250
0251
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
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
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
0292
0293
0294
0295
0296
0297
0298
0299
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
0322
0323
0324 catch
0325 err = 2;
0326 end
0327
0328 function [time_len, err] = data_len_to_time_len(data, data_len, file_type)
0329
0330
0331
0332
0333
0334
0335
0336
0337
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
0359
0360 catch
0361 err = 2;
0362 end
0363
0364 function [bayes_parm, err, errormsg] = bayes_parm_check(data, bayes_parm)
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376 global vbmeg_inst;
0377 const = vbmeg_inst.const;
0378
0379 err = false;
0380 errormsg = [];
0381
0382
0383 proj_root = bayes_parm_basic_gui(data.basic_fig, 'get_project_root');
0384
0385
0386 if ~isfield(bayes_parm, 'basisfile_global') | isempty(bayes_parm.basisfile_global)
0387 bayes_parm.basisfile_global = bayes_parm.basisfile;
0388 end
0389
0390
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
0396 if ~isfield(bayes_parm, 'Rfilt_global') | isempty(bayes_parm.Rfilt_global)
0397 bayes_parm.Rfilt_global = bayes_parm.Rfilt;
0398 end
0399
0400
0401 if data.a0_act_auto == 1
0402 bayes_parm.a0_act = [];
0403 end
0404
0405
0406
0407
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
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
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
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
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
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
0484 if exist(proj_root, 'dir') ~= 7
0485 err = true;
0486 errormsg = sprintf('Project root directory is invalid.');
0487 end
0488