def run(description): """Main function for running a perisomatic biophysical experiment. Parameters ---------- description : Config All information needed to run the experiment. """ # configure NEURON utils = Utils(description) h = utils.h # configure model manifest = description.manifest morphology_path = description.manifest.get_path("MORPHOLOGY") utils.generate_morphology(morphology_path.encode("ascii", "ignore")) utils.load_cell_parameters() # configure stimulus and recording stimulus_path = description.manifest.get_path("stimulus_path") run_params = description.data["runs"][0] sweeps = run_params["sweeps"] junction_potential = description.data["fitting"][0]["junction_potential"] mV = 1.0e-3 stimulus_format = manifest.get_format("stimulus_path") output_format = manifest.get_format("output") if stimulus_format == "NWB" and output_format == "NWB": prepare_nwb_output(manifest.get_path("stimulus_path"), manifest.get_path("output")) # run sweeps for sweep in sweeps: if stimulus_format == "NWB": utils.setup_iclamp(stimulus_path, sweep=sweep) elif stimulus_format == "dat": utils.setup_iclamp_dat(stimulus_path) vec = utils.record_values() h.finitialize() h.run() # write to an NWB File output_data = (numpy.array(vec["v"]) - junction_potential) * mV output_times = numpy.array(vec["t"]) if output_format == "NWB": output_path = manifest.get_path("output") save_nwb(output_path, output_data, sweep) elif output_format == "dat": output_path = manifest.get_path("output", sweep) DatUtilities.save_voltage(output_path, output_data, output_times)
def test_biophysical(): neuronal_model_id = 472451419 # get this from the web site model_directory = "." bp = BiophysicalApi("http://api.brain-map.org") bp.cache_stimulus = False # don't want to download the large stimulus NWB file bp.cache_data(neuronal_model_id, working_directory=model_directory) os.system("nrnivmodl modfiles") description = Config().load("manifest.json") utils = Utils(description) h = utils.h manifest = description.manifest morphology_path = manifest.get_path("MORPHOLOGY") utils.generate_morphology(morphology_path.encode("ascii", "ignore")) utils.load_cell_parameters() stim = h.IClamp(h.soma[0](0.5)) stim.amp = 0.18 stim.delay = 1000.0 stim.dur = 1000.0 h.tstop = 3000.0 vec = utils.record_values() h.finitialize() h.run() output_path = "output_voltage.dat" junction_potential = description.data["fitting"][0]["junction_potential"] mV = 1.0e-3 ms = 1.0e-3 output_data = (numpy.array(vec["v"]) - junction_potential) * mV output_times = numpy.array(vec["t"]) * ms DatUtilities.save_voltage(output_path, output_data, output_times) assert numpy.count_nonzero(output_data) > 0
def test_biophysical(): neuronal_model_id = 472451419 # get this from the web site model_directory = '.' bp = BiophysicalApi('http://api.brain-map.org') bp.cache_stimulus = False # don't want to download the large stimulus NWB file bp.cache_data(neuronal_model_id, working_directory=model_directory) os.system('nrnivmodl modfiles') description = Config().load('manifest.json') utils = Utils(description) h = utils.h manifest = description.manifest morphology_path = manifest.get_path('MORPHOLOGY') utils.generate_morphology(morphology_path.encode('ascii', 'ignore')) utils.load_cell_parameters() stim = h.IClamp(h.soma[0](0.5)) stim.amp = 0.18 stim.delay = 1000.0 stim.dur = 1000.0 h.tstop = 3000.0 vec = utils.record_values() h.finitialize() h.run() output_path = 'output_voltage.dat' junction_potential = description.data['fitting'][0]['junction_potential'] mV = 1.0e-3 ms = 1.0e-3 output_data = (numpy.array(vec['v']) - junction_potential) * mV output_times = numpy.array(vec['t']) * ms DatUtilities.save_voltage(output_path, output_data, output_times) assert numpy.count_nonzero(output_data) > 0
def test_biophysical_peri(): """ Test for backward compatibility of the perisomatic models """ subprocess.check_call(['nrnivmodl', 'modfiles/']) description = Config().load('manifest.json') utils = Utils(description) h = utils.h manifest = description.manifest morphology_path = manifest.get_path('MORPHOLOGY') utils.generate_morphology( morphology_path.encode('ascii', 'ignore').decode("utf-8")) utils.load_cell_parameters() stim = h.IClamp(h.soma[0](0.5)) stim.amp = 0.35 # Sweep 47 stim.delay = 1000.0 stim.dur = 1000.0 h.tstop = 3000.0 vec = utils.record_values() h.finitialize() h.run() junction_potential = description.data['fitting'][0]['junction_potential'] ms = 1.0e-3 output_data = (numpy.array(vec['v']) - junction_potential) # in mV output_times = numpy.array(vec['t']) * ms # in s output_path = 'output_voltage.dat' DatUtilities.save_voltage(output_path, output_data, output_times) num_spikes = len( ephys_features.detect_putative_spikes(output_data, output_times)) assert num_spikes == 27 # taken from the web app