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(varargin)
function varargout = neuroFEM(varargin)
global zeng zeng2
switch varargin{1}
case 'initial'
    Parent_Size=get(varargin{2},'position');
    FG_Size=[Parent_Size(1) Parent_Size(2)-400-50  560 400];
    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');
    if ~isempty(temp)
        set(temp,'position',FG_Size);
        figure(temp)
    else
        %model setup-----------------------------------------------------
        zexst('open model file','FEA_Iext_axon_with_myelin.m');
        %/model setup-----------------------------------------------------
        zeng2.options.vestim=2; %1=calculated, 2=imported
        zexst('change options','vestim',2);
        zexst('DeleteFcn')
        %------------------------------------
        zeng.dtmode=1;
        zeng.dt=0.5;
        %------------------------------------
        ZengFEM.Sim_i=1:10;
        ZengFEM.Ierr=20; %0-30%
        ZengFEM.Bin_Size=1;
        ZengFEM.Simple_mode=0; %0 = complicated, 1 = simple
        %------------------------------------
        ZengFEM.Axon_Fired=[];
        ZengFEM.Axon_Total=[];
        ZengFEM.Iamp_Fired=[];
        %------------------------------------
        ZengFEM.Path=[];
        ZengFEM.Linter_D=0;
        ZengFEM.multiple=1;
        ZengFEM.Dfired=[];
        ZengFEM.xyzd_fired=[];
        ZengFEM.setting=[];
        ZengFEM.Group=[];
        %------------------------------------
        ZengFEM.settingdefault.Filename=[];
        ZengFEM.settingdefault.Group=[];
        ZengFEM.settingdefault.FEM=[];
        ZengFEM.settingdefault.yz=[];
        ZengFEM.settingdefault.number_Sites=[];
       %------------------------------------
        ZengFEM.Groupdefault.Filename=[];
        ZengFEM.Groupdefault.Axon_Filename=[];
        ZengFEM.Groupdefault.Axon_Path=[];
        ZengFEM.Groupdefault.ID=[];
        ZengFEM.Groupdefault.axons=[];
        ZengFEM.Groupdefault.number_Axons=[];
        ZengFEM.Groupdefault.nseg=[];
        ZengFEM.Groupdefault.L=[];
        ZengFEM.Groupdefault.vestim=[];
        ZengFEM.Groupdefault.vestim_Real=[];
        ZengFEM.Groupdefault.vestim_Group=[];
        ZengFEM.Groupdefault.vestim_Group_Real=[];
 
        ZengFEM.Groupdefault.xyzd=[];
        ZengFEM.Groupdefault.fired=[];
        ZengFEM.Groupdefault.Iamp=[];
        ZengFEM.Groupdefault.Iamp_Real=[];
        ZengFEM.Groupdefault.FEM_Mul=[];
        ZengFEM.Groupdefault.FEM_fired=[];
        %------------------------------------
        ZengFEM.Dmmr=zeros(1,3);
        ZengFEM.ZLimfire=[-90 100];
        ZengFEM.ZLimnotfire=[-90 0];
        %------------------------------------
        ZengFEM.figure = figure('Color',[0.8 0.8 0.8], ...
            'MenuBar','none',...
            'Name','NeuroFEA',...
            'NumberTitle','off',...
        	'Position',FG_Size, ...
            'ResizeFcn','neuroFEM(''ResizeFcn'');',...
            'tag','ZengAnalysis_NeuroFEM',...
        	'ToolBar','none');
        set(ZengFEM.figure,'position',FG_Size)
        uicontrol('Parent',ZengFEM.figure, ...
            'Units','pixel', ...
	        'BackgroundColor',[0.85 0.8 0.75], ...
            'callback','neuroFEM(''Load FEM'')',...
	        'ListboxTop',0, ...
    	    'Position',[10 360 60 25], ...
            'String','Load FEM', ...
    	    'Tag','Pushbutton');
        ZengFEM.text.FEM=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[1 1 1], ...
	    'ListboxTop',0, ...
	    'Position',[75 360 80 25], ...
        'String','FEM file', ...
        'style','text');
        uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.85 0.8 0.75], ...
        'callback','neuroFEM(''Load Axon'')',...
	    'ListboxTop',0, ...
	    'Position',[10 325 60 25], ...
        'String','Load Axon', ...
	    'Tag','Pushbutton');
        ZengFEM.text.Axon=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[1 1 1], ...
	    'ListboxTop',0, ...
	    'Position',[75 325 80 25], ...
        'String','Axon file', ...
        'style','text');
        uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.8 0.8 0.8], ...
	    'ListboxTop',0, ...
	    'Position',[10 290 60 25], ...
        'String','Multiple', ...
        'style','text');
        ZengFEM.edit.mul=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[1 1 1], ...
	    'ListboxTop',0, ...
	    'Position',[75 290 80 25], ...
        'String',num2str(ZengFEM.multiple), ...
        'style','edit');
        uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.8 0.8 0.8], ...
	    'ListboxTop',0, ...
	    'Position',[10 220 60 25], ...
        'String','Step(us)', ...
        'style','text');
        ZengFEM.edit.dt=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[1 1 1], ...
	    'ListboxTop',0, ...
	    'Position',[75 220 80 25], ...
        'String',num2str(zeng.dt), ...
        'style','edit');
        uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.8 0.8 0.8], ...
	    'ListboxTop',0, ...
	    'Position',[10 185 60 25], ...
        'String','Start (us)', ...
        'style','text');
        ZengFEM.edit.start=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[1 1 1], ...
	    'ListboxTop',0, ...
	    'Position',[75 185 80 25], ...
        'String',num2str(50), ...
        'style','edit');
        uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.8 0.8 0.8], ...
	    'ListboxTop',0, ...
	    'Position',[10 150 60 25], ...
        'String','Stop (us)', ...
        'style','text');
        ZengFEM.edit.stop=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[1 1 1], ...
	    'ListboxTop',0, ...
	    'Position',[75 150 80 25], ...
        'String',num2str(300), ...
        'style','edit');
        uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.8 0.8 0.8], ...
	    'ListboxTop',0, ...
	    'Position',[10 115 60 25], ...
        'String','Threshold (mV)', ...
        'style','text');
        ZengFEM.edit.Threshold=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[1 1 1], ...
	    'ListboxTop',0, ...
	    'Position',[75 115 80 25], ...
        'String',num2str(75), ...
        'style','edit');
        ZengFEM.pop.target=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[1 1 1], ...
	    'ListboxTop',0, ...
	    'Position',[15 80 60 25], ...
        'String',{'None';'#Axons';'Mul Amp'}, ...
        'style','pop',...
        'value',1);
        ZengFEM.edit.target=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[1 1 1], ...
	    'ListboxTop',0, ...
	    'Position',[75 80 80 25], ...
        'String','0', ...
        'style','edit');
        ZengFEM.check.history=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.8 0.8 0.8], ...
	    'ListboxTop',0, ...
	    'Position',[15 45 80 25], ...
        'String','Keep history', ...
        'style','check',...
        'value',1);
        ZengFEM.check.see_result=uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.8 0.8 0.8], ...
	    'ListboxTop',0, ...
	    'Position',[100 45 80 25], ...
        'String','See results', ...
        'style','check',...
        'value',0);
        uicontrol('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.85 0.8 0.75], ...
        'callback','neuroFEM(''Apply'')',...
	    'ListboxTop',0, ...
	    'Position',[50 10 60 25], ...
        'String','Apply', ...
	    'Tag','Pushbutton');
    ZengFEM.axes=axes('Parent',ZengFEM.figure, ...
        'Units','pixel', ...
	    'Position',[185 20 FG_Size(3)-200 FG_Size(4)-30],...
        'tag','axes');
        temp=uimenu('parent',ZengFEM.figure,'label','File');
        uimenu(temp,'callback','neuroFEM(''fired axons'')','label','Save fired axons');
        uimenu('parent',ZengFEM.figure,'label','Analysis','callback','neuroFEM_ana(''initial'',gcf)');
        set(ZengFEM.figure,'userdata',ZengFEM)
    end
case 'fired axons'
    ZengFEM=get(findobj('type','figure','tag','ZengAnalysis_NeuroFEM'),'userdata');
    if isempty(ZengFEM.Dfired)
        zexst('err','You have not run the simulation yet')
        return
    end
    if nargin==1
        Default_Name=get(ZengFEM.text.FEM ,'String');
        if iscell(Default_Name)
   	        Default_Name=Default_Name{1};
        end
        [Filename Path]=uiputfile([ZengFEM.Path Default_Name '.fir']);
    else
        Filename=varargin{2};
        Path=varargin{3};
    end
    if ~strcmp('0',num2str(Filename)) & ~strcmp('0',num2str(Path));
        Have_dot=find(Filename=='.');
        if isempty(Have_dot)
      	    Filename=[Filename '.fir'];   
        end
        dlmwrite([Path Filename],'');
        FID=fopen([Path Filename],'w');
        fprintf(FID,'%d \t %d\n',[ [ZengFEM.Plot_range_all];ZengFEM.Dfired]);
        Status=fclose(FID);
    end
case 'ResizeFcn'
    FEMfigure=findobj('type','figure','tag','ZengAnalysis_NeuroFEM');
    FG_Size=get(FEMfigure,'position');
    FG_Size(3:4)=[max(FG_Size(3),250) max(FG_Size(4),250)];
    FEMaxes=findobj(FEMfigure,'type','axes','tag','axes');
    temp=findobj(FEMfigure,'type','axes','tag','Colorbar');
    if isempty(temp)
        set(FEMaxes,'position',[185 20 FG_Size(3)-200 FG_Size(4)-30]);
    else
        set(FEMaxes,'position',[185 20 FG_Size(3)-250 FG_Size(4)-30]);
    end
case 'Load FEM'
    ZengFEM=get(findobj('type','figure','tag','ZengAnalysis_NeuroFEM'),'userdata');
    [Filename Path]=uigetfile([zeng2.cd zeng2.FILESEP 'FEM' zeng2.FILESEP '*.fea']);
    if ~strcmp('0',num2str(Filename)) & ~strcmp('0',num2str(Path));
    else
        return
    end
    ZengFEM.Path=Path;
    ZengFEM.Dfired=[];
    if isempty(ZengFEM.setting) | ZengFEM.Simple_mode
        Group_number=1;
        Group_decision=1;
        ZengFEM.setting=ZengFEM.settingdefault;
        ZengFEM.setting.Filename=Filename;
        ZengFEM.setting.Group=1;
        ZengFEM.Group=ZengFEM.Groupdefault;
        ZengFEM.Group.Filename=Filename;
        ZengFEM.Group.ID=[1];
        if ZengFEM.Simple_mode
            ZengFEM.Group.Iamp=1;
        else
            Iamp=input('Iamp [-1 +1] = ');
            ZengFEM.Group.Iamp=Iamp;
        end
    else
        disp(['--------------------------------------'])
        disp(['New file = ' Filename])
        Group_decision=input(['What to do with this file? \n 1=Replace \n 2=New Group \n 3=Joy Group \n []=Cancel \n = ']);
        if Group_decision==1 %1=Replace
            Group_number=1;
            ZengFEM.setting=ZengFEM.settingdefault;
            ZengFEM.setting.Filename=Filename;
            ZengFEM.setting.Group=1;
            ZengFEM.Group=ZengFEM.Groupdefault;
            ZengFEM.Group.Filename=Filename;
            ZengFEM.Group.ID=[1];
            Iamp=input('Iamp [-1 +1] = ');
            ZengFEM.Group.Iamp=Iamp;
            ZengFEM.Dmmr=zeros(1,3);
        elseif isempty(Group_decision) | Group_decision>3
            return
        else
            Group_length=length(ZengFEM.Group);
            for i=1:length(ZengFEM.setting)
                if strcmp(Filename,ZengFEM.setting(i).Filename)
                    zexst('err','You already have this file.');
                    return
                end
            end
            Setting_number=length(ZengFEM.setting)+1;
            ZengFEM.setting(Setting_number).Filename=Filename;
            if Group_decision==2 %2=New Group
                Group_number=Group_length+1;
                ZengFEM.setting(Setting_number).Group=Group_number;
                ZengFEM.Group(Group_number).Filename=Filename;
                ZengFEM.Group(Group_number).ID=[Setting_number];
                Iamp=input('Iamp [-1 +1] = ');
                ZengFEM.Group(Group_number).Iamp=Iamp;
                

            elseif Group_decision==3 %3=Group
                for i=1:Group_length
                    disp([num2str(i) '=' ZengFEM.Group(i).Filename]);
                end
                Group_number=input('Which one do you want = ');
                if isempty(Group_number) | Group_number>Group_length
                    return
                else
                    ZengFEM.setting(Setting_number).Group=Group_number;
                    ZengFEM.Group(Group_number).ID=[ZengFEM.Group(Group_number).ID Setting_number];
                    Iamp=input('Iamp [-1 +1] = ');
                    ZengFEM.Group(Group_number).Iamp=[ZengFEM.Group(Group_number).Iamp Iamp];
                end
            end
        end
    end%if isempty(ZengFEM.setting)
    Setting_number=length(ZengFEM.setting);
    %-----------------------------------------
    [ZengFEM.setting(Setting_number).FEM ZengFEM.setting(Setting_number).yz ZengFEM.setting(Setting_number).number_Sites]=neuroFEM('Import FEM',[Path Filename]);   
    %-----------------------------------------
    if size(ZengFEM.setting(Setting_number).FEM,2)~=4
        zexst('err','Bad file')
        return
    end
    dot=find(Filename=='.');
    if isempty(dot)
    else
        Filename=Filename(1:(dot-1));
    end
    set(ZengFEM.text.FEM ,'String',Filename);
    set(ZengFEM.figure,'userdata',ZengFEM)
    if Group_decision~=3
        neuroFEM('draw axons',ZengFEM.axes)
    else
%        figure
%        Temp=axes;
%        neuroFEM('draw axons',Temp)
    end
case 'Import FEM'
    %in1= [Path Filename]
    %out1=FEM
    %out2=yz
    %out3=number_Sites
    temp=dlmread([varargin{2}]);
    temp(:,[1:3])=round(temp(:,[1:3]));
    varargout{1}=temp;
    %Find yz---------------------------------------------
    minmax=[min(varargout{1}(:,1)) max(varargout{1}(:,1))];
    xmax=find(varargout{1}(:,1)==minmax(2));
    xmin=find(varargout{1}(:,1)==minmax(1));
    xmean=mean(minmax);
    temp=min(abs(varargout{1}(:,1)-xmean));
    xmean=find(abs(varargout{1}(:,1)-xmean)==temp(1));
    if length(xmin)==length(xmax)==length(xmean)
        mychoice=xmin;
    else
        lengthmax=max([length(xmin) length(xmax) length(xmean)]);
        if length(xmin)==lengthmax
            mychoice=xmin;
        elseif length(xmax)==lengthmax
            mychoice=xmax;
        else
            mychoice=xmean;
        end
    end
    %/Find yz---------------------------------------------
    varargout{2}=varargout{1}(mychoice,[2 3]);
    varargout{3}=length(varargout{2}(:,1));
case 'Load Axon'
    ZengFEM=get(findobj('type','figure','tag','ZengAnalysis_NeuroFEM'),'userdata');
    if isempty(ZengFEM.Group)   
        zexst('err',['You need to load the Load FEM first.']);
    else %isempty(ZengFEM.Group)   
        if nargin==1
            [Filename Path]=uigetfile([zeng2.cd '\AxonDist\*.m']);
            if strcmp('0',num2str(Filename)) | strcmp('0',num2str(Path));
                return
            end
            if length(ZengFEM.Group)==1
                group_chosen=1;
            else
                for i=1:length(ZengFEM.Group)
                    disp([num2str(i) ': ' ZengFEM.Group(i).Filename])
                end
                group_chosen = input(['What FEA file (1-' num2str(length(ZengFEM.Group)) ') = ']);
                if group_chosen < 1 | group_chosen > length(ZengFEM.Group)
                    return
                end
            end
        else
            group_chosen=varargin{2};
            Filename=ZengFEM.Group(group_chosen).Axon_Filename;
            Path=ZengFEM.Group(group_chosen).Axon_Path;
        end
            
        if isempty(group_chosen)
            return
        else
            [ZengFEM.Group(group_chosen).xyzd ZengFEM.Group(group_chosen).number_Axons ZengFEM.Bin_Size]=axon_dist([Path Filename],ZengFEM.setting(ZengFEM.Group(group_chosen).ID(1)).yz);
        end
        if ZengFEM.Group(group_chosen).number_Axons==0
            zexst('err','Bad "Axon distribution" file')
            return
        end
        dot=find(Filename=='.');
        ZengFEM.Group(group_chosen).Axon_Filename=Filename;
        ZengFEM.Group(group_chosen).Axon_Path=Path;
   	    set(ZengFEM.text.Axon ,'String',[Filename]);

        ZengFEM.Group(group_chosen).fired=[];%needed for windows-result
        ZengFEM.Group(group_chosen).vestim=[];
        ZengFEM.Group(group_chosen).FEM_Mul=[];
        ZengFEM.Group(group_chosen).FEM_fired=[];
	    
        ZengFEM.Dmmr(1)=min(ZengFEM.Dmmr(1),min(ZengFEM.Group(group_chosen).xyzd(:,4)));
	    ZengFEM.Dmmr(2)=max(ZengFEM.Dmmr(2),max(ZengFEM.Group(group_chosen).xyzd(:,4)));;%[min max range]
        ZengFEM.Dmmr(3)=diff(ZengFEM.Dmmr(1:2));
        set(ZengFEM.figure,'userdata',ZengFEM)
        neuroFEM('draw axons',ZengFEM.axes)
    end
case 'Generate Voltage distribution'
    ZengFEM=get(findobj('type','figure','tag','ZengAnalysis_NeuroFEM'),'userdata');
    Group_chosen=varargin{2};
    ID_chosen=ZengFEM.Group(Group_chosen).ID;
    ZengFEM.Group(Group_chosen).FEM_Mul=[];
    ZengFEM.Group(Group_chosen).FEM_fired=[];

    ScreenSize=get(0,'ScreenSize');
    hWaitZengFEM = dialog('Color',[0.8 0.8 0.8], ...
        'name','Please wait',...
        'NumberTitle','off',...
        'PaperUnits','points', ...
        'Position',[(ScreenSize(3)-202)/2  (ScreenSize(4)-192)/2 202 192], ...
        'Tag','Fig1', ...
        'ToolBar','none');
    uicontrol('Parent',hWaitZengFEM , ...
	    'Units','pixels', ...
	    'BackgroundColor',[0.8 0.8 0.8], ...
	    'ListboxTop',0, ...
	    'Position',[1 70 200 60], ...
	    'String','Please wait while assigning voltages to each node.', ...
	    'Style','text');
	drawnow
    Xmin=min(ZengFEM.setting(ID_chosen(1)).FEM(:,1));
    Xmax=max(ZengFEM.setting(ID_chosen(1)).FEM(:,1));
    Linter=(ZengFEM.Linter_D)*ZengFEM.Group(Group_chosen).xyzd(:,4);
    Lintermin=min(Linter);
    NodeMax=length([  -fliplr(Lintermin:Lintermin:(-Xmin)) 0:Lintermin:Xmax]);
    ZengFEM.Group(Group_chosen).vestim     =zeros(NodeMax,ZengFEM.Group(Group_chosen).number_Axons);
    ZengFEM.Group(Group_chosen).vestim_Real=zeros(length(find(ZengFEM.setting(ID_chosen(1)).FEM(:,2)==ZengFEM.Group(Group_chosen).xyzd(1,2) & ZengFEM.setting(ID_chosen(1)).FEM(:,3)==ZengFEM.Group(Group_chosen).xyzd(1,3))),ZengFEM.Group(Group_chosen).number_Axons);
    ZengFEM.Group(Group_chosen).nseg   =zeros(ZengFEM.Group(Group_chosen).number_Axons,1);
    length_ID_chosen=length(ID_chosen);
    if length_ID_chosen==1
        for i=1:ZengFEM.Group(Group_chosen).number_Axons
            index=find(ZengFEM.setting(ID_chosen).FEM(:,2)==ZengFEM.Group(Group_chosen).xyzd(i,2) & ZengFEM.setting(ID_chosen).FEM(:,3)==ZengFEM.Group(Group_chosen).xyzd(i,3));
            Node_Position=[  -fliplr(Linter(i):Linter(i):(-Xmin)) 0:Linter(i):Xmax]+ZengFEM.Group(Group_chosen).xyzd(i,1)*Linter(i);
            ZengFEM.Group(Group_chosen).nseg(i)=length(Node_Position);
            ZengFEM.Group(Group_chosen).L(i)=ZengFEM.Group(Group_chosen).nseg(i)*Linter(i);
            ZengFEM.Group(Group_chosen).vestim(1:ZengFEM.Group(Group_chosen).nseg(i),i)=ZengFEM.Group(Group_chosen).Iamp*spline(ZengFEM.setting(ID_chosen).FEM(index,1),ZengFEM.setting(ID_chosen).FEM(index,4),Node_Position)';
            %Remove the offset from the FEM result
            %ZengFEM.Group(Group_chosen).vestim(1:ZengFEM.Group(Group_chosen).nseg(i),i)=ZengFEM.Group(Group_chosen).vestim(1: ZengFEM.Group(Group_chosen).nseg(i),i)-ZengFEM.Group(Group_chosen).vestim(1,i);
            %/Remove the offset from the FEM result
            ZengFEM.Group(Group_chosen).vestim_Real(1:length(index),i)=ZengFEM.setting(ID_chosen).FEM(index,4)';
        end
    else %if length(ID_chosen)==1
        Mirror_Me=1;
        if Mirror_Me
            ZengFEM.Group(Group_chosen).vestim_Group     =cell(length(ID_chosen)*2-1,1);
            ZengFEM.Group(Group_chosen).vestim_Group_Real=cell(length(ID_chosen)*2-1,1);
        else
            ZengFEM.Group(Group_chosen).vestim_Group     =cell(length(ID_chosen),1);
            ZengFEM.Group(Group_chosen).vestim_Group_Real=cell(length(ID_chosen),1);
        end
        for i=1:length(ZengFEM.Group(Group_chosen).vestim_Group)
            ZengFEM.Group(Group_chosen).vestim_Group{i}     =zeros(NodeMax,ZengFEM.Group(Group_chosen).number_Axons);
            ZengFEM.Group(Group_chosen).vestim_Group_Real{i}=zeros(length(find(ZengFEM.setting(ID_chosen(1)).FEM(:,2)==ZengFEM.Group(Group_chosen).xyzd(1,2) & ZengFEM.setting(ID_chosen(1)).FEM(:,3)==ZengFEM.Group(Group_chosen).xyzd(1,3))),ZengFEM.Group(Group_chosen).number_Axons);
        end
        for i=1:length_ID_chosen
            ZengFEM.Group(Group_chosen).Iamp_Real(i)=ZengFEM.Group(Group_chosen).Iamp(i)*(1+2*(rand(1)-0.5)*ZengFEM.Ierr/100);
            if i~=1 %mirror
                ZengFEM.Group(Group_chosen).Iamp_Real(i+(length_ID_chosen-1))=ZengFEM.Group(Group_chosen).Iamp(i)*(1+2*(rand(1)-0.5)*ZengFEM.Ierr/100);
            end
        end
        for i=1:ZengFEM.Group(Group_chosen).number_Axons
            Node_Position=[  -fliplr(Linter(i):Linter(i):(-Xmin)) 0:Linter(i):Xmax]+ZengFEM.Group(Group_chosen).xyzd(i,1)*Linter(i);
            ZengFEM.Group(Group_chosen).nseg(i)=length(Node_Position);
            ZengFEM.Group(Group_chosen).L(i)   =ZengFEM.Group(Group_chosen).nseg(i)*Linter(i);
            for j=1:length_ID_chosen
                index=find(ZengFEM.setting(ID_chosen(j)).FEM(:,2)==ZengFEM.Group(Group_chosen).xyzd(i,2) & ZengFEM.setting(ID_chosen(j)).FEM(:,3)==ZengFEM.Group(Group_chosen).xyzd(i,3));
                ZengFEM.Group(Group_chosen).vestim_Group{j}(1:ZengFEM.Group(Group_chosen).nseg(i),i)=ZengFEM.Group(Group_chosen).Iamp_Real(j)*spline(ZengFEM.setting(ID_chosen(j)).FEM(index,1),ZengFEM.setting(ID_chosen(j)).FEM(index,4),Node_Position)';
                ZengFEM.Group(Group_chosen).vestim_Group_Real{j}(1:length(index),i)=ZengFEM.Group(Group_chosen).Iamp_Real(j)*ZengFEM.setting(ID_chosen(j)).FEM(index,4)';
                ZengFEM.Group(Group_chosen).vestim(1:ZengFEM.Group(Group_chosen).nseg(i),i)=ZengFEM.Group(Group_chosen).vestim(1:ZengFEM.Group(Group_chosen).nseg(i),i)+ZengFEM.Group(Group_chosen).vestim_Group{j}(1:ZengFEM.Group(Group_chosen).nseg(i),i);
                if Mirror_Me
                    if j~=1 %mirror
                        ZengFEM.Group(Group_chosen).vestim_Group{j+(length_ID_chosen-1)}(1:ZengFEM.Group(Group_chosen).nseg(i),i)=ZengFEM.Group(Group_chosen).Iamp_Real(j+(length_ID_chosen-1))*spline(-ZengFEM.setting(ID_chosen(j)).FEM(index,1),ZengFEM.setting(ID_chosen(j)).FEM(index,4),Node_Position)';
                        %I don't have Ve_Group_Real                    
                        ZengFEM.Group(Group_chosen).vestim(1:ZengFEM.Group(Group_chosen).nseg(i),i)=ZengFEM.Group(Group_chosen).vestim(1:ZengFEM.Group(Group_chosen).nseg(i),i)+ZengFEM.Group(Group_chosen).vestim_Group{j+(length_ID_chosen-1)}(1:ZengFEM.Group(Group_chosen).nseg(i),i);
                    end
                end
            end
            %/Remove the offset from the FEM result
            %ZengFEM.Group(Group_chosen).vestim(1:ZengFEM.Group(Group_chosen).nseg(i),i)=ZengFEM.Group(Group_chosen).vestim(1:ZengFEM.Group(Group_chosen).nseg(i),i)-ZengFEM.Group(Group_chosen).vestim(1,i);
            %/Remove the offset from the FEM result
        end %for i=1:ZengFEM.Group(Group_chosen).number_Axons
    end%if length_ID_chosen==1
    set(ZengFEM.figure,'userdata',ZengFEM);
    if ishandle(hWaitZengFEM)
        close(hWaitZengFEM )
    end    

case 'Check Value'
    if nargin==1
        ZengFEM=get(findobj('type','figure','tag','ZengAnalysis_NeuroFEM'),'userdata');
    else
        ZengFEM=get(varargin{2},'userdata');
    end
    varargout{1}=0;    
    temp=str2num(get(ZengFEM.edit.mul,'string'));
    if isempty(temp) | ~isreal(temp) 
        zexst('err','Multiplier has to be a number');
        return
    end
    if temp==0
        zexst('err','Multiplier cannot be zero');
        return
    end
    ZengFEM.multiple=temp;

    temp=str2num(get(ZengFEM.edit.dt ,'string'));
    if isempty(temp)| temp<=0 | ~isreal(temp) 
        zexst('err','Time step has to be greater than zero');
        return
    end
    zeng.dt=temp;
    

    temp=str2num(get(ZengFEM.edit.start ,'string'));
    if   ~isreal(temp) 
        zexst('err','Start is bad.');
        return
    end
    ZengFEM.tstart=temp/1000;
    
    temp=str2num(get(ZengFEM.edit.stop ,'string'))/1000;
    if ~isreal(temp) 
        zexst('err','Stop has to be a positive number.');
        return
    end
    ZengFEM.tstop=temp;

    set(ZengFEM.figure,'userdata',ZengFEM);
    varargout{1}=1;    

case 'Apply'    
    %when nargin>1, it could be from neuroFEM_ana
    ZengFEM=get(findobj('type','figure','tag','ZengAnalysis_NeuroFEM'),'userdata');
    if isempty(ZengFEM.setting)   
        zexst('err',['You need to load the Load FEM first.']);
        return
    end
    Good_to_go = neuroFEM('Check Value',ZengFEM.figure);
    if ~Good_to_go
        return
    end
    ZengFEM=get(findobj('type','figure','tag','ZengAnalysis_NeuroFEM'),'userdata');
    ZengFEM.Plot_range=[];
    ZengFEM.Plot_range_all=[]
    for i=1:length(ZengFEM.Group)
        if isempty(ZengFEM.Group(i).xyzd)
            zexst('err',['You need to load the Load Axon for all FEM files.']);
            return
        else
            if isempty(ZengFEM.Plot_range)
                ZengFEM.Plot_range=[fix(min(ZengFEM.Group(i).xyzd(:,4))) ceil(max(ZengFEM.Group(i).xyzd(:,4)))];
            else
                ZengFEM.Plot_range=[min(ZengFEM.Plot_range(1),fix(min(ZengFEM.Group(i).xyzd(:,4)))) max(ZengFEM.Plot_range(2),ceil(max(ZengFEM.Group(i).xyzd(:,4))))];
            end
        end
    end
    ZengFEM.Plot_range_all=[ZengFEM.Plot_range(1):ZengFEM.Bin_Size:ZengFEM.Plot_range(2)];

    if length(zeng2.var)~=1
        zexst('err','Something wrong with the model file.')
        return
    end
    for tempzeng=1:length(zeng2.varlist)
        feval('global',zeng2.varlist{tempzeng})
    end

    tic
    %----------------------------------------------------------------
    PW_Total=0;
    for i=1:length(zeng.Iexstim)
        PW_Total=PW_Total+zeng.Iexstim(i).dur
    end
    ZengFEM.Fired_para(1)=PW_Total+ZengFEM.tstart; %[Detect_Start Detect_Threthold]
    zeng.tf=PW_Total+ZengFEM.tstop;    
    temp=str2num(get(ZengFEM.edit.Threshold ,'string'));
    if isempty(temp)| temp<=0 | ~isreal(temp) 
        zexst('err','Threshold has to be a positive number.');
        return
    end
    eval(['ZengFEM.Fired_para(2)=temp+' zeng2.var{1}.name '.vini;']) %[Detect_Start Detect_Threthold]

    pop_target=get(ZengFEM.pop.target,'value')
    if pop_target==1
        edit_target=0;
    else
        temp=str2num(get(ZengFEM.edit.target ,'string'))
        if isempty(temp)
            zexst('err','Target is bad.');
            return
        end
        for i=1:length(temp)
            if isempty(temp(i))| temp(i)<=0 | ~isreal(temp(i)) 
                zexst('err','Target is bad.');
                return
            end
        end  
        if pop_target==2 %Axon
            edit_target=fliplr(reshape(sort(temp),[1 length(temp)] ));
            Itarget=ZengFEM.multiple*[0.5 1]
            Itarget_check=[0 0]; %for setting the boundary of binary search
        elseif pop_target==3 %Amp
            edit_target=reshape(temp,[1 length(temp)]);
        end
    end
    check_history=get(ZengFEM.check.history,'value');
    %----------------------------------------------------------------
    see_result=get(ZengFEM.check.see_result,'value');
    if see_result
        FG_Size=[0 0 500 600];
    else
        FG_Size=[0 0 200 100];
    end
    ScreenSize=get(0,'ScreenSize');
    FG_Size(1:2)=[(ScreenSize(3)-FG_Size(3))/2 (ScreenSize(4)-FG_Size(4))/2];
    FEMplot.figure = figure('Color',[0.8 0.8 0.8], ...
        'MenuBar','none',...
        'NumberTitle','off',...
        'position',FG_Size,...
        'tag','FEMplot',...
    	'ToolBar','none');
    FEMplot.cancel=0;
    if see_result    
        uicontrol('Parent',FEMplot.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.85 0.8 0.75], ...
        'callback','close(''gcbf'')',...
	    'ListboxTop',0, ...
	    'Position',[225 5 50 25], ...
        'String','Cancel', ...
	    'Tag','Pushbutton');
        figure(FEMplot.figure)
        FEMplot.Vfire=subplot(3,2,1);
        FEMplot.Ffire=subplot(3,2,3);   
        FEMplot.fire =subplot(3,2,5);
                
        FEMplot.Vnotfire=subplot(3,2,2);
        FEMplot.Fnotfire=subplot(3,2,4);
        FEMplot.notfire =subplot(3,2,6);
        
        set([FEMplot.Vfire FEMplot.notfire FEMplot.fire FEMplot.notfire],'ZLimMode','manual','ZLim',[-100 0]);
        set([FEMplot.Ffire FEMplot.Fnotfire],'ZLimMode','manual','ZLim',[-100 0]);
    else
        uicontrol('Parent',FEMplot.figure, ...
	    'Units','pixels', ...
	    'BackgroundColor',[0.8 0.8 0.8], ...
	    'ListboxTop',0, ...
	    'Position',[1 35 200 60], ...
	    'String','You can stop me. Lazy boom!!!.', ...
	    'Style','text');
        uicontrol('Parent',FEMplot.figure, ...
        'Units','pixel', ...
	    'BackgroundColor',[0.85 0.8 0.75], ...
        'callback','close(''gcbf'')',...
	    'ListboxTop',0, ...
	    'Position',[75 5 50 25], ...
        'String','Cancel', ...
	    'Tag','Pushbutton');
    end
    %----------------------------------------------------------------
    disp(['----------------------------------------------------------'])
    disp(['Sim_i     = ' num2str(ZengFEM.Sim_i)])
    disp(['Ierr      = ' num2str(ZengFEM.Ierr)])
    disp(['Bin size  = ' num2str(ZengFEM.Bin_Size)])
    disp(['pw-start-stop = ' num2str(PW_Total) ' ' num2str(ZengFEM.Fired_para(1)) ' ' num2str(zeng.tf)])

    ZengFEM.Axon_Fired=zeros(length(edit_target),length(ZengFEM.Sim_i),length(ZengFEM.Plot_range_all));
    ZengFEM.Axon_Total=zeros(length(ZengFEM.Plot_range_all),length(ZengFEM.Sim_i));
    ZengFEM.Axon_Group_Fired=zeros(length(edit_target),length(ZengFEM.Group),length(ZengFEM.Plot_range_all),length(ZengFEM.Sim_i));
    ZengFEM.Axon_Group_Total=zeros(length(ZengFEM.Group),length(ZengFEM.Plot_range_all),length(ZengFEM.Sim_i));
    ZengFEM.Iamp_Fired=zeros(length(edit_target),length(ZengFEM.Sim_i));
    set(ZengFEM.figure,'userdata',ZengFEM);
    
    for Sim_i=1:length(ZengFEM.Sim_i)
        %-----------------------------------------
        %Recreate the Ve if Linter_D has been changed.    
        eval(['Linter_D=' zeng2.var{1}.name '.Linter_D;'])
        if length(ZengFEM.Sim_i)==1                                                                 
            if Linter_D==ZengFEM.Linter_D                                                                           
                bad_Linter=0;                                                                                       
            else
                bad_Linter=1;
                ZengFEM.Linter_D=Linter_D;
                set(ZengFEM.figure,'userdata',ZengFEM);
            end
            number_axons_total=0;
            for i=1:length(ZengFEM.Group)
                number_axons_total=number_axons_total+ZengFEM.Group(i).number_Axons;
                if isempty(ZengFEM.Group(i).vestim) | bad_Linter
                    neuroFEM('Generate Voltage distribution',i);
                end
            end
        else
            ZengFEM.Linter_D=Linter_D;
            if pop_target==2 %Axon
                if Sim_i~=1  
                     ZengFEM.multiple=ZengFEM.Iamp_Fired(1,1)/1000;
                end
                Itarget=ZengFEM.multiple*[0.5 1];
                Itarget_check=[0 0]; %for setting the boundary of binary search
            elseif pop_target==3 %Amp
                ZengFEM.multiple=edit_target(1);
            end
            set(ZengFEM.figure,'userdata',ZengFEM);
            number_axons_total=0;
            for i=1:length(ZengFEM.Group)
                number_axons_total=number_axons_total+ZengFEM.Group(i).number_Axons;
                neuroFEM('Load Axon',i)
                neuroFEM('Generate Voltage distribution',i);
            end
            %------------------------------------
        end%if length(ZengFEM.Sim_i)==1
        if nargin>1
            if varargin{2}=='neuroFEM_ana'
                return
            end
        end
        ZengFEM=get(ZengFEM.figure,'userdata');
        %------------------------------------
        if pop_target==2 & ~isempty(find(edit_target>number_axons_total))
            zexst('err',['Target has to be a positive number not more than the number of axons(' num2str(number_axons_total) ').']);
            return
        end
        %------------------------------------
        Temp=zeros(length(ZengFEM.Plot_range_all),1);
        for i=1:length(ZengFEM.Group)
        %    ZengFEM.Axon_Group_Fired=zeros(length(edit_target),length(ZengFEM.Group),length(ZengFEM.Plot_range_all),length(ZengFEM.Sim_i));
        %    ZengFEM.Axon_Group_Total=zeros(length(ZengFEM.Group),length(ZengFEM.Plot_range_all),length(ZengFEM.Sim_i));
            ZengFEM.Axon_Group_Total(i,:,Sim_i)=[hist((ZengFEM.Group(i).xyzd(:,4)),ZengFEM.Plot_range_all)]';
            Temp=Temp+[hist((ZengFEM.Group(i).xyzd(:,4)),ZengFEM.Plot_range_all)]';
        end
        ZengFEM.Axon_Total(:,Sim_i)=Temp;
        %------------------------------------
        ZengFEM.Dfired=[];
        edit_target_length=length(edit_target);
        edit_target_i=1;
        while 1 % for the target    
            disp([num2str(Sim_i) '-' num2str(edit_target_i) '-' num2str(ZengFEM.multiple)])
            number_fired=0;
            for j=1:length(ZengFEM.Group)
                ZengFEM.Group(j).fired=[];
                set(ZengFEM.Group(j).axons,'MarkerFaceColor','none')
                if check_history & ~isempty(ZengFEM.Group(j).FEM_Mul) 
                    Length_Amp=length(ZengFEM.Group(j).FEM_Mul);
                    Temp=find(ZengFEM.Group(j).FEM_Mul==ZengFEM.multiple);
                    if isempty(Temp)
                        Temp_high=find(ZengFEM.Group(j).FEM_Mul>ZengFEM.multiple);
                        Temp_low =find(ZengFEM.Group(j).FEM_Mul<ZengFEM.multiple);
                        if ~isempty(Temp_high)
                            Temp_high=find(ZengFEM.Group(j).FEM_Mul==min(ZengFEM.Group(j).FEM_Mul(Temp_high)));
                            if ~isempty(Temp_low)
                                Temp_low=find(ZengFEM.Group(j).FEM_Mul==max(ZengFEM.Group(j).FEM_Mul(Temp_low)));
                            end
                            Length_fired=length(ZengFEM.Group(j).FEM_fired{Temp_high});
                            str_Length_fired=num2str(Length_fired);
                            for i=1:Length_fired
%                               disp([num2str(Sim_i) '-' num2str(edit_target_i) ':' num2str(j) ' : ' num2str(i) '/' str_Length_fired])           
                                drawnow
                                %----------------------------
                                if isempty(Temp_low)
                                    eval([zeng2.var{1}.name '.nseg=ZengFEM.Group(j).nseg(ZengFEM.Group(j).FEM_fired{Temp_high}(i));'])
                                    eval([zeng2.var{1}.name '.dia =ZengFEM.Group(j).xyzd(ZengFEM.Group(j).FEM_fired{Temp_high}(i),4);'])
                                    eval([zeng2.var{1}.name '.L   =ZengFEM.Group(j).L(ZengFEM.Group(j).FEM_fired{Temp_high}(i));'])
                                    %--------------------------------------
                                    Temp=ZengFEM.multiple*ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(ZengFEM.Group(j).FEM_fired{Temp_high}(i)),ZengFEM.Group(j).FEM_fired{Temp_high}(i));
                                    Temp2=zeros(length(Temp),length(zeng.Iexstim));
                                    for k=1:length(zeng.Iexstim)
                                        Temp2(:,k)=Temp;
                                    end
                                    %--------------------------------------
                                    eval([zeng2.var{1}.name '.vestim  =Temp2;'])
                                    [Fired]=zexst('calculate',ZengFEM.Fired_para);
                                else
                                    if isempty(find(ZengFEM.Group(j).FEM_fired{Temp_low}==ZengFEM.Group(j).FEM_fired{Temp_high}(i)))
                                        eval([zeng2.var{1}.name '.nseg=ZengFEM.Group(j).nseg(ZengFEM.Group(j).FEM_fired{Temp_high}(i));'])
                                        eval([zeng2.var{1}.name '.dia =ZengFEM.Group(j).xyzd(ZengFEM.Group(j).FEM_fired{Temp_high}(i),4);'])
                                        eval([zeng2.var{1}.name '.L   =ZengFEM.Group(j).L(ZengFEM.Group(j).FEM_fired{Temp_high}(i));'])
                                        %--------------------------------------
                                        Temp=ZengFEM.multiple*ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(ZengFEM.Group(j).FEM_fired{Temp_high}(i)),ZengFEM.Group(j).FEM_fired{Temp_high}(i));
                                        Temp2=zeros(length(Temp),length(zeng.Iexstim));
                                        for k=1:length(zeng.Iexstim)
                                            Temp2(:,k)=Temp;
                                        end
                                        %--------------------------------------
                                        eval([zeng2.var{1}.name '.vestim  =Temp2;'])
                                        [Fired]=zexst('calculate',ZengFEM.Fired_para);
                                    else
                                        Fired=1;
                                        ZengFEM.Group(j).fired =[ZengFEM.Group(j).fired ;ZengFEM.Group(j).FEM_fired{Temp_high}(i)];
                                        if see_result
               	                            set(ZengFEM.Group(j).axons(ZengFEM.Group(j).FEM_fired{Temp_high}(i)),'MarkerFaceColor',(get(ZengFEM.Group(j).axons(ZengFEM.Group(j).FEM_fired{Temp_high}(i)),'MarkerEdgeColor')))  
                                        end
                                        continue
                                    end
                                end
                                %----------------------------
                                if ~ishandle(FEMplot.figure)
                                    FEMplot.cancel=1;
                                    break
                                elseif Fired==-1
                                    zexst('err','There is some error.');
                                    return
                                elseif Fired==1
                                    ZengFEM.Group(j).fired =[ZengFEM.Group(j).fired ;ZengFEM.Group(j).FEM_fired{Temp_high}(i)];
                                    if see_result
       	                                set(ZengFEM.Group(j).axons(ZengFEM.Group(j).FEM_fired{Temp_high}(i)),'MarkerFaceColor',(get(ZengFEM.Group(j).axons(ZengFEM.Group(j).FEM_fired{Temp_high}(i)),'MarkerEdgeColor')))  
                                        %axes(FEMplot.fire);mesh(zeng2.dummyvm);set(gca,'zlim',ZengFEM.ZLimfire);
                                        axes(FEMplot.Vfire);plot(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(ZengFEM.Group(j).FEM_fired{Temp_high}(i)),ZengFEM.Group(j).FEM_fired{Temp_high}(i)))
                                        axes(FEMplot.Ffire);plot(diff(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(ZengFEM.Group(j).FEM_fired{Temp_high}(i)),ZengFEM.Group(j).FEM_fired{Temp_high}(i)),2))
                                    end
                                elseif Fired==0
                                    if see_result
                                        %axes(FEMplot.notfire);mesh(zeng2.dummyvm);;set(gca,'zlim',ZengFEM.ZLimnotfire);
                                        axes(FEMplot.Vnotfire);plot(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(ZengFEM.Group(j).FEM_fired{Temp_high}(i)),ZengFEM.Group(j).FEM_fired{Temp_high}(i)))
                                        axes(FEMplot.Fnotfire);plot(diff(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(ZengFEM.Group(j).FEM_fired{Temp_high}(i)),ZengFEM.Group(j).FEM_fired{Temp_high}(i)),2))
                                    end
                                end
                                %----------------------------
                            end%i=1:Length_fired
                        elseif ~isempty(Temp_low)
                            Temp_low=find(ZengFEM.Group(j).FEM_Mul==max(ZengFEM.Group(j).FEM_Mul(Temp_low)));
                            str_number_Axons=num2str(ZengFEM.Group(j).number_Axons);
                            for i=1:ZengFEM.Group(j).number_Axons
%                                disp([num2str(Sim_i) '-' num2str(edit_target_i) ':' num2str(j) ' : ' num2str(i) '/' str_number_Axons])           
                                drawnow
                                if isempty(find(ZengFEM.Group(j).FEM_fired{Temp_low}==i))
                                    eval([zeng2.var{1}.name '.nseg=ZengFEM.Group(j).nseg(i);'])
                                    eval([zeng2.var{1}.name '.dia =ZengFEM.Group(j).xyzd(i,4);'])
                                    eval([zeng2.var{1}.name '.L   =ZengFEM.Group(j).L(i);'])
                                    Temp=ZengFEM.multiple*ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(i),i);
                                    Temp2=zeros(length(Temp),length(zeng.Iexstim));
                                    for k=1:length(zeng.Iexstim)
                                        Temp2(:,k)=Temp;
                                    end
                                    %--------------------------------------
                                    eval([zeng2.var{1}.name '.vestim  =Temp2;'])
                                    [Fired]=zexst('calculate',ZengFEM.Fired_para);
                                else
                                    Fired=1;
                                    ZengFEM.Group(j).fired =[ZengFEM.Group(j).fired ;(i)];
                           	        if see_result
                                        set(ZengFEM.Group(j).axons(i),'MarkerFaceColor',(get(ZengFEM.Group(j).axons(i),'MarkerEdgeColor')))  
                                    end
                                    continue
                                end

                                if ~ishandle(FEMplot.figure)
                                    FEMplot.cancel=1;
                                    break
                                elseif Fired==-1
                                    return
                                elseif Fired==1
                                    ZengFEM.Group(j).fired =[ZengFEM.Group(j).fired ;(i)];
                                    if see_result
                           	            set(ZengFEM.Group(j).axons(i),'MarkerFaceColor',(get(ZengFEM.Group(j).axons(i),'MarkerEdgeColor')))  
                                        %axes(FEMplot.fire);mesh(zeng2.dummyvm);;set(gca,'zlim',ZengFEM.ZLimfire);
                                        axes(FEMplot.Vfire);plot(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(i),i));
                                        axes(FEMplot.Ffire);plot(diff(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(i),i),2));
                                    end
                                elseif Fired==0
                                    if see_result
                                        %axes(FEMplot.notfire);mesh(zeng2.dummyvm);;set(gca,'zlim',ZengFEM.ZLimnotfire);
                                        axes(FEMplot.Vnotfire);plot(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(i),i));
                                        axes(FEMplot.Fnotfire);plot(diff(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(i),i),2));
                                    end
                                end
                            end%for i=1:ZengFEM.Group(j).number_Axons
                        end %~isempty(Temp_high)
                        temp=length(ZengFEM.Group(j).FEM_Mul);
                        ZengFEM.Group(j).FEM_Mul(temp+1)=ZengFEM.multiple;
                        ZengFEM.Group(j).FEM_fired{temp+1}=ZengFEM.Group(j).fired;
                    else %if isempty(Temp)
                        ZengFEM.Group(j).fired =ZengFEM.Group(j).FEM_fired{Temp};
                        for i=1:length(ZengFEM.Group(j).fired)
                   	        set(ZengFEM.Group(j).axons(ZengFEM.Group(j).fired(i)),'MarkerFaceColor',(get(ZengFEM.Group(j).axons(ZengFEM.Group(j).fired(i)),'MarkerEdgeColor')))  
                        end
                    end %if isempty(Temp)
                else %if check_history & ~isempty(ZengFEM.Group(j).FEM_Mul) 
                    str_number_Axons=num2str(ZengFEM.Group(j).number_Axons);
                    for i=1:ZengFEM.Group(j).number_Axons
%                        disp([num2str(Sim_i) '-' num2str(edit_target_i) ':' num2str(j) ' : ' num2str(i) '/' str_number_Axons])           
                        drawnow
                        eval([zeng2.var{1}.name '.nseg=ZengFEM.Group(j).nseg(i);'])
                        eval([zeng2.var{1}.name '.dia =ZengFEM.Group(j).xyzd(i,4);'])
                        eval([zeng2.var{1}.name '.L   =ZengFEM.Group(j).L(i);'])
                        Temp=ZengFEM.multiple*ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(i),i);
                        Temp2=zeros(length(Temp),length(zeng.Iexstim));
                        for k=1:length(zeng.Iexstim)
                            Temp2(:,k)=Temp;
                        end
                        eval([zeng2.var{1}.name '.vestim  =Temp2;'])

                        [Fired]=zexst('calculate',ZengFEM.Fired_para);
                        if ~ishandle(FEMplot.figure)
                            FEMplot.cancel=1;
                            break
                        elseif Fired==-1
                            return
                        elseif Fired==1
                            ZengFEM.Group(j).fired =[ZengFEM.Group(j).fired ;i];
                            if see_result
               	                set(ZengFEM.Group(j).axons(i),'MarkerFaceColor',(get(ZengFEM.Group(j).axons(i),'MarkerEdgeColor')))  
                                %axes(FEMplot.fire);mesh(zeng2.dummyvm);set(gca,'zlim',ZengFEM.ZLimfire);
                                axes(FEMplot.Vfire);plot(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(i),i));
                                axes(FEMplot.Ffire);plot(diff(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(i),i),2));
                            end
                        elseif Fired==0
                            if see_result
                                %axes(FEMplot.notfire);mesh(zeng2.dummyvm);set(gca,'zlim',ZengFEM.ZLimnotfire);
                                axes(FEMplot.Vnotfire);plot(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(i),i));
                                axes(FEMplot.Fnotfire);plot(diff(ZengFEM.Group(j).vestim(1:ZengFEM.Group(j).nseg(i),i),2));
                            end
                        end
                    end %for i=1:ZengFEM.Group(j).number_Axons
                    temp=find(ZengFEM.Group(j).FEM_Mul==ZengFEM.multiple);
                    if isempty(temp)
                        temp=length(ZengFEM.Group(j).FEM_Mul);
                        ZengFEM.Group(j).FEM_Mul(temp+1)  =ZengFEM.multiple;
                        ZengFEM.Group(j).FEM_fired{temp+1}=ZengFEM.Group(j).fired;
                    end
                end %if check_history & ~isempty(ZengFEM.Group(j).FEM_Mul) 
                if  FEMplot.cancel
                    return
                end
                number_fired=number_fired+length(ZengFEM.Group(j).fired);
            end %for j=1:length(ZengFEM.Group)
            if pop_target==1 %None
                break    
            else
                if edit_target(edit_target_i)==number_fired | pop_target==3 ;
                    %Save the fired
                    %Axons-------------------------------------------------
                    Temp=zeros(length(ZengFEM.Plot_range_all),1+length(ZengFEM.Group));
                    Temp(:,1)=[ZengFEM.Plot_range_all]';
                    for i=1:length(ZengFEM.Group)

                    %    ZengFEM.Axon_Group_Fired=zeros(length(edit_target),length(ZengFEM.Group),length(ZengFEM.Plot_range_all),length(ZengFEM.Sim_i));
                    %    ZengFEM.Axon_Group_Total=zeros(length(ZengFEM.Group),length(ZengFEM.Plot_range_all),length(ZengFEM.Sim_i));

                        Temp(:,i+1)=[hist((ZengFEM.Group(i).xyzd(ZengFEM.Group(i).fired,4)),ZengFEM.Plot_range_all)]';
                        ZengFEM.Axon_Group_Fired(edit_target_i,i,:,Sim_i)=Temp(:,i+1);
                    end
                    %------------------------------------------------------
                    ZengFEM.Axon_Fired(edit_target_i,Sim_i,:)=sum(Temp(:,[1:length(ZengFEM.Group)]+1),2);
                    ZengFEM.Iamp_Fired(edit_target_i,Sim_i)=round(ZengFEM.multiple*1000);
                    %------------------------------------------------------
                    if length(zeng.Iexstim)>1
                        
                        Temp_Polar=['Bi'  num2str(100*zeng.Iexstim(2).amp/zeng.Iexstim(1).amp)];
                        
                    else
                        Temp_Polar='Mono'
                    end
                    if 0
                       Temp_name1=[ZengFEM.Group(1).Filename(1:(length(ZengFEM.Group(1).Filename))-5)];                   
                       Temp_name2=['S3VYR_A1C2-A2-50-' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                       Temp_name2=['S3VYR_C4A5-80_err-' num2str(ZengFEM.Ierr) ];
                    elseif 0
                       Temp_name1=[ZengFEM.Group(1).Filename(1:(length(ZengFEM.Group(1).Filename))-6)];
                       Temp_name2=['LG_C1-' Temp_Polar] ;
                   elseif 0
                        Temp_name1=[ZengFEM.Group(1).Filename(1:(length(ZengFEM.Group(1).Filename))-10)];                   
%                        Temp_name2=['LG_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                        Temp_name2=['LGm_Vc_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                        Temp_name2=['LGf4_Uni200_Vc_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                        Temp_name2=['LG_Uni200x4_C1A2-100_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                        Temp_name2=['LG_Uni200x4_Vc_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                        Temp_name2=['LGf4_Uni200_C1A2-100_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                        Temp_name2=['LG_C2A1-A2-50_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
                        Temp_name2=['LGm_Vc_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
                    elseif 1
                        Temp_name1=[ZengFEM.Group(1).Filename(1:(length(ZengFEM.Group(1).Filename))-10)];                   
%                        Temp_name2=['S2F4-S2VYL_C1A2-100_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
                        Temp_name2=['S2F4-Uni400_C1A2-100_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                        Temp_name2=['S2F4-S2VYL_Vc_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                        Temp_name2=['Ventral-Uni400_C1A2-100_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                        Temp_name2=['S2F4-Uni400_Bi_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
%                        Temp_name2=['S2F2-Uni200_Vc_Gin_' Temp_Polar '_err-' num2str(ZengFEM.Ierr) ];
                    else
                       Temp_name1=[ZengFEM.Group(1).Filename(1:(length(ZengFEM.Group(1).Filename))-10)];                   
%                       Temp_name2=['LGf1_Uni200_C2A3_GND_' Temp_Polar 'err-' num2str(ZengFEM.Ierr) ];
%                       Temp_name2=['LGf1_Uni200_C1A2-C2A2-50_GND_' Temp_Polar 'err-' num2str(ZengFEM.Ierr) ];
%                       Temp_name2=['LGf1_Uni200_C1A2-C2A2-50_GND_' Temp_Polar 'err-' num2str(ZengFEM.Ierr) ];
                       Temp_name2=['fs_Uni200_C1A2-C2-50-A2-25_GND_' Temp_Polar 'err-' num2str(ZengFEM.Ierr) ];                        
                    end

                    Temp_name3=['-' num2str(ZengFEM.Sim_i(Sim_i))   '-'];
                    Filename_1=[Temp_name1 '_' Temp_name2 '_pw' num2str(zeng.Iexstim(1).dur*1000)];
                    Filename_2=[Filename_1 '-' num2str(edit_target(edit_target_i)) Temp_name3 num2str(round(ZengFEM.multiple*1000)) '.fir'];
                    FID=fopen([ZengFEM.Path Filename_2],'w');
                    fprintf(FID,['Iexstim' '\t' 'Delay(us)' '\t' 'PW(us)' '\n']);
                    for i=1:length(zeng.Iexstim)
                        fprintf(FID,[num2str(zeng.Iexstim(i).amp) '\t' num2str(1000*zeng.Iexstim(i).delay) '\t' num2str(1000*zeng.Iexstim(i).dur) '\n']);
                    end
                    fprintf(FID,['\n' 'Iamp' '\t']);
                    for i=1:length(ZengFEM.Group(1).Iamp)
                        fprintf(FID,[num2str(ZengFEM.Group(1).Iamp(i)) '\t']);
                    end
                    fprintf(FID,['\n' 'Ierr' '\t']);
                    fprintf(FID,[num2str(ZengFEM.Ierr) '\t']);
                    fprintf(FID,['\n' 'Dia\Mul']);
                    fprintf(FID,['\t' num2str(round(ZengFEM.multiple*1000))]);
                    for i=1:length(Temp(:,1))
                        fprintf(FID,['\n']);
                        for j=1:length(Temp(1,:))
                            fprintf(FID,[num2str(Temp(i,j)) '\t']);
                        end
                    end
                    fprintf(FID,['\n']);
                    for i=1:length(ZengFEM.Plot_range_all)
                        fprintf(FID,['\n']);
                        fprintf(FID,[num2str(Temp(i,1)) '\t']);
                        fprintf(FID,[num2str(ZengFEM.Axon_Total(i,Sim_i)) '\t']);
                    end
                    fclose(FID);
                    %\Save the fired Axons
                    edit_target_i=edit_target_i+1;
                    if edit_target_i>edit_target_length
                        %------------------------------------
                        %Itarget_check,Itarget and ZengFEM.multiple are
                        %reset on the top before WHILE(edit_target_length).
                        %------------------------------------
                        %Save sum.
                        FID=fopen([ZengFEM.Path Filename_1 '-' num2str(ZengFEM.Sim_i(Sim_i)) '.txt'],'w');
                        fprintf(FID,['Iexstim' '\t' 'Delay(us)' '\t' 'PW(us)' '\n']);
                        for i=1:length(zeng.Iexstim)
                            fprintf(FID,[num2str(zeng.Iexstim(i).amp) '\t' num2str(1000*zeng.Iexstim(i).delay) '\t' num2str(1000*zeng.Iexstim(i).dur) '\n']);
                        end
                        fprintf(FID,['Iamp' '\t']);
                        for i=1:length(ZengFEM.Group(1).Iamp)
                            fprintf(FID,[num2str(ZengFEM.Group(1).Iamp(i)) '\t']);
                        end
                        fprintf(FID,['\n' 'Ierr' '\t']);
                        fprintf(FID,[num2str(ZengFEM.Ierr) '\t']);
                        fprintf(FID,['\n' 'Dia\Mul']);
                        for i=1:length(ZengFEM.Sim_i)
                            fprintf(FID,['\t' num2str(ZengFEM.Sim_i(i))]);
                        end
                        for k=length(edit_target):-1:1
                            fprintf(FID,['\n' num2str(edit_target(k))]);
                            for j=1:length(ZengFEM.Sim_i)
                                fprintf(FID,['\t' num2str(ZengFEM.Iamp_Fired(k,j))]);
                            end
                            %fprintf(FID,['\t' num2str(mean(ZengFEM.Iamp_Fired(k,:)))]);
                            %fprintf(FID,['\t' num2str(std(ZengFEM.Iamp_Fired(k,:)))]);
                            for i=1:length(ZengFEM.Plot_range_all)
                                fprintf(FID,['\n' num2str(ZengFEM.Plot_range_all(i))]);
                                for j=1:length(ZengFEM.Sim_i)
                                    fprintf(FID,['\t' num2str(ZengFEM.Axon_Fired(k,j,i))]);
                                end
                            end
                            fprintf(FID,['\n']);
                        end
                        fprintf(FID,['\n']);
                        for i=1:length(ZengFEM.Plot_range_all)
                            fprintf(FID,['\n' num2str(ZengFEM.Plot_range_all(i))]);
                            for j=1:length(ZengFEM.Sim_i)
                                fprintf(FID,['\t' num2str(ZengFEM.Axon_Total(i,j))]);
                            end
                        end
                        fclose(FID)
                        %\Save sum.
                        %------------------------------------
                        %Save group.
                        if length(ZengFEM.Group)>1
                            for group_i=1:length(ZengFEM.Group)
                                FID=fopen([ZengFEM.Path Filename_1 '-Group ' num2str(group_i)  '-' num2str(ZengFEM.Sim_i(Sim_i)) '.txt'],'w');
                                fprintf(FID,['Iexstim' '\t' 'Delay(us)' '\t' 'PW(us)' '\n']);
                                for i=1:length(zeng.Iexstim)
                                    fprintf(FID,[num2str(zeng.Iexstim(i).amp) '\t' num2str(1000*zeng.Iexstim(i).delay) '\t' num2str(1000*zeng.Iexstim(i).dur) '\n']);
                                end
                                fprintf(FID,['Iamp' '\t']);
                                for i=1:length(ZengFEM.Group(1).Iamp)
                                    fprintf(FID,[num2str(ZengFEM.Group(1).Iamp(i)) '\t']);
                                end
                                fprintf(FID,['\n' 'Ierr' '\t']);
                                fprintf(FID,[num2str(ZengFEM.Ierr) '\t']);
                                fprintf(FID,['\n' 'Dia\Mul']);
                                for i=1:length(ZengFEM.Sim_i)
                                    fprintf(FID,['\t' num2str(ZengFEM.Sim_i(i))]);
                                end
                                for k=length(edit_target):-1:1
                                    fprintf(FID,['\n' num2str(edit_target(k))]);
                                    for j=1:length(ZengFEM.Sim_i)
                                        fprintf(FID,['\t' num2str(ZengFEM.Iamp_Fired(k,j))]);
                                    end
                                    %fprintf(FID,['\t' num2str(mean(ZengFEM.Iamp_Fired(k,:)))]);
                                    %fprintf(FID,['\t' num2str(std(ZengFEM.Iamp_Fired(k,:)))]);
                                    for i=1:length(ZengFEM.Plot_range_all)
                                        fprintf(FID,['\n' num2str(ZengFEM.Plot_range_all(i))]);
                                        for j=1:length(ZengFEM.Sim_i)
%                                            ZengFEM.Axon_Group_Fired=zeros(length(edit_target),length(ZengFEM.Group),length(ZengFEM.Plot_range_all),length(ZengFEM.Sim_i));
%                                            ZengFEM.Axon_Group_Total=zeros(length(ZengFEM.Group),length(ZengFEM.Plot_range_all),length(ZengFEM.Sim_i));
                                            fprintf(FID,['\t' num2str(ZengFEM.Axon_Group_Fired(k,group_i,i,j))]);
                                        end
                                    end
                                    fprintf(FID,['\n']);
                                end
                                fprintf(FID,['\n']);
                                for i=1:length(ZengFEM.Plot_range_all)
                                    fprintf(FID,['\n' num2str(ZengFEM.Plot_range_all(i))]);
                                    for j=1:length(ZengFEM.Sim_i)
                                        fprintf(FID,['\t' num2str(ZengFEM.Axon_Group_Total(group_i,i,j))]);
                                    end
                                end
                                fclose(FID)
                            end
                        end
                        %\Save group.
                        break
                    else %edit_target_i>edit_target_length
                        if pop_target==2 ;
                            if Sim_i==1  
                                %the edit_target is sort from max to min
                                Itarget_check=[0 1]; %for setting the boundary of binary search
                                Itarget=ZengFEM.multiple*[0.5 1];
                                ZengFEM.multiple=mean(Itarget);
                            else
                                Itarget_check=[0 0];
                                ZengFEM.multiple=ZengFEM.Iamp_Fired(edit_target_i,1)/1000;
                                Itarget=ZengFEM.multiple*[0.8 1.2];
                                Sim_i
                                ZengFEM.multiple
                           end
                       else %==3
                           ZengFEM.multiple=edit_target(edit_target_i);
                       end
                    end %edit_target_i>edit_target_length
                elseif edit_target(edit_target_i)>number_fired;
                    Itarget_check(1)=1;%finding the low limit
                    Itarget(1)=ZengFEM.multiple;
                    if ~Itarget_check(2)%up limit
                        Itarget(2)=1.5*ZengFEM.multiple;
                    end
                    ZengFEM.multiple=mean(Itarget);
                else
                    Itarget_check(2)=1;%finding the high limit
                    Itarget(2)=ZengFEM.multiple;
                    if ~Itarget_check(1)%low limit
                        Itarget(1)=0.5*ZengFEM.multiple;
                    end
                    ZengFEM.multiple=mean(Itarget);
                end %if if edit_target(edit_target_i)==number_fired | pop_target==3
                set(ZengFEM.edit.mul,'string',num2str(ZengFEM.multiple));
            end %if pop_target==1 %None
        end %%while 1 % for the target
        temp=toc;
        if temp<=60
            disp(['finish run with ' num2str(temp) ' seconds' ])
        elseif temp<=3600
            temp_minute=fix(temp/60);
            temp_second=mod(temp,60);
            disp(['finish run with ' num2str(temp_minute) ':' num2str(temp_second) ' min:sec' ])
        else
            temp_hour=fix(temp/3600);
            temp=temp-temp_hour*3600;
            temp_minute=fix(temp/60);
            temp_second=mod(temp,60);
            disp(['finish run with ' num2str(temp_hour) ':' num2str(temp_minute) ':' num2str(temp_second) ' h:m:sec' ])
        end
    end %    for Sim_i=1:length(ZengFEM.Sim_i)
    if ishandle(FEMplot.figure)
        delete(FEMplot.figure)
    end
    if see_result==0
        for j=1:length(ZengFEM.Group)
            for i=1:length(ZengFEM.Group(j).fired)
                set(ZengFEM.Group(j).axons(ZengFEM.Group(j).fired(i)),'MarkerFaceColor',(get(ZengFEM.Group(j).axons(ZengFEM.Group(j).fired(i)),'MarkerEdgeColor')))  
            end
        end
    end
    ZengFEM.xyzd_fired=[];
    for i=1:length(ZengFEM.Group)
        ZengFEM.xyzd_fired=[ZengFEM.xyzd_fired;ZengFEM.Group(i).xyzd(ZengFEM.Group(i).fired,4)];
    end
    ZengFEM.Dfired=hist((ZengFEM.xyzd_fired),ZengFEM.Plot_range_all);
    set(ZengFEM.figure,'userdata',ZengFEM);
    if 1
        figure
        hist((ZengFEM.xyzd_fired),ZengFEM.Plot_range_all);
        set(gca,'xlim',[ZengFEM.Plot_range(1)-1 ZengFEM.Plot_range(2)]);
        YLIM=get(gca,'ylim');
        text(mean(ZengFEM.Plot_range),YLIM(2)*0.9,['# = ' num2str(sum(ZengFEM.Dfired ))])
    else
        neuroFEM('plot hist',ZengFEM.figure)
    end
    temp=toc;
    if temp<=60
        disp(['finish run with ' num2str(temp) ' seconds' ])
    elseif temp<=3600
        temp_minute=fix(temp/60);
        temp_second=mod(temp,60);
        disp(['finish run with ' num2str(temp_minute) ':' num2str(temp_second) ' min:sec' ])
    else
        temp_hour=fix(temp/3600);
        temp=temp-temp_hour*3600;
        temp_minute=fix(temp/60);
        temp_second=mod(temp,60);
        disp(['finish run with ' num2str(temp_hour) ':' num2str(temp_minute) ':' num2str(temp_second) ' h:m:sec' ])
    end
case 'draw axons'
    ZengFEM=get(findobj('type','figure','tag','ZengAnalysis_NeuroFEM'),'userdata');   
    axes_current=varargin{2};
    axes(axes_current);
    delete(findobj(gca','tag','axon positions'))
    xlabel('Y (um)');
    ylabel('Z (um)');
    xlim=[];
    ylim=[];
    for k=1:length(ZengFEM.Group)
        ZengFEM.Group(k).axons=[];
        if ~isempty(ZengFEM.Group(k).xyzd)
            ZengFEM.Group(k).axons=zeros(1,ZengFEM.Group(k).number_Axons);
            if isempty(xlim)
                xlim=[min(ZengFEM.Group(k).xyzd(:,2)) max(ZengFEM.Group(k).xyzd(:,2))];
                ylim=[min(ZengFEM.Group(k).xyzd(:,3)) max(ZengFEM.Group(k).xyzd(:,3))];
            else
                xlim=[min(xlim(1),min(ZengFEM.Group(k).xyzd(:,2))) max(xlim(2),max(ZengFEM.Group(k).xyzd(:,2)))];
                ylim=[min(ylim(1),min(ZengFEM.Group(k).xyzd(:,3))) max(ylim(2),max(ZengFEM.Group(k).xyzd(:,3)))];
            end

	        color_map=colormap;
            color_map_l=length(color_map);
            marker_size=6+4*(ZengFEM.Group(k).xyzd(:,4)-ZengFEM.Dmmr(1))/ZengFEM.Dmmr(3);
            for i=1:ZengFEM.Group(k).number_Axons
          	    c=color_map(1+round((color_map_l-1)*(ZengFEM.Group(k).xyzd(i,4)-ZengFEM.Dmmr(1))/ZengFEM.Dmmr(3)),:);
          	    ZengFEM.Group(k).axons(i)=patch(ZengFEM.Group(k).xyzd(i,2),ZengFEM.Group(k).xyzd(i,3),c,...
             	    'marker','o',...
         	        'LineWidth',1,...   
    				'MarkerEdgeColor',c,...
				    'MarkerFaceColor','none',...%      		'MarkerSize',8,...         %'tag','patch axon');
          		    'MarkerSize',marker_size(i),...         %'tag','patch axon');
                    'tag','axon positions');
            end
            ZengFEM.colorbar=colorbar;
   	        YTickLabel=str2num(get(ZengFEM.colorbar,'YTickLabel'));
            set(ZengFEM.colorbar,'YTickLabel',round(10*(ZengFEM.Dmmr(3)*YTickLabel+ZengFEM.Dmmr(1)))/10);
        elseif ~isempty(ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz)
            ZengFEM.Group(k).axons=zeros(1,ZengFEM.setting(ZengFEM.Group(k).ID(1)).number_Sites);

            if isempty(xlim)
                xlim=[min(ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz(:,1)) max(ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz(:,1))];
                ylim=[min(ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz(:,2)) max(ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz(:,2))];
            else
                xlim=[min(xlim(1),min(ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz(:,1))) max(xlim(2),max(ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz(:,1)))];
                ylim=[min(ylim(1),min(ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz(:,2))) max(ylim(2),max(ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz(:,2)))];
            end
            for i=1:ZengFEM.setting(ZengFEM.Group(k).ID(1)).number_Sites
       	        ZengFEM.Group(k).axons(i)=patch(ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz(i,1),ZengFEM.setting(ZengFEM.Group(k).ID(1)).yz(i,2),'b',...
         		    'marker','o',...
         		    'LineWidth',1.25,...   
				    'MarkerEdgeColor','b',...
				    'MarkerFaceColor','none',...
      			    'MarkerSize',8,...         %'tag','patch axon');
             	    'tag','axon positions');
            end
        else
            zexst('err','Something wrong at neuroFEM')
            return
        end
    end
    set(ZengFEM.figure,'userdata',ZengFEM);
    xlim=xlim + [-20 20];
    ylim=ylim + [-20 20];
    set(axes_current,'xlim',xlim,'ylim',ylim)
case 'plot hist'
    figure
    ZengFEM=get(get(findobj('type','figure','tag','ZengAnalysis_NeuroFEM'),'userdata'),'userdata');
    hist((ZengFEM.xyzd_fired),ZengFEM.Plot_range_all);
    set(gca,'xlim',[ZengFEM.Plot_range(1)-1 ZengFEM.Plot_range(2)]);
    YLIM=get(gca,'ylim');
    text(mean(ZengFEM.Plot_range),YLIM(2)*0.9,['# = ' num2str(sum(ZengFEM.Dfired ))])
end

Contact us at files@mathworks.com