Ocular Speech Tracking Persists in Blindness, but Its Dynamics and Oculo-Cerebral Connectivity Depend on Visual Status.
The 8 matches
- [1] § Materials and Methods › MEG data preprocessing › Source projection of MEG data ↔ eog_pipeline/utils/eogmachine.py, lines 222–354 · score 0.92 · volume source space, template MRI, sphere model, eye source, BEM, LCMV
- [2] § Materials and Methods › MEG data preprocessing ↔ eog_pipeline/b00_do_all_eye.py, lines 103–147 · score 0.81 · MNE raw filter, Blackman filter, frontal channel, downsampled, preprocessing, source reconstruction
- [3] § Materials and Methods › Speech tracking › Coherence ↔ eog_pipeline/utils/eogmachine.py, lines 596–601 · score 0.70 · 0–0.5 s, constant detrending, baseline, linear, MNE, epochs
- [4] § Materials and Methods › MEG data preprocessing › Source projection of MEG data ↔ eog_pipeline/utils/utils_eog.py, lines 22–72 · score 0.66 · source space, fsaverage, BEM, ico, matrix, parcellation
- [5] § Materials and Methods › Speech tracking › Multivariate temporal response function ↔ eog_pipeline/b00_do_all_eye.py, lines 235–293 · score 0.61 · selective stopping, fold, l1, partition, boosting, concatenated
- [6] § Materials and Methods › Experimental design ↔ eog_pipeline/get_syllables.py, lines 10–18 · score 0.58 · syllable nuclei, syllable rate, Praat
- [7] § Materials and Methods › Speech tracking › Multivariate temporal response function ↔ eog_pipeline/b01_reviewer_sensorplot.py, lines 8–86 · score 0.56 · selective stopping, l1, partition, boosting, concatenated, error
- [8] § Materials and Methods › MEG data preprocessing › Speech envelope extraction ↔ eog_pipeline/b00_do_all_eye.py, lines 103–147 · score 0.51 · Chimera toolbox, pipelines, downsampled, filtered, Hilbert, MEG
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
Python · 298 lines · 13 KB · no license · 3 matches
- #%%
- #srun --job-name=runIT --output=test_run.log --ntasks=2 --cpus-per-task=8 --mem-per-cpu=28G --time=00:30:00 pixi run python r04_doeysource.sh & disown
- import numpy as np
- import pandas as pd
- import argparse
- import glob
- from utils.utils_eog import *
- from mne_connectivity import seed_target_indices, spectral_connectivity_epochs
- from utils.utils_eog import *
- import os
- import joblib
- from utils.eogmachine import EogMachine
- from almkanal import (
- AlmKanal,
- Maxwell
- )
- #%%
- def main(downsample_f: float = 150,
- l_pass: float = 16,
- h_pass: float = 0.1,
- fmin_coh: float = 0.16,
- fmax_coh: float = 8):
- #%%
- parser = argparse.ArgumentParser(description="subject")
- parser.add_argument('subject_id', type=str, help="subject id that is processed")
- # parser.add_argument('--is-test', action='store_true', default=False, help="Sanity check?")
- args = parser.parse_args()
- subject_id = args.subject_id
- #%%
- downsample_f = 150
- l_pass = 16
- h_pass = 0.1
- fmin_coh = 0.16
- fmax_coh = 8
- study_name = 'ma_blindaudio'
- bids_root = f"/home/kbenz/data/BIDS/{study_name}"
- study_path = f'/home/kbenz/data/{study_name}/'
- output_path = f'{study_path}source_coh_4envs/'
- subjects_dir = '/home/kbenz/pcks/'
- er_path = '/home/kbenz/data/raw/STORYTIME/Measurement/empty20151210.fif'
- parc='HCPMMP1' # the parcellation to use, e.g., 'aparc' 'aparc.a2009s'
- do_preproc = True
- #%%
- print(f'👀 EOG machine started..🚀🚀🚀🚀')
- em = EogMachine(name=subject_id, output_path =output_path)
- em.report = []
- raw_brain_dir = f'{output_path}raw_source'
- #%%
- if do_preproc or os.path.exists(f'{raw_brain_dir}/{subject_id}_raw_{parc}.fif') == False:
- # load data, that is maxfiltered, and ica rejected heart + train
- fiff_f_names_all = glob.glob(f"{bids_root}/{subject_id}/ses-01/meg/**.fif")
- n_blocks = len(fiff_f_names_all)
- # until fabi implemented it:
- #get average head pos
- block_pos_l = []
- for block in np.arange(0, n_blocks):
- raw = mne.io.read_raw_fif(fiff_f_names_all[block], verbose = False) #Raw(subject_id, block_nr=block, preload=False)
- block_pos_l.append(raw.info["dev_head_t"]['trans'][:3, 3])
- # get most average headposition
- blocks_pos = np.array(block_pos_l)
- all_distances = np.sqrt(blocks_pos[:,0]**2 + blocks_pos[:,1]**2 + blocks_pos[:,2]**2)
- mean_distance = np.median(all_distances)
- mean_d_idx = (np.abs(all_distances - mean_distance)).argmin()
- destination = block_pos_l[mean_d_idx]
- em.report.append(f'Mean head position over all blocks was acquired.')
- pick_dict = {
- 'meg': True,
- 'stim': True,
- 'eog': False,
- 'ecg': False,
- 'eeg': False}
- ak = AlmKanal(
- pick_params=pick_dict,
- steps=[
- Maxwell(mw_destination = destination), #everyone stays in their head
- ],
- )
- em.report.append(f'Data was maxfiltered to the mean position.')
- raw_all, first_samples = [], []
- for block in np.arange(0, n_blocks):
- print(f'loading raw for block {block}')
- raw = mne.io.read_raw(fiff_f_names_all[block], preload=True, verbose =False)
- print(f'running maxfilter..')
- raw_tmp, akinfos = ak.run(raw)
- # get envelope based on bids
- events_metadata = pd.read_csv(fiff_f_names_all[block][:-7] + 'events.tsv', sep="\t")
- raw_ws = annotate_append(events_metadata, raw_tmp, bids_root, subject_id)
- import matplotlib.pyplot as plt
- # plt.plot(raw_ws.get_data()[-1, :])
- # plt.show()
- # append and concatenate files
- raw_all.append(raw_ws)
- print(raw_all)
- raw = mne.concatenate_raws(raw_all, on_mismatch='raise')
- em.report.append(f'When we used the Hilbert envelopes, which are less smooth, the previous results could not be replicated. Therefore, envelopes were extracted with the Chimera toolbox. They were appended to the raw data early to ensure the same preprocessing for stimulus- and neural data.')
- h_pass_ica = 0.5
- ica2, high_comps, raw_noc = run_ica(raw, h_pass_ica, l_pass, downsample_f, output_path, subject_id)
- em.report.append(f'ICA was run on the data with a lowpass filter of 1 Hz')
- em.report.append(f'Data was downsampled to {downsample_f} Hz.')
- em.report.append(f'ECG channel was automatically rejected using find_bads_ecg in MNE with a threshold of 0.5')
- em.report.append(f'The identified channels were applied to the copied raw data, which were filtered between {h_pass_ica} and {l_pass} Hz using a Blackman filter and the default MNE.raw.filter settings.')
- em.add_meg_data_noth(raw_noc)
- em.add_ica2(ica2)
- em.ica_eog_nr = high_comps
- em.report.append(f'We tried to find consistent ICA eye components using a semiautomatic approach, including correlation of frontal channels, cross-correlation, etc. However, as the participants were blindfolded and blind, we were not successful in consistently identifying them across groups. To ensure consistency over groups, no ICA-eye components were rejected. See topographies in the supplementals. In subsequent analysis, we also suggest that the ICA-eye component is highly related to the auditory cortices, as they are also symmetrical. Since we also ran source reconstruction for the eyes, this is supposed to disentangle the sources.')
- # get conditions of experiment
- data_list = [data for data in em.data_noth.crop_by_annotations() if len(data)>2]
- em.condis = np.unique([str(data.annotations).split(' ')[-2] for data in data_list])
- del data_list
- #set your channel however you want, here manually because automatic did not work for the blind(folded) blinks
- # not sure if it works, bc now we are redoing the maxfiltering..
- info_frame = pd.read_csv('/home/kbenz/code/kb_blindaudio/eog_pipeline/participants.tsv', sep ='\t')
- em.ica_eog_nr = int(info_frame.loc[info_frame['participant_id'] == subject_id, 'ica'])
- # get faked eog channel from ica
- em.get_fake_eog_and_filter()
- # # properties are only for emtyroom preproc, in line with the other ones
- # filters = em.get_source_eyes(subjects_dir, subject_id, em.do_epochs(em.data_noth), l_freq=0.1, h_freq=16, sfreq=150, ep_len = 6, er_path = er_path)
- # # # get timeseries of the source fake eog channel
- # # # and also of areas of interest
- # # # here I use the superiortemporal and pericalcarine areas, but you can choose any other
- # subject_name = f'{subject_id}_from_template'
- # # Get labels for FreeSurfer 'aparc' cortical parcellation with 34 labels/hemi
- # labels_parc = mne.read_labels_from_annot(subject_name, parc=parc, subjects_dir=f'{subjects_dir}/freesurfer/')
- # # use now all regions
- # my_labels = np.unique([labelsX.name[:-3] for labelsX in labels_parc])
- # areas = tuple(my_labels)
- # time_src = em.get_timeseries_src(em.data_noth.copy(), filters, subjects_dir, areas= areas, picks_from_old = ['speech_envelope', 'spe_env_chi_ma', 'speenv_fake_chi', 'spe_env_fake_hil'], parc=parc)
- # if not os.path.exists(raw_brain_dir):
- # # Create a new directory because it does not exist
- # os.makedirs(raw_brain_dir)
- # em.data_noth.save(f'{raw_brain_dir}/{subject_id}_raw_sensors.fif', overwrite=True)
- # time_src.save(f'{raw_brain_dir}/{subject_id}_raw_{parc}.fif', overwrite=True)
- # elif os.path.exists(f'{raw_brain_dir}/{subject_id}_raw_{parc}.fif'):
- # time_src = mne.io.read_raw_fif(f'{raw_brain_dir}/{subject_id}_raw_{parc}.fif')
- # em.add_meg_data_noth(mne.io.read_raw_fif(f'{raw_brain_dir}/{subject_id}_raw_sensors.fif'))
- # else:
- # raise Exception(f"🚨participant {subject_id} was not preprocessed before, do this first 🚨")
- # print(em.report)
- # #%%
- # em.condis = ['nat', 'voc1', 'voc8']
- # #%% get sensor coherence
- # from copy import deepcopy
- # data_coh_raw = deepcopy(em.data_noth).pick(picks =['mag','misc'])
- # data_dict_sensors = em.get_raw_bycond(data_coh_raw)
- # del(data_coh_raw)
- # # coherence_sensors = em.get_coherence(data_dict = data_dict_sensors, fmin_coh = fmin_coh, fmax_coh = fmax_coh, starters_a =('spe'), starters_b = ('MEG'), folder_name = 'coh_mags') #lfreq, hfreq
- # # joblib.dump(coherence_sensors, f'{output_path}coh_mags/{subject_id}_coh_meg.pckl')
- # # #%%
- # data_dict_orig = em.get_raw_bycond(time_src)
- # #%% get imaginary part of coherence for eye brain connectivity
- # coh_type = 'imcoh'
- # coh_brain_dir = f'{output_path}{coh_type}_{parc}'
- # output_file = f'{coh_brain_dir}/{subject_id}_{coh_type}_meg.pckl'
- # if not os.path.exists(output_file):
- # # Create directory if it doesn't exist
- # if not os.path.exists(coh_brain_dir):
- # os.makedirs(coh_brain_dir)
- # # Only compute and save if file doesn't exist
- # coherence_brain = em.get_coherence(
- # data_dict=data_dict_orig,
- # fmin_coh=fmin_coh,
- # fmax_coh=fmax_coh,
- # starters_a=('eye_1'),
- # starters_b=('rh', 'lh'),
- # folder_name='coh_meg',
- # coh_type=coh_type
- # )
- # joblib.dump(coherence_brain, output_file)
- # # print('coherence in HCPMMP1 is saved here')
- # # # print('coherence is saved')
- # # coherence_eyes = em.get_coherence(data_dict = data_dict_orig, fmin_coh = fmin_coh, fmax_coh = fmax_coh, starters_a =('spe'), starters_b = ('ICA', 'eye'), folder_name = 'coh_meg') #lfreq, hfreq
- # # coh_eye_dir = f'{output_path}eog_pca_coh'
- # # if not os.path.exists(coh_eye_dir):
- # # # Create a new directory because it does not exist
- # # os.makedirs(coh_eye_dir)
- # # joblib.dump(coherence_eyes, f'{coh_eye_dir}/{subject_id}_coh_meg.pckl')
- # #%% get sensor boosting for concatenated blocks
- # boosting_kwargs= {'tstart':-0.4,
- # 'tstop' : 0.8,
- # 'error' :'l1',
- # 'basis': 0.050,
- # 'partitions':4,
- # 'test':1,
- # 'selective_stopping':True}
- # # sns_data_lbl = em.data_noth.copy().pick(picks = ['mag']).ch_names
- # # env_name = 'speenv_fake_chi' # 'spe_env_fake_hil' # 'spe_env_chi_ma' # 'spe_env_fake_hil'
- # # nat_trf_long = dict.fromkeys(em.condis)
- # # for cond in em.condis:
- # # one_long = mne.concatenate_raws(data_dict_sensors[cond])
- # # nat_trf_long[cond] = EogMachine.get_trf(one_long, boosting_kwargs, sns_data_lbl, env_name)
- # # del one_long
- # # trf_all_dir = f'{output_path}trfs_mag{env_name}'
- # # if not os.path.exists(trf_all_dir):
- # # # Create a new directory because it does not exist
- # # os.makedirs(trf_all_dir)
- # # joblib.dump(nat_trf_long, f'{trf_all_dir}/{subject_id}_trfs_long.pckl')
- # #%%
- # #%% Test for boosting with many partitions
- # # for sensors
- # partitions = 50
- # boosting_kwargs= {'tstart':-0.4,
- # 'tstop' : 0.8,
- # 'error' :'l1',
- # 'basis': 0.050,
- # 'partitions': partitions,
- # 'test':1,
- # 'selective_stopping':True}
- # sns_data_lbl = em.data_noth.copy().pick(picks = ['mag']).ch_names
- # env_name = 'spe_env_chi_ma' # 'spe_env_fake_hil' # 'spe_env_chi_ma' # 'spe_env_fake_hil'
- # nat_trf_long = dict.fromkeys(em.condis)
- # data_coh_raw = deepcopy(em.data_noth).pick(picks =['mag','misc'])
- # data_dict_sensors = em.get_raw_bycond(data_coh_raw)
- # trf_all_dir = f'{output_path}trfs_mag_{partitions}parts'
- # output_file = f'{trf_all_dir}/{subject_id}_trfs_long.pckl'
- # if not os.path.exists(output_file):
- # print('STARTING CRAZY K-FOLD NOW')
- # for cond in em.condis:
- # one_long = mne.concatenate_raws(data_dict_sensors[cond])
- # nat_trf_long[cond] = EogMachine.get_trf(one_long, boosting_kwargs, sns_data_lbl, env_name)
- # del one_long
- # if not os.path.exists(trf_all_dir):
- # os.makedirs(trf_all_dir)
- # joblib.dump(nat_trf_long, output_file)
- # # %%for source and eye data
- # subject_name = f'{subject_id}_from_template'
- # # Get labels for FreeSurfer 'aparc' cortical parcellation with 34 labels/hemi
- # labels_parc = mne.read_labels_from_annot(subject_name, parc=parc, subjects_dir=f'{subjects_dir}/freesurfer/')
- # src_data_lbl = time_src.copy().pick(picks = 'eog').ch_names # [label.name for label in labels_parc] +
- # trf_long_src = dict.fromkeys(em.condis)
- # data_dict_orig2 = em.get_raw_bycond(time_src)
- # trf_src_dir = f'{output_path}trfs_eye{env_name}{partitions}parts'
- # output_file = f'{trf_src_dir}/{subject_id}_trfs_long.pckl'
- # if not os.path.exists(output_file):
- # print('second CRAZY K-FOLD started')
- # for cond in em.condis:
- # one_long = mne.concatenate_raws(data_dict_orig2[cond].copy())
- # trf_long_src[cond] = EogMachine.get_trf(one_long, boosting_kwargs, src_data_lbl, env_name)
- # del one_long
- # if not os.path.exists(trf_src_dir):
- # os.makedirs(trf_src_dir)
- # joblib.dump(trf_long_src, output_file)
- print('finished, hope all good!')
- #%%
- if __name__ == "__main__":
- main()
b00_do_all_eye.py at commit 546ae01, no license · at the source
Overview
- Centre for Cognitive Neuroscience, Department of Psychology, Paris-Lodron-University of Salzburg, Salzburg 5020, Austria
- Basque Center on Cognition, Brain and Language, Donostia - San Sebastián 20009, Spain
- IMT School for Advanced Studies Lucca, Lucca 55100, Italy
- Center for Mind/Brain Sciences, University of Trento, Rovereto 38068, Italy
- Institute of Neuroscience (IoNS), UCLouvain, Louvain-la-Neuve B-1348, Belgium
- Neuroscience Institute, Christian Doppler University Hospital, Paracelsus Medical University Salzburg, Salzburg 5020, Austria
Abstract
While eye movements have been shown to track the speech envelope, it is unknown whether this reflects a hard-wired mechanism or one shaped by (lifetime) audiovisual experience. Further, questions remain about whether ocular tracking is modulated by speech intelligibility and which brain regions drive these synchronized eye movements. Here, we investigate ocular speech tracking in 47 (20 male), blindfolded early blind, late blind, and sighted individuals using magnetoencephalography and source-reconstructed oculomotor signals while participants listened to narrative speech of varying intelligibility. We find that oculomotor activity tracks acoustic speech features; however, while neural speech tracking is modulated by intelligibility, ocular tracking patterns remain ambiguous. Interestingly, we find effects reflected in two frequency-specific components: a low-frequency (∼1 Hz) effect present across all groups, indicating that visual experience is not required, and a high-frequency (∼6 Hz) effect reduced in early and late blind individuals. Moreover, this finding is not driven by cerebro-ocular connectivity, as late blind individuals exhibit stronger connectivity between the eyes and the left temporal cortices without a corresponding increase in ocular tracking. In conclusion, ocular speech tracking seems to respond selectively to acoustic features of speech, and does not require visual experience to develop. It may thus represent a hard-wired oculomotor mechanism within the oculo-cerebral network involved in speech processing.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 8 matches between paragraphs and lines of code.
KajaRosa/kb_blindaudio
546ae0131f9fdd866d6e6656c4db1313a82f7c60, 6 April 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
14 files
- eog_pipeline/
b00_do_all_eye.py , Python, 298 lines, 3 matches - eog_pipeline/
b01_reviewer_sensorplot. , Python, 89 lines, 1 matchpy - eog_pipeline/
get_blinds_comm.py , Python, 683 lines - eog_pipeline/
get_sensor_plot_rev.py , Python, 132 lines - eog_pipeline/
get_sourceplots.py , Python, 198 lines - eog_pipeline/
get_syllables.py , Python, 40 lines, 1 match - eog_pipeline/
r04_doeysource.sh , Shell, 43 lines - eog_pipeline/
reviewer.sh , Shell, 9 lines - eog_pipeline/
splot_reviewer2.py , Python, 171 lines - eog_pipeline/
stats_reviewer.py , Python, 88 lines - eog_pipeline/
utils/ , Python, 5 linescondor.py - eog_pipeline/
utils/ , Python, 697 lines, 2 matcheseogmachine.py - eog_pipeline/
utils/ , Python, 129 linesplot_helper.py - eog_pipeline/
utils/ , Python, 297 lines, 1 matchutils_eog.py
Code Availability
GitLab: gitlab.com/
Reproduced under the paper's license (CC BY), from the paper cited above.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 14 scripts, each with its path and the digest of its content;
- 8 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
No dataset and no data link were found in the paper.
Data Availability
The authors acknowledge the Austrian NeuroCloud (https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 2, 28 September 2026
- Authors: added Kaja Rosa Benz (0000-0002-8503-1273); Larissa Reitinger (0000-0002-6650-9948); Anne Hauswald (0000-0002-3754-0807); removed Kaja Rosa Benz; Larissa Reitinger; Anne Hauswald
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 7 authors, 4 keywords, 12 MeSH terms, 1 funder, 53 references.
Cite
This paper
Rosa Benz, K., Reitinger, L., Schmidt, F., Bottari, D., Hauswald, A., Collignon, O., & Weisz, N. (2026). Ocular Speech Tracking Persists in Blindness, but Its Dynamics and Oculo-Cerebral Connectivity Depend on Visual Status. eNeuro, 13(7), ENEURO.0041-26.2026. https://
BibTeX
@article{rosabenz2026ocu
author = {Rosa Benz, Kaja and Reitinger, Larissa and Schmidt, Fabian and Bottari, Davide and Hauswald, Anne and Collignon, Olivier and Weisz, Nathan},
title = {{Ocular Speech Tracking Persists in Blindness, but Its Dynamics and Oculo-Cerebral Connectivity Depend on Visual Status}},
journal = {eNeuro},
year = {2026},
month = jul,
volume = {13},
number = {7},
pages = {ENEURO.0041--26.2026},
publisher = {Society for Neuroscience},
issn = {2373-2822},
doi = {10.1523/
url = {https://
pmid = {42379881},
pmcid = {PMC13349464}
}
RIS
TY - JOUR
AU - Rosa Benz, Kaja
AU - Reitinger, Larissa
AU - Schmidt, Fabian
AU - Bottari, Davide
AU - Hauswald, Anne
AU - Collignon, Olivier
AU - Weisz, Nathan
TI - Ocular Speech Tracking Persists in Blindness, but Its Dynamics and Oculo-Cerebral Connectivity Depend on Visual Status
T2 - eNeuro
J2 - eNeuro
PY - 2026
DA - 2026/
VL - 13
IS - 7
SP - ENEURO.0041
EP - 26.2026
SN - 2373-2822
PB - Society for Neuroscience
DO - 10.1523/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1523/
"type": "article-journal",
"title": "Ocular Speech Tracking Persists in Blindness, but Its Dynamics and Oculo-Cerebral Connectivity Depend on Visual Status",
"container-title": "eNeuro",
"author": [
{
"family": "Rosa Benz",
"given": "Kaja"
},
{
"family": "Reitinger",
"given": "Larissa"
},
{
"family": "Schmidt",
"given": "Fabian"
},
{
"family": "Bottari",
"given": "Davide"
},
{
"family": "Hauswald",
"given": "Anne"
},
{
"family": "Collignon",
"given": "Olivier"
},
{
"family": "Weisz",
"given": "Nathan"
}
],
"container-title-short":
"volume": "13",
"issue": "7",
"page": "ENEURO.0041-26.2026",
"DOI": "10.1523/
"PMID": "42379881",
"PMCID": "PMC13349464",
"ISSN": "2373-2822",
"publisher": "Society for Neuroscience",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
9
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.7554/elife.100605 [code]
- Age-related changes in ‘cortical’ 1/
f dynamics are linked to cardiac activity Journal: n/aIn common: Pingouin, MNE-Python, statsmodels, 6 other tools, MEG, 4 references, author Nathan Weisz - [2] doi:10.1093/nc/niag029 [code]
- A data-driven approach to identifying and evaluating connectivity-based neural correlates of conscious visual perception.Journal: Neuroscience of consciousnessIn common: MNE-Connectivity, Pingouin, MNE-Python, 8 other tools, MEG, cognitive, 1 reference
- [3] doi:10.1038/s41597-026-07350-9 [code]
- An open multi-center MEG-EEG dataset for studying conscious visual perception.Journal: Scientific dataIn common: MNE-Connectivity, Pingouin, MNE-Python, 8 other tools, MEG
- [4] doi:10.1097/j.pain.0000000000004044 [code]
- No effect of rhythmic visual stimulation on experimental pain perception.Journal: PainIn common: MNE-Connectivity, Pingouin, MNE-Python, 6 other tools, cognitive, 2 references
- [5] doi:10.3389/fncom.2026.1786996 [code]
- Schumann-anchored golden ratio organization of human neural oscillations.Journal: Frontiers in computational neuroscienceIn common: MNE-Connectivity, MNE-Python, Pillow, 8 other tools, 1 reference
- [6] doi:10.1162/imag.a.1269 [code]
- From early to contemporary normative modeling: Mapping individual differences in neurophysiological signals.Journal: Imaging neuroscience (Cambridge, Mass.)In common: Pingouin, MNE-Python, Plotly, 8 other tools, MEG, 1 reference
- [7] doi:10.1162/imag.a.1245 [code]
- Towards precision EEG connectomics: Evaluating the benefits of dense sampling.Journal: Imaging neuroscience (Cambridge, Mass.)In common: MNE-Connectivity, Pingouin, MNE-Python, 7 other tools, 1 reference
- [8] doi:10.1038/s41467-026-74824-0 [code]
- Learning regularities in noise engages both neural predictive activity and representational changes.Journal: Nature communicationsIn common: Pingouin, MNE-Python, Plotly, 7 other tools, MEG, cognitive, 1 reference
- [9] doi:10.1038/s41597-026-07377-y [code]
- An open-access multi-site fMRI dataset for investigating conscious visual perception.Journal: Scientific dataIn common: MNE-Connectivity, Pingouin, MNE-Python, 8 other tools
- [10] doi:10.1038/s41597-025-05174-7 [code]
- A large-scale MEG and EEG dataset for object recognition in naturalistic scenesJournal: n/aIn common: MNE-Python, Plotly, Pillow, 7 other tools, MEG, 2 references
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 14 scripts, and 8 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:f192bb8967fafff7…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[.
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
