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] + kact) k = gip3r * (minf * h_gate)**3 ip3r = rxd.MultiCompartmentReaction(ca[er] != ca[cyt], k, k, membrane=cyt_er_membrane) ip3rg = rxd.Rate(h_gate,
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) def setmGLURflux(): # mGLUR synapses generate ip3 that is fed into rxd ip3 for c in ce: if ice(c.ty): continue for syn, seg in zip( [c.Adend3mGLUR.syn, c.Adend2mGLUR.syn, c.Adend1mGLUR.syn],
ca = rxd.Species( [cyt], d=1, # with single section and nseg=1 only affects extracellular name="ca", charge=2, initial=lambda node: 1e-3 if node.region == cyt else 0, ) e = 1.60217662e-19 scale = 1e-14 / e # rate constant is in terms of molecules/um2 ms ca_pump = rxd.MultiCompartmentReaction( ca[cyt], cao[ecs], ca[cyt] * scale, custom_dynamics=True, membrane_flux=True, membrane=mem, ) t = h.Vector().record(h._ref_t) ca_vec = h.Vector().record(soma(0.5)._ref_cai) ca_vec2 = h.Vector().record(cao.nodes(soma(0.5))._ref_value) v = h.Vector().record(soma(0.5)._ref_v) h.finitialize(-65 * mV) h.continuerun(100 * ms) if __name__ == "__main__": import matplotlib.pyplot as plt
# dh/dt h_gate = rxd.Rate(hgate, (alpha_h * (1.0 - hgate)) - (beta_h * hgate)) # dn/dt n_gate = rxd.Rate(ngate, (alpha_n * (1.0 - ngate)) - (beta_n * ngate)) # d[O2]o/dt o2_ecs = rxd.Rate(o2ecs, (epsilon * (oa_bath - o2ecs))) # CURRENTS/LEAKS ---------------------------------------------------------------------------------------------------------------- # sodium (Na) current na_current = rxd.MultiCompartmentReaction(nai, nao, gna * (v - ena), mass_action=False, membrane=mem, membrane_flux=True) # potassium (K) current k_current = rxd.MultiCompartmentReaction(ki, ko, gk * (v - ek), mass_action=False, membrane=mem, membrane_flux=True) # chlorine (Cl) current cl_current = rxd.MultiCompartmentReaction(cli, clo, gclbar_l * (v - ecl),
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)
axon_terminal_region = rxd.Region([axon_terminal], nrn_region='i') synaptic_cleft = rxd.Region([axon_terminal], nrn_region='o') terminal_membrane = rxd.Region(h.allsec(), geometry=rxd.DistributedBoundary(1)) # In[3]: VA = rxd.Species([axon_terminal_region], name="VA", initial=10, charge=1) T = rxd.Species([synaptic_cleft], name="T", initial=10, charge=1) # In[4]: # if you comment the exocytosis line below, the error will go away exocytosis = rxd.MultiCompartmentReaction(VA[axon_terminal_region], T[synaptic_cleft], 500, 0, membrane=terminal_membrane, membrane_flux=True) # In[5]: VA_conc = h.Vector().record(VA.nodes[0]._ref_concentration) T_conc = h.Vector().record(T.nodes[0]._ref_concentration) t_vec = h.Vector().record(h._ref_t) h.finitialize(-70) h.continuerun(100) pyplot.plot(t_vec, VA_conc) pyplot.plot(t_vec, T_conc) pyplot.show()