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

zcal_I
function zcal_I
global zeng zeng2 t
for temp=1:length(zeng2.varlist)
   eval(['global ' zeng2.varlist{temp}])
end
%--------------
temp_num_t=length(t);
dt=[t(2)-t(1) t(3:temp_num_t)-t(1:(temp_num_t-2)) t(temp_num_t)-t(temp_num_t-1)];
for p=1:length(zeng2.var)
    eval([zeng2.var{p}.name  '.I=zeros(size(' zeng2.var{p}.name  '.vm));'])
    if isempty(eval([zeng2.var{p}.name '.model']))
        eval([zeng2.var{p}.name  '.ILk = (1/' zeng2.var{p}.name '.rm)*1e3*zeng2.var{p}.setting.nodalarea*(' zeng2.var{p}.name '.vm -' zeng2.var{p}.name  '.vini);'])  %nA;'])
        eval([zeng2.var{p}.name '.I =' zeng2.var{p}.name '.ILk;'])    
    else
        s=zeng2.dummymodelindex(find(zeng2.dummymodelindex(:,1)==p),2);
        for i=1:length( eval([zeng2.var{p}.name '.model.I']) )
            Iname=['I' eval([zeng2.var{p}.name '.model.I{i}.name'])];
            eval(['setfield(' zeng2.var{p}.name  ',[Iname],zeros(size(' zeng2.var{p}.name  '.vm)));'])
            eval(['temp=' zeng2.var{p}.name '.model.I{i}.G +   zeros(size(' zeng2.var{p}.name  '.vm));'])  %1/(kOhm-Cm^2) 
            if isempty(zeng2.dummymodel{s}.I{i}.gate) 
            else
                for q=1:length(zeng2.dummymodel{s}.I{i}.gate(:,1))
                    eval(['temp=temp.*(' zeng2.var{p}.name  '.' zeng2.dummymodel{s}.gate{zeng2.dummymodel{s}.I{i}.gate(q,1)} '.^zeng2.dummymodel{s}.I{i}.gate(q,2));'])
                end
            end
            eval(['  temp=1e3*zeng2.var{p}.setting.nodalarea*(temp.*(' zeng2.var{p}.name '.vm -' zeng2.var{p}.name  '.model.I{i}.E));'])  %nA
            eval([zeng2.var{p}.name '.' Iname '=temp;'])    
            eval([zeng2.var{p}.name '.I =' zeng2.var{p}.name '.I + temp;'  ])    
        end
    end
    
    eval(['vm=' zeng2.var{p}.name '.vm;']);
    Ic=zeros(size(vm));
    for i=1:size(Ic,1)
       Ic(i,:)=[[vm(i,2)-vm(i,1) vm(i,3:temp_num_t)-vm(i,1:(temp_num_t-2)) vm(i,temp_num_t)-vm(i,temp_num_t-1)]]./dt;
    end
    eval([zeng2.var{p}.name '.Ic=[1e3*' zeng2.var{p}.name '.cm*zeng2.var{p}.setting.nodalarea.*Ic];'])
    eval([zeng2.var{p}.name '.I =' zeng2.var{p}.name '.I +' zeng2.var{p}.name '.Ic;'])    
end

Contact us at files@mathworks.com