OSCR

Distinct beta burst motifs exhibit opposing error relationships during motor adaptation

Code ↔ Paper

10 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 10 matches · 2 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
  1. [1] § Methods › Beta power and burst extraction ↔ python/burst_detection.py, lines 179–261 · score 0.95 · DC offset, Hilbert transform, instantaneous phase, detected peak, phase minimum, burst detection
  2. [2] § Methods › Beta power and burst extraction ↔ matlab/extract_bursts_single_trial.m, lines 118–188 · score 0.92 · DC offset, Hilbert transform, instantaneous phase, phase minimum, peak amplitude, deflection
  3. [3] § Methods › Beta power and burst extraction ↔ python/burst_detection.py, lines 264–330 · score 0.86 · aperiodic spectrum, event related, burst detection, detected bursts, burst waveforms, ERF
  4. [4] § Methods › Beta power and burst extraction ↔ matlab/extract_bursts.m, the whole file · a weak match · score 0.83 · aperiodic spectrum, event related, detected bursts, burst waveforms, ERF, regressed
  5. [5] § Methods › Beta power and burst extraction ↔ python/burst_detection.py, lines 131–177 · score 0.73 · noise floor, peak amplitude, peak frequency, iteration, Gaussian, subtracted
  6. [6] § Methods › Beta power and burst extraction ↔ matlab/extract_bursts_single_trial.m, lines 43–116 · score 0.73 · noise floor, peak amplitude, peak frequency, Gaussian, subtracted, band
  7. [7] § Methods › Statistics › Behavior ↔ 02_behav_stats.R, the whole file · a weak match · score 0.63 · emmeans, lme4, adaptation blocks, Pairwise, variable, zero
  8. [8] § Methods › Statistics › Burst features, burst count and PC-quartile time series ↔ xx_bursts_lmms.ipynb, lines 89–147 · score 0.54 · random intercepts, Separate models, variable, fit, error, implicit
  9. [9] § Results › Waveform-specific burst dynamics predict trial-by-trial error ↔ xx_bursts_lmms.ipynb, lines 625–767 · score 0.53 · Linear mixed, sliding window, beta burst, variable, fitted, models
  10. [10] § Methods › MEG ↔ xx_beta_power_lmms.ipynb, lines 179–231 · score 0.50 · MEG signal, removal, tracking, match, filtered

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 · 330 lines · 13 KB · no license · 3 matches

  1. import copy
  2. import math
  3. import numpy as np
  4. from mne.filter import filter_data
  5. from scipy.signal import hilbert, argrelextrema
  6. from scipy.stats import linregress
  7. def gaus2d(x=0, y=0, mx=0, my=0, sx=1, sy=1):
  8. """
  9. Two-dimensional gaussian function
  10. :param x: x grid
  11. :param y: y grid
  12. :param mx: mean in x dimension
  13. :param my: mean in y dimension
  14. :param sx: standard deviation in x dimension
  15. :param sy: standard deviation in y dimension
  16. :return: Two-dimensional Gaussian distribution
  17. """
  18. return np.exp(-((x - mx) ** 2. / (2. * sx ** 2.) + (y - my) ** 2. / (2. * sy ** 2.)))
  19. def overlap(a, b):
  20. """
  21. Find if two ranges overlap
  22. :param a: first range [low, high]
  23. :param b: second range [low, high]
  24. :return: True if ranges overlap, false otherwise
  25. """
  26. return a[0] <= b[0] <= a[1] or b[0] <= a[0] <= b[1]
  27. def fwhm_burst_norm(tf, peak):
  28. """
  29. Find two-dimensional FWHM
  30. :param tf: TF spectrum
  31. :param peak: peak of activity [freq, time]
  32. :return: right, left, up, down limits for FWM
  33. """
  34. right_loc = np.nan
  35. # Find right limit (values to right of peak less than half value at peak)
  36. cand = np.where(tf[peak[0], peak[1]:] <= tf[peak] / 2)[0]
  37. # If any found, take the first one
  38. if len(cand):
  39. right_loc = cand[0]
  40. up_loc = np.nan
  41. # Find up limit (values above peak less than half value at peak)
  42. cand = np.where(tf[peak[0]:, peak[1]] <= tf[peak] / 2)[0]
  43. # If any found, take the first one
  44. if len(cand):
  45. up_loc = cand[0]
  46. left_loc = np.nan
  47. # Find left limit (values below peak less than half value at peak)
  48. cand = np.where(tf[peak[0], :peak[1]] <= tf[peak] / 2)[0]
  49. # If any found, take the last one
  50. if len(cand):
  51. left_loc = peak[1] - cand[-1]
  52. down_loc = np.nan
  53. # Find down limit (values below peak less than half value at peak)
  54. cand = np.where(tf[:peak[0], peak[1]] <= tf[peak] / 2)[0]
  55. # If any found, take the last one
  56. if len(cand):
  57. down_loc = peak[0] - cand[-1]
  58. # Set arms equal if only one found
  59. if down_loc is np.nan:
  60. down_loc = up_loc
  61. if up_loc is np.nan:
  62. up_loc = down_loc
  63. if left_loc is np.nan:
  64. left_loc = right_loc
  65. if right_loc is np.nan:
  66. right_loc = left_loc
  67. # Use the minimum arm in each direction (forces Gaussian to be symmetric in each dimension)
  68. horiz = np.nanmin([left_loc, right_loc])
  69. vert = np.nanmin([up_loc, down_loc])
  70. right_loc = horiz
  71. left_loc = horiz
  72. up_loc = vert
  73. down_loc = vert
  74. return right_loc, left_loc, up_loc, down_loc
  75. def extract_bursts_single_trial(raw_trial, tf, times, search_freqs, band_lims, aperiodic_spectrum, sfreq, w_size=.26):
  76. """
  77. Extract bursts from epoched data
  78. :param raw_trial: raw data for trial (time)
  79. :param tf: time-frequency decomposition for trial (freq x time)
  80. :param times: time steps
  81. :param search_freqs: frequency limits to search within for bursts (should be wider than band_lims)
  82. :param band_lims: keep bursts whose peak frequency falls within these limits
  83. :param aperiodic_spectrum: aperiodic spectrum
  84. :param sfreq: sampling rate
  85. :param w_size: window size to extract burst waveforms
  86. :return: disctionary with waveform, peak frequency, relative peak amplitude, absolute peak amplitude, peak
  87. time, peak adjustment, FWHM in frequency, FWHM in time, and polarity for each detected burst
  88. """
  89. bursts = {
  90. 'waveform': [],
  91. 'peak_freq': [],
  92. 'peak_amp_iter': [],
  93. 'peak_amp_base': [],
  94. 'peak_time': [],
  95. 'peak_adjustment': [],
  96. 'fwhm_freq': [],
  97. 'fwhm_time': [],
  98. 'polarity': [],
  99. 'waveform_times': []
  100. }
  101. # Grid for computing 2D Gaussians
  102. x_idx, y_idx = np.meshgrid(range(len(times)), range(len(search_freqs)))
  103. # Window size in points
  104. wlen = int(w_size * sfreq)
  105. half_wlen = int(wlen * .5)
  106. # Subtract 1/f
  107. trial_tf = tf - aperiodic_spectrum
  108. trial_tf[trial_tf < 0] = 0
  109. # Skip trial if no peaks above aperiodic
  110. if (trial_tf == 0).all():
  111. print("All values equal 0 after aperiodic subtraction")
  112. return bursts
  113. # TF for iterating
  114. trial_tf_iter = copy.copy(trial_tf)
  115. while True:
  116. # Compute noise floor
  117. thresh = 2 * np.std(trial_tf_iter)
  118. # Find peak
  119. [peak_freq_idx, peak_time_idx] = np.unravel_index(np.argmax(trial_tf_iter), trial_tf.shape)
  120. peak_freq = search_freqs[peak_freq_idx]
  121. peak_amp_iter = trial_tf_iter[peak_freq_idx, peak_time_idx]
  122. peak_amp_base = trial_tf[peak_freq_idx, peak_time_idx]
  123. # Stop if no peak above threshold
  124. if peak_amp_iter < thresh:
  125. break
  126. # Fit 2D Gaussian and subtract from TF
  127. rloc, lloc, uloc, dloc = fwhm_burst_norm(trial_tf_iter, (peak_freq_idx, peak_time_idx))
  128. # Detect degenerate Gaussian (limits not found)
  129. vert_isnan = any(np.isnan([uloc, dloc]))
  130. horiz_isnan = any(np.isnan([rloc, lloc]))
  131. if vert_isnan:
  132. v_sh = int((search_freqs.shape[0] - peak_freq_idx) / 2)
  133. if v_sh <= 0:
  134. v_sh = 1
  135. uloc = v_sh
  136. dloc = v_sh
  137. elif horiz_isnan:
  138. h_sh = int((times.shape[0] - peak_time_idx) / 2)
  139. if h_sh <= 0:
  140. h_sh = 1
  141. rloc = h_sh
  142. lloc = h_sh
  143. hv_isnan = any([vert_isnan, horiz_isnan])
  144. # Compute FWHM and convert to SD
  145. fwhm_f_idx = uloc + dloc
  146. fwhm_f = (search_freqs[1] - search_freqs[0]) * fwhm_f_idx
  147. fwhm_t_idx = lloc + rloc
  148. fwhm_t = (times[1] - times[0]) * fwhm_t_idx
  149. sigma_t = fwhm_t_idx / 2.355
  150. sigma_f = fwhm_f_idx / 2.355
  151. # Fitted Gaussian
  152. z = peak_amp_iter * gaus2d(x_idx, y_idx, mx=peak_time_idx, my=peak_freq_idx, sx=sigma_t, sy=sigma_f)
  153. # Subtract fitted Gaussian for next iteration
  154. new_trial_tf_iter = trial_tf_iter - z
  155. # If detected peak is within band limits and not degenerate
  156. if all([peak_freq >= band_lims[0], peak_freq <= band_lims[1], not hv_isnan]):
  157. # Bandpass filter within frequency range of burst
  158. freq_range = [
  159. np.max([0, peak_freq_idx - dloc]),
  160. np.min([len(search_freqs) - 1, peak_freq_idx + uloc])
  161. ]
  162. filtered = filter_data(raw_trial.reshape(1, -1), sfreq, search_freqs[freq_range[0]], search_freqs[freq_range[1]],
  163. verbose=False)
  164. # Hilbert transform
  165. analytic_signal = hilbert(filtered)
  166. # Get phase
  167. instantaneous_phase = np.unwrap(np.angle(analytic_signal)) % math.pi
  168. # Find local phase minima with negative deflection closest to TF peak
  169. # If no minimum is found, the error is caught and no burst is added
  170. min_phase_pts = argrelextrema(instantaneous_phase.T, np.less)[0]
  171. new_peak_time_idx = peak_time_idx
  172. try:
  173. new_peak_time_idx = min_phase_pts[np.argmin(np.abs(peak_time_idx - min_phase_pts))]
  174. adjustment = (new_peak_time_idx - peak_time_idx) * 1 / sfreq
  175. except:
  176. adjustment = 1
  177. # Keep if adjustment less than 30ms
  178. if np.abs(adjustment) < .03:
  179. # If burst won't be cutoff
  180. if new_peak_time_idx >= half_wlen and new_peak_time_idx + half_wlen <= len(times):
  181. peak_time = times[new_peak_time_idx]
  182. overlapped = False
  183. # Check for overlap
  184. for b_idx in range(len(bursts['peak_time'])):
  185. o_t = bursts['peak_time'][b_idx]
  186. o_fwhm_t = bursts['fwhm_time'][b_idx]
  187. if overlap([peak_time - .5 * fwhm_t, peak_time + .5 * fwhm_t],
  188. [o_t - .5 * o_fwhm_t, o_t + .5 * o_fwhm_t]):
  189. overlapped = True
  190. break
  191. if not overlapped:
  192. # Get burst
  193. burst = raw_trial[new_peak_time_idx - half_wlen:new_peak_time_idx + half_wlen]
  194. # Remove DC offset
  195. burst = burst - np.mean(burst)
  196. bursts['waveform_times'] = times[new_peak_time_idx - half_wlen:new_peak_time_idx + half_wlen] - \
  197. times[new_peak_time_idx]
  198. # Flip if positive deflection
  199. peak_dists = np.abs(argrelextrema(filtered.T, np.greater)[0] - new_peak_time_idx)
  200. trough_dists = np.abs(argrelextrema(filtered.T, np.less)[0] - new_peak_time_idx)
  201. polarity = 0
  202. if len(trough_dists) == 0 or (
  203. len(peak_dists) > 0 and np.min(peak_dists) < np.min(trough_dists)):
  204. burst *= -1.0
  205. polarity = 1
  206. bursts['waveform'].append(burst)
  207. bursts['peak_freq'].append(peak_freq)
  208. bursts['peak_amp_iter'].append(peak_amp_iter)
  209. bursts['peak_amp_base'].append(peak_amp_base)
  210. bursts['peak_time'].append(peak_time)
  211. bursts['peak_adjustment'].append(adjustment)
  212. bursts['fwhm_freq'].append(fwhm_f)
  213. bursts['fwhm_time'].append(fwhm_t)
  214. bursts['polarity'].append(polarity)
  215. trial_tf_iter = new_trial_tf_iter
  216. bursts['waveform'] = np.array(bursts['waveform'])
  217. bursts['peak_freq'] = np.array(bursts['peak_freq'])
  218. bursts['peak_amp_iter'] = np.array(bursts['peak_amp_iter'])
  219. bursts['peak_amp_base'] = np.array(bursts['peak_amp_base'])
  220. bursts['peak_time'] = np.array(bursts['peak_time'])
  221. bursts['peak_adjustment'] = np.array(bursts['peak_adjustment'])
  222. bursts['fwhm_freq'] = np.array(bursts['fwhm_freq'])
  223. bursts['fwhm_time'] = np.array(bursts['fwhm_time'])
  224. bursts['polarity'] = np.array(bursts['polarity'])
  225. return bursts
  226. def extract_bursts(raw_trials, tf, times, search_freqs, band_lims, aperiodic_spectrum, sfreq, w_size=.26):
  227. """
  228. Extract bursts from epoched data
  229. :param raw_trials: raw data for each trial (trial x time)
  230. :param tf: time-frequency decomposition for each trial (trial x freq x time)
  231. :param times: time steps
  232. :param search_freqs: frequency limits to search within for bursts (should be wider than band_lims)
  233. :param band_lims: keep bursts whose peak frequency falls within these limits
  234. :param aperiodic_spectrum: aperiodic spectrum
  235. :param sfreq: sampling rate
  236. :param w_size: window size to extract burst waveforms
  237. :return: disctionary with trial, waveform, peak frequency, relative peak amplitude, absolute peak amplitude, peak
  238. time, peak adjustment, FWHM in frequency, FWHM in time, and polarity for each detected burst
  239. """
  240. bursts = {
  241. 'trial': [],
  242. 'waveform': [],
  243. 'peak_freq': [],
  244. 'peak_amp_iter': [],
  245. 'peak_amp_base': [],
  246. 'peak_time': [],
  247. 'peak_adjustment': [],
  248. 'fwhm_freq': [],
  249. 'fwhm_time': [],
  250. 'polarity': [],
  251. 'waveform_times': []
  252. }
  253. # Compute event-related signal
  254. erf = np.mean(raw_trials, axis=0)
  255. # Iterate through trials
  256. for t_idx, tr_tf in enumerate(tf):
  257. # Regress out ERF
  258. slope, intercept, r, p, se = linregress(erf, raw_trials[t_idx, :])
  259. raw_trial = raw_trials[t_idx, :] - (intercept + slope * erf)
  260. trial_bursts=extract_bursts_single_trial(raw_trial, tr_tf, times, search_freqs, band_lims, aperiodic_spectrum,
  261. sfreq, w_size=w_size)
  262. n_trial_bursts=len(trial_bursts['peak_time'])
  263. bursts['trial'].extend([int(t_idx) for i in range(n_trial_bursts)])
  264. bursts['waveform'].extend(trial_bursts['waveform'])
  265. bursts['peak_freq'].extend(trial_bursts['peak_freq'])
  266. bursts['peak_amp_iter'].extend(trial_bursts['peak_amp_iter'])
  267. bursts['peak_amp_base'].extend(trial_bursts['peak_amp_base'])
  268. bursts['peak_time'].extend(trial_bursts['peak_time'])
  269. bursts['peak_adjustment'].extend(trial_bursts['peak_adjustment'])
  270. bursts['fwhm_freq'].extend(trial_bursts['fwhm_freq'])
  271. bursts['fwhm_time'].extend(trial_bursts['fwhm_time'])
  272. bursts['polarity'].extend(trial_bursts['polarity'])
  273. if len(trial_bursts['waveform_times']):
  274. bursts['waveform_times'] = trial_bursts['waveform_times']
  275. bursts['trial'] = np.array(bursts['trial'])
  276. bursts['waveform'] = np.array(bursts['waveform'])
  277. bursts['peak_freq'] = np.array(bursts['peak_freq'])
  278. bursts['peak_amp_iter'] = np.array(bursts['peak_amp_iter'])
  279. bursts['peak_amp_base'] = np.array(bursts['peak_amp_base'])
  280. bursts['peak_time'] = np.array(bursts['peak_time'])
  281. bursts['peak_adjustment'] = np.array(bursts['peak_adjustment'])
  282. bursts['fwhm_freq'] = np.array(bursts['fwhm_freq'])
  283. bursts['fwhm_time'] = np.array(bursts['fwhm_time'])
  284. bursts['polarity'] = np.array(bursts['polarity'])
  285. return bursts

burst_detection.py at commit 91fe424, no license · at the source

Overview

Authors: Quentin Moreau1, Maciej J. Szul1,2,3, Sébastien Daligaut4, Denis Schwartz4, James J. Bonaiuto1,2
  1. Marc Jeannerod Institute of Cognitive Sciences, ISC, CNRS UMR 5229, Lyon, France
  2. Université Claude Bernard Lyon 1, Université de Lyon, Lyon, France
  3. Department of Psychiatry and Psychotherapy, Faculty of Medicine, University of Tübingen, Tübingen, Germany
  4. MEG Departement, CERMEP-Imagerie du Vivant, 59 Bd Pinel, 69677, Bron, France
Dates: published online 6 March 2026
Type: Preprint
License: CC BY-NC-ND
Identifiers: DOI 10.64898/2026.03.06.710026 · OpenAlex W7134131317
Open access: green, a free copy (OpenAlex)
Status: code verified
Methods: Spectral & time-frequency, Connectivity, Statistics, Smoothing, state filtering, decompositions, Preprocessing, Evoked potentials, fMRI & imaging, Physiology & signal measures
Topic: Motor Control and Adaptation (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: European Research Council (864550)
Citations: not cited yet (Europe PMC); 57 references in the paper

Abstract

The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.

Repositories

Its files are read in the Code ↔ Paper reader above, with 10 matches between paragraphs and lines of code.

danclab/burst_detection

License: none: the authors keep all their rights
State: the link answers, verified on 26 September 2026
Evidence: files inventoried
Commit: 91fe42487dc701a1f60f7b6ef821c97b86ce506e, 8 February 2024
Languages: MATLAB (5), Python (2), Jupyter (2)
Size: 11 files, 9 scripts
Software Heritage: archived
Found in: the text, “Beta power and burst extraction”
Holds: README, 2 notebooks
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (4 files), Matplotlib (2 files), MNE-Python (2 files), FieldTrip (1 file), Signal Processing Toolbox (1 file), Statistics and Machine Learning Toolbox (1 file), pandas (1 file), scikit-learn (1 file), SciPy (1 file), specparam (formerly FOOOF) (1 file)
Availability: 1 check, the latest on 26 September 2026: the link answers
  • 26 September 2026: the link answers
10 files

danclab/explicit_implicit_bursts

License: none: the authors keep all their rights
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: c234164e733830a0d576a62d136da1bd0a77480e, 14 September 2026
Languages: Jupyter (11), R (7), Python (1)
Size: 96 files, 19 scripts
Software Heritage: not archived
Found in: “Data and materials availability”
Holds: 11 notebooks
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (12 files), pandas (12 files), Matplotlib (11 files), seaborn (10 files), emmeans (6 files), lme4 (6 files), SciPy (6 files), car (5 files), MNE-Python (4 files), tidyverse (4 files), lmerTest (3 files), statsmodels (3 files), scikit-learn (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
19 files

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:

  • 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 28 scripts, each with its path and the digest of its content;
  • 10 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.

Code and data availability statement

The paper has a code and data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.64898/2026.03.06.710026.

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, 30 September 2026: the first record

Recorded: type, journal, dates, 5 authors, 1 funder, 52 references.

Cite

This paper

Moreau, Q., Szul, M. J., Daligaut, S., Schwartz, D., & Bonaiuto, J. J. (2026). Distinct beta burst motifs exhibit opposing error relationships during motor adaptation. bioRxiv (preprint). https://doi.org/10.64898/2026.03.06.710026

BibTeX

@article{moreau2026distinct,
author = {Moreau, Quentin and Szul, Maciej J. and Daligaut, Sébastien and Schwartz, Denis and Bonaiuto, James J.},
title = {{Distinct beta burst motifs exhibit opposing error relationships during motor adaptation}},
journal = {bioRxiv (preprint)},
year = {2026},
month = mar,
publisher = {bioRxiv},
issn = {2692-8205},
doi = {10.64898/2026.03.06.710026},
url = {https://doi.org/10.64898/2026.03.06.710026}
}

RIS

TY - JOUR
AU - Moreau, Quentin
AU - Szul, Maciej J.
AU - Daligaut, Sébastien
AU - Schwartz, Denis
AU - Bonaiuto, James J.
TI - Distinct beta burst motifs exhibit opposing error relationships during motor adaptation
T2 - bioRxiv (preprint)
J2 - bioRxiv
PY - 2026
DA - 2026/03/06
SN - 2692-8205
PB - bioRxiv
DO - 10.64898/2026.03.06.710026
UR - https://doi.org/10.64898/2026.03.06.710026
ER -

CSL-JSON

{
"id": "10.64898/2026.03.06.710026",
"type": "article",
"title": "Distinct beta burst motifs exhibit opposing error relationships during motor adaptation",
"container-title": "bioRxiv (preprint)",
"author": [
{
"family": "Moreau",
"given": "Quentin"
},
{
"family": "Szul",
"given": "Maciej J."
},
{
"family": "Daligaut",
"given": "Sébastien"
},
{
"family": "Schwartz",
"given": "Denis"
},
{
"family": "Bonaiuto",
"given": "James J."
}
],
"container-title-short": "bioRxiv",
"DOI": "10.64898/2026.03.06.710026",
"ISSN": "2692-8205",
"publisher": "bioRxiv",
"URL": "https://doi.org/10.64898/2026.03.06.710026",
"issued": {
"date-parts": [
[
2026,
3,
6
]
]
}
}

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.1162/imag.a.1040 [code]
Novel 4 He-OPMs support waveform-specific beta burst analysis comparable to SQUID-MEG
Journal: n/a
In common: specparam (formerly FOOOF), FieldTrip, MNE-Python, 7 other tools, 7 references, author Denis Schwartz
[2] doi:10.1162/imag.a.1226 [code]
A neuroscientist's guide to neural burst detection.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: specparam (formerly FOOOF), FieldTrip, MNE-Python, 8 other tools, 8 references
[3] doi:10.1162/imag.a.1169 [code]
Diazepam alters the shape of alpha oscillations recorded from human cortex using EEG.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: specparam (formerly FOOOF), car, emmeans, 7 other tools, 4 references
[4] 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. Clinical
In common: specparam (formerly FOOOF), car, lmerTest, 11 other tools
[5] doi:10.1093/cercor/bhag113 [code]
Long-term reliability and stability of parameterized resting state EEG: evidence from a five-year follow-up.
Journal: Cerebral cortex (New York, N.Y. : 1991)
In common: specparam (formerly FOOOF), emmeans, MNE-Python, 9 other tools, 2 references
[6] doi:10.7554/elife.107088 [code]
Development of auditory and spontaneous movement responses to music over the first postnatal year.
Journal: eLife
In common: car, FieldTrip, emmeans, 11 other tools
[7] doi:10.1016/j.isci.2026.115375 [code]
Bursts of regional cortical inhibition during smartphone use.
Journal: iScience
In common: Signal Processing Toolbox, Statistics and Machine Learning Toolbox, scikit-learn, 3 other tools, 7 references
[8] 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 consciousness
In common: car, emmeans, MNE-Python, 10 other tools, 1 reference
[9] doi:10.34133/csbj.0042 [code]
Using Steady-State Visual Evoked Potentials to Characterize Wide-Ranging Retinopathy Linked to &lt;i&gt;CRB1&lt;/i&gt;: Implications for Clinical Trials.
Journal: Computational and structural biotechnology journal
In common: car, emmeans, MNE-Python, 10 other tools
[10] doi:10.1162/imag.a.1321 [code]
Phase similarity between similar objects indicates representational merging across retrieval training but not sleep.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: car, emmeans, MNE-Python, 9 other tools, 1 reference

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.

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.