Endocannabinoid dynamics gate spike-timing dependent depression and potentiation (Cui et al 2016)

 Download zip file 
Help downloading and running models
Accession:187605
The endocannabinoid (eCB) system is considered involved in synaptic depression. Recent reports have also linked eCBs to synaptic potentiation. However it is not known how eCB signaling may support such bidirectionality. To question the mechanisms of this phenomena in spike-timing dependent plasticity (STDP) at corticostriatal synapses, we combined electrophysiology experiments with biophysical modeling. We demonstrate that STDP is controlled by eCB levels and dynamics: prolonged and moderate levels of eCB lead to eCB-mediated long-term depression (eCB-tLTD) while short and large eCB transients produce eCB-mediated long-term potentiation (eCB-tLTP). Therefore, just like neurotransmitters glutamate or GABA, eCB form a bidirectional system.
Reference:
1 . Cui Y, Prokin I, Xu H, Delord B, Genet S, Venance L, Berry H (2016) Endocannabinoid dynamics gate spike-timing dependent depression and potentiation. Elife 5:e13185 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Synapse; Channel/Receptor;
Brain Region(s)/Organism:
Cell Type(s): Neostriatum medium spiny direct pathway GABA cell; Neostriatum medium spiny indirect pathway GABA cell; Neostriatum spiny neuron;
Channel(s): I L high threshold; I Calcium; I_SERCA; I Cl, leak; Ca pump;
Gap Junctions:
Receptor(s): AMPA; NMDA; mGluR; Glutamate; IP3;
Gene(s):
Transmitter(s):
Simulation Environment: FORTRAN; Python;
Model Concept(s): Ion Channel Kinetics; Coincidence Detection; Parameter Fitting; Synaptic Plasticity; Long-term Synaptic Plasticity; Signaling pathways; STDP; Calcium dynamics; Parameter sensitivity; G-protein coupled; Neuromodulation;
Implementer(s):
Search NeuronDB for information about:  Neostriatum medium spiny direct pathway GABA cell; Neostriatum medium spiny indirect pathway GABA cell; AMPA; NMDA; mGluR; Glutamate; IP3; I L high threshold; I Calcium; I_SERCA; I Cl, leak; Ca pump;
!    -*- f95 -*-
! (c) 2016 - Ilya Prokin - isprokin@gmail.com - https://sites.google.com/site/ilyaprokin
! INRIA Rhone-Alpes
! STDP model : math functions
module general_math
    implicit none

    contains

    real*8 function heaviside(x)
        implicit none
        real*8 :: x
        if (x == 0) then
            heaviside = 0.5
        elseif (x < 0) then
            heaviside = 0
        else
            heaviside = 1.0
        endif
    end function heaviside

    real*8 function Rect(x, xlo, xhi)
        implicit none
        real*8 :: x, xlo, xhi
        if (x < xlo) then
            Rect = 0
        elseif (x > xhi) then
            Rect = 0
        else
            Rect = 1.0
        endif
    end function Rect

    real*8 function Hill(x,k,n)
        implicit none
        real*8 :: x,k
        integer :: n
        real*8 :: xn
        xn=x**n
        Hill = xn/(xn+k**n)
    end function Hill

    real*8 function lin_interpTable(Table,li,i_point, default)
        implicit none
        real*8 :: i_point
        integer :: ip, li
        real*8 :: Table(li), default
        ip=floor(i_point)
        if (ip<1) then
            lin_interpTable = default
        elseif (ip<li) then
            lin_interpTable = Table(ip)+(Table(ip+1)-Table(ip))*(i_point-ip)
        else
            lin_interpTable = default
        endif
    end function lin_interpTable

    real*8 function lin_interpTable_brds(Table,li,i_point)
        implicit none
        real*8 :: i_point
        integer :: ip, li
        real*8 :: Table(li)
        ip=floor(i_point)
        if (ip<1) then
            lin_interpTable_brds = Table(1)
        elseif (ip<li) then
            lin_interpTable_brds = Table(ip)+(Table(ip+1)-Table(ip))*(i_point-ip)
        else
            lin_interpTable_brds = Table(li)
        endif
    end function lin_interpTable_brds

    subroutine search_xa_inds_around_x(xa,n,x, klo, khi)
        implicit none
        integer, intent(in) :: n
        real*8, intent(in) :: xa(n), x
        integer, intent(out) :: khi,klo
        integer :: k
        klo=1
        khi=n
        do
            if (khi-klo <= 1) exit
            k=(khi+klo)/2
            if(xa(k) > x) then
                khi=k
            else
                klo=k
            endif
        end do
    end subroutine search_xa_inds_around_x

    real*8 function lin_interpTable_xy(x,y,n, x_new)
        implicit none
        integer :: n, klo, khi
        real*8 :: x(n), y(n), x_new
        if (x_new<=x(1)) then
            lin_interpTable_xy = y(1)
        elseif (x_new>=x(n)) then
            lin_interpTable_xy = y(n)
        else
            call search_xa_inds_around_x(x,n,x_new, klo, khi)
            if (y(khi)/=y(klo)) then
                lin_interpTable_xy = y(klo)+(y(khi)-y(klo))*(x_new-x(klo))/(x(khi)-x(klo))
            else
                lin_interpTable_xy = y(klo)
            end if
        endif
    end function lin_interpTable_xy

    real*8 function kernel_repeat(t, Freq, n, kernel, l_ker, step_ker)
        !t -grid starts from 0.0 (t=t'-t0)
        implicit none
        real*8 :: t, Freq
        integer :: n, l_ker
        real*8 :: kernel(l_ker), step_ker
        integer :: ic, idepth, k
        ic = floor(t*Freq)
        idepth = floor(l_ker*step_ker*Freq)
        kernel_repeat = 0
        if (t>l_ker*step_ker+(n-1)/Freq) then
            return
        end if
        do k=0,idepth
            kernel_repeat = kernel_repeat + lin_interpTable(kernel, l_ker, (t-(k+ic)/Freq)/step_ker, 0d0)
        end do
    end function kernel_repeat

end module general_math

Loading data, please wait...