Spreading Depolarization in Brain Slices (Kelley et al. 2022)

 Download zip file 
Help downloading and running models
Accession:267259
A tissue-scale model of spreading depolarization (SD) in brain slices. We used the NEURON simulator's reaction-diffusion framework to implement embed thousands of neurons (based on the the model from Wei et al. 2014) in the extracellular space of a brain slice, which is itself embedded in an bath solution. We initiate SD in the slice by elevating extracellular K+ in a spherical region at the center of the slice. Effects of hypoxia and propionate on the slice were modeled by appropriate changes to the volume fraction and tortuosity of the extracellular space and oxygen/chloride concentrations.
Reference:
1 . Kelley C, Newton AJH, Hrabetova S, McDougal RA, Lytton WW (2022) Multiscale Computer Modeling of Spreading Depolarization in Brain Slices eNeuro [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Extracellular; Neuron or other electrically excitable cell; Glia;
Brain Region(s)/Organism:
Cell Type(s):
Channel(s): Na/K pump; NKCC1; KCC2; I Na, leak; I Cl, leak; I K,leak; I K; I Na,t;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Spreading depolarization; Spreading depression; Reaction-diffusion;
Implementer(s): Kelley, Craig; Newton, Adam J H [adam.newton at yale.edu]; Lytton, William [bill.lytton at downstate.edu]; McDougal, Robert [robert.mcdougal at yale.edu];
Search NeuronDB for information about:  I Na,t; I K; I K,leak; Na/K pump; I Cl, leak; I Na, leak; KCC2; NKCC1;
from numpy.core.numeric import True_
import requests 
import numpy as np
from matplotlib import pyplot as plt 
plt.ion()

brainstem_rxvs = ['Williams_Wilson', 'Mena-Segovia', 'Cameron', 'Irintchev']
neo_pyramidal_rxvs = ['BICCN-MOp-miniatlas-anatomy', 'Dendritica', 'Suter_Shepherd', 'Groh', 'Buchs', 'DeKock', 'Kawaguchi', 'Jacobs', 'Meyer']
neo_int_rxvs = ['Yuste', 'Sun', 'Bikson']
hipp_pyr_rxvs = ['Arnold_Johnston', 'Soltesz']
granule_rxvs = ['Beining', 'Bausch']
hipp_int_rxvs = ['Anstoetz', 'Gulyas', 'Hajos', 'Turner']
out = {}

base_url = 'http://neuromorpho.org/api/neuron/select?q=archive:'

all_rxvs = brainstem_rxvs + neo_pyramidal_rxvs + neo_int_rxvs + hipp_pyr_rxvs + granule_rxvs + hipp_int_rxvs

for rxv in all_rxvs:
    full_url = base_url + rxv
    r = requests.get(full_url)
    data = r.json()
    out[rxv] = {}
    for cell in data['_embedded']['neuronResources']:
        if (cell['attributes'] == 'Diameter, 3D, Angles') and (cell['domain'].startswith('Dendrites')):
            if 'neocortex' in cell['brain_region'] and (('principal cell' in cell['cell_type']) or ('pyramidal' in cell['cell_type'])):
                if 'neo_pyr' not in list(out[rxv].keys()):
                    out[rxv]['neo_pyr'] = {'sv' : [float(cell['surface']) / float(cell['volume'])],
                                            'min_age' : [cell['min_age']],
                                            'max_age' : [cell['max_age']],
                                            'reference' : cell['reference_doi'],
                                            'avg_sv' : None,
                                            'std_sv' : None,
                                            'brain_region' : cell['brain_region'],
                                            'species' : cell['species'],
                                            'cell_type' : cell['cell_type'],
                                            'n' : None}
                else:
                    out[rxv]['neo_pyr']['sv'].append(float(cell['surface']) / float(cell['volume']))
                    out[rxv]['neo_pyr']['min_age'].append(cell['min_age'])
                    out[rxv]['neo_pyr']['max_age'].append(cell['max_age'])
                    out[rxv]['neo_pyr']['avg_sv'] = np.mean(out[rxv]['neo_pyr']['sv'])
                    out[rxv]['neo_pyr']['std_sv'] = np.std(out[rxv]['neo_pyr']['sv'])
                    out[rxv]['neo_pyr']['n'] = len(out[rxv]['neo_pyr']['sv'])
            if ('neocortex' in cell['brain_region']) and ('interneuron' in cell['cell_type']):
                if 'neo_int' not in list(out[rxv].keys()):
                    out[rxv]['neo_int'] = {'sv' : [float(cell['surface']) / float(cell['volume'])],
                                            'min_age' : [cell['min_age']],
                                            'max_age' : [cell['max_age']],
                                            'reference' : cell['reference_doi'],
                                            'avg_sv' : None,
                                            'std_sv' : None,
                                            'brain_region' : cell['brain_region'],
                                            'species' : cell['species'],
                                            'cell_type' : cell['cell_type'],
                                            'n' : None}
                else:
                    out[rxv]['neo_int']['sv'].append(float(cell['surface']) / float(cell['volume']))
                    out[rxv]['neo_int']['min_age'].append(cell['min_age'])
                    out[rxv]['neo_int']['max_age'].append(cell['max_age'])
                    out[rxv]['neo_int']['avg_sv'] = np.mean(out[rxv]['neo_int']['sv'])
                    out[rxv]['neo_int']['std_sv'] = np.std(out[rxv]['neo_int']['sv'])
                    out[rxv]['neo_int']['n'] = len(out[rxv]['neo_int']['sv'])
            if ('brainstem' in cell['brain_region']):
                if 'brainstem' not in list(out[rxv].keys()):
                    out[rxv]['brainstem'] = {'sv' : [float(cell['surface']) / float(cell['volume'])],
                                            'min_age' : [cell['min_age']],
                                            'max_age' : [cell['max_age']],
                                            'reference' : cell['reference_doi'],
                                            'avg_sv' : None,
                                            'std_sv' : None,
                                            'brain_region' : cell['brain_region'],
                                            'species' : cell['species'],
                                            'cell_type' : [cell['cell_type']],
                                            'n' : None}
                else:
                    out[rxv]['brainstem']['sv'].append(float(cell['surface']) / float(cell['volume']))
                    out[rxv]['brainstem']['min_age'].append(cell['min_age'])
                    out[rxv]['brainstem']['max_age'].append(cell['max_age'])
                    out[rxv]['brainstem']['avg_sv'] = np.mean(out[rxv]['brainstem']['sv'])
                    out[rxv]['brainstem']['std_sv'] = np.std(out[rxv]['brainstem']['sv'])
                    out[rxv]['brainstem']['n'] = len(out[rxv]['brainstem']['sv'])
                    out[rxv]['brainstem']['cell_type'].append(cell['cell_type'])
            if ('hippocampus' in cell['brain_region']) and ('Control' in cell['experiment_condition']) and (('pyramidal' in cell['cell_type']) or ('pyramidal cell' in cell['cell_type'])):
                if 'hipp_pyr' not in list(out[rxv].keys()):
                    out[rxv]['hipp_pyr'] = {'sv' : [float(cell['surface']) / float(cell['volume'])],
                                            'min_age' : [cell['min_age']],
                                            'max_age' : [cell['max_age']],
                                            'reference' : cell['reference_doi'],
                                            'avg_sv' : None,
                                            'std_sv' : None,
                                            'brain_region' : cell['brain_region'],
                                            'species' : cell['species'],
                                            'cell_type' : cell['cell_type'],
                                            'n' : None}
                else:
                    out[rxv]['hipp_pyr']['sv'].append(float(cell['surface']) / float(cell['volume']))
                    out[rxv]['hipp_pyr']['min_age'].append(cell['min_age'])
                    out[rxv]['hipp_pyr']['max_age'].append(cell['max_age'])
                    out[rxv]['hipp_pyr']['avg_sv'] = np.mean(out[rxv]['hipp_pyr']['sv'])
                    out[rxv]['hipp_pyr']['std_sv'] = np.std(out[rxv]['hipp_pyr']['sv'])
                    out[rxv]['hipp_pyr']['n'] = len(out[rxv]['hipp_pyr']['sv'])
            if ('hippocampus' in cell['brain_region']) and ('Control' in cell['experiment_condition']) and ('granule' in cell['cell_type']):
                if 'hipp_gran' not in list(out[rxv].keys()):
                    out[rxv]['hipp_gran'] = {'sv' : [float(cell['surface']) / float(cell['volume'])],
                                            'min_age' : [cell['min_age']],
                                            'max_age' : [cell['max_age']],
                                            'reference' : cell['reference_doi'],
                                            'avg_sv' : None,
                                            'std_sv' : None,
                                            'brain_region' : cell['brain_region'],
                                            'species' : cell['species'],
                                            'cell_type' : cell['cell_type'],
                                            'n' : None}
                else:
                    out[rxv]['hipp_gran']['sv'].append(float(cell['surface']) / float(cell['volume']))
                    out[rxv]['hipp_gran']['min_age'].append(cell['min_age'])
                    out[rxv]['hipp_gran']['max_age'].append(cell['max_age'])
                    out[rxv]['hipp_gran']['avg_sv'] = np.mean(out[rxv]['hipp_gran']['sv'])
                    out[rxv]['hipp_gran']['std_sv'] = np.std(out[rxv]['hipp_gran']['sv'])
                    out[rxv]['hipp_gran']['n'] = len(out[rxv]['hipp_gran']['sv'])
            if ('hippocampus' in cell['brain_region']) and ('Control' in cell['experiment_condition']) and ('interneuron' in cell['cell_type']):
                if 'hipp_inter' not in list(out[rxv].keys()):
                    out[rxv]['hipp_inter'] = {'sv' : [float(cell['surface']) / float(cell['volume'])],
                                            'min_age' : [cell['min_age']],
                                            'max_age' : [cell['max_age']],
                                            'reference' : cell['reference_doi'],
                                            'avg_sv' : None,
                                            'std_sv' : None,
                                            'brain_region' : cell['brain_region'],
                                            'species' : cell['species'],
                                            'cell_type' : cell['cell_type'],
                                            'n' : None}
                else:
                    out[rxv]['hipp_inter']['sv'].append(float(cell['surface']) / float(cell['volume']))
                    out[rxv]['hipp_inter']['min_age'].append(cell['min_age'])
                    out[rxv]['hipp_inter']['max_age'].append(cell['max_age'])
                    out[rxv]['hipp_inter']['avg_sv'] = np.mean(out[rxv]['hipp_inter']['sv'])
                    out[rxv]['hipp_inter']['std_sv'] = np.std(out[rxv]['hipp_inter']['sv'])
                    out[rxv]['hipp_inter']['n'] = len(out[rxv]['hipp_inter']['sv'])

# plt.plot(sv, '*')
# plt.scatter(age, sv)

for archive in out.keys(): 
    print(archive) 
    for cell_type in out[archive].keys():
        print(cell_type) 
        print('s:v ' + str(out[archive][cell_type]['avg_sv'])) 
        print('std ' + str(out[archive][cell_type]['std_sv'])) 
        print('species ' + out[archive][cell_type]['species']) 
        print('cell type' + str(out[archive][cell_type]['cell_type']))
        print('n ' + str(out[archive][cell_type]['n']))
        print('\n')

bstem = []
adlt_bstem = []
bstem_refs = []
for rxv in brainstem_rxvs:
    adlt = []
    for sv, age in zip(out[rxv]['brainstem']['sv'], out[rxv]['brainstem']['min_age']):
        if age != 'Not Reported' and age != '4.5':
            if float(age) > 14:
                adlt.append(sv)
        else:
            adlt.append(sv)
    # adlt = [sv for sv, age in zip(out[rxv]['brainstem']['sv'], out[rxv]['brainstem']['min_age']) if (age is not 'Not Reported') and float(age) > 14]
    adlt_bstem = adlt_bstem + adlt
    bstem = bstem + out[rxv]['brainstem']['sv']
    bstem_refs.append(out[rxv]['brainstem']['reference'])

rat_neopyr = []
rat_neopyr_rxvs = []
rat_neopyr_refs = []
for rxv in all_rxvs:
    if 'neo_pyr' in (out[rxv].keys()):
        if out[rxv]['neo_pyr']['species'] == 'rat':
            rat_neopyr_rxvs.append(rxv)
            rat_neopyr = rat_neopyr + out[rxv]['neo_pyr']['sv']
            rat_neopyr_refs.append(out[rxv]['neo_pyr']['reference'])

mouse_neopyr_rxvs = []
mouse_neopyr_refs = []
for rxv in all_rxvs:
    if 'neo_pyr' in (out[rxv].keys()):
        if out[rxv]['neo_pyr']['species'] == 'mouse':
            mouse_neopyr_rxvs.append(rxv)
            mouse_neopyr = rat_neopyr + out[rxv]['neo_pyr']['sv']
            mouse_neopyr_refs.append(out[rxv]['neo_pyr']['reference'])

rat_neoint = []
rat_neoint_rxvs = []
rat_neoint_refs = []
for rxv in all_rxvs:
    if 'neo_int' in (out[rxv].keys()):
        if out[rxv]['neo_int']['species'] == 'rat':
            rat_neoint_rxvs.append(rxv)
            rat_neoint = rat_neopyr + out[rxv]['neo_int']['sv']
            rat_neoint_refs.append(out[rxv]['neo_int']['reference'])

mouse_neoint = []
mouse_neoint_rxvs = []
mouse_neoint_refs = []
for rxv in all_rxvs:
    if 'neo_int' in (out[rxv].keys()):
        if out[rxv]['neo_int']['species'] == 'mouse':
            mouse_neoint_rxvs.append(rxv)
            mouse_neoint = rat_neopyr + out[rxv]['neo_int']['sv']
            mouse_neoint_refs.append(out[rxv]['neo_int']['reference'])


print('Brainstem: ' + str(round(np.mean(bstem),2)) + ' +/- ' + 
        str(round(np.std(bstem),2)) + ' (n=' + str(len(bstem)) + ')\n')
print('Mature Brainstem: ' + str(round(np.mean(adlt_bstem),2)) + ' +/- ' + 
        str(round(np.std(adlt_bstem),2)) + ' (n=' + str(len(adlt_bstem)) + ')\n')
refstr = ''
for ref in bstem_refs:
    if ref:
        refstr = refstr + ref[0] + ', '
    else:
        refstr = refstr + 'None, '
refstr = refstr[:-2] + '\n'
print(refstr)

print('Rat Nctx PYR: ' + str(round(np.mean(rat_neopyr),2)) + ' +/- ' + 
        str(round(np.std(rat_neopyr),2)) + ' (n=' + str(len(rat_neopyr)) + ')\n')
refstr = ''
for ref, rxv in zip(rat_neopyr_refs, rat_neopyr_rxvs):
    if ref:
        refstr = refstr + ref[0] + ', '
    else:
        refstr = refstr + rxv + ', '
refstr = refstr[:-2] + '\n'
print(refstr)

print('Rat Nctx INT: ' + str(round(np.mean(rat_neoint),2)) + ' +/- ' + 
        str(round(np.std(rat_neoint),2)) + ' (n=' + str(len(rat_neoint)) + ')\n')
for ref, rxv in zip(rat_neoint_refs, rat_neoint_rxvs):
    if ref:
        refstr = refstr + ref[0] + ', '
    else:
        refstr = refstr + rxv + ', '
refstr = refstr[:-2] + '\n'
print(refstr)

print('Mouse Nctx PYR: ' + str(round(np.mean(mouse_neopyr),2)) + ' +/- ' + 
        str(round(np.std(mouse_neopyr),2)) + ' (n=' + str(len(mouse_neopyr)) + ')\n')
for ref, rxv in zip(mouse_neopyr_refs, mouse_neopyr_rxvs):
    if ref:
        refstr = refstr + ref[0] + ', '
    else:
        refstr = refstr + rxv + ', '
refstr = refstr[:-2] + '\n'
print(refstr)

print('Mouse Nctx INT: ' + str(round(np.mean(mouse_neoint),2)) + ' +/- ' + 
        str(round(np.std(mouse_neoint),2)) + ' (n=' + str(len(mouse_neoint)) + ')\n')
for ref, rxv in zip(mouse_neoint_refs, mouse_neoint_rxvs):
    if ref:
        refstr = refstr + ref[0] + ', '
    else:
        refstr = refstr + rxv + ', '
refstr = refstr[:-2] + '\n'
print(refstr)

# v1.0 - analysis of S:V for cells from NeuroMorpho with largely complete 3D dendritic reconstructions

Loading data, please wait...