def setup_class(cls): TestBase.setup_class() ctx = cls.local_stack.getAuthenticatedDataStoreCoordinator().getContext() proj = ctx.insertProject('ABF import', 'ABF import', DateTime()) exp = proj.insertExperiment('ABF experiment', DateTime()) cls.device_info = {u'amplifier.mode': u'I-clamp', u'amplifier.channels.0.gain': 2.5, u'amplifier.channels.1.gain': 3.5} # TODO when we move to beta3 #exp.setEquipmentSetupFromMap(to_map(cls.device_info)) cls.src = ctx.insertSource("recording source", "source-id") abf_file = 'fixtures/example1.abf' logging.info("Importing file...") cls.epoch_group = import_file(abf_file, exp, "amplifier", [cls.src])[0] #single block reader = AxonIO(filename=abf_file) cls.block = reader.read()[0] # single block
def read_neo(path): # Read abf file with neo reader = AxonIO(filename=path) block = reader.read() # Extract analog signals if len(block[0].segments[0].analogsignals) == 1: channel1 = np.empty(block[0].segments[0].analogsignals[0].T.shape) channel1_units = block[0].segments[0].analogsignals[0].units channel2 = None channel2_units = None t = block[0].segments[0].analogsignals[0].times.magnitude for idx, seg in enumerate(block[0].segments): channel1[idx] = seg.analogsignals[0].T # # return {'file_name': block.file_origin, # 'recording_date': block.rec_datetime, # 'time': t, # 'channel1': channel1, elif len(block[0].segments[0].analogsignals) == 2: channel1 = np.empty((len(block[0].segments), block[0].segments[0].analogsignals[0].size)) channel1_units = block[0].segments[0].analogsignals[0].units channel1_sampling = block[0].segments[0].analogsignals[0].sampling_rate channel2 = np.empty((len(block[0].segments), block[0].segments[0].analogsignals[1].size)) channel2_units = block[0].segments[0].analogsignals[1].units channel2_sampling = block[0].segments[0].analogsignals[1].sampling_rate t = block[0].segments[0].analogsignals[0].times.magnitude for idx, seg in enumerate(block[0].segments): channel1[idx] = seg.analogsignals[0].T channel2[idx] = seg.analogsignals[1].T #channel1[idx] = seg.analogsignals[0] #channel2[idx] = seg.analogsignals[1] channel_1 = AnalogData( signal=channel1, time=t, units=channel1_units, sampling_rate=channel1_sampling ) channel_2 = AnalogData( signal=channel2, time=t, units=channel2_units, sampling_rate=channel2_sampling) else: raise Exception('File {0} either has too many channels, or no channels.'.format(path)) return AbfFile( [channel_1, channel_2], file_name=block[0].file_origin, date=block[0].rec_datetime)
from bokeh.io import output_file, show from bokeh.layouts import widgetbox, row from bokeh.models import CustomJS, ColumnDataSource, Span from bokeh.models.widgets import Button, RadioButtonGroup, Select, Slider, RangeSlider from bokeh.plotting import figure from bokeh.layouts import layout import numpy as np from neo.io import AxonIO # Set output output_file("dashboard.html") # Read data reader = AxonIO('/home/matt/Downloads/2017_02_23_0110.abf') block = reader.read() ch1_data = [] ch2_data = [] for idx, seg in enumerate(block[0].segments): ch1_data.append(seg.analogsignals[0]) ch2_data.append(seg.analogsignals[1]) ch1_data = np.array(ch1_data).reshape(10,100000) ch2_data = np.array(ch2_data).reshape(10,100000) # Plot data source = ColumnDataSource(data=dict( x=np.arange(0, len(ch2_data[0])), y=ch2_data[0], main=ch2_data[0] ) )