Example #1
0
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