bash
$ git checkout 0.3.2 + setup venv with lark
$ python -m timeit -v -n 10 -s "from fmri_physio_log import PhysioLog; from pathlib import Path; content = Path('samples/full/example_02.puls').read_text()" -- "PhysioLog(content)"
raw times: 9.73 sec, 9.6 sec, 9.59 sec, 9.58 sec, 9.6 sec
10 loops, best of 5: 958 msec per loop
- More ergonomic `PhysioLog` class.
- Introduced a new `.from_string` classmethod. (Example below)
- The plan is to turn `PhysioLog` in to a dataclass in the `v0.4` release, `PhysioLog.from_string` is intended to be the replacement for directly calling the init method.
- Introduced a new `n_params` kw-only argument to `__init__` (and related classmethods). (Example below)
- `PhysioLog` will try to heuristically deduce the number acquisition parameters at the beginning of the string/file, however previous this was the _only_ behaviour. If you know better than `PhysioLog` you can now directly specify the number of parameters expected at the beginning of the file.
- Introduced a new `.data` attribute. (Example below)
- Similar to the previous point, related to flexibility of the `PhysioLog` class related to which values are "acquisition params" and which values are "data", this attribute will make the parsed "raw" data available to you (i.e. it's as list of the params + the data; no "splitting" by `PhysioLog`.
**Example:**
text
>>> from pathlib import Path
>>> from fmri_physio_log import PhysioLog
>>> content_str = Path('samples/short/example_01.ecg').read_text()
>>> print(content_str)
1 1 2 40 280 5002 LOGVERSION 102 6002 5002 TRIGGERMETHOD 10 6002 5002 MSGTYPE 103 6002 5002 MSGTYPE 220 eTriggerMethod: 10, minLimitCh1: 0, maxLimitCh1: 0, minLimitAVF: 0, maxLimitAVF: 0 6002 5002 MSGTYPE 210 6002 2048 10240 2048 10240 2048 5003
ECG Freq Per: 0 0
PULS Freq Per: 148 405
RESP Freq Per: 12 4660
EXT Freq Per: 0 0
ECG Min Max Avg StdDiff: 0 0 0 0
PULS Min Max Avg StdDiff: 180 1142 498 17
RESP Min Max Avg StdDiff: 4400 5740 4973 44
EXT Min Max Avg StdDiff: 0 0 0 0
NrTrig NrMP NrArr AcqWin: 0 0 0 0
LogStartMDHTime: 45927805
LogStopMDHTime: 46228520
LogStartMPCUTime: 45927897
LogStopMPCUTime: 46227375
6003
>>> log = PhysioLog.from_string(content_str, n_params=7)
>>> log.params
(1, 1, 2, 40, 280, 2048, 10240)
>>> log.ts
[2048, 10240, 2048]
>>> log.data
[1, 1, 2, 40, 280, 2048, 10240, 2048, 10240, 2048]