Ejemplo n.º 1
0
kact = 0.4
ip3rtau = 2000
h.CVode().active(1)
h.cvode.atol(1e-10)

# define the regions for the rxd
cyt = rxd.Region(h.allsec(),
                 nrn_region='i',
                 geometry=rxd.FractionalVolume(fc, surface_fraction=1))
er = rxd.Region(h.allsec(), geometry=rxd.FractionalVolume(fe))
cyt_er_membrane = rxd.Region(h.allsec(), geometry=rxd.FixedPerimeter(1))

# the species and other states
ca = rxd.Species([cyt, er], d=caDiff, name='ca', charge=2, initial=cac_init)
ip3 = rxd.Species(cyt, d=ip3Diff, initial=ip3_init)
ip3r_gate_state = rxd.State(cyt_er_membrane, initial=0.8)
h_gate = ip3r_gate_state[cyt_er_membrane]

# pumps and channels between ER and Cytosol

serca = rxd.MultiCompartmentReaction(ca[cyt] > ca[er],
                                     gserca / ((kserca /
                                                (1000. * ca[cyt]))**2 + 1),
                                     membrane=cyt_er_membrane,
                                     custom_dynamics=True)
leak = rxd.MultiCompartmentReaction(ca[er] != ca[cyt],
                                    gleak,
                                    gleak,
                                    membrane=cyt_er_membrane)

minf = ip3[cyt] * 1000. * ca[cyt] / (ip3[cyt] + kip3) / (1000. * ca[cyt] +
Ejemplo n.º 2
0
    def __init__(self, x, y, z, rec=False):
        self.x = x
        self.y = y
        self.z = z

        self.soma = h.Section(name="soma", cell=self)
        # add 3D points to locate the neuron in the ECS
        self.soma.pt3dadd(x, y, z + somaR, 2.0 * somaR)
        self.soma.pt3dadd(x, y, z - somaR, 2.0 * somaR)

        # Where? -- define the intracellular space and membrane
        self.cyt = rxd.Region(self.soma, name="cyt", nrn_region="i")
        self.mem = rxd.Region(self.soma, name="mem", geometry=rxd.membrane())
        cell = [self.cyt, self.mem]

        # Who? -- the relevant ions and gates
        self.k = rxd.Species(cell, name="k", d=2.62, charge=1, initial=125)
        self.na = rxd.Species(cell, name="na", d=1.78, charge=1, initial=10)
        self.n = rxd.State(cell, name="n", initial=0.25512)
        self.ki, self.nai = self.k[self.cyt], self.na[self.cyt]

        # What? -- gating variables and ion currents
        self.n_gate = rxd.Rate(self.n, phin * (ninf - self.n) / taun)

        # Nernst potentials
        ena = 1e3 * h.R * (h.celsius + 273.15) * log(
            nao / self.nai) / h.FARADAY
        ek = 1e3 * h.R * (h.celsius + 273.15) * log(ko / self.ki) / h.FARADAY

        # Persistent Na current
        self.nap_current = rxd.MultiCompartmentReaction(
            self.nai,
            nao,
            gnap * nap_minf * nap_hinf * (v - ena),
            mass_action=False,
            membrane=self.mem,
            membrane_flux=True,
        )
        # Na current
        self.na_current = rxd.MultiCompartmentReaction(
            self.nai,
            nao,
            gna * minf**3 * (1.0 - self.n) * (v - ena),
            mass_action=False,
            membrane=self.mem,
            membrane_flux=True,
        )
        # K current
        self.k_current = rxd.MultiCompartmentReaction(
            self.ki,
            ko,
            gk * self.n**4 * (v - ek),
            mass_action=False,
            membrane=self.mem,
            membrane_flux=True,
        )
        # K leak
        self.k_leak = rxd.MultiCompartmentReaction(
            self.ki,
            ko,
            gl * (v - ek),
            mass_action=False,
            membrane=self.mem,
            membrane_flux=True,
        )
        # passive leak
        self.soma.insert("pas")
        self.soma(0.5).pas.g = pas_gl
        self.soma(0.5).pas.e = pas_el

        if rec:  # record membrane potential (shown in figure 1C)
            self.somaV = h.Vector()
            self.somaV.record(self.soma(0.5)._ref_v, rec)
Ejemplo n.º 3
0
    k[ecs],
    na[cyt],
    na[ecs],
    cl[cyt],
    cl[ecs],
    glial_na[gcyt],
    glial_k[gcyt],
)
# i = in cytosol (cyt) o = in extracellular (ecs)
# extracellular oxygen concentration
o2ecs = rxd.Species([ecs], name="o2ecs", initial=oa_bath)

# STATES-------------------------------------------------------------------------------------------------------------------------

# gating variables (m, h, n)
mgate = rxd.State([cyt, mem], name="mgate", initial=0.00787013592322398)
hgate = rxd.State([cyt, mem], name="hgate", initial=0.9981099795551048)
ngate = rxd.State([cyt, mem], name="ngate", initial=0.02284760152971809)

# ALL EQUATIONS------------------------------------------------------------------------------------------------------------------

gna = gnabar * mgate**3 * hgate
gk = gkbar * ngate**4
fko = 1.0 / (1.0 + exp(16.0 - ko))
nkcc1 = unkcc1 * fko * (log((ki * cli) / (ko * clo)) + log(
    (nai * cli) / (nao * clo)))
kcc2 = ukcc2 * log((ki * cli) / (ko * clo))
ena = 26.64 * log(nao / nai)  # nerst equation - reversal potentials
ek = 26.64 * log(ko / ki)  # ^^^^^
ecl = 26.64 * log(cli / clo)  # ^^^
p = p_max / (1.0 + exp((20.0 - oa_bath * alpha) / 3))
Ejemplo n.º 4
0
 ca = rxd.Species([cyt, er],
                  d=caDiff,
                  name='ca',
                  charge=2,
                  initial=dconf['cacytinit'])
 caexinit = dconf['caexinit']
 caextrude = rxd.Rate(ca, (caexinit - ca[cyt]) / taurcada,
                      regions=cyt,
                      membrane_flux=False)
 ip3 = rxd.Species(cyt, d=0.283, name='ip3', initial=0.0)
 # action of IP3 receptor
 Kip3 = 0.13
 Kact = 0.4
 minf = ip3[cyt] * 1000. * ca[cyt] / (ip3[cyt] + Kip3) / (1000. * ca[cyt] +
                                                          Kact)
 ip3r_gate_state = rxd.State(cyt_er_membrane, initial=0.8)
 h_gate = ip3r_gate_state[cyt_er_membrane]
 k = dconf['gip3'] * (minf * h_gate)**3
 ip3r = rxd.MultiCompartmentReaction(ca[er] <> ca[cyt],
                                     k,
                                     k,
                                     membrane=cyt_er_membrane)
 # IP3 receptor gating
 ip3rg = rxd.Rate(h_gate,
                  (1. / (1 + 1000. * ca[cyt] / (0.4)) - h_gate) / 400.0)
 # IP3 degradation - moves towards baseline level (ip3_init)
 ip3degTau = 1000  # 1000 ms
 ip3deg = rxd.Rate(ip3, (0.0 - ip3[cyt]) / ip3degTau,
                   regions=cyt,
                   membrane_flux=False)
 ### RYR - based on Sneyd et al, 2003