OSCR

Anterior cingulate neurons combine outcome monitoring of past decisions with ongoing movement signals.

Code ↔ Paper

25 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 25 matches · 2 of them tie a paragraph to a whole file without given lines: weak matches, whose lines are not tinted
  1. [1] § Methods › Perceptual evidence accumulation task ↔ Functions/StateMatrices/DemonstratorTaskSMA.m, lines 102 to 238 · score 0.89 · reward delivery, go cue, rewarded port, left port, right port, center port · Report a mismatch
  2. [2] § Methods › Perceptual evidence accumulation task ↔ labdata_plugin/pluginschema.py, lines 12 to 86 · score 0.87 · category boundary, left pokes, right pokes, stimulus train, early withdrawal, stimulus rate · Report a mismatch
  3. [3] § Methods › Movement and posture analysis ↔ chiCa/encoding_model_single_timepoints.py, lines 81 to 126 · score 0.81 · tail tip, nose tip, tail center, body part, ear, rectum · Report a mismatch
  4. [4] § Results › Neural representations of trial history cannot solely be explained by body posture or movements ↔ encoding_model_fitting.py, lines 275 to 323 · score 0.78 · Motion energy SVD, head orientation angle, body position, Video SVD, encoding models, fitted · Report a mismatch
  5. [5] § Results › Neural representations of trial history cannot solely be explained by body posture or movements ↔ reviewer_figure2.py, lines 451 to 491 · score 0.75 · Motion energy SVD, cross validation, Video SVD, explained variance, encoding models, ridge · Report a mismatch
  6. [6] § Methods › Behavioral training procedure ↔ Functions/StateMatrices/DemonstratorSelfInitiatedTaskSMA.m, the whole file · a weak match · score 0.72 · stimulus playing, initiate trials, center fixation, right ports, early withdrawal, volume · Report a mismatch
  7. [7] § Methods › Behavioral training procedure ↔ labdata_plugin/pluginschema.py, lines 12 to 86 · score 0.69 · center poke, response port, center fixation, early withdrawal, mastering, volume · Report a mismatch
  8. [8] § Results › Neural dynamics representing trial history are low-dimensional and similar between subjects ↔ figure4.py, lines 178 to 216 · score 0.68 · encoding weights projected, procrustes distance, chest point, PCA, transformations, dimensions · Report a mismatch
  9. [9] § Results › Neural representations of trial history cannot solely be explained by body posture or movements ↔ encoding_model_fitting.py, lines 374 to 456 · score 0.67 · regressors shuffled, single regressor, explained variance, encoding models, fluctuations, head · Report a mismatch
  10. [10] § Results › Neural representations of trial history cannot solely be explained by body posture or movements ↔ chiCa/encoding_model_full_version.py, lines 269 to 321 · score 0.66 · regressors shuffled, single regressor, explained variance, encoding models, fluctuations, head · Report a mismatch
  11. [11] § Results › Trial history can be decoded from ACC population activity ↔ statistical_testing.R, lines 138 to 205 · score 0.66 · ITI phases, shuffled control, decoding accuracy, trial history context, decoders, strength · Report a mismatch
  12. [12] § Results › Neural dynamics representing trial history are low-dimensional and similar between subjects ↔ figure4.py, lines 178 to 216 · score 0.65 · procrustes distance, encoding weights, chest point, tuning, transformations, dimensions · Report a mismatch
  13. [13] § Methods › Miniature microscope imaging and image processing ↔ chiCa/neuron_selection_GUI.py, lines 21 to 63 · score 0.65 · identified putative neurons, CaImAn, background, CNMF, fluorescence, motion · Report a mismatch
  14. [14] § Results › Trial history can be decoded from ACC population activity ↔ statistical_testing.R, lines 138 to 205 · score 0.65 · ITI duration, trial history decoding, early ITI, decoding accuracy, decoders, phases · Report a mismatch
  15. [15] § Methods › Perceptual evidence accumulation task ↔ Functions/StateMatrices/DemonstratorSelfInitiatedTaskSMA.m, the whole file · a weak match · score 0.65 · state machine, right ports, center port, volume, valve, LED · Report a mismatch
  16. [16] § Methods › Data reporting and statistical analyses ↔ statistical_testing.R, lines 1 to 45 · score 0.65 · lmerTest, emmeans, Sidak, marginal, coefficients, linear · Report a mismatch
  17. [17] § Methods › Miniature microscope imaging and image processing ↔ analysis/analysis_caiman.py, lines 465 to 508 · score 0.64 · identified putative neurons, CaImAn, background, CNMF, fluorescence, matrix · Report a mismatch
  18. [18] § Methods › Perceptual evidence accumulation task ↔ Functions/StateMatrices/DemonstratorTaskSMA.m, lines 102 to 238 · score 0.59 · right ports, center port, TTL, valve, camera, LED · Report a mismatch
  19. [19] § Results › Neural dynamics representing trial history are low-dimensional and similar between subjects ↔ figure4.py, lines 382 to 411 · score 0.59 · chest tuning motifs, chest position tuning, dimensions, video · Report a mismatch
  20. [20] § Results › Perceptual decisions in expert performers are modulated by trial history ↔ figure1_and_supplementary_figure1.py, lines 221 to 246 · score 0.58 · lower lapse rates, incorrect right, sensitivity, bias, sensory, Trial history · Report a mismatch
  21. [21] § Results › Trial history can be decoded from ACC population activity ↔ reviewer_figure2.py, lines 394 to 421 · score 0.57 · cross decoding accuracy, late ITI, shuffled accuracies, sem, Bars, phase · Report a mismatch
  22. [22] § Results › Trial history can be decoded from ACC population activity ↔ chiCa/decoding_utils.py, lines 1292 to 1415 · score 0.57 · confusion matrices, cross decoding, shuffled accuracies, neural activity, coefficient, decoder · Report a mismatch
  23. [23] § Results › Neural dynamics representing trial history are low-dimensional and similar between subjects ↔ statistical_testing.R, lines 47 to 91 · score 0.57 · subject procrustes distance, encoding weights, chest, dimensions, trial history, video · Report a mismatch
  24. [24] § Results › Perceptual decisions in expert performers are modulated by trial history ↔ figure1_and_supplementary_figure1.py, lines 157 to 212 · score 0.55 · Wilson score interval, stimulus rate, Psychometric, Figure 1, trial history, error · Report a mismatch
  25. [25] § Results › Neural representations of trial history cannot solely be explained by body posture or movements ↔ encoding_model_fitting.py, lines 374 to 456 · score 0.53 · unique explained variance, Video SVD, full model, fitted, shuffled, regressors · Report a mismatch

Paper

Loaded from Europe PMC by your browser; OSCR does not store it: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

R · 206 lines · 12 KB · GPL-3.0 · 4 matches

  1. # This script performs all the statistical testing for the analysis in
  2. # "Anterior cingulate neurons combine outcome monitoring of past decisions
  3. # with ongoing movement signals", by Oesch et al.
  4. #
  5. # The analyses here assume that all the results data frames are saved as .csv
  6. # files into the same file directory (base_dir, to be set by the user below).
  7. # To export the results from statistical analyses use the following:
  8. # write.csv(summary(fit)$coefficients, "path_to_my_file.csv") for lme results, and
  9. # write.csv(summary(emm, by = NULL, adjust = "sidak")$contrasts,"path_to_my_file.csv")
  10. # for the contrasts on the computed marginal means with p-values adjusted for
  11. # multiple comparison using sidak's method.
  12. #
  13. # LO, February 2026
  14. #-------------------------------------------------------------------------------
  15. #Importing
  16. library(lmerTest)
  17. library(ggplot2)
  18. library(emmeans)
  19. #Define the base directory for all the analysis files
  20. base_dir <- "/Users/loesch/Documents/Churchland_lab/Trial-history_manuscript/data_tables"
  21. # --------------Figure 1F----------------------------------------
  22. # Comparing the magnitudes of the model weights to the shuffled control
  23. data <- read.csv(file.path(base_dir, "Fig1F_logreg_weights.csv"), header=TRUE, sep=",")
  24. data$is_shuffle <- relevel(factor(data$is_shuffle), ref="shuffle")
  25. fit <- lmerTest::lmer(abs_logreg_weights ~ regressor * is_shuffle + (1 |subject), data = data)
  26. summary(fit) #
  27. emm = emmeans(fit, specs = pairwise ~ is_shuffle | regressor, pbkrtest.limit = 4272)
  28. summary(emm, by=NULL, adjust = "sidak")
  29. # -------------Figure 1H-----------------------------------------
  30. # Fitting linear relationship between the difference between history strength
  31. # and stimulus weight, and performance
  32. data <- read.csv(file.path(base_dir, "Fig1H_hist_delta_vs_performance.csv"), header=TRUE, sep=",")
  33. fit <- lmerTest::lmer(performance ~ hist_stim_coef_delta + (1 |subject), data = data, REML=FALSE)
  34. summary(fit)
  35. # -----------Figure 2F----------------------------------------------
  36. # Test for decoding accuracy difference between data and shuffle
  37. data <- read.csv(file.path(base_dir, "Fig2F_decoding_accuracy_decoder_vs_shuffle.csv"), header=TRUE, sep=",")
  38. data$condition <- relevel(factor(data$condition), ref="shuffle") #Set shuffle to be the reference class
  39. fit <- lmerTest::lmer(accuracy ~ condition * time + (1 |subject/session), data = data, REML=FALSE)
  40. summary(fit)
  41. # -----------Figure 2G---------------------------------------------
  42. # Comparing the decoding accuracy between the different trial history contexts
  43. data <- read.csv(file.path(base_dir, "Fig2G_class_wise_decoding_accuracy.csv"), header=TRUE, sep=",")
  44. fit <- lmerTest::lmer(accuracy ~ history_context * time + (1 |subject/session), data = data, REML=FALSE)
  45. summary(fit)
  46. emm = emmeans(fit, specs = pairwise ~ history_context | time, pbkrtest.limit = 12236)
  47. summary(emm, by = NULL, adjust = "sidak")
  48. # ------------Figure 2J-----------------------------------------------
  49. # Compare cross-decoding accuracy with shuffled control
  50. data <- read.csv(file.path(base_dir, "Fig2J_phase_wise_cross_decoding.csv"), header=TRUE, sep=",")
  51. data$condition <- relevel(factor(data$condition), ref="shuffle")
  52. data$seed <- relevel(factor(data$seed), ref="Early ITI") #Seed here refers to the phase the decoder was trained in
  53. data$phase <- relevel(factor(data$phase), ref="Early ITI") #Phase is the testing phase
  54. fit <- lmerTest::lmer(accuracy ~ seed*phase*condition + (1 |subject/session), data = data, REML=FALSE)
  55. summary(fit)
  56. emm = emmeans(fit, specs = pairwise ~ condition | seed*phase)
  57. summary(emm, by = NULL, adjust = "sidak")
  58. # -----------Figure 4D------------------------------------------------
  59. #Compare the dimensionality of trial history, chest and video encoding
  60. data <- read.csv(file.path(base_dir, "Fig4D_encoding_weight_dimensionality.csv"), header=TRUE, sep=",")
  61. data$regressor <- relevel(factor(data$regressor), ref="previous_choice_outcome_combination")
  62. fit <- lmerTest::lmer(dimensionality ~ regressor + (1 |subject/session), data = data, REML = FALSE) #Here regressor refers to chest, trial history, etc
  63. summary(fit)
  64. emm = emmeans(fit, specs = pairwise ~ regressor )
  65. summary(emm, by = NULL, adjust = "sidak")
  66. # -----------Figure 4G-----------------------------------------------
  67. #Compare the within- and across subject procrustes distances for trial history, chest and video
  68. data <- read.csv(file.path(base_dir, "Fig4G_procrustes_distance.csv"), header=TRUE, sep=",")
  69. data$regressor <- relevel(factor(data$regressor), ref="previous_choice_outcome_combination")
  70. data$condition <- relevel(factor(data$condition), ref="within")
  71. fit <- lmerTest::lmer(procrustes_distance ~ regressor * condition + (1 |subject), data = data, REML = FALSE)
  72. summary(fit)
  73. emm = emmeans(fit, specs = pairwise ~ regressor *condition)
  74. summary(emm, by = NULL, adjust = "sidak")
  75. # ------------Supplementary Figure 1A----------------------------------
  76. # Perceptual bias
  77. data <- read.csv(file.path(base_dir, "Supplementary_Fig1A_perceptual_bias.csv"), header=TRUE, sep=",")
  78. fit <- lmerTest::lmer(param_estimate ~ trial_history + (1 |subject), data = data, REML=FALSE)
  79. summary(fit)
  80. emm = emmeans(fit, specs = pairwise ~ trial_history)
  81. summary(emm, by = NULL, adjust = "sidak")
  82. # ------------Supplementary Figure 1B----------------------------------
  83. # Sensitivity
  84. data <- read.csv(file.path(base_dir, "Supplementary_Fig1B_sensitivity.csv"), header=TRUE, sep=",")
  85. fit <- lmerTest::lmer(param_estimate ~ trial_history + (1 |subject), data = data, REML=FALSE)
  86. summary(fit)
  87. # ------------Supplementary Figure 1C----------------------------------
  88. # Sensitivity
  89. data <- read.csv(file.path(base_dir, "Supplementary_Fig1C_upper_lapse_rate.csv"), header=TRUE, sep=",")
  90. fit <- lmerTest::lmer(param_estimate ~ trial_history + (1 |subject), data = data, REML=FALSE)
  91. summary(fit)
  92. # ------------Supplementary Figure 1D----------------------------------
  93. # Sensitivity
  94. data <- read.csv(file.path(base_dir, "Supplementary_Fig1D_lower_lapse_rate.csv"), header=TRUE, sep=",")
  95. fit <- lmerTest::lmer(param_estimate ~ trial_history + (1 |subject), data = data, REML=FALSE)
  96. summary(fit)
  97. # ----------Supplementary Figure 1E--------------------------------------
  98. data <- read.csv(file.path(base_dir, "Supplementary_Fig1E_weigth_variance_no_shuffle.csv"), header=TRUE, sep=",")
  99. fit <- lmerTest::lmer(weight_variance ~ regressor + (1 |subject), data = data, REML=FALSE)
  100. summary(fit)
  101. # ----------Supplementary Figure 1G------------------------------------------
  102. data <- read.csv(file.path(base_dir, "Supplementary_Fig1G_main_effects_logreg_weights.csv"), header=TRUE, sep=",")
  103. data$is_shuffle <- relevel(factor(data$is_shuffle), ref="shuffle")
  104. data$regressor <- relevel(factor(data$regressor), ref="intercept")
  105. fit <- lmerTest::lmer(abs_logreg_weights ~ regressor * is_shuffle + (1 |subject), data = data)
  106. summary(fit)
  107. emm = emmeans(fit, specs = pairwise ~ regressor | is_shuffle, pbkrtest.limit = 5632)
  108. summary(emm, by = NULL, adjust = "sidak")
  109. #------------Supplementary Figure 2B----------------------------------------------
  110. data <- read.csv(file.path(base_dir, "Supplementary_Fig2_decoding_accuracy_different_decoders.csv"), header=TRUE, sep=",")
  111. fit <- lmerTest::lmer(accuracy ~ decoded_variable * is_history + (1 |subject/session), data = data, REML = FALSE)
  112. summary(fit)
  113. #------------Supplementary Figure 2C----------------------------------------------
  114. data <- read.csv(file.path(base_dir, "Supplementary_Fig2C_stim_phase_decoding_accuracy_by_ITI_duration.csv"), header=TRUE, sep=",")
  115. data$condition <- relevel(factor(data$condition), ref = "Shuffle")
  116. fit <- lmerTest::lmer(decoding_accuracy ~ condition * ITI_bin + (1 | subject/session), data = data, REML=FALSE)
  117. summary(fit)
  118. emm = emmeans(fit, specs = pairwise ~ condition | ITI_bin)
  119. summary(emm, by = NULL, adjust = "sidak")
  120. #------------Supplementary Figure 2D----------------------------------------------
  121. data <- read.csv(file.path(base_dir, "Supplementary_Fig2D_Stim_phase_decoding_accuracy_by_ITI_duration_hist_context.csv"), header=TRUE, sep=",")
  122. fit <- lmerTest::lmer(decoding_accuracy ~ hist_context * ITI_bin + (1 | subject/session), data = data, REML=FALSE)
  123. summary(fit)
  124. emm = emmeans(fit, specs = pairwise ~ hist_context | ITI_bin)
  125. summary(emm, by = NULL, adjust = "sidak")
  126. #------------Supplementary Figure 2E----------------------------------------------
  127. data <- read.csv(file.path(base_dir, "Supplementary_Fig2E_history_decoding_t-2_overall.csv"), , header=TRUE, sep=",")
  128. data$condition <- relevel(factor(data$condition), ref = "Shuffle")
  129. fit <- lmerTest::lmer(decoding_accuracy ~ condition * time + (1 | subject/session), data = data, REML=FALSE)
  130. summary(fit)
  131. #------------Supplementary Figure 2F----------------------------------------------
  132. data <- read.csv(file.path(base_dir, "Supplementary_Fig2F_history_decoding_t-2_by_context.csv"), header=TRUE, sep=",")
  133. fit <- lmerTest::lmer(decoding_accuracy ~ hist_context * time + (1 | subject/session), data = data, REML=FALSE)
  134. summary(fit)
  135. emm = emmeans(fit, specs = pairwise ~ hist_context | time, pbkrtest.limit = 11172)
  136. summary(emm, by = NULL, adjust = "sidak")
  137. # -----------Supplementary Figure 5B and E---------------------------------------
  138. data <- read.csv(file.path(base_dir, "Supplementary_Fig5.csv"), header=TRUE, sep=",")
  139. fit <- lmerTest::lmer(decoding_accuracy ~ lens_AP * lens_DV + sex + (1 | subject), data = data, REML=FALSE)
  140. summary(fit)
  141. # ---------Supplementary Figure 5C and F----------------------------------------
  142. data <- read.csv(file.path(base_dir, "Supplementary_Fig5.csv"), header=TRUE, sep=",")
  143. fit <- lmerTest::lmer(cvR ~ lens_AP * lens_DV + sex + (1 |subject), data = data, REML=FALSE)
  144. summary(fit)
  145. # --------Supplementary Figure 5D and G-----------------------------------------
  146. data <- read.csv(file.path(base_dir, "Supplementary_Fig5.csv"), header=TRUE, sep=",")
  147. fit <- lmerTest::lmer(dR ~ lens_AP * lens_DV + sex + (1 |subject), data = data, REML=FALSE)
  148. summary(fit)
  149. #---------Reviewer Figure 2A----------------------------------------------------
  150. # Test for decoding accuracy difference between data and shuffle for all sessions with no overlap between ITI phases
  151. data <- read.csv(file.path(base_dir, "Reviewer_Figure2a_decoding_accuracy_decoder_vs_shuffle_no_overlap.csv"), header=TRUE, sep=",")
  152. data$condition <- relevel(factor(data$condition), ref="shuffle") #Set shuffle to be the reference class
  153. fit <- lmerTest::lmer(accuracy ~ condition * time + (1 |subject/session), data = data, REML=FALSE)
  154. summary(fit)
  155. # -----------Reviewer Figure 2B---------------------------------------------
  156. # Comparing the decoding accuracy between the different trial history contexts for sessions with no overlap between ITI phases
  157. data <- read.csv(file.path(base_dir, "Reviewer_figure2b_class_wise_decoding_accuracy_no_overlap.csv"), header=TRUE, sep=",")
  158. fit <- lmerTest::lmer(accuracy ~ history_context * time + (1 |subject/session), data = data, REML=FALSE)
  159. summary(fit)
  160. emm = emmeans(fit, specs = pairwise ~ history_context | time, pbkrtest.limit = 12236)
  161. summary(emm, by = NULL, adjust = "sidak")
  162. # ------------Reviewer Figure 2E-----------------------------------------------
  163. # Compare cross-decoding accuracy with shuffled control for sessions with no overlap for the two ITI phases
  164. data <- read.csv(file.path(base_dir, "Reviewer_Figure2e_phase_wise_cross_decoding_no_overlap.csv"), header=TRUE, sep=",")
  165. data$condition <- relevel(factor(data$condition), ref="shuffle")
  166. data$seed <- relevel(factor(data$seed), ref="Early ITI") #Seed here refers to the phase the decoder was trained in
  167. data$phase <- relevel(factor(data$phase), ref="Early ITI") #Phase is the testing phase
  168. fit <- lmerTest::lmer(accuracy ~ seed*phase*condition + (1 |subject/session), data = data, REML=FALSE)
  169. summary(fit)
  170. emm = emmeans(fit, specs = pairwise ~ condition | seed*phase)
  171. summary(emm, by = NULL, adjust = "sidak")
  172. # -------------Reviewer Figure 3A-----------------------------------------
  173. # Fitting linear relationship between the difference between history strength
  174. # and stimulus weight, and performance excluding one animal (LY008) with sessions
  175. # showing a large difference between history strength and stimulus weight.
  176. data <- read.csv(file.path(base_dir, "Reviewer_figure3a_hist_delta_vs_performance.csv"), header=TRUE, sep=",")
  177. fit <- lmerTest::lmer(performance ~ hist_stim_coef_delta + (1 |subject), data = data, REML=FALSE)
  178. summary(fit)

statistical_testing.R at commit 989045b, under GPL-3.0 · at the source

Overview

Authors: Lukas T. Oesch1, Makenna C. Thomas1, Davis Sandberg1, João Couto1, Anne K. Churchland1
  1. Department of Neurobiology, David Geffen School of Medicine, University of California, Los Angeles,Los Angeles, CA USA
Institutions: University of California, Los Angeles (United States)
Journal: Nature communications, volume 17, issue 1, article 4354
Dates: received 30 June 2025; accepted 2 March 2026; published online 24 March 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1038/s41467-026-70639-1 · PMID 41872182 · PMCID PMC13171896 · OpenAlex W7140081684
Open access: gold, a free copy (OpenAlex)
Status: code verified (how the code is found and verified)
Categories: mouse (organism), cognitive (subfield)
Methods: Statistics, Smoothing, state filtering, decompositions, Machine learning, Preprocessing, Connectivity
Keywords: Decision, Sensory processing
MeSH: Decision Making*, Gyrus Cinguli*, Neurons*, Animals, Behavior, Animal, Male, Mice, Mice, Inbred C57BL, Movement (* major topic)
Topic: Neural dynamics and brain function (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Citations: cited by 2 papers (Europe PMC); 79 references in the paper

Abstract

In dynamic environments, animals must closely monitor the effects of their actions to inform switches in behavioral strategy. Anterior cingulate cortex (ACC) neurons track decision outcomes in these environments. Yet, it remains unclear whether ACC neurons similarly monitor behavioral history in static environments and, if so, whether these signals are distinct from movement representations. We recorded large-scale ACC activity in freely moving mice making visual evidence-accumulation decisions. Many ACC neurons exhibited nonlinear mixed selectivity for previous choices and outcomes (trial history) and were modulated by movements. Trial history could be stably decoded from population activity and accounted for a separable component of neural activity than posture and movements. Trial history encoding was conserved across different subjects and was unaffected by fluctuating behavioral biases. These findings demonstrate that trial history monitoring in ACC is implemented in a conserved population code that is independent of the volatility of subjects’ task environment.

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

Repositories

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

churchlandlab/chipmunk

License: none: the authors keep all their rights
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: a112fde94d24b4ca89590081a2aef2d7b4e2e96c, 6 April 2026
Languages: MATLAB (40), Python (4), C++ (1), C/C++ (1)
Size: 99 files, 46 scripts
Software Heritage: not archived
Found in: the text, “Perceptual evidence accumulation task”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Signal Processing Toolbox (1 file), Statistics and Machine Learning Toolbox (1 file), NumPy (1 file), pandas (1 file), SciPy (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
47 files

jcouto/fit_psychometric

License: GPL-3.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 665d058ac2f9d83a73747c68bd36d2697d778f6f, 10 August 2023
Languages: Jupyter (3), Python (2)
Size: 8 files, 5 scripts
Software Heritage: archived
Found in: “Code availability”
Holds: README, license file, 3 notebooks
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (4 files), Matplotlib (3 files), pandas (3 files), SciPy (2 files), statsmodels (2 files)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
7 files

churchlandlab/chiCa

License: none: the authors keep all their rights
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 1bb1546074c4af0877b1bf6e1e9db7c43ea492c5, 13 February 2026
Languages: Python (74)
Size: 88 files, 74 scripts
Software Heritage: not archived
Found in: “Code availability”
Holds: README, environment (pyproject.toml, requirements.txt, setup.py)
Not found: license file, CITATION.cff, tests, continuous integration, documentation
Tools: NumPy (45 files), Matplotlib (27 files), pandas (20 files), scikit-learn (20 files), SciPy (18 files), OpenCV (6 files), CaImAn (2 files), h5py (2 files), seaborn (2 files), Pillow (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
75 files

jcouto/labdata-tools

License: GPL-3.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 859b1e3ab4c8555e95942cc45c12f39ef9666727, 28 May 2025
Languages: Python (20), Jupyter (2)
Size: 30 files, 22 scripts
Software Heritage: not archived
Found in: the text, “Miniature microscope imaging and image processin”
Holds: README, license file, environment (setup.py, analysis/containers/kilosort2_5.def), 2 notebooks
Not found: CITATION.cff, tests, continuous integration, documentation
Tools: NumPy (5 files), pandas (3 files), h5py (2 files), OpenCV (2 files), SciPy (2 files), CaImAn (1 file), DeepLabCut (1 file), Matplotlib (1 file), napari (1 file), Pillow (1 file), SpikeInterface (1 file), Suite2p (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
24 files

jcouto/wfield

License: GPL-3.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 0befe16679f2503a5126decabcd2a66e2d55d710, 26 August 2025
Languages: Python (21), Jupyter (17)
Size: 54 files, 38 scripts
Software Heritage: archived
Found in: the text, “Movement and posture analysis”
Holds: README, license file, environment (env.yml, requirements.txt, setup.py), 17 notebooks
Not found: CITATION.cff, tests, continuous integration, documentation
Tools: SciPy (8 files), Matplotlib (7 files), NumPy (5 files), scikit-image (5 files), scikit-learn (3 files), pandas (2 files), PyTorch (2 files), tifffile (2 files), AllenSDK (1 file), napari (1 file), Numba (1 file), OpenCV (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
40 files

LukasOesch/Oesch_et_al_Trial_History_ACC

License: GPL-3.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 989045b63ade4208434724e79ca766b18c21a3bf, 26 February 2026
Languages: Python (9), R (1)
Size: 13 files, 10 scripts
Software Heritage: not archived
Found in: “Code availability”
Holds: README, license file
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Matplotlib (8 files), NumPy (8 files), pandas (8 files), SciPy (8 files), scikit-learn (5 files), emmeans (1 file), ggplot2 (1 file), lmerTest (1 file), UMAP (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
12 files

Zenodo 18793084

License: GPL-3.0
State: the link answers, verified on 30 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: Matplotlib (8 files), NumPy (8 files), pandas (8 files), SciPy (8 files), scikit-learn (5 files), emmeans (1 file), ggplot2 (1 file), lmerTest (1 file), UMAP (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
  • 30 September 2026: the link answers (HTTP 200)
12 files
At the source:

Code availability

All code is publicly available. The code to run the analyses and statistical models, and to generate the figure panels presented in this study, can be found in the following repository79: https://github.com/LukasOesch/Oesch_et_al_Trial_History_ACC.git. The code provided in this repository depends on the following other toolboxes: https://github.com/churchlandlab/chiCa and https://github.com/jcouto/fit_psychometric.git (https://colab.research.google.com/github/jcouto/fit_psychometric). Wherever specific packages were used to preprocess data, the packages are cited in the corresponding “Methods” section.

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

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:

  • 7 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 205 scripts, each with its path and the digest of its content;
  • 25 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

Datasets cited

Data availability

All the data used in this study have been deposited on figshare78 and are publicly available under the following accession code: 10.6084/m9.figshare.30670382. Raw data files (calcium imaging movies, behavioral videos) can be made available upon request. Source data are provided with this paper.

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

Recorded: type, language, journal, volume, issue, pages, dates, 5 authors, 2 keywords, 9 MeSH terms, 3 funders, 78 references.

Cite

This paper

Oesch, L. T., Thomas, M. C., Sandberg, D., Couto, J., & Churchland, A. K. (2026). Anterior cingulate neurons combine outcome monitoring of past decisions with ongoing movement signals. Nature communications, 17(1), 4354. https://doi.org/10.1038/s41467-026-70639-1

BibTeX

@article{oesch2026anterior,
author = {Oesch, Lukas T. and Thomas, Makenna C. and Sandberg, Davis and Couto, João and Churchland, Anne K.},
title = {{Anterior cingulate neurons combine outcome monitoring of past decisions with ongoing movement signals}},
journal = {Nature communications},
year = {2026},
month = mar,
volume = {17},
number = {1},
pages = {4354},
publisher = {Nature Publishing Group},
issn = {2041-1723},
doi = {10.1038/s41467-026-70639-1},
url = {https://doi.org/10.1038/s41467-026-70639-1},
pmid = {41872182},
pmcid = {PMC13171896}
}

RIS

TY - JOUR
AU - Oesch, Lukas T.
AU - Thomas, Makenna C.
AU - Sandberg, Davis
AU - Couto, João
AU - Churchland, Anne K.
TI - Anterior cingulate neurons combine outcome monitoring of past decisions with ongoing movement signals
T2 - Nature communications
J2 - Nat Commun
PY - 2026
DA - 2026/03/24
VL - 17
IS - 1
SP - 4354
SN - 2041-1723
PB - Nature Publishing Group
DO - 10.1038/s41467-026-70639-1
UR - https://doi.org/10.1038/s41467-026-70639-1
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41467-026-70639-1",
"type": "article-journal",
"title": "Anterior cingulate neurons combine outcome monitoring of past decisions with ongoing movement signals",
"container-title": "Nature communications",
"author": [
{
"family": "Oesch",
"given": "Lukas T."
},
{
"family": "Thomas",
"given": "Makenna C."
},
{
"family": "Sandberg",
"given": "Davis"
},
{
"family": "Couto",
"given": "João"
},
{
"family": "Churchland",
"given": "Anne K."
}
],
"container-title-short": "Nat Commun",
"volume": "17",
"issue": "1",
"page": "4354",
"DOI": "10.1038/s41467-026-70639-1",
"PMID": "41872182",
"PMCID": "PMC13171896",
"ISSN": "2041-1723",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41467-026-70639-1",
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
24
]
]
}
}

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.21203/rs.3.rs-6858161/v1 [code]
Anterior cingulate cortex mixes retrospective cognitive signals and ongoing movement signatures during decision-making
Journal: Research Square (preprint)
In common: Suite2p, CaImAn, DeepLabCut, 19 other tools, 56 references, 3 authors
[2] doi:10.1101/2025.04.11.648398 [code]
Anterior cingulate cortex mixes retrospective cognitive signals and ongoing movement signatures during decision-making
Journal: bioRxiv (preprint)
In common: Suite2p, CaImAn, DeepLabCut, 19 other tools, 56 references, author Lukas T. Oesch
[3] doi:10.7554/elife.100840 [code]
Reproducibility of in vivo electrophysiological measurements in mice.
Journal: eLife
In common: AllenSDK, tifffile, UMAP, 13 other tools, mouse, 5 references, author Anne K Churchland
[4] doi:10.1038/s41586-025-08840-3 [code]
Functional connectomics reveals general wiring rule in mouse visual cortex.
Journal: Nature
In common: CaImAn, DeepLabCut, tifffile, 16 other tools, mouse, 3 references
[5] doi:10.1038/s41467-023-37400-4 [code]
Dynamical latent state computation in the male macaque posterior parietal cortex.
Journal: Nature communications
In common: DeepLabCut, napari, Numba, 13 other tools, 6 references
[6] doi:10.7554/elife.94167 [code]
Pan-cortical 2-photon mesoscopic imaging and neurobehavioral alignment in awake, behaving mice.
Journal: eLife
In common: AllenSDK, tifffile, Numba, 12 other tools, mouse, 6 references
[7] doi:10.1038/s41593-026-02213-3 [code]
Functional bipartite invariance in mouse primary visual cortex receptive fields.
Journal: Nature neuroscience
In common: CaImAn, DeepLabCut, tifffile, 15 other tools, mouse, 1 reference
[8] doi:10.1038/s41586-025-08829-y [code]
Foundation model of neural activity predicts response to new stimulus types.
Journal: Nature
In common: CaImAn, DeepLabCut, tifffile, 14 other tools, mouse, 1 reference
[9] doi:10.7554/elife.83289 [code]
Model discovery to link neural activity to behavioral tasks.
Journal: eLife
In common: CaImAn, tifffile, UMAP, 12 other tools, mouse, 3 references
[10] doi:10.1038/s41593-026-02232-0 [code]
Entorhinal cortex represents task-relevant remote locations independently of CA1.
Journal: Nature neuroscience
In common: DeepLabCut, SpikeInterface, Numba, 14 other tools, mouse, 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.

Add the badge to the code's README

OSCR: the badge of this paper

If you are an author or a maintainer of this paper's code, you can add this badge. It says what OSCR knows of the paper (its code, its validated tracing map) and links the code to this page. Paste one of these snippets under the README's title. Keep the two marks around it, so that the badge can be replaced in place and is never added twice. OSCR changes nothing in your repository.

Markdown
<!-- oscr-badge:start -->
[![OSCR](https://openscicode.org/badge/doi/10.1038/s41467-026-70639-1.svg)](https://openscicode.org/badge/doi/10.1038/s41467-026-70639-1)
<!-- oscr-badge:end -->
reStructuredText
.. oscr-badge:start

.. image:: https://openscicode.org/badge/doi/10.1038/s41467-026-70639-1.svg
   :target: https://openscicode.org/badge/doi/10.1038/s41467-026-70639-1
   :alt: OSCR

.. oscr-badge:end
HTML
<!-- oscr-badge:start -->
<a href="https://openscicode.org/badge/doi/10.1038/s41467-026-70639-1"><img src="https://openscicode.org/badge/doi/10.1038/s41467-026-70639-1.svg" alt="OSCR"></a>
<!-- oscr-badge:end -->

On GitHub, open the README, choose Edit (the pencil), paste the snippet under the title, then "Commit changes".

If you choose to, you can have the badge kept up to date for you, with oscr badge --write from the command line or with the GitHub Action in your repository's workflows. Every other form and option (a card, AsciiDoc, LaTeX, shields.io) is on the badge 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: code errors and mismatches between the code and the paper about this paper and its code, from readers and its authors, beside the paper and its tracing map.

Report a mismatch between the code and the paper · Report a code error (signed in)

Reproductions: reports from readers who ran the authors' code and did not get the paper's result, what they ran, with which environment, commit and data.

Report a reproduction failure (signed in)

Versions of its code: the releases of its code tied to a version of this paper (the preprint, the accepted manuscript, the version of record…), each with the tracing map versioned with it.

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