High-resolution Bayesian Virtual Epileptic Patient using neural field models.
The 7 matches
- [1] § METHODS › Feature Extraction ↔ lib/preprocess/envelope.py, lines 37–53 · score 0.76 · sliding window, low pass filter, high pass filtering, log power, smoothing, preprocessed
- [2] § METHODS › Feature Extraction ↔ feature_extract.ipynb, lines 306–328 · score 0.74 · sliding window, low pass filter, log power, smoothing, SEEG
- [3] § METHODS › Patient Data ↔ retro_results.py, lines 206–289 · score 0.61 · Engel score, Patient IDs, III, IV, VEP
- [4] § METHODS › Patient Data ↔ precision_recall.py, lines 48–85 · score 0.60 · Engel score, Patient IDs, III, IV
- [5] § METHODS › Pseudospectral Method ↔ TVB_forward_sim.ipynb, lines 16–97 · score 0.58 · state variables, tracts, speeds, chosen, cortical, coupling
- [6] § METHODS › Patient Data › Forward model. ↔ lib/preprocess/base.py, lines 9–28 · score 0.51 · bipolar montage, contacts, preprocessing, matrix
- [7] § METHODS › Patient Data › Forward model. ↔ TVB_forward_sim.ipynb, lines 16–97 · score 0.51 · gain matrix, chosen, subcortical, sensor, variable, epileptor
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
Jupyter notebook · 249 lines · 8.7 KB · Apache-2.0 · 2 matches
- # %%
- %matplotlib inline
- from tvb.simulator.lab import *
- import os.path
- import matplotlib.pyplot as plt
- import matplotlib.gridspec as gridspec
- from matplotlib import colors, cm
- import time
- import scipy.signal as sig
- import scipy.spatial.distance as dists
- import numpy as np
- import time
- from scipy.optimize import fsolve
- import os
- # %%
- def get_equilibrium(model, init):
- nvars = len(model.state_variables)
- cvars = len(model.cvar)
- def func(x):
- fx = model.dfun(x.reshape((nvars, 1, 1)),
- np.zeros((cvars, 1, 1)))
- return fx.flatten()
- x = fsolve(func, init)
- return x
- root_dir = os.getcwd()
- data_dir = os.path.join(root_dir, '/home/anirudh/Academia/projects/isp_benchmark/datasets/syn_data/id001_bt')
- results_dir = os.path.join(root_dir, 'datasets/syn_data/id001_bt_5ez')
- figs_dir = os.path.join(results_dir, 'figures')
- os.makedirs(figs_dir, exist_ok=True)
- # ! mkdir -p {figs_dir}
- # # ROIs chosen for generating synthetic data
- # chsnAreas = np.array([27,20,58,18,61])
- # ROIs chosen as Epileptogenic/propagation zones
- # ez = np.array([79, 14, 74], dtype=np.int32)
- # pz_x0 = np.array([22, 75, 11, 17], dtype=np.int32)
- # pz_kplng = [] #np.array([], dtype=np.int32)
- # pz = np.append(pz_kplng,pz_x0, dtype=np.int32)
- # pz = np.unique(np.array([75,22,53,104,163,20], dtype=np.int32))
- con = connectivity.Connectivity.from_file(os.path.join(data_dir, "connectivity.destrieux.zip"))
- num_regions = len(con.region_labels)
- con.speed = np.array([np.inf])
- # normalize
- con.weights = con.weights/np.max(con.weights)
- # # scaled down the coupling from all nodes to EZ to avoid inhibition due to strong coupling
- # wts_sf = 1e-4 # weights scaling factor
- # con.weights[ez,:] = wts_sf
- # # scale down the coupling from EZ to all nodes except PZ, so seizure is propogated only to PZ
- # con.weights[np.ix_(np.setdiff1d(np.r_[0:num_regions],pz),ez)] = wts_sf * con.weights[np.ix_(np.setdiff1d(np.r_[0:num_regions],pz),ez)]
- # # scale down the coupling from all nodes (except EZ) to PZ to avoid inhibtion due to strong coupling
- # con.weights[np.ix_(pz,np.setxor1d(np.r_[0:num_regions],ez))] = wts_sf * con.weights[np.ix_(pz,np.setxor1d(np.r_[0:num_regions],ez))]
- # # scale down the coupling from PZ to all nodes to avoid seizure propagation further
- # con.weights[np.ix_(np.setdiff1d(np.r_[0:num_regions],np.append(ez,pz)),pz)] = wts_sf * con.weights[np.ix_(np.setdiff1d(np.r_[0:num_regions],np.append(ez,pz)),pz)]
- # con.weights[np.ix_(pz_kplng,ez)] = 4.0
- # con.weights[np.ix_(pz_x0,ez)] = 2.0
- # con.weights[np.ix_(pz,ez)] = 2.0
- con.weights[np.diag_indices(con.weights.shape[0])] = 0
- con.cortical[:] = True # To avoid adding analytical gain matrix for subcortical sources
- # Create connectivity object for the chosen ROIs
- # conNew = connectivity.Connectivity()
- # conNew.weights = con.weights[:,chsnAreas][chsnAreas,:]
- # conNew.tract_lengths = con.tract_lengths[:,chsnAreas][chsnAreas,:]
- # conNew.centres = con.centres[chsnAreas]
- # conNew.region_labels = np.array([con.region_labels[i] for i in chsnAreas])
- # conNew.speed = con.speed
- # conNew.cortical = np.ones(len(chsnAreas),dtype=bool)
- # num_regions = len(chsnAreas)
- gain_mat = np.loadtxt(os.path.join(data_dir,'gain_inv-square.destrieux.txt'))
- plt.figure(figsize=[15,4])
- plt.subplot(121)
- norm = colors.LogNorm(1e-7, con.weights.max())
- im = plt.imshow(con.weights,norm=norm,cmap=cm.jet)
- plt.colorbar(im, fraction=0.046, pad=0.04)
- plt.gca().set_title('Strcutural Connectivity', fontsize=13.0)
- plt.subplot(122)
- norm = colors.LogNorm(gain_mat.min(), gain_mat.max())
- im = plt.imshow(gain_mat,norm=norm,cmap=cm.jet)
- plt.colorbar(im, fraction=0.046, pad=0.04)
- plt.gca().set_title('Gain Matrix', fontsize=13.0)
- plt.xlabel('Node')
- plt.ylabel('Sensor')
- plt.tight_layout()
- plt.savefig(os.path.join(figs_dir, 'network.png'))
- # %% [markdown]
- # ### Choose EZ and PZ
- # %%
- n_ez = 5
- nprop_roi_per_ez = 2
- ez = np.sort(np.argsort(gain_mat.sum(axis=0))[-n_ez:])
- print(f"ROI in EZ: {ez}")
- ez_con = con.weights[ez]
- pz = np.unique(ez_con.argsort(axis=1)[:, -nprop_roi_per_ez:])
- pz = np.setdiff1d(pz, ez)
- print(f"ROI in PZ: {pz}")
- # %%
- epileptors = models.Epileptor(variables_of_interest=['x1', 'y1', 'z', 'x2', 'y2', 'g', 'x2 - x1'])
- epileptors.r = np.array([1.0/2857])
- epileptors.Ks = np.ones(num_regions)*(-1)
- epileptors.tt = np.array([1.0])
- simLen = 2500 # simulation length in milliseconds
- noiseON = True
- epileptors.x0 = np.ones(num_regions)*-3.0
- epileptors.x0[ez] = -1.5
- epileptors.x0[pz] = -2.7
- con.weights[np.ix_(pz,ez)] = 1.3
- coupl = coupling.Difference(a=np.array([1.0]))
- nsf = 1.0 # noise scaling factor
- # hiss = noise.Additive(nsig = nsf*np.array([0.01, 0.01, 0., 0.00015, 0.00015, 0.]))
- hiss = noise.Additive(nsig = nsf*np.array([0.0, 0.0, 0., 0.0, 0.0, 0.]))
- if(noiseON):
- heunint = integrators.HeunStochastic(dt=0.04, noise=hiss)
- else:
- heunint = integrators.HeunDeterministic(dt=0.04)
- #mon_raw = monitors.Raw()
- mon_tavg = monitors.TemporalAverage(period=1.0)
- # mon_SEEG = monitors.iEEG.from_file(sensors_fname=os.path.join(rootDir, "data/CJ/seeg.txt"),
- # projection_fname=os.path.join(rootDir, "data/CJ/gain_inv-square.txt"),
- # period=1.0,
- # variables_of_interest=[6])
- # num_contacts = mon_SEEG.sensors.labels.size
- # Find a fixed point to initialize the epileptor in a stable state
- epileptor_equil = models.Epileptor()
- epileptor_equil.x0 = np.array([-3.0])
- #init_cond = np.array([0, -5, 3, 0, 0, 0])
- init_cond = get_equilibrium(epileptor_equil, np.array([0.0, 0.0, 3.0, -1.0, 1.0, 0.0]))
- init_cond_reshaped = np.repeat(init_cond, num_regions).reshape((1, len(init_cond), num_regions, 1))
- sim = simulator.Simulator(model=epileptors,
- initial_conditions=init_cond_reshaped,
- connectivity=con,
- coupling=coupl,
- conduction_speed=np.inf,
- integrator=heunint,
- monitors=[mon_tavg])
- sim.configure()
- [(ttavg, tavg)] = sim.run(simulation_length=simLen)
- srcSig = tavg[:,0,:,0] + tavg[:,3,:,0]
- # # Normalize the time series for better visualization
- # tavgn = (srcSig - np.min(srcSig,1)[:,np.newaxis])/(np.max(srcSig, 1) - np.min(srcSig, 1))[:,np.newaxis]
- # Compute the seeg from the source signals
- seeg = np.dot(gain_mat,srcSig.T)
- # Save data for data fitting
- savePathTS=os.path.join(results_dir,"syn_tvb_ez=%s_pz=%s.npz"%('-'.join([str(el) for el in ez]), '-'.join([str(el) for el in pz])))
- np.savez(savePathTS, time_steps=ttavg, src_sig=tavg, seeg=seeg, x0=epileptors.x0, Ks=epileptors.Ks, ez=ez, pz=pz)
- np.savez(os.path.join(results_dir, 'network.npz'),SC=con.weights,gain_mat=gain_mat)
- # %% [markdown]
- # #### Plot source activity
- # %%
- %matplotlib inline
- import matplotlib.pyplot as plt
- # Plot source time series
- indf = 0
- indt = -1
- regf = 0
- regt = num_regions
- plt.figure(figsize=(20,20))
- plt.plot(ttavg, srcSig/4 + np.r_[regf:regt], 'r')
- plt.yticks(np.r_[regf:regt], np.r_[regf:regt]+1,fontsize=7.0)
- plt.title("Source signal (x)",fontsize=15)
- plt.xlabel('Time',fontsize=12)
- plt.ylabel('Region#',fontsize=12)
- plt.savefig(os.path.join(figs_dir, "src_signals_all.png"))
- plt.figure(figsize=(20,5))
- for roi in ez:
- plt.plot(ttavg, srcSig[:,roi],label=str(roi+1)+' (EZ)',alpha=0.7, color='red')
- for roi in pz:
- plt.plot(ttavg, srcSig[:,roi],label=str(roi+1)+' (PZ)',alpha=0.7, color='orange')
- plt.title("Source signal (x)",fontsize=15)
- plt.xlabel('Time',fontsize=12)
- plt.legend()
- plt.tight_layout()
- plt.savefig(os.path.join(figs_dir, "src_signals_seizing_roi.png"))
- # %%
- plt.figure(figsize=(25,5))
- plt.plot(ttavg, srcSig[:,pz],label=str(roi+1)+' (PZ)',alpha=0.7)
- # %% [markdown]
- # #### Plot SEEG
- # %%
- seegn = (seeg - np.min(seeg,1)[:,np.newaxis]) / (np.max(seeg,1) - np.min(seeg,1))[:,np.newaxis]
- # seegn = seegn - np.mean(seegn)
- # b, a = sig.butter(2, 0.1, btype='highpass', output='ba')
- # seegf = sig.filtfilt(B, A, seegn)
- # seegf = np.zeros(seegn.shape)
- # for i in range(num_contacts):
- # seegf[:, 0, i, 0] = sig.filtfilt(b, a, seeg[:, 0, i, 0])
- # Plot the seeg time series
- nChannels = np.shape(gain_mat)[0]
- with open(os.path.join(data_dir,'seeg.xyz'),'r') as fd:
- snsrLabels = [line.split(' ')[0] for line in fd]
- plt.figure(figsize=(7,20))
- plt.plot(ttavg, seegn.T + np.r_[0:nChannels],'k')
- plt.xlabel('Time',fontsize=13.0)
- plt.yticks(np.r_[0:nChannels], snsrLabels, fontsize=7.0)
- plt.title("SEEG")
- plt.tight_layout()
- plt.savefig(os.path.join(figs_dir,"seeg_split.png"))
- plt.figure(figsize=(20,5));
- plt.plot(ttavg, seegn.T, 'k', alpha=0.1);
- plt.xlabel('Time',fontsize=13.0)
- plt.title('SEEG')
- plt.savefig(os.path.join(figs_dir,"seeg_overlap.png"))
- # %%
- import lib.preprocess.envelope
- # %%
- slp = lib.preprocess.envelope.compute_slp_syn(seeg.T, samp_rate=256, win_len=50, hpf=10.0, lpf=2.0, logtransform=True)
TVB_forward_sim.ipynb at commit 94c3950, under Apache-2.0 · at the source
Overview
- Aix Marseille Univ, INSERM, INS, Inst Neurosci Syst, Marseille, France
- Epileptology Department and Clinical Neurophysiology Department, Assistance publique des Hopitaux de Marseille, Marseille, France
Abstract
Epilepsy remains a significant medical challenge, particularly in drug-resistant cases where surgical intervention may be the only viable treatment option. Identifying the epileptogenic zone, the brain region responsible for seizure initiation, is a critical step in surgical planning. Combining dynamical system models, machine learning, and the neuroimaging data of epileptic patients in the so-called Bayesian Virtual Epileptic Patient (VEP) framework has previously been shown to be a promising approach for identifying the epileptogenic zone. However, previous studies employed coupled neural mass models to describe the whole-brain seizure dynamics and, hence, could only provide a highly coarse spatial estimate of the epileptogenic zone. In this study, we propose an extension of the Bayesian VEP to a neural field model, which can improve the spatial resolution by several orders. Performing model inversion using neural field models is a challenging task as the parameter space is very high dimensional, and it becomes computationally expensive to compute gradients. We demonstrate that by using pseudospectral methods and spherical harmonic transforms, it is feasible to perform model inversion on a neural field extension. We found that the high-resolution Bayesian VEP not only improves the spatial resolution but also significantly reduces the number of false positives.
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 7 matches between paragraphs and lines of code.
ins-amu/infr_szr_prpgtn
94c3950d63903e82bbda771937eb3fe52448315b, 25 July 2023Availability: 1 check, the latest on 29 September 2026: the link answers
- 29 September 2026: the link answers
76 files
- TVB_forward_sim.ipynb, Jupyter, 249 lines, 2 matches
- choose_ez_pz.py, Python, 39 lines
- dyn_model.py, Python, 84 lines
- epileptor_phase_space.ip
ynb , Jupyter, 79 lines - eplileptor-2D-6D-sim-com
parison.ipynb , Jupyter, 161 lines - eval_posterior.ipynb, Jupyter, 304 lines
- eval_posterior_prob.stan
, Stan, 99 lines - feature_extract.ipynb, Jupyter, 420 lines, 1 match
- figures.py, Python, 31 lines
- find_bst_szr.py, Python, 38 lines
- lib/
__init__.py , Python, 27 lines - lib/
io/ , Python, 1 line__init__.py - lib/
io/ , Python, 31 linesbase.py - lib/
io/ , Python, 290 linesdmeeg.py - lib/
io/ , Python, 113 linesimplantation.py - lib/
io/ , Python, 53 linesnetwork.py - lib/
io/ , Python, 157 linesseeg.py - lib/
io/ , Python, 437 linesstan.py - lib/
io/ , Python, 13 linestvb.py - lib/
plots/ , Python, 1 line__init__.py - lib/
plots/ , Python, 39 linesnetwork.py - lib/
plots/ , Python, 146 linesseeg.py - lib/
plots/ , Python, 306 linesstan.py - lib/
plots/ , Python, 16 linestvb.py - lib/
postprocess/ , Python, 1 line__init__.py - lib/
preprocess/ , Python, 1 line__init__.py - lib/
preprocess/ , Python, 58 lines, 1 matchbase.py - lib/
preprocess/ , Python, 132 lines, 1 matchenvelope.py - lib/
preprocess/ , Python, 53 linesfit.py - lib/
preprocess/ , Python, 103 linesspecgram.py - lib/
pymc3/ , Python, 1 line__init__.py - lib/
pymc3/ , Python, 22 linestransforms.py - lib/
utils/ , Python, 143 linesstan.py - map_init_sweep.sh, Shell, 13 lines
- nez_init_sweep.sh, Shell, 16 lines
- nez_snr_sweep.sh, Shell, 16 lines
- optim_amp_offset.ipynb, Jupyter, 52 lines
- precision_recall.py, Python, 208 lines, 1 match
- prep_data_syn.py, Python, 367 lines
- retro_prep_data.py, Python, 182 lines
- retro_preprocess.ipynb, Jupyter, 58 lines
- retro_results.py, Python, 306 lines, 1 match
- run_advi.sh, Shell, 17 lines
- run_hmc.sh, Shell, 29 lines
- run_optim.sh, Shell, 19 lines
- run_retro.sh, Shell, 25 lines
- run_single_hmc.sh, Shell, 27 lines
- run_syn.sh, Shell, 18 lines
- sim_2d_epileptor.ipynb, Jupyter, 240 lines
- snr_sweep.sh, Shell, 25 lines
- snr_sweep_tngcluster.sh, Shell, 13 lines
- test.ipynb, Jupyter, 1,077 lines
- vep-forwardsim-2Depilept
or-ode-nointerp.stan , Stan, 79 lines - vep-forwardsim-2Depilept
or.stan , Stan, 82 lines - vep-optim-amp-offset.sta
n , Stan, 19 lines - vep-snsrfit-cntr-advi-re
tro.ipynb , Jupyter, 421 lines - vep-snsrfit-cntr-advi.ip
ynb , Jupyter, 402 lines - vep-snsrfit-cntr.ipynb, Jupyter, 199 lines
- vep-snsrfit-cntr.stan, Stan, 116 lines
- vep-snsrfit-lin.ipynb, Jupyter, 88 lines
- vep-snsrfit-lin.stan, Stan, 32 lines
- vep-snsrfit-ode-advi.ipy
nb , Jupyter, 174 lines - vep-snsrfit-ode-hmc.ipyn
b , Jupyter, 199 lines - vep-snsrfit-ode-hpinfer-
hmc.ipynb , Jupyter, 285 lines - vep-snsrfit-ode-hpinfer-
nointerp.stan , Stan, 117 lines - vep-snsrfit-ode-hpinfer.
stan , Stan, 145 lines - vep-snsrfit-ode-nointerp
-noezpriors.stan , Stan, 104 lines - vep-snsrfit-ode-nointerp
.stan , Stan, 104 lines - vep-snsrfit-ode-optim.ip
ynb , Jupyter, 241 lines - vep-snsrfit-ode-pymc3.ip
ynb , Jupyter, 177 lines - vep-snsrfit-ode-rescaled
-nointerp.stan , Stan, 114 lines - vep-snsrfit-ode-rescaled
.stan , Stan, 137 lines - vep-snsrfit-ode-retro-hm
c.ipynb , Jupyter, 123 lines - vep-snsrfit-ode-retro-op
tim.ipynb , Jupyter, 174 lines - repository limit reached (2,000 files or 30 MB): the rest is at the source (12 files)
- LICENSE, License, 13 lines
- README.md, Text, 44 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;
- 74 scripts, each with its path and the digest of its content;
- 7 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 patient datasets cannot be made publicly available due to the data protection concerns. The main code supporting this study is publicly 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, 29 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 7 authors, 5 keywords, 5 funders, 82 references.
Cite
This paper
Vattikonda, A. N., Hashemi, M., Woodman, M. M., Lemarechal, J.-D., Daini, D., Bartolomei, F., & Jirsa, V. (2026). High-resolution Bayesian Virtual Epileptic Patient using neural field models. Network neuroscience (Cambridge, Mass.), 10(2), 374-399. https://
BibTeX
@article{vattikonda2026h
author = {Vattikonda, Anirudh Nihalani and Hashemi, Meysam and Woodman, Marmaduke M and Lemarechal, Jean-Didier and Daini, Daniele and Bartolomei, Fabrice and Jirsa, Viktor},
title = {{High-resolution Bayesian Virtual Epileptic Patient using neural field models}},
journal = {Network neuroscience (Cambridge, Mass.)},
year = {2026},
month = apr,
volume = {10},
number = {2},
pages = {374--399},
publisher = {MIT Press},
issn = {2472-1751},
doi = {10.1162/
url = {https://
pmid = {42039098},
pmcid = {PMC13108505}
}
RIS
TY - JOUR
AU - Vattikonda, Anirudh Nihalani
AU - Hashemi, Meysam
AU - Woodman, Marmaduke M
AU - Lemarechal, Jean-Didier
AU - Daini, Daniele
AU - Bartolomei, Fabrice
AU - Jirsa, Viktor
TI - High-resolution Bayesian Virtual Epileptic Patient using neural field models
T2 - Network neuroscience (Cambridge, Mass.)
J2 - Netw Neurosci
PY - 2026
DA - 2026/
VL - 10
IS - 2
SP - 374
EP - 399
SN - 2472-1751
PB - MIT Press
DO - 10.1162/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1162/
"type": "article-journal",
"title": "High-resolution Bayesian Virtual Epileptic Patient using neural field models",
"container-title": "Network neuroscience (Cambridge, Mass.)",
"author": [
{
"family": "Vattikonda",
"given": "Anirudh Nihalani"
},
{
"family": "Hashemi",
"given": "Meysam"
},
{
"family": "Woodman",
"given": "Marmaduke M"
},
{
"family": "Lemarechal",
"given": "Jean-Didier"
},
{
"family": "Daini",
"given": "Daniele"
},
{
"family": "Bartolomei",
"given": "Fabrice"
},
{
"family": "Jirsa",
"given": "Viktor"
}
],
"container-title-short":
"volume": "10",
"issue": "2",
"page": "374-399",
"DOI": "10.1162/
"PMID": "42039098",
"PMCID": "PMC13108505",
"ISSN": "2472-1751",
"publisher": "MIT Press",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
4,
22
]
]
}
}
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.1371/journal.pcbi.1014673 [code]
- Modeling the influences of non-local connectomic projections on geometrically constrained cortical dynamics.Journal: PLoS computational biologyIn common: computational, 10 references
- [2] doi:10.1162/imag.a.1147 [code]
- The Virtual Brain links transcranial magnetic stimulation evoked potentials and inhibitory neurotransmitter changes in major depressive disorder.Journal: Imaging neuroscience (Cambridge, Mass.)In common: The Virtual Brain, MNE-Python, SciPy, 2 other tools, computational, 2 references
- [3] doi:10.1038/s41592-026-03159-x [code]
- Siibra: a software tool suite for realizing a Multilevel Human Brain Atlas from complex data resources.Journal: Nature methodsIn common: NiBabel, SciPy, Matplotlib, 1 other tool, 1 reference, author Viktor Jirsa
- [4] doi:10.1038/s41593-026-02359-0 [code]
- The cross-site reproducibility of MRI morphometric phenotypes in psychiatric disorders.Journal: Nature neuroscienceIn common: NiBabel, SciPy, Matplotlib, 1 other tool, 5 references
- [5] doi:10.1002/epi4.70311 [code]
- Bridging computational and clinical strategies for presurgical identification of epileptogenic networks.Journal: Epilepsia openIn common: MNE-Python, SciPy, Matplotlib, 1 other tool, epilepsy, 3 references
- [6] doi:10.1038/s41467-026-71918-7 [code]
- Developmental disinhibition gates language lateralization in childhood.Journal: Nature communicationsIn common: MNE-Python, NiBabel, SciPy, 2 other tools, 3 references
- [7] doi:10.1162/imag.a.1249 [code]
- Global search metaheuristics for neural mass model calibration.Journal: Imaging neuroscience (Cambridge, Mass.)In common: computational, 5 references
- [8] doi:10.1371/journal.pcbi.1013290 [code]
- Developmental and aging changes in brain network switching dynamics revealed by EEG phase synchronization.Journal: PLoS computational biologyIn common: 2 references, author Viktor Jirsa
- [9] 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: PyMC, MNE-Python, NiBabel, 3 other tools, computational
- [10] doi:10.1038/s41467-026-75704-3 [code]
- A minimal model of working memory in neural systems and neuromorphic circuits.Journal: Nature communicationsIn common: SciPy, Matplotlib, NumPy, 4 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, 74 scripts, and 7 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:b05349b1462335aa…
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.
