用于分析开放式Ephys数据的Python包。
pyopenephys的Python项目详细描述
pyopenephys
用于Open Ephys的python阅读器。
安装
要安装pyopenephys软件包,请打开一个终端并运行:
pip install pyopenephys
如果要从源安装并获取最新更新,请克隆repo并在本地安装:
git clone https://github.com/CINPLA/pyopenephys cd pyopenephys python setup.py install # use 'python setup.py develop' to install fixed bugs
基本用法
pyopenephys允许用户加载用Open Ephys记录的数据。目前,只支持binary(推荐)和openphys(在将来的版本中将不再支持此格式)。
第一步是创建一个File
对象。它只需要将paht传递到记录文件夹。
importpyopenephysfile=pyopenephys.File("path-to-recording-folder")
文件对象包含不同的实验(对应于不同的设置文件),每个实验包含一组记录。
# all experimentsexperiments=file.experimentsprint(len(experiments))# recordings of first experimentexperiment=experiments[0]recordings=experiment.recordingsprint(len(experiments))# access first recordingrecording=recordings[0]
实验存储一些有用的信息:
experiment.datetime
包含创建实验的开始日期和时间experiment.sig_chain
是包含信号链中的处理器和节点的字典experiment.settings
是一个字典,其中包含已分析的setting.xml文件experiment.acquisition_system
包含用于输入连续数据的系统(例如,“节奏fpga”)
录制包含实际数据:
recording.duration
是录制的持续时间(秒)recording.sample_rate
是采样频率(赫兹)recording.analog_signals
是AnalogSignal
对象的列表,这些对象依次具有signal
、times
(在s中)和channel_id
字段。recording.events
是EventData
对象的列表,这些对象依次有times
(s)、channels
、channel_states
、full_words
、processor
、node_id
和metadata
字段。recording.tracking
是TrackingData
对象的列表,这些对象依次有times
(s)、x
、y
、width
、height
、channels
和metadata
字段。跟踪数据用Tracking
插件(https://github.com/CINPLA/tracking-plugin)记录,并仅以binary格式保存(不以openphys格式保存)。recording.spiketrains
是SpikeTrain
对象的列表,这些对象依次有times
、waveforms
、electrode_indices
、clusters
和metadata
字段。通过开放式Ephys图形用户界面中的Spike Viewer
接收器,结合Spike Detector
和Spike Viewer
来保存峰值序列。
只需几行代码,数据和相关信息就可以轻松解析和访问:
importpyopenephysimportmatplotlib.pylabaspltfile=pyopenephys.File("path-to-recording-folder")# experiment 1 (0 in Python)experiment=file.experiments[0]# recording 1 recording=experiment.recordings[0]print('Duration: ',recording.duration)print('Sampling Rate: ',recording.sample_rate)analog_signals=recording.analog_signalsevents_data=recording.eventsspiketrains=recording.spiketrains# tracking_data are accessible only using binary formattracking_data=recording.tracking# plot analog signal of channel 4signals=analog_signals[0]fig_an,ax_an=plt.subplots()ax_an.plot(signals.times,signals.signal[3])# plot raster for spike trainsfig_sp,ax_sp=plt.subplots()fori_s,spinenumerate(spiketrains):ax_sp.plot(sp.times,i_s*np.ones(len(sp.times)),'|')plt.show()