Skip to content

Commit 9ac5095

Browse files
committed
separate loading functions
1 parent b8cbea0 commit 9ac5095

File tree

3 files changed

+58
-2
lines changed

3 files changed

+58
-2
lines changed

physutils/io.py

+46
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,52 @@ def load_physio(data, *, fs=None, dtype=None, history=None, allow_pickle=False):
224224
return phys
225225

226226

227+
def load_misc(data, *, fs=None):
228+
"""
229+
Returns `Physio` object with provided data
230+
231+
Parameters
232+
----------
233+
data : str, os.path.PathLike or array_like
234+
Input physiological data. If array_like, should be one-dimensional
235+
fs : float, optional
236+
Sampling rate of `data`. Default: None
237+
238+
Returns
239+
-------
240+
phys: :class:`physutils.Physio`
241+
Loaded physiological data
242+
243+
Raises
244+
------
245+
TypeError
246+
If provided `data` is unable to be loaded
247+
"""
248+
# load data
249+
if isinstance(data, str) or isinstance(data, os.PathLike):
250+
if os.path.exists(data):
251+
ext = os.path.splitext(data)[-1]
252+
253+
if ext == '.gz':
254+
ext == os.path.splitext(os.path.splitext(data)[0])[-1]
255+
256+
if ext == '.tsv':
257+
data = np.genfromtxt(data, delimiter='\t')
258+
elif ext == '.csv':
259+
data = np.genfromtxt(data, delimiter=',')
260+
else:
261+
data = np.genfromtxt(data)
262+
else:
263+
raise IOError(f'Cannot find {data}')
264+
else:
265+
raise TypeError(f'{type(data)} is not a supported type')
266+
267+
# instantiate physio object
268+
phys = physio.Physio(data, fs=fs)
269+
270+
return phys
271+
272+
227273
def save_physio(fname, data):
228274
"""
229275
Saves `data` to `fname`

physutils/tasks.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import logging
77

8-
from .io import load_from_bids, load_physio
8+
from .io import load_from_bids, load_physio, load_misc
99
from .physio import Physio
1010
from .utils import is_bids_directory
1111

@@ -45,10 +45,12 @@ def generate_physio(
4545
LGR.info(f"Loading physio object from {input_file}")
4646

4747
if mode == "auto":
48-
if input_file.endswith((".phys", ".physio", ".1D", ".txt", ".tsv", ".csv")):
48+
if input_file.endswith((".phys")):
4949
mode = "physio"
5050
elif is_bids_directory(input_file):
5151
mode = "bids"
52+
elif input_file.endswith((".txt", ".tsv", ".csv")):
53+
mode = "misc"
5254
else:
5355
raise ValueError(
5456
"Could not determine input mode automatically. Please specify it manually."
@@ -64,6 +66,8 @@ def generate_physio(
6466
physio_obj = (
6567
physio_array[col_physio_type] if col_physio_type else physio_array
6668
)
69+
elif mode == "misc":
70+
physio_obj = load_misc(input_file, fs=fs)
6771
else:
6872
raise ValueError(f"Invalid generate_physio mode: {mode}")
6973

physutils/tests/test_io.py

+6
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@ def test_load_from_bids_no_rec():
8787
assert phys_array[col].history[0][0] == "physutils.io.load_from_bids"
8888

8989

90+
def test_load_misc():
91+
csv = io.load_physio(get_test_data_path("ECG.csv"))
92+
assert isinstance(csv, physio.Physio)
93+
assert np.isnan(csv.fs)
94+
95+
9096
def test_save_physio(tmpdir):
9197
pckl = io.load_physio(get_test_data_path("ECG.phys"), allow_pickle=True)
9298
out = io.save_physio(tmpdir.join("tmp").purebasename, pckl)

0 commit comments

Comments
 (0)