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

insert(name,newmodel)
function insert(name,newmodel)
global zeng zeng2

varnum=name.varnum;
name=name.name;

%dummymodel(i).name ,.para,.nodes

temp=find(name=='{');
if isempty(temp)
    eval(['global ' name])
else
    eval(['global ' name(1:(temp-1))])
end
if isempty(zeng2.var)

    zexstim('err',['Error in INSERT.' ]);
    return
end

newmodel=feval(newmodel,'Initial');

if isfield(newmodel,'vini')
    eval([name '.vini=newmodel.vini;'])
    newmodel=rmfield(newmodel,'vini');
end
if isfield(newmodel,'temperature')
    zeng.temperature=newmodel.temperature;
    newmodel=rmfield(newmodel,'temperature');
end 
%Remove fields and find Ilk--------------------------------------------
temp=newmodel;
for i=1:length(temp.I)
   temp.I{i}=rmfield(temp.I{i},'gate');
   if isempty(newmodel.I{i}.gate)
      zeng2.var{varnum}.Ilk=i; %Used in gui_var to identify which I is Ileak   
      eval([name '.rm=1/newmodel.I{i}.G;'])
   end
end
eval([name '.model=temp;'])
%/Remove fields and find Ilk--------------------------------------------


%create setting.var for viewplot%------------------------------------------------------------------------------
paraname_length=4+length(newmodel.I)+length(newmodel.gate); %[four extra are Vm, Ve, Itotal, and Ic]
paraname=cell(paraname_length,1);
paraname{1}='vm';
paraname{2}='ve';
paraname{3}='I';
j=3;
for i=(1:length(newmodel.I))
    j=j+1;
    paraname{j}=['I' newmodel.I{i}.name];
end
j=j+1;
paraname{j}=['Ic'];
for i=(1:length(newmodel.gate))
    j=j+1;
    paraname{j}=[newmodel.gate{i}];
end
zeng2.var{varnum}.paraname=paraname;
%------------------------------------------------------------------------------

%/Remove fields--------------------------------------------
temp=newmodel;
for i=1:length(temp.I)
    temp.I{i}=rmfield(temp.I{i},'G');
    temp.I{i}=rmfield(temp.I{i},'E');
end
newmodel=temp;
%/Remove fields--------------------------------------------


model_length=length(zeng2.dummymodel);
if model_length==0;
   zeng2.dummymodel=cell(1);
   zeng2.dummymodel{1}           =newmodel;
   zeng2.dummymodel{1}.gatenumber=length(zeng2.dummymodel{1}.gate);
   zeng2.dummymodel{1}.Inumber   =length(zeng2.dummymodel{1}.I); 
   zeng2.dummymodel{1}.var=varnum;
   zeng2.dummymodel{1}.nodes=[];
else
   %check if the model exists or not
   for i=1:model_length
      temp=find(zeng2.dummymodel{i}.var==varnum);
      if ~isempty(temp)
         zeng2.dummymodel{i}.var(temp)=[];
         break 
      end
   end
   for i=1:model_length
      if strcmp(zeng2.dummymodel{i}.name, newmodel.name)
         zeng2.dummymodel{i}.var =[zeng2.dummymodel{i}.var varnum];
         return
      end
   end
   zeng2.dummymodel{model_length+1}           =newmodel;
   zeng2.dummymodel{model_length+1}.gatenumber=length(zeng2.dummymodel{1}.gate);
   zeng2.dummymodel{model_length+1}.Inumber   =length(zeng2.dummymodel{1}.I); 
   zeng2.dummymodel{model_length+1}.var       =varnum;
   zeng2.dummymodel{model_length+1}.nodes     =[];
end

Contact us at files@mathworks.com