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)
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)
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)
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)
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)
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'))
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)
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)
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)
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
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
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