Esempio n. 1
0
def make_NMDA( name ):
    if moose.exists( '/library/' + name ):
        return
    NMDA = moose.NMDAChan( '/library/' + name )
    NMDA.Ek = 0.0
    NMDA.tau1 = 20.0e-3
    NMDA.tau2 = 20.0e-3
    NMDA.Gbar = 5 * SOMA_A
    NMDA.CMg = 1.2		#	[Mg]ext in mM
    NMDA.KMg_A = 1.0/0.28
    NMDA.KMg_B = 1.0/62
    NMDA.temperature = 300  # Temperature in Kelvin.
    NMDA.extCa = 1.5        # [Ca]ext in mM
    NMDA.intCa = 0.00008        # [Ca]int in mM
    NMDA.intCaScale = 1         # Scale factor from elec Ca units to mM
    NMDA.intCaOffset = 0.00008  # Basal [Ca]int in mM
    NMDA.condFraction = 0.02  # Fraction of conductance due to Ca

    addmsg1 = moose.Mstring( NMDA.path + '/addmsg1' )
    addmsg1.value = '.	ICaOut ../Ca_conc current'
    addmsg2 = moose.Mstring( NMDA.path + '/addmsg2' )
    addmsg2.value = '../Ca_conc	concOut . assignIntCa'

    sh = moose.SimpleSynHandler( NMDA.path + '/sh' )
    moose.connect( sh, 'activationOut', NMDA, 'activation' )
    sh.numSynapses = 1
    sh.synapse[0].weight = 1
    return NMDA
Esempio n. 2
0
def transformNMDAR( path ):
    for i in moose.wildcardFind( path + "/##/#NMDA#[ISA!=NMDAChan]" ):
        chanpath = i.path
        pa = i.parent
        i.name = '_temp'
        if ( chanpath[-3:] == "[0]" ):
            chanpath = chanpath[:-3]
        nmdar = moose.NMDAChan( chanpath )
        sh = moose.SimpleSynHandler( chanpath + '/sh' )
        moose.connect( sh, 'activationOut', nmdar, 'activation' )
        sh.numSynapses = 1
        sh.synapse[0].weight = 1
        nmdar.Ek = i.Ek
        nmdar.tau1 = i.tau1
        nmdar.tau2 = i.tau2
        nmdar.Gbar = i.Gbar
        nmdar.CMg = 12
        nmdar.KMg_A = 1.0 / 0.28
        nmdar.KMg_B = 1.0 / 62
        nmdar.temperature = 300
        nmdar.extCa = 1.5
        nmdar.intCa = 0.00008
        nmdar.intCaScale = 1
        nmdar.intCaOffset = 0.00008
        nmdar.condFraction = 0.02
        moose.delete( i )
        moose.connect( pa, 'channel', nmdar, 'channel' )
        caconc = moose.wildcardFind( pa.path + '/#[ISA=CaConcBase]' )
        if ( len( caconc ) < 1 ):
            print('no caconcs found on ', pa.path)
        else:
            moose.connect( nmdar, 'ICaOut', caconc[0], 'current' )
            moose.connect( caconc[0], 'concOut', nmdar, 'assignIntCa' )
Esempio n. 3
0
def create_synaptic_channel(name,
                            Gbar,
                            tau1,
                            tau2,
                            ek,
                            synapse_count,
                            delay,
                            params=None):
    lib = moose.Neutral('/library') if not moose.exists(
        '/library') else moose.element('/library')
    if name == 'nmda':
        synchan = moose.NMDAChan(lib.path + '/' + name)
        try:
            synchan = set_nmda_magnesium_parameters(synchan, params)
            synchan = set_ghk_equation_factors(synchan, params)
        except:
            raise ValueError("No NMDA params provided")
    else:
        synchan = moose.SynChan(lib.path + '/' + name)
    synchan.Gbar = Gbar
    synchan.tau1 = tau1
    synchan.tau2 = tau2
    synchan.Ek = ek
    sh = create_synaptic_handle(synchan, synapse_count, delay)
    moose.connect(sh, 'activationOut', synchan, 'activation')
    return (synchan, sh)
Esempio n. 4
0
def testNMDAChan(simtime=1.0, simdt=1e-5, plotdt=1e-5):
    context = moose.PyMooseBase.getContext()
    container = moose.Neutral('test_NMDA')

    soma_b = moose.Compartment('B', container)
    soma_b.Rm = 5.3e9 # GM = 2e-5 S/cm^2
    soma_b.Cm = 8.4823001646924426e-12 # CM = 0.9 uF/cm^2
    soma_b.Em = -65e-3 
    soma_b.initVm = -65e-3
    soma_b.Ra = 282942.12 # RA = 250 Ohm-cm
    
    nmda = moose.NMDAChan('nmda', container)
    nmda.tau2 = 5e-3
    nmda.tau1 = 130e-3
    nmda.Gbar = 1e-9
    nmda.saturation = 1e10
    nmda.connect('channel', soma_b, 'channel')
    spikegen = moose.SpikeGen('spike', container)
    spikegen.threshold = 0.5
    spikegen.connect('event', nmda, 'synapse')
    spikegen.refractT = 0.0
    nmda.delay[0] = 1e-3
    nmda.weight[0] = 1.0
    
    pulsegen = moose.PulseGen('pulse', container)
    pulsegen.setCount(3)
    pulsegen.level[0] = 1.0
    pulsegen.delay[0] = 10e-3
    pulsegen.width[0] = 1e-3
    pulsegen.level[1] = 1.0
    pulsegen.delay[1] = 2e-3
    pulsegen.width[1] = 1e-3    
    pulsegen.delay[2] = 1e9
    pulsegen.connect('outputSrc', spikegen, 'Vm')

    data = moose.Neutral('data')
    vmB = moose.Table('Vm_B', data)
    vmB.stepMode = 3
    vmB.connect('inputRequest', soma_b, 'Vm')
    pulse = moose.Table('pulse', data)
    pulse.stepMode = 3
    pulse.connect('inputRequest', pulsegen, 'output')
    gNMDA = moose.Table('G', data)
    gNMDA.stepMode = 3
    gNMDA.connect('inputRequest', nmda, 'Gk')

    context.setClock(0, simdt)
    context.setClock(1, simdt)
    context.setClock(2, simdt)
    context.setClock(3, plotdt)
    context.reset()
    context.step(simtime)
    # gNMDA.dumpFile('gNMDA.dat', False)
    # vmA.dumpFile('Va.dat', False)
    # vmB.dumpFile('Vb.dat', False)
    ts = np.linspace(0, simtime, len(gNMDA))
    pylab.plot(ts, pulse)
    pylab.plot(ts, np.asarray(gNMDA) * 1e9, label='gNMDA')
    pylab.show()
    np.savetxt('../data/two_comp_nmda.plot', np.transpose(np.vstack((ts, vmB, gNMDA))))
Esempio n. 5
0
def test_synintegration(filename, target_cell, source_type):
    sim = Simulation('synintegration')
    cell = SpinyStellate(SpinyStellate.prototype, 
                         sim.model.path + '/SpinyStellate')
    vm_table = cell.comp[cell.presyn].insertRecorder('Vm', 'Vm', sim.data)
    # Create a common spike gen object
    sp = moose.SpikeGen('spike', sim.model)
    sp.threshold = 0.0
    sp.edgeTriggered = 1
    sptab = moose.Table('spike', sim.data)
    sptab.stepMode = 3
    sptab.connect('inputRequest', sp, 'state')
    (comp_indices, syntype, gbar, tau1, tau2, Ek, ) = \
        get_syninfo(filename, target_cell, source_type)    
    # Set up the synapses
    for ii in range(len(comp_indices)):
        print '%d\t%s\t%g\t%g\t%g\t%g' % (comp_indices[ii], 
                                          syntype[ii], 
                                          gbar[ii], 
                                          tau1[ii], 
                                          tau2[ii], 
                                          Ek[ii])
        comp = cell.comp[comp_indices[ii]]
        weight = 1.0
        if syntype[ii] == 'nmda':
            chan = moose.NMDAChan('nmda_from_%s' % (source_type), comp)
            chan.MgConc = 1.5            
            weight = gbar[ii]
        else:
            chan = moose.SynChan('%s_from_%s' % (syntype[ii], source_type), 
                                 comp)
        chan.Gbar = gbar[ii]
        chan.tau1 = tau1[ii]
        chan.tau2 = tau2[ii]
        chan.Ek = Ek[ii]
        comp.connect('channel', chan, 'channel')
        sp.connect('event', chan, 'synapse')
        count = chan.numSynapses
        if source_type == 'TCR':
            chan.delay[count-1] = 1e-3 # thalamocortical delay
        else:
            chan.delay[count-1] = 0.05e-3 # default delay
        chan.weight[count-1] = weight
        gktable = moose.Table('%s_%s_%s' % (cell.name, comp.name, chan.name), sim.data)
        gktable.stepMode = 3
        gktable.connect('inputRequest', chan, 'Gk')
    pulsegen = moose.PulseGen('pulse', sim.model)
    pulsegen.firstDelay = 3.0
    pulsegen.firstLevel = 1.0
    pulsegen.firstWidth = 1e-3
    pulsegen.trigMode = moose.FREE_RUN
    pulsegen.connect('outputSrc', sp, 'Vm')
    ptable = moose.Table('pulse', sim.data)
    ptable.stepMode = 3
    ptable.connect('inputRequest', pulsegen, 'output')
    sim.schedule(simdt=1e-6, plotdt=1e-6)
    sim.run(10.0)
    sim.save_data_h5(filename.replace('network_', 'synintegration_'))
Esempio n. 6
0
def synintegration2(filename, target_cell):
    raise NotImplementedError
    syntab = None
    netfile = h5.File(filename, 'r')
    syntab = netfile['network/synapse'][:]
    idx = np.char.startswith(syntab['dest'], target_cell)
    syntab = syntab[idx]
    sim = Simulation('synintegration')
    cell = SpinyStellate(SpinyStellate.prototype, 
                         sim.model.path + '/SpinyStellate')
    vm_table = cell.comp[cell.presyn].insertRecorder('Vm', 'Vm', sim.data)
    # Create a common spike gen object
    sp = moose.SpikeGen('spike', sim.model)
    sp.threshold = 0.0
    sp.edgeTriggered = 1
    sptab = moose.Table('spike', sim.data)
    sptab.stepMode = 3
    sptab.connect('inputRequest', sp, 'state')
    for ii in range(len(syntab)):
        source = syntab['source'][ii].partition('/')[0]
        dest, compname = syntab['dest'][ii].split('/')
        if source == dest:
            print 'source = dest', source, filename
            continue
        comp_no = compname.split('_')[-1]
        comp = cell[int(comp_no)]
        weight = 1.0
        if syntab['type'][ii] == 'nmda':
            chan = moose.NMDAChan('nmda_from_%s' % 
                                  (source.split('_')[0]), comp)
            chan.MgConc = 1.5            
            weight = syntab['Gbar'][ii]
        else:
            chan = moose.SynChan('%s_from_%s' % 
                                 (syntab['type'][ii], source.split('_')[0]), 
                                 comp)
        chan.Gbar = syntab['Gbar'][ii]
        chan.tau1 = syntab['tau1'][ii]
        chan.tau2 = syntab['tau2'][ii]
        chan.Ek = syntab['Ek'][ii]
        comp.connect('channel', chan, 'channel')
        sp.connect('event', chan, 'synapse')
        count = chan.numSynapses
        if source_type == 'TCR':
            chan.delay[count-1] = 1e-3 # thalamocortical delay
        else:
            chan.delay[count-1] = 0.05e-3 # default delay
        chan.weight[count-1] = weight
        gktable = moose.Table('%s_%s_%s' % (cell.name, comp.name, chan.name), sim.data)
        gktable.stepMode = 3
        gktable.connect('inputRequest', chan, 'Gk')
Esempio n. 7
0
def makeSynapse(sg, comp, syntype, name, Ek, Gbar, tau1, tau2, delay=0.0):
    syn = None
    if syntype == 'nmda':
        syn = moose.NMDAChan(name, comp)
    else:
        syn = moose.SynChan(name, comp)
    syn.Ek = Ek
    syn.Gbar = Gbar
    syn.tau1 = tau1
    syn.tau2 = tau2
    comp.connect('channel', syn, 'channel')
    sg.threshold = 0.0
    sg.absRefract = 0.0
    if not sg.connect('event', syn, 'synapse'):
        raise Exception('Error creating connection: %s->%s' %
                        (sg.path, syn.path))
    return syn
Esempio n. 8
0
def make_synchan(model, chanpath, synparams):
    # for AMPA or GABA - just make the channel, no connections/messages
    log.info('synparams: {} {}', chanpath, synparams)
    if synparams.NMDA:
        synchan = moose.NMDAChan(chanpath)
    else:
        synchan = moose.SynChan(chanpath)
    synchan.tau1 = synparams.tau1
    synchan.tau2 = synparams.tau2
    synchan.Ek = synparams.Erev
    #for NMDA, assign MgBlock parameters, and then parameters for calcium current using GHK
    if synparams.NMDA and synparams.MgBlock:
        synchan.KMg_A = synparams.MgBlock.A
        synchan.KMg_B = synparams.MgBlock.B
        synchan.CMg = synparams.MgBlock.C
        if (model.calYN):
            synchan.condFraction = synparams.nmdaCaFrac
            synchan.temperature = constants.celsius_to_kelvin(model.Temp)
            synchan.extCa = model.ConcOut
    return synchan
Esempio n. 9
0
import moose
import numpy as np
from matplotlib import pyplot as plt
from pprint import pprint  # allows for one to see nested dictionaries clearer
plt.ion()
nmdachan = moose.NMDAChan('/nmda')
moose.showfield(nmdachan)

nmdachan.KMg_A = 0.17
nmdachan.KMg_B = 0.012
nmdachan.CMg = 1.4


# Function to plot and see magnesium effect on NMDA channel
def magnesium_term(A, B, C):
    eta = 1.0 / A
    gamma = 1.0 / B
    v = np.linspace(-100e-3, 60e-3, 1000)  # voltage vector
    mg_term = 1 / (1 + eta * C * np.exp(-gamma * v))
    plt.plot(v, mg_term)


synparams = {}
mgparams = {'A': (1 / 6.0), 'B': (1 / 80.0), 'conc': 1.4}
synparams['ampa'] = {'Erev': 5e-3, 'tau1': 1.0e-3, 'tau2': 5e-3, 'Gbar': 1e-9}
synparams['nmda'] = {
    'Erev': 5e-3,
    'tau1': 1.1e-3,
    'tau2': 37.5e-3,
    'Gbar': 2e-9,
    'mgparams': mgparams,
Esempio n. 10
0
def addNMDA(comp, name):
    synchan = moose.NMDAChan(comp.path + "/" + name)
Esempio n. 11
0
def testNMDAChan(simtime=1.0, simdt=1e-5, plotdt=1e-5):
    context = moose.PyMooseBase.getContext()
    container = moose.Neutral('test_NMDA')
    soma_a = moose.Compartment('A', container)
    soma_a.Rm = 5.3e9  # GM = 2e-5 S/cm^2
    soma_a.Cm = 8.4823001646924426e-12  # CM = 0.9 uF/cm^2
    soma_a.Em = -65e-3
    soma_a.initVm = -65e-3
    soma_a.Ra = 282942.12

    soma_b = moose.Compartment('B', container)
    soma_b.Rm = 5.3e9  # GM = 2e-5 S/cm^2
    soma_b.Cm = 8.4823001646924426e-12  # CM = 0.9 uF/cm^2
    soma_b.Em = -65e-3
    soma_b.initVm = -65e-3
    soma_b.Ra = 282942.12  # RA = 250 Ohm-cm

    nmda = moose.NMDAChan('nmda', container)
    nmda.tau2 = 5e-3
    nmda.tau1 = 130.5e-3
    nmda.Gbar = 1
    nmda.saturation = 1e10
    nmda.connect('channel', soma_b, 'channel')

    spikegen = moose.SpikeGen('spike', container)
    spikegen.threshold = 0.0
    soma_a.connect('VmSrc', spikegen, 'Vm')
    spikegen.connect('event', nmda, 'synapse')

    nmda.delay[0] = 0.05e-3
    nmda.weight[0] = 0.25e-9
    pulsegen = moose.PulseGen('pulse', container)
    pulsegen.firstLevel = 0.1e-9
    pulsegen.firstDelay = 20e-3
    pulsegen.firstWidth = 20e-3
    pulsegen.secondDelay = 1e9
    pulsegen.connect('outputSrc', soma_a, 'injectMsg')

    data = moose.Neutral('data')
    vmB = moose.Table('Vm_B', data)
    vmB.stepMode = 3
    vmB.connect('inputRequest', soma_b, 'Vm')

    vmA = moose.Table('Vm_A', data)
    vmA.stepMode = 3
    vmA.connect('inputRequest', soma_a, 'Vm')

    gNMDA = moose.Table('G', data)
    gNMDA.stepMode = 3
    gNMDA.connect('inputRequest', nmda, 'Gk')

    context.setClock(0, simdt)
    context.setClock(1, simdt)
    context.setClock(2, simdt)
    context.setClock(3, plotdt)
    context.reset()
    context.step(simtime)
    # gNMDA.dumpFile('gNMDA.dat', False)
    # vmA.dumpFile('Va.dat', False)
    # vmB.dumpFile('Vb.dat', False)
    ts = np.linspace(0, simtime, len(gNMDA))
    np.savetxt('../data/two_comp_nmda.plot',
               np.transpose(np.vstack((ts, vmA, vmB, gNMDA))))