Towards precision EEG connectomics: Evaluating the benefits of dense sampling.
The 9 matches
- [1] § Methods › Connectivity measures and connectome generation ↔ EEG_Preprocessing_and_Analysis/MNE Programs Final March 2025/3 Make Intermediate Files/ageeffect_timesubset_nov2024_pt2.py, lines 20–68 · score 0.72 · 13–30 Hz, 8–13 Hz, 2.5–45 Hz, frequency bands, 2.5 Hz, FC
- [2] § Methods › Connectivity measures and connectome generation ↔ EEG_Preprocessing_and_Analysis/MNE Programs Final March 2025/4 Make Plots/fig6_fingerprintingbylength.py, lines 19–76 · score 0.71 · 13–30 Hz, 8–13 Hz, 2.5–45 Hz, frequency bands, 2.5 Hz
- [3] § Methods › Preprocessing ↔ EEG_Preprocessing_and_Analysis/MNE Programs Final March 2025/1 Preprocessing/03 ICA v9.py, lines 545–585 · score 0.66 · notch filtered, bandpass filtered, downsampled, MNE, Channels, epochs
- [4] § Methods › Preprocessing ↔ EEG_Preprocessing_and_Analysis/MNE Programs Final March 2025/2 Make Connectomes/source_localization_8_june2024.py, lines 186–246 · score 0.62 · pca_flip, FreeSurfer, Source localization, Source space, MNE, vertices
- [5] § Methods › Preprocessing ↔ EEG_Preprocessing_and_Analysis/MNE Programs Final March 2025/2 Make Connectomes/source_localization_8_task_june2024_agesessplit.py, lines 414–461 · score 0.62 · pca_flip, FreeSurfer, Source localization, Source space, MNE, vertices
- [6] § Methods › Preprocessing ↔ EEG_Preprocessing_and_Analysis/MNE Programs Final March 2025/1 Preprocessing/05 finalize v4.py, lines 779–839 · score 0.59 · mne icalabel, classified, eye, component, Channels, noise
- [7] § Methods › Simulated brain activity ↔ EEG_Preprocessing_and_Analysis/MNE Programs Final March 2025/2 Make Connectomes/source_localization_8_makesimconnectomes.py, lines 253–290 · score 0.55 · Source Simulator, source space, MNE, noise, epochs, preprocessing
- [8] § Methods › Connectivity measures and connectome generation ↔ EEG_Preprocessing_and_Analysis/MNE Programs Final March 2025/2 Make Connectomes/source_localization_8_makesimconnectomes.py, lines 319–378 · score 0.51 · envelope correlations, spectral, adaptive, multitaper, orthogonalization, simulated
- [9] § Methods › Connectivity measures and connectome generation ↔ EEG_Preprocessing_and_Analysis/MNE Programs Final March 2025/2 Make Connectomes/source_localization_8_june2024.py, lines 248–295 · score 0.51 · envelope correlations, spectral, adaptive, multitaper, MNE, orthogonalization
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 · 317 lines · 17 KB · no license · 2 matches
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- This creates connectomes for each file
- """
- import mne
- import pandas as pd
- import os
- from mne.minimum_norm import make_inverse_operator, apply_inverse_epochs
- from mne_connectivity import spectral_connectivity_epochs
- from mne_connectivity import phase_slope_index
- from mne_connectivity import envelope_correlation
- import time
- import numpy as np
- import mne_connectivity
- #where is structural data saved. There should be one structural file per participant
- subjects_dir = '/Users/ivy/Desktop/Graff_EEG_stuff/ZPrecise2_MRI_fixed_rename_FS'
- #folder with all the participant folders and EEG outputs
- dir_start = '/Users/ivy/Desktop/Graff_EEG_stuff/precise_KIDS_final/prepro1/'
- #file with manual adjustments for epochs to include/exclude
- manadj = '/Users/ivy/Desktop/Graff_EEG_stuff/precise_KIDS_final/manualadj_done.csv'
- #write over files if they already exist? If yes, replacer = True. Or ignore them?
- replacer = False
- #which parcellation(s) to use. This probably only works with aparc(?) but at one point intended to check other parcellations
- parclist = ['aparc']
- #which frequency bands and FC measures to generate connectomes for
- fbands = [[8.0,13.0],[13.0,30.0],[2.5,45.0]]
- conmethods = ['wpli','imcoh','coh','plv','pli','ciplv','psi','ecpwo','ecso']
- #which file(s) do you want to look at?
- families = list(range(2,27))
- participant_ages = ['P','C']
- sessions = [1,2,3,4,'4x']
- tasks = ['DORA','YT','RX']
- #source localization method
- method = "eLORETA"
- snr = 3.0
- #what subsets of data to use? 150 = use first 150 epochs, for example. 'full' uses the full scan
- #subsections = [150]
- subsections = [150,'full']
- #filter data, for envelope correlations
- def bp_gen(label_ts,fmin,fmax):
- """Make a generator that band-passes on the fly."""
- for ts in label_ts:
- yield mne.filter.filter_data(ts, sfreq, fmin, fmax)
- adjdf = pd.read_csv(manadj)
- for family in families:
- strnum = str(family)
- if len(strnum) == 1:
- strnum = '0' + strnum
- strfam = 'sub-19730' + strnum
- for page in participant_ages:
- strper = strfam + str(page)
- personfolder = dir_start + strper + '/'
- prefixed = [filename for filename in os.listdir(subjects_dir) if filename.startswith(strper)]
- personfolder2 = subjects_dir + '/' + prefixed[0]
- subject = prefixed[0]
- if len(prefixed) != 1:
- print('Uh oh, problem with structural data, either 0 or multiple structural files for participant')
- else:
- if not os.path.exists(personfolder):
- print("This folder doesn't exist: " + personfolder)
- else:
- for parc in parclist:
- for session in sessions:
- input_data_folder = personfolder + 'ses-' + str(session) + '/eeg/'
- connectome_folder = personfolder + 'ses-' + str(session) + '/connectomes_0624/' + parc + '/'
- if not os.path.exists(connectome_folder):
- os.makedirs(connectome_folder)
- for task in tasks:
- raw_data_file_sub = strper + '_ses-' + str(session) + '_task-' + task
- if os.path.exists(input_data_folder):
- prefixed = [filename for filename in os.listdir(input_data_folder) if filename.startswith(raw_data_file_sub)]
- else:
- prefixed = []
- if len(prefixed) == 0:
- print("There are no files starting with: " + raw_data_file_sub)
- else:
- fullfile = [filename for filename in prefixed if filename.endswith('remontage_epo.fif')]
- fwdfile = [filename for filename in prefixed if filename.endswith('fwd.fif')]
- epochdatafolder = [filename for filename in prefixed if filename.endswith('eeg')]
- if len(fullfile) > 1 or len(fwdfile) > 1:
- print("There are multiple files that exist of the same task:")
- for val in fullfile:
- print(val)
- for val in fwdfile:
- print(val)
- print("For now, ignoring all of them")
- elif len(fullfile) == 0 or len(fwdfile) == 0:
- print("There are missing files starting with: " + raw_data_file_sub)
- else:
- remontage_path = input_data_folder + fullfile[0]
- fwd_path = input_data_folder + fwdfile[0]
- filetosaveprefix = fullfile[0].split('eeg_')[0]
- outputfiles = [filename for filename in os.listdir(connectome_folder) if filename.startswith(filetosaveprefix)]
- if len(outputfiles) > 0 and replacer == False:
- print("Output files already exist starting with: " + filetosaveprefix)
- else:
- print("Makin' connectomes starting with: " + filetosaveprefix)
- adjdfname = filetosaveprefix + 'eeg.raw'
- adjdata = adjdf[adjdf['File'] == adjdfname]
- if len(adjdata) != 1:
- print("Info on this scan in adjepochdf is wrong")
- else:
- omitdata = adjdata.iloc[0]['Omit']
- dropstart = int(adjdata.iloc[0]['Drop_start'])
- dropend = int(adjdata.iloc[0]['Drop_end'])
- if omitdata != 'no':
- print(filetosaveprefix + ' is being omitted due to the adjepochdf')
- else:
- starttime = time.time()
- epochsadj = mne.read_epochs(remontage_path,preload=True)
- if dropstart > 0:
- print("Dropping epochs at start: " + str(dropstart))
- epochsadj = epochsadj[dropstart:].copy()
- if dropend > 0:
- print("Dropping epochs at end: " + str(dropend))
- epochsadj = epochsadj[:-1*dropend].copy()
- fwd = mne.read_forward_solution(fwd_path)
- sfreq = epochsadj.info['sfreq'] # the sampling frequency
- noise_cov = mne.make_ad_hoc_cov(epochsadj.info)
- #inverse operator
- inverse_operator = make_inverse_operator(info=epochsadj.info, forward=fwd, noise_cov=noise_cov, depth=3.5)
- #compute inverse solution
- lambda2 = 1. / snr ** 2
- #stcs = apply_inverse_epochs(epochsadj, inverse_operator, lambda2, method,pick_ori="normal", nave=len(epochsadj))
- stcs = apply_inverse_epochs(epochsadj, inverse_operator, lambda2, method)
- print("")
- print("Parcellating")
- print("")
- #read labels from the freesurfer outputs
- labels_parc = mne.read_labels_from_annot(subject, parc=parc,subjects_dir=subjects_dir)
- label_names = [label.name for label in labels_parc]
- #generate time course data
- #this is of length 200ish (one for each epoch), then each of those is length 68 (for each region), then each of those is 500 (for each timepoint)
- try:
- label_ts = mne.extract_label_time_course(stcs=stcs, labels=labels_parc, src=inverse_operator['src'], mode='pca_flip')
- except:
- label_ts = mne.extract_label_time_course(stcs=stcs, labels=labels_parc, src=inverse_operator['src'], mode='pca_flip',allow_empty=True)
- log = []
- savelog = connectome_folder + filetosaveprefix + parc + '_errorlog.txt'
- warningmessage = 'Source space does not contain any vertices for 1+ label. Allowing empty'
- log.append(warningmessage)
- print("")
- with open(savelog, 'w') as f:
- for item in log:
- f.write("%s\n" % item)
- print(item)
- f.close()
- for subsection in subsections:
- if subsection != 'full':
- sublabel_ts = label_ts[:subsection]
- else:
- sublabel_ts = label_ts.copy()
- for fband in fbands:
- fmin = fband[0]
- fmax = fband[1]
- for conmethod in conmethods:
- filetosave = connectome_folder + filetosaveprefix + parc + '_' + conmethod + '_' + str(fmin) + 'Hz-' + str(fmax) + 'Hz_' + str(subsection) + 'e.csv'
- print("Working on " + filetosave)
- corr = []
- if conmethod == 'psi':
- psi = phase_slope_index(sublabel_ts,sfreq=sfreq,fmin=fmin, fmax=fmax,mt_adaptive=True)
- corr = psi.get_data(output='dense')[:, :, 0]
- elif conmethod == 'ecpwo':
- corr_obj = envelope_correlation(bp_gen(sublabel_ts,fmin,fmax), orthogonalize="pairwise")
- corr = corr_obj.combine()
- corr = corr.get_data(output="dense")[:, :, 0]
- elif conmethod == 'ecso':
- label_ts_orth = mne_connectivity.envelope.symmetric_orth(sublabel_ts)
- corr_obj = envelope_correlation(bp_gen(label_ts_orth,fmin,fmax), orthogonalize=False)
- corr2 = corr_obj.combine()
- corr2 = corr2.get_data(output="dense")[:, :, 0]
- corr2.flat[:: corr2.shape[0] + 1] = 0 # zero out the diagonal
- corr = np.abs(corr2)
- else:
- con = spectral_connectivity_epochs(sublabel_ts, method=conmethod, mode='multitaper', sfreq=sfreq, fmin=fmin,fmax=fmax, faverage=True, mt_adaptive=True)
- corr = con.get_data(output='dense')[:, :, 0]
- conmatdf = pd.DataFrame(data=corr)
- conmatdf.index = label_names
- conmatdf.columns = label_names
- conmatdf.to_csv(filetosave)
- endtime = time.time()
- timepassed = endtime-starttime
- timepassed_min = str(round(timepassed/60,2))
- print("")
- print("")
- print("Done for " + filetosaveprefix)
- print("Done for " + filetosaveprefix)
- print("Time passed for this file = " + timepassed_min + ' min')
- print("")
- print("")
- print("")
- print("")
- print("")
- print("")
- print("")
- print("")
source_localization_8_june2024.py at commit 234648d, no license · at the source
Overview
- Child and Adolescent Imaging Research Program, University of Calgary, Calgary, AB, Canada
- Alberta Children’s Hospital Research Institute, University of Calgary, Calgary, AB, Canada
- Hotchkiss Brain Institute, University of Calgary, Calgary, AB, Canada
- Department of Community Health Sciences, University of Calgary, Calgary, AB, Canada
- Department of Clinical Neurosciences, University of Calgary, Calgary, AB, Canada
- Department of Psychiatry, University of Calgary, Calgary, AB, Canada
- Mathison Centre for Mental Health Research and Education, University of Calgary, Calgary, AB, Canada
- Department of Psychiatry, University of British Columbia, Vancouver, BC, Canada
- BC Children’s Hospital Research Institute, Vancouver, BC, Canada
- Department of Psychology, University of Calgary, Calgary, AB, Canada
- Department of Radiology, University of Calgary, Calgary, AB, Canada
Abstract
EEG connectomics research offers the potential to better understand human neurodevelopment, brain disorders, and brain–behavior associations. Several functional connectivity (FC) measures are widely used but few studies have directly compared metrics of reliability across measures and how data quantity influences these properties. Here, we collected a densely sampled dataset from 25 parent–child pairs, with 80 minutes of passive viewing EEG data collected per participant over 4 sessions, and calculated connectomes using 9 popular phase- and envelope-based measures (coherence, COH; phase locking value, PLV; corrected imaginary phase locking value, CIPLV; imaginary coherence, IMCOH; phase-lag index, PLI; weighted phase-lag index, WPLI; envelope correlation with pairwise orthogonalization, ECPWO; and envelope correlation with symmetric orthogonalization, ECSO), including one effective connectivity measure (phase slope index; PSI). We used connectome individualization, derived from fingerprinting-style analyses, as a multivariate reliability metric, as used in fMRI-FC studies. We used simulations with individual head geometry but no “true” connectivity to assess whether identifiability was influenced by volume conduction. We found that COH and PLV were vulnerable to volume conduction influence on identifiability; CIPLV, ECSO, and ECPWO were semi-vulnerable; and IMCOH, WPLI, PLI, and PSI were minimally vulnerable. Next, we considered individualization and reliability of age-group effects with increasing time of data collection. IMCOH had the overall best performance among minimally vulnerable measures, considering individualization and reliability of group effects. We further found that reliability of IMCOH along with other volume conduction-corrected EEG-FC measures continued to improve with up to 25–30 minutes of data. Together, our findings can support study design decisions in EEG connectomics research.
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 9 matches between paragraphs and lines of code.
brayneuroimaginglab/bnl_open
234648debc953b86a182613619f64c3b23c74355, 23 March 2025Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
160 files
- Benchmark preprocessing/
fingerprinting calculator/ , Python, 211 linesfingerprint_calculator.p y - Benchmark preprocessing/
icc_calculator.py , Python, 151 lines - Benchmark preprocessing/
qcfc calculator/ , Python, 113 linesqcfc_calculator.py - EEG_Preprocessing_and_An
alysis/ , Python, 1,175 linesMNE Programs Final March 2025/ 1 Preprocessing/ 01 bad channel investigator v6.py - EEG_Preprocessing_and_An
alysis/ , Python, 1,860 lines, 1 matchMNE Programs Final March 2025/ 1 Preprocessing/ 03 ICA v9.py - EEG_Preprocessing_and_An
alysis/ , Python, 1,270 lines, 1 matchMNE Programs Final March 2025/ 1 Preprocessing/ 05 finalize v4.py - EEG_Preprocessing_and_An
alysis/ , Python, 307 linesMNE Programs Final March 2025/ 1 Preprocessing/ bead_detector v2.py - EEG_Preprocessing_and_An
alysis/ , Python, 450 linesMNE Programs Final March 2025/ 1 Preprocessing/ defogger.py - EEG_Preprocessing_and_An
alysis/ , Python, 280 linesMNE Programs Final March 2025/ 1 Preprocessing/ explore_file_length.py - EEG_Preprocessing_and_An
alysis/ , Python, 234 linesMNE Programs Final March 2025/ 1 Preprocessing/ figureoutfailure5_functi ons.py - EEG_Preprocessing_and_An
alysis/ , Python, 315 linesMNE Programs Final March 2025/ 1 Preprocessing/ guinevere_returns.py - EEG_Preprocessing_and_An
alysis/ , Python, 270 linesMNE Programs Final March 2025/ 1 Preprocessing/ newmakebids.py - EEG_Preprocessing_and_An
alysis/ , Python, 86 linesMNE Programs Final March 2025/ 1 Preprocessing/ source_localization_1_v2 .py - EEG_Preprocessing_and_An
alysis/ , Python, 55 linesMNE Programs Final March 2025/ 1 Preprocessing/ source_localization_2.py - EEG_Preprocessing_and_An
alysis/ , Python, 213 linesMNE Programs Final March 2025/ 1 Preprocessing/ source_localization_3.py - EEG_Preprocessing_and_An
alysis/ , Python, 162 linesMNE Programs Final March 2025/ 1 Preprocessing/ source_localization_4.py - EEG_Preprocessing_and_An
alysis/ , Python, 422 linesMNE Programs Final March 2025/ 1 Preprocessing/ source_localization_5.py - EEG_Preprocessing_and_An
alysis/ , Python, 143 linesMNE Programs Final March 2025/ 1 Preprocessing/ source_localization_6.py - EEG_Preprocessing_and_An
alysis/ , Python, 278 linesMNE Programs Final March 2025/ 1 Preprocessing/ source_localization_7.py - EEG_Preprocessing_and_An
alysis/ , Python, 317 lines, 2 matchesMNE Programs Final March 2025/ 2 Make Connectomes/ source_localization_8_ju ne2024.py - EEG_Preprocessing_and_An
alysis/ , Python, 449 lines, 2 matchesMNE Programs Final March 2025/ 2 Make Connectomes/ source_localization_8_ma kesimconnectomes.py - EEG_Preprocessing_and_An
alysis/ , Python, 594 lines, 1 matchMNE Programs Final March 2025/ 2 Make Connectomes/ source_localization_8_ta sk_june2024_agesessplit. py - EEG_Preprocessing_and_An
alysis/ , Python, 722 linesMNE Programs Final March 2025/ 2 Make Connectomes/ source_localization_8_ta sk_june2024_v2.py - EEG_Preprocessing_and_An
alysis/ , Python, 386 linesMNE Programs Final March 2025/ 3 Make Intermediate Files/ ageeffect_timesubset_nov 2024_pt1.py - EEG_Preprocessing_and_An
alysis/ , Python, 88 lines, 1 matchMNE Programs Final March 2025/ 3 Make Intermediate Files/ ageeffect_timesubset_nov 2024_pt2.py - EEG_Preprocessing_and_An
alysis/ , Python, 1,601 linesMNE Programs Final March 2025/ 3 Make Intermediate Files/ analyzeconnectomes fingerprint June2024.py - EEG_Preprocessing_and_An
alysis/ , Python, 702 linesMNE Programs Final March 2025/ 3 Make Intermediate Files/ analyzeconnectomes fingerprint firsthalfsecondhalf June2024.py - EEG_Preprocessing_and_An
alysis/ , Python, 1,628 linesMNE Programs Final March 2025/ 3 Make Intermediate Files/ analyzeconnectomes fingerprint simulated_connectomes.py - EEG_Preprocessing_and_An
alysis/ , Python, 274 linesMNE Programs Final March 2025/ 3 Make Intermediate Files/ makeavg_to_plot_average_ connectome.py - EEG_Preprocessing_and_An
alysis/ , Python, 177 linesMNE Programs Final March 2025/ 3 Make Intermediate Files/ simtoreal_avg of indivs_correlations.py - EEG_Preprocessing_and_An
alysis/ , Python, 397 linesMNE Programs Final March 2025/ 3 Make Intermediate Files/ simtoreal_avgdf_correlat ions.py - EEG_Preprocessing_and_An
alysis/ , Python, 492 linesMNE Programs Final March 2025/ 3 Make Intermediate Files/ simtoreal_correlations.p y - EEG_Preprocessing_and_An
alysis/ , Python, 425 linesMNE Programs Final March 2025/ 4 Make Plots/ fig1_plot_average_connec tome_plotting.py - EEG_Preprocessing_and_An
alysis/ , Python, 380 linesMNE Programs Final March 2025/ 4 Make Plots/ fig4_fingerprinting.py - EEG_Preprocessing_and_An
alysis/ , Python, 318 linesMNE Programs Final March 2025/ 4 Make Plots/ fig5_sup_fingerprinting_ stats_chart.py - EEG_Preprocessing_and_An
alysis/ , Python, 226 lines, 1 matchMNE Programs Final March 2025/ 4 Make Plots/ fig6_fingerprintingbylen gth.py - EEG_Preprocessing_and_An
alysis/ , Python, 174 linesMNE Programs Final March 2025/ 4 Make Plots/ fig7_ageeffectbylength.p y - EEG_Preprocessing_and_An
alysis/ , Python, 1,175 linesScripts/ 01 bad channel investigator v6.py - EEG_Preprocessing_and_An
alysis/ , Python, 1,860 linesScripts/ 03 ICA v9.py - EEG_Preprocessing_and_An
alysis/ , Python, 1,270 linesScripts/ 05 finalize v4.py - EEG_Preprocessing_and_An
alysis/ , Python, 318 linesScripts/ Other EEG Scripts/ Final analyses/ ageeffect.py - EEG_Preprocessing_and_An
alysis/ , Python, 84 linesScripts/ Other EEG Scripts/ Final analyses/ ageeffectresults.py - EEG_Preprocessing_and_An
alysis/ , Python, 305 linesScripts/ Other EEG Scripts/ Final analyses/ taskeffect.py - EEG_Preprocessing_and_An
alysis/ , Python, 302 linesScripts/ Other EEG Scripts/ Final analyses/ taskeffect_nonavg.py - EEG_Preprocessing_and_An
alysis/ , Python, 77 linesScripts/ Other EEG Scripts/ Final analyses/ taskeffectresults.py - EEG_Preprocessing_and_An
alysis/ , Python, 280 linesScripts/ Other EEG Scripts/ MNE plots June 10 2023/ plot_average_connectome_ makeavg.py - EEG_Preprocessing_and_An
alysis/ , Python, 425 linesScripts/ Other EEG Scripts/ MNE plots June 10 2023/ plot_average_connectome_ plotting.py - EEG_Preprocessing_and_An
alysis/ , Python, 308 linesScripts/ Other EEG Scripts/ MNE plots June 10 2023/ xplots2.py - EEG_Preprocessing_and_An
alysis/ , Python, 328 linesScripts/ Other EEG Scripts/ MNE plots June 10 2023/ xplots2_stats_chart.py - EEG_Preprocessing_and_An
alysis/ , Python, 344 linesScripts/ Other EEG Scripts/ MNE plots June 10 2023/ xplots3.py - EEG_Preprocessing_and_An
alysis/ , Python, 358 linesScripts/ Other EEG Scripts/ MNE plots June 10 2023/ xplots3_stats_chart.py - EEG_Preprocessing_and_An
alysis/ , Python, 315 linesScripts/ Other EEG Scripts/ MNE plots June 10 2023/ xplots4.py - EEG_Preprocessing_and_An
alysis/ , Python, 331 linesScripts/ Other EEG Scripts/ MNE plots June 10 2023/ xplots4_stats_chart.py - EEG_Preprocessing_and_An
alysis/ , Python, 261 linesScripts/ Other EEG Scripts/ MNE plots June 10 2023/ xplots5.py - EEG_Preprocessing_and_An
alysis/ , Python, 1,595 linesScripts/ Other EEG Scripts/ analyzeconnectomes fingerprint.py - EEG_Preprocessing_and_An
alysis/ , Python, 710 linesScripts/ Other EEG Scripts/ analyzeconnectomes time subset firsthalfsecondhalf.py - EEG_Preprocessing_and_An
alysis/ , Python, 348 linesScripts/ Other EEG Scripts/ source_localization_8_fi rst2second2.py - EEG_Preprocessing_and_An
alysis/ , Python, 307 linesScripts/ bead_detector v2.py - EEG_Preprocessing_and_An
alysis/ , Python, 450 linesScripts/ defogger.py - EEG_Preprocessing_and_An
alysis/ , Python, 280 linesScripts/ explore_file_length.py - EEG_Preprocessing_and_An
alysis/ , Python, 234 linesScripts/ figureoutfailure5_functi ons.py - EEG_Preprocessing_and_An
alysis/ , Python, 315 linesScripts/ guinevere_returns.py - EEG_Preprocessing_and_An
alysis/ , Python, 270 linesScripts/ newmakebids.py - EEG_Preprocessing_and_An
alysis/ , Python, 86 linesScripts/ source_localization_1_v2 .py - EEG_Preprocessing_and_An
alysis/ , Python, 55 linesScripts/ source_localization_2.py - EEG_Preprocessing_and_An
alysis/ , Python, 213 linesScripts/ source_localization_3.py - EEG_Preprocessing_and_An
alysis/ , Python, 162 linesScripts/ source_localization_4.py - EEG_Preprocessing_and_An
alysis/ , Python, 422 linesScripts/ source_localization_5.py - EEG_Preprocessing_and_An
alysis/ , Python, 143 linesScripts/ source_localization_6.py - EEG_Preprocessing_and_An
alysis/ , Python, 278 linesScripts/ source_localization_7.py - EEG_Preprocessing_and_An
alysis/ , Python, 299 linesScripts/ source_localization_8.py - Matlab_Scripts_MSCData/
Concatenate_Connectomes. , MATLAB, 50 linesm - Matlab_Scripts_MSCData/
Connectome_Corr.m , MATLAB, 43 lines - Matlab_Scripts_MSCData/
Consensus_Communities.m , MATLAB, 116 lines - Matlab_Scripts_MSCData/
Consensus_Maker_Colors.m , MATLAB, 39 lines - Matlab_Scripts_MSCData/
Create_Connectomes.m , MATLAB, 21 lines - Matlab_Scripts_MSCData/
Create_Consensus_Network , MATLAB, 88 liness.m - Matlab_Scripts_MSCData/
Create_FinalNetworks.m , MATLAB, 17 lines - Matlab_Scripts_MSCData/
Create_InfomapNetworks.m , MATLAB, 49 lines - Matlab_Scripts_MSCData/
Edge_ICC.m , MATLAB, 155 lines - Matlab_Scripts_MSCData/
GlassMatched_Reliability , MATLAB, 286 lines_Jan2023.m - Matlab_Scripts_MSCData/
GlassMatched_SignalPrope , MATLAB, 449 linesrties.m - Matlab_Scripts_MSCData/
Group_Parcels_Avg.m , MATLAB, 164 lines - Matlab_Scripts_MSCData/
ICC.m , MATLAB, 188 lines - Matlab_Scripts_MSCData/
ICCMSCFigure.m , MATLAB, 101 lines - Matlab_Scripts_MSCData/
LME_Test.m , MATLAB, 1,184 lines - Matlab_Scripts_MSCData/
MSCaccuracy.m , MATLAB, 40 lines - Matlab_Scripts_MSCData/
MeanCenter_Timeseries.m , MATLAB, 23 lines - Matlab_Scripts_MSCData/
MeanSignal_Values_Jan202 , MATLAB, 31 lines3.m - Matlab_Scripts_MSCData/
MemoryMatched_Reliabilit , MATLAB, 310 linesy_Jan2023.m - Matlab_Scripts_MSCData/
MemoryMatched_SignalProp , MATLAB, 488 lineserties.m - Matlab_Scripts_MSCData/
MotorMatched_Reliability , MATLAB, 396 lines_Nov2022.m - Matlab_Scripts_MSCData/
MotorMatched_SignalPrope , MATLAB, 447 linesrties.m - Matlab_Scripts_MSCData/
Motor_Matched.m , MATLAB, 193 lines - Matlab_Scripts_MSCData/
Open_CiftiTimeseries.m , MATLAB, 87 lines - Matlab_Scripts_MSCData/
Open_CiftiTimeseries_RES , MATLAB, 95 linesT.m - Matlab_Scripts_MSCData/
Open_CiftiTimeseries_Reg , MATLAB, 87 linesressed.m - Matlab_Scripts_MSCData/
RegminusNoReg.m , MATLAB, 76 lines - Matlab_Scripts_MSCData/
RelativeReli_Task_PEs.m , MATLAB, 138 lines - Matlab_Scripts_MSCData/
Remove_Motion.m , MATLAB, 132 lines - Matlab_Scripts_MSCData/
Rest_Analysis_May222022. , MATLAB, 92 linesm - Matlab_Scripts_MSCData/
Run_Infomap_ConsensusD.m , MATLAB, 68 lines - Matlab_Scripts_MSCData/
SD_Values_Jan2023.m , MATLAB, 31 lines - Matlab_Scripts_MSCData/
SignalPropertiesMSC.m , MATLAB, 80 lines - Matlab_Scripts_MSCData/
Signal_AllTask.m , MATLAB, 60 lines - Matlab_Scripts_MSCData/
Signal_Property_Values.m , MATLAB, 134 lines - Matlab_Scripts_MSCData/
Stats.m , MATLAB, 12 lines - Matlab_Scripts_MSCData/
Task_NoReg_RelativeMS.m , MATLAB, 23 lines - Matlab_Scripts_MSCData/
Task_PEs.m , MATLAB, 101 lines - Matlab_Scripts_MSCData/
Test_Retest_MSC.m , MATLAB, 16 lines - Matlab_Scripts_MSCData/
ciftiopen.m , MATLAB, 45 lines - Matlab_Scripts_MSCData/
ciftisave.m , MATLAB, 33 lines - Matlab_Scripts_MSCData/
ciftisavereset.m , MATLAB, 49 lines - Matlab_Scripts_MSCData/
consensus_maker_knowncol , MATLAB, 284 linesors.m - Matlab_Scripts_MSCData/
consensus_maker_knowncol , MATLAB, 155 linesors_textonly.m - Matlab_Scripts_MSCData/
mat2pajek_byindex.m , MATLAB, 36 lines - Matlab_Scripts_MSCData/
matrix_thresholder_simpl , MATLAB, 37 linese.m - Matlab_Scripts_MSCData/
tSNR_Values_Jan2023.m , MATLAB, 14 lines - Matlab_Scripts_MSCData/
threshold_proportional.m , MATLAB, 45 lines - Python_Scripts_MSCData/
1tintagel_v_1.1.py , Python, 331 lines - Python_Scripts_MSCData/
2lancelot_EPIref.py , Python, 1,481 lines - Python_Scripts_MSCData/
3lancelot_v_1.5.py , Python, 1,394 lines - Python_Scripts_MSCData/
4motion_parameter.py , Python, 240 lines - Python_Scripts_MSCData/
5excalibur_EPIref.py , Python, 1,840 lines - Python_Scripts_MSCData/
6excalibur_1.35.py , Python, 1,843 lines - Python_Scripts_MSCData/
linregis_preprocess.py , Python, 350 lines - Python_Scripts_MSCData/
struct_preprocessT1.py , Python, 833 lines - Python_Scripts_MSCData/
struct_preprocessT2.py , Python, 841 lines - R_Scripts_MSCData/
ICCandTestRetest.R , R, 155 lines - R_Scripts_MSCData/
MotorReg_MsSdTsnr.R , R, 229 lines - R_Scripts_MSCData/
Motor_MsSdTsnr.R , R, 203 lines - R_Scripts_MSCData/
New_RelativeReliChange_T , R, 146 linesasks.R - R_Scripts_MSCData/
PercentChange_RelativeRe , R, 785 linesli_Tasks.R - R_Scripts_MSCData/
RelativeReli& , R, 93 linesSD_Tasks.R - R_Scripts_MSCData/
RelativeReli_TaskRegvNoR , R, 254 lineseg.R - R_Scripts_MSCData/
RelativeReli_TaskRegvNoR , R, 257 lineseg_AllNetworks.R - R_Scripts_MSCData/
RelativeSDvRelativeReli. , R, 191 linesR - R_Scripts_MSCData/
RelativeSDvRelativeReli_ , R, 112 linesREGRESS.R - R_Scripts_MSCData/
Rest_SignalProperties.R , R, 213 lines - R_Scripts_MSCData/
RestvTask_PEs.R , R, 95 lines - R_Scripts_MSCData/
SuppTable1.R , R, 37 lines - R_Scripts_MSCData/
TaskEffectsvsSD.R , R, 122 lines - R_Scripts_MSCData/
Task_FullSignalPropertie , R, 161 liness.R - R_Scripts_MSCData/
Task_PEs.R , R, 126 lines - R_Scripts_MSCData/
Task_SignalProperties.R , R, 108 lines - fMRI_preprocessing/
01structural_preprocessi , Python, 745 linesng.py - fMRI_preprocessing/
02findrefvolume.py , Python, 288 lines - fMRI_preprocessing/
03basicfuncpreprocessing , Python, 1,180 lines.py - fMRI_preprocessing/
04advfuncpreprocessing.p , Python, 1,815 linesy - fMRI_preprocessing/
05makesstandregtosst.py , Python, 944 lines - fMRI_preprocessing/
06fittoparcellation.py , Python, 954 lines - fMRI_preprocessing/
07fingerprinting.py , Python, 606 lines - fMRI_preprocessing/
08corr_diff_preprocessin , Python, 330 linesg.py - fMRI_preprocessing/
09ISC.py , Python, 863 lines - fMRI_typicality/
SpatialROIAnalyses.py , Python, 222 lines - fMRI_typicality/
SpatialROI_lme.R , R, 27 lines - fMRI_typicality/
TemporalROIAnalyses.py , Python, 310 lines - fMRI_typicality/
study_funcs.py , Python, 396 lines - individualization/
Individualization.py , Python, 2,414 lines - README.md, Text, 2 lines
The paper's code and data availability statement is in the Data section.
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;
- 159 scripts, each with its path and the digest of its content;
- 9 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 and Code Availability
Python scripts and specific details of the videos watched are available at: 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 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, pages, dates, 9 authors, 6 keywords, 3 funders, 57 references.
Cite
This paper
Graff, K., Rai, S., Yin, S., Godfrey, K. J., Merrikh, D., Tansey, R., Vanderwal, T., Protzner, A. B., & Bray, S. (2026). Towards precision EEG connectomics: Evaluating the benefits of dense sampling. Imaging neuroscience (Cambridge, Mass.), 4, IMAG.a.1245. https://
BibTeX
@article{graff2026toward
author = {Graff, Kirk and Rai, Shefali and Yin, Shelly and Godfrey, Kate J. and Merrikh, Daria and Tansey, Ryann and Vanderwal, Tamara and Protzner, Andrea B. and Bray, Signe},
title = {{Towards precision EEG connectomics: Evaluating the benefits of dense sampling}},
journal = {Imaging neuroscience (Cambridge, Mass.)},
year = {2026},
month = jun,
volume = {4},
pages = {IMAG.a.1245},
publisher = {MIT Press},
issn = {2837-6056},
doi = {10.1162/
url = {https://
pmid = {42253605},
pmcid = {PMC13237998}
}
RIS
TY - JOUR
AU - Graff, Kirk
AU - Rai, Shefali
AU - Yin, Shelly
AU - Godfrey, Kate J.
AU - Merrikh, Daria
AU - Tansey, Ryann
AU - Vanderwal, Tamara
AU - Protzner, Andrea B.
AU - Bray, Signe
TI - Towards precision EEG connectomics: Evaluating the benefits of dense sampling
T2 - Imaging neuroscience (Cambridge, Mass.)
J2 - Imaging Neurosci (Camb)
PY - 2026
DA - 2026/
VL - 4
SP - IMAG.a.1245
SN - 2837-6056
PB - MIT Press
DO - 10.1162/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1162/
"type": "article-journal",
"title": "Towards precision EEG connectomics: Evaluating the benefits of dense sampling",
"container-title": "Imaging neuroscience (Cambridge, Mass.)",
"author": [
{
"family": "Graff",
"given": "Kirk"
},
{
"family": "Rai",
"given": "Shefali"
},
{
"family": "Yin",
"given": "Shelly"
},
{
"family": "Godfrey",
"given": "Kate J."
},
{
"family": "Merrikh",
"given": "Daria"
},
{
"family": "Tansey",
"given": "Ryann"
},
{
"family": "Vanderwal",
"given": "Tamara"
},
{
"family": "Protzner",
"given": "Andrea B."
},
{
"family": "Bray",
"given": "Signe"
}
],
"container-title-short":
"volume": "4",
"page": "IMAG.a.1245",
"DOI": "10.1162/
"PMID": "42253605",
"PMCID": "PMC13237998",
"ISSN": "2837-6056",
"publisher": "MIT Press",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
4
]
]
}
}
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.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, autoreject, AFNI, 19 other tools, 2 references
- [2] 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, autoreject, AFNI, 16 other tools, EEG, 1 reference
- [3] 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, autoreject, AFNI, 16 other tools
- [4] doi:10.1038/s41467-026-71151-2 [code]
- Common and distinct neural correlates of social interaction processing and theory of mind in narratives.Journal: Nature communicationsIn common: cifti-matlab, Nipype, AFNI, 14 other tools, 1 reference
- [5] doi:10.1038/s41398-026-04025-2 [code]
- Brain energetic landscapes shape state dysregulation in major depressive disorder: a morphological network controllability perspective.Journal: Translational psychiatryIn common: Nipype, AFNI, GIfTI library for MATLAB, 15 other tools
- [6] doi:10.1038/s41467-026-73668-y [code]
- Convergent and divergent brain-cognition development in early adolescence.Journal: Nature communicationsIn common: AFNI, GIfTI library for MATLAB, ANTs, 14 other tools, 2 references
- [7] doi:10.1016/j.nicl.2026.104012 [code]
- Structural-functional multilayer brain network properties and outcome of combined repetitive transcranial magnetic stimulation and psychotherapy for obsessive-compulsive disorder.Journal: NeuroImage. ClinicalIn common: Pingouin, psych, rstatix, 15 other tools, 1 reference
- [8] doi:10.1038/s41467-026-74565-0 [code]
- The functional neurobiology of dispositions towards negative emotions.Journal: Nature communicationsIn common: cifti-matlab, AFNI, GIfTI library for MATLAB, 13 other tools
- [9] doi:10.1002/hbm.70605 [code]
- BrainEnrich: Revealing Biological Insights for Imaging-Derived Phenotypes Through Transcriptomic Enrichment.Journal: Human brain mappingIn common: cifti-matlab, GIfTI library for MATLAB, FreeSurfer, 14 other tools, 1 reference
- [10] doi:10.1162/imag.a.105 [code]
- Right posterior theta reflects human parahippocampal phase resetting by salient cues during goal-directed navigationJournal: n/aIn common: Pingouin, psych, MNE-Python, 14 other tools, EEG
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, 159 scripts, and 9 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:0b3a50732aafd9ec…
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
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
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.
