Xorg = x[org] Xecs = x[ecs] # What? - produce X in cell 1 # parameter to limit production to cell 1 cell1_param = rxd.Parameter(org, initial=lambda node: 1.0 if node.segment.sec == cell1 else 0) # production with a rate following Michaels Menton kinetics createX = rxd.Rate(Xorg, cell1_param[org] * 1.0 / (10.0 + Xorg)) # leak between organelles and cytosol cyt_org_leak = rxd.MultiCompartmentReaction(Xcyt, Xorg, 1e4, 1e4, membrane=cyt_org_membrane, membrane_flux=False) from math import pi e = 1.60217662e-19 scale = 1e-14 / e cyt_ecs_pump1 = rxd.MultiCompartmentReaction( Xcyt, Xecs, 0.1 * scale * Xcyt / (1.0 + Xcyt), -0.3 * scale * Xecs / (1.0 + Xecs), mass_action=False, membrane_flux=True, membrane=cyt_ecs_membrane, )
#What # gates m_gate = rxd.Rate(mgate, (minf - mgate) / mtau) h_gate = rxd.Rate(hgate, (hinf - hgate) / htau) n_gate = rxd.Rate(ngate, (ninf - ngate) / ntau) # Nernst potentials ena = 1e3 * h.R * (h.celsius + 273.15) * log(nao / nai) / h.FARADAY ek = 1e3 * h.R * (h.celsius + 273.15) * log(ko / ki) / h.FARADAY gna = pA * gnabar * mgate**3 * hgate gk = pA * gkbar * ngate**4 na_current = rxd.MultiCompartmentReaction(nai, nao, gna * (v - ena), mass_action=False, membrane=mem, membrane_flux=True) k_current = rxd.MultiCompartmentReaction(ki, ko, gk * (v - ek), mass_action=False, membrane=mem, membrane_flux=True) leak_current = rxd.MultiCompartmentReaction(xi, xo, pA * gl * (v - el), mass_action=False, membrane=mem, membrane_flux=True)
# 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] + 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, (1. / (1 + 1000. * ca[cyt] / (0.3)) - h_gate) / ip3rtau) cae_init = (0.0017 - cac_init * fc) / fe ca[er].concentration = cae_init #ip3.nodes.concentration = 2 for node in ip3.nodes:
Xcyt = x[cyt] Xorg = x[org] # What? - produce X in cell 1 # parameter to limit production to cell 1 cell1_param = rxd.Parameter( org, initial=lambda node: 1.0 if node.segment.sec == cell1 else 0 ) # production with a rate following Michaels Menton kinetics createX = rxd.Rate(Xorg, cell1_param[org] * 1.0 / (10.0 + Xorg)) # leak between organelles and cytosol cyt_org_leak = rxd.MultiCompartmentReaction( Xcyt, Xorg, 1e4, 1e4, membrane=cyt_org_membrane ) # record the concentrations in the cells t_vec = h.Vector() t_vec.record(h._ref_t) cell1_X = h.Vector() cell1_X.record(cell1(0.5)._ref_xi) cell1_Xorg = h.Vector() cell1_Xorg.record(Xorg.nodes(cell1)(0.5)[0]._ref_concentration) cell1V = h.Vector() cell1V.record(cell1(0.5)._ref_v) cell2_X = h.Vector()