OSCR

Ventrolateral prefrontal cortex in macaques guides decisions in different learning conditions.

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 › fMRI data analyses ↔ Fujimoto_NatComm_2026_gPPI.m, lines 1–25 · score 0.56 · gPPI, 4–8 seconds, seed, vlPFC, 4 seconds, window

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 · 588 lines · 48 KB · no license · 1 match

  1. %---------------------------------------------------------
  2. % Fujimoto et al (2026) Functional connectivity analysis
  3. % vlPFC seed to ACC or MD ROI FC
  4. %---------------------------------------------------------
  5. clear all; close all;
  6. % set directory
  7. maindir = char('C:\MATLAB_analy\LRN_analy\data\'); %my computer
  8. cd(maindir);
  9. TR_dur = 2.12*1000; %set TR
  10. %analysis window settings
  11. psth_window = [-4000,8000];
  12. w_bin = 1000; w_step = 200; % bin and step sizes - 1000, 200
  13. nstep = floor((psth_window(2)-psth_window(1)+1-w_bin)/w_step)+1;
  14. %subjects
  15. monkey_list = ["Mew","Eevee","Starmie","Genger"];
  16. sbj_num = length(monkey_list);
  17. % ROIs generated based on gPPI result
  18. seed_name_tmp = 'roi_clus6_vlpfc_R_2mm'; % seed - right vlPFC
  19. % roi_name_list = ["roi_ppi6_clus15_acc_R_2mm"]; % ACC
  20. roi_name_list = ["roi_ppi6_clus8_md_L_2mm"]; % MD
  21. an_table_all = {};
  22. %%
  23. for roi_cnt = 1:length(roi_name_list)
  24. %% Each ROI analysis
  25. roi_name_tmp = roi_name_list(roi_cnt);
  26. block_rval_nov_rstay = []; block_rval_nov_nrstay = []; block_rval_nov_rswitch = []; block_rval_nov_nrswitch = [];
  27. block_rval_fam_rstay = []; block_rval_fam_nrstay = []; block_rval_fam_rswitch = []; block_rval_fam_nrswitch = [];
  28. block_rval_nov_rew = []; block_rval_fam_rew = []; block_rval_nov_nrew = []; block_rval_fam_nrew = [];
  29. block_rval_nov_stay = []; block_rval_nov_switch = []; block_rval_fam_stay = []; block_rval_fam_switch = [];
  30. pfm_allmk_each_block_nov = []; pfm_allmk_each_block_fam = [];
  31. for sbj = 1:sbj_num
  32. %read list
  33. lname = strcat('LRN_data_',monkey_list{sbj},'.csv');
  34. list = readtable(lname); %specify .csv file!
  35. sesnum = size(list,1); %total number of sessions to analyze
  36. pfm_each_block_nov = []; pfm_each_block_fam = []; pfm_z_each_block_nov = []; pfm_z_each_block_fam = [];
  37. parfor ses = 1:sesnum
  38. %specify data to analyze from list
  39. day = char(string(list.day(ses))); %yyyymmdd
  40. monkey = string(list.monkey(ses));
  41. %block configuration
  42. listchar = num2str(list.block(ses));
  43. block_config = [];
  44. for ea_char=1:length(listchar)
  45. block_config = [block_config,str2num(listchar(ea_char))];
  46. end
  47. %analyze each data
  48. % if length(unique(block_config))>1
  49. for blc = 1:length(block_config)
  50. % load session file
  51. fname = strcat(day(1,3:end),'_',monkey,'_learning',monkey,'MRI_',num2str(blc),'.bhv2');
  52. A = [];
  53. A = mlread(fname);
  54. bsize = size([A.Trial],2); %block size
  55. % MRI trigger time
  56. trig_time = A(1).BehavioralCodes.CodeTimes(A(1).BehavioralCodes.CodeNumbers>=311 & A(1).BehavioralCodes.CodeNumbers<=313);
  57. % read ROI timeseries - already aligned to scan data collection initiation
  58. % to average over trials, make pseudo activity for milisecond resolution
  59. seed_ts_fill = []; roi_ts_fill = [];
  60. seed_name = strcat("ts_",seed_name_tmp,'_',monkey,string(day),"r0",string(blc),".1D"); % seed time series
  61. seed_ts = importdata(seed_name)*(-1); % MION inverse signal
  62. for slice_cnt = 1:length(seed_ts)
  63. for i = 1:TR_dur
  64. seed_ts_fill(TR_dur*(slice_cnt-1)+i) = seed_ts(slice_cnt); %filling in for msec data
  65. end
  66. end
  67. roi_name = strcat("ts_",roi_name_tmp,'_',monkey,string(day),"r0",string(blc),".1D"); % ROI time series
  68. roi_ts = importdata(roi_name)*(-1); % MION inverse signal
  69. for slice_cnt = 1:length(roi_ts)
  70. for i = 1:TR_dur
  71. roi_ts_fill(TR_dur*(slice_cnt-1)+i) = roi_ts(slice_cnt); %filling in for msec data
  72. end
  73. end
  74. % extract event codes and time stamps for correct trials
  75. tcnt = 0; tdat = zeros(100,7); evtime = []; hvchoice = [];
  76. for i=1:bsize
  77. if A(i).TrialError==0
  78. tcnt = tcnt+1;
  79. % events
  80. tdat(tcnt,1) = tcnt; %trial number
  81. tdat(tcnt,2) = A(i).BehavioralCodes.CodeNumbers(ismember(A(i).BehavioralCodes.CodeNumbers,[501,502]))-500; %response L/R
  82. tdat(tcnt,3) = A(i).BehavioralCodes.CodeNumbers(ismember(A(i).BehavioralCodes.CodeNumbers,[311,312,313]))-310; %left option
  83. tdat(tcnt,4) = A(i).BehavioralCodes.CodeNumbers(ismember(A(i).BehavioralCodes.CodeNumbers,[321,322,323]))-320; %right option
  84. if A(i).RewardRecord.StartTimes>0
  85. tdat(tcnt,5) = 1; %reward
  86. else
  87. tdat(tcnt,5) = 0; %no reward
  88. end
  89. if tdat(tcnt,2)==1
  90. tdat(tcnt,6) = tdat(tcnt,3); %chosen option
  91. tdat(tcnt,7) = tdat(tcnt,4); %unchosen option
  92. else
  93. tdat(tcnt,6) = tdat(tcnt,4); %chosen option
  94. tdat(tcnt,7) = tdat(tcnt,3); %unchosen option
  95. end
  96. %hv choice
  97. if tdat(tcnt,6)<tdat(tcnt,7)
  98. hvchoice(tcnt) = 1;
  99. else
  100. hvchoice(tcnt) = 0;
  101. end
  102. % time stamps
  103. if i>1
  104. evtime(tcnt,1) = A(i).AbsoluteTrialStartTime+A(i).BehavioralCodes.CodeTimes(A(i).BehavioralCodes.CodeNumbers==100); %FP on
  105. evtime(tcnt,2) = A(i).AbsoluteTrialStartTime+A(i).BehavioralCodes.CodeTimes(A(i).BehavioralCodes.CodeNumbers==110); %Fixation start
  106. evtime(tcnt,3) = A(i).AbsoluteTrialStartTime+A(i).BehavioralCodes.CodeTimes(A(i).BehavioralCodes.CodeNumbers==120); %Target on
  107. evtime(tcnt,4) = A(i).AbsoluteTrialStartTime+A(i).BehavioralCodes.CodeTimes(A(i).BehavioralCodes.CodeNumbers==150); %Response
  108. evtime(tcnt,5) = A(i).AbsoluteTrialStartTime+A(i).BehavioralCodes.CodeTimes(A(i).BehavioralCodes.CodeNumbers==160); %Reward
  109. else
  110. evtime(tcnt,1) = A(i).BehavioralCodes.CodeTimes(A(i).BehavioralCodes.CodeNumbers==100); %FP on
  111. evtime(tcnt,2) = A(i).BehavioralCodes.CodeTimes(A(i).BehavioralCodes.CodeNumbers==110); %Fixation start
  112. evtime(tcnt,3) = A(i).BehavioralCodes.CodeTimes(A(i).BehavioralCodes.CodeNumbers==120); %Target on
  113. evtime(tcnt,4) = A(i).BehavioralCodes.CodeTimes(A(i).BehavioralCodes.CodeNumbers==150); %Response
  114. evtime(tcnt,5) = A(i).BehavioralCodes.CodeTimes(A(i).BehavioralCodes.CodeNumbers==160); %Reward
  115. end
  116. end
  117. end
  118. evtime = evtime-trig_time; %msec, aligned to scan data collection initiation
  119. tnum = tcnt;
  120. %hv choice probability
  121. hv_prob = sum(hvchoice(1:50))/50;
  122. %align ROI timeseries to trial event and divided trials into
  123. %conditions of interest
  124. trial_seed_ts_rstay = []; trial_seed_ts_nrstay = []; trial_seed_ts_rswitch = []; trial_seed_ts_nrswitch = []; trial_seed_ts_stay = []; trial_seed_ts_switch = [];
  125. trial_roi_ts_rstay = []; trial_roi_ts_nrstay = []; trial_roi_ts_rswitch = []; trial_roi_ts_nrswitch = []; trial_roi_ts_stay = []; trial_roi_ts_switch = [];
  126. trial_seed_ts_all = []; trial_roi_ts_all = []; trial_roi_ts_rew = []; trial_roi_ts_nrew = []; trial_seed_ts_rew = []; trial_seed_ts_nrew = [];
  127. tr_rstay_cnt = 0; tr_nrstay_cnt = 0; tr_rswitch_cnt = 0; tr_nrswitch_cnt = 0; tr_rew_cnt = 0; tr_nrew_cnt = 0;
  128. tr_stay_cnt = 0; tr_switch_cnt = 0;
  129. for tcnt2 = 1:tnum
  130. %reward vs no reward (reward timing)
  131. if tdat(tcnt2,5)==1 && round(evtime(tcnt2,5))+psth_window(1)>0 && round(evtime(tcnt2,5))+psth_window(2)<length(roi_ts_fill) %rewarded trials
  132. tr_rew_cnt = tr_rew_cnt+1;
  133. trial_roi_ts_rew(tr_rew_cnt,1:(psth_window(2)-psth_window(1)+1)) = roi_ts_fill(round(evtime(tcnt2,5))+psth_window(1):round(evtime(tcnt2,5))+psth_window(2));
  134. trial_seed_ts_rew(tr_rew_cnt,1:(psth_window(2)-psth_window(1)+1)) = seed_ts_fill(round(evtime(tcnt2,5))+psth_window(1):round(evtime(tcnt2,5))+psth_window(2));
  135. elseif tdat(tcnt2,5)==0 && round(evtime(tcnt2,5))+psth_window(1)>0 && round(evtime(tcnt2,5))+psth_window(2)<length(roi_ts_fill) %no reward trials
  136. tr_nrew_cnt = tr_nrew_cnt+1;
  137. trial_roi_ts_nrew(tr_nrew_cnt,1:(psth_window(2)-psth_window(1)+1)) = roi_ts_fill(round(evtime(tcnt2,5))+psth_window(1):round(evtime(tcnt2,5))+psth_window(2));
  138. trial_seed_ts_nrew(tr_nrew_cnt,1:(psth_window(2)-psth_window(1)+1)) = seed_ts_fill(round(evtime(tcnt2,5))+psth_window(1):round(evtime(tcnt2,5))+psth_window(2));
  139. end
  140. %switch vs stay (timing of previous reward)
  141. if tcnt2>1 && ismember(tdat(tcnt2-1,6),[tdat(tcnt2,3),tdat(tcnt2,4)]) %chosen opt available as current option
  142. if tdat(tcnt2-1,6)==tdat(tcnt2,6) && round(evtime(tcnt2-1,5))+psth_window(1)>0 && round(evtime(tcnt2-1,5))+psth_window(2)<length(roi_ts_fill)
  143. tr_stay_cnt = tr_stay_cnt+1;
  144. trial_seed_ts_stay(tr_stay_cnt,1:(psth_window(2)-psth_window(1)+1)) = seed_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  145. trial_roi_ts_stay(tr_stay_cnt,1:(psth_window(2)-psth_window(1)+1)) = roi_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  146. elseif tdat(tcnt2-1,6)~=tdat(tcnt2,6) && round(evtime(tcnt2-1,5))+psth_window(1)>0 && round(evtime(tcnt2-1,5))+psth_window(2)<length(roi_ts_fill)
  147. tr_switch_cnt = tr_switch_cnt+1;
  148. trial_seed_ts_switch(tr_switch_cnt,1:(psth_window(2)-psth_window(1)+1)) = seed_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  149. trial_roi_ts_switch(tr_switch_cnt,1:(psth_window(2)-psth_window(1)+1)) = roi_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  150. end
  151. if tdat(tcnt2-1,5)==1 && tdat(tcnt2-1,6)==tdat(tcnt2,6) && round(evtime(tcnt2-1,5))+psth_window(1)>0 && round(evtime(tcnt2-1,5))+psth_window(2)<length(roi_ts_fill)
  152. tr_rstay_cnt = tr_rstay_cnt+1;
  153. trial_seed_ts_rstay(tr_rstay_cnt,1:(psth_window(2)-psth_window(1)+1)) = seed_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  154. trial_roi_ts_rstay(tr_rstay_cnt,1:(psth_window(2)-psth_window(1)+1)) = roi_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  155. elseif tdat(tcnt2-1,5)==0 && tdat(tcnt2-1,6)==tdat(tcnt2,6) && round(evtime(tcnt2-1,5))+psth_window(1)>0 && round(evtime(tcnt2-1,5))+psth_window(2)<length(roi_ts_fill)
  156. tr_nrstay_cnt = tr_nrstay_cnt+1;
  157. trial_seed_ts_nrstay(tr_nrstay_cnt,1:(psth_window(2)-psth_window(1)+1)) = seed_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  158. trial_roi_ts_nrstay(tr_nrstay_cnt,1:(psth_window(2)-psth_window(1)+1)) = roi_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  159. elseif tdat(tcnt2-1,5)==1 && tdat(tcnt2-1,6)~=tdat(tcnt2,6) && round(evtime(tcnt2-1,5))+psth_window(1)>0 && round(evtime(tcnt2-1,5))+psth_window(2)<length(roi_ts_fill)
  160. tr_rswitch_cnt = tr_rswitch_cnt+1;
  161. trial_seed_ts_rswitch(tr_rswitch_cnt,1:(psth_window(2)-psth_window(1)+1)) = seed_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  162. trial_roi_ts_rswitch(tr_rswitch_cnt,1:(psth_window(2)-psth_window(1)+1)) = roi_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  163. elseif tdat(tcnt2-1,5)==0 && tdat(tcnt2-1,6)~=tdat(tcnt2,6) && round(evtime(tcnt2-1,5))+psth_window(1)>0 && round(evtime(tcnt2-1,5))+psth_window(2)<length(roi_ts_fill)
  164. tr_nrswitch_cnt = tr_nrswitch_cnt+1;
  165. trial_seed_ts_nrswitch(tr_nrswitch_cnt,1:(psth_window(2)-psth_window(1)+1)) = seed_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  166. trial_roi_ts_nrswitch(tr_nrswitch_cnt,1:(psth_window(2)-psth_window(1)+1)) = roi_ts_fill(round(evtime(tcnt2-1,5))+psth_window(1):round(evtime(tcnt2-1,5))+psth_window(2));
  167. end
  168. end
  169. end
  170. % Compute correlation between seed and roi time series (each block)
  171. rval_rstay = []; rval_nrstay = []; rval_rswitch = []; rval_nrswitch = []; rval_wsls = []; rval_anti = []; rval_rew = []; rval_nrew = []; rval_stay = []; rval_switch = [];
  172. for bn = 1:nstep
  173. [R,~] = corrcoef(trial_seed_ts_rstay(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin),trial_roi_ts_rstay(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin));
  174. rval_rstay(bn) = R(1,2);
  175. [R,~] = corrcoef(trial_seed_ts_nrstay(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin),trial_roi_ts_nrstay(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin));
  176. rval_nrstay(bn) = R(1,2);
  177. [R,~] = corrcoef(trial_seed_ts_rswitch(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin),trial_roi_ts_rswitch(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin));
  178. rval_rswitch(bn) = R(1,2);
  179. [R,~] = corrcoef(trial_seed_ts_nrswitch(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin),trial_roi_ts_nrswitch(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin));
  180. rval_nrswitch(bn) = R(1,2);
  181. [R,~] = corrcoef(trial_seed_ts_rew(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin),trial_roi_ts_rew(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin));
  182. rval_rew(bn) = R(1,2);
  183. [R,~] = corrcoef(trial_seed_ts_nrew(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin),trial_roi_ts_nrew(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin));
  184. rval_nrew(bn) = R(1,2);
  185. [R,~] = corrcoef(trial_seed_ts_stay(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin),trial_roi_ts_stay(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin));
  186. rval_stay(bn) = R(1,2);
  187. [R,~] = corrcoef(trial_seed_ts_switch(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin),trial_roi_ts_switch(:,w_step*(bn-1)+1:w_step*(bn-1)+w_bin));
  188. rval_switch(bn) = R(1,2);
  189. end
  190. % Classify data by block type
  191. if block_config(blc)==1 %novel block
  192. block_rval_nov_rstay = [block_rval_nov_rstay;rval_rstay];
  193. block_rval_nov_nrstay = [block_rval_nov_nrstay;rval_nrstay];
  194. block_rval_nov_rswitch = [block_rval_nov_rswitch;rval_rswitch];
  195. block_rval_nov_nrswitch = [block_rval_nov_nrswitch;rval_nrswitch];
  196. block_rval_nov_rew = [block_rval_nov_rew;rval_rew];
  197. block_rval_nov_nrew = [block_rval_nov_nrew;rval_nrew];
  198. pfm_each_block_nov = [pfm_each_block_nov;hv_prob];
  199. block_rval_nov_stay = [block_rval_nov_stay;rval_stay];
  200. block_rval_nov_switch = [block_rval_nov_switch;rval_switch];
  201. else % familiar block
  202. block_rval_fam_rstay = [block_rval_fam_rstay;rval_rstay];
  203. block_rval_fam_nrstay = [block_rval_fam_nrstay;rval_nrstay];
  204. block_rval_fam_rswitch = [block_rval_fam_rswitch;rval_rswitch];
  205. block_rval_fam_nrswitch = [block_rval_fam_nrswitch;rval_nrswitch];
  206. block_rval_fam_rew = [block_rval_fam_rew;rval_rew];
  207. block_rval_fam_nrew = [block_rval_fam_nrew;rval_nrew];
  208. pfm_each_block_fam = [pfm_each_block_fam;hv_prob];
  209. block_rval_fam_stay = [block_rval_fam_stay;rval_stay];
  210. block_rval_fam_switch = [block_rval_fam_switch;rval_switch];
  211. end
  212. end % each block
  213. end % each session
  214. % normalize
  215. pfm_z_each_block_nov = (pfm_each_block_nov-mean(pfm_each_block_nov))./std(pfm_each_block_nov);
  216. pfm_z_each_block_fam = (pfm_each_block_fam-mean(pfm_each_block_fam))./std(pfm_each_block_fam);
  217. pfm_allmk_each_block_nov = [pfm_allmk_each_block_nov;pfm_z_each_block_nov];
  218. pfm_allmk_each_block_fam = [pfm_allmk_each_block_fam;pfm_z_each_block_fam];
  219. end % each monkey
  220. %% Multiple regression
  221. % number of blocks
  222. bnum_nov = size(block_rval_nov_rstay,1);
  223. bnum_fam = size(block_rval_fam_rstay,1);
  224. %multiple regression for each block data
  225. block_rval_ts_nov = [block_rval_nov_rstay;block_rval_nov_nrstay;block_rval_nov_rswitch;block_rval_nov_nrswitch];
  226. block_rval_rew_nov = [ones(size(block_rval_nov_rstay,1),1);zeros(size(block_rval_nov_nrstay,1),1);ones(size(block_rval_nov_rswitch,1),1);zeros(size(block_rval_nov_nrswitch,1),1)];
  227. block_rval_str_nov = [ones(size(block_rval_nov_rstay,1),1);ones(size(block_rval_nov_nrstay,1),1);zeros(size(block_rval_nov_rswitch,1),1);zeros(size(block_rval_nov_nrswitch,1),1)];
  228. block_rval_ts_fam = [block_rval_fam_rstay;block_rval_fam_nrstay;block_rval_fam_rswitch;block_rval_fam_nrswitch];
  229. block_rval_rew_fam = [ones(size(block_rval_fam_rstay,1),1);zeros(size(block_rval_fam_nrstay,1),1);ones(size(block_rval_fam_rswitch,1),1);zeros(size(block_rval_fam_nrswitch,1),1)];
  230. block_rval_str_fam = [ones(size(block_rval_fam_rstay,1),1);ones(size(block_rval_fam_nrstay,1),1);zeros(size(block_rval_fam_rswitch,1),1);zeros(size(block_rval_fam_nrswitch,1),1)];
  231. ef_rval_nov = []; ef_rval_fam = [];
  232. parfor bn = 1:nstep
  233. bn_x(bn) = psth_window(1)+w_bin/2+w_step*(bn-1); % for x axis label
  234. tbl_nov = table(block_rval_rew_nov,block_rval_str_nov,block_rval_ts_nov(:,bn),'VariableNames',{'Reward','Decision','TS'});
  235. lm_nov = fitlm(tbl_nov,'interactions');
  236. ef_rval_nov(:,bn) = lm_nov.Coefficients.Estimate(2:4);
  237. tbl_fam = table(block_rval_rew_fam,block_rval_str_fam,block_rval_ts_fam(:,bn),'VariableNames',{'Reward','Decision','TS'});
  238. lm_fam = fitlm(tbl_fam,'interactions');
  239. ef_rval_fam(:,bn) = lm_fam.Coefficients.Estimate(2:4);
  240. end
  241. ef_block_nov_reward = ef_rval_nov(1,:);
  242. ef_block_nov_choice = ef_rval_nov(2,:);
  243. ef_block_nov_wsls = ef_rval_nov(3,:);
  244. ef_block_fam_reward = ef_rval_fam(1,:);
  245. ef_block_fam_choice = ef_rval_fam(2,:);
  246. ef_block_fam_wsls = ef_rval_fam(3,:);
  247. %shuffled data
  248. itr_max = 1000; % iteration
  249. block_sff_ts_nov = []; block_sff_ts_fam = []; ef_sff_nov_reward = []; ef_sff_nov_choice = []; ef_sff_nov_wsls = []; ef_sff_fam_reward = []; ef_sff_fam_choice = []; ef_sff_fam_wsls = [];
  250. parfor itr = 1:itr_max
  251. tmp_rand_nov = randperm(size(block_rval_ts_nov,1));
  252. block_sff_ts_nov = block_rval_ts_nov(tmp_rand_nov,:);
  253. tmp_rand_fam = randperm(size(block_rval_ts_fam,1));
  254. block_sff_ts_fam = block_rval_ts_fam(tmp_rand_fam,:);
  255. for bn = 1:nstep
  256. tbl_nov = table(block_rval_rew_nov,block_rval_str_nov,block_sff_ts_nov(:,bn),'VariableNames',{'Reward','Decision','TS'});
  257. lm_nov = fitlm(tbl_nov,'interactions');
  258. ef_sff_nov_reward(itr,bn) = lm_nov.Coefficients.Estimate(2);
  259. ef_sff_nov_choice(itr,bn) = lm_nov.Coefficients.Estimate(3);
  260. ef_sff_nov_wsls(itr,bn) = lm_nov.Coefficients.Estimate(4);
  261. tbl_fam = table(block_rval_rew_fam,block_rval_str_fam,block_sff_ts_fam(:,bn),'VariableNames',{'Reward','Decision','TS'});
  262. lm_fam = fitlm(tbl_fam,'interactions');
  263. ef_sff_fam_reward(itr,bn) = lm_fam.Coefficients.Estimate(2);
  264. ef_sff_fam_choice(itr,bn) = lm_fam.Coefficients.Estimate(3);
  265. ef_sff_fam_wsls(itr,bn) = lm_fam.Coefficients.Estimate(4);
  266. end
  267. end
  268. % confidence interval
  269. alpha_perm = 0.05; % 0.05 - 95% ci
  270. for bn = 1:nstep
  271. [muHat,sigmaHat,muCI,sigmaCI] = normfit(ef_sff_nov_reward(:,bn),alpha_perm);
  272. ci_sff_nov_reward(bn,1:2) = sigmaCI;
  273. [muHat,sigmaHat,muCI,sigmaCI] = normfit(ef_sff_nov_choice(:,bn),alpha_perm);
  274. ci_sff_nov_choice(bn,1:2) = sigmaCI;
  275. [muHat,sigmaHat,muCI,sigmaCI] = normfit(ef_sff_nov_wsls(:,bn),alpha_perm);
  276. ci_sff_nov_wsls(bn,1:2) = sigmaCI;
  277. [muHat,sigmaHat,muCI,sigmaCI] = normfit(ef_sff_fam_reward(:,bn),alpha_perm);
  278. ci_sff_fam_reward(bn,1:2) = sigmaCI;
  279. [muHat,sigmaHat,muCI,sigmaCI] = normfit(ef_sff_fam_choice(:,bn),alpha_perm);
  280. ci_sff_fam_choice(bn,1:2) = sigmaCI;
  281. [muHat,sigmaHat,muCI,sigmaCI] = normfit(ef_sff_fam_wsls(:,bn),alpha_perm);
  282. ci_sff_fam_wsls(bn,1:2) = sigmaCI;
  283. end
  284. %% PPI data plot
  285. sm_param = 20;
  286. pthr = 0.01;
  287. ts_win = [-2000 2000];
  288. % ts_win = [0 4000];
  289. yrange_psth = [-0.3 0.3];
  290. figure(1);
  291. FIGSIZE = 80;
  292. set(gcf,'Position',[50,50,15*FIGSIZE,8.5*FIGSIZE]);
  293. % time course of PPI (correlation coeff)
  294. subplot(2,4,1); hold on;
  295. boundedline(bn_x,smooth(nanmean(block_rval_nov_rstay,1),sm_param),smooth(nanstd(block_rval_nov_rstay)/(bnum_nov^0.5),sm_param),'transparency',0.1,'r');
  296. boundedline(bn_x,smooth(nanmean(block_rval_nov_rswitch,1),sm_param),smooth(nanstd(block_rval_nov_rswitch)/(bnum_nov^0.5),sm_param),'transparency',0.1,'m');
  297. for i = 1:nstep-3
  298. if ranksum(block_rval_nov_rstay(:,i),zeros(size(block_rval_nov_rstay,1),1))<pthr
  299. if ranksum(block_rval_nov_rstay(:,i+1),zeros(size(block_rval_nov_rstay,1),1))<pthr && ranksum(block_rval_nov_rstay(:,i+2),zeros(size(block_rval_nov_rstay,1),1))<pthr
  300. plot([bn_x(i)-w_bin/2 bn_x(i+2)+w_bin/2],[yrange_psth(2)*0.95 yrange_psth(2)*0.95],'r-','linewidth',4);
  301. end
  302. end
  303. if ranksum(block_rval_nov_rswitch(:,i),zeros(size(block_rval_nov_rswitch,1),1))<pthr
  304. if ranksum(block_rval_nov_rswitch(:,i+1),zeros(size(block_rval_nov_rswitch,1),1))<pthr && ranksum(block_rval_nov_rswitch(:,i+2),zeros(size(block_rval_nov_rswitch,1),1))<pthr
  305. plot([bn_x(i)-w_bin/2 bn_x(i+2)+w_bin/2],[yrange_psth(2)*0.9 yrange_psth(2)*0.9],'m-','linewidth',4);
  306. end
  307. end
  308. end
  309. plot([ts_win(1) ts_win(2)],[yrange_psth(1) yrange_psth(1)],'k-');
  310. plot([0 0],[yrange_psth(1) yrange_psth(2)],'k--'); plot([psth_window(1) psth_window(2)],[0 0],'k-'); ylabel("PPI"); xlabel("Time from rew"); title('Novel');
  311. xlim(psth_window); ylim(yrange_psth);
  312. subplot(2,4,3); hold on;
  313. boundedline(bn_x,smooth(nanmean(block_rval_fam_rstay,1),sm_param),smooth(nanstd(block_rval_fam_rstay)/(bnum_fam^0.5),sm_param),'transparency',0.1,'r');
  314. boundedline(bn_x,smooth(nanmean(block_rval_fam_rswitch,1),sm_param),smooth(nanstd(block_rval_fam_rswitch)/(bnum_fam^0.5),sm_param),'transparency',0.1,'m');
  315. for i = 1:nstep-3
  316. if ranksum(block_rval_fam_rstay(:,i),zeros(size(block_rval_fam_rstay,1),1))<pthr
  317. if ranksum(block_rval_fam_rstay(:,i+1),zeros(size(block_rval_fam_rstay,1),1))<pthr && ranksum(block_rval_fam_rstay(:,i+2),zeros(size(block_rval_fam_rstay,1),1))<pthr
  318. plot([bn_x(i)-w_bin/2 bn_x(i+2)+w_bin/2],[yrange_psth(2)*0.95 yrange_psth(2)*0.95],'r-','linewidth',4);
  319. end
  320. end
  321. if ranksum(block_rval_fam_rswitch(:,i),zeros(size(block_rval_fam_rswitch,1),1))<pthr
  322. if ranksum(block_rval_fam_rswitch(:,i+1),zeros(size(block_rval_fam_rswitch,1),1))<pthr && ranksum(block_rval_fam_rswitch(:,i+2),zeros(size(block_rval_fam_rswitch,1),1))<pthr
  323. plot([bn_x(i)-w_bin/2 bn_x(i+2)+w_bin/2],[yrange_psth(2)*0.9 yrange_psth(2)*0.9],'m-','linewidth',4);
  324. end
  325. end
  326. end
  327. plot([ts_win(1) ts_win(2)],[yrange_psth(1) yrange_psth(1)],'k-');
  328. plot([0 0],[yrange_psth(1) yrange_psth(2)],'k--'); plot([psth_window(1) psth_window(2)],[0 0],'k-'); ylabel("PPI"); xlabel("Time from rew"); title('Familiar');
  329. xlim(psth_window); ylim(yrange_psth);
  330. subplot(2,4,5); hold on;
  331. boundedline(bn_x,smooth(nanmean(block_rval_nov_nrstay,1),sm_param),smooth(nanstd(block_rval_nov_nrstay)/(bnum_nov^0.5),sm_param),'transparency',0.1,'b');
  332. boundedline(bn_x,smooth(nanmean(block_rval_nov_nrswitch,1),sm_param),smooth(nanstd(block_rval_nov_nrswitch)/(bnum_nov^0.5),sm_param),'transparency',0.1,'c');
  333. for i = 1:nstep-3
  334. if ranksum(block_rval_nov_nrstay(:,i),zeros(size(block_rval_nov_nrstay,1),1))<pthr
  335. if ranksum(block_rval_nov_nrstay(:,i+1),zeros(size(block_rval_nov_nrstay,1),1))<pthr && ranksum(block_rval_nov_nrstay(:,i+2),zeros(size(block_rval_nov_nrstay,1),1))<pthr
  336. plot([bn_x(i)-w_bin/2 bn_x(i+2)+w_bin/2],[yrange_psth(2)*0.95 yrange_psth(2)*0.95],'b-','linewidth',4);
  337. end
  338. end
  339. if ranksum(block_rval_nov_nrswitch(:,i),zeros(size(block_rval_nov_nrswitch,1),1))<pthr
  340. if ranksum(block_rval_nov_nrswitch(:,i+1),zeros(size(block_rval_nov_nrswitch,1),1))<pthr && ranksum(block_rval_nov_nrswitch(:,i+2),zeros(size(block_rval_nov_nrswitch,1),1))<pthr
  341. plot([bn_x(i)-w_bin/2 bn_x(i+2)+w_bin/2],[yrange_psth(2)*0.9 yrange_psth(2)*0.9],'c-','linewidth',4);
  342. end
  343. end
  344. end
  345. plot([ts_win(1) ts_win(2)],[yrange_psth(1) yrange_psth(1)],'k-');
  346. plot([0 0],[yrange_psth(1) yrange_psth(2)],'k--'); plot([psth_window(1) psth_window(2)],[0 0],'k-'); ylabel("PPI"); xlabel("Time from rew");
  347. xlim(psth_window); ylim(yrange_psth);
  348. subplot(2,4,7); hold on;
  349. boundedline(bn_x,smooth(nanmean(block_rval_fam_nrstay,1),sm_param),smooth(nanstd(block_rval_fam_nrstay)/(bnum_fam^0.5),sm_param),'transparency',0.1,'b');
  350. boundedline(bn_x,smooth(nanmean(block_rval_fam_nrswitch,1),sm_param),smooth(nanstd(block_rval_fam_nrswitch)/(bnum_fam^0.5),sm_param),'transparency',0.1,'c');
  351. for i = 1:nstep-3
  352. if ranksum(block_rval_fam_nrstay(:,i),zeros(size(block_rval_fam_nrstay,1),1))<pthr
  353. if ranksum(block_rval_fam_nrstay(:,i+1),zeros(size(block_rval_fam_nrstay,1),1))<pthr && ranksum(block_rval_fam_nrstay(:,i+2),zeros(size(block_rval_fam_nrstay,1),1))<pthr
  354. plot([bn_x(i)-w_bin/2 bn_x(i+2)+w_bin/2],[yrange_psth(2)*0.95 yrange_psth(2)*0.95],'b-','linewidth',4);
  355. end
  356. end
  357. if ranksum(block_rval_fam_nrswitch(:,i),zeros(size(block_rval_fam_nrswitch,1),1))<pthr
  358. if ranksum(block_rval_fam_nrswitch(:,i+1),zeros(size(block_rval_fam_nrswitch,1),1))<pthr && ranksum(block_rval_fam_nrswitch(:,i+2),zeros(size(block_rval_fam_nrswitch,1),1))<pthr
  359. plot([bn_x(i)-w_bin/2 bn_x(i+2)+w_bin/2],[yrange_psth(2)*0.9 yrange_psth(2)*0.9],'c-','linewidth',4);
  360. end
  361. end
  362. end
  363. plot([ts_win(1) ts_win(2)],[yrange_psth(1) yrange_psth(1)],'k-');
  364. plot([0 0],[yrange_psth(1) yrange_psth(2)],'k--'); plot([psth_window(1) psth_window(2)],[0 0],'k-'); ylabel("PPI"); xlabel("Time from rew");
  365. xlim(psth_window); ylim(yrange_psth);
  366. % averaged value
  367. pthr2 = 0.05
  368. subplot(2,4,2); hold on;
  369. errorbar(1,nanmean(mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),nanstd(mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1)/bnum_nov^0.5,'r');
  370. errorbar(2,nanmean(mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),nanstd(mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1)/bnum_nov^0.5,'m');
  371. plot(1,nanmean(mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),'ro');
  372. plot(2,nanmean(mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),'mo');
  373. pval_nov_r(1) = ranksum(mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),zeros(sum(~isnan(mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1));
  374. pval_nov_r(2) = ranksum(mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),zeros(sum(~isnan(mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1));
  375. for i=1:2
  376. if pval_nov_r(i)<pthr2
  377. plot(i,0.18,'k*');
  378. end
  379. text(i,0.1,sprintf('%.2f',pval_nov_r(i)));
  380. end
  381. plot([0 3],[0 0],'k-');
  382. xlim([0 3]); ylim([-0.1 0.2]); title(roi_name_tmp,'interpreter','none');
  383. subplot(2,4,4); hold on;
  384. errorbar(1,nanmean(mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),nanstd(mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1)/bnum_fam^0.5,'r');
  385. errorbar(2,nanmean(mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),nanstd(mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1)/bnum_fam^0.5,'m');
  386. plot(1,nanmean(mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),'ro');
  387. plot(2,nanmean(mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),'mo');
  388. pval_fam_r(1) = ranksum(mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),zeros(sum(~isnan(mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1));
  389. pval_fam_r(2) = ranksum(mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),zeros(sum(~isnan(mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1));
  390. for i=1:2
  391. if pval_fam_r(i)<pthr2
  392. plot(i,0.18,'k*');
  393. end
  394. text(i,0.1,sprintf('%.2f',pval_fam_r(i)));
  395. end
  396. plot([0 3],[0 0],'k-');
  397. xlim([0 3]); ylim([-0.1 0.2]);
  398. subplot(2,4,6); hold on;
  399. errorbar(1,nanmean(mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),nanstd(mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1)/bnum_nov^0.5,'b');
  400. errorbar(2,nanmean(mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),nanstd(mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1)/bnum_nov^0.5,'c');
  401. plot(1,nanmean(mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),'bo');
  402. plot(2,nanmean(mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),'co');
  403. pval_nov_nr(1) = ranksum(mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),zeros(sum(~isnan(mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1));
  404. pval_nov_nr(2) = ranksum(mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),zeros(sum(~isnan(mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1));
  405. for i=1:2
  406. if pval_nov_nr(i)<pthr2
  407. plot(i,0.18,'k*');
  408. end
  409. text(i,0.1,sprintf('%.2f',pval_nov_nr(i)));
  410. end
  411. plot([0 3],[0 0],'k-');
  412. xlim([0 3]); ylim([-0.1 0.2]);
  413. subplot(2,4,8); hold on;
  414. errorbar(1,nanmean(mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),nanstd(mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1)/bnum_fam^0.5,'b');
  415. errorbar(2,nanmean(mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),nanstd(mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1)/bnum_fam^0.5,'c');
  416. plot(1,nanmean(mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),'bo');
  417. plot(2,nanmean(mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),1),'co');
  418. pval_fam_nr(1) = ranksum(mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),zeros(sum(~isnan(mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1));
  419. pval_fam_nr(2) = ranksum(mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2),zeros(sum(~isnan(mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1));
  420. for i=1:2
  421. if pval_fam_nr(i)<pthr2
  422. plot(i,0.18,'k*');
  423. end
  424. text(i,0.1,sprintf('%.2f',pval_fam_nr(i)));
  425. end
  426. plot([0 3],[0 0],'k-');
  427. xlim([0 3]); ylim([-0.1 0.2]);
  428. % anova, for each block type
  429. tmp_nov_ppi = [mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);
  430. mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2)];
  431. an_nov_ppi = tmp_nov_ppi(~isnan(tmp_nov_ppi));
  432. an_nov_stsw = [ones(sum(~isnan(mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);2*ones(sum(~isnan(mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);
  433. ones(sum(~isnan(mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);2*ones(sum(~isnan(mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1)];
  434. an_nov_rew = [ones(sum(~isnan(mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);ones(sum(~isnan(mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);
  435. 2*ones(sum(~isnan(mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);2*ones(sum(~isnan(mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1)];
  436. [~,tbl_nov,stats_nov] = anovan(an_nov_ppi,{an_nov_stsw,an_nov_rew},'model','interaction','varnames',{'StaySwitch','Reward'},'display','off');
  437. tmp_fam_ppi = [mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);
  438. mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2)];
  439. an_fam_ppi = tmp_fam_ppi(~isnan(tmp_fam_ppi));
  440. an_fam_stsw = [ones(sum(~isnan(mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);2*ones(sum(~isnan(mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);
  441. ones(sum(~isnan(mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);2*ones(sum(~isnan(mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1)];
  442. an_fam_rew = [ones(sum(~isnan(mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);ones(sum(~isnan(mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);
  443. 2*ones(sum(~isnan(mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);2*ones(sum(~isnan(mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1)];
  444. [~,tbl_fam,stats_fam] = anovan(an_fam_ppi,{an_fam_stsw,an_fam_rew},'model','interaction','varnames',{'StaySwitch','Reward'},'display','off');
  445. % anova, for rewarded trials and unrewarded trials
  446. tmp_r_ppi = [mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2)];
  447. an_r_ppi = tmp_r_ppi(~isnan(tmp_r_ppi));
  448. tmp_nr_ppi = [mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2);mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2)];
  449. an_nr_ppi = tmp_nr_ppi(~isnan(tmp_nr_ppi));
  450. an_r_novfam = [ones(sum(~isnan(mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2)))+sum(~isnan(mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1); 2*ones(sum(~isnan(mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2)))+sum(~isnan(mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1)];
  451. an_nr_novfam = [ones(sum(~isnan(mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2)))+sum(~isnan(mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1); 2*ones(sum(~isnan(mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2)))+sum(~isnan(mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1)];
  452. an_r_stsw = [ones(sum(~isnan(mean(block_rval_nov_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);2*ones(sum(~isnan(mean(block_rval_nov_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);ones(sum(~isnan(mean(block_rval_fam_rstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);2*ones(sum(~isnan(mean(block_rval_fam_rswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1)];
  453. an_nr_stsw = [ones(sum(~isnan(mean(block_rval_nov_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);2*ones(sum(~isnan(mean(block_rval_nov_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);ones(sum(~isnan(mean(block_rval_fam_nrstay(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1);2*ones(sum(~isnan(mean(block_rval_fam_nrswitch(:,min(find(bn_x>ts_win(1))):min(find(bn_x>ts_win(2)))),2))),1)];
  454. [~,tbl_r,stats_r] = anovan(an_r_ppi,{an_r_novfam,an_r_stsw},'model','interaction','varnames',{'NovFam','StaySwitch'},'display','off');
  455. [~,tbl_nr,stats_nr] = anovan(an_nr_ppi,{an_nr_novfam,an_nr_stsw},'model','interaction','varnames',{'NovFam','StaySwitch'},'display','off');
  456. % anova, all trials
  457. an_all_ppi = [an_r_ppi;an_nr_ppi];
  458. an_all_novfam = [an_r_novfam;an_nr_novfam];
  459. an_all_stsw = [an_r_stsw;an_nr_stsw];
  460. an_all_rew = [ones(length(an_r_stsw),1);2*ones(length(an_nr_stsw),1)];
  461. [p,tbl_all,stats_all] = anovan(an_all_ppi,{an_all_novfam,an_all_stsw,an_all_rew},'model','full','varnames',{'NovFam','StaySwitch','Rew'},'display','off');
  462. an_table_all{roi_cnt,1} = tbl_r;
  463. an_table_all{roi_cnt,2} = tbl_nr;
  464. an_table_all{roi_cnt,3} = tbl_all;
  465. % c = multcompare(stats_all);
  466. %% PPI-performance correlation analysis
  467. sc_range = [-1 1];
  468. ts_win2 = [0 4000];
  469. % ts_win2 = ts_win;
  470. figure(2);
  471. block_rval_nov_rew_mean = mean(block_rval_nov_rew(:,min(find(bn_x>ts_win2(1))):min(find(bn_x>ts_win2(2)))),2);
  472. block_rval_fam_rew_mean = mean(block_rval_fam_rew(:,min(find(bn_x>ts_win2(1))):min(find(bn_x>ts_win2(2)))),2);
  473. block_rval_nov_nrew_mean = mean(block_rval_nov_nrew(:,min(find(bn_x>ts_win2(1))):min(find(bn_x>ts_win2(2)))),2);
  474. block_rval_fam_nrew_mean = mean(block_rval_fam_nrew(:,min(find(bn_x>ts_win2(1))):min(find(bn_x>ts_win2(2)))),2);
  475. block_rval_nov_stay_mean = mean(block_rval_nov_stay(:,min(find(bn_x>ts_win2(1))):min(find(bn_x>ts_win2(2)))),2);
  476. block_rval_fam_stay_mean = mean(block_rval_fam_stay(:,min(find(bn_x>ts_win2(1))):min(find(bn_x>ts_win2(2)))),2);
  477. block_rval_nov_switch_mean = mean(block_rval_nov_switch(:,min(find(bn_x>ts_win2(1))):min(find(bn_x>ts_win2(2)))),2);
  478. block_rval_fam_switch_mean = mean(block_rval_fam_switch(:,min(find(bn_x>ts_win2(1))):min(find(bn_x>ts_win2(2)))),2);
  479. subplot(2,2,1); hold on;
  480. plot(pfm_allmk_each_block_nov,block_rval_nov_rew_mean,'r.');
  481. [R,Pval] = corrcoef(pfm_allmk_each_block_nov,block_rval_nov_rew_mean);
  482. plot(pfm_allmk_each_block_nov,polyval(polyfit(pfm_allmk_each_block_nov,block_rval_nov_rew_mean,1),pfm_allmk_each_block_nov),'r-');
  483. xlim([-3 3]); ylim([sc_range(1) sc_range(2)]); if Pval(1,2)<0.1 text(0,-0.1,string(Pval(1,2)),'color','g'); else text(0,-0.1,string(Pval(1,2)),'color','k'); end
  484. title("Novel block"); xlabel("Correct pfm (Z)"); ylabel("win trials PPI");
  485. subplot(2,2,2); hold on;
  486. plot(pfm_allmk_each_block_fam,block_rval_fam_rew_mean,'b.');
  487. [R,Pval] = corrcoef(pfm_allmk_each_block_fam,block_rval_fam_rew_mean);
  488. plot(pfm_allmk_each_block_fam,polyval(polyfit(pfm_allmk_each_block_fam,block_rval_fam_rew_mean,1),pfm_allmk_each_block_fam),'b-');
  489. xlim([-3 3]); ylim([sc_range(1) sc_range(2)]); if Pval(1,2)<0.1 text(0,-0.1,string(Pval(1,2)),'color','g'); else text(0,-0.1,string(Pval(1,2)),'color','k'); end
  490. title("Familiar block"); xlabel("Correct pfm (Z)"); ylabel("win trials PPI");
  491. subplot(2,2,3); hold on;
  492. plot(pfm_allmk_each_block_nov,block_rval_nov_nrew_mean,'r.');
  493. [R,Pval] = corrcoef(pfm_allmk_each_block_nov,block_rval_nov_nrew_mean);
  494. plot(pfm_allmk_each_block_nov,polyval(polyfit(pfm_allmk_each_block_nov,block_rval_nov_nrew_mean,1),pfm_allmk_each_block_nov),'r-');
  495. xlim([-3 3]); ylim([sc_range(1) sc_range(2)]); if Pval(1,2)<0.1 text(0,-0.1,string(Pval(1,2)),'color','g'); else text(0,-0.1,string(Pval(1,2)),'color','k'); end
  496. title(roi_name_tmp,'interpreter','none'); xlabel("Correct pfm (Z)"); ylabel("loss trials PPI");
  497. subplot(2,2,4); hold on;
  498. plot(pfm_allmk_each_block_fam,block_rval_fam_nrew_mean,'b.');
  499. [R,Pval] = corrcoef(pfm_allmk_each_block_fam,block_rval_fam_nrew_mean);
  500. plot(pfm_allmk_each_block_fam,polyval(polyfit(pfm_allmk_each_block_fam,block_rval_fam_nrew_mean,1),pfm_allmk_each_block_fam),'b-');
  501. xlim([-3 3]); ylim([sc_range(1) sc_range(2)]); if Pval(1,2)<0.1 text(0,-0.1,string(Pval(1,2)),'color','g'); else text(0,-0.1,string(Pval(1,2)),'color','k'); end
  502. title(""); xlabel("Correct pfm (Z)"); ylabel("loss trials PPI");
  503. %Stay/Shift trials vs Performance
  504. figure(3);
  505. subplot(2,2,1); hold on;
  506. plot(pfm_allmk_each_block_nov,block_rval_nov_stay_mean,'r.');
  507. [R,Pval] = corrcoef(pfm_allmk_each_block_nov,block_rval_nov_stay_mean);
  508. plot(pfm_allmk_each_block_nov,polyval(polyfit(pfm_allmk_each_block_nov,block_rval_nov_stay_mean,1),pfm_allmk_each_block_nov),'r-');
  509. xlim([-3 3]); ylim([sc_range(1) sc_range(2)]); if Pval(1,2)<0.1 text(0,-0.1,string(Pval(1,2)),'color','g'); else text(0,-0.1,string(Pval(1,2)),'color','k'); end
  510. title("Novel block"); xlabel("Correct pfm (Z)"); ylabel("Stay trials PPI");
  511. subplot(2,2,2); hold on;
  512. plot(pfm_allmk_each_block_fam,block_rval_fam_stay_mean,'b.');
  513. [R,Pval] = corrcoef(pfm_allmk_each_block_fam,block_rval_fam_stay_mean);
  514. plot(pfm_allmk_each_block_fam,polyval(polyfit(pfm_allmk_each_block_fam,block_rval_fam_stay_mean,1),pfm_allmk_each_block_fam),'b-');
  515. xlim([-3 3]); ylim([sc_range(1) sc_range(2)]); if Pval(1,2)<0.1 text(0,-0.1,string(Pval(1,2)),'color','g'); else text(0,-0.1,string(Pval(1,2)),'color','k'); end
  516. title("Familiar block"); xlabel("Correct pfm (Z)"); ylabel("Stay trials PPI");
  517. subplot(2,2,3); hold on;
  518. plot(pfm_allmk_each_block_nov,block_rval_nov_switch_mean,'r.');
  519. [R,Pval] = corrcoef(pfm_allmk_each_block_nov,block_rval_nov_switch_mean);
  520. plot(pfm_allmk_each_block_nov,polyval(polyfit(pfm_allmk_each_block_nov,block_rval_nov_switch_mean,1),pfm_allmk_each_block_nov),'r-');
  521. xlim([-3 3]); ylim([sc_range(1) sc_range(2)]); if Pval(1,2)<0.1 text(0,-0.1,string(Pval(1,2)),'color','g'); else text(0,-0.1,string(Pval(1,2)),'color','k'); end
  522. title(roi_name_tmp,'interpreter','none'); xlabel("Correct pfm (Z)"); ylabel("Shift trials PPI");
  523. subplot(2,2,4); hold on;
  524. plot(pfm_allmk_each_block_fam,block_rval_fam_switch_mean,'b.');
  525. [R,Pval] = corrcoef(pfm_allmk_each_block_fam,block_rval_fam_switch_mean);
  526. plot(pfm_allmk_each_block_fam,polyval(polyfit(pfm_allmk_each_block_fam,block_rval_fam_switch_mean,1),pfm_allmk_each_block_fam),'b-');
  527. xlim([-3 3]); ylim([sc_range(1) sc_range(2)]); if Pval(1,2)<0.1 text(0,-0.1,string(Pval(1,2)),'color','g'); else text(0,-0.1,string(Pval(1,2)),'color','k'); end
  528. title(""); xlabel("Correct pfm (Z)"); ylabel("Shift trials PPI");
  529. %% sliding window regression analysis (with permutation tests)
  530. figure(4);
  531. %Effect size
  532. yrange_beta_all = [-0.4 0.4];
  533. subplot(2,2,1); hold on;
  534. boundedline(bn_x,mean(ef_sff_nov_wsls,1),ci_sff_nov_wsls,'transparency',0.1,'y');
  535. plot(bn_x,mean(ef_block_nov_wsls,1),'k-'); %wsls
  536. for bn = 2:nstep-2
  537. if (ef_block_nov_wsls(bn)>(mean(ef_sff_nov_wsls(:,bn))+ci_sff_nov_wsls(bn,2)) && ef_block_nov_wsls(bn+1)>(mean(ef_sff_nov_wsls(:,bn+1))+ci_sff_nov_wsls(bn+1,2)) && ef_block_nov_wsls(bn+2)>(mean(ef_sff_nov_wsls(:,bn+2))+ci_sff_nov_wsls(bn+2,2))) || ...
  538. (ef_block_nov_wsls(bn)<(mean(ef_sff_nov_wsls(:,bn))-ci_sff_nov_wsls(bn,1)) && ef_block_nov_wsls(bn+1)<(mean(ef_sff_nov_wsls(:,bn+1))-ci_sff_nov_wsls(bn+1,1)) && ef_block_nov_wsls(bn+2)<(mean(ef_sff_nov_wsls(:,bn+2))-ci_sff_nov_wsls(bn+2,1)))
  539. plot([bn_x(bn-1) bn_x(bn)],[ef_block_nov_wsls(bn-1) ef_block_nov_wsls(bn)],'k-','linewidth',3);
  540. plot([bn_x(bn) bn_x(bn+1)],[ef_block_nov_wsls(bn) ef_block_nov_wsls(bn+1)],'k-','linewidth',3);
  541. plot([bn_x(bn+1) bn_x(bn+2)],[ef_block_nov_wsls(bn+1) ef_block_nov_wsls(bn+2)],'k-','linewidth',3);
  542. end
  543. end
  544. plot([0 0],[yrange_beta_all(1) yrange_beta_all(2)],'k--'); plot([psth_window(1) psth_window(2)],[0 0],'k-'); title("Novel block"); ylabel("Beta (WSLS coding)"); xlabel("Time from rew");
  545. xlim(psth_window); ylim(yrange_beta_all);
  546. subplot(2,2,2); hold on;
  547. boundedline(bn_x,mean(ef_sff_fam_wsls,1),ci_sff_fam_wsls,'transparency',0.1,'y');
  548. plot(bn_x,mean(ef_block_fam_wsls,1),'k-'); %wsls
  549. for bn = 2:nstep-2
  550. if (ef_block_fam_wsls(bn)>(mean(ef_sff_fam_wsls(:,bn))+ci_sff_fam_wsls(bn,2)) && ef_block_fam_wsls(bn+1)>(mean(ef_sff_fam_wsls(:,bn+1))+ci_sff_fam_wsls(bn+1,2)) && ef_block_fam_wsls(bn+2)>(mean(ef_sff_fam_wsls(:,bn+2))+ci_sff_fam_wsls(bn+2,2))) || ...
  551. (ef_block_fam_wsls(bn)<(mean(ef_sff_fam_wsls(:,bn))-ci_sff_fam_wsls(bn,1)) && ef_block_fam_wsls(bn+1)<(mean(ef_sff_fam_wsls(:,bn+1))-ci_sff_fam_wsls(bn+1,1)) && ef_block_fam_wsls(bn+2)<(mean(ef_sff_fam_wsls(:,bn+2))-ci_sff_fam_wsls(bn+2,1)))
  552. plot([bn_x(bn-1) bn_x(bn)],[ef_block_fam_wsls(bn-1) ef_block_fam_wsls(bn)],'k-','linewidth',3);
  553. plot([bn_x(bn) bn_x(bn+1)],[ef_block_fam_wsls(bn) ef_block_fam_wsls(bn+1)],'k-','linewidth',3);
  554. plot([bn_x(bn+1) bn_x(bn+2)],[ef_block_fam_wsls(bn+1) ef_block_fam_wsls(bn+2)],'k-','linewidth',3);
  555. end
  556. end
  557. plot([0 0],[yrange_beta_all(1) yrange_beta_all(2)],'k--'); plot([psth_window(1) psth_window(2)],[0 0],'k-'); title("Familiar block"); xlabel("Time from rew");
  558. xlim(psth_window); ylim(yrange_beta_all);
  559. %%
  560. end

Fujimoto_NatComm_2026_gPPI.m at commit 3fcced8, no license · at the source

Overview

Authors: Atsushi Fujimoto1,2,3, Catherine Elorette1,2, Satoka H. Fujimoto1,2,3, Lazar Fleysher4, Brian E. Russ1,5,6, Peter H. Rudebeck1,2
  1. Nash Family Department of Neuroscience and Friedman Brain Institute, Icahn School of Medicine at Mount Sinai,New York, NY USA
  2. Lipschultz Center for Cognitive Neuroscience, Icahn School of Medicine at Mount Sinai,New York, NY USA
  3. Present Address: Department of Neuroscience and Center for Magnetic Resonance Research, University of Minnesota,Minneapolis, MN USA
  4. BioMedical Engineering and Imaging Institute, Icahn School of Medicine at Mount Sinai,New York, NY USA
  5. Center for Biomedical Imaging and Neuromodulation, Nathan Kline Institute,Orangeburg, NY USA
  6. Department of Psychiatry, New York University at Langone,New York, NY USA
Journal: Nature communications, volume 17, issue 1, article 7153
Dates: received 6 January 2025; accepted 20 April 2026; published online 4 June 2026
Type: Research article · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1038/s41467-026-72782-1 · PMID 42236691 · PMCID PMC13396457 · OpenAlex W7163349172
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: non-human primate (organism)
Methods: Statistics, Connectivity, fMRI & imaging
Keywords: Neural circuits, Learning and memory
MeSH: Decision Making*, Learning*, Prefrontal Cortex*, Animals, Behavior, Animal, Brain Mapping, Female, Gyrus Cinguli, Macaca mulatta, Magnetic Resonance Imaging, Male, Receptors, Dopamine D2, Reward (* major topic)
Topic: Memory and Neural Mechanisms (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Citations: cited by 1 paper (Europe PMC); 74 references in the paper

Abstract

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

Repositories

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

Fujimoto-Lab-UMN/Awake-fMRI-LRN

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: 3fcced843e70799d48f8845341acdac26fa5abe0, 25 March 2026
Languages: MATLAB (5)
Size: 6 files, 5 scripts
Software Heritage: not archived
Found in: “Code availability”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Statistics and Machine Learning Toolbox (5 files), boundedline (3 files), AFNI (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
6 files

Zenodo 19225305

License: CC-BY-4.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Statistics and Machine Learning Toolbox (5 files), boundedline (3 files), AFNI (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
6 files
At the source:

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/s41467-026-72782-1.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

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

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-72782-1.

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

Recorded: type, language, journal, volume, issue, pages, dates, 6 authors, 2 keywords, 13 MeSH terms, 4 funders, 71 references.

Cite

This paper

Fujimoto, A., Elorette, C., Fujimoto, S. H., Fleysher, L., Russ, B. E., & Rudebeck, P. H. (2026). Ventrolateral prefrontal cortex in macaques guides decisions in different learning conditions. Nature communications, 17(1), 7153. https://doi.org/10.1038/s41467-026-72782-1

BibTeX

@article{fujimoto2026ventrolateral,
author = {Fujimoto, Atsushi and Elorette, Catherine and Fujimoto, Satoka H. and Fleysher, Lazar and Russ, Brian E. and Rudebeck, Peter H.},
title = {{Ventrolateral prefrontal cortex in macaques guides decisions in different learning conditions}},
journal = {Nature communications},
year = {2026},
month = jun,
volume = {17},
number = {1},
pages = {7153},
publisher = {Nature Publishing Group},
issn = {2041-1723},
doi = {10.1038/s41467-026-72782-1},
url = {https://doi.org/10.1038/s41467-026-72782-1},
pmid = {42236691},
pmcid = {PMC13396457}
}

RIS

TY - JOUR
AU - Fujimoto, Atsushi
AU - Elorette, Catherine
AU - Fujimoto, Satoka H.
AU - Fleysher, Lazar
AU - Russ, Brian E.
AU - Rudebeck, Peter H.
TI - Ventrolateral prefrontal cortex in macaques guides decisions in different learning conditions
T2 - Nature communications
J2 - Nat Commun
PY - 2026
DA - 2026/06/04
VL - 17
IS - 1
SP - 7153
SN - 2041-1723
PB - Nature Publishing Group
DO - 10.1038/s41467-026-72782-1
UR - https://doi.org/10.1038/s41467-026-72782-1
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41467-026-72782-1",
"type": "article-journal",
"title": "Ventrolateral prefrontal cortex in macaques guides decisions in different learning conditions",
"container-title": "Nature communications",
"author": [
{
"family": "Fujimoto",
"given": "Atsushi"
},
{
"family": "Elorette",
"given": "Catherine"
},
{
"family": "Fujimoto",
"given": "Satoka H."
},
{
"family": "Fleysher",
"given": "Lazar"
},
{
"family": "Russ",
"given": "Brian E."
},
{
"family": "Rudebeck",
"given": "Peter H."
}
],
"container-title-short": "Nat Commun",
"volume": "17",
"issue": "1",
"page": "7153",
"DOI": "10.1038/s41467-026-72782-1",
"PMID": "42236691",
"PMCID": "PMC13396457",
"ISSN": "2041-1723",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41467-026-72782-1",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
4
]
]
}
}

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/s41593-026-02301-4
Deep brain stimulation induces white matter remodeling and functional changes to brain-wide networks.
Journal: Nature neuroscience
In common: prime-re.github.io, non-human primate, 8 references, 5 authors
[2] doi:10.1038/s41597-026-07129-y [code]
Dataset of cortical and subcortical single neuron activity during value-based tasks in macaque monkey.
Journal: Scientific data
In common: Statistics and Machine Learning Toolbox, non-human primate, 6 references
[3] doi:10.1038/s41562-026-02473-w [code]
Brain activity, disruption and connectivity comparisons identify origins of human metacognition in other primates.
Journal: Nature human behaviour
In common: Statistics and Machine Learning Toolbox, non-human primate, 5 references
[4] doi:10.1371/journal.pbio.3003767 [code]
Ultrasound neuromodulation reveals distinct roles of the dorsal anterior cingulate cortex and anterior insula in learning.
Journal: PLoS biology
In common: boundedline, Statistics and Machine Learning Toolbox, 3 references
[5] doi:10.1038/s41467-026-76118-x [code]
Control of associative learning by the mediodorsal thalamus-orbitofrontal cortex circuit.
Journal: Nature communications
In common: Statistics and Machine Learning Toolbox, 4 references
[6] doi:10.64898/2026.03.12.710517 [code]
Cortical excitability inversely modulates fMRI connectivity via low-frequency neuronal coupling
Journal: bioRxiv (preprint)
In common: AFNI, Statistics and Machine Learning Toolbox, 2 references
[7] doi:10.1162/imag.a.1253
Mapping the structural connections between the anterior cingulate cortex and the insula/ventrolateral prefrontal cortex.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: non-human primate, 3 references
[8] doi:10.1038/s41467-026-72605-3 [code]
Resolving mesoscale brainstem-prefrontal-striatal pathways underlying decisions upon salient events using submillimeter-resolution fMRI.
Journal: Nature communications
In common: AFNI, 3 references
[9] doi:10.1016/j.neuron.2026.04.011 [code]
Precision fMRI reveals densely interdigitated network patches with conserved motifs in the lateral prefrontal cortex.
Journal: Neuron
In common: AFNI, Statistics and Machine Learning Toolbox, 2 references
[10] doi:10.1038/s41593-026-02357-2 [code]
Experience reorganizes content-specific memory traces in macaques.
Journal: Nature neuroscience
In common: boundedline, Statistics and Machine Learning Toolbox, non-human primate, 1 reference

Contribute

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

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

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.