No BSD License  

Highlights from
Neurocal

image thumbnail
from Neurocal by Zeng Lertmanorat
Simulation describing the electrical activity of nerve cell (neuron) by solving cable equation

neuroFEM_ana(varargin)
%This function is called by NeuroFEA. It allows you to choose and plot Ve of any axon loaded in NeuroFEA.

function varargout = neuroFEM_ana(varargin)
global zeng zeng2
switch varargin{1}
case 'initial'
    Parent_Size=get(varargin{2},'position');
    FG_Size=[Parent_Size(1) Parent_Size(2)-90-40  200 90];
    ScreenSize=get(0,'ScreenSize');
    if FG_Size(2)<100;
        FG_Size(2)=Parent_Size(2)+Parent_Size(4)+45;
    end
    temp=findobj('type','figure','tag','ZengAnalysis_neuroFEM_ana');
    if ~isempty(temp)
        set(temp,'position',FG_Size);
        figure(temp)
    else
        %------------------------------------
        FEMana.parent=varargin{2};
        FEMana.figure = figure('Color',[0.8 0.8 0.8], ...
            'MenuBar','none',...
            'Name','NeuroFEA',...
            'NumberTitle','off',...
        	'Position',FG_Size, ...
            'tag','ZengAnalysis_neuroFEM_ana',...
        	'ToolBar','none');
        set(FEMana.figure,'position',FG_Size)
        uicontrol('Parent',FEMana.figure, ...
            'Units','pixel', ...
        	'BackgroundColor',[0.85 0.8 0.75], ...
            'callback','neuroFEM_ana(''Select Axon'')',...
	      'ListboxTop',0, ...
    	    	'Position',[10 45 60 25], ...
            'String','Dia', ...
    	    	'Tag','Pushbutton');
        FEMana.text.Axon=uicontrol('Parent',FEMana.figure, ...
        	'Units','pixel', ...
	    	'BackgroundColor',[1 1 1], ...
	    	'ListboxTop',0, ...
	    	'Position',[75 45 80 25], ...
        	'String',' ', ...
        	'style','text');
        uicontrol('Parent',FEMana.figure, ...
        	'Units','pixel', ...
	    	'BackgroundColor',[0.85 0.8 0.75], ...
        	'callback','neuroFEM_ana(''Apply'')',...
	    	'ListboxTop',0, ...
	    	'Position',[75 10 60 25], ...
        	'String','Apply', ...
	    	'Tag','Pushbutton');
        uicontrol('Parent',FEMana.figure, ...
        	'Units','pixel', ...
	    	'BackgroundColor',[0.85 0.8 0.75], ...
        	'callback','neuroFEM(''Apply'',''neuroFEM_ana'')',...
	    	'ListboxTop',0, ...
	    	'Position',[10 10 60 25], ...
        	'String','Reload', ...
	    	'Tag','Pushbutton');
        set(FEMana.figure,'userdata',FEMana)
    end
case 'Select Axon'
    FEMana=get(gcf,'userdata');
    ZengFEM=get(FEMana.parent,'userdata');
    if isempty(ZengFEM.Group(1).vestim)
        neuroFEM('Apply','neuroFEM_ana')
        ZengFEM=get(FEMana.parent,'userdata');
    end
    axes(ZengFEM.axes)
    yz=ginput(1);
    for i=1:length(ZengFEM.Group)
        [ymin(1) ymin(2)]=min(abs(ZengFEM.Group(i).xyzd(:,2)-yz(1)));
        [zmin(1) zmin(2)]=min(abs(ZengFEM.Group(i).xyzd(:,3)-yz(2)));
        temp=find(ZengFEM.Group(i).xyzd(:,2)==ZengFEM.Group(i).xyzd(ymin(2),2) & ZengFEM.Group(i).xyzd(:,3)==ZengFEM.Group(i).xyzd(zmin(2),3));
        if ~isempty(temp)
            FEMana.Group_i=i;
            FEMana.Axon_i=temp;
            set(FEMana.text.Axon,'string',[num2str(ZengFEM.Group(i).xyzd(temp,2)) ' ' num2str(ZengFEM.Group(i).xyzd(temp,3)) ' = ' num2str(ZengFEM.Group(i).xyzd(temp,4))])
            set(FEMana.figure,'userdata',FEMana)
        end
    end
case 'Apply'
    for tempzeng=1:length(zeng2.varlist)
        feval('global',zeng2.varlist{tempzeng})
    end
    FEMana=get(gcf,'userdata');
    ZengFEM=get(FEMana.parent,'userdata');
    Good_to_go = neuroFEM('Check Value',ZengFEM.figure);
    if ~Good_to_go
        return
    end
    ZengFEM=get(FEMana.parent,'userdata');
    eval([zeng2.var{1}.name '.nseg=ZengFEM.Group(FEMana.Group_i).nseg(FEMana.Axon_i);'])
    eval([zeng2.var{1}.name '.dia =ZengFEM.Group(FEMana.Group_i).xyzd(FEMana.Axon_i,4);'])
    eval([zeng2.var{1}.name '.L   =ZengFEM.Group(FEMana.Group_i).L(FEMana.Axon_i);'])
    Temp=ZengFEM.multiple*ZengFEM.Group(FEMana.Group_i).vestim(1:ZengFEM.Group(FEMana.Group_i).nseg(FEMana.Axon_i),FEMana.Axon_i);
    Temp2=zeros(length(Temp),length(zeng.Iexstim));
    for k=1:length(zeng.Iexstim)
        Temp2(:,k)=Temp*zeng.Iexstim(k).amp;
    end
    eval([zeng2.var{1}.name '.vestim  =Temp2;'])
    zexst('calculate');
end

Contact us at files@mathworks.com