Source code for mosaic.trajio.abfTrajIO

# -*- coding: utf-8 -*-
"""
	A TrajIO class that supports ABF1 and ABF2 file formats via abf/abf.py. Currently, only
	gap-free mode and single channel recordings are supported.

	:Created: 5/23/2013
 	:Author: 	Arvind Balijepalli <arvind.balijepalli@nist.gov>
	:License:	See LICENSE.TXT
	:ChangeLog:
	.. line-block::
		03/20/23 	AB  Use pyabf to read ABF files.
		9/13/15 	AB 	Updated logging to use mosaicLogFormat class
		3/28/15 	AB 	Updated file read code to match new metaTrajIO API.
		5/23/13		AB	Initial version

"""
import pyabf
import mosaic.trajio.metaTrajIO as metaTrajIO
import mosaic.utilities.mosaicLogging as mlog

import numpy as np

__all__ = ["abfTrajIO"]

[docs]class abfTrajIO(metaTrajIO.metaTrajIO): """ Read ABF1 and ABF2 file formats. Currently, only gap-free mode and single channel recordings are supported. A typical settings section to read ABF files is shown below. .. code-block:: javascript "abfTrajIO" : { "filter" : "*.abf", "start" : 0.0, "dcOffset" : 0.0, "sweepNumber" : 0, "channel" : 0 } :Parameters: In addition to :class:`~mosaic.metaTrajIO.metaTrajIO` args, None """ def _init(self, **kwargs): self.abfLogger=mlog.mosaicLogging().getLogger(name=__name__)
[docs] def readdata(self, fname): """ Read one or more files and append their data to the data pipeline. Set a class attribute Fs with the sampling frequency in Hz. :Parameters: - `fname` : fileame to read :Returns: - An array object that holds raw (unscaled) data from `fname` :Errors: - `SamplingRateChangedError` : if the sampling rate for any data file differs from previous """ if not hasattr(self, 'sweepNumber') or not hasattr(self, 'channel'): self.sweepNumber=0 self.channel=0 # additional meta data self.fileFormat='abf' abf=pyabf.ABF(fname) abf.setSweep(sweepNumber=self.sweepNumber, channel=self.channel) scale=self._currentScale(abf) # If the Fs attribute doesn't exist set it if not hasattr(self, 'Fs'): self.Fs=abf.dataRate # else check if it s the same as before else: if self.Fs!=abf.dataRate: raise metaTrajIO.SamplingRateChangedError("The sampling rate in the data file '{0}' has changed.".format(f)) return abf.sweepY*scale
def _formatsettings(self): """ Log settings strings """ self.abfLogger.info( 'Sweep number = {0}'.format(self.sweepNumber) ) self.abfLogger.info( 'Channel = {0}'.format(self.channel) ) def _currentScale(self, abf): if "pA" in abf.sweepLabelY or "pA" in abf.sweepUnitsY: return 1 if "nA" in abf.sweepLabelY or "nA" in abf.sweepUnitsY: return 1000