OSCR

Dorsal Posterior Parietal Cortex Lesions Disrupt Spatial- but Not Motor-Based Inhibition.

Code ↔ Paper

5 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 5 matches
  1. [1] § Materials and Methods › Preliminary Analysis › Stop Signal Task ↔ Archive of OSF Storage/analysis/ssanalysis.m, lines 170–220 · score 0.83 · 80–1000 ms, Failed go trials, successful go trials, 80 ms, 2.5 deg, Successful stop signal
  2. [2] § Materials and Methods › Preliminary Analysis › IOR Task ↔ Archive of OSF Storage/analysis/ssanalysis.m, lines 170–220 · score 0.74 · 80–1000 ms, target onset, 80 ms, anticipatory, delayed, amplitude
  3. [3] § Materials and Methods › Preliminary Analysis › IOR Task ↔ Archive of OSF Storage/analysis/IORanalysis.m, lines 112–132 · score 0.69 · left quadrant, right quadrant, invalid trials, right hemifield, cue, patients
  4. [4] § Materials and Methods › Preliminary Analysis › Stop Signal Task ↔ Archive of OSF Storage/analysis/ctltaskanalysis.m, lines 109–140 · score 0.60 · target position, saccade amplitudes, target location, angular
  5. [5] § Materials and Methods › Procedure › Stop Signal Task ↔ Archive of OSF Storage/analysis/ssanalysis.m, lines 280–284 · score 0.56 · stop signal onset, stop signal delay, SSD

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 · 1,090 lines · 45 KB · no license · 3 matches

  1. % -------------------------------------------------------------------------
  2. % MATLAB analysis scripts for: Dorsal posterior parietal cortex lesions disrupt spatial- but not motor-based inhibition
  3. %
  4. % Copyright (c) 2026 Julie Ouerfelli-Ethier, Aarlenne Z. Khan and Laure
  5. % Pisella
  6. %
  7. % This code is licensed under the MIT License.
  8. % You may use, modify, and distribute this code in accordance with the license.
  9. % See the LICENCE file in the /licences folder for full terms:
  10. % https://spdx.org/licenses/MIT.html
  11. % ---------------------------------------------------------------------
  12. %% Analysis for stop signal task
  13. % The analysis has the following workflow:
  14. % 1) Data preprocessing
  15. % 2) SSRT estimation using the integration method
  16. % 3) Statistical analysis with modified t-tests
  17. % 4) Data visualization (plots for each patient and their controls)
  18. %% Data structure description
  19. % Each row of the param corresponds to one trial.
  20. % Columns are:
  21. % ---- Subject information ----
  22. % 1 = subject ID
  23. % ---- Trial information -----
  24. % 2 = block ID
  25. % 3 = ratio of stop signal during the block: 20 = 20%, 40 = 40%
  26. % 4 = trial ID
  27. % 5 = trial validity based on visual inspection: invalid (0) and valid (1)
  28. % 6 = trial condition: 0 = stop signal; 1 = go trials
  29. % 7 = fixation position x (pixels coordinates, origin at top-left corner)
  30. % 8 = fixation position y (pixels coordinates, origin at top-left corner)
  31. % 9 = trial start times (ms)
  32. % 10 = target onset times (ms)
  33. % 11 = stop signal onset times (ms)
  34. % 12 = ITI onset times (ms)
  35. % 13 = trial end times (ms)
  36. % 14 = target durations (duration between target onset and stop signal
  37. % onset) or stop signal delay (SSD)
  38. % 15 = responses during stop trials: NaN = go trial, 0 = incorrect (failed stop), 1 = correct (successful stop)
  39. % 16 = target location in hemifield: 1 = right; 2 = left
  40. % ---- Information about first saccade (sac 1 below) detected ----
  41. % If no saccade is detected columns 17-25 contain NaNs
  42. % All timings are relative to trial start.
  43. %
  44. % 17 = sac 1 onset (ms)
  45. % 18 = sac 1 peak time (ms)
  46. % 19 = sac 1 offset (ms)
  47. % 20 = sac 1 x start (deg of visual angle)
  48. % 21 = sac 1 y start (deg of visual angle)
  49. % 22 = sac 1 x end (deg of visual angle)
  50. % 23 = sac 1 y end (deg of visual angle)
  51. % 24 = sac 1 peak velocity (deg of visual angle/second)
  52. % 25 = sac 1 duration (ms)
  53. % ---- Information about second saccade (sac 2 below) detected ----
  54. % If no saccade is detected columns 26-34 contain NaNs
  55. % All timings are relative to trial start.
  56. %
  57. % 26 = sac 2 onset (ms)
  58. % 27 = sac 2 peak time (ms)
  59. % 28 = sac 2 offset (ms)
  60. % 29 = sac 2 x start (deg of visual angle)
  61. % 30 = sac 2 y start (deg of visual angle)
  62. % 31 = sac 2 x end (deg of visual angle)
  63. % 32 = sac 2 y end (deg of visual angle)
  64. % 33 = sac 2 peak velocity (deg of visual angle/second)
  65. % 34 = sac 2 duration (ms)
  66. % ---- Variables computed in the present script ----
  67. % 35 = saccade reaction times (ms, saccade onset relative to target onset)
  68. % 36 = saccade amplitudes (deg of visual angle)
  69. % 37 = saccade direction (polar coordinates, 0 to 360°)
  70. % 38 = target location in angle degree (polar coordinates, 0 = right, 1 = left)
  71. % 39 = absolute direction error (deg of visual angle, difference between
  72. % saccade landing position and target position)
  73. % 40 = trial types (see comments): 1 = successful go, 2 = failed go (no
  74. % response), 3 = successful stop, 4 = failed stop, 5= failed go
  75. % (anticipatory or delayed response), 6-7: reserved/error codes (should not occur; indicate unexpected data).
  76. % 42 = Participant groups: 1 = cf; 2 = cf's controls, 3 = ig, 4 = ig's controls
  77. % 43 = new SSDs calculated (accounting for screen delays during experiment)
  78. %%
  79. clear all;
  80. close all;
  81. %% ================= USER PARAMETERS =================
  82. % Instructions: Choose parameter here for analysis of I.G. groups (bilateral)
  83. % and C.F. groups for left or right hemifields. Hemifields here correspond
  84. % to where targets were presented.
  85. analysis_mode = "IG_groups";
  86. % "CF_groups_L"
  87. % "CF_groups_R"
  88. %% load param
  89. load paramstopsignal.txt;
  90. param = paramstopsignal;
  91. %% Subjects IDs and Task parameters
  92. sub = unique(param(:,1)); % subject ID
  93. ratio = [20 40]; % stop signal ratios
  94. %% ---- Data preprocessing ---- %%
  95. %% Remove trials marked as invalid after visual inspection
  96. % During visual inspection, trials marked as "invalid" are assigned 0 in
  97. % column 5.
  98. ind = find(param(:,5)==0);
  99. param1 = param(ind,:);
  100. %% Calculate saccade reaction times (SRTs) relative to target onset
  101. % SRTs are calculated as follows: saccade onset time - target onset time
  102. param1(:,35) = param1(:,17) - param1(:,10);
  103. %% Calculate saccade amplitude and saccade direction
  104. % Saccade amplitude is in degree of visual angle
  105. % Saccade direction is in radians, then converted into polar coordinates
  106. [theta(:,1), param1(:,36)] = cart2pol(param1(:,22)-param1(:,20), param1(:,23)-param1(:,21));
  107. % Saccade direction (radians) is converted in polar coordinates (degrees)
  108. theta(:,2) = degrees(theta(:,1));
  109. % Safeguard to ensure, polar coordinates span across 360 degrees (no
  110. % negatives)
  111. for i=1:length(theta(:,1)) % convert to 360 degrees
  112. if theta(i,2)<-25, param1(i,37) = theta(i,2)+360; theta(i,3) = theta(i,2)+360;
  113. else
  114. param1(i,37) = theta(i,2); theta(i,3) = theta(i,2);
  115. end
  116. end
  117. % Recompute target position in the hemifield in polar coordinates (angular
  118. % degrees).
  119. % 0° = target is on the right side of the screen
  120. % 180° = target is on the left side of the screen
  121. for i = 1:length(param1(:,1))
  122. if param1(i,16) == 1, param1(i,38) = 0; % right
  123. elseif param1(i,16) == 2, param1(i,38) = 180; % left
  124. end
  125. end
  126. % Calculate directional error of the saccade relative to target positions
  127. % This is calculated as follows: target location in polar coordinates -
  128. % saccade direction in polar coordinates
  129. param1(:,39) = abs(param1(:,38) - param1(:,37));
  130. %% % Filtering trials based on saccade amplitude and saccade direction
  131. % This section removes all trials with big amplitudes and big directional errors
  132. % - Amplitudes over 15° are removed
  133. % - Directional errors over 45° for normal saccades between 2.5° and 15° (exclusive)
  134. % Inititalize column 40
  135. param1(:,40)=1;
  136. for i = 1:length(param1(:,1))
  137. if param1(i,36) > 15, param1(i,40)=0; end % Removing any saccades that have big amplitudes
  138. if param1(i,39) > 45 && param1(i,36) > 2.5 && param1(i,36) < 15, param1(i,40)=0; end % Removing regular saccades to the targets wrong direction
  139. end
  140. % Build new param without filtered out trials
  141. ind = find(param1(:,40) == 1);
  142. param2 = param1(ind,:);
  143. %% Trial sorting
  144. % each trial is assigned a number according to trial type (go vs. stop) and
  145. % whether specific conditions are met to define it as successful or failed,
  146. % as follows:
  147. % 1 = successful go trials = go trial and SRTs above 80 ms and above mean+2SD of all go trials and amplitude more than 2.5 degrees and less than 15 degrees and abs error less than 45 deg
  148. % 2 = failed go trials = go trial and SRTS above mean+2SD (go omission, to take on the MAX good go trials srts)
  149. % 2 = failed go trials = go trial and no saccade was made (go omission, to take on the MAX good go trials srts)
  150. % 2 = failed go trials = go trial and saccades with amplitude less than 2.5 deg (go omission, to take on MAX good go trial srts)
  151. % 5 = failed go trials = go trial and saccades made before 80ms (to remove from analysis)
  152. % 3 = successful stop trials = stop trial and no saccade was made
  153. % 3 = successful stop trials = stop trial and SRT above mean+2SD of all go trials
  154. % 3 = successful stop trials = stop trial and amplitude less than 2.5 deg
  155. % 4 = failed stop trials = stop trial and saccades made before 80ms (to remove from analysis)
  156. % 6-7 = unexpected value. Used for diagnostics.
  157. % Trial sorted per subject, stop signal ratio and block
  158. param2(:,40)=NaN; % Initialize the column
  159. for j=1:length(sub) % subject ID
  160. for r= 1:2 % stop signal ratio
  161. for b = 1:11 % block ID
  162. s = sub(j);
  163. indgo = find(param2(:,1)==s & param2(:,6)==1 & param2(:,3) == ratio(r) & param2(:,2) == b);
  164. meansrt = nanmean(param1(indgo,35));
  165. sdsrt = nanstd(param1(indgo,35));
  166. % go trials
  167. for i = 1:length(indgo)
  168. if isnan(param2(indgo(i),35)), param2(indgo(i),40) = 2; % failed go trial (go omission, no saccade was made)
  169. elseif param2(indgo(i),36)<=2.5, param2(indgo(i),40) = 2; % failed go trial (go ommision, no saccade was made)
  170. elseif param2(indgo(i),35) > 79 && param2(indgo(i),35) < 1000 && param2(indgo(i),36)>2.5, param2(indgo(i),40) = 1; % successful go trial (saccades made between 80 ms and 1000 ms from target onset)
  171. elseif param2(indgo(i),35) >= 1000 && param2(indgo(i),36)>2.5, param2(indgo(i),40) = 5; % failed go trial (delayed saccade)
  172. elseif param2(indgo(i),35)< 80 && param2(indgo(i),36)>2.5, param2(indgo(i),40) = 5; % failed go trial (anticipatory saccade)
  173. else
  174. param2(indgo(i),40) = 6; % Unexpected value
  175. end
  176. end
  177. % stop trials
  178. indstop = find(param2(:,1)==s & param2(:,6)==0 & param2(:,3) == ratio(r) & param2(:,2) == b);
  179. for i=1:length(indstop)
  180. if isnan(param2(indstop(i),35)), param2(indstop(i),40) = 3; % successful stop (no saccade)
  181. elseif param2(indstop(i),35) < 1000 && param2(indstop(i),36) > 2.5, param2(indstop(i),40) = 4; % failed stop trial (a saccade was made)
  182. elseif param2(indstop(i),35) < 1000 && param2(indstop(i),36) <= 2.5, param2(indstop(i),40) = 3; % successful stop (barely a saccade)
  183. elseif param2(indstop(i),35) >= 1000, param2(indstop(i),40) = 3; % successful stop
  184. else
  185. param2(indstop(i),40) = 7; % Unexpected value
  186. end
  187. end
  188. end
  189. end
  190. end
  191. %% Sort go omissions
  192. % Go omissions reaction times are changed to maxSRT (for each participant and ratio separately)
  193. % Note: This method is only used to replace trials without a saccade,
  194. % anticipatory and delayed responses are kept as such (based on Verbruggen
  195. % et al., 2019)
  196. for j = 1:length(sub) % subject ID
  197. for r = 1:2 % stop signal ratio
  198. for b = 1:11 % block ID
  199. s = sub(j);
  200. % identify maximum RT for successful go trials for each ratio and participant
  201. indmaxgo = find(param2(:,1) == s & param2(:,40) == 1 & param2(:,3) == ratio(r) & param2(:,2) == b);
  202. maximum = max(param2(indmaxgo,35));
  203. ind = find(param2(:,1) == s & param2(:,40) == 2 & param2(:,3)==ratio(r) & param2(:,2) == b);
  204. % replace go omissions by the maximum
  205. for i=1:length(ind)
  206. param2(ind(i),35) = maximum;
  207. end
  208. end
  209. end
  210. end
  211. %% Optional data check: number of trials per participant/trial type
  212. % Thi section was used to verify the number of trials per stop signal ratio
  213. % and trial type for each participant.
  214. numtrials = [];
  215. for i = 1:length(sub) % subject ID
  216. for r = 1:2 % stop signal ratio
  217. for type = 1:4 % trial type (successful go, failed go, successful stop, failed stop)
  218. s = sub(i);
  219. ind = find(param2(:,1)==s & param2(:,40)==type & param2(:,3)==ratio(r));
  220. % numtrials has this structure (each row is subject ID x stop signal ratio x trial type).
  221. % Columns are:
  222. % 1 = subject ID
  223. % 2 = stop signal ratio
  224. % 3 = trial type
  225. % 4 = number of trials
  226. numtrials = [numtrials; s ratio(r) type length(ind)];
  227. end
  228. end
  229. end
  230. %% Sort participants into groups
  231. % 1 = cf
  232. % 2 = cf's controls
  233. % 3 = ig
  234. % 4 = ig's controls
  235. for i = 1:length(param2(:,1))
  236. if param2(i,1) == 1, param2(i,42) = 1; % cf
  237. elseif param2(i,1) > 1 && param2(i,1) < 13, param2(i,42) = 2; % cf's controls: subject ID 2 to 12
  238. elseif param2(i,1) == 13, param2(i,42) = 3; % ig
  239. elseif param2(i,1) > 13 && param2(i,1) < 24, param2(i,42) = 4; % ig's 's controls: subject ID 14 to 23
  240. else
  241. disp('Subject ID not assigned to a group!') % safeguard
  242. end
  243. end
  244. %% Adjust stop signal delays (col 14) to account for delays related to screen and computer
  245. % New SSDs are calculated as follows: signal onset time - target onset time
  246. param2(:,43)=param2(:,11)-param2(:,10);
  247. param3=param2;
  248. %% Calculate proportions of trials per participant per block
  249. meanpropblock = [];
  250. for i = 1:length(sub) % subject ID
  251. for t = 1:4 % trial type (successful go, failed go, successful stop, failed stop)
  252. for r = 1:2 % stop signal ratio
  253. for b = 1:11 % block ID
  254. s = sub(i);
  255. ind = find(param3(:,1) == s & param3(:,40) == t & param3(:,3) == ratio(r) & param3(:,2) == b); % total per group
  256. if ~isempty(ind)
  257. indgo = find(param3(:,1) == s & param3(:,40) < 3 & param3(:,3) == ratio(r) & param3(:,2) == b); % total go trials (failed + successful)
  258. indstop = find(param3(:,1) == s & param3(:,40) > 2 & param3(:,40) < 5 & param3(:,3) == ratio(r) & param3(:,2) == b); % total stop trials (failed + successful)
  259. % meanpropblock has this structure (each row is subject
  260. % ID x trial type)
  261. % columns are:
  262. % 1 = subject ID
  263. % 2 = trial type
  264. % 3 = stop signal ratio
  265. % 4 = block ID
  266. % 5 = mean SRT
  267. % 6 = number of trials per trial type
  268. % 7 = number of go trials
  269. % 8 = number of stop trials
  270. % 9 = proportion of go trials
  271. % 10 = proportion of stop trials,
  272. meanpropblock = [meanpropblock; s t ratio(r) b ...
  273. nanmean(param3(ind,35)) length(ind) length(indgo) length(indstop)...
  274. length(ind)/length(indgo) length(ind)/length(indstop)];
  275. end
  276. end
  277. end
  278. end
  279. end
  280. %% Accoridng to analysis_mode, proceed with measures of the stop signal task
  281. switch analysis_mode
  282. case "IG_groups"
  283. % No hemifield filtering for I.G.
  284. param4 = param3;
  285. case "CF_groups_L"
  286. % left hemifield for C.F. groups
  287. analysis_ind = param3(:, 16) == 2;
  288. param4 = param3(analysis_ind,:);
  289. case "CF_groups_R"
  290. % right hemifield for C.F. groups
  291. analysis_ind = param3(:,16) == 1;
  292. param4 = param3(analysis_ind,:);
  293. otherwise
  294. error('Invalid analysis_mode. Please check the spelling!')
  295. end
  296. %% ---- Estimating SSRT ----- %%
  297. %% SSRT is estimated using the integration method (Verbruggen et al., 2019).
  298. % This method is based on the independence assumption of the race model (Logan et al., 1984),
  299. % which states that the finishing time of the go process is independent of
  300. % the stopping process. Under this assumption the distribution of RTs on
  301. % stop trials is the same as the RT distribution on go trials.
  302. %
  303. % SSRT is calculated as the finishing time of the stopping process minus the
  304. % starting time of the sopping process. This estimation is achieved through
  305. % the three steps outlined below.
  306. %
  307. % FIRST STEP: The starting time of the stopping process is estimated as the mean
  308. % stop-signal delay (SSD) for each participant.
  309. %
  310. % SECOND STEP: The finishing time of the stopping process is estimated using the
  311. % integration procedure. First, we compute the proportion of failed stop
  312. % trials (p(respond|signal)). Then, we sort the RTs from the correct go
  313. % trials and compute their cumulative distribution. We next identify the RT
  314. % corresponding to the percentile of the go RT distribution equal to
  315. % p(respond|signal). This RT represents the estimated finishing time of the
  316. % go process at which stopping fails.
  317. %
  318. % THIRD STEP: Finally, SSRTs are calculated per participant and per signal
  319. % stop ratio as follows: SSRT = RT percentile - mean SSD
  320. %% FIRST STEP: Calculate the mean SSD for each participant for each ratio. This is the start time of the stopping process
  321. meanssd = [];
  322. for r = 1:2 % stop signal ratio
  323. for i = 1:length(sub) % subject ID
  324. s = sub(i);
  325. ind = find(param4(:,1) == s & param4(:,6) == 0 & param4(:,3) == ratio(r)); % stop signal trials
  326. % meanssd has the following structure (each row is subject ID x stop signal ratio:
  327. % columns are:
  328. % 1 = subject ID
  329. % 2 = stop signal ratio
  330. % 3 = mean SSD
  331. % 4 = sem SSD
  332. % 5 = number of trials
  333. meanssd = [meanssd; s ratio(r) nanmean(param4(ind,43)) nansem(param4(ind,43)) length(ind)];
  334. end
  335. end
  336. %% SECOND STEP: calculate the finishing time of the stopping process.
  337. % 2.1. Calculate the cumulative distribution for each subject for each stop signal ratio
  338. % 2.1.1. Calculate the number of trials for each SRT bin for go and stop trials
  339. % Go SRT distributions (trial types 1-2, & 5)
  340. bins = 80:5:1500;
  341. meansrtbin = [];
  342. for r = 1:2 % ratio condition
  343. for i = 1:length(sub)
  344. for b = 1:length(bins)-1
  345. s = sub(i);
  346. ind = find(param4(:,1) == s & (param4(:,40) < 3 | param4(:,40) == 5) & param4(:,3) == ratio(r) & param4(:,35)>=bins(b) & param4(:,35)<bins(b+1));
  347. meansrtbin = [meansrtbin; s ratio(r) (bins(b) + bins(b+1))/2 length(ind)];
  348. end
  349. end
  350. end
  351. % Failed stop SRT distributions (trial type 4)
  352. meanfailsrtbin = [];
  353. for r = 1:2 % ratio condition
  354. for i = 1:length(sub)
  355. for b = 1:length(bins)-1
  356. s = sub(i);
  357. ind = find(param4(:,1) == s & param4(:,40) == 4 & param4(:,3) == ratio(r) & param4(:,35)>=bins(b) & param4(:,35)<bins(b+1));
  358. meanfailsrtbin = [meanfailsrtbin; s ratio(r) (bins(b) + bins(b+1))/2 length(ind)];
  359. end
  360. end
  361. end
  362. % 2.1.2. Based on SRT distributions calculated above, calculate the cumulative proportion of trials
  363. % go SRT distribution
  364. for r = 1:2 % stop signal ratio
  365. for i = 1:length(sub) % signal ID
  366. s = sub(i);
  367. ind = find(meansrtbin(:,1) == s & meansrtbin(:,2) == ratio(r));
  368. indsum = sum(meansrtbin(ind,4)); % sum of trials per sub
  369. meansrtbin(ind,6) = cumsum(meansrtbin(ind,4)/indsum); % cumulative proportion
  370. end
  371. end
  372. % Failed stop distribution
  373. for r = 1:2 % stop signal ratio
  374. for i = 1:length(sub) % subject ID
  375. s = sub(i);
  376. ind = find(meanfailsrtbin(:,1) == s & meanfailsrtbin(:,2) == ratio(r));
  377. indsum = sum(meanfailsrtbin(ind,4)); % sum of trials per sub
  378. meanfailsrtbin(ind,6) = cumsum(meanfailsrtbin(ind,4)/indsum); % cumulative proportion
  379. end
  380. end
  381. %% 2.2. Calculate proportions of trials overall
  382. % This section computes the proportion of go and stop trials for each
  383. % participant, trial type, and stop signal tation. These proportions are
  384. % lated used to estimate SSRT by identifying the SRT bin where the
  385. % proporition of go trials matches the proportion of failed stop trials.
  386. meanprop = []; % initialize matrix
  387. for r = 1:2 % stop signal ratio
  388. for i = 1:length(sub) % subject ID
  389. for t = 1:4 % trial type
  390. s = sub(i);
  391. ind = find(param4(:,1) == s & param4(:,40) == t & param4(:,3) == ratio(r)); % total per group
  392. indgo = find(param4(:,1) == s & (param4(:,40) <3 | param4(:,40) == 5) & param4(:,3) == ratio(r)); % total go trials (failed + successful), cases 1, 2 and 5
  393. indstop = find(param4(:,1) == s & param4(:,40) >2 & param4(:,40) < 5 & param4(:,3) == ratio(r)); % total stop trials (failed + successful), cases 3 and 4
  394. % meanprop has the following structure (one row per subject X trial type x ratio):
  395. % The columns are:
  396. % 1 = subject ID
  397. % 2 = trial type
  398. % 3 = stop signal ratio
  399. % 4 = participant group
  400. % 5 = mean SRT
  401. % 6 = total number of trials
  402. % 7 = number of go trials (trial types 1, 2 and 5)
  403. % 8 = number of stop trials (trial types 3 and 4)
  404. % 9 = proportion of trials for each trial type over total number of go trials
  405. % 10 = proportion of trials for each trial type over total
  406. % number of stop trials.
  407. meanprop = [meanprop; s t ratio(r) ...
  408. nanmean(param4(ind,42)) nanmean(param4(ind,35)) length(ind) length(indgo) length(indstop)...
  409. length(ind)/length(indgo) length(ind)/length(indstop)];
  410. end
  411. end
  412. end
  413. %
  414. % Here we add the proportion of failed stop trials to meansrtbin.
  415. % This value is constant for each participant and stop signal ratio and
  416. % will later be compared to the cumulative proportion of go trials in each
  417. % SRT bin.
  418. for r = 1:2 % stop signal ratio
  419. for i = 1:length(sub) % subject ID
  420. s = sub(i);
  421. ind = find(meanprop(:,1) == s & meanprop(:,2) == 4 & meanprop(:,3) == ratio(r)); % proportion of failed stop trials for a given ratio
  422. ind2 = find(meansrtbin(:,1) == s & meansrtbin(:,2) == ratio(r));
  423. meansrtbin(ind2,7) = meanprop(ind,10);
  424. end
  425. end
  426. % Compute the absolute difference between:
  427. % 1) proportion of failed stop, and;
  428. % 2) proportion of go trials in each SRT bin
  429. % The SRT bin with the smallest difference approximates the point where the
  430. % probabilities are equal.
  431. meansrtbin(:,8) = abs(meansrtbin(:,7) - meansrtbin(:,6));
  432. %% THIRD STEP: Estimate SSRT using the integration method:
  433. % 1) we identify the SRT bin where the proportion of go trials is closest to the
  434. % proportion of failed stop signals.
  435. % 2) we use the SRT value in this bin.
  436. % 3) we subtract the participant's mean SSD to obtain SSRT.
  437. ssrt = [];
  438. for r = 1:2 % ratio condition
  439. for i = 1:length(sub)
  440. s = sub(i);
  441. ind = find(meansrtbin(:,1) == s & meansrtbin(:,2) == ratio(r));
  442. ind2 = find(meansrtbin(ind,8) == nanmin(meansrtbin(ind,8)));
  443. ind3 = find(meanssd(:,1)== s & meanssd(:,2)==ratio(r));
  444. if ~isempty(ind2)
  445. % SSRT structure (each row is a subject x stop signal ratio):
  446. % Columns are:
  447. % 1 = Subject ID
  448. % 2 = Stop signal ratio
  449. % 3 = SRT bin
  450. % 4 = SSRT (srt bin - mean ssd)
  451. ssrt = [ssrt; s ratio(r) meansrtbin(ind(ind2(1)), 3) - meanssd(ind3, 3)];
  452. else
  453. ssrt = [ssrt; s ratio(r) NaN];
  454. end
  455. end
  456. end
  457. %% Build a matrix with all stop signal task measures for analysis
  458. meansall = []; % initialize meansall
  459. for r = 1:2 % stop signal ratio
  460. for i = 1:length(sub)
  461. s = sub(i);
  462. ind = find(meanprop(:,1) == s & meanprop(:,3) == ratio(r) & meanprop(:,2) == 1); % successful go trials
  463. ind2 = find(meanprop(:,1) == s & meanprop(:,3) == ratio(r) & meanprop(:,2) == 3); % successful stop trials
  464. ind3 = find(meanprop(:,1) == s & meanprop(:,3) == ratio(r) & meanprop(:,2) == 4); % failed stop trials
  465. ind4 = find(ssrt(:,1)== s & ssrt(:,2)==ratio(r)); % mean ssrt for each participant and ratio
  466. % Meansall structure (each row is a subject ID x stop signal ration)
  467. % Columns are:
  468. % 1 = subject ID
  469. % 2 = stop signal ratio
  470. % 3 = successful go proportion
  471. % 4 = successful go SRT (in ms)
  472. % 5 = successful stop proportion
  473. % 6 = failed stop SRT (in ms)
  474. % 7 = SSRT
  475. % 8 = participant group
  476. meansall = [meansall; s ratio(r) meanprop(ind,9) meanprop(ind,5)...
  477. meanprop(ind2,10) meanprop(ind3,5) ssrt(ind4,3)...
  478. meanprop(ind3,4)]; %
  479. end
  480. end
  481. %% ---- Data analysis: Case study statistics ---- %%
  482. % Stats are performed according to analysis_mode defined at L. 80
  483. % Specify constants
  484. alpha = 0.05;
  485. n_IG = numel(unique(param4(param4(:,42) == 4, 1))); % number of controls for IG
  486. n_CF = numel(unique(param4(param4(:,42) == 2, 1))); % number of controls for CF
  487. if analysis_mode == "IG_groups"
  488. % Specify constants
  489. patient_group = 3;
  490. ctl_group = 4;
  491. ss_ratio = 20;
  492. data = meansall(meansall(:,2) == ss_ratio, :);
  493. controls = data(data(:,8) == ctl_group, :);
  494. patient = data(data(:,8) == patient_group, :);
  495. disp('---------------------------------------')
  496. fprintf('\nAnalysis mode: %s\n', analysis_mode)
  497. disp('---------------------------------------')
  498. % -- 20 % stop ratio -- %
  499. disp('Analysis for 20% stop signal ratio...');
  500. % successful go proportion
  501. Xm_IG = nanmean(controls(:,3));
  502. Xs_IG = nanstd(controls(:,3));
  503. Xc_IG = patient(:,3);
  504. [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
  505. fprintf('Successful go proportion\n')
  506. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  507. % successful go SRTs (ms)
  508. Xm_IG = nanmean(controls(:,4));
  509. Xs_IG = nanstd(controls(:,4));
  510. Xc_IG = patient(:,4);
  511. [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
  512. fprintf('Successful go SRTs (ms)\n')
  513. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  514. % successful stop proportion
  515. Xm_IG = nanmean(controls(:,5));
  516. Xs_IG = nanstd(controls(:,5));
  517. Xc_IG = patient(:,5);
  518. [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
  519. fprintf('Successful stop proportion\n')
  520. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  521. % failed stop SRTs (ms)
  522. Xm_IG = nanmean(controls(:,6));
  523. Xs_IG = nanstd(controls(:,6));
  524. Xc_IG = patient(:,6);
  525. [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
  526. fprintf('Successful go proportion\n')
  527. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  528. % SSRTs (ms)
  529. Xm_IG = nanmean(controls(:,7));
  530. Xs_IG = nanstd(controls(:,7));
  531. Xc_IG = patient(:,7);
  532. [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
  533. fprintf('SSRTs (ms)\n')
  534. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  535. % -- 40 % stop ratio -- %
  536. % Specify constants
  537. ss_ratio = 40;
  538. data = meansall(meansall(:,2) == ss_ratio, :);
  539. controls = data(data(:,8) == ctl_group, :);
  540. patient = data(data(:,8) == patient_group, :);
  541. disp('---------------------------------------')
  542. disp('Analysis for 40% stop signal ratio...');
  543. % successful go proportion
  544. Xm_IG = nanmean(controls(:,3));
  545. Xs_IG = nanstd(controls(:,3));
  546. Xc_IG = patient(:,3);
  547. [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
  548. fprintf('Successful go proportion\n')
  549. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  550. % successful go SRTs (ms)
  551. Xm_IG = nanmean(controls(:,4));
  552. Xs_IG = nanstd(controls(:,4));
  553. Xc_IG = patient(:,4);
  554. [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
  555. fprintf('Successful go SRTs (ms)\n')
  556. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  557. % successful stop proportion
  558. Xm_IG = nanmean(controls(:,5));
  559. Xs_IG = nanstd(controls(:,5));
  560. Xc_IG = patient(:,5);
  561. [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
  562. fprintf('Successful stop proportion\n')
  563. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  564. % failed stop SRTs (ms)
  565. Xm_IG = nanmean(controls(:,6));
  566. Xs_IG = nanstd(controls(:,6));
  567. Xc_IG = patient(:,7);
  568. [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
  569. fprintf('Successful go proportion\n')
  570. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  571. % SSRTs (ms)
  572. Xm_IG = nanmean(controls(:,7));
  573. Xs_IG = nanstd(controls(:,7));
  574. Xc_IG = patient(:,8);
  575. [h p t df] = ttestch(Xm_IG, Xs_IG, Xc_IG, n_IG, alpha);
  576. fprintf('SSRTs (ms)\n')
  577. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  578. % -- Difference in ssrts for 20% vs. 40% -- %
  579. % Specify constants
  580. ss20ratio = 20;
  581. data20 = meansall(meansall(:,2) == ss20ratio, :);
  582. controls20 = data20(data20(:,8) == ctl_group, :);
  583. patient20 = data20(data20(:,8) == patient_group, :);
  584. ss40ratio = 40;
  585. data40 = meansall(meansall(:,2) == ss40ratio, :);
  586. controls40 = data40(data40(:,8) == ctl_group, :);
  587. patient40 = data40(data40(:,8) == patient_group, :);
  588. Xm = nanmean(controls20(:,7));
  589. Xs = nanstd(controls20(:,7));
  590. Xc = patient20(:,7);
  591. Ym = nanmean(controls40(:,7));
  592. Ys = nanstd(controls40(:,7));
  593. Yc = patient40(:,7);
  594. r = corrcoef(controls20(:,7), controls40(:,7));
  595. [h p t df] = rsdt(Xm, Xs, Xc, Ym, Ys, Yc, n_IG, r(2), alpha);
  596. fprintf('SSRTs (ms) - Difference between 20%% and 40%%\n')
  597. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  598. elseif analysis_mode == "CF_groups_L"
  599. % Specify constants
  600. patient_group = 1;
  601. ctl_group = 2;
  602. ss_ratio = 20;
  603. data = meansall(meansall(:,2) == ss_ratio, :);
  604. controls = data(data(:,8) == ctl_group, :);
  605. patient = data(data(:,8) == patient_group, :);
  606. disp('---------------------------------------')
  607. fprintf('\nAnalysis mode: %s\n', analysis_mode)
  608. disp('---------------------------------------')
  609. % -- 20 % stop ratio -- %
  610. disp('Analysis for 20% stop signal ratio...');
  611. % successful go proportion
  612. Xm_CF = nanmean(controls(:,3));
  613. Xs_CF = nanstd(controls(:,3));
  614. Xc_CF = patient(:,3);
  615. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  616. fprintf('Successful go proportion\n')
  617. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  618. % successful go SRTs (ms)
  619. Xm_CF = nanmean(controls(:,4));
  620. Xs_CF = nanstd(controls(:,4));
  621. Xc_CF = patient(:,4);
  622. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  623. fprintf('Successful go SRTs (ms)\n')
  624. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  625. % successful stop proportion
  626. Xm_CF = nanmean(controls(:,5));
  627. Xs_CF = nanstd(controls(:,5));
  628. Xc_CF = patient(:,5);
  629. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  630. fprintf('Successful stop proportion\n')
  631. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  632. % failed stop SRTs (ms)
  633. Xm_CF = nanmean(controls(:,6));
  634. Xs_CF = nanstd(controls(:,6));
  635. Xc_CF = patient(:,6);
  636. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  637. fprintf('Successful go proportion\n')
  638. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  639. % SSRTs (ms)
  640. Xm_CF = nanmean(controls(:,7));
  641. Xs_CF = nanstd(controls(:,7));
  642. Xc_CF = patient(:,7);
  643. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  644. fprintf('SSRTs (ms)\n')
  645. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  646. % -- 40 % stop ratio -- %
  647. % Specify constants
  648. ss_ratio = 40;
  649. data = meansall(meansall(:,2) == ss_ratio, :);
  650. controls = data(data(:,8) == ctl_group, :);
  651. patient = data(data(:,8) == patient_group, :);
  652. disp('---------------------------------------')
  653. disp('Analysis for 40% stop signal ratio...');
  654. % successful go proportion
  655. Xm_CF = nanmean(controls(:,3));
  656. Xs_CF = nanstd(controls(:,3));
  657. Xc_CF = patient(:,3);
  658. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  659. fprintf('Successful go proportion\n')
  660. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  661. % successful go SRTs (ms)
  662. Xm_CF = nanmean(controls(:,4));
  663. Xs_CF = nanstd(controls(:,4));
  664. Xc_CF = patient(:,4);
  665. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  666. fprintf('Successful go SRTs (ms)\n')
  667. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  668. % successful stop proportion
  669. Xm_CF = nanmean(controls(:,5));
  670. Xs_CF = nanstd(controls(:,5));
  671. Xc_CF = patient(:,5);
  672. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  673. fprintf('Successful stop proportion\n')
  674. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  675. % failed stop SRTs (ms)
  676. Xm_CF = nanmean(controls(:,6));
  677. Xs_CF = nanstd(controls(:,6));
  678. Xc_CF = patient(:,6);
  679. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  680. fprintf('Successful go proportion\n')
  681. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  682. % SSRTs (ms)
  683. Xm_CF = nanmean(controls(:,7));
  684. Xs_CF = nanstd(controls(:,7));
  685. Xc_CF = patient(:,7);
  686. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  687. fprintf('SSRTs (ms)\n')
  688. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  689. % -- Difference in ssrts for 20% vs. 40% -- %
  690. ss20ratio = 20;
  691. data20 = meansall(meansall(:,2) == ss20ratio, :);
  692. controls20 = data20(data20(:,8) == ctl_group, :);
  693. patient20 = data20(data20(:,8) == patient_group, :);
  694. ss40ratio = 40;
  695. data40 = meansall(meansall(:,2) == ss40ratio, :);
  696. controls40 = data40(data40(:,8) == ctl_group, :);
  697. patient40 = data40(data40(:,8) == patient_group, :);
  698. Xm = nanmean(controls20(:,7));
  699. Xs = nanstd(controls20(:,7));
  700. Xc = patient20(:,7);
  701. Ym = nanmean(controls40(:,7));
  702. Ys = nanstd(controls40(:,7));
  703. Yc = patient40(:,7);
  704. r = corrcoef(controls20(:,7), controls40(:,7));
  705. [h p t df] = rsdt(Xm, Xs, Xc, Ym, Ys, Yc, n_CF, r(2), alpha);
  706. fprintf('SSRTs (ms) - Difference between 20%% and 40%%\n')
  707. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  708. elseif analysis_mode == "CF_groups_R"
  709. % Specify constants
  710. patient_group = 1;
  711. ctl_group = 2;
  712. ss_ratio = 20;
  713. data = meansall(meansall(:,2) == ss_ratio, :);
  714. controls = data(data(:,8) == ctl_group, :);
  715. patient = data(data(:,8) == patient_group, :);
  716. disp('---------------------------------------')
  717. fprintf('\nAnalysis mode: %s\n', analysis_mode)
  718. disp('---------------------------------------')
  719. % -- 20 % stop ratio -- %
  720. disp('Analysis for 20% stop signal ratio...');
  721. % successful go proportion
  722. Xm_CF = nanmean(controls(:,3));
  723. Xs_CF = nanstd(controls(:,3));
  724. Xc_CF = patient(:,3);
  725. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  726. fprintf('Successful go proportion\n')
  727. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  728. % successful go SRTs (ms)
  729. Xm_CF = nanmean(controls(:,4));
  730. Xs_CF = nanstd(controls(:,4));
  731. Xc_CF = patient(:,4);
  732. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  733. fprintf('Successful go SRTs (ms)\n')
  734. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  735. % successful stop proportion
  736. Xm_CF = nanmean(controls(:,5));
  737. Xs_CF = nanstd(controls(:,5));
  738. Xc_CF = patient(:,5);
  739. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  740. fprintf('Successful stop proportion\n')
  741. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  742. % failed stop SRTs (ms)
  743. Xm_CF = nanmean(controls(:,6));
  744. Xs_CF = nanstd(controls(:,6));
  745. Xc_CF = patient(:,6);
  746. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  747. fprintf('Successful go proportion\n')
  748. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  749. % SSRTs (ms)
  750. Xm_CF = nanmean(controls(:,7));
  751. Xs_CF = nanstd(controls(:,7));
  752. Xc_CF = patient(:,7);
  753. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  754. fprintf('SSRTs (ms)\n')
  755. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  756. % -- 40 % stop ratio -- %
  757. % specify constants
  758. ss_ratio = 40;
  759. data = meansall(meansall(:,2) == ss_ratio, :);
  760. controls = data(data(:,8) == ctl_group, :);
  761. patient = data(data(:,8) == patient_group, :);
  762. disp('---------------------------------------')
  763. disp('Analysis for 40% stop signal ratio...');
  764. % successful go proportion
  765. Xm_CF = nanmean(controls(:,3));
  766. Xs_CF = nanstd(controls(:,3));
  767. Xc_CF = patient(:,3);
  768. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  769. fprintf('Successful go proportion\n')
  770. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  771. % successful go SRTs (ms)
  772. Xm_CF = nanmean(controls(:,4));
  773. Xs_CF = nanstd(controls(:,4));
  774. Xc_CF = patient(:,4);
  775. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  776. fprintf('Successful go SRTs (ms)\n')
  777. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  778. % successful stop proportion
  779. Xm_CF = nanmean(controls(:,5));
  780. Xs_CF = nanstd(controls(:,5));
  781. Xc_CF = patient(:,5);
  782. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  783. fprintf('Successful stop proportion\n')
  784. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  785. % failed stop SRTs (ms)
  786. Xm_CF = nanmean(controls(:,6));
  787. Xs_CF = nanstd(controls(:,6));
  788. Xc_CF = patient(:,6);
  789. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  790. fprintf('Successful go proportion\n')
  791. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  792. % SSRTs (ms)
  793. Xm_CF = nanmean(controls(:,7));
  794. Xs_CF = nanstd(controls(:,7));
  795. Xc_CF = patient(:,7);
  796. [h p t df] = ttestch(Xm_CF, Xs_CF, Xc_CF, n_CF, alpha);
  797. fprintf('SSRTs (ms)\n')
  798. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  799. % -- Difference in ssrts for 20% vs. 40% -- %
  800. %Specify constants
  801. ss20ratio = 20;
  802. data20 = meansall(meansall(:,2) == ss20ratio, :);
  803. controls20 = data20(data20(:,8) == ctl_group, :);
  804. patient20 = data20(data20(:,8) == patient_group, :);
  805. ss40ratio = 40;
  806. data40 = meansall(meansall(:,2) == ss40ratio, :);
  807. controls40 = data40(data40(:,8) == ctl_group, :);
  808. patient40 = data40(data40(:,8) == patient_group, :);
  809. Xm = nanmean(controls20(:,7));
  810. Xs = nanstd(controls20(:,7));
  811. Xc = patient20(:,7);
  812. Ym = nanmean(controls40(:,7));
  813. Ys = nanstd(controls40(:,7));
  814. Yc = patient40(:,7);
  815. r = corrcoef(controls20(:,7), controls40(:,7));
  816. [h p t df] = rsdt(Xm, Xs, Xc, Ym, Ys, Yc, n_CF, r(2), alpha);
  817. fprintf('SSRTs (ms) - Difference between 20%% and 40%%\n')
  818. fprintf('t(%d) = %.3f, p = %.4f\n', df, t, p)
  819. end
  820. %% ---- Data visualization ---- %%
  821. % Standard deviation (SD) is hidden in the plots below to match the manuscripts
  822. % figures, which display mean values with 95% confidence intervals only.
  823. if analysis_mode == "IG_groups"
  824. color_patient = [0 0.6 0];
  825. color_ctl = [0.4 0.4 0.4];
  826. patient_label = 'IG';
  827. ctl_label = 'ctls';
  828. datapatient20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 3);
  829. datactl20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 4);
  830. datapatient40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 3);
  831. datactl40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 4);
  832. elseif analysis_mode == "CF_groups_L"
  833. color_patient = 'r';
  834. color_ctl = [1 1 1];
  835. patient_label = 'CF left';
  836. ctl_label = 'ctls';
  837. datapatient20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 1);
  838. datactl20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 2);
  839. datapatient40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 1);
  840. datactl40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 2);
  841. elseif analysis_mode == "CF_groups_R"
  842. color_patient = 'r';
  843. color_ctl = [1 1 1];
  844. patient_label = 'CF right';
  845. ctl_label = 'ctls';
  846. datapatient20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 1);
  847. datactl20 = find(meansall(:, 2) == 20 & meansall(:, 8) == 2);
  848. datapatient40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 1);
  849. datactl40 = find(meansall(:, 2) == 40 & meansall(:, 8) == 2);
  850. end
  851. % Go proportition plot
  852. figure()
  853. hold on;
  854. datapoint = plot(1, meansall(datapatient20, 3), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
  855. h = notBoxPlot(meansall(datactl20 , 3), 2);
  856. set([h.sdPtch], 'visible', 'off');
  857. set(h.semPtch, 'FaceColor', [0.8 0.8 0.8])
  858. set(h.semPtch, 'EdgeColor', [0.2 0.2 0.2])
  859. set(h.data, 'MarkerFaceColor', color_ctl)
  860. set(h.mu, 'Color', 'k')
  861. hold on;
  862. plot(3, meansall(datapatient40, 3), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
  863. h1 = notBoxPlot(meansall(datactl40, 3), 4);
  864. set([h1.sdPtch], 'visible', 'off');
  865. set(h1.semPtch, 'FaceColor', [0.8 0.8 0.8])
  866. set(h1.semPtch, 'EdgeColor', [0.2 0.2 0.2])
  867. set(h1.data, 'MarkerFaceColor', color_ctl)
  868. set(h1.mu, 'Color', 'k')
  869. set(gca, 'XTick', [1.5 3.5])
  870. set(gca, 'XTickLabel', {'20%', '40%'})
  871. xlabel('Stop signal ratio');
  872. ylabel('Proportion');
  873. axis([0 5 0.90 1.1]);
  874. legend([h.mu h.semPtch datapoint h.data], {'Mean', '95% CI', patient_label, ctl_label})
  875. title('Go proportion');
  876. % Go SRTs (ms) plot
  877. figure()
  878. hold on;
  879. datapoint = plot(1, meansall(datapatient20, 4), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
  880. h = notBoxPlot(meansall(datactl20 , 4), 2);
  881. set([h.sdPtch], 'visible', 'off');
  882. set(h.semPtch, 'FaceColor', [0.8 0.8 0.8])
  883. set(h.semPtch, 'EdgeColor', [0.2 0.2 0.2])
  884. set(h.data, 'MarkerFaceColor', color_ctl)
  885. set(h.mu, 'Color', 'k')
  886. hold on;
  887. plot(3, meansall(datapatient40, 4), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
  888. h1 = notBoxPlot(meansall(datactl40, 4), 4);
  889. set([h1.sdPtch], 'visible', 'off');
  890. set(h1.semPtch, 'FaceColor', [0.8 0.8 0.8])
  891. set(h1.semPtch, 'EdgeColor', [0.2 0.2 0.2])
  892. set(h1.data, 'MarkerFaceColor', color_ctl)
  893. set(h1.mu, 'Color', 'k')
  894. set(gca, 'XTick', [1.5 3.5])
  895. set(gca, 'XTickLabel', {'20%', '40%'})
  896. xlabel('Stop signal ratio');
  897. ylabel('Go SRTs (ms)');
  898. axis([0 5 0 500]);
  899. legend([h.mu h.semPtch datapoint h.data], {'Mean', '95% CI', patient_label, ctl_label}, 'Location', 'northwest')
  900. title('Go SRT(ms) across stop signal ratios');
  901. % Stop proportion plot
  902. figure()
  903. hold on;
  904. datapoint = plot(1, meansall(datapatient20, 5), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
  905. h = notBoxPlot(meansall(datactl20, 5), 2);
  906. set([h.sdPtch], 'visible', 'off');
  907. set(h.semPtch, 'FaceColor', [0.8 0.8 0.8])
  908. set(h.semPtch, 'EdgeColor', [0.2 0.2 0.2])
  909. set(h.data, 'MarkerFaceColor', color_ctl)
  910. set(h.mu, 'Color', 'k')
  911. hold on;
  912. plot(3, meansall(datapatient40, 5), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
  913. h1 = notBoxPlot(meansall(datactl40, 5), 4);
  914. set([h1.sdPtch], 'visible', 'off');
  915. set(h1.semPtch, 'FaceColor', [0.8 0.8 0.8])
  916. set(h1.semPtch, 'EdgeColor', [0.2 0.2 0.2])
  917. set(h1.data, 'MarkerFaceColor', color_ctl)
  918. set(h1.mu, 'Color', 'k')
  919. set(gca, 'XTick', [1.5 3.5])
  920. set(gca, 'XTickLabel', {'20%', '40%'})
  921. xlabel('Stop signal ratio');
  922. ylabel('Proportion');
  923. axis([0 5 0.10 0.90]);
  924. legend([h.mu h.semPtch datapoint h.data], {'Mean', '95% CI', patient_label, ctl_label})
  925. title('Successful stop proportion');
  926. % Stop SRTs (ms) plot
  927. figure()
  928. hold on;
  929. datapoint = plot(1, meansall(datapatient20, 6), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
  930. h = notBoxPlot(meansall(datactl20 , 6), 2);
  931. set([h.sdPtch], 'visible', 'off');
  932. set(h.semPtch, 'FaceColor', [0.8 0.8 0.8])
  933. set(h.semPtch, 'EdgeColor', [0.2 0.2 0.2])
  934. set(h.data, 'MarkerFaceColor', color_ctl)
  935. set(h.mu, 'Color', 'k')
  936. hold on;
  937. plot(3, meansall(datapatient40, 6), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
  938. h1 = notBoxPlot(meansall(datactl40, 6), 4);
  939. set([h1.sdPtch], 'visible', 'off');
  940. set(h1.semPtch, 'FaceColor', [0.8 0.8 0.8])
  941. set(h1.semPtch, 'EdgeColor', [0.2 0.2 0.2])
  942. set(h1.data, 'MarkerFaceColor', color_ctl)
  943. set(h1.mu, 'Color', 'k')
  944. set(gca, 'XTick', [1.5 3.5])
  945. set(gca, 'XTickLabel', {'20%', '40%'})
  946. xlabel('Stop signal ratio');
  947. ylabel('Failed stop SRTs (ms)');
  948. axis([0 5 0 500]);
  949. legend([h.mu h.semPtch datapoint h.data], {'Mean', '95% CI', patient_label, ctl_label})
  950. title('Failed stop SRT (ms) across stop signal ratios');
  951. % SSRT (ms) plot
  952. figure()
  953. hold on;
  954. datapoint = plot(1, meansall(datapatient20, 7), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
  955. h = notBoxPlot(meansall(datactl20, 7), 2);
  956. set([h.sdPtch], 'visible', 'off');
  957. set(h.semPtch, 'FaceColor', [0.8 0.8 0.8])
  958. set(h.semPtch, 'EdgeColor', [0.2 0.2 0.2])
  959. set(h.data, 'MarkerFaceColor', color_ctl)
  960. set(h.mu, 'Color', 'k')
  961. hold on;
  962. plot(3, meansall(datapatient40, 7), 'Marker', 'o', 'MarkerEdgeColor', [0.2 0.2 0.2], 'MarkerFaceColor', color_patient, 'LineStyle', 'none');
  963. h1 = notBoxPlot(meansall(datactl40, 7), 4);
  964. set([h1.sdPtch], 'visible', 'off');
  965. set(h1.semPtch, 'FaceColor', [0.8 0.8 0.8])
  966. set(h1.semPtch, 'EdgeColor', [0.2 0.2 0.2])
  967. set(h1.data, 'MarkerFaceColor', color_ctl)
  968. set(h1.mu, 'Color', 'k')
  969. set(gca, 'XTick', [1.5 3.5])
  970. set(gca, 'XTickLabel', {'20%', '40%'})
  971. xlabel('Stop signal ratio');
  972. ylabel('SSRT (ms)');
  973. axis([0 5 0 400]);
  974. legend([h.mu h.semPtch datapoint h.data], {'Mean', '95% CI', patient_label, ctl_label})
  975. title('SSRTs across stop signal ratios');

ssanalysis.m, no license · at the source

Overview

Authors: Julie Ouerfelli‐Ethier1,2, Tristan Jurkiewicz1, Isabella Comtois‐Bona2, Thomas Carrier2, Aarlenne Z. Khan2, Laure Pisella1
  1. Université Claude Bernard Lyon 1, Centre de Recherche en Neurosciences de Lyon CRNL, INSERM U1028, CNRS UMR5292, Trajectoires, Centre Hospitalier Le Vinatier, Bâtiment 336 Bron France
  2. École d'Optométrie Université de Montréal Montréal Québec Canada
Journal: The European journal of neuroscience, volume 63, issue 9, article e70528
Dates: received 12 November 2025; accepted 17 April 2026; published online 6 May 2026; in print May 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1111/ejn.70528 · PMID 42087821 · PMCID PMC13147234 · OpenAlex W7160373273
Open access: hybrid, a free copy (OpenAlex)
Status: code verified
Categories: behavior only (modality), human (organism), stroke (population), cognitive (subfield)
Methods: Connectivity, Physiology & signal measures
Keywords: countermanding, inhibition of return, motor intention, saccade planning, spatial attention
MeSH: Inhibition, Psychological*, Parietal Lobe*, Psychomotor Performance*, Space Perception*, Stroke*, Aged, Attention, Female, Humans, Male, Middle Aged, Reaction Time, Saccades (* major topic)
Topic: Spatial Neglect and Hemispheric Dysfunction (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: Natural Sciences and Engineering Research Council of Canada (BESD‐546502‐2020); Études Supérieures et Post‐doctorales and École d’optométrie merit scholarship; Canada Research Chairs; Université de Lyon Idex Mobility fund; Réseau de la santé de la vision du Québec; Centre national de la recherche scientifique
Citations: cited by 1 paper (Europe PMC); 121 references in the paper

Abstract

Spatial and response inhibition are two different types of inhibition processes. Spatial inhibition refers to the suppression of a specific location, whereas response inhibition involves cancelling a planned movement and is motor based. Here we examined the effects of lesions on the dorsal posterior parietal cortex on performance during two saccade tasks that separately assessed spatial (inhibition of return task) and response inhibition (stop signal task). We tested two stroke patients, one with unilateral and one with bilateral lesions to the dorsal posterior parietal cortex, as well as 21 age‐matched controls. In our spatial inhibition task, control participants showed the typical inhibition of return effect, whereas patients exhibited no inhibition of return in their ataxic hemifields. In contrast, patients and their matched controls performed similarly on the stop signal task. These results reveal a simple dissociation in our patients, where motor‐based inhibition is preserved following damage to the dorsal posterior parietal cortex, whereas spatial inhibition is impaired. This highlights the specific role of the dorsal posterior parietal cortex in spatial inhibition, notably related to spatial attentional mechanisms.

Reproduced under the paper's license (CC BY), from the paper cited above.

Repository

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

OSF bnh9e

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Languages: MATLAB (15)
Size: 21 files, 15 scripts
Software Heritage: not checked
Found in: “Data Availability Statement”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
15 files

The paper's code and data availability statement is in the Data section.

Tracing map

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

What the map holds:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 15 scripts, each with its path and the digest of its content;
  • 5 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 data and analysis scripts required to reproduce the results and figures are available on the Open Science Framework repository at the following link: https://doi.org/10.17605/OSF.IO/BNH9E.

Reproduced under the paper's license (CC BY), from the paper cited above.

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 2, 28 September 2026

  • Publisher: n/a → Wiley

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 6 authors, 5 keywords, 13 MeSH terms, 6 funders, 115 references.

Cite

This paper

Ouerfelli‐Ethier, J., Jurkiewicz, T., Comtois‐Bona, I., Carrier, T., Khan, A. Z., & Pisella, L. (2026). Dorsal Posterior Parietal Cortex Lesions Disrupt Spatial- but Not Motor-Based Inhibition. The European journal of neuroscience, 63(9), e70528. https://doi.org/10.1111/ejn.70528

BibTeX

@article{ouerfelliethier2026dorsal,
author = {Ouerfelli‐Ethier, Julie and Jurkiewicz, Tristan and Comtois‐Bona, Isabella and Carrier, Thomas and Khan, Aarlenne Z. and Pisella, Laure},
title = {{Dorsal Posterior Parietal Cortex Lesions Disrupt Spatial- but Not Motor-Based Inhibition}},
journal = {The European journal of neuroscience},
year = {2026},
month = may,
volume = {63},
number = {9},
pages = {e70528},
publisher = {Wiley},
issn = {0953-816X},
doi = {10.1111/ejn.70528},
url = {https://doi.org/10.1111/ejn.70528},
pmid = {42087821},
pmcid = {PMC13147234}
}

RIS

TY - JOUR
AU - Ouerfelli‐Ethier, Julie
AU - Jurkiewicz, Tristan
AU - Comtois‐Bona, Isabella
AU - Carrier, Thomas
AU - Khan, Aarlenne Z.
AU - Pisella, Laure
TI - Dorsal Posterior Parietal Cortex Lesions Disrupt Spatial- but Not Motor-Based Inhibition
T2 - The European journal of neuroscience
J2 - Eur J Neurosci
PY - 2026
DA - 2026/05/01
VL - 63
IS - 9
SP - e70528
SN - 0953-816X
PB - Wiley
DO - 10.1111/ejn.70528
UR - https://doi.org/10.1111/ejn.70528
LA - en
ER -

CSL-JSON

{
"id": "10.1111/ejn.70528",
"type": "article-journal",
"title": "Dorsal Posterior Parietal Cortex Lesions Disrupt Spatial- but Not Motor-Based Inhibition",
"container-title": "The European journal of neuroscience",
"author": [
{
"family": "Ouerfelli‐Ethier",
"given": "Julie"
},
{
"family": "Jurkiewicz",
"given": "Tristan"
},
{
"family": "Comtois‐Bona",
"given": "Isabella"
},
{
"family": "Carrier",
"given": "Thomas"
},
{
"family": "Khan",
"given": "Aarlenne Z."
},
{
"family": "Pisella",
"given": "Laure"
}
],
"container-title-short": "Eur J Neurosci",
"volume": "63",
"issue": "9",
"page": "e70528",
"DOI": "10.1111/ejn.70528",
"PMID": "42087821",
"PMCID": "PMC13147234",
"ISSN": "0953-816X",
"publisher": "Wiley",
"URL": "https://doi.org/10.1111/ejn.70528",
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
1
]
]
}
}

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.1016/j.isci.2026.116034
Distinct temporal patterns of beta bursts differentiate successful and failed movement cancellation.
Journal: iScience
In common: cognitive, 8 references
[2] doi:10.1371/journal.pbio.3003635 [code]
A cortico-subthalamic circuit rapidly engages and releases inhibition of specific movements depending on the environmental context.
Journal: PLoS biology
In common: 7 references
[3] doi: [code]
Neural Correlates of Inhibitory Control in Impulsivity Traits in Non-Ecological Human–Computer Tasks: An ALE Meta-Analysis
Journal: Brain sciences
In common: cognitive, 6 references
[4] doi:10.7554/elife.109842 [code]
Dissociable neural substrates of integration and segregation in exogenous attention.
Journal: eLife
In common: cognitive, 5 references
[5] doi:10.1038/s41467-026-71404-0 [code]
Nonergodicity and Simpson's paradox in neurocognitive dynamics of cognitive control.
Journal: Nature communications
In common: cognitive, 5 references
[6] doi:10.1111/psyp.70397 [code]
Cortical Contributions to Attentional Orienting and Response Cancellation in Action Stopping.
Journal: Psychophysiology
In common: cognitive, 4 references
[7] doi:10.3758/s13415-026-01439-9
Stimulation success!? Improved response inhibition performance after prefrontal single-site and condition-and-perturb transcranial magnetic stimulation.
Journal: Cognitive, affective & behavioral neuroscience
In common: 4 references
[8] doi:10.3758/s13415-026-01428-y
Role of the inferior frontal gyrus and impulsivity in approach motivation: A low-frequency repetitive transcranial magnetic stimulation study.
Journal: Cognitive, affective & behavioral neuroscience
In common: 4 references
[9] doi:10.1371/journal.pbio.3003779 [code]
Past and present goals are represented concurrently during visual search.
Journal: PLoS biology
In common: cognitive, 3 references
[10] doi:10.1002/gps3.70042 [code]
Effects of single-session transcranial direct current stimulation on response inhibition in stop-signal task performance: A meta-analysis and systematic review.
Journal: General psychiatry
In common: cognitive, 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.