def run_single_channel(channelname, Gbar, simtime, simdt=testutils.SIMDT, plotdt=testutils.PLOTDT):
    testId = uuid.uuid4().int
    container = moose.Neutral('test%d' % (testId))
    model_container = moose.Neutral('%s/model' % (container.path))
    data_container = moose.Neutral('%s/data' % (container.path))
    params = testutils.setup_single_compartment(
        model_container, data_container,
        channelbase.prototypes[channelname],
        Gbar)
    vm_data = params['Vm']
    gk_data = params['Gk']
    ik_data = params['Ik']
    testutils.setup_clocks(simdt, plotdt)
    testutils.assign_clocks(model_container, data_container)
    moose.reinit()
    print 'Starting simulation', testId, 'for', simtime, 's'
    moose.start(simtime)
    print 'Finished simulation'
    vm_file = 'data/%s_Vm.dat' % (channelname)
    gk_file = 'data/%s_Gk.dat' % (channelname)
    ik_file = 'data/%s_Ik.dat' % (channelname)
    tseries = np.array(range(len(vm_data.vec))) * simdt
    print 'Vm:', len(vm_data.vec), 'Gk', len(gk_data.vec), 'Ik', len(ik_data.vec)
    data = np.c_[tseries, vm_data.vec]
    np.savetxt(vm_file, data)
    print 'Saved Vm in', vm_file
    print len(gk_data.vec), len(vm_data.vec)
    data = np.c_[tseries, gk_data.vec]
    np.savetxt(gk_file, data)
    print 'Saved Gk in', gk_file
    data = np.c_[tseries, ik_data.vec]
    np.savetxt(ik_file, data)
    print 'Saved Gk in', ik_file
    return params
def setup_cadep_channel(model_container, data_container, channel_proto, Gbar, ca_start, ca_stop):
    """Setup a test compartment with [Ca2+] dependent channel."""
    params = setup_single_compartment(model_container, data_container, channel_proto, Gbar)
    ca_table = moose.StimulusTable(model_container.path + '/CaStim')    
    ca_table.vec = np.linspace(ca_start, ca_stop, 1000)
    ca_table.doLoop = True
    ca_recorder = moose.Table(data_container.path + '/Ca')
    moose.connect(ca_table, 'output', ca_recorder, 'input')
    moose.connect(ca_table, 'output', params['channel'], 'concen')
    params['Ca'] = ca_recorder
    params['CaStim'] = ca_table
    testutils.setup_clocks(simdt, plotdt)
    testutils.assign_clocks(model_container, data_container)    
    moose.useClock(1, '%s,%s' % (ca_recorder.path, ca_table.path), 'process')
    return params
def setup_cadep_channel(model_container, data_container, channel_proto, Gbar,
                        ca_start, ca_stop):
    """Setup a test compartment with [Ca2+] dependent channel."""
    params = setup_single_compartment(model_container, data_container,
                                      channel_proto, Gbar)
    ca_table = moose.StimulusTable(model_container.path + '/CaStim')
    ca_table.vector = np.linspace(ca_start, ca_stop, 1000)
    ca_table.doLoop = True
    ca_recorder = moose.Table(data_container.path + '/Ca')
    moose.connect(ca_table, 'output', ca_recorder, 'input')
    moose.connect(ca_table, 'output', params['channel'], 'concen')
    params['Ca'] = ca_recorder
    params['CaStim'] = ca_table
    testutils.setup_clocks(simdt, plotdt)
    testutils.assign_clocks(model_container, data_container)
    moose.useClock(1, '%s,%s' % (ca_recorder.path, ca_table.path), 'process')
    return params