Esempio n. 1
0
def writeFiles(options):
    # XML configuration file
    config = lcg.XMLConfigurationFile(options['sampling_rate'],options['duration'])
    config.add_entity(lcg.entities.H5Recorder(id=0, connections=(), compress=True))
    config.add_entity(lcg.entities.RealNeuron(id=1, connections=(0,4), spikeThreshold=-20, V0=-65, deviceFile=os.environ['COMEDI_DEVICE'],
                                              inputSubdevice=os.environ['AI_SUBDEVICE'],
                                              outputSubdevice=os.environ['AO_SUBDEVICE'],
                                              readChannel=options['ai'], writeChannel=options['ao'],
                                              inputConversionFactor=os.environ['AI_CONVERSION_FACTOR_CC'],
                                              outputConversionFactor=os.environ['AO_CONVERSION_FACTOR_CC'],
                                              inputRange=os.environ['RANGE'], reference=os.environ['GROUND_REFERENCE'],
                                              kernelFile='kernel.dat'))
    config.add_entity(lcg.entities.PID(id=2, connections=(0,1), baseline=options['amplitude'],
                                       gp=options['gp'], gi=options['gi'], gd=options['gd'], units='pA'))
    config.add_entity(lcg.entities.Waveform(id=3, connections=(0,2), filename='frequency.stim', units='Hz'))
    config.add_entity(lcg.entities.FrequencyEstimator(id=4, connections=(0,2), tau=options['tau'],
                                                      initial_frequency=options['min_freq']))
    if 'current_std' in options:
        config.add_entity(lcg.entities.Waveform(id=5, connections=(0,1), filename='current.stim', units='pA'))
        # Noisy current stim-file
        current = [[options['duration'],2,0,options['current_std'],options['current_tau'],0,0,0,0,0,0,1]]
        lcg.writeStimFile('current.stim',current,False)

    config.write(config_file)

    # Frequency stim-file
    frequency=[[options['duration'],-2,options['min_freq'],0,0,0,0,0,0,1,0,1],
               [options['duration'],-2,options['max_freq']-options['min_freq'],0,0,0,0,0,0,7,1,1]]
    lcg.writeStimFile('frequency.stim',frequency,False)
Esempio n. 2
0
def hold_cell(opts, lastValueFilename):
    print('Holding the cell with {0} pA'.format(opts['holding']))
    if opts['model']:
        with open(lastValueFilename, 'w') as fd:
            fd.write('%e' % (opts['holding']))
        return ''
    else:
        # Then use a RealNeuron to inject into the cell
        tmp = lcg.XMLConfigurationFile(opts['srate'], 0.01)

        insertRealNeuron(tmp, opts, [], lastValueFilename)
        tmp.add_entity(
            Constant(id=2, connections=[1], value=opts['holding'], units='pA'))
        tmpName = 'holdNeuron.xml'
        tmp.write(tmpName)
        return 'lcg-experiment -c {0}'.format(tmpName)
Esempio n. 3
0
def writeConfigurationFile(options):
    config = lcg.XMLConfigurationFile(options['sampling_rate'],options['duration']+3.61)
    config.add_entity(lcg.entities.H5Recorder(id=0, connections=(), compress=True))
    config.add_entity(lcg.entities.RealNeuron(id=1, connections=(0), spikeThreshold=-20, V0=-65, deviceFile=os.environ['COMEDI_DEVICE'],
                                              inputSubdevice=os.environ['AI_SUBDEVICE'],
                                              outputSubdevice=os.environ['AO_SUBDEVICE'],
                                              readChannel=options['ai'], writeChannel=options['ao'],
                                              inputConversionFactor=os.environ['AI_CONVERSION_FACTOR_CC'],
                                              outputConversionFactor=os.environ['AO_CONVERSION_FACTOR_CC'],
                                              inputRange=os.environ['RANGE'], reference=os.environ['GROUND_REFERENCE'],
                                              kernelFile='kernel.dat'))
    config.add_entity(lcg.entities.Waveform(id=2, connections=(0,1), filename=current_file, units='pA'))
    config.add_entity(lcg.entities.ConductanceStimulus(id=3, connections=(1), E=0))
    config.add_entity(lcg.entities.ConductanceStimulus(id=4, connections=(1), E=-80))
    current_id = 5
    if options['filtered']:
        if options['exc']:
            config.add_entity(lcg.entities.OUNonStationary(id=current_id, connections=(0,3), tau=options['tau_exc'],
                                                           ic=options['Gm_exc'], units='nS', interval=[2.61,2.61+options['duration']]))
            config.add_entity(lcg.entities.Waveform(id=current_id+1, connections=(0,current_id), filename='gexc_mean.stim', units='nS'))
            config.add_entity(lcg.entities.Waveform(id=current_id+2, connections=(0,current_id), filename='gexc_stddev.stim', units='nS'))
            current_id += 3
        else:
            config.add_entity(lcg.entities.Waveform(id=current_id, connections=(0,3), filename='gexc.stim', units='nS'))
            current_id += 1
        if options['inh']:
            config.add_entity(lcg.entities.OUNonStationary(id=current_id, connections=(0,4), tau=options['tau_inh'],
                                                           ic=options['Gm_inh'], units='nS', interval=[2.61,2.61+options['duration']]))
            config.add_entity(lcg.entities.Waveform(id=current_id+1, connections=(0,current_id), filename='ginh_mean.stim', units='nS'))
            config.add_entity(lcg.entities.Waveform(id=current_id+2, connections=(0,current_id), filename='ginh_stddev.stim', units='nS'))
            current_id += 3
        else:
            config.add_entity(lcg.entities.Waveform(id=current_id, connections=(0,4), filename='ginh.stim', units='nS'))
            current_id += 1
    else:
        config.add_entity(lcg.entities.Waveform(id=current_id, connections=(0,3), filename='gexc.stim', units='nS'))
        config.add_entity(lcg.entities.Waveform(id=current_id+1, connections=(0,4), filename='ginh.stim', units='nS'))
        current_id += 2
    config.write(config_file)
Esempio n. 4
0
def writeConfigurationFile(options):
    config = lcg.XMLConfigurationFile(
        options['sampling_rate'],
        len(options['dR']) * options['step_duration'] + options['pre'] +
        options['post'])
    config.add_entity(
        lcg.entities.H5Recorder(id=0, connections=(), compress=True))
    config.add_entity(
        lcg.entities.RealNeuron(
            id=1,
            connections=(0),
            spikeThreshold=-20,
            V0=-65,
            deviceFile=os.environ['COMEDI_DEVICE'],
            inputSubdevice=os.environ['AI_SUBDEVICE'],
            outputSubdevice=os.environ['AO_SUBDEVICE'],
            readChannel=options['ai'],
            writeChannel=options['ao'],
            inputConversionFactor=os.environ['AI_CONVERSION_FACTOR_CC'],
            outputConversionFactor=os.environ['AO_CONVERSION_FACTOR_CC'],
            inputRange=os.environ['RANGE'],
            reference=os.environ['GROUND_REFERENCE'],
            kernelFile='kernel.dat'))
    config.add_entity(
        lcg.entities.Waveform(id=2,
                              connections=(0, 4),
                              filename=gexc_file,
                              units='nS'))
    config.add_entity(
        lcg.entities.Waveform(id=3,
                              connections=(0, 5),
                              filename=ginh_file,
                              units='nS'))
    config.add_entity(
        lcg.entities.ConductanceStimulus(id=4, connections=(1), E=0))
    config.add_entity(
        lcg.entities.ConductanceStimulus(id=5, connections=(1), E=-80))
    config.write(config_file)
Esempio n. 5
0
def writeConfigFile(options):
    config = lcg.XMLConfigurationFile(
        options['sampling_rate'],
        options['duration'] + options['before'] + options['after'])
    config.add_entity(
        lcg.entities.H5Recorder(id=0, connections=(), compress=True))
    config.add_entity(
        lcg.entities.RealNeuron(
            id=1,
            connections=(0),
            spikeThreshold=-20,
            V0=-65,
            deviceFile=os.environ['COMEDI_DEVICE'],
            inputSubdevice=os.environ['AI_SUBDEVICE'],
            outputSubdevice=os.environ['AO_SUBDEVICE'],
            readChannel=options['ai'],
            writeChannel=options['ao'],
            inputConversionFactor=os.environ['AI_CONVERSION_FACTOR_CC'],
            outputConversionFactor=os.environ['AO_CONVERSION_FACTOR_CC'],
            inputRange=os.environ['RANGE'],
            reference=os.environ['GROUND_REFERENCE'],
            kernelFile='kernel.dat'))
    config.add_entity(
        lcg.entities.Waveform(id=2,
                              connections=(0, 3),
                              filename=stim_files['gampa'],
                              units='nS'))
    config.add_entity(
        lcg.entities.ConductanceStimulus(id=3, connections=(1), E=0.))
    config.add_entity(
        lcg.entities.Waveform(id=4,
                              connections=(0, 5),
                              filename=stim_files['ggaba'],
                              units='nS'))
    config.add_entity(
        lcg.entities.ConductanceStimulus(id=5, connections=(1), E=-80.))
    config.add_entity(
        lcg.entities.Waveform(id=6,
                              connections=(0, 7),
                              filename=stim_files['gampa_common'],
                              units='nS'))
    config.add_entity(
        lcg.entities.ConductanceStimulus(id=7, connections=(1), E=0.))
    ID = 8
    if not options['only_ampa_corr']:
        config.add_entity(
            lcg.entities.Waveform(id=ID,
                                  connections=(0, ID + 1),
                                  filename=stim_files['ggaba_common'],
                                  units='nS'))
        ID += 1
        config.add_entity(
            lcg.entities.ConductanceStimulus(id=ID, connections=(1), E=-80.))
        ID += 1
    if options['with_nmda']:
        config.add_entity(
            lcg.entities.Waveform(id=ID,
                                  connections=(0, ID + 1),
                                  filename=stim_files['gnmda'],
                                  units='nS'))
        ID += 1
        config.add_entity(
            lcg.entities.NMDAConductanceStimulus(id=ID,
                                                 connections=(1),
                                                 E=0.,
                                                 K1=options['nmda_K'][0],
                                                 K2=options['nmda_K'][1]))
        ID += 1
        config.add_entity(
            lcg.entities.Waveform(id=ID,
                                  connections=(0, ID + 1),
                                  filename=stim_files['gnmda_common'],
                                  units='nS'))
        ID += 1
        config.add_entity(
            lcg.entities.NMDAConductanceStimulus(id=ID,
                                                 connections=(1),
                                                 E=0.,
                                                 K1=options['nmda_K'][0],
                                                 K2=options['nmda_K'][1]))
    config.write(config_file)
Esempio n. 6
0
        sys.exit(1)
    try:
        opts, args = getopt.getopt(sys.argv[2:], switches, long_switches)
    except getopt.GetoptError, err:
        print(err)
        print(usage)
        sys.exit(1)
    opts = parse_prc_options(mode, opts)

    configName = 'prc.xml'
    waveformName = 'prc.stim'
    lastValueFilename = 'prc.lastValue'
    hold_time = 3
    duration = 0

    config = lcg.XMLConfigurationFile(opts['srate'], duration)
    config.add_entity(H5Recorder(id=0, connections=[], compress=True))
    if opts['model']:
        insert_model(config, opts['holding'], lastValueFilename)
    else:
        insertRealNeuron(config, opts, [0], lastValueFilename)


# Perturbation waveform
    if not mode == 'noise':
        config.add_entity(
            Waveform(id=2,
                     connections=[0, 1],
                     filename=waveformName,
                     triggered=True,
                     units='pA'))
Esempio n. 7
0
def writeIPlusBgGConfig(I, Gexc, Ginh, ai, ao, duration, sampling_rate,
                        outfile):
    config = lcg.XMLConfigurationFile(sampling_rate, duration + 3.61)
    config.add_entity(
        lcg.entities.H5Recorder(id=0, connections=(), compress=True))
    config.add_entity(
        lcg.entities.RealNeuron(
            id=1,
            connections=(0),
            spikeThreshold=-20,
            V0=-65,
            deviceFile=os.environ['COMEDI_DEVICE'],
            inputSubdevice=os.environ['AI_SUBDEVICE'],
            outputSubdevice=os.environ['AO_SUBDEVICE'],
            readChannel=ai,
            writeChannel=ao,
            inputConversionFactor=os.environ['AI_CONVERSION_FACTOR_CC'],
            outputConversionFactor=os.environ['AO_CONVERSION_FACTOR_CC'],
            inputRange=os.environ['RANGE'],
            reference=os.environ['GROUND_REFERENCE'],
            kernelFile='kernel.dat'))
    config.add_entity(
        lcg.entities.Waveform(id=2,
                              connections=(0, 1),
                              filename='current.stim',
                              units='pA'))
    config.add_entity(
        lcg.entities.Waveform(id=3,
                              connections=(0, 5),
                              filename='gexc.stim',
                              units='nS'))
    config.add_entity(
        lcg.entities.Waveform(id=4,
                              connections=(0, 6),
                              filename='ginh.stim',
                              units='nS'))
    config.add_entity(
        lcg.entities.ConductanceStimulus(id=5, connections=(1), E=0.))
    config.add_entity(
        lcg.entities.ConductanceStimulus(id=6, connections=(1), E=-80.))
    config.write(outfile)

    current = [[0.5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
               [0.01, 1, -300, 0, 0, 0, 0, 0, 0, 0, 0, 1],
               [0.5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
               [0.6, 1, -100, 0, 0, 0, 0, 0, 0, 0, 0, 1],
               [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
               [duration, 1, I, 0, 0, 0, 0, 0, 0, 0, 0, 1],
               [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]]
    conductance = [[2.61, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
                   [duration, 2, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1],
                   [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]]

    lcg.writeStimFile('current.stim', current, None)

    conductance[1][2] = Gexc['m']
    conductance[1][3] = Gexc['s']
    conductance[1][4] = Gexc['tau']
    if 'seed' in Gexc:
        conductance[1][8] = Gexc['seed']
    else:
        conductance[1][8] = np.random.poisson(10000)
    lcg.writeStimFile('gexc.stim', conductance, None)

    conductance[1][2] = Ginh['m']
    conductance[1][3] = Ginh['s']
    conductance[1][4] = Ginh['tau']
    if 'seed' in Ginh:
        conductance[1][8] = Ginh['seed']
    else:
        conductance[1][8] = np.random.poisson(10000)
    lcg.writeStimFile('ginh.stim', conductance, None)
Esempio n. 8
0
def writeFiles(options):
    stim_file = 'frequency.stim'
    config = lcg.XMLConfigurationFile(options['sampling_rate'],
                                      options['duration'])
    config.add_entity(
        lcg.entities.H5Recorder(id=0, connections=(), compress=True))
    config.add_entity(
        lcg.entities.RealNeuron(
            id=1,
            connections=(0, 4),
            spikeThreshold=-20,
            V0=-65,
            deviceFile=os.environ['COMEDI_DEVICE'],
            inputSubdevice=os.environ['AI_SUBDEVICE'],
            outputSubdevice=os.environ['AO_SUBDEVICE'],
            readChannel=options['ai'],
            writeChannel=options['ao'],
            inputConversionFactor=os.environ['AI_CONVERSION_FACTOR_CC'],
            outputConversionFactor=os.environ['AO_CONVERSION_FACTOR_CC'],
            inputRange=os.environ['RANGE'],
            reference=os.environ['GROUND_REFERENCE'],
            kernelFile='kernel.dat'))
    config.add_entity(
        lcg.entities.PID(id=2,
                         connections=(0, 1),
                         baseline=options['I0'],
                         gp=options['gp'],
                         gi=options['gi'],
                         gd=options['gd']))
    config.add_entity(
        lcg.entities.Waveform(id=3,
                              connections=(0, 2),
                              filename=stim_file,
                              units='Hz'))
    config.add_entity(
        lcg.entities.FrequencyEstimator(id=4,
                                        connections=(0, 2),
                                        tau=options['tau'],
                                        initial_frequency=options['target'] /
                                        2))
    if 'Gm_exc' in options and 'Gm_inh' in options and 'Gs_exc' in options and 'Gs_inh' in options:
        gexc_stim_file = 'gexc.stim'
        ginh_stim_file = 'ginh.stim'
        config.add_entity(
            lcg.entities.Waveform(id=5,
                                  connections=(0, 7),
                                  filename=gexc_stim_file,
                                  units='nS'))
        config.add_entity(
            lcg.entities.Waveform(id=6,
                                  connections=(0, 8),
                                  filename=ginh_stim_file,
                                  units='nS'))
        config.add_entity(
            lcg.entities.ConductanceStimulus(id=7, connections=(1), E=0))
        config.add_entity(
            lcg.entities.ConductanceStimulus(id=8, connections=(1), E=-80))
        lcg.writeStimFile(gexc_stim_file, [
            options['duration'], 2, options['Gm_exc'], options['Gs_exc'], 5, 0,
            0, 1,
            int(np.random.uniform(high=10000)), 0, 0, 1
        ], False)
        lcg.writeStimFile(ginh_stim_file, [
            options['duration'], 2, options['Gm_inh'], options['Gs_inh'], 10,
            0, 0, 1,
            int(np.random.uniform(high=10000)), 0, 0, 1
        ], False)
    config.write(config_file)
    lcg.writeStimFile(
        stim_file,
        [options['duration'], 1, options['target'], 0, 0, 0, 0, 0, 0, 0, 0, 1],
        False)
Esempio n. 9
0
    if with_preamble:
        stimulus = [[duration,1,holding,0,0,0,0,0,0,0,0,1],
                    [tail,1,holding,0,0,0,0,0,0,0,0,1]]
        total_dur = preamble_duration + duration + tail
        conductance[0][0] = preamble_duration
        row = 0
    else:
        stimulus = [[tail,1,holding,0,0,0,0,0,0,0,0,1],
                    [duration,1,holding,0,0,0,0,0,0,0,0,1],
                    [tail,1,holding,0,0,0,0,0,0,0,0,1]]
        total_dur = 2*tail + duration
        row = 1

    # write the configuration file
    config = lcg.XMLConfigurationFile(sampling_rate,total_dur)
    config.add_entity(lcg.entities.H5Recorder(id=0, connections=(), compress=True))
    config.add_entity(lcg.entities.RealNeuron(id=1, connections=(0), spikeThreshold=-20, V0=-65, deviceFile=os.environ['COMEDI_DEVICE'],
                                              inputSubdevice=os.environ['AI_SUBDEVICE'],
                                              outputSubdevice=os.environ['AO_SUBDEVICE'],
                                              readChannel=ai, writeChannel=ao,
                                              inputConversionFactor=os.environ['AI_CONVERSION_FACTOR_CC'],
                                              outputConversionFactor=os.environ['AO_CONVERSION_FACTOR_CC'],
                                              inputRange=os.environ['RANGE'], reference=os.environ['GROUND_REFERENCE'],
                                              kernelFile='kernel.dat'))
    config.add_entity(lcg.entities.Waveform(id=2, connections=(0,3), filename=gexc_stim_file, units='nS'))
    config.add_entity(lcg.entities.ConductanceStimulus(id=3, connections=(1), E=E_exc))
    config.add_entity(lcg.entities.Waveform(id=4, connections=(0,5), filename=ginh_stim_file, units='nS'))
    config.add_entity(lcg.entities.ConductanceStimulus(id=5, connections=(1), E=E_inh))
    config.add_entity(lcg.entities.Waveform(id=6, connections=(0,1), filename=stim_file, units='pA'))
    config.write(config_file)
Esempio n. 10
0
def writeIOExternalTriggerConfigurationFile(config_file,
                                            sampling_rate,
                                            duration,
                                            channels,
                                            output_filename=None,
                                            trigger={
                                                'device': None,
                                                'subdevice': None,
                                                'channel': None,
                                                'stopChannel': None
                                            },
                                            digitalChannels={
                                                'device': None,
                                                'subdevice': None,
                                                'channels': None
                                            }):

    config = lcg.XMLConfigurationFile(sampling_rate,
                                      duration,
                                      output_filename,
                                      trigger=trigger)
    ID = 0
    config.add_entity(
        lcg.entities.H5Recorder(id=ID,
                                filename=output_filename,
                                connections=()))
    ID += 1
    for chan in channels:
        try:
            chan = completeWithDefaultValues(chan)
        except KeyError:
            print('Each channel must contain a "type" key.')
            return False
        if chan['type'] == 'input':
            config.add_entity(
                lcg.entities.AnalogInput(id=ID,
                                         connections=(0),
                                         deviceFile=chan['device'],
                                         inputSubdevice=chan['subdevice'],
                                         readChannel=chan['channel'],
                                         inputConversionFactor=chan['factor'],
                                         range=chan['range'],
                                         aref=chan['reference'],
                                         units=chan['units']))
        else:
            config.add_entity(
                lcg.entities.AnalogOutput(
                    id=ID,
                    connections=(),
                    deviceFile=chan['device'],
                    outputSubdevice=chan['subdevice'],
                    writeChannel=chan['channel'],
                    outputConversionFactor=chan['factor'],
                    aref=chan['reference'],
                    units=chan['units'],
                    resetOutput=chan['resetOutput']))
            config.add_entity(
                lcg.entities.Waveform(id=ID + 1,
                                      connections=(0, ID),
                                      filename=chan['stimfile'],
                                      units=chan['units']))
            ID += 1
    ID += 1
    if not digitalChannels['channels'] is None:
        for channel in digitalChannels['channels']:
            config.add_entity(
                lcg.entities.DigitalInput(
                    id=ID,
                    connections=(0),
                    deviceFile=digitalChannels['device'],
                    inputSubdevice=digitalChannels['subdevice'],
                    readChannel=channel,
                    units='Boolean',
                    eventToSend=None))
            ID += 1
    if not trigger['stopChannel'] is None:
        config.add_entity(
            lcg.entities.DigitalInput(id=ID,
                                      connections=(0),
                                      deviceFile=trigger['device'],
                                      inputSubdevice=trigger['subdevice'],
                                      readChannel=trigger['stopChannel'],
                                      units='Boolean',
                                      eventToSend='STOPRUN'))
    config.write(config_file)
    return True
Esempio n. 11
0
def writeConductanceStimulusConfigurationFile(config_file,
                                              sampling_rate,
                                              duration,
                                              channels,
                                              reversal,
                                              model=None):
    config = lcg.XMLConfigurationFile(sampling_rate, duration)
    ID = 0
    realtime = True  # Conductance stimulus requires a realtime engine for the moment.
    if realtime:
        config.add_entity(lcg.entities.H5Recorder(id=ID, connections=()))
        ID += 1
    input_channels = []
    output_channels = []
    used_outputs = []
    used_outputs_ids = []
    for chan in channels:
        try:
            chan = completeWithDefaultValues(chan)
        except KeyError:
            print('Each channel must contain a "type" key.')
            return False
        if chan['type'] == 'input':
            input_channels.append(chan)
        else:
            output_channels.append(chan)
    for ii in range(len(reversal)):
        chan = input_channels[ii]
        outchan = output_channels[ii]
        if not outchan[
                'channel'] in used_outputs:  # To allow multiple conductances to the same neuron
            config.add_entity(
                lcg.entities.RealNeuron(
                    id=ID,
                    connections=(0),
                    spikeThreshold=-10,
                    V0=-65,
                    deviceFile=chan['device'],
                    inputSubdevice=chan['subdevice'],
                    outputSubdevice=outchan['subdevice'],
                    readChannel=chan['channel'],
                    writeChannel=outchan['channel'],
                    inputConversionFactor=chan['factor'],
                    outputConversionFactor=outchan['factor'],
                    inputRange=chan['range'],
                    reference=chan['reference'],
                    kernelFile='kernel.dat'))
            config.add_entity(
                lcg.entities.Waveform(id=ID + 1,
                                      connections=(0, ID + 2),
                                      filename=outchan['stimfile'],
                                      units='nS'))
            config.add_entity(
                lcg.entities.ConductanceStimulus(id=ID + 2,
                                                 connections=(0, ID),
                                                 E=reversal[ii]))
            used_outputs.append(outchan['channel'])
            used_outputs_ids.append(ID)
            ID += 3
        else:
            # Channel already used
            neuron_id = used_outputs_ids[np.nonzero(
                np.array(used_outputs) == outchan['channel'])[0]]
            config.add_entity(
                lcg.entities.Waveform(id=ID + 1,
                                      connections=(0, ID + 2),
                                      filename=outchan['stimfile'],
                                      units='nS'))
            config.add_entity(
                lcg.entities.ConductanceStimulus(id=ID + 2,
                                                 connections=(0, neuron_id),
                                                 E=reversal[ii]))
            ID += 2
    for ii in range(len(input_channels)):
        if ii > len(reversal):
            chan = input_channels[ii]
            config.add_entity(
                lcg.entities.AnalogInput(id=ID,
                                         connections=(0),
                                         deviceFile=chan['device'],
                                         inputSubdevice=chan['subdevice'],
                                         readChannel=chan['channel'],
                                         inputConversionFactor=chan['factor'],
                                         range=chan['range'],
                                         aref=chan['reference'],
                                         units=chan['units']))
            ID += 1
    for ii in range(len(output_channels)):
        if ii > len(reversal):
            chan = output_channels[ii]
            config.add_entity(
                lcg.entities.AnalogOutput(id=ID,
                                          connections=(),
                                          deviceFile=chan['device'],
                                          aref=chan['reference'],
                                          units=chan['units'],
                                          resetOutput=chan['resetOutput']))
            ID += 1
    config.write(config_file)
    return True
Esempio n. 12
0
def writeIOConfigurationFile(config_file,
                             sampling_rate,
                             duration,
                             channels,
                             realtime=True,
                             output_filename=None,
                             model=None):
    config = lcg.XMLConfigurationFile(sampling_rate, duration, output_filename)
    ID = 0
    if realtime:
        config.add_entity(
            lcg.entities.H5Recorder(id=ID,
                                    filename=output_filename,
                                    connections=()))
        ID += 1
    for chan in channels:
        try:
            chan = completeWithDefaultValues(chan)
        except KeyError:
            print('Each channel must contain a "type" key.')
            return False
        if model is None:
            if realtime:
                if chan['type'] == 'input':
                    config.add_entity(
                        lcg.entities.AnalogInput(
                            id=ID,
                            connections=(0),
                            deviceFile=chan['device'],
                            inputSubdevice=chan['subdevice'],
                            readChannel=chan['channel'],
                            inputConversionFactor=chan['factor'],
                            range=chan['range'],
                            aref=chan['reference'],
                            units=chan['units']))
                else:
                    config.add_entity(
                        lcg.entities.AnalogOutput(
                            id=ID,
                            connections=(),
                            deviceFile=chan['device'],
                            outputSubdevice=chan['subdevice'],
                            writeChannel=chan['channel'],
                            outputConversionFactor=chan['factor'],
                            aref=chan['reference'],
                            units=chan['units'],
                            resetOutput=chan['resetOutput']))
                    config.add_entity(
                        lcg.entities.Waveform(id=ID + 1,
                                              connections=(0, ID),
                                              filename=chan['stimfile'],
                                              units=chan['units']))
                    ID += 1
            else:
                if chan['type'] == 'input':
                    config.add_stream(
                        lcg.streams.InputChannel(
                            id=ID,
                            connections=(),
                            device=chan['device'],
                            subdevice=chan['subdevice'],
                            channel=chan['channel'],
                            conversionFactor=chan['factor'],
                            range=chan['range'],
                            reference=chan['reference'],
                            units=chan['units'],
                            samplingRate=sampling_rate))
                else:
                    config.add_stream(
                        lcg.streams.OutputChannel(
                            id=ID,
                            connections=(),
                            device=chan['device'],
                            subdevice=chan['subdevice'],
                            channel=chan['channel'],
                            conversionFactor=chan['factor'],
                            reference=chan['reference'],
                            units=chan['units'],
                            stimulusFile=chan['stimfile'],
                            samplingRate=sampling_rate,
                            offset=chan['offset'],
                            resetOutput=chan['resetOutput']))
        elif model == 'LIF':
            if chan['type'] == 'input':
                config.add_entity(
                    lcg.entities.LIFNeuron(ID, (0),
                                           C=0.08,
                                           tau=0.0075,
                                           tarp=0.0014,
                                           Er=-65.2,
                                           E0=-70,
                                           Vth=-50,
                                           Iext=0,
                                           holdLastValue=False))
            elif chan['type'] == 'output':
                config.add_entity(
                    lcg.entities.Waveform(id=ID,
                                          connections=(0, ID - 1),
                                          filename=chan['stimfile'],
                                          units=chan['units']))
        ID += 1
    config.write(config_file)
    return True