OSCR

The Brain Signature of Reward Processing During Cooperative Gaming.

Code ↔ Paper

The paper beside its authors' code: matches between them have not been computed for this paper yet.

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 · 249 lines · 10 KB · MIT

  1. %% Code to plot results from FieldTrip TFR cluster-based permutation analysis
  2. %
  3. % An alternative visualization for the results of FieldTrip cluster-based
  4. % permutation analysis on time-frequency data. The code avoids opacity alpha
  5. % masking by using custom color scales, smoothed by a gaussian filter.
  6. % Information about the cluster contribution of each individual sensor is
  7. % outsourced to a 2D sensor net layout with 4 graded point sizes obtained
  8. % by median splits.
  9. % Please indicate whether plotting negative (default) or positive clusters.
  10. % Also note that many plotting preferences can be customized using the handles
  11. % provided within the script.
  12. %
  13. % Requires:
  14. % - FieldTrip toolbox, freely available under https://www.fieldtriptoolbox.org/download/
  15. % - cbrewer2, freely available under https://de.mathworks.com/matlabcentral/fileexchange/58350-cbrewer2
  16. % - Colorspace Transformations, freely available under https://www.mathworks.com/matlabcentral/fileexchange/28790-colorspace-transformations
  17. % - sensor net layout of your EEG net (e.g., .sfp-file); must be compatible with FieldTrip
  18. % - output struct of cluster statistic from ft_freqstatistics in a .mat file
  19. %
  20. % Please ensure that your cluster statistics structure is named 'stat'.
  21. % If it has a different name, update it accordingly in the "load data"
  22. % section below.
  23. %
  24. % References
  25. % Getreuer, P. (2025). Colorspace Transformations (https://www.mathworks.com/matlabcentral/fileexchange/28790-colorspace-transformations), MATLAB Central File Exchange.
  26. % Lowe, S. (2025). cbrewer2 (https://github.com/scottclowe/cbrewer2), GitHub.
  27. % Oostenveld, R., Fries, P., Maris, E., Schoffelen, J.-M. (2011). FieldTrip: Open source software for advanced analysis of MEG, EEG, and invasive electrophysiological data. Computational Intelligence and Neuroscience, 2011, 156869, doi:10.1155/2011/156869.
  28. %
  29. % Karl-Philipp Floesch (2025), University of Konstanz
  30. % David Schubring (2021), University of Konstanz
  31. % 05/2025
  32. % [email hidden]
  33. %% set defaults
  34. restoredefaultpath
  35. % FOLDER PATH TO FIELDTRIP TOOLBOX
  36. opts.ftPath = 'XXXXXX';
  37. % FOLDER PATH TO cbrewer2
  38. opts.cbrewer2Path = 'XXXXXX';
  39. % FOLDER PATH TO Colorspace Transformations
  40. opts.colspacePath = 'XXXXXX';
  41. % FILE PATH TO NET LAYOUT (must be compatible with FieldTrip)
  42. opts.netLayout = 'XXXXXX';
  43. % FILE PATH TO CLUSTER DATA (.mat)
  44. opts.dataPath = 'XXXXXX';
  45. addpath(opts.cbrewer2Path)
  46. addpath(opts.colspacePath)
  47. addpath(opts.ftPath)
  48. ft_defaults
  49. %% load data
  50. inLoad = load(opts.dataPath);
  51. clusterStat = inLoad.stat; % name of cluster statistics struct
  52. clear inLoad
  53. %% PLEASE SET PLOTTING PARAMETERS
  54. plotcfg.negPosClust = 'neg'; % plot negative ('neg') or positive cluster ('pos')
  55. plotcfg.Tstat = 'mean'; % plot mean ('mean) or summed ('sum') cluster t-value
  56. plotcfg.Tscale = 3; % min/max absolute t-value on color scale; depends on chosen Tstat, e.g. 3 for 'mean' and 1000 for 'sum'
  57. plotcfg.ClusterNo = 1; % which cluster to plot; you can also choose multiple, e.g. [1 2]
  58. plotcfg.yscale = 'lin'; % linear ('lin') or log ('log') scale of y axis
  59. plotcfg.highlightSize = 28; % point size for highlighting significant cluster sensors
  60. % It is strongly recommended to always plot and interpret the whole
  61. % cluster, but you can also specify time and frequency ranges for
  62. % plotting.
  63. plotcfg.time = []; % in seconds, e.g. [.5 1.2]
  64. plotcfg.freq = []; % in Hz, e.g. [8 20]
  65. %% PLOT
  66. figure('units','normalized','outerposition',[0 0 1 1])
  67. tiledlayout(3,4,"TileSpacing","compact")
  68. % t-statistic freq x time, aggregated over sensors
  69. nexttile([3 3])
  70. clusterPlot = clusterStat;
  71. % select time and frequency range
  72. if ~isempty(plotcfg.time)
  73. cfg = [];
  74. cfg.latency = plotcfg.time;
  75. clusterPlot = ft_selectdata(cfg,clusterPlot);
  76. end
  77. if ~isempty(plotcfg.freq)
  78. cfg = [];
  79. cfg.frequency = plotcfg.freq;
  80. clusterPlot = ft_selectdata(cfg,clusterPlot);
  81. end
  82. dataMat = clusterPlot.stat;
  83. % select significant data points from cluster
  84. if strcmp(plotcfg.negPosClust,'neg') % negative cluster
  85. clusterPlot.negclusterslabelmat(~ismember(clusterPlot.negclusterslabelmat,plotcfg.ClusterNo)) = 0;
  86. clusterPlot.negclusterslabelmat(ismember(clusterPlot.negclusterslabelmat,plotcfg.ClusterNo)) = 1;
  87. [ClustChans,~,~] = find(clusterPlot.negclusterslabelmat == 1);
  88. dataMat(clusterPlot.negclusterslabelmat == 0) = NaN;
  89. % get sensor contributions
  90. statChan = find(any(clusterPlot.negclusterslabelmat,2:3));
  91. statChanCount = sum(clusterPlot.negclusterslabelmat(statChan,:),2);
  92. elseif strcmp(plotcfg.negPosClust,'pos') % positive cluster
  93. clusterPlot.posclusterslabelmat(~ismember(clusterPlot.posclusterslabelmat,plotcfg.ClusterNo)) = 0;
  94. clusterPlot.posclusterslabelmat(ismember(clusterPlot.posclusterslabelmat,plotcfg.ClusterNo)) = 1;
  95. [ClustChans,~,~] = find(clusterPlot.posclusterslabelmat == 1);
  96. dataMat(clusterPlot.posclusterslabelmat == 0) = NaN;
  97. % get sensor contributions
  98. statChan = find(any(clusterPlot.posclusterslabelmat,2:3));
  99. statChanCount = sum(clusterPlot.posclusterslabelmat(statChan,:),2);
  100. end
  101. if strcmp(plotcfg.Tstat, 'mean')
  102. % standardize cluster t-value by dividing sum of t-values by number of
  103. % significant sensors
  104. dataMat = squeeze(sum(permute(dataMat(unique(ClustChans),:,:),[1 3 2]),1,"omitnan"))./length(unique(ClustChans));
  105. barlabel = 'standardized cluster t-value';
  106. elseif strcmp(plotcfg.Tstat, 'sum')
  107. % use sum of t-values
  108. dataMat = squeeze(sum(permute(dataMat(unique(ClustChans),:,:),[1 3 2]),1,"omitnan"));
  109. barlabel = 'summed cluster t-value';
  110. end
  111. idx = find(dataMat == 0); % find non-significant data points
  112. % smooth data with gaussian filter
  113. dataMat = smoothdata2(dataMat,"gaussian");
  114. % remove non-significant points
  115. dataMat(idx) = 0;
  116. % make color scale
  117. ncol = 1000;
  118. if strcmp(plotcfg.negPosClust,'neg')
  119. dataMat(dataMat >= 0) = NaN;
  120. colmap = jet(ncol); colVec = [20 100];
  121. colormap(colmap(floor(colVec(1)/256*ncol):ceil(colVec(2)/256*ncol),:));
  122. elseif strcmp(plotcfg.negPosClust,'pos')
  123. dataMat(dataMat <= 0) = NaN;
  124. colmap = cbrewer2('OrRd',ncol); colVec = [1 256];
  125. colormap(colmap(floor(colVec(1)/256*ncol):ceil(colVec(2)/256*ncol),:));
  126. end
  127. % plot
  128. contourf(clusterPlot.time*1000,clusterPlot.freq,dataMat',40,'linecolor','none','edgecolor','none')
  129. set(gcf,'color','w')
  130. % color bar
  131. hc = colorbar;
  132. if strcmp(plotcfg.negPosClust,'neg')
  133. set(hc,"Limits",[-plotcfg.Tscale 0])
  134. clim([-plotcfg.Tscale 0])
  135. elseif strcmp(plotcfg.negPosClust,'pos')
  136. set(hc,"Limits",[0 plotcfg.Tscale])
  137. clim([0 plotcfg.Tscale])
  138. end
  139. set(hc, 'FontSize', 24)
  140. hc.Label.String = barlabel;
  141. % axes
  142. ax = gca;
  143. set(ax,'xcolor',[.15 .15 .15],'ycolor',[.15 .15 .15])
  144. ax.LineWidth = 2;
  145. ax.FontSize = 30;
  146. ax.FontName = 'Helvetica';
  147. ax.FontWeight = 'bold';
  148. ax.YLabel.Visible = 'on';
  149. ax.XLabel.Visible = 'on';
  150. % ax.XTickLabel(1:2:length(ax.XTickLabel)-1) = {''}; % remove labels every X steps
  151. if strcmp(plotcfg.yscale,'log'); yscale log; end
  152. xlh = xlabel ('Time (ms)','FontSize',30, 'FontWeight','bold','FontName','Helvetica','Color',[.15 .15 .15]);
  153. ylh = ylabel('Frequency (Hz)','FontSize',30, 'FontWeight','bold','FontName','Helvetica','Color',[.15 .15 .15]);
  154. title('Time x Frequency, aggregated over cluster sensors','FontSize',30)
  155. % graded point size using median splits
  156. MedianSplit = median(statChanCount);
  157. statChanLow = statChanCount <= MedianSplit;
  158. statChanHigh = statChanCount > MedianSplit;
  159. MedianSplitLow = median(statChanCount(statChanLow));
  160. statChanLow1 = statChan(statChanCount <= MedianSplitLow);
  161. statChanLow2 = statChan(statChanCount > MedianSplitLow & statChanCount <= MedianSplit);
  162. MedianSplitHigh = median(statChanCount(statChanHigh));
  163. statChanHigh1 = statChan(statChanCount <= MedianSplitHigh & statChanCount > MedianSplit);
  164. statChanHigh2 = statChan(statChanCount > MedianSplitHigh);
  165. stepstatChanLow1 = statChanLow1(ismember(statChanLow1,statChan));
  166. stepstatChanLow2 = statChanLow2(ismember(statChanLow2,statChan));
  167. stepstatChanHigh1 = statChanHigh1(ismember(statChanHigh1,statChan));
  168. stepstatChanHigh2 = statChanHigh2(ismember(statChanHigh2,statChan));
  169. if isempty(stepstatChanHigh1)
  170. stepstatChanHigh1 = stepstatChanLow2;
  171. end
  172. if isempty(stepstatChanHigh2)
  173. stepstatChanHigh2 = stepstatChanHigh1;
  174. end
  175. % plot sensor contribution on sensor net layout
  176. nexttile(8)
  177. title('Sensor contributions','FontSize',24)
  178. cfg = [];
  179. cfg.layout = opts.netLayout;
  180. cfg.figure = 'gcf';
  181. cfg.comment = 'no';
  182. plotLayout = ft_prepare_layout(cfg);
  183. opts.plotchans = find(ismember(plotLayout.label,clusterPlot.label)); % exclude channels not present in cluster statistics struct
  184. stepstatChanHigh2 = find(ismember(plotLayout.label,clusterPlot.label(stepstatChanHigh2))); % find highlighted channel labels in imported net layout
  185. stepstatChanHigh1 = find(ismember(plotLayout.label,clusterPlot.label(stepstatChanHigh1)));
  186. stepstatChanLow2 = find(ismember(plotLayout.label,clusterPlot.label(stepstatChanLow2)));
  187. stepstatChanLow1 = find(ismember(plotLayout.label,clusterPlot.label(stepstatChanLow1)));
  188. % plot stack of layouts
  189. ft_plot_layout(plotLayout,'chanindx',opts.plotchans,'label','no','box','no','pointsymbol','o','pointcolor','k','pointsize',4)
  190. ft_plot_layout(plotLayout,'chanindx',stepstatChanHigh2,'label','no','box','no','pointsymbol','.','pointcolor','k','pointsize',plotcfg.highlightSize)
  191. ft_plot_layout(plotLayout,'chanindx',stepstatChanHigh1,'label','no','box','no','pointsymbol','.','pointcolor','k','pointsize',plotcfg.highlightSize/1.5)
  192. ft_plot_layout(plotLayout,'chanindx',stepstatChanLow2,'label','no','box','no','pointsymbol','.','pointcolor','k','pointsize',plotcfg.highlightSize/2)
  193. ft_plot_layout(plotLayout,'chanindx',stepstatChanLow1,'label','no','box','no','pointsymbol','.','pointcolor','k','pointsize',plotcfg.highlightSize/2.25)

niceTFRplot.m at commit db346ac, under MIT · at the source

Overview

Authors: Karl‐Philipp Flösch1,2, Tobias Flaisch1, Marco Steinhauser3, Harald T Schupp1,2
  1. Department of Psychology, University of Konstanz, Konstanz, Germany
  2. Centre for the Advanced Study of Collective Behaviour, University of Konstanz, Konstanz, Germany
  3. Department of Psychology, Catholic University of Eichstätt‐Ingolstadt, Eichstätt, Germany
Journal: Psychophysiology, volume 63, issue 7, article e70341
Dates: received 3 September 2025; accepted 9 June 2026; published online 28 July 2026; in print July 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1111/psyp.70341 · PMID 42521328 · PMCID PMC13413252 · OpenAlex W7171516583
Open access: hybrid, a free copy (OpenAlex)
Status: code verified
Categories: EEG (modality), human (organism), cognitive (subfield)
Methods: Statistics, Smoothing, state filtering, decompositions, Preprocessing, Spectral & time-frequency, Evoked potentials, fMRI & imaging
Keywords: brain oscillations, cooperation, ERP, experimental game, hyperscanning, reward
MeSH: Brain*, Cooperative Behavior*, Evoked Potentials*, Reward*, Adult, Electroencephalography, Female, Games, Experimental, Goals, Humans, Male, Motivation, Young Adult (* major topic)
Topic: Action Observation and Synchronization (Social Psychology, Psychology), according to OpenAlex
Funding: Deutsche Forschungsgemeinschaft (EXC2117-422037984, EXC2117‐422037984)
Citations: not cited yet (Europe PMC); 77 references in the paper

Abstract

Human cooperation depends on shared goals and dynamic role‐taking, aligning individual actions with goal‐related tasks. However, in everyday social interactions, cooperation is often intertwined with personal goals and motivations. In this study, 48 young, healthy participants played the dyadic Pacman Game that incorporated a personal gamble to reflect these social dynamics. Brain oscillations and event‐related potentials differentiated between achieving a shared goal enhanced by personal rewards and reaching a shared goal without a personal reward. Specifically, personal rewards, which had to be inferred from social cues rather than explicit feedback, were linked to increased delta/theta power and sustained positive ERP potentials over fronto‐central regions. Furthermore, we replicated findings of alpha/beta power decreases and enhanced P3‐like positivities associated with cognitive and semantic processing demands of specific player roles. Our results highlight how neural measures obtained in experimental games shed light on the interplay between shared goals and personal motivations, offering a valuable framework to bridge insights from controlled paradigms to real‐world social cooperation.

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

Repository

Its files are read in the Code ↔ Paper reader above.

kpm-floesch/niceTFRplot

License: MIT
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: db346ac6049047709a01960d5bc9db40db4d7c0e, 30 July 2026
Languages: MATLAB (1)
Size: 4 files, 1 script
Software Heritage: not archived
Found in: “Data Reproducibility”
Holds: README, license file
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Tools: FieldTrip (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
3 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;
  • 1 script, each with its path and the digest of its content;
  • no match between paragraphs and code yet;
  • 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 aggregated data and analysis scripts necessary to reproduce the findings of this study are available at https://doi.org/10.48606/f2g5kr6u63djbk37. The full data are not publicly archived, as participants did not provide consent for sharing their individual raw EEG recordings.

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, 4 authors, 6 keywords, 13 MeSH terms, 1 funder, 62 references.

Cite

This paper

Flösch, K., Flaisch, T., Steinhauser, M., & Schupp, H. T. (2026). The Brain Signature of Reward Processing During Cooperative Gaming. Psychophysiology, 63(7), e70341. https://doi.org/10.1111/psyp.70341

BibTeX

@article{flosch2026brain,
author = {Flösch, Karl‐Philipp and Flaisch, Tobias and Steinhauser, Marco and Schupp, Harald T},
title = {{The Brain Signature of Reward Processing During Cooperative Gaming}},
journal = {Psychophysiology},
year = {2026},
month = jul,
volume = {63},
number = {7},
pages = {e70341},
publisher = {Wiley},
issn = {0048-5772},
doi = {10.1111/psyp.70341},
url = {https://doi.org/10.1111/psyp.70341},
pmid = {42521328},
pmcid = {PMC13413252}
}

RIS

TY - JOUR
AU - Flösch, Karl‐Philipp
AU - Flaisch, Tobias
AU - Steinhauser, Marco
AU - Schupp, Harald T
TI - The Brain Signature of Reward Processing During Cooperative Gaming
T2 - Psychophysiology
J2 - Psychophysiology
PY - 2026
DA - 2026/07/01
VL - 63
IS - 7
SP - e70341
SN - 0048-5772
PB - Wiley
DO - 10.1111/psyp.70341
UR - https://doi.org/10.1111/psyp.70341
LA - en
ER -

CSL-JSON

{
"id": "10.1111/psyp.70341",
"type": "article-journal",
"title": "The Brain Signature of Reward Processing During Cooperative Gaming",
"container-title": "Psychophysiology",
"author": [
{
"family": "Flösch",
"given": "Karl‐Philipp"
},
{
"family": "Flaisch",
"given": "Tobias"
},
{
"family": "Steinhauser",
"given": "Marco"
},
{
"family": "Schupp",
"given": "Harald T"
}
],
"container-title-short": "Psychophysiology",
"volume": "63",
"issue": "7",
"page": "e70341",
"DOI": "10.1111/psyp.70341",
"PMID": "42521328",
"PMCID": "PMC13413252",
"ISSN": "0048-5772",
"publisher": "Wiley",
"URL": "https://doi.org/10.1111/psyp.70341",
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
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.neuroimage.2026.122115 [code]
Midfrontal theta power relates to response speeding following frustrative nonreward.
Journal: NeuroImage
In common: EEG, cognitive, 4 references
[2] doi:10.1038/s41598-026-58046-4 [code]
Dissecting the interplay of model-based control, impulsivity and compulsivity on self-control in daily life.
Journal: Scientific reports
In common: EEG, cognitive, 4 references
[3] doi:10.1016/j.isci.2026.116586 [code]
Condition-specific neural signatures of reactivation during post-retrieval rest: An EEG study.
Journal: iScience
In common: FieldTrip, EEG, cognitive, 4 references
[4] doi:10.1073/pnas.2528246123
Protecting episodic memory after sleep loss: Similar benefits of exercise and naps via distinct neural contributions.
Journal: Proceedings of the National Academy of Sciences of the United States of America
In common: EEG, cognitive, 4 references
[5] doi:10.1016/j.isci.2026.116473
Belief updating in uncertain environments is differentially sensitive to reward and punishment learning: Evidence from ERP.
Journal: iScience
In common: EEG, cognitive, 3 references
[6] doi:10.1002/advs.77857 [code]
Brain Network Dynamics of Local and Global Predictive Processing in Aging.
Journal: Advanced science (Weinheim, Baden-Wurttemberg, Germany)
In common: FieldTrip, cognitive, 3 references
[7] doi:10.1007/s00221-026-07365-z
Effects of augmented feedback delay on neural correlates of feedback processing in motor practice.
Journal: Experimental brain research
In common: EEG, 3 references
[8] doi:10.1371/journal.pbio.3003779 [code]
Past and present goals are represented concurrently during visual search.
Journal: PLoS biology
In common: EEG, cognitive, 3 references
[9] doi:10.1111/psyp.70303 [code]
Misinterpreting Electrophysiology in Human Cognitive Neuroscience.
Journal: Psychophysiology
In common: EEG, cognitive, 3 references
[10] doi:10.1371/journal.pbio.3003938 [code]
Theta oscillations tag episodic memories for sleep-dependent consolidation.
Journal: PLoS biology
In common: FieldTrip, EEG, cognitive, 2 references

Contribute

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

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

Request its removal

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

Discussion, reproductions, activity

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

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

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