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

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