Error reading big CNT file
See original GitHub issueMNE Group:
I tried to read several cnt files of different sizes using mne.io.read_raw_cnt
.
data = mne.io.read_raw_cnt('test.cnt', preload=True, montage=None, stim_channel=True)
If the cnt file is lower than 2G, the file can be successfully loaded. However, if the file size exceeds 2G, I will receive the following error:
<ipython-input-25-acf0568a07e0>:1: RuntimeWarning: Could not define the number of bytes automatically. Defaulting to 2.
data = mne.io.read_raw_cnt('test.cnt', preload=True, montage=None, stim_channel=True)
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-25-acf0568a07e0> in <module>
----> 1 data = mne.io.read_raw_cnt('test.cnt', preload=True, montage=None, stim_channel=True)
~/.local/lib/python3.5/site-packages/mne/io/cnt/cnt.py in read_raw_cnt(input_fname, montage, eog, misc, ecg, emg, data_format, date_format, preload, stim_channel, verbose)
176 return RawCNT(input_fname, montage=montage, eog=eog, misc=misc, ecg=ecg,
177 emg=emg, data_format=data_format, date_format=date_format,
--> 178 preload=preload, stim_channel=stim_channel, verbose=verbose)
179
180
~/.local/lib/python3.5/site-packages/mne/io/cnt/cnt.py in __init__(self, input_fname, montage, eog, misc, ecg, emg, data_format, date_format, preload, stim_channel, verbose)
430 input_fname = path.abspath(input_fname)
431 info, cnt_info = _get_cnt_info(input_fname, eog, ecg, emg, misc,
--> 432 data_format, _date_format, stim_channel)
433 last_samps = [cnt_info['n_samples'] - 1]
434 _check_update_montage(info, montage)
~/.local/lib/python3.5/site-packages/mne/io/cnt/cnt.py in _get_cnt_info(input_fname, eog, ecg, emg, misc, data_format, date_format, stim_channel_toggle)
293 if stim_channel_toggle:
294 data_format = 'int32' if n_bytes == 4 else 'int16'
--> 295 annot = _read_annotations_cnt(input_fname, data_format=data_format)
296 events = (np.stack((annot.onset * sfreq,
297 annot.duration * sfreq,
~/.local/lib/python3.5/site-packages/mne/io/cnt/cnt.py in _read_annotations_cnt(fname, data_format)
68
69 with open(fname, 'rb') as fid:
---> 70 teeg = _read_teeg(fid, teeg_offset=event_table_pos)
71
72 event_parser = _get_event_parser(event_type=teeg.event_type)
~/.local/lib/python3.5/site-packages/mne/io/cnt/_utils.py in _read_teeg(f, teeg_offset)
26 teeg_parser = Struct('<Bll')
27
---> 28 f.seek(teeg_offset)
29 return Teeg(*teeg_parser.unpack(f.read(teeg_parser.size)))
30
OSError: [Errno 22] Invalid argument
Also: If I use:
data = mne.io.read_raw_cnt('test.cnt', preload=True, montage=None)
I got different error:
<ipython-input-30-dbbb56936797>:1: FutureWarning: The parameter `stim_channel` controlling the stim channel synthesis has not been specified. In 0.18 it defaults to True but will change to False in 0.19 (when no stim channel synthesis will be allowed) and be removed in 0.20; migrate code to use `stim_channel=False` and :func:`mne.events_from_annotations` or set `stim_channel=True` to avoid this warning.
data = mne.io.read_raw_cnt('test.cnt', preload=True, montage=None)
<ipython-input-30-dbbb56936797>:1: RuntimeWarning: Could not define the number of bytes automatically. Defaulting to 2.
data = mne.io.read_raw_cnt('test.cnt', preload=True, montage=None)
Reading 0 ... 4528779 = 0.000 ... 4528.779 secs...
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-30-dbbb56936797> in <module>
----> 1 data = mne.io.read_raw_cnt(test.cnt', preload=True, montage=None)
~/.local/lib/python3.5/site-packages/mne/io/cnt/cnt.py in read_raw_cnt(input_fname, montage, eog, misc, ecg, emg, data_format, date_format, preload, stim_channel, verbose)
176 return RawCNT(input_fname, montage=montage, eog=eog, misc=misc, ecg=ecg,
177 emg=emg, data_format=data_format, date_format=date_format,
--> 178 preload=preload, stim_channel=stim_channel, verbose=verbose)
179
180
~/.local/lib/python3.5/site-packages/mne/io/cnt/cnt.py in __init__(self, input_fname, montage, eog, misc, ecg, emg, data_format, date_format, preload, stim_channel, verbose)
439 data_format = 'int32' if cnt_info['n_bytes'] == 4 else 'int16'
440 self.set_annotations(
--> 441 _read_annotations_cnt(input_fname, data_format=data_format))
442
443 @verbose
~/.local/lib/python3.5/site-packages/mne/io/cnt/cnt.py in _read_annotations_cnt(fname, data_format)
68
69 with open(fname, 'rb') as fid:
---> 70 teeg = _read_teeg(fid, teeg_offset=event_table_pos)
71
72 event_parser = _get_event_parser(event_type=teeg.event_type)
~/.local/lib/python3.5/site-packages/mne/io/cnt/_utils.py in _read_teeg(f, teeg_offset)
26 teeg_parser = Struct('<Bll')
27
---> 28 f.seek(teeg_offset)
29 return Teeg(*teeg_parser.unpack(f.read(teeg_parser.size)))
30
OSError: [Errno 22] Invalid argument
Here is my mne info
mne.sys_info()
Platform: Linux-4.4.0-151-generic-x86_64-with-Ubuntu-16.04-xenial
Python: 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609]
Executable: /usr/bin/python3
CPU: x86_64: 12 cores
Memory: Unavailable (requires "psutil" package)
mne: 0.18.1
numpy: 1.16.3 {blas=openblas, lapack=openblas}
scipy: 1.3.0
matplotlib: 3.0.1 {backend=TkAgg}
sklearn: 0.19.1
nibabel: Not found
mayavi: Not found
cupy: Not found
pandas: 0.22.0
dipy: Not found
Issue Analytics
- State:
- Created 4 years ago
- Comments:11 (6 by maintainers)
Top Results From Across the Web
Bug 1553 – Error loading CNT files with loadcnt.m
Hi Arno, Ah, yes, I see the error. This is the error with 16-bit data I mentioned (I assume these are 16-bit data...
Read more >Error reading cnt files - Discussions - Brainstorm
Recently I tried to read cnt files and get the following error: ** Error: Line 29: Invalid MEX-file ...
Read more >Error with pop_loadcnt uploadingg ANT CNT files. EEGLAB
I am currently writing a script that imports a large number of ANT CNT files from a hard drive. However, I am having...
Read more >Error reading *.cnt eeg file - Support & Discussions - MNE Forum
I'm trying to read a cnt EEG file with mne.io.read_raw_cnt and get “UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 6: ...
Read more >-UMergeTaxaTagCountPlugin error - Google Groups
Hello, When im executing the following command for merging tag count files i'm getting error, changing the value of c did not change...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
Since the CNT file is huge, which means the samples section in the CNT file (ref this: Structure of CNT file ) is also huge.
And mne choose to read the event table position from the SETUP section, which read as a long (32 bit) integer.
As a result, the maximum length of the CNT file mne supports is equals to :
“900” is the size of the SETUP section, 75*n_channels is the size of ELECTLOC, and “4” is the bytes each sample point takes.
For the situation n_channels=62 and sfreq=1000, the result is 8659 seconds (about 2.4 hours). When the length of your CNT file is too long that the value of EVENT_TABLE_POS will overflow.
To solve this problem, you need to change the way to obtain the value of EVENT_TABLE_POS: calculate it using follow formula instead of read it from SETUP section:
Hi agramfort,
Thank you for your reply !!! I’m using version 0.22 of MNE. How can I share the file privately ? can you send me your email address ? (sivankinreich@gmail.com) Thanks you again for any help.
Sivan