GoldingMSO¶

Tools and files from the Golding Lab at UT Austin for compartmental modeling MSO neurons, using the simulation software, NEURON
Features¶
Getting Started¶
Prerequisites¶
Only tested on macOS and Windows Subsystem for Linux
Ensure Python 3.8+ is installed.
Installation¶
Clone the repository:
git clone https://github.com/golding-lab/golding_mso.git
cd golding_mso
pip install .
Resources¶
Demo¶
Loading cells¶
import golding_mso as gmso
mso_cell = gmso.Cell(gmso.morphologies['151124_03'])
516 lines read
Reconstructed morphologies¶
import golding_mso as gmso
print("Morphology cell keys:")
print("-----------------------")
for i in range(0, len(gmso.morphologies), 4):
print(list(gmso.morphologies.keys())[i:i+4])
Morphology cell keys:
-----------------------
['151124_03', '151124_10P', '151124_11P', '151201_02_LOOK']
['151201_05_LOOK', '151201_06P', '151209_03P', '151209_06_LOOK']
['151209_09O', '151210_02P', '151210_03P_LOOK', '151210_04P_LOOK']
['151214_03', '151210_07O_LOOK', '151214_09p', '151214_10P']
['151217_03P_LOOK', '151217_04P', '151217_12p', '160105_10']
['160105_12P', '160105_14P', '160105_15P', '160106_03P_LOOK']
['160106_04_LOOK', '160111_02P', '160112_16P', '160112_19P']
['160112_20P_LOOK', '160112_26P_LOOK', '160112_27P', '160123_08_LOOK']
['160126_08_LOOK', '160305_01p', '160305_09P', '160317_16_LOOK']
['160317_20P', '160318_16', '160318_21p', '151210_05P']
Viewing morphology¶
import golding_mso as gmso
mso_cell = gmso.Cell(gmso.morphologies['151124_03'])
mso_cell.topology()
516 lines read
|--------------| soma[0]
`------------| dend[0]
`----------| dend[2]
`----------------------| dend[6]
`----| dend[3]
`----| dend[5]
`------| dend[4]
`------------------------------------------| dend[1]
`------------------------------------| apic[0]
`----------| apic[4]
`--| apic[6]
`----| apic[5]
`--------| apic[1]
`--------------| apic[3]
`------------| apic[2]
import golding_mso as gmso
from neuron import h
import matplotlib.pyplot as plt
fig = plt.figure()
mso_cell = gmso.Cell(gmso.morphologies['151124_03'])
ps = h.PlotShape(h.SectionList(mso_cell.allsec_nofilopodia))
ps.show(0)
ps.plot(fig)
516 lines read
<Axis3DWithNEURON: >

Changing cell parameters¶
import golding_mso as gmso
mso_cell = gmso.Cell(gmso.morphologies['151124_03'])
mso_cell.assign_channels()
mso_cell.attach_axon()
print(f"Original resting potential: {mso_cell.resting_potential} mV\n")
print("Modifying KHT channel mechanism and KLT conductance...\n")
mso_cell.channels['kht']['mechanism'] = 'leak_klt' # Replace KHT mechanism with passive channel
mso_cell.conductances['soma']['klt'] *= 2 # Double the KLT conductance in soma
print(f"Updated resting potential: {mso_cell.resting_potential} mV")
516 lines read
Original resting potential: -60.99978370571063 mV
Modifying KHT channel mechanism and KLT conductance...
Updated resting potential: -65.39322834144977 mV
Current injection¶
import golding_mso as gmso
import matplotlib.pyplot as plt
from neuron import h
mso_cell = gmso.Cell(gmso.morphologies['151124_03'])
mso_cell.assign_channels()
mso_cell.attach_axon()
stim = h.IClamp(mso_cell.somatic[0](0.5))
stim.amp = 1.3
stim.dur = 10
stim.delay = 10
soma_v = h.Vector().record(mso_cell.somatic[0](0.5)._ref_v)
axon_v = h.Vector().record(mso_cell.nodes[-1](0.5)._ref_v)
t = h.Vector().record(h._ref_t)
h.finitialize(-58)
h.continuerun(10)
h.frecord_init()
h.continuerun(13)
plt.plot(t, soma_v, label='Soma', color='blue')
plt.plot(t, axon_v, label='Axon', color='orange')
plt.xlabel('Time (ms)')
plt.ylabel('Membrane Potential (mV)')
plt.title('MSO Cell Response to Current Injection')
plt.legend()
plt.show()
516 lines read

Propagation testing¶
import golding_mso as gmso
import numpy as np
import matplotlib.pyplot as plt
from golding_mso.sims import propagation_test
from neuron import h
mso_cell = gmso.Cell(gmso.morphologies['151124_03'])
mso_cell.cvode.active(0)
mso_cell.assign_channels()
mso_cell.attach_axon()
prop_data = propagation_test(mso_cell, mso_cell.lateral_nofilopodia)
for entry, sec in zip(prop_data, mso_cell.lateral_nofilopodia):
plt.plot([h.distance(seg, mso_cell.somatic[0](0.5)) for seg in sec],abs(np.subtract(entry['rec_site']['maxt'],entry['syn']['maxt'])), label=f'Section {sec.name()}')
plt.xlabel('Distance from Soma (µm)')
plt.ylabel('Propagation Delay (ms)')
516 lines read
Text(0, 0.5, 'Propagation Delay (ms)')

ITD testing¶
import golding_mso as gmso
import matplotlib.pyplot as plt
import numpy as np
from golding_mso.sims import itd_test_sweep
mso_cell = gmso.Cell(gmso.morphologies['151124_03'])
mso_cell.assign_channels()
mso_cell.attach_axon()
itd_results = itd_test_sweep(mso_cell, mso_cell.lateral_nofilopodia, mso_cell.medial_nofilopodia, 'total', itd_vals=np.arange(-0.5,0.51,0.01), record_axon=True, exc_fiber_gmax = 0.03) # Test ITDs of -0.25 to 0.25 ms
spikes = itd_results['spike_counts']
for trial in range(19):
spikes += itd_test_sweep(mso_cell, mso_cell.lateral_nofilopodia, mso_cell.medial_nofilopodia, 'total', itd_vals=np.arange(-0.5,0.51,0.01), record_axon=True, exc_fiber_gmax = 0.03)['spike_counts'] # Test ITDs of -0.25 to 0.25 ms
plt.plot(itd_results['itd_vals'], spikes/21)
plt.xlabel('ITD (ms)')
plt.ylabel('Spike prob.')
plt.title('ITD Tuning Curve (n=20)')
plt.show()

Editing config¶
from golding_mso import config as current_config
from pprint import pprint
current_config.reload() # current_config = user_config
package_default_config = current_config.from_default
current_config.reload_default() # current_config = package_default_config
current_config['initialization']['Ra'] = 150
# Save current config into user default
current_config.save()
user_config = current_config.from_user
#user_config = current_config
# Load package default into current config
current_config.reload_default()
package_default_config = current_config.from_default
#package_default_config = current_config