Systems-level modeling of neuronal circuits for leech swimming (Zheng et al. 2007)

 Download zip file 
Help downloading and running models
Accession:114230
"This paper describes a mathematical model of the neuronal central pattern generator (CPG) that controls the rhythmic body motion of the swimming leech. The systems approach is employed to capture the neuronal dynamics essential for generating coordinated oscillations of cell membrane potentials by a simple CPG architecture with a minimal number of parameters. ... parameter estimation leads to predictions regarding the synaptic coupling strength and intrinsic period gradient along the nerve cord, the latter of which agrees qualitatively with experimental observations."
Reference:
1 . Zheng M, Friesen WO, Iwasaki T (2007) Systems-level modeling of neuronal circuits for leech swimming. J Comput Neurosci 22:21-38 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type:
Brain Region(s)/Organism: Leech;
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: MATLAB;
Model Concept(s): Temporal Pattern Generation; Oscillations; Simplified Models;
Implementer(s):
% DATA is a defined signal to calculate area under one period
% variable used: i, oarea, ldata, udata, low, oareas, idido, idid, harea, periods

id=0;
idid=0;
idido=0;
time=0;
ij=length(data);
oareas=0;
% Judge if DATA is constant or periodic
if abs(data(ij)-data(floor(0.9*ij)))<0.001*abs(data(ij))&abs(data(ij)-data(floor(0.85*ij)))<0.001*abs(data(ij))
    oarea=inf;
else
    ldata=data(ij);
    udata=data(ij);
%   To find the upper bound and lower bound of DATA    
    for i=ij-1:-1:ij*0.8
        if data(i)<ldata
            ldata=data(i);
        end
        if data(i)>udata
            udata=data(i);
        end
    end
    low=ldata;
%   To find the first locol minimum
    for i=ij-1:-1:2
        if (data(i+1)-data(i))>0&(data(i-1)-data(i))>0&abs(data(i)-low)<abs(udata-low)/5
            id=i; 
            break
        end
    end
    for i=id-1:-1:2
        if (data(i+2)-data(i))>0&(data(i+1)-data(i))>0&(data(i-2)-data(i))>0&(data(i-1)-data(i))>0&(tout(id)-tout(i))>(1-rr)*t0(1)*3/1000
            id=i; 
            break
        end
    end
    for i=id-1:-1:2
        if (data(i+5)-data(i))>0&(data(i+1)-data(i))>0&(data(i-5)-data(i))>0&(data(i-1)-data(i))>0&(tout(id)-tout(i))>(1-rr)*t0(1)*3/1000
            break
        end
    end
    idido(1)=id;
    id=i;
    idido(2)=id;
    
%   To find the Uni-area series
    count=2;
    oarea=0;
    periods=0;
%    idido(1)=id;
    for i=id-1:-1:id*0.7
        oarea=oarea+(data(i)-low)*(tout(i+1)-tout(i));
        if (data(i+1)-data(i))>0&(data(i+5)-data(i))>0&(data(i-1)-data(i))>0&(data(i-5)-data(i))>0&(tout(idido(count-1))-tout(i))>(1-rr)*t0(1)*6/1000&abs(data(i)-ldata)<abs(udata-ldata)*0.8
            count=count+1;
            oareas(count-2)=oarea;
            oarea=0;
            idido(count)=i;
            periods(count-2)=tout(idido(count-1))-tout(idido(count));    
       end
    end
 %  To find the half-area series
    harea=0;
    count=0;
    idid=0;
    i=id;
    while i>id*0.7-1
        i=i-1;
        harea=harea+(data(i)-low)*(tout(i+1)-tout(i));
        if harea>oareas(count+1)/2
            count=count+1;
            harea=0;
            time(count)=(tout(i-1)+tout(i))/2;
            idid(count)=i;
            i=idido(count+2);
        end
        if count>=length(oareas)-1&mod(count,2)==0
            break
        end
    end
end

Loading data, please wait...