Home > vbmeg > functions > job > job_view_cortex_dir > job_view_cortex_selection.m

job_view_cortex_selection

PURPOSE ^

err = job_view_cortex_selection( action, target1, target2 )

SYNOPSIS ^

function err = job_view_cortex_selection( action, target1, target2 )

DESCRIPTION ^

 err = job_view_cortex_selection( action, target1, target2 )

  領域選択の制%
 action : 'undo', 'clear', 'register', 'add', or 'delete'
 target1 : actionが'add'か'delete'のときのみ使用 : 追加/?琉茲了慊?%           'act', 'area', 'mouse', 'dilation', or 'erosion'
 target2 : target1が'act'か'area'のときのみ使用
           'union' or 'intersect'


 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:

SOURCE CODE ^

0001 function err = job_view_cortex_selection( action, target1, target2 )
0002 % err = job_view_cortex_selection( action, target1, target2 )
0003 %
0004 %  領域選択の制%
0005 % action : 'undo', 'clear', 'register', 'add', or 'delete'
0006 % target1 : actionが'add'か'delete'のときのみ使用 : 追加/?琉茲了慊?%           'act', 'area', 'mouse', 'dilation', or 'erosion'
0007 % target2 : target1が'act'か'area'のときのみ使用
0008 %           'union' or 'intersect'
0009 %
0010 %
0011 % Copyright (C) 2011, ATR All Rights Reserved.
0012 % License : New BSD License(see VBMEG_LICENSE.txt)
0013 
0014 H = get( gcf, 'UserData' );
0015 braindata = get( H.braindata, 'UserData' );
0016 actdata = get( H.actdata, 'UserData' );
0017 areadata = get( H.areadata, 'UserData' );
0018 selectdata = get( H.selectdata, 'UserData' );
0019 param = get( H.paramdata, 'UserData' );
0020 
0021 
0022 switch action
0023     
0024  case 'undo'  %-----------------------------------------------------
0025 
0026   if isempty( selectdata.history ); err = 1; return; end
0027   switch selectdata.history(1).flag
0028    case 'add'
0029     selectdata.Vi = setdiff( selectdata.Vi, selectdata.history(1).Vi );
0030    case 'delete'
0031     selectdata.Vi = union( selectdata.Vi, selectdata.history(1).Vi );
0032   end
0033   selectdata.history = selectdata.history( 2:length(selectdata.history) );
0034   set( H.selectdata, 'UserData', selectdata );
0035 
0036 
0037  case 'clear'  %----------------------------------------------------
0038     
0039   if isempty( selectdata.Vi ); err = 1; return; end
0040   newhistory.flag = 'delete';
0041   newhistory.Vi = selectdata.Vi;
0042   selectdata.Vi = [];
0043   if length( selectdata.history ) < param.selection_undo_length
0044     selectdata.history = [ newhistory, selectdata.history ];
0045   else
0046     selectdata.history = [ newhistory,...
0047             selectdata.history(1:length(selectdata.history)-1) ];
0048   end
0049   set( H.selectdata, 'UserData', selectdata );
0050     
0051 
0052  case 'register'  %-------------------------------------------------
0053 
0054   if isempty(areadata.masking)
0055     mask = [1:length(braindata.V)];  % マスクが無け仭澗  else
0056     mask = unique( [ areadata.source(areadata.masking).Vi ] );
0057   end
0058   ind = intersect( selectdata.Vi, mask );
0059   if ~isempty( ind )
0060     areaname = inputdlg( 'Enter Area Name', 'Area Register', 1 );
0061     if isempty(areaname) | isempty(areaname{1})
0062       err = 1; return;
0063     end
0064     sourceindmax = length(areadata.source) + 1;
0065     areadata.source(sourceindmax).Vi = ind;
0066     areadata.source(sourceindmax).key = areaname{1};
0067     areadata.candidate = [ areadata.candidate, sourceindmax ];
0068   end
0069   set( H.areadata, 'UserData', areadata );
0070 
0071 
0072  otherwise  % 'add' or 'delete' ------------------------------------
0073 
0074   % まず、追加/?気??催世鮗萋世垢?
0075   Vi_select = [];
0076   
0077   switch target1
0078 
0079    case 'act' %%%%%
0080     switch param.act_relative_mode
0081      case 'each'
0082       Jabsmax = max( abs( [ actdata.source(actdata.plotted).J ] ) );
0083      case 'all'
0084       Jabsmax = max( abs( [ actdata.source(actdata.candidate).J ] ) );
0085     end
0086     for id = actdata.plotted
0087       J = actdata.source(id).J;
0088       switch param.act_normalize
0089        case 'meshsize'
0090     J = J ./ braindata.Va;
0091       end
0092       switch param.act_min_mode
0093        case 'absolute'
0094     ind = find( abs(J) >= param.act_min );
0095        case 'relative'
0096     ind = find( abs(J) >= Jabsmax * param.act_min );
0097       end
0098       switch target2
0099        case 'union'
0100     Vi_select = union( Vi_select, ind );
0101        case 'intersect'
0102     if id == actdata.plotted(1)
0103       Vi_select = ind;
0104     else
0105       Vi_select = intersect( Vi_select, ind );
0106     end
0107       end
0108     end
0109 
0110 
0111    case 'area' %%%%%
0112     
0113     switch target2
0114      case 'union'
0115       Vi_select = unique( [ areadata.source(areadata.plotted).Vi ] );
0116      case 'intersect'
0117       Vi_select =areadata.source(areadata.plotted(1)).Vi;
0118       for i = areadata.plotted(2:length(areadata.plotted))
0119     Vi_select = intersect( Vi_select, areadata.source(i).Vi );
0120       end
0121     end
0122 
0123    case 'mouse' %%%%%
0124     radius = param.selection_radius;
0125     [ Ps Vs ] = select3d;
0126     switch param.model_type
0127      case 'original'
0128       V = braindata.V;
0129      case 'inflate'
0130       V = braindata.Vinflate;
0131     end
0132     distance = sum( ( V - ones( length(V), 1 ) * Vs' ) .^ 2, 2 );
0133     Vi = find( distance == 0 );
0134     nextind = find( braindata.nextVd{Vi} <= radius * 10^(-3) );
0135     Vi_select = braindata.nextVi{Vi}(nextind);
0136 
0137    case 'dilation' %%%%%
0138     radius = param.dilation_erosion_radius;
0139     Vflag = zeros(1,length(braindata.V));
0140     Vflag(selectdata.Vi) = 1;
0141     for i = selectdata.Vi
0142       nextind = find( braindata.nextVd{i} <= radius * 10^(-3) );
0143       Vflag(braindata.nextVi{i}(nextind)) = 1;
0144     end
0145     Vi_select = find( Vflag == 1 );
0146   
0147    case 'erosion' %%%%%
0148     radius = param.dilation_erosion_radius;
0149     Vflag = ones(1,length(braindata.V));
0150     Vflag(selectdata.Vi) = 0;
0151     for i = find( Vflag )
0152       nextind = find( braindata.nextVd{i} <= radius * 10^(-3) );
0153       Vflag(braindata.nextVi{i}(nextind)) = 1;
0154     end
0155     Vi_select = intersect( find( Vflag == 1 ), selectdata.Vi );
0156 
0157   end % switch target1
0158 
0159 
0160   % 取得した頂点 (Vi_select) を追加/?垢?
0161   switch action
0162    case 'add'  %----------------------------------------------------
0163     Vi_select = setdiff( Vi_select, selectdata.Vi );
0164     if isempty( Vi_select ); err = 1; return; end;
0165     selectdata.Vi = union( selectdata.Vi, Vi_select );
0166     newhistory.flag = 'add';
0167    case 'delete' %--------------------------------------------------
0168     Vi_select = intersect( Vi_select, selectdata.Vi );
0169     if isempty( Vi_select ); err = 1; return; end;
0170     selectdata.Vi = setdiff( selectdata.Vi, Vi_select );
0171     newhistory.flag = 'delete';
0172   end
0173 
0174   newhistory.Vi = Vi_select;
0175   if length( selectdata.history ) < param.selection_undo_length
0176     selectdata.history = [ newhistory, selectdata.history ];
0177   else
0178     selectdata.history = [ newhistory,...
0179             selectdata.history(1:length(selectdata.history)-1) ];
0180   end
0181   set( H.selectdata, 'UserData', selectdata );
0182 
0183 
0184 end
0185 
0186 
0187 err = 0;

Generated on Mon 22-May-2023 06:53:56 by m2html © 2005