OSCR

Reply to: "No evidence of neural feature-specific pre-activation during the prediction of an upcoming stimulus".

Code ↔ Paper

3 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 3 matches
  1. [1] § Results and Discussion › Alternative approach to probe sound frequency specific neural preactivation patterns ↔ alajulienne/om_decode_timegen_trSNDteSND_alajulienne.m, lines 3–24 · score 0.70 · prediction related neural, random sequences, activation, complementary, activity, repetition
  2. [2] § Results and Discussion › Alternative approach to probe sound frequency specific neural preactivation patterns ↔ alajulienne/om_decode_timegen_trSNDteSND_alajulienne.m, lines 3–24 · score 0.61 · LDA classifier, random sequence, relabeled, transitions, probable, repetitions
  3. [3] § Results and Discussion › Novel data demonstrating feature-specific anticipatory auditory predictions ↔ 4and8tones/plot_stat_sequences.R, lines 184–228 · score 0.53 · mass, Intervals, probability, position, HDI, ROPE

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

MATLAB · 381 lines · 14 KB · no license · 2 matches

  1. function om_decode_timegen_trSNDteSND_alajulienne(subJ,cfg_in)
  2. %% om_decode_timegen_trSNDteSND_alajulienne.m
  3. %%
  4. % This script implements two complementary decoding approaches to investigate prediction-related patterns
  5. % in the brain, as described more in details in Schubert et al. (2023) and
  6. % Topalidis et al. (2025) (https://doi.org/10.1016/j.cub.2025.03.064).
  7. %
  8. % In summary:
  9. % - We train a multiclass LDA classifier on tones from the random sequence, excluding tone repetitions (bottom-up classifier).
  10. % - We test this classifier on tone repetitions from both random and increasingly predictable sequences to detect pre-activation of stimulus-specific activity.
  11. % - We also relabel tone repetitions in the test set to the most likely (mp='most probable') expected next tone, capturing prediction-related neural activity.
  12. % - Separately, we train a second classifier (top-down classifier) on forward tone transitions from the predictable ('ordered') sequence (e.g., A/B, B/C).
  13. % - This top-down classifier is tested on random and increasingly more predictable most probable tone repetitions to identify top-down representations of expected transitions.
  14. %clear all; close all; restoredefaultpath; matlabrc;
  15. disp('Those are the inputs:')
  16. cfg_in
  17. OLDCFG = cfg_in;
  18. % Add user's version of FieldTrip or obob_ownft (update this path as needed)
  19. addpath('/path/to/your/fieldtrip'); % or obob_ownft
  20. ft_defaults;
  21. %% MVPALight
  22. % Add user's version of MVPA-Light (update this path as needed)
  23. addpath(genpath('/path/to/your/MVPA-Light/'));
  24. %%% the rest
  25. % Add user's analysis code directories (update these paths as needed)
  26. addpath('/path/to/your/omissionMarkov/decoding');
  27. addpath('/path/to/your/omissionMarkov/decoding/functions/');
  28. %% out things
  29. % Set user's data and output directories (update these paths as needed)
  30. fileDir = '/path/to/your/data/sssoriginal/';
  31. outDirTGSND = '/path/to/your/data/decoding/matlab/alajulienne/';
  32. %%
  33. clear tmpdata data % to stay on the safe side
  34. conds={'random*','midminus*','midplus*','ordered*'};
  35. trialinfos = [];
  36. %%
  37. for iFile=1:length(conds) %only on orderer if 4
  38. tmpFile= dir([fileDir,'*',subJ,'_block*',conds{iFile}]);
  39. cur_file = [tmpFile.folder,'/',tmpFile.name];
  40. cfg = [];
  41. cfg.dataset = cur_file;
  42. cfg.trialdef.triallength = Inf; % infinite trial length for one trial
  43. cfg.trialdef.ntrials = 1; % one trial
  44. cfg = ft_definetrial(cfg);
  45. cfg.channel = cfg_in.chanType; % select channel type
  46. cfg.hpfilter = 'yes'; % high-pass filter
  47. cfg.hpfreq = 0.1;
  48. cfg.hpinstabilityfix = 'split';
  49. tmpdata = ft_preprocessing(cfg);
  50. cfg = [];
  51. cfg.channel = cfg_in.chanType;
  52. cfg.dataset=cur_file ;
  53. cfg.trialdef.prestim = 1;
  54. cfg.trialdef.poststim = 1;
  55. cfg.trialdef.eventtype = 'Trigger';
  56. cfg.trialdef.eventvalue = [1 2 3 4 10 20 30 40]; % only sounds needed
  57. cfg_wtrials = ft_definetrial(cfg);
  58. data{iFile}= ft_redefinetrial(cfg_wtrials, tmpdata);
  59. clear tmpdata;
  60. data{iFile}.trialinfo(:,2)= iFile;
  61. %%%
  62. % Low-pass filter at 30 Hz
  63. cfg=[];
  64. cfg.lpfilter = 'yes'; %usually is yes here
  65. cfg.lpfreq = 30;
  66. data{iFile} = ft_preprocessing(cfg,data{iFile});
  67. %% fix the stimulus delay
  68. cfg = [];
  69. cfg.offset = -24; % 24 samples at 1kHz (approx 23.5 ms delay), in the original study with the original pneumatic tubes
  70. data{iFile} = ft_redefinetrial(cfg,data{iFile});
  71. % Downsample if needed (if fsample > 100 (files on Zenode have Fs = 100))
  72. if data{iFile}.fsample > 100
  73. cfg=[];
  74. if iscell(cfg_in.Fs)
  75. cfg.resamplefs=str2num(cfg_in.Fs{1});
  76. else
  77. cfg.resamplefs=str2num(cfg_in.Fs); %
  78. end
  79. data{iFile}=ft_resampledata(cfg, data{iFile});
  80. else end
  81. trialinfos=[trialinfos; data{iFile}.trialinfo];
  82. if ~strcmp(cfg_in.chanType,'MEGMAG') % combine planar if not MEGMAG
  83. cfg=[];
  84. data{iFile}=ft_combineplanar(cfg, data{iFile});
  85. else end
  86. end
  87. %% Remove empty blocks if it happens and append data
  88. if max(size(data(~cellfun('isempty',data))))>1 % do not count the empty elements
  89. cfg = [];
  90. cfg.appenddim = 'rpt';
  91. data=ft_appenddata(cfg, data{:});
  92. else
  93. foo = data(~cellfun('isempty',data)); %take out the only non empty one
  94. data = foo{1};
  95. clear foo;
  96. end
  97. %% Remove cfg field to save disk space
  98. data = rmfield(data,'cfg');
  99. %% MVPA part
  100. clear acc* result* cfg*
  101. %% init the magic ....
  102. startup_MVPA_Light;
  103. %% find the indices of the different sounds and omissions
  104. allIdxRD = find(data.trialinfo(:,2)==1); %rd sounds and omissions
  105. allIdxMM = find(data.trialinfo(:,2)==2); %mm sounds and omissions
  106. allIdxMP = find(data.trialinfo(:,2)==3); %mp sounds and omissions
  107. allIdxOR = find(data.trialinfo(:,2)==4); %or sounds and omissions
  108. %% find the self repetitions, see the function below
  109. tmpidx = findSelfRepetitions(data.trialinfo(allIdxRD,1));
  110. selfRepRD = allIdxRD(tmpidx);
  111. % same for the other entropies
  112. tmpidx = findSelfRepetitions(data.trialinfo(allIdxMM,1));
  113. selfRepMM = allIdxMM(tmpidx);
  114. tmpidx = findSelfRepetitions(data.trialinfo(allIdxMP,1));
  115. selfRepMP = allIdxMP(tmpidx);
  116. tmpidx = findSelfRepetitions(data.trialinfo(allIdxOR,1));
  117. selfRepOR = allIdxOR(tmpidx);
  118. % find the omissions and the trials immediately after
  119. % RD
  120. [tmpidx, tmpidy] = detectOmissions(data.trialinfo(allIdxRD,1));
  121. omIdxRD = allIdxRD(tmpidx); postOmIdxRD = allIdxRD(tmpidy);
  122. % MM
  123. [tmpidx, tmpidy] = detectOmissions(data.trialinfo(allIdxMM,1));
  124. omIdxMM = allIdxMM(tmpidx); postOmIdxMM = allIdxMM(tmpidy);
  125. % MP
  126. [tmpidx, tmpidy] = detectOmissions(data.trialinfo(allIdxMP,1));
  127. omIdxMP = allIdxMP(tmpidx); postOmIdxMP = allIdxMP(tmpidy);
  128. % OR
  129. [tmpidx, tmpidy] = detectOmissions(data.trialinfo(allIdxOR,1));
  130. omIdxOR = allIdxOR(tmpidx); postOmIdxOR = allIdxOR(tmpidy);
  131. %% create the 'classic' training set, i.e. wo omissions, and post omissions
  132. % RD
  133. normalIdxRD = setdiff(allIdxRD, union(omIdxRD, postOmIdxRD));
  134. cfg=[];
  135. cfg.keeptrials='yes';
  136. cfg.trials = [normalIdxRD];
  137. data_tl_snd_rd=ft_timelockanalysis(cfg, data);
  138. time=data_tl_snd_rd.time;
  139. % MM
  140. normalIdxMM = setdiff(allIdxMM, union(omIdxMM, postOmIdxMM));
  141. cfg=[];
  142. cfg.keeptrials='yes';
  143. cfg.trials = [normalIdxMM]; %
  144. data_tl_snd_mm=ft_timelockanalysis(cfg, data);
  145. % MP
  146. normalIdxMP = setdiff(allIdxMP, union(omIdxMP, postOmIdxMP));
  147. cfg=[];
  148. cfg.keeptrials='yes';
  149. cfg.trials = [normalIdxMP]; %
  150. data_tl_snd_mp=ft_timelockanalysis(cfg, data);
  151. % OR
  152. normalIdxOR = setdiff(allIdxOR, union(omIdxOR, postOmIdxOR));
  153. cfg=[];
  154. cfg.keeptrials='yes';
  155. cfg.trials = [normalIdxOR]; %
  156. data_tl_snd_or=ft_timelockanalysis(cfg, data);
  157. %% create the 'forward' training set, i.e. the one without self repetitions and omissions, and post omissions
  158. % RD
  159. forwardIdxRD = setdiff(allIdxRD, union(selfRepRD, union(omIdxRD, postOmIdxRD)));
  160. cfg=[];
  161. cfg.keeptrials='yes';
  162. cfg.trials = [forwardIdxRD]; %
  163. data_tl_rdFW=ft_timelockanalysis(cfg, data);
  164. % MM
  165. forwardIdxMM = setdiff(allIdxMM, union(selfRepMM, union(omIdxMM, postOmIdxMM)));
  166. cfg=[];
  167. cfg.keeptrials='yes';
  168. cfg.trials = [forwardIdxMM]; %
  169. data_tl_mmFW=ft_timelockanalysis(cfg, data);
  170. % MP
  171. forwardIdxMP = setdiff(allIdxMP, union(selfRepMP, union(omIdxMP, postOmIdxMP)));
  172. cfg=[];
  173. cfg.keeptrials='yes';
  174. cfg.trials = [forwardIdxMP]; %
  175. data_tl_mpFW=ft_timelockanalysis(cfg, data);
  176. % OR
  177. forwardIdxOR = setdiff(allIdxOR, union(selfRepOR, union(omIdxOR, postOmIdxOR)));
  178. cfg=[];
  179. cfg.keeptrials='yes';
  180. cfg.trials = [forwardIdxOR]; %
  181. data_tl_orFW=ft_timelockanalysis(cfg, data);
  182. %% create the self repetitions test set, i.e. the one with only self repetitions
  183. % RD
  184. SRidxRD = setdiff(selfRepRD, union(omIdxRD, postOmIdxRD)); %remove OMs as well
  185. cfg=[];
  186. cfg.keeptrials='yes';
  187. cfg.trials = SRidxRD;%
  188. data_tl_rdSR=ft_timelockanalysis(cfg, data);
  189. % MM
  190. SRidxMM = setdiff(selfRepMM, union(omIdxMM, postOmIdxMM)); %remove OMs as well
  191. cfg=[];
  192. cfg.keeptrials='yes';
  193. cfg.trials = [SRidxMM]; %
  194. data_tl_mmSR=ft_timelockanalysis(cfg, data);
  195. % MP
  196. SRidxMP = setdiff(selfRepMP, union(omIdxMP, postOmIdxMP)); %remove OMs as well
  197. cfg=[];
  198. cfg.keeptrials='yes';
  199. cfg.trials = [SRidxMP]; %
  200. data_tl_mpSR=ft_timelockanalysis(cfg, data);
  201. % OR
  202. SRidxOR = setdiff(selfRepOR, union(omIdxOR, postOmIdxOR)); %remove OMs as well
  203. cfg=[];
  204. cfg.keeptrials='yes';
  205. cfg.trials = [SRidxOR]; %
  206. data_tl_orSR=ft_timelockanalysis(cfg, data);
  207. %% 'classical' way a la Demarchi et al. 2019
  208. % RD train/test
  209. cfg = [];
  210. cfg.classifier = 'multiclass_lda';
  211. cfg.metric = 'accuracy';
  212. cfg.preprocessing = 'undersample';
  213. [accTG_SND_RD, result_accTG_SND_RD] = mv_classify_timextime(cfg, data_tl_snd_rd.trial, data_tl_snd_rd.trialinfo(:,1));
  214. % Cross decoding
  215. % Rd_SND to Mm_SND
  216. [accTG_SND_RD_MM, result_accTG_SND_RD_MM] = mv_classify_timextime(cfg, data_tl_snd_rd.trial, data_tl_snd_rd.trialinfo(:,1),data_tl_snd_mm.trial, data_tl_snd_mm.trialinfo(:,1));
  217. % Rd_SND to Mp_SND
  218. [accTG_SND_RD_MP, result_accTG_SND_RD_MP] = mv_classify_timextime(cfg,data_tl_snd_rd.trial, data_tl_snd_rd.trialinfo(:,1),data_tl_snd_mp.trial, data_tl_snd_mp.trialinfo(:,1));
  219. % Rd_SND to Or_SND
  220. [accTG_SND_RD_OR, result_accTG_SND_RD_OR] = mv_classify_timextime(cfg,data_tl_snd_rd.trial, data_tl_snd_rd.trialinfo(:,1),data_tl_snd_or.trial, data_tl_snd_or.trialinfo(:,1));
  221. %% train on ordered forward and test on self repetitions
  222. cfg = [];
  223. cfg.classifier = 'multiclass_lda';
  224. cfg.metric = 'accuracy';
  225. cfg.preprocessing = 'undersample';
  226. [accTG_SND_fwOR_srRD, result_acc_fwOR_srRD] = mv_classify_timextime(cfg, data_tl_orFW.trial, data_tl_orFW.trialinfo(:,1), data_tl_rdSR.trial, data_tl_rdSR.trialinfo(:,1));
  227. [accTG_SND_fwOR_srMM, result_acc_fwOR_srMM] = mv_classify_timextime(cfg, data_tl_orFW.trial, data_tl_orFW.trialinfo(:,1), data_tl_mmSR.trial, data_tl_mmSR.trialinfo(:,1));
  228. [accTG_SND_fwOR_srMP, result_acc_fwOR_srMP] = mv_classify_timextime(cfg, data_tl_orFW.trial, data_tl_orFW.trialinfo(:,1), data_tl_mpSR.trial, data_tl_mpSR.trialinfo(:,1));
  229. [accTG_SND_fwOR_srOR, result_acc_fwOR_srOR] = mv_classify_timextime(cfg, data_tl_orFW.trial, data_tl_orFW.trialinfo(:,1), data_tl_orSR.trial, data_tl_orSR.trialinfo(:,1));
  230. % relabeled / most probable
  231. % this is the one needed for the 'top down'/'negative training times' part of the plot
  232. cfg = [];
  233. cfg.classifier = 'multiclass_lda';
  234. cfg.metric = 'accuracy';
  235. cfg.preprocessing = 'undersample';
  236. [accTG_SND_fwOR_srRDmp, result_acc_fwOR_srRDmp] = mv_classify_timextime(cfg, data_tl_orFW.trial, data_tl_orFW.trialinfo(:,1), data_tl_rdSR.trial, makeMostProbable(data_tl_rdSR.trialinfo(:,1)));
  237. [accTG_SND_fwOR_srMMmp, result_acc_fwOR_srMMmp] = mv_classify_timextime(cfg, data_tl_orFW.trial, data_tl_orFW.trialinfo(:,1), data_tl_mmSR.trial, makeMostProbable(data_tl_mmSR.trialinfo(:,1)));
  238. [accTG_SND_fwOR_srMPmp, result_acc_fwOR_srMPmp] = mv_classify_timextime(cfg, data_tl_orFW.trial, data_tl_orFW.trialinfo(:,1), data_tl_mpSR.trial, makeMostProbable(data_tl_mpSR.trialinfo(:,1)));
  239. [accTG_SND_fwOR_srORmp, result_acc_fwOR_srORmp] = mv_classify_timextime(cfg, data_tl_orFW.trial, data_tl_orFW.trialinfo(:,1), data_tl_orSR.trial, makeMostProbable(data_tl_orSR.trialinfo(:,1)));
  240. %% training on the random forward
  241. cfg = [];
  242. cfg.classifier = 'multiclass_lda';
  243. cfg.metric = 'accuracy'% {'accuracy', 'confusion', 'f1', 'mae'}; %
  244. cfg.output_type = 'dval'; %
  245. cfg.preprocessing = 'undersample';
  246. [accTG_SND_fwRD_srRD, result_acc_fwRD_srRD] = mv_classify_timextime(cfg, data_tl_rdFW.trial, data_tl_rdFW.trialinfo(:,1), data_tl_rdSR.trial, data_tl_rdSR.trialinfo(:,1));
  247. [accTG_SND_fwRD_srMM, result_acc_fwRD_srMM] = mv_classify_timextime(cfg, data_tl_rdFW.trial, data_tl_rdFW.trialinfo(:,1), data_tl_mmSR.trial, data_tl_mmSR.trialinfo(:,1));
  248. [accTG_SND_fwRD_srMP, result_acc_fwRD_srMP] = mv_classify_timextime(cfg, data_tl_rdFW.trial, data_tl_rdFW.trialinfo(:,1), data_tl_mpSR.trial, data_tl_mpSR.trialinfo(:,1));
  249. [accTG_SND_fwRD_srOR, result_acc_fwRD_srOR] = mv_classify_timextime(cfg, data_tl_rdFW.trial, data_tl_rdFW.trialinfo(:,1), data_tl_orSR.trial, data_tl_orSR.trialinfo(:,1));
  250. % relabeled / most probable
  251. % this is the one needed for the 'bottom up'/'positive training times' part of the plot
  252. cfg = [];
  253. cfg.classifier = 'multiclass_lda';
  254. cfg.metric = 'accuracy'% {'accuracy', 'confusion', 'f1', 'mae'}; %
  255. cfg.output_type = 'dval'; %
  256. cfg.preprocessing = 'undersample';
  257. [accTG_SND_fwRD_srRDmp, result_acc_fwRD_srRDmp] = mv_classify_timextime(cfg, data_tl_rdFW.trial, data_tl_rdFW.trialinfo(:,1), data_tl_rdSR.trial, makeMostProbable(data_tl_rdSR.trialinfo(:,1)));
  258. [accTG_SND_fwRD_srMMmp, result_acc_fwRD_srMMmp] = mv_classify_timextime(cfg, data_tl_rdFW.trial, data_tl_rdFW.trialinfo(:,1), data_tl_mmSR.trial, makeMostProbable(data_tl_mmSR.trialinfo(:,1)));
  259. [accTG_SND_fwRD_srMPmp, result_acc_fwRD_srMPmp] = mv_classify_timextime(cfg, data_tl_rdFW.trial, data_tl_rdFW.trialinfo(:,1), data_tl_mpSR.trial, makeMostProbable(data_tl_mpSR.trialinfo(:,1)));
  260. [accTG_SND_fwRD_srORmp, result_acc_fwRD_srORmp] = mv_classify_timextime(cfg, data_tl_rdFW.trial, data_tl_rdFW.trialinfo(:,1), data_tl_orSR.trial, makeMostProbable(data_tl_orSR.trialinfo(:,1)));
  261. %% and save!
  262. cfg_in = OLDCFG; % to keep the original cfg_in
  263. if iscell(cfg_in.Fs)
  264. Fs = cfg_in.Fs{1};
  265. else
  266. Fs = cfg_in.Fs;
  267. end
  268. outFile = [ subJ '_' cfg_in.chanType '_timegen_trRdSND_teSND_Fs' num2str(Fs) '_alajulienne.mat' ];
  269. if iscell(outFile)
  270. outFile = [outFile{:}];
  271. else end
  272. save(fullfile(outDirTGSND, outFile),'acc*','result*','time','cfg_in' ,'-v7.3');
  273. disp(['Saved: ',fullfile(outDirTGSND, outFile)]);
  274. end
  275. %% local functions
  276. function repetition_indices = findSelfRepetitions(sequence)
  277. % Initialize an empty array to store indices of the first self-repetitions
  278. repetition_indices = [];
  279. % Flag to track if we're in a repetition sequence
  280. inRepetition = false;
  281. % Loop through the sequence starting from the second element
  282. for i = 2:length(sequence)
  283. % Check if the current element is equal to the previous element
  284. if sequence(i) == sequence(i-1)
  285. % If not already in a repetition, this is the first repetition
  286. if ~inRepetition
  287. repetition_indices = [repetition_indices, i];
  288. inRepetition = true; % Mark that we're now in a repetition
  289. end
  290. else
  291. % If the current element is different, reset the repetition flag
  292. inRepetition = false;
  293. end
  294. end
  295. end
  296. function [omIdx, postOmIdx] = detectOmissions(sequence)
  297. % Find indices where elements are 10 or more (detect omissions)
  298. omIdx = find(sequence >= 10);
  299. % Initialize array to store the indices following the omissions
  300. postOmIdx = omIdx + 1;
  301. % Ensure indices are within bounds
  302. postOmIdx(postOmIdx > length(sequence)) = [];
  303. end
  304. function shifted_sequence = makeMostProbable(sequence)
  305. % mod to perform the cyclic shift
  306. % 2 -> 1, 3 -> 2, 4 -> 3, 1 -> 4, ...
  307. shifted_sequence = mod(sequence - 2, 4) + 1;
  308. end

om_decode_timegen_trSNDteSND_alajulienne.m at commit 25f86b2, no license · at the source

Overview

Authors: Gianpaolo Demarchi1,2, Thomas Hartmann1, Anne Hauswald1, Juliane Schubert1, Lisa Reisinger1, Pavlos Topalidis1, Kaja Benz1, Fabian Schmidt1, Quirin Gehmacher1, Nathan Weisz1,2
  1. Centre for Cognitive Neuroscience, Department of Psychology, Paris-Lodron-University of Salzburg, Salzburg, Austria
  2. Neuroscience Institute, Christian Doppler University Hospital, Paracelsus Medical University Salzburg, Salzburg, Austria
Journal: Nature communications, volume 17, issue 1, article 4638
Dates: received 27 January 2025; accepted 8 May 2026; published online 26 May 2026
Type: Letter · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1038/s41467-026-73567-2 · PMID 42191730 · PMCID PMC13212686 · OpenAlex W7162464188
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: human (organism)
Methods: Connectivity, Statistics, Machine learning, Preprocessing
Keywords: Cortex, Neural encoding, Human behaviour
Topic: Neural and Behavioral Psychology Studies (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: Austrian Science Fund FWF (W 1233)
Citations: not cited yet (Europe PMC); 9 references in the paper

Abstract

No abstract was found for this paper: the paper, at the publisher.

Repository

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

gdemarchi/Markov2.0

License: none: the authors keep all their rights
State: the link answers, verified on 28 September 2026
Evidence: files inventoried
Commit: 25f86b286e5d5fdabbb35a450d40e5f8caef79d9, 12 April 2026
Languages: MATLAB (6), R (1)
Size: 10 files, 7 scripts
Software Heritage: not archived
Found in: “Data availability”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: FieldTrip (4 files), ggplot2 (1 file), tidyverse (1 file)
Availability: 1 check, the latest on 28 September 2026: the link answers
  • 28 September 2026: the link answers
8 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:

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

Datasets cited

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.1038/s41467-026-73567-2.

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

Recorded: type, language, journal, volume, issue, pages, dates, 10 authors, 3 keywords, 1 funder, 8 references.

Cite

This paper

Demarchi, G., Hartmann, T., Hauswald, A., Schubert, J., Reisinger, L., Topalidis, P., Benz, K., Schmidt, F., Gehmacher, Q., & Weisz, N. (2026). Reply to: "No evidence of neural feature-specific pre-activation during the prediction of an upcoming stimulus". Nature communications, 17(1), 4638. https://doi.org/10.1038/s41467-026-73567-2

BibTeX

@article{demarchi2026reply,
author = {Demarchi, Gianpaolo and Hartmann, Thomas and Hauswald, Anne and Schubert, Juliane and Reisinger, Lisa and Topalidis, Pavlos and Benz, Kaja and Schmidt, Fabian and Gehmacher, Quirin and Weisz, Nathan},
title = {{Reply to: "No evidence of neural feature-specific pre-activation during the prediction of an upcoming stimulus"}},
journal = {Nature communications},
year = {2026},
month = may,
volume = {17},
number = {1},
pages = {4638},
publisher = {Nature Publishing Group},
issn = {2041-1723},
doi = {10.1038/s41467-026-73567-2},
url = {https://doi.org/10.1038/s41467-026-73567-2},
pmid = {42191730},
pmcid = {PMC13212686}
}

RIS

TY - JOUR
AU - Demarchi, Gianpaolo
AU - Hartmann, Thomas
AU - Hauswald, Anne
AU - Schubert, Juliane
AU - Reisinger, Lisa
AU - Topalidis, Pavlos
AU - Benz, Kaja
AU - Schmidt, Fabian
AU - Gehmacher, Quirin
AU - Weisz, Nathan
TI - Reply to: "No evidence of neural feature-specific pre-activation during the prediction of an upcoming stimulus"
T2 - Nature communications
J2 - Nat Commun
PY - 2026
DA - 2026/05/26
VL - 17
IS - 1
SP - 4638
SN - 2041-1723
PB - Nature Publishing Group
DO - 10.1038/s41467-026-73567-2
UR - https://doi.org/10.1038/s41467-026-73567-2
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41467-026-73567-2",
"type": "article-journal",
"title": "Reply to: \"No evidence of neural feature-specific pre-activation during the prediction of an upcoming stimulus\"",
"container-title": "Nature communications",
"author": [
{
"family": "Demarchi",
"given": "Gianpaolo"
},
{
"family": "Hartmann",
"given": "Thomas"
},
{
"family": "Hauswald",
"given": "Anne"
},
{
"family": "Schubert",
"given": "Juliane"
},
{
"family": "Reisinger",
"given": "Lisa"
},
{
"family": "Topalidis",
"given": "Pavlos"
},
{
"family": "Benz",
"given": "Kaja"
},
{
"family": "Schmidt",
"given": "Fabian"
},
{
"family": "Gehmacher",
"given": "Quirin"
},
{
"family": "Weisz",
"given": "Nathan"
}
],
"container-title-short": "Nat Commun",
"volume": "17",
"issue": "1",
"page": "4638",
"DOI": "10.1038/s41467-026-73567-2",
"PMID": "42191730",
"PMCID": "PMC13212686",
"ISSN": "2041-1723",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41467-026-73567-2",
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
26
]
]
}
}

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/a
In common: 3 authors
[2] doi:10.1523/eneuro.0041-26.2026 [code]
Ocular Speech Tracking Persists in Blindness, but Its Dynamics and Oculo-Cerebral Connectivity Depend on Visual Status.
Journal: eNeuro
In common: author Nathan Weisz
[3] doi:10.1038/s41467-026-73540-z [code]
Predictive acoustical processing in human cortical layers.
Journal: Nature communications
In common: FieldTrip, 2 references
[4] doi:10.3389/fnins.2026.1804069 [code]
Neural and autonomic regulation during brief mindfulness and relaxation interventions in clinical populations: a multimodal MEG study protocol.
Journal: Frontiers in neuroscience
In common: author Nathan Weisz
[5] doi:10.1038/s41467-026-74824-0 [code]
Learning regularities in noise engages both neural predictive activity and representational changes.
Journal: Nature communications
In common: tidyverse, 2 references
[6] doi:10.1038/s41467-026-73568-1 [code]
No evidence of neural feature-specific pre-activation during the prediction of an upcoming stimulus.
Journal: Nature communications
In common: tidyverse, 2 references
[7] doi:10.1093/braincomms/fcag351 [code]
Time-resolved aperiodic dynamics in event segmentation in attention-deficit/hyperactivity disorder.
Journal: Brain communications
In common: FieldTrip, ggplot2, tidyverse
[8] doi:10.1371/journal.pbio.3003979 [code]
Impaired midfrontal‑motor theta phase synchronization characterizes maladaptive motivational behavior in people with obsessive‑compulsive disorder.
Journal: PLoS biology
In common: FieldTrip, ggplot2, tidyverse
[9] doi:10.1371/journal.pbio.3003899 [code]
Social interactions between people of same and different generations shape longitudinal changes in interpersonal neural synchrony, loneliness, and social connection.
Journal: PLoS biology
In common: FieldTrip, ggplot2, tidyverse
[10] doi:10.1371/journal.pbio.3003948 [code]
Neural encoding of pain is robust within but unstable between individuals.
Journal: PLoS biology
In common: FieldTrip, ggplot2, tidyverse

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.