OSCR

Dynamic competition between bottom-up saliency and top-down goals in early visual cortex.

Code ↔ Paper

1 match 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 1 match
  1. [1] § Methods › Eye-tracking analysis ↔ mkj6s/Part6_GazeBias.m, lines 90–148 · score 0.54 · saccade trials, head, dva, block, gaze, eye

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 · 334 lines · 15 KB · no license · 1 match

  1. %% Dissociating External and Internal Attentional Selection | ANALYSIS
  2. % RIFT Analysis | PreCue | part 5 of 5
  3. %
  4. % This file
  5. % - imports and preprocesses gaze position data (blink_correction, saccade removal, baselining)
  6. %
  7. % Requirements
  8. % - list of participants (corresponding to directory names) at the start
  9. % - directory for eeg_matrix and saving in lines 24,
  10. %
  11. % Outputs (if saving is on, saved in saved/"participant")
  12. % -
  13. %% Settings
  14. close all; clear all; clc;
  15. addpath(genpath("C:\Users\wang0175\Desktop\Data analysis\Step3_Gazebias\eyetracking analysis")) % add data and helper functions
  16. % Collection info
  17. f_s = 500; % Hz
  18. trial_latency = [0, 2.5]; % sec, has to include 0 % 0 means placeholder onset
  19. % Screen info
  20. dist_from_screen = 72; screen_dim = [48 27.2]; % cm
  21. screen_pxs = [1920 1080];
  22. screen_dva = rad2deg(2*atan((0.5*screen_dim)/dist_from_screen));
  23. dva_per_px = screen_dva(1)/screen_pxs(1);
  24. dir='C:\Users\wang0175\Desktop\Data analysis\Step3_Gazebias\eyelinkdata\';
  25. participants = ["03","04","05","06","07","08","09","10","11","12","13","17","18","20","21","22","S1","S2","S3","S4","S5","S7","S8","S9"];
  26. %% Import eyetracking data
  27. disp("(1/7) Importing data from edf files");
  28. for p = 1:length(participants)
  29. disp("Participant "+char(participants(p))+" of "+num2str(length(participants)));
  30. % Import data
  31. filename =dir+participants(p)+'.edf';
  32. edf_data{p} = Edf2Mat(char(filename));
  33. end
  34. % save('original_eyetracking_data.mat', 'edf_data', '-v7.3');
  35. %% Convert into a big matrix
  36. disp("(2/7) Converting edf into a matrix");
  37. x_data_blinkcorrected = []; y_data_blinkcorrected = [];
  38. % Trial number info
  39. for p = 1:length(participants)
  40. triggers{p} = find(strncmpi(edf_data{1, p}.Events.Messages.info, "Trial", 5)); % ignore triggers during calibration
  41. num_trials(p) = length(triggers{p});
  42. for eye = 1:2
  43. x_data_blinkcorrected{1, p}(eye, :) = draft_blink_edge_correction(edf_data{1, p}.Samples.pupilSize(:, eye)', edf_data{1, p}.Samples.posX(:, eye)', 500);
  44. y_data_blinkcorrected{1, p}(eye, :) = draft_blink_edge_correction(edf_data{1, p}.Samples.pupilSize(:, eye)', edf_data{1, p}.Samples.posY(:, eye)', 500);
  45. end
  46. disp("Done blink correction for participant "+char(participants(p))+" of "+num2str(length(participants)));
  47. end
  48. % Are all trial numbers same?
  49. if nnz(diff(num_trials))
  50. disp("Warning: Unequal numbers of trials across participants");
  51. end
  52. %%
  53. x_pos_unmatched = zeros(num_trials(1), floor(sum(abs(trial_latency))*f_s), 2, length(participants)); % both eyes
  54. y_pos_unmatched = x_pos_unmatched; % trials x timepoints x eyes x participants
  55. % Extract position traces and store
  56. for p = 1:length(participants)
  57. for tr = 1:num_trials(1)
  58. trig = triggers{p}(tr);
  59. % Start time as per trigger
  60. [~, trig_time_idx(tr)] = min(abs(edf_data{1, p}.Samples.time - edf_data{1, p}.Events.Messages.time(1, trig)));
  61. % Start and end times
  62. start_t = trig_time_idx(tr) + floor(trial_latency(1)*f_s);
  63. end_t = start_t + floor(sum(abs(trial_latency))*f_s) - 1;
  64. % Extract position
  65. for eye = 1:2
  66. x_pos_unmatched(tr, :, eye, p) = x_data_blinkcorrected{p}(eye ,start_t:end_t, :);
  67. y_pos_unmatched(tr, :, eye, p) = y_data_blinkcorrected{p}(eye, start_t:end_t, :);
  68. end
  69. end
  70. disp("Extract position traces and store "+char(participants(p))+" of "+num2str(length(participants)));
  71. end
  72. save('x_pos_unmatched', 'x_pos_unmatched', '-v7.3');
  73. save('y_pos_unmatched', 'y_pos_unmatched', '-v7.3');
  74. %% Mark trials with saccades
  75. % Collection info
  76. clear all;clc;
  77. load('y_pos_unmatched.mat');
  78. load('x_pos_unmatched.mat');
  79. x_pos_unmatched(577:864, :, :, 16) = NaN;
  80. y_pos_unmatched(577:864, :, :, 16) = NaN;
  81. x_pos_unmatched(721:864, :, :, 17) = NaN;
  82. y_pos_unmatched(721:864, :, :, 17) = NaN;
  83. % Screen info
  84. dir='C:\Users\wang0175\Desktop\Data analysis\Step3_Gazebias\eyelinkdata\';
  85. participants = ["03","04","05","06","07","08","09","10","11","12","13","17","18","20","21","22","S1","S2","S3","S4","S5","S7","S8","S9"];
  86. disp("(3/7) Marking trials with saccades");
  87. f_s = 500; % Hz
  88. trial_latency = [0, 2.5]; % sec, has to include 0 % 0 means placeholder onset
  89. num_trials=size(x_pos_unmatched);
  90. % Screen info
  91. dist_from_screen = 72; screen_dim = [48 27.2]; % cm
  92. screen_pxs = [1920 1080];
  93. screen_dva = rad2deg(2*atan((0.5*screen_dim)/dist_from_screen));
  94. dva_per_px = screen_dva(1)/screen_pxs(1);
  95. % Parameter
  96. % s
  97. screen_pxs = [1920 1080];
  98. saccade_threshold = 3.5; %dva
  99. x_deviation = []; y_deviation = []; eccentricities_px = []; saccade_thresh_dur = 0.05;
  100. % Identify timepoints exceeding threshold
  101. for p = 1:size(x_pos_unmatched,4)
  102. for eye = 1:2
  103. x_deviation(:, :, eye, p) = x_pos_unmatched(:, [floor(1.2*f_s):floor(2.4*f_s)], eye, p) - mean(x_pos_unmatched(:, :, eye, p), "all", "omitnan");
  104. y_deviation(:, :, eye, p) = y_pos_unmatched(:, [floor(1.2*f_s):floor(2.4*f_s)], eye, p) - mean(y_pos_unmatched(:, :, eye, p), "all", "omitnan");
  105. eccentricities_px(:, :, eye, p) = sqrt(x_deviation(:, :, eye, p).^2 + y_deviation(:, :, eye, p).^2);
  106. end
  107. end
  108. points_beyond_threshold = eccentricities_px > (saccade_threshold/dva_per_px);
  109. % Average eyes
  110. eyes_averaged = mean(points_beyond_threshold, 3);
  111. saccade_trials = zeros(num_trials(1), length(participants));
  112. for p = 1:length(participants)
  113. for tr = 1:num_trials(1)
  114. saccade_trials(tr, p) = (nnz(eyes_averaged(tr, :, p)) > saccade_thresh_dur*f_s);
  115. end
  116. disp("--- Participant "+char(participants(p))+" made saccades in "+num2str(nnz(saccade_trials(:, p)/num_trials(1)))+" trials out of "+num_trials(1))
  117. end
  118. saccade_trials(577:864, 16)=1;
  119. saccade_trials(721:864, 17)=1;
  120. xxx=sum(saccade_trials);
  121. save('C:\Users\wang0175\Desktop\Data analysis\Step2 coherence without saccade\saccade_trials1.mat', 'saccade_trials');
  122. % 单独分析第五和第六和block 对于第16个被试
  123. % 若是第16个被试,将第577-864个试次设为 NaN (fifth and sixth move head)
  124. % xxx= squeeze(mean(eccentricities_px,3));
  125. % xxx=squeeze(mean(xxx,2))*dva_per_px;
  126. %%
  127. load('y_pos_unmatched.mat');
  128. load('x_pos_unmatched.mat');
  129. % % 设置参数
  130. bad_trials_16 = 577:864;
  131. time_window = floor(1.2*f_s):floor(2.4*f_s);
  132. %
  133. % % 初始化
  134. % x_deviation_bad = NaN(length(bad_trials_16), length(time_window), 2); % trial × time × eye
  135. % y_deviation_bad = NaN(length(bad_trials_16), length(time_window), 2);
  136. % eccentricities_bad_px = NaN(length(bad_trials_16), length(time_window), 2);
  137. %
  138. % 被试编号
  139. p = 16;
  140. for eye = 1:2
  141. % 取出原始位置
  142. x_data = squeeze(x_pos_unmatched(bad_trials_16, time_window, eye, p));
  143. y_data = squeeze(y_pos_unmatched(bad_trials_16, time_window, eye, p));
  144. % 计算去均值后的偏移量
  145. x_dev = x_data - mean(x_data, 'all', 'omitnan');
  146. y_dev = y_data - mean(y_data, 'all', 'omitnan');
  147. % 保存
  148. x_deviation_bad(:, :, eye) = x_dev;
  149. y_deviation_bad(:, :, eye) = y_dev;
  150. eccentricities_bad_px(:, :, eye) = sqrt(x_dev.^2 + y_dev.^2);
  151. end
  152. % 参数
  153. bad_trials_16 = 577:864;
  154. p = 16; % 第16个被试
  155. threshold_px = saccade_threshold / dva_per_px;
  156. % 只针对这部分试次计算是否超过阈值
  157. points_beyond_threshold = eccentricities_px(bad_trials_16, :, :, p) > threshold_px;
  158. % 对双眼取平均
  159. eyes_averaged = mean(points_beyond_threshold, 3); % size: [288, time]
  160. % 初始化结果
  161. saccade_trials_16 = zeros(length(bad_trials_16), 1);
  162. % 计算每个试次是否为扫视试次
  163. for i = 1:length(bad_trials_16)
  164. saccade_trials_16(i) = nnz(eyes_averaged(i, :)) > saccade_thresh_dur * f_s;
  165. end
  166. % 输出统计
  167. disp("Participant 16 made saccades in " + num2str(nnz(saccade_trials_16)) + ...
  168. " trials out of " + num2str(length(bad_trials_16)) + " (trials 577-864)")
  169. %
  170. % % %% Mark trials with NaNs/blinks
  171. % % load ('x_pos_unmatched.mat');
  172. % % load('y_pos_unmatched.mat');
  173. % % f_s = 500; % Hz
  174. % % trial_latency = [0, 2.5]; % sec, has to include 0 % 0 means placeholder onset
  175. % % x_pos_uncorrected=[];
  176. % % y_pos_uncorrected=[];
  177. % % % Screen info
  178. % % dist_from_screen = 72; screen_dim = [48 27.2]; % cm
  179. % screen_pxs = [1920 1080];
  180. % participants = ["01","03","04","05","06","07","08","09","10","11","12","13","14","15","17","18","20","21","22"];%02 single eye, others no eyelink data
  181. % for p = 1:size(x_pos_unmatched,4)
  182. % for tr = 1:size(x_pos_unmatched,1)
  183. % x_pos_uncorrected(tr, :, :, p) = x_pos_unmatched(tr, : ,:, p);
  184. % y_pos_uncorrected(tr, :, :, p) = y_pos_unmatched(tr, :, :, p);
  185. % end
  186. % end
  187. % disp("(3/7) Marking trials with NaNs");
  188. %
  189. % % Identify timepoints exceeding threshold
  190. % for p = 1:length(participants)
  191. % for tr = 1:size(x_pos_unmatched, 1)
  192. % nan_or_not = anynan(x_pos_uncorrected(tr, :, :, p));
  193. % nan_trials(tr, p) = nan_or_not;
  194. % end
  195. % disp("--- Participant "+num2str(p)+" had NaNs in "+num2str(nnz(nan_trials(:, p)/size(x_pos_unmatched, 1)))+" trials out of "+size(x_pos_unmatched, 1))
  196. % nan_trials_p = nan_trials(:, p);
  197. % end
  198. %
  199. %
  200. % %% NaN Corrections
  201. %
  202. % min_nan_length = 0.02; % sec, patches < this will be interpolated
  203. %
  204. % % Prepare variables
  205. % x_pos_unbaselined = x_pos_uncorrected; y_pos_unbaselined = y_pos_uncorrected;
  206. % disp("(5/7) Interpolating short periods of NaNs")
  207. %
  208. % % Interpolate patches that are small enough
  209. % fix_counter = 0;
  210. % for p = 1:length(participants)
  211. % counter_sh = 0; counter_lo = 0;
  212. % for tr = 1:size(x_pos_unmatched,1)
  213. % nans_logical = isnan(squeeze(x_pos_uncorrected(tr, :, :, 1)));
  214. %
  215. % for eye = 1:2
  216. % state_changes = diff([0 nans_logical(:, eye)' 0]); % when this is 1/-1, a NaN block has started/ended
  217. %
  218. % % Find NaN start/ends
  219. % idxs_NaN_starts{tr} = find(state_changes==1);
  220. % idxs_NaN_ends{tr} = find(state_changes==-1);
  221. %
  222. % % If NaNs are present,
  223. % if ~isempty(idxs_NaN_starts{tr})
  224. % % then for each NaN block,
  225. % for i = 1:length(idxs_NaN_starts{tr})
  226. % % which is within acceptable range,
  227. % block_length = idxs_NaN_ends{tr}(i)-idxs_NaN_starts{tr}(i);
  228. %
  229. % if block_length < min_nan_length*f_s
  230. % % interpolate the block.
  231. % fix_counter = fix_counter + 1;
  232. %
  233. % if idxs_NaN_starts{tr}(i) == 1
  234. % % if trial start is already a NaN, interpolate with block end point
  235. % x_pos_unbaselined(tr, idxs_NaN_starts{tr}(i):idxs_NaN_ends{tr}(i)-1, eye, p) = ...
  236. % linspace(x_pos_uncorrected(tr, idxs_NaN_ends{tr}(i), eye, p), x_pos_uncorrected(tr, idxs_NaN_ends{tr}(i), eye, p), block_length);
  237. % y_pos_unbaselined(tr, idxs_NaN_starts{tr}(i):idxs_NaN_ends{tr}(i)-1, eye, p) = ...
  238. % linspace(y_pos_uncorrected(tr, idxs_NaN_ends{tr}(i), eye, p), y_pos_uncorrected(tr, idxs_NaN_ends{tr}(i), eye, p), block_length);
  239. %
  240. % elseif idxs_NaN_ends{tr}(i) == length(state_changes)
  241. % % if trial end is a NaN, interpolate with block start point
  242. % x_pos_unbaselined(tr, idxs_NaN_starts{tr}(i):idxs_NaN_ends{tr}(i)-1, eye, p) = ...
  243. % linspace(x_pos_uncorrected(tr, idxs_NaN_starts{tr}(i)-1, eye, p), x_pos_uncorrected(tr, idxs_NaN_starts{tr}(i)-1, eye, p), block_length);
  244. % y_pos_unbaselined(tr, idxs_NaN_starts{tr}(i):idxs_NaN_ends{tr}(i)-1, eye, p) = ...
  245. % linspace(y_pos_uncorrected(tr, idxs_NaN_starts{tr}(i)-1, eye, p), y_pos_uncorrected(tr, idxs_NaN_starts{tr}(i)-1, eye, p), block_length);
  246. %
  247. % else
  248. % % if both start and end point are available
  249. % x_pos_unbaselined(tr, idxs_NaN_starts{tr}(i)-1:idxs_NaN_ends{tr}(i), eye, p) = ...
  250. % linspace(x_pos_uncorrected(tr, idxs_NaN_starts{tr}(i)-1, eye, p), x_pos_uncorrected(tr, idxs_NaN_ends{tr}(i), eye, p), block_length+2);
  251. % y_pos_unbaselined(tr, idxs_NaN_starts{tr}(i)-1:idxs_NaN_ends{tr}(i), eye, p) = ...
  252. % linspace(y_pos_uncorrected(tr, idxs_NaN_starts{tr}(i)-1, eye, p), y_pos_uncorrected(tr, idxs_NaN_ends{tr}(i), eye, p), block_length+2);
  253. %
  254. % end
  255. % end
  256. % end
  257. % end
  258. % end
  259. % end
  260. % end
  261. %
  262. % %%
  263. % %% Baseline Correction
  264. % disp("(6/7) Baseline correcting and converting to dva")
  265. %
  266. % % Baseline period
  267. % baseline_int = [0.2,1]; % sec, wrt. cue onset, + cue latency(1)
  268. % % Screen info
  269. % dist_from_screen = 72; screen_dim = [48 27.2]; % cm
  270. % screen_pxs = [1920 1080];
  271. % screen_dva = rad2deg(2*atan((0.5*screen_dim)/dist_from_screen));
  272. % dva_per_px = screen_dva(1)/screen_pxs(1);
  273. % % Prepare variables
  274. % x_pos_px = x_pos_unbaselined; y_pos_px = y_pos_unbaselined;
  275. %
  276. % x_pos_px = x_pos_unbaselined - repmat(mean(x_pos_unbaselined(:, floor(baseline_int(1)*f_s):floor(baseline_int(2)*f_s), :, :), 2, "omitnan"), 1, size(x_pos_unbaselined, 2), 1, 1);
  277. % y_pos_px = y_pos_unbaselined - repmat(mean(y_pos_unbaselined(:, floor(baseline_int(1)*f_s):floor(baseline_int(2)*f_s), :, :), 2, "omitnan"), 1, size(y_pos_unbaselined, 2), 1, 1);
  278. %
  279. % % DVA conversion
  280. % x_pos_dva = x_pos_px.*dva_per_px;
  281. % y_pos_dva = y_pos_px.*dva_per_px;
  282. %
  283. %
  284. % % Note trials with outlier baselines
  285. % baseline_outlier_trials = [];
  286. % for p = 1:length(participants)
  287. % baselines = mean(x_pos_unbaselined(:, floor(baseline_int(1)*f_s):floor(baseline_int(2)*f_s), :, :), 2, "omitnan");
  288. % baselines_avgd = squeeze(mean(baselines(:, :, :, p), 3, "omitnan"));
  289. % baselines_y = mean(y_pos_unbaselined(:, floor(baseline_int(1)*f_s):floor(baseline_int(2)*f_s), :, :), 2, "omitnan");
  290. % baselines_avgd_y = squeeze(mean(baselines_y(:, :, :, p), 3, "omitnan"));
  291. %
  292. % % Find stdev
  293. % threshold = 2*std(baselines_avgd, "omitnan"); avg_base = mean(baselines_avgd, "omitnan");
  294. % threshold_y = 2*std(baselines_avgd_y, "omitnan"); avg_base_y = mean(baselines_avgd_y, "omitnan");
  295. %
  296. % % Trial idxs
  297. % baseline_outlier = ((baselines_avgd) > (avg_base + threshold)) | ((baselines_avgd) < (avg_base - threshold));
  298. % baseline_outlier_y = ((baselines_avgd_y) > (avg_base_y + threshold_y)) | ((baselines_avgd_y) < (avg_base_y - threshold_y));
  299. %
  300. % baseline_outlier_trials(:, p) = baseline_outlier | baseline_outlier_y;
  301. % end
  302. % %%

Part6_GazeBias.m, no license · at the source

Overview

Authors: Dan Wang1, Kabir Arora1, Jan Theeuwes2,3,4, Stefan Van der Stigchel1, Surya Gayet1, Samson Chota1
  1. Department of Experimental Psychology, Helmholtz Institute, Utrecht University,Utrecht, Netherlands
  2. Department of Experimental and Applied Psychology, Vrije Universiteit Amsterdam,Amsterdam, Netherlands
  3. Institute Brain and Behavior Amsterdam (iBBA), Amsterdam, Netherlands
  4. William James Center for Research, ISPA-Instituto Universitario,Lisbon, Portugal
Institutions: Utrecht University (Netherlands); Vrije Universiteit Amsterdam (Netherlands); William James Center for Research (Portugal)
Journal: Communications biology, volume 9, issue 1, article 779
Dates: received 23 September 2025; accepted 24 March 2026; published online 9 April 2026
Type: Research article · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1038/s42003-026-09992-2 · PMID 41957277 · PMCID PMC13249964 · OpenAlex W4413752546
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: EEG (modality), human (organism)
Methods: Spectral & time-frequency, Statistics, Smoothing, state filtering, decompositions, Connectivity, Preprocessing, fMRI & imaging, Physiology & signal measures
Keywords: Attention, Sensory processing
MeSH: Attention*, Goals*, Visual Cortex*, Visual Perception*, Electroencephalography, Female, Humans, Male, Photic Stimulation (* major topic)
Topic: Visual Attention and Saliency Detection (Computer Vision and Pattern Recognition, Computer Science), according to OpenAlex
Funding: China Scholarship Council (202308510050); J.T. is supported by a European Research Council (ERC) advanced grant 833029 [LEARNATTEND] and by a NWO Open competition grant 25 406.21.GO.034
Citations: cited by 2 papers (Europe PMC); 48 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.

Repository

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

OSF szuxa

License: none: the authors keep all their rights
State: the link answers, verified on 29 September 2026
Evidence: files inventoried
Languages: MATLAB (9)
Size: 18 files, 9 scripts
Software Heritage: not checked
Found in: “Code availability”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 29 September 2026: the link answers (HTTP 200)
  • 29 September 2026: the link answers (HTTP 200)
9 files
At the source: osf.io/szuxa/

Code availability statement

The paper has a code 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/s42003-026-09992-2.

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;
  • 9 scripts, each with its path and the digest of its content;
  • 1 match 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 statement

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

  • it says that the data are available on request

Read it in the paper: doi.org/10.1038/s42003-026-09992-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, 29 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 6 authors, 2 keywords, 9 MeSH terms, 2 funders, 46 references.

Cite

This paper

Wang, D., Arora, K., Theeuwes, J., Van der Stigchel, S., Gayet, S., & Chota, S. (2026). Dynamic competition between bottom-up saliency and top-down goals in early visual cortex. Communications biology, 9(1), 779. https://doi.org/10.1038/s42003-026-09992-2

BibTeX

@article{wang2026dynamic,
author = {Wang, Dan and Arora, Kabir and Theeuwes, Jan and Van der Stigchel, Stefan and Gayet, Surya and Chota, Samson},
title = {{Dynamic competition between bottom-up saliency and top-down goals in early visual cortex}},
journal = {Communications biology},
year = {2026},
month = apr,
volume = {9},
number = {1},
pages = {779},
publisher = {Nature Publishing Group},
issn = {2399-3642},
doi = {10.1038/s42003-026-09992-2},
url = {https://doi.org/10.1038/s42003-026-09992-2},
pmid = {41957277},
pmcid = {PMC13249964}
}

RIS

TY - JOUR
AU - Wang, Dan
AU - Arora, Kabir
AU - Theeuwes, Jan
AU - Van der Stigchel, Stefan
AU - Gayet, Surya
AU - Chota, Samson
TI - Dynamic competition between bottom-up saliency and top-down goals in early visual cortex
T2 - Communications biology
J2 - Commun Biol
PY - 2026
DA - 2026/04/09
VL - 9
IS - 1
SP - 779
SN - 2399-3642
PB - Nature Publishing Group
DO - 10.1038/s42003-026-09992-2
UR - https://doi.org/10.1038/s42003-026-09992-2
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s42003-026-09992-2",
"type": "article-journal",
"title": "Dynamic competition between bottom-up saliency and top-down goals in early visual cortex",
"container-title": "Communications biology",
"author": [
{
"family": "Wang",
"given": "Dan"
},
{
"family": "Arora",
"given": "Kabir"
},
{
"family": "Theeuwes",
"given": "Jan"
},
{
"family": "Van der Stigchel",
"given": "Stefan"
},
{
"family": "Gayet",
"given": "Surya"
},
{
"family": "Chota",
"given": "Samson"
}
],
"container-title-short": "Commun Biol",
"volume": "9",
"issue": "1",
"page": "779",
"DOI": "10.1038/s42003-026-09992-2",
"PMID": "41957277",
"PMCID": "PMC13249964",
"ISSN": "2399-3642",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s42003-026-09992-2",
"language": "en",
"issued": {
"date-parts": [
[
2026,
4,
9
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1038/s41467-026-73916-1 [code]
Learned statistical regularity modulates anticipatory micro-saccades toward suppressed distractor locations.
Journal: Nature communications
In common: Statistics and Machine Learning Toolbox, EEG, 7 references, author Jan Theeuwes
[2] doi:10.1126/sciadv.aea3919 [code]
Hierarchical brain dynamics supporting visual perceptual transitions.
Journal: Science advances
In common: Statistics and Machine Learning Toolbox, 7 references
[3] doi:10.7554/elife.106050
Cross-modal interaction of human alpha activity does not reflect inhibition of early sensory processing in a frequency-tagging study using EEG and MEG.
Journal: eLife
In common: EEG, 5 references
[4] doi:10.1186/s12915-026-02630-7 [code]
Phasic modulation of attentional rhythmic sampling according to task demands.
Journal: BMC biology
In common: FieldTrip, Statistics and Machine Learning Toolbox, EEG, 2 references
[5] doi:10.1111/ejn.70670 [code]
Cross-Night Modulation of Change Detection ERPs to Foreign Speech Sound Features During N2 Sleep.
Journal: The European journal of neuroscience
In common: FieldTrip, Statistics and Machine Learning Toolbox, EEG, 2 references
[6] 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, Statistics and Machine Learning Toolbox, EEG, 2 references
[7] doi:10.7554/elife.108408 [code]
Frequency and laminar profile of feature-specific visual activity revealed by interleaved EEG-fMRI.
Journal: eLife
In common: FieldTrip, Statistics and Machine Learning Toolbox, EEG, 2 references
[8] doi:10.1371/journal.pbio.3003938 [code]
Theta oscillations tag episodic memories for sleep-dependent consolidation.
Journal: PLoS biology
In common: FieldTrip, Statistics and Machine Learning Toolbox, EEG, 2 references
[9] doi:10.7554/elife.107088 [code]
Development of auditory and spontaneous movement responses to music over the first postnatal year.
Journal: eLife
In common: FieldTrip, Statistics and Machine Learning Toolbox, EEG, 2 references
[10] doi:10.1038/s41467-026-73553-8 [code]
Universal rhythmic architecture uncovers two modes of neural dynamics.
Journal: Nature communications
In common: FieldTrip, Statistics and Machine Learning Toolbox, EEG, 2 references

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

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.