OSCR

Changes in visuocortical engagement and oscillatory brain activity during associative learning.

Code ↔ Paper

2 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 2 matches
  1. [1] § Data recording and processing › Statistical analyses ↔ Code/ggtone_postpro_final.m, lines 832–839 · score 0.93 · 0–700 ms, 1300–2000 ms, 700–1300 ms
  2. [2] § Data recording and processing › SSVEP ↔ Code/ggtone_postpro_final.m, lines 187–256 · score 0.52 · single trial spectra, attenuates, spectral, noise, Gabor, RESS

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 · 845 lines · 29 KB · no license · 2 matches

  1. %% GaborGen Tone post-processing code - Final for repository
  2. %% SSVEP RESS Method
  3. % Set working directory to the RESS data folder
  4. clear
  5. clc
  6. cd ;
  7. % Get trial files for RESS analysis
  8. filemat = getfilesindir(pwd, 'gaborgentone*trls*.pow3.mat');
  9. %
  10. % Loop over subjects to compute RESS spatial filters for each group of 4 conditions.
  11. for filestart = 1:4:88
  12. filemat_actual = filemat(filestart:filestart+3, :);
  13. pause(1)
  14. RESS_filegroups23(filemat_actual, 1:120, 301:1300, 500, 15, 0); %1000 sample points from baseline to sound onset = 2000 ms
  15. end
  16. % Merge RESS power files across conditions
  17. filemat = getfilesindir(pwd, 'gabor*RESSpow*');
  18. mergemulticons(filemat, 4, 'GM22.RESSpow');
  19. cd
  20. filemat = getfilesindir(pwd, 'gabor*RESSpow*');
  21. % Load merged condition files for plotting/statistics
  22. Csplus = ReadAvgFile('GM22.RESSpow.at1');
  23. GS1 = ReadAvgFile('GM22.RESSpow.at2');
  24. GS2 = ReadAvgFile('GM22.RESSpow.at3');
  25. GS3 = ReadAvgFile('GM22.RESSpow.at4');
  26. % Build a 4D matrix for statistics: channels x frequencies x subjects x conditions
  27. [repmatress] = makerepmat(filemat, 22, 4, []);
  28. load repmatress.mat;
  29. % Perform an F test (ANOVA-like contrast) on RESS power over frequency
  30. for frequency = 1:500
  31. temprep = squeeze(repmatress(:, frequency, :, :));
  32. repmatress2 = reshape(temprep, [1, 22, 4]);
  33. [Fcontmat_linear_ress(:, frequency),~,~,~,~] = contrast_rep_sign(repmatress2, [2 1 -1 -2]);
  34. end
  35. SaveAvgFile('Fcontmat_linear_ress.at',Fcontmat_linear_ress,[],[],2000)
  36. % Plot
  37. faxisFFT = 0:.5:250;
  38. figure
  39. plot(faxisFFT(1:40), Csplus(1:40), 'r', LineWidth=3), hold on,
  40. plot(faxisFFT(1:40), GS1(1:40), 'm', LineWidth=3),
  41. plot(faxisFFT(1:40), GS2(1:40), 'b', LineWidth=3),
  42. plot(faxisFFT(1:40), GS3(1:40), 'g', LineWidth=3),
  43. title 'RESS Spectra by Condition', fontsize = 22, legend
  44. %% open emegs and plot ssvep
  45. emegs2d
  46. %% extract the power at 15 Hz for an anova-like spreadsheet in jasp
  47. filemat = getfilesindir(pwd, '*RESSpow.at')
  48. [outmat] = extractstats(filemat, 4, 1, 31, []);
  49. bar(faxisFFT(5:100), GS3(5:100), 'k')
  50. %% RESS Linear effect Bayesian Bootstrapping and Permutation
  51. % uses the repmatress
  52. clear
  53. clc
  54. % add location of RESS files
  55. cd
  56. load repmatress.mat;
  57. linearBootstrap =[];
  58. size(repmatress)
  59. nsubjects = size(repmatress, 3);
  60. % make distributions of effects
  61. lineareffect = [2 1 -1 -2];
  62. % the linear effect distribution
  63. for elec = 1:size(repmatress,1)
  64. for frequency = 1:size(repmatress,2)
  65. for draw = 1:2000
  66. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  67. linearBootstrap(elec, frequency, draw) = mean(squeeze(repmatress(elec, frequency, bootstrapvec, : )), 1) * lineareffect';
  68. end
  69. end
  70. end
  71. % the null distribution permutation
  72. linearBootstrapPerm = []
  73. elec = 1;
  74. for perm = 1:2000
  75. repeatmatperm_Ress = repmatress;
  76. for subject = 1:nsubjects
  77. repeatmatperm_Ress(: , :, subject, 1:4) = repmatress(: , :, subject, randperm(4));
  78. end
  79. for frequency = 1:size(repmatress,2)
  80. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  81. linearBootstrapPerm(elec, frequency, perm) = mean(squeeze(repeatmatperm_Ress(elec, frequency, bootstrapvec, : )), 1) * lineareffect';
  82. end
  83. disp(['draw ', num2str(perm)])
  84. end
  85. % Compare the bootstrapped with permuted data
  86. for elec = 1:size(repmatress,1)
  87. for frequency = 1:size(repmatress,2)
  88. BFmap_RESS_linear(elec, frequency) = bootstrap2BF_z(squeeze(linearBootstrap(elec, frequency, :)),squeeze(linearBootstrapPerm(elec, frequency, :)), 0);
  89. end
  90. end
  91. faxisFFT = 0:.5:250;
  92. faxisFFT(31)
  93. plot(BFmap_RESS_linear)
  94. title 'Bayes Factors Linear RESS'
  95. BFmap_RESS_linear(31)
  96. log10(BFmap_RESS_linear(31))
  97. %% RESS Selective effect Bayesian Bootstrapping and Permutation
  98. clear
  99. clc
  100. load repmatress.mat; % 1 electrode, 500 freqs, 22 people, 4 conds
  101. % uses the repmatress
  102. selectBootstrap_csplus =[];
  103. size(repmatress)
  104. nsubjects = size(repmatress, 3);
  105. selecteffect = [3 -1 -1 -1];
  106. % the linear effect distribution
  107. for elec = 1:size(repmatress,1)
  108. for frequency = 1:size(repmatress,2)
  109. for draw = 1:2000
  110. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  111. selectBootstrap_csplus(elec, frequency, draw) = mean(squeeze(repmatress(elec, frequency, bootstrapvec, : )), 1) * selecteffect';
  112. end
  113. end
  114. end
  115. % the null distribution permutation
  116. selectBootstrapPerm_csplus = []
  117. elec = 1;
  118. for perm = 1:2000
  119. repeatmatperm_Ress = repmatress;
  120. for subject = 1:nsubjects
  121. repeatmatperm_Ress(: , :, subject, 1:4) = repmatress(: , :, subject, randperm(4));
  122. end
  123. for frequency = 1:size(repmatress,2)
  124. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  125. selectBootstrapPerm_csplus(elec, frequency, perm) = mean(squeeze(repeatmatperm_Ress(elec, frequency, bootstrapvec, : )), 1) * selecteffect';
  126. end
  127. disp(['draw ', num2str(perm)])
  128. end
  129. % Compare the bootstrapped with permuted data
  130. for elec = 1:size(repmatress,1)
  131. for frequency = 1:size(repmatress,2)
  132. BFmap_RESS_select_cs(elec, frequency) = bootstrap2BF_z(squeeze(selectBootstrap_csplus(elec, frequency, :)), ...
  133. squeeze(selectBootstrapPerm_csplus(elec, frequency, :)), 0);
  134. end
  135. end
  136. faxisFFT = 0:.5:250;
  137. faxisFFT(31) %15 hz
  138. figure, plot(BFmap_RESS_select_cs)
  139. BFmap_RESS_select_cs(31) % result = .484
  140. log10(.484)
  141. %% SSVEP Single-Trial Spectra Method
  142. clear
  143. clc
  144. % power from the FFT3d (normal FFT, no RESS) is an aletrnative to the RESS, we examine this next:
  145. cd ;
  146. % does spectral analysis on each single trial and then
  147. % averages them together within conditions) which gives combo of steady state response from each
  148. % single trial and also all spontaneous (noise) frequencies will be
  149. % retained bc they are not attenuated by any type of averaging; (each trial
  150. % may be in different phase but phase information is not used)
  151. %only want original trls files (not PLI or POW)
  152. filemat = getfilesindir(pwd, 'gabor*trls*.mat'); %dont need to do this now
  153. % Compute FFT on each trial (using the desired time window and frequency resolution)
  154. get_FFT_mat3d(filemat, 301:1300, 500);
  155. % Get FFT spectrum files ('.spec') and merge across conditions
  156. cd
  157. filemat = getfilesindir(pwd, '*.spec');
  158. mergemulticons(filemat, 4, 'GM22.singletrialspec');
  159. [outmat] = extractstats(filemat, 4, [70 71 74 75 76 82 83] , 31, []);
  160. epoch = 301:1300;
  161. sizeEpochInSecs = length(epoch)*2/1000;
  162. fstep = 1/sizeEpochInSecs;
  163. faxis = 0:.5:250;
  164. % Get all matching files first
  165. filemat_all = getfilesindir(pwd, 'gaborgentone_*.trls.*.mat');
  166. % Now filter out the ones that contain '.trls.21.'
  167. exclude_pattern = 'trls.21.mat';
  168. keep_idx = ~contains(string(filemat_all), '.trls.21.');
  169. % Apply logical indexing to keep only desired filenames
  170. filemat = filemat_all(keep_idx, :);
  171. for i = 1:size(filemat, 1)
  172. % Load file and extract matrix
  173. fname = deblank(filemat(i, :));
  174. data = load(fname, '-mat');
  175. % Assumes the variable is called Mat3D
  176. if isfield(data, 'Mat3D')
  177. dat = data.Mat3D;
  178. else
  179. warning(['Mat3D not found in file: ' fname]);
  180. continue
  181. end
  182. % Average over 3rd dimension
  183. avgmat = mean(dat, 3, 'omitnan');
  184. % Generate output filename
  185. [~, name, ~] = fileparts(fname);
  186. outfile = [name '_avg.mat'];
  187. % % Save the averaged matrix
  188. % save(outfile, 'avgmat', '-mat');
  189. % disp(['Saved: ' outfile])
  190. end
  191. filematavg = getfilesindir(pwd, 'gaborgentone_*.trls.*_avg.mat');
  192. ERP = avgmats_mat(filematavg, 'ERP_Oz.mat');
  193. ERP_Oz = load('ERP_Oz.mat');
  194. ERP_Oz = ERP_Oz.avgmat;
  195. figure
  196. plot(taxis, ERP_Oz(75, :));
  197. %% Get FFT spectrum files ('.spec') and merge across conditions
  198. cd
  199. filemat = getfilesindir(pwd, '*.spec');
  200. mergemulticons(filemat, 4, 'GM22.singletrialspec');
  201. [outmat] = extractstats(filemat, 4, [70 71 74 75 76 82 83] , 31, []);
  202. % we saved the stat matrix to a file called resspower4cons.csv
  203. % to further examine this with method with higher sensitivity, we examined the largest effect visible post-hoc
  204. % Build repmat for statistical analysis: sensors x frequencies x subjects x conditions
  205. [repmatsingleSpec] = makerepmat(filemat, 22, 4, []);
  206. %
  207. [Fcontmat,rcontmat,MScont,MScs, dfcs]=contrast_rep_sign(squeeze(repmatsingleSpec(:, 31, :, :)) ,[1.5 .5 -.5 -1.5]);
  208. % now do the permutation test to see if this survives
  209. for draw = 1:1000
  210. for x = 1:22
  211. repmatsingleSpec(:, :, x, 1:4) = repmatsingleSpec(:, :,x, randperm(4));
  212. end
  213. [Fcontmat,rcontmat,MScont,MScs, dfcs]=contrast_rep_sign(squeeze(repmatsingleSpec(:, 31, :, :)) ,[1.5 .5 -.5 -1.5]);
  214. dist(draw) = max(Fcontmat);
  215. if draw./100 == round(draw./100), fprintf('.'), end
  216. end
  217. hist(dist, 50)
  218. quantile(dist, .95)
  219. % Load merged condition files for plotting/statistics
  220. csplus = ReadAvgFile('GM22.singletrialspec.at1');
  221. GS1 = ReadAvgFile('GM22.singletrialspec.at2');
  222. GS2 = ReadAvgFile('GM22.singletrialspec.at3');
  223. GS3 = ReadAvgFile('GM22.singletrialspec.at4');
  224. %
  225. figure
  226. plot(faxisFFT(1:50),GS1(75, 1:50), LineWidth=2),hold on,
  227. plot(faxisFFT(1:50),GS2(75, 1:50), LineWidth=2),
  228. plot(faxisFFT(1:50),GS3(75, 1:50), LineWidth=2),
  229. plot(faxisFFT(1:50),csplus(70, 1:50), 'r', LineWidth=2)
  230. title('Frequency Spectra by Condition', 'FontSize', 22)
  231. xlabel('Frequency (Hz)', 'FontSize', 20) % Label for x-axis
  232. ylabel('Power', 'FontSize', 20) % Label for y-axis
  233. legend({'GS1', 'GS2', 'GS3', 'CS+'}, 'FontSize', 20) % Adding legend
  234. ssvep21 = csplus(75,31);
  235. ssvep22 = GS1(75,31);
  236. ssvep23 = GS2(75,31);
  237. ssvep24 = GS3(75,31), 2;
  238. % Transpose if needed so rows = subjects, columns = conditions
  239. alpha_gm = [alphagm21; alphagm22; alphagm23; alphagm24]'; % size: [4 x N_conditions]
  240. alpha_mean = mean(alpha_gm, 1); % Mean across participants
  241. alpha_sem = std(alpha_gm, 0, 1) / sqrt(size(alpha_gm, 1)); % Standard Error of Mean (SEM)
  242. % Plot with error bars
  243. figure;
  244. % bar(alpha_mean);
  245. hold on
  246. errorbar(1:length(alpha_mean), alpha_mean, alpha_sem);
  247. xlabel('Condition');
  248. ylabel('Alpha Power (Grand Mean ± SEM)');
  249. xticks(1:length(alpha_mean));
  250. xticklabels({'Cond1','Cond2','Cond3','Cond4'});
  251. title('Alpha Power Across Conditions');
  252. % examine with emegs2d
  253. emegs2d
  254. %% Bayes bootstrapping for single-trial spectra - linear
  255. clear
  256. clc
  257. cd
  258. % uses the repmatsingleSpec: 129 channels, 500 freqs, 22 people, 4 conds
  259. load('repmatsingleSpec.mat')
  260. linearBootstrap =[];
  261. size(repmatsingleSpec)
  262. nsubjects = size(repmatsingleSpec, 3);
  263. % make distributions of effects
  264. lineareffect = [2 1 -1 -2];
  265. % the linear effect distribution
  266. for elec = 1:size(repmatsingleSpec,1)
  267. for frequency = 1:size(repmatsingleSpec,2)
  268. for draw = 1:2000
  269. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  270. linearBootstrap(elec, frequency, draw) = mean(squeeze(repmatsingleSpec(elec, frequency, bootstrapvec, : )), 1) * lineareffect';
  271. end
  272. end
  273. disp(['draw ', num2str(draw)])
  274. end
  275. %%
  276. cd
  277. load('linearBootstrap_singleSpec.mat')
  278. %%
  279. % the null distribution permutation
  280. linearBootstrapPerm = [];
  281. for perm = 1:2000
  282. repeatmatperm_singleSpec = repmatsingleSpec;
  283. for subject = 1:nsubjects
  284. repeatmatperm_singleSpec(: , :, subject, 1:4) = repmatsingleSpec(: , :, subject, randperm(4));
  285. end
  286. for elec = 1:size(repmatsingleSpec,1)
  287. for frequency = 1:size(repmatsingleSpec,2)
  288. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  289. linearBootstrapPerm(elec, frequency, perm) = mean(squeeze(repeatmatperm_singleSpec(elec, frequency, bootstrapvec, : )), 1) * lineareffect';
  290. end
  291. end
  292. disp(['draw ', num2str(perm)])
  293. end
  294. %% load permuted bf
  295. load('single_Spec_linearBootPerm.mat')
  296. %% Compare the bootstrapped with permuted data
  297. for elec = 1:size(repmatsingleSpec,1)
  298. for frequency = 1:size(repmatsingleSpec,2)
  299. BFmap_singleSpec_linear(elec, frequency) = bootstrap2BF_z(squeeze(linearBootstrap(elec, frequency, :)),squeeze(linearBootstrapPerm(elec, frequency, :)), 0);
  300. end
  301. disp(['elec', num2str(elec)])
  302. end
  303. faxisFFT = 0:.5:250;
  304. faxisFFT(31) %15 hz
  305. figure, plot(BFmap_singleSpec_linear(:, 31)) %select frequency of interest for all channels (15 hz which is the 31st bin)
  306. cd
  307. % use SaveAvgFile to create file to use in emegs for heads
  308. AvgMat = BFmap_singleSpec_linear;
  309. SaveAvgFile('BF_singleSpec_linear.at',AvgMat,[],[], 1,[],[],[],[],1)
  310. log10_BFssVEP_linear = log10(BFmap_singleSpec_linear);
  311. SaveAvgFile('log10_BFssVEP_linear.at', log10_BFssVEP_linear,[],[], 1,[],[],[],[],1)
  312. log10_BFssVEP_linear(75, 31)
  313. figure, plot(BFmap_singleSpec_linear(:, 31)) %select frequency of interest for all channels (15 hz which is the 31st bin)
  314. size(repmatsingleSpec)
  315. plot(squeeze(repmatsingleSpec(83, 31, :, :)))
  316. plot(squeeze(repmatsingleSpec(83, 31, :, :))')
  317. plot(squeeze(repmatsingleSpec(83, 31, :, 1))-squeeze(repmatsingleSpec(83, 31, :, 4)))
  318. bar(squeeze(repmatsingleSpec(83, 31, :, 1))-squeeze(repmatsingleSpec(83, 31, :, 4)))
  319. bar(mean(squeeze(repmatsingleSpec(75, 31, :, :)))')
  320. %% selective ssvep single trial spectra, bayes bootstrapping for single-trial spectra
  321. clear
  322. clc
  323. cd
  324. % uses the repmatsingleSpec: 129 channels, 500 freqs, 22 people, 4 conds
  325. load('repmatsingleSpec.mat')
  326. selectBootstrap =[];
  327. size(repmatsingleSpec)
  328. nsubjects = size(repmatsingleSpec, 3);
  329. % make distributions of effects
  330. selecteffect = [3 -1 -1 -1];
  331. % the all or nothing effect distribution
  332. for elec = 1:size(repmatsingleSpec,1)
  333. for frequency = 1:size(repmatsingleSpec,2)
  334. for draw = 1:2000
  335. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  336. selectBootstrap(elec, frequency, draw) = mean(squeeze(repmatsingleSpec(elec, frequency, bootstrapvec, : )), 1) * selecteffect';
  337. end
  338. end
  339. disp(['elec ', num2str(elec)])
  340. end
  341. %% selective pattern
  342. % the null distribution permutation
  343. selectBootstrapPerm = [];
  344. for perm = 1:2000
  345. repeatmatperm_singleSpec = repmatsingleSpec;
  346. for subject = 1:nsubjects
  347. repeatmatperm_singleSpec(: , :, subject, 1:4) = repmatsingleSpec(: , :, subject, randperm(4));
  348. end
  349. for elec = 1:size(repmatsingleSpec,1)
  350. for frequency = 1:size(repmatsingleSpec,2)
  351. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  352. selectBootstrapPerm(elec, frequency, perm) = mean(squeeze(repeatmatperm_singleSpec(elec, frequency, bootstrapvec, : )), 1) * lineareffect';
  353. end
  354. end
  355. disp(['draw ', num2str(perm)])
  356. end
  357. %saved as selectBootstrapPerm_singleSpec.mat
  358. %% Compare the bootstrapped with permuted data
  359. for elec = 1:size(repmatsingleSpec,1)
  360. for frequency = 1:size(repmatsingleSpec,2)
  361. BFmap_singleSpec_select(elec, frequency) = bootstrap2BF_z(squeeze(selectBootstrap(elec, frequency, :)),squeeze(selectBootstrapPerm(elec, frequency, :)), 0);
  362. end
  363. disp(['elec', num2str(elec)])
  364. end
  365. faxisFFT = 0:.5:250;
  366. faxisFFT(31) %15 hz
  367. figure, plot(BFmap_singleSpec_select(:, 31)) %select frequency of interest for all channels (15 hz which is the 31st bin)
  368. %
  369. SaveAvgFile('BF_singleSpec_select.at',BFmap_singleSpec_select,[],[], 1,[],[],[],[],1)
  370. %need to make heads for single trial spec;
  371. emegs2d
  372. log10_BFssVEP_select = log10(BFmap_singleSpec_select);
  373. SaveAvgFile('log10_BFssVEP_select.at', log10_BFssVEP_select,[],[], 1,[],[],[],[],1)
  374. log10_BFssVEP_select(75, 31)
  375. %% Alpha Wavelet Analysis
  376. clear
  377. clc
  378. % Set working directory
  379. cd
  380. % Define frequency and time axes for wavelet analysis
  381. faxisall = 0:1000/3600:250; % full frequency axis for wavelets
  382. faxis = faxisall(11:4:110); % frequency axis used for plotting
  383. taxis = (-598:2:3000); % time axis in ms
  384. % Run wavelet analysis on trial files (returns power, phase-locking index, etc.)
  385. filemat = getfilesindir(pwd, 'gabor*trls.2*.mat');
  386. [WaPower, PLI, PLIdiff] = wavelet_app_matfiles(filemat, 500, 11, 110, 4, 200:300, []); %baseline corr but not an issue bc its before waveletting
  387. % Process power files and group by condition:
  388. filematpow = getfilesindir(pwd, 'gabor*pow3.mat');
  389. filematpow21 = filematpow(1:4:end, :);
  390. filematpow22 = filematpow(2:4:end, :);
  391. filematpow23 = filematpow(3:4:end, :);
  392. filematpow24 = filematpow(4:4:end, :);
  393. % Compute grand means for each condition
  394. GM22pow3_21 = avgmats_mat(filematpow21, 'GM22.at21.pow3.mat');
  395. GM22pow3_22 = avgmats_mat(filematpow22, 'GM22.at22.pow3.mat');
  396. GM22pow3_23 = avgmats_mat(filematpow23, 'GM22.at23.pow3.mat');
  397. GM22pow3_24 = avgmats_mat(filematpow24, 'GM22.at24.pow3.mat');
  398. gm22 = getfilesindir(pwd, 'GM22.at2*'); %all except CS+ condition
  399. GM22_all = avgmats_mat(gm22, 'GM22_all.mat');
  400. % GM22_all = permute(GM22_all,[2 1 3]);
  401. SaveAvgFile('GM22_all.at',GM22_all,[],[], 1,[],[],[],[],1)
  402. %% time-freq plot for paper for channel 75 avg over all except cs+
  403. % filematGM = getfilesindir(pwd, 'GM22.at2*.pow3.mat')
  404. % GM22_all = avgmats_mat(filematGM, 'GM22_all.mat');
  405. load('GM22_all.mat')
  406. GM22_all_bsl = bslcorrWAMat_percent(GM22_all, 125:240);
  407. % Define frequency and time axes for wavelet analysis
  408. faxisall = 0:1000/3600:250; % full frequency axis for wavelets
  409. faxis = faxisall(11:4:110); % frequency axis used for plotting
  410. taxis = -598:2:3000; % time axis in ms
  411. % Plot baseline-corrected contours
  412. figure
  413. subplot(2,1,1), contourf(taxis, faxis, squeeze(GM22_all(sensor,:,:))'), colorbar
  414. subplot(2,1,2), contourf(taxis, faxis, squeeze(GM22_all_bsl(sensor,:,:))'), colorbar
  415. %%
  416. %load grand means for each condition
  417. GM22pow3_21 = importdata('GM22.at21.pow3.mat', 'avgmat');
  418. GM22pow3_22 = importdata('GM22.at22.pow3.mat', 'avgmat');
  419. GM22pow3_23 = importdata('GM22.at23.pow3.mat', 'avgmat');
  420. GM22pow3_24 = importdata('GM22.at24.pow3.mat', 'avgmat');
  421. GM22pow3_21 = GM22pow3_21(:, :, 8);
  422. GM22pow3_22 = GM22pow3_22(:, :, 8);
  423. GM22pow3_23 = GM22pow3_23(:, :, 8);
  424. GM22pow3_24 = GM22pow3_24(:, :, 8);
  425. %save as at files for emegs
  426. SaveAvgFile('GM22powAlpha_21_alpha.at',GM22pow3_21,[],[], 1,[],[],[],[],1)
  427. SaveAvgFile('GM22powAlpha_22_alpha.at',GM22pow3_22,[],[], 1,[],[],[],[],1)
  428. SaveAvgFile('GM22powAlpha_23_alpha.at',GM22pow3_23,[],[], 1,[],[],[],[],1)
  429. SaveAvgFile('GM22powAlpha_24_alpha.at',GM22pow3_24,[],[], 1,[],[],[],[],1)
  430. emegs2d
  431. % Plot contour plots for a selected sensor
  432. sensor = 75;
  433. faxisindex = 4:20;
  434. figure
  435. subplot(4,1,1), contourf(taxis(50:end-50), faxis(faxisindex), squeeze(GM22pow3_21(sensor,50:end-50, faxisindex))', 15)%, caxis([.4 5]),colorbar
  436. subplot(4,1,2), contourf(taxis(50:end-50), faxis(faxisindex), squeeze(GM22pow3_22(sensor,50:end-50, faxisindex))', 15)%, caxis([.4 5]),colorbar
  437. subplot(4,1,3), contourf(taxis(50:end-50), faxis(faxisindex), squeeze(GM22pow3_23(sensor,50:end-50, faxisindex))', 15)%, caxis([.4 5]),colorbar
  438. subplot(4,1,4), contourf(taxis(50:end-50), faxis(faxisindex), squeeze(GM22pow3_24(sensor,50:end-50, faxisindex))', 15)%, caxis([.4 5]),colorbar
  439. sgtitle(['Average Power by Condition: Sensor ' num2str(sensor)])%
  440. alphagm21 = GM22pow3_21(75,450:800);
  441. alphagm22 = GM22pow3_22(75,450:800);
  442. alphagm23 = GM22pow3_23(75,450:800);
  443. alphagm24 = GM22pow3_24(75,450:800);
  444. alpha_gm = [alphagm21; alphagm22; alphagm23; alphagm24]';
  445. alpha_mean = mean(alpha_gm, 1); % Mean across participants
  446. alpha_sem = std(alpha_gm, 0, 1) / sqrt(size(alpha_gm, 1)); % Standard Error of Mean (SEM)
  447. % Plot with error bars
  448. figure;
  449. bar(alpha_mean);
  450. hold on
  451. errorbar(1:length(alpha_mean), alpha_mean, alpha_sem);
  452. xlabel('Condition');
  453. ylabel('Alpha Power (Grand Mean ± SEM)');
  454. xticks(1:length(alpha_mean));
  455. xticklabels({'Cond1','Cond2','Cond3','Cond4'});
  456. title('Alpha Power Across Conditions');
  457. %% Baseline-correct the grand means (using baseline indices 125:240)
  458. GM22pow3_21_bsl = bslcorrWAMat_percent(GM22pow3_21, 75:225);
  459. GM22pow3_22_bsl = bslcorrWAMat_percent(GM22pow3_22, 75:225);
  460. GM22pow3_23_bsl = bslcorrWAMat_percent(GM22pow3_23, 75:225);
  461. GM22pow3_24_bsl = bslcorrWAMat_percent(GM22pow3_24, 75:225);
  462. % %save as at files for emegs
  463. % SaveAvgFile('GM22powAlpha_21_alpha_bsl.at',GM22pow3_21,[],[], 1,[],[],[],[],1)
  464. % SaveAvgFile('GM22powAlpha_22_alpha_bsl.at',GM22pow3_22,[],[], 1,[],[],[],[],1)
  465. % SaveAvgFile('GM22powAlpha_23_alpha_bsl.at',GM22pow3_23,[],[], 1,[],[],[],[],1)
  466. % SaveAvgFile('GM22powAlpha_24_alpha_bsl.at',GM22pow3_24,[],[], 1,[],[],[],[],1)
  467. % Plot baseline-corrected contoursfor alpha frequencies
  468. figure
  469. % faxisindex = 6:18;
  470. faxisindex = 8;
  471. sensor = 75;%
  472. subplot(4,1,1), contourf(taxis(50:end-50), faxis(faxisindex), squeeze(GM22pow3_21_bsl(sensor,50:end-50,faxisindex))')%, colorbar%, caxis([-15 100])
  473. subplot(4,1,2), contourf(taxis(50:end-50), faxis(faxisindex), squeeze(GM22pow3_22_bsl(sensor,50:end-50,faxisindex))')%, colorbar%, caxis([-15 100])
  474. subplot(4,1,3), contourf(taxis(50:end-50), faxis(faxisindex), squeeze(GM22pow3_23_bsl(sensor,50:end-50,faxisindex))')%, colorbar%, caxis([-15 100])
  475. subplot(4,1,4), contourf(taxis(50:end-50), faxis(faxisindex), squeeze(GM22pow3_24_bsl(sensor,50:end-50,faxisindex))')%, colorbar%, caxis([-15 100])
  476. sgtitle(['Average Power by Condition: Sensor ' num2str(sensor)])
  477. time = 1050:1125;
  478. %plot alpha differences by condition over time
  479. figure
  480. plot(taxis(time), squeeze(GM22pow3_21_bsl(75, time)))
  481. hold on
  482. plot(taxis(time), squeeze(GM22pow3_22_bsl(75, time)))
  483. plot(taxis(time), squeeze(GM22pow3_23_bsl(75, time)))
  484. plot(taxis(time), squeeze(GM22pow3_24_bsl(75, time)))
  485. %% we used ttest3d to easily obtain 4-D arrays
  486. % [ttestmat21_22, ~, mat4d22] = ttest3d(filematpow21, filematpow22, 1, []);
  487. % [ttestmat21_23, ~, mat4d23] = ttest3d(filematpow21, filematpow23, 1, []);
  488. % [ttestmat21_24, mat4d21, mat4d24] = ttest3d(filematpow21, filematpow24, 1, []);
  489. %load in 4-d arrays
  490. load('mat4d21_csplus.mat')
  491. load('mat4d22_gs1.mat')
  492. load('mat4d23_gs2.mat')
  493. load('mat4d24_gs3.mat')
  494. repeatmat_alpha = cat(5, mat4d21(:, 1:10:end, :, :), mat4d22(:, 1:10:end, :, :), mat4d23(:, 1:10:end, :, :), mat4d24(:, 1:10:end, :, :));
  495. [ttestmat21_22, ~, mat4d22_bsl] = ttest3d(filematpow21, filematpow22, 1, [75:225]);
  496. [ttestmat21_23, ~, mat4d23_bsl] = ttest3d(filematpow21, filematpow23, 1, [75:225]);
  497. [ttestmat21_24, mat4d21_bsl, mat4d24_bsl] = ttest3d(filematpow21, filematpow24, 1, [75:225]);
  498. repeatmat_alpha_bsl = cat(5, mat4d21_bsl(:, 1:10:end, :, :), mat4d22_bsl(:, 1:10:end, :, :), mat4d23_bsl(:, 1:10:end, :, :), mat4d24_bsl(:, 1:10:end, :, :));
  499. % F test across time for the alpha band (averaging across 25 frequencies)
  500. for time = 1:180
  501. for frequency = 1:25
  502. [Fcontmat_linearWavelet(:, time, frequency),rcontmat,~,MScs, dfcs]=contrast_rep_sign(squeeze(repeatmat_alpha(:, time, frequency, :, :)),[-2 -1 1 2]);
  503. [Fcontmat_CSselectWavelet(:, time, frequency),rcontmat,MScont,MScs, dfcs]=contrast_rep_sign(squeeze(repeatmat_alpha(:, time, frequency, :, :)),[-3 1 1 1]);
  504. end
  505. if mod(time,100)==0, fprintf('.'); end
  506. end
  507. % Plot F-test results for alpha at selected sensors
  508. figure
  509. contourf(taxis(1:10:end), faxis, squeeze(Fcontmat_CSselectWavelet(72,:,:))'), colorbar
  510. title('F tests for alpha - Sensor 72')
  511. figure
  512. plot(taxis(1:10:end), Fcontmat_CSselectWavelet(72,:,8))
  513. title('F tests for alpha - Sensor 72')
  514. % Decimate and average data for further alpha statistics
  515. % first, we out the data into an array to have an easier time
  516. % to make this happen, we decimate the time dimension and the frequemcy
  517. % dimension
  518. mat4d4stats = squeeze(cat(5, mat4d21(:,1:10:1800,8,:), ...
  519. mat4d22(:,1:10:1800,8,:), ...
  520. mat4d23(:,1:10:1800,8,:), ...
  521. mat4d24(:,1:10:1800,8,:)));
  522. % from 550- to 1300 sample points is 500 post stimulus to 2000 ms post
  523. % stimulus
  524. % in decimated points that is 55 to 130
  525. outmat4statsalpha = squeeze(mean(mean(mat4d4stats([75 62 55 81 72],55:130,:,:))));
  526. %% do the bayesian bootstrap for Alpha Power;
  527. % uses the repeatmat
  528. linearBootstrap =[];
  529. size(repeatmat_alpha)
  530. nsubjects = size(repeatmat_alpha, 4);
  531. % make distributions of effects
  532. lineareffect = [-2 -1 1 2]; %expect this direction of effect
  533. % the linear effect distribution
  534. for draw = 1:2000
  535. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  536. for elec = 1:size(repeatmat_alpha,1)
  537. for timepoint = 1:size(repeatmat_alpha,2)
  538. for frequency = 1:size(repeatmat_alpha,3)
  539. linearBootstrap(elec, timepoint, frequency, draw) = ...
  540. mean(squeeze(repeatmat_alpha(elec, timepoint, frequency, bootstrapvec, : ))) * lineareffect';
  541. end
  542. end
  543. end
  544. disp(['draw ', num2str(draw)])
  545. end
  546. %%
  547. % the null distribution permutation
  548. linearBootstrapPerm = [];
  549. for perm = 1:2000
  550. repeatmat_alphaperm = repeatmat_alpha;
  551. for subject = 1:nsubjects
  552. repeatmat_alphaperm(:, :, :, subject, :) = repeatmat_alphaperm(:, :, :, subject, randperm(4));
  553. end
  554. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  555. for elec = 1:size(repeatmat_alpha,1)
  556. for timepoint = 1:size(repeatmat_alpha,2)
  557. for frequency = 1:size(repeatmat_alpha,3)
  558. linearBootstrapPerm(elec, timepoint, frequency, perm) = ...
  559. mean(squeeze(repeatmat_alphaperm(elec,timepoint, frequency, bootstrapvec, : ))) * lineareffect';
  560. end
  561. end
  562. end
  563. disp(['permutation ', num2str(perm)])
  564. end
  565. %% comparison between wavelet and permuted values
  566. % BFmap_alpha results in 129 channels x 180 timepoints x 25 frequencies
  567. for elec = 1:size(repeatmat_alpha,1)
  568. for timepoint = 1:size(repeatmat_alpha,2) %180 timepoints, decimated earlier
  569. for frequency = 1:size(repeatmat_alpha,3) %25 frequencies, decimated earlier (8th is alpha)
  570. BFmap_alpha(elec, timepoint, frequency) = bootstrap2BF_z(squeeze(linearBootstrap(elec,timepoint, frequency, :)), ...
  571. squeeze(linearBootstrapPerm(elec,timepoint, frequency, :)), 0);
  572. end
  573. end
  574. disp(['elec', num2str(elec)])
  575. end
  576. %%
  577. plot(BFmap_alpha(75,:,8)) %faxis shows alpha is now 8th in 3rd dimension
  578. %[75 62 55 81 72]
  579. %%
  580. alphaBF = BFmap_alpha(:,:,8);
  581. SaveAvgFile('alphaBF.at', alphaBF, [], [],1,[],[],[],[],1)
  582. emegs2d
  583. %% do the bayesian bootstrap for Alpha Power - selective pattern;
  584. % uses the repeatmat
  585. selectBootstrap_alpha =[];
  586. size(repeatmat_alpha)
  587. nsubjects = size(repeatmat_alpha, 4);
  588. % make distributions of effects
  589. selecteffect = [-3 1 1 1]; %expect this direction of effect
  590. % the linear effect distribution
  591. for draw = 1:2000
  592. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  593. for elec = 1:size(repeatmat_alpha,1)
  594. for timepoint = 1:size(repeatmat_alpha,2)
  595. for frequency = 1:size(repeatmat_alpha,3)
  596. selectBootstrap_alpha(elec, timepoint, frequency, draw) = ...
  597. mean(squeeze(repeatmat_alpha(elec, timepoint, frequency, bootstrapvec, : ))) * selecteffect';
  598. end
  599. end
  600. end
  601. disp(['draw ', num2str(draw)])
  602. end
  603. %% the null distribution permutation
  604. selectBootstrapPerm_alpha = [];
  605. for perm = 1:2000
  606. repeatmat_alphaperm = repeatmat_alpha;
  607. for subject = 1:nsubjects
  608. repeatmat_alphaperm(:, :, :, subject, :) = repeatmat_alphaperm(:, :, :, subject, randperm(4));
  609. end
  610. bootstrapvec = randi(nsubjects, 1,nsubjects)';
  611. for elec = 1:size(repeatmat_alpha,1)
  612. for timepoint = 1:size(repeatmat_alpha,2)
  613. for frequency = 1:size(repeatmat_alpha,3)
  614. selectBootstrapPerm_alpha(elec, timepoint, frequency, perm) = ...
  615. mean(squeeze(repeatmat_alphaperm(elec,timepoint, frequency, bootstrapvec, : ))) * selecteffect';
  616. end
  617. end
  618. end
  619. disp(['permutation ', num2str(perm)])
  620. end
  621. %% comparison between wavelet and permuted values
  622. % BFmap_alpha results in 129 channels x 180 timepoints x 25 frequencies
  623. for elec = 1:size(repeatmat_alpha,1)
  624. for timepoint = 1:size(repeatmat_alpha,2) %180 timepoints, decimated earlier
  625. for frequency = 1:size(repeatmat_alpha,3) %25 frequencies, decimated earlier (8th is alpha)
  626. BFmap_alpha_select(elec, timepoint, frequency) = bootstrap2BF_z(squeeze(selectBootstrap(elec,timepoint, frequency, :)), ...
  627. squeeze(selectBootstrapPerm_alpha(elec,timepoint, frequency, :)), 0);
  628. end
  629. end
  630. disp(['elec', num2str(elec)])
  631. end
  632. linear = ReadAvgFile('Log10TypicalLinearBFs.at');
  633. antilinear = ReadAvgFile('Log10AntiLinearBFs.at');
  634. antiallnothing = ReadAvgFile('Log10allnothingBFs.at');
  635. allnothing = antiallnothing* -1;
  636. SaveAvgFile('Log10allnothingBF_typical.at',allnothing,[],[], ...
  637. [],[],[],[],[],[],[],[],[],[],[])
  638. early_bfmap_linear = squeeze(mean(linear (75, 30:65), 2))
  639. middle_bfmap_linear = squeeze(mean(linear(75, 65:95), 2))
  640. late_bfmap_linear = squeeze(mean(linear (75, 95:130), 2))
  641. % antilinear : [129 × 180] matrix of log10 Bayes factors
  642. % (129 electrodes, 180 decimated time-samples)
  643. %% Channel 70/75, three time windows; BFs
  644. % early_bfmap_linear = mean(linear(75, 31:63)) % 0–660 ms
  645. % middle_bfmap_linear = mean(linear(75, 64:97)) % 670–1330 ms
  646. % late_bfmap_linear = mean(linear(75, 98:130)) % 1340–2000 ms
  647. early_bfmap_allnothing = mean(allnothing(70, 30:65)) % ~0–700 ms
  648. middle_bfmap_allnothing = mean(allnothing(70, 65:95)) % ~700–1300 ms
  649. late_bfmap_allnothing = mean(allnothing(70, 95:130)) % ~1300–2000 ms
  650. %%
  651. alphaBF_select = BFmap_alpha_select(:,:,8);
  652. SaveAvgFile('alphaBF_select.at', alphaBF_select, [], [],1,[],[],[],[],1)
  653. emegs2d

ggtone_postpro_final.m, no license · at the source

Overview

Authors: Sarah M. Gardy1,2, Christian Panitz3, Hannah Engle1, Faith Gilbert1, Andreas Keil1
  1. Department of Psychology, University of Florida,Gainesville, FL USA
  2. Laboratory for Brain, Body, and Behavior, Department of Psychology, University of Florida,Gainesville, USA
  3. Department of Psychology, University of Bremen,Bremen, Germany
Institutions: University of Florida (United States); University of Bremen (Germany)
Journal: Scientific reports, volume 16, issue 1, article 16766
Dates: received 30 July 2025; accepted 23 March 2026; published online 9 April 2026
Type: Research article · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1038/s41598-026-45966-4 · PMID 41957439 · PMCID PMC13223303 · OpenAlex W7152421799
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: EEG (modality), human (organism)
Methods: Spectral & time-frequency, Connectivity, Preprocessing, Statistics, Physiology & signal measures
Keywords: Pavlovian Conditioning, Association formation, Alpha, ssVEP, EEG, Neuroscience, Psychology
MeSH: Association Learning*, Evoked Potentials, Visual*, Visual Cortex*, Adult, Conditioning, Classical, Electroencephalography, Female, Humans, Male, Photic Stimulation, Young Adult (* major topic)
Topic: Neural and Behavioral Psychology Studies (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: National Institute of Mental Health (#R01MH125615)
Citations: not cited yet (Europe PMC); 56 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 2 matches between paragraphs and lines of code.

OSF qr37b

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

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:

  • it points to the authors' code: OSF qr37b
  • it says that the code is available on request

Read it in the paper: doi.org/10.1038/s41598-026-45966-4.

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;
  • 2 scripts, each with its path and the digest of its content;
  • 2 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 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:

  • no repository, dataset or request procedure was recognized in it

Read it in the paper: doi.org/10.1038/s41598-026-45966-4.

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, 5 authors, 7 keywords, 11 MeSH terms, 1 funder, 55 references.

Cite

This paper

Gardy, S. M., Panitz, C., Engle, H., Gilbert, F., & Keil, A. (2026). Changes in visuocortical engagement and oscillatory brain activity during associative learning. Scientific reports, 16(1), 16766. https://doi.org/10.1038/s41598-026-45966-4

BibTeX

@article{gardy2026changes,
author = {Gardy, Sarah M. and Panitz, Christian and Engle, Hannah and Gilbert, Faith and Keil, Andreas},
title = {{Changes in visuocortical engagement and oscillatory brain activity during associative learning}},
journal = {Scientific reports},
year = {2026},
month = apr,
volume = {16},
number = {1},
pages = {16766},
publisher = {Nature Publishing Group},
issn = {2045-2322},
doi = {10.1038/s41598-026-45966-4},
url = {https://doi.org/10.1038/s41598-026-45966-4},
pmid = {41957439},
pmcid = {PMC13223303}
}

RIS

TY - JOUR
AU - Gardy, Sarah M.
AU - Panitz, Christian
AU - Engle, Hannah
AU - Gilbert, Faith
AU - Keil, Andreas
TI - Changes in visuocortical engagement and oscillatory brain activity during associative learning
T2 - Scientific reports
J2 - Sci Rep
PY - 2026
DA - 2026/04/09
VL - 16
IS - 1
SP - 16766
SN - 2045-2322
PB - Nature Publishing Group
DO - 10.1038/s41598-026-45966-4
UR - https://doi.org/10.1038/s41598-026-45966-4
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41598-026-45966-4",
"type": "article-journal",
"title": "Changes in visuocortical engagement and oscillatory brain activity during associative learning",
"container-title": "Scientific reports",
"author": [
{
"family": "Gardy",
"given": "Sarah M."
},
{
"family": "Panitz",
"given": "Christian"
},
{
"family": "Engle",
"given": "Hannah"
},
{
"family": "Gilbert",
"given": "Faith"
},
{
"family": "Keil",
"given": "Andreas"
}
],
"container-title-short": "Sci Rep",
"volume": "16",
"issue": "1",
"page": "16766",
"DOI": "10.1038/s41598-026-45966-4",
"PMID": "41957439",
"PMCID": "PMC13223303",
"ISSN": "2045-2322",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41598-026-45966-4",
"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.1152/jn.00288.2025 [code]
The contribution of the koniocellular visual pathway to aversive learning in human visual cortex.
Journal: Journal of neurophysiology
In common: EEG, 5 references
[2] doi:10.7554/elife.108017 [code]
Visual working memory guides attention rhythmically in humans.
Journal: eLife
In common: Psychtoolbox, 3 references
[3] doi:10.3389/fpsyg.2026.1819517 [code]
Development and validation of the performance evaluation anxiety task: a computerized task to identify functionally significant test anxiety.
Journal: Frontiers in psychology
In common: EEG, 4 references
[4] doi:10.1162/imag.a.1335 [code]
Functionally distinct alpha components are differentially modulated by attention and affect behavior.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: 4 references
[5] doi:10.1162/imag.a.1258 [code]
Non-specific increase in alpha power during a neurofeedback session targeting its downregulation.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: Psychtoolbox, EEG, 2 references
[6] doi:10.1162/imag.a.1206
Affective face biases in visual and prefrontal cortex measured with visual entrainment.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: 3 references
[7] 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, 3 references
[8] doi:10.1126/sciadv.aea3919 [code]
Hierarchical brain dynamics supporting visual perceptual transitions.
Journal: Science advances
In common: Psychtoolbox, 2 references
[9] doi:10.7554/elife.103689 [code]
Dissociable dynamic effects of expectation during statistical learning.
Journal: eLife
In common: Psychtoolbox, EEG, 1 reference
[10] doi:10.1162/imag.a.1034 [code]
Top-down selection of visual working memory contents is supported by alpha-band phase-synchronized oscillatory networks
Journal: n/a
In common: 3 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.