OSCR

The Neural Processes Underpinning Flexible Semantic Retrieval in Visual and Auditory Modalities.

Code ↔ Paper

1 match between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 1 match
  1. [1] § Methods › Procedure ↔ auditory_semantic_control.py, lines 296–340 · score 0.66 · jittered fixation, Experiment starts soon, pressed, onset, probes, stimulus

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

Python · 543 lines · 18 KB · no license · 1 match

  1. # -*- coding: utf-8 -*-
  2. """
  3. @author: xs1019, xw1365
  4. This script presents the following events in the following order:
  5. ITI [+] --> [cue] --> [word1] --> [word2]--> [+]
  6. 1. presents GUI to collect participant info
  7. 2. creates output file for participant (no risk of overwriting because each file is unique due to the timestamp)
  8. 3. presents instructions
  9. 4. presents stimuli and accept keypress
  10. """
  11. from psychopy import visual, core, monitors, event, sound, gui, logging
  12. from datetime import datetime
  13. from random import shuffle
  14. import os
  15. import time
  16. import csv
  17. import sys, os, errno # to get file system encoding (used in setDir())
  18. import numpy as np
  19. import random
  20. from collections import OrderedDict
  21. import numpy as np
  22. import sounddevice
  23. import soundfile
  24. import time
  25. #%%
  26. # Experiment constants
  27. instruct_file = 'semantic_relation_instru.csv'
  28. rest_file = 'semantic_relation_judgement_rest.csv'
  29. expName = 'SemanticRelationJudgement' # the experiment name
  30. data_folder = 'data' + '_' + expName # make a directory to store data
  31. stimuli_name = 'sem_stim_run'
  32. fixa_name = 'sem_fixa_run'
  33. stimul_folder = 'auditory_stimuli'
  34. stimul_csv_folder = 'stimuli_csv'
  35. # assign the monitor name
  36. monitor_name = 'HP ProOne 600'
  37. # window size = x, y
  38. win_size_x = 1920
  39. win_size_y = 1080
  40. # window background color
  41. win_bg_col = (1.0,1.0,1.0) # background color is black
  42. win_text_col = (-1,-1,-1) # text color is white
  43. # instruction, position height (font size)
  44. instru_pos = (0,0) # (0,0) indicates the central position
  45. clue_pos = (0,0)
  46. fixa_pos = (0,0)
  47. #remin_pos = (0,0)
  48. probe_pos = (0,0)
  49. target_pos = (0,0)
  50. image_pos = (0,0)
  51. instru_h = 80
  52. text_h = 100
  53. num_trials = 45 # total trial numbers of each run
  54. # presentation time of clue and probe
  55. clue_time = 1
  56. probe_time = 1
  57. # response time
  58. timelimit_deci = 3
  59. ## define functions
  60. # get the current directory of this script - correct
  61. def get_pwd():
  62. global curr_dic
  63. curr_dic = os.path.dirname(sys.argv[0])
  64. return curr_dic
  65. # make a folder in the current directory used to store data - correct
  66. def makedir(folder_name):
  67. os.chdir(curr_dic)
  68. if not os.path.exists(folder_name):
  69. os.makedirs(folder_name)
  70. # call the functions defined
  71. # get the current directory
  72. curr_dic = get_pwd()
  73. #%%
  74. # initialize the sound card, it takes a few seconds to initialize the sound card. So you need to play a blank/testing sound at the beginning of your experiment.
  75. filename = os.path.join(curr_dic,'test.wav')
  76. data, sr = soundfile.read(filename)
  77. test_data = np.zeros((sr * 3, 2), dtype=np.float32)
  78. # Play blank sound to initialise sound card
  79. sounddevice.play(test_data, sr, blocking=True)
  80. import time
  81. time.sleep(10)
  82. # make a directory – data to store the generated data
  83. makedir(data_folder)
  84. # quit functions - to allow subjects to quit the experiment - correct
  85. def shutdown ():
  86. win.close()
  87. core.quit()
  88. # get the participants info, initialize the screen and create a data file for this subject
  89. def info_gui(expName):
  90. # Set up a dictionary in which we can store our experiment details
  91. expInfo={}
  92. expInfo['expname'] =expName
  93. # Create a string version of the current year/month/day hour/minute
  94. expInfo['expdate']=datetime.now().strftime('%Y%m%d_%H%M')
  95. expInfo['subjID']=''
  96. #expInfo['subjName']=''
  97. expInfo['run']=''
  98. # Set up our input dialog
  99. # Use the 'fixed' argument to stop the user changing the 'expname' parameter
  100. # Use the 'order' argumennt to set the order in which to display the fields
  101. dlg = gui.DlgFromDict(expInfo,title='input data', fixed = ['expname','expdate'],order =['expname','expdate','subjID','run'])
  102. if not dlg.OK:
  103. print ('User cancelled the experiment')
  104. core.quit()
  105. # creates a file with a name that is absolute path + info collected from GUI
  106. filename = data_folder + os.sep + '%s_%s_%s.csv' %(expInfo['subjID'], expInfo['expdate'], expInfo['run'])
  107. stimuli_file = stimuli_name +expInfo['run']+'.csv'
  108. fixa_file = fixa_name + expInfo['run']+'.csv'
  109. return expInfo, filename,stimuli_file,fixa_file
  110. # to avoid overwrite the data. Check whether the file exists, if not, create a new one and write the header.
  111. # Otherwise, rename it - repeat_n
  112. # correct
  113. def write_file_not_exist(filename):
  114. repeat_n = 1
  115. while True:
  116. if not os.path.isfile(filename):
  117. f = open(filename,'w')
  118. # f.write(header)
  119. break
  120. else:
  121. filename = data_folder + os.sep + '%s_%s_%s_repeat_%s.csv' %(expInfo['subjID'], expInfo['expdate'],str(repeat_n))
  122. repeat_n = repeat_n + 1
  123. # Open a csv file, read through from the first row # correct
  124. def load_conditions_dict(conditionfile):
  125. #load each row as a dictionary with the headers as the keys
  126. #save the headers in its original order for data saving
  127. # csv.DictReader(f,fieldnames = None): create an object that operates like a regular reader
  128. # but maps the information in each row to an OrderedDict whose keys
  129. # are given by the optional fieldnames parameter.
  130. with open(conditionfile) as csvfile:
  131. reader = csv.DictReader(csvfile)
  132. trials = []
  133. for row in reader:
  134. trials.append(row)
  135. # save field names as a list in order
  136. fieldnames = reader.fieldnames # filenames is the first row, which used as keys of trials
  137. return trials, fieldnames # trial is a list, each element is a key-value pair. Key is the
  138. # header of that column and value is the corresponding value
  139. # Create the log file to store the data of the experiment
  140. # create the header
  141. def write_header(filename, header):
  142. with open (filename,'a') as csvfile:
  143. fieldnames = header
  144. data_file = csv.DictWriter(csvfile,fieldnames=fieldnames,lineterminator ='\n')
  145. data_file.writeheader()
  146. #write each trial
  147. def write_trial(filename,header,trial):
  148. with open (filename,'a') as csvfile:
  149. fieldnames = header
  150. data_file = csv.DictWriter(csvfile,fieldnames=fieldnames,lineterminator ='\n')
  151. data_file.writerow(trial)
  152. def read_fix_from_csv(fixa_file):
  153. """
  154. read random fixation file from fixa_file and shuffle and write them in a list
  155. fixa_file is the random fixa time file
  156. argument:sem_fixa_run1.csv, sem_fixa_run2.csv,sem_fixa_run3.csv,sem_fixa_run4.csv
  157. """
  158. f = open(fixa_file,'r')
  159. fixa_list = []
  160. for line in f.readlines():
  161. line = line.strip()
  162. line = float(line)
  163. fixa_list.append(line)
  164. return fixa_list , sum(fixa_list)
  165. # generate the ideal onset of each trial
  166. def gen_ideal_onset(fixa_list,num_trials):
  167. ideal_trial_onset =[]
  168. for trial_num in range(1, num_trials+1,1):
  169. if trial_num ==1:
  170. trial_onset = fixa_list[0]
  171. else:
  172. fixa_sum =fixa_list[0]
  173. for fixa_index in range(1,(trial_num-1)*3+1,1):
  174. fixa_sum+= fixa_list[fixa_index]
  175. trial_onset = fixa_sum + (clue_time + probe_time + timelimit_deci)*(trial_num -1)
  176. ideal_trial_onset.append(trial_onset)
  177. return ideal_trial_onset
  178. # set up the window
  179. # fullscr: better timing can be achieved in full-screen mode
  180. # allowGUI: if set to False, window will be drawn with no frame and no buttons to close etc...
  181. def set_up_window():
  182. mon = monitors.Monitor(monitor_name)
  183. mon.setDistance (114)
  184. win = visual.Window([win_size_x,win_size_y],fullscr = True, monitor = mon,allowGUI = True, winType = 'pyglet', units="pix",color=win_bg_col)
  185. win.mouseVisible = False # hide the mouse
  186. return win
  187. # read the content in the csv or text file
  188. def read_cont (filename):
  189. f = open(filename,'r')
  190. return f
  191. # prepare the content on the screen - content is text
  192. def prep_cont(line, pos, height):
  193. line_text = visual.TextStim(win,line,color = win_text_col,pos = pos,height = height)
  194. return line_text
  195. # prepare the content on the screen - pictures
  196. # create an image stimulus for presenting the images in
  197. # set this to None and then you can update as you go by calling in images from a file for example
  198. # prepare the image on the screen
  199. def prep_image(image,pos):
  200. image_stim = visual.ImageStim(win,image,pos = pos)
  201. return image_stim
  202. # display the content on the screen
  203. def disp_instr_cont(line):
  204. line.draw()
  205. win.flip()
  206. keys = event.waitKeys(keyList =['return','escape'])
  207. if keys[0][0]=='escape':
  208. shutdown()
  209. def trigger_exp():
  210. trigger = prep_cont('trigger the scanner',instru_pos,instru_h)
  211. trigger.draw()
  212. win.flip()
  213. def ready():
  214. trigger = prep_cont('experiment starts soon',instru_pos,instru_h)
  215. trigger.draw()
  216. ready_onset = win.flip()
  217. return ready_onset
  218. def end_exp():
  219. trigger = prep_cont('End of Experiment',instru_pos,instru_h )
  220. trigger.draw()
  221. end_onset = win.flip()
  222. keys = event.waitKeys(keyList =['return'],timeStamped = True)
  223. print ('end of experiment:',end_onset)
  224. shutdown()
  225. return end_onset
  226. # display each trial on the screen at the appropriate time
  227. def run_stimuli(stimuli_file,fixa_list):
  228. """
  229. stimuli file is sem_stim_runi.csv file, including the stimuli for each run
  230. fixa_list is a list, including random jittered fixation time for each trial
  231. """
  232. # read the stimuli # re-define, not use numbers, but use keywords
  233. all_trials, headers = load_conditions_dict(conditionfile=stimuli_file)
  234. headers += ['trial_pres_num', 'conditions', 'StimType', 'fixa1_onset', 'fixa1_durat', 'clue_onset', 'clue_durat','fixa2_onset', 'fixa2_durat', 'probe_onset','probe_durat', 'fixa3_onset', 'fixa3_durat', 'target_onset', 'target_offset','RT', 'correct','KeyPress','fixa4_onset','fixa4_offset','fixa4_RT','fixa4_correct','fixa4_keypress']
  235. # read the fixation duration
  236. all_fixa, fixa_headers = load_conditions_dict(conditionfile=os.path.join(curr_dic,stimul_csv_folder,fixa_file))
  237. # open the result file to write the heater
  238. write_header(filename,headers)
  239. shuffle(all_trials) #-
  240. trial_pres_num = 1 # initize a trial_pres_num to indicate the current trial num
  241. fixa_num = 1
  242. #trigger the scanner
  243. trigger_exp()
  244. event.waitKeys(keyList=['5'], timeStamped=True)
  245. # remind the subjects that experiment starts soon.
  246. ready()
  247. core.wait(9) # 2 TRs
  248. # prepare fixation, clue, probe and target for dispaly
  249. # prepare the content on the screen - content is text
  250. fixa_1 = visual.TextStim(win,'+',color = (1,0,0),pos = fixa_pos,height = text_h)
  251. fixa_2 = visual.TextStim(win,'+',color = win_text_col,pos = fixa_pos,height = text_h)
  252. clue = prep_cont('O',clue_pos,text_h)
  253. probe = prep_cont('O',probe_pos,text_h)
  254. target = prep_cont('O',target_pos,text_h)
  255. run_onset = win.flip()
  256. print ('run_onset',run_onset)
  257. # draw fixation and flip the window
  258. fixa_1.draw()
  259. fixa1_onset = win.flip()
  260. for trial in all_trials:
  261. #''' trial is a ordered dictionary. The key is the first raw of the stimuli csv file'''
  262. data_clue, sr_clue = soundfile.read(os.path.join(curr_dic , stimul_folder, trial['clue']))
  263. data_probe, sr_probe = soundfile.read(os.path.join(curr_dic , stimul_folder, trial['probe']))
  264. data_target, sr_target = soundfile.read(os.path.join(curr_dic , stimul_folder, trial['target']))
  265. # draw clue and filp the window
  266. # when flip the window, play the clue sound
  267. clue.draw()
  268. timetodraw = run_onset + ideal_trial_onset[trial_pres_num-1]
  269. while core.monotonicClock.getTime() < (timetodraw - (1/120.0)):
  270. pass
  271. clue_onset = win.flip()
  272. # print(os.path.join(curr_dic , stimul_folder, trial['probe']))
  273. # print(os.path.join(curr_dic , stimul_folder, trial['target']))
  274. sounddevice.play(data_clue, sr_clue)
  275. # draw fixa between clue and probe and flip the window
  276. fixa_2.draw()
  277. timetodraw = run_onset + ideal_trial_onset[trial_pres_num-1] + clue_time
  278. while core.monotonicClock.getTime() < (timetodraw - (1/120.0)):
  279. pass
  280. fixa2_onset = win.flip()
  281. # draw probe and filp the window
  282. probe.draw()
  283. timetodraw = run_onset + ideal_trial_onset[trial_pres_num-1] + clue_time + fixa_list[fixa_num]
  284. while core.monotonicClock.getTime() < (timetodraw - (1/120.0)):
  285. pass
  286. probe_onset = win.flip()
  287. sounddevice.play(data_probe, sr_probe)
  288. # draw fixa between probe and target and flip the window
  289. fixa_2.draw()
  290. timetodraw = run_onset + ideal_trial_onset[trial_pres_num-1] + clue_time + fixa_list[fixa_num]+ probe_time
  291. while core.monotonicClock.getTime() < (timetodraw - (1/120.0)):
  292. pass
  293. fixa3_onset = win.flip()
  294. # draw target and flip the window
  295. target.draw()
  296. timetodraw = run_onset + ideal_trial_onset[trial_pres_num-1] + clue_time + fixa_list[fixa_num]+ probe_time+ fixa_list[fixa_num +1]
  297. while core.monotonicClock.getTime() < (timetodraw - (1/120.0)):
  298. pass
  299. event.clearEvents()
  300. target_onset = win.flip()
  301. sounddevice.play(data_target, sr_target)
  302. keys = event.waitKeys(maxWait = timelimit_deci, keyList =['1','2','3','4','6','escape'],timeStamped = True)
  303. # If subjects do not press the key within maxwait time, RT is the timilimit and key is none and it is false
  304. if keys is None:
  305. RT = 'None'
  306. keypress = 'None'
  307. correct = 'False'
  308. # If subjects press the key, record which key is pressed, RT and whether it is right
  309. #
  310. elif type(keys) is list:
  311. if keys[0][0]=='escape':
  312. shutdown()
  313. else:
  314. keypress = keys[0][0]
  315. RT = keys[0][1] - target_onset
  316. correct = (keys[0][0]==trial['correct_answer'])
  317. target_offset = target_onset+ timelimit_deci
  318. # present a fixa again to indicate the beginning of the next trial.
  319. # participants can still press the button if they do not press it when the target is presented.
  320. # record the button and RT
  321. if trial_pres_num==1:
  322. trial['fixa1_onset'] = fixa1_onset - run_onset
  323. trial['fixa1_durat']= fixa_list[fixa_num-1]
  324. fixa_1.draw()
  325. timetodraw = run_onset + ideal_trial_onset[trial_pres_num-1] + clue_time + fixa_list[fixa_num]+ probe_time+ fixa_list[fixa_num +1] + timelimit_deci
  326. while core.monotonicClock.getTime() < (timetodraw - (1/120.0)):
  327. pass
  328. fixa4_onset = win.flip()
  329. event.clearEvents()
  330. while core.monotonicClock.getTime() < (timetodraw - (1/120.0)):
  331. pass
  332. # keys_fixa4 = event.waitKeys(maxWait = fixa_list[fixa_num]-1, keyList =['1','2','escape'],timeStamped = True)
  333. keys_fixa4 = event.waitKeys(maxWait = 0.5, keyList =['1','2','3','4','6','escape'],timeStamped = True)
  334. # If subjects do not press the key within maxwait time, RT is the timilimit and key is none and it is false
  335. if keys_fixa4 is None:
  336. fixa4_keypress = 'None'
  337. fixa4_RT = 'None'
  338. fixa4_correct = 'False'
  339. # If subjects press the key, record which key is pressed, RT and whether it is right
  340. #
  341. elif type(keys_fixa4) is list:
  342. if keys_fixa4[0][0]=='escape':
  343. shutdown()
  344. else:
  345. fixa4_keypress = keys_fixa4[0][0]
  346. fixa4_RT = keys_fixa4[0][1] - target_onset
  347. fixa4_correct = (keys_fixa4[0][0]==trial['correct_answer'])
  348. fixa4_offset = fixa4_onset + fixa_list[fixa_num+2]
  349. trial['trial_pres_num']=trial_pres_num
  350. trial['clue_onset'] = clue_onset -run_onset
  351. trial['clue_durat'] = clue_time
  352. trial['fixa2_onset'] = fixa2_onset -run_onset
  353. trial['fixa2_durat']= fixa_list[fixa_num]
  354. trial['probe_onset'] = probe_onset - run_onset
  355. trial['probe_durat']= probe_time
  356. trial['fixa3_onset'] = fixa3_onset - run_onset
  357. trial['fixa3_durat']= fixa_list[fixa_num+1]
  358. trial['target_onset'] = target_onset - run_onset
  359. trial['target_offset'] = target_offset - run_onset
  360. trial['RT'] = RT
  361. trial['correct'] = correct
  362. trial['KeyPress'] = keypress
  363. trial['fixa4_onset'] = fixa4_onset - run_onset
  364. trial['fixa4_offset'] = fixa4_offset - run_onset
  365. trial['fixa4_RT'] =fixa4_RT
  366. trial['fixa4_correct'] = fixa4_correct
  367. trial['fixa4_keypress'] = fixa4_keypress
  368. write_trial(filename,headers,trial) # calls the function that writes csv output
  369. trial_pres_num +=1 # the number-th presentnted trial
  370. fixa_num +=3
  371. # -----------------------------------------------------------------------------------------------------------------------------------------------
  372. # For experiment
  373. # record subjects info and create a csv file with the info about subjects
  374. expInfo, filename, stimuli_file,fixa_file = info_gui(expName)
  375. # if the data does not exist, create one, otherwise, rename one –filename-repeat-n
  376. write_file_not_exist(filename)
  377. # set up the window to display the instruction
  378. win = set_up_window()
  379. # generate the jitter list for the fixation and probe
  380. # know the number of trials
  381. trials, fieldnames = load_conditions_dict(os.path.join(curr_dic,stimul_csv_folder ,stimuli_file))
  382. trials_num = len(trials)
  383. fixa_list,total_fixa_time = read_fix_from_csv(os.path.join(curr_dic,stimul_csv_folder,fixa_file))
  384. ideal_trial_onset = gen_ideal_onset(fixa_list,num_trials) # ideal onset list of each trial
  385. # sets a local clock that will be used to store timing information synced with the scanner
  386. expClock = core.Clock()
  387. expClock.reset()
  388. # run the stimuli
  389. run_stimuli(os.path.join(curr_dic,stimul_csv_folder,stimuli_file),fixa_list)
  390. # end of the experiment
  391. end_onset = end_exp()
  392. print ('end onset',end_onset)
  393. # Experiment()

auditory_semantic_control.py, no license · at the source

Overview

Authors: Ximing Shao1,2, Meichao Zhang1,3, Xiuyi Wang1,3, Andre Gouws1, Rebecca L. Jackson1, Jonathan Smallwood4, Katya Krieger‐Redwood1, Elizabeth Jefferies1
  1. Department of Psychology University of York York UK
  2. Department of Linguistics and Modern Languages The Chinese University of Hong Kong Hong Kong SAR China
  3. CAS Key Laboratory of Behavioral Science, Institute of Psychology Chinese Academy of Sciences Beijing China
  4. Department of Psychology Queen's University Kingston Ontario Canada
Journal: Human brain mapping, volume 47, issue 6, article e70536
Dates: received 19 August 2025; accepted 11 April 2026; published online 22 April 2026; in print April 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1002/hbm.70536 · PMID 42017780 · PMCID PMC13101451 · OpenAlex W4411541375
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: human (organism), cognitive (subfield)
Methods: Preprocessing, Statistics, fMRI & imaging
MeSH: Auditory Perception*, Brain*, Brain Mapping*, Semantics*, Visual Perception*, Acoustic Stimulation, Adult, Female, Humans, Image Processing, Computer-Assisted, Magnetic Resonance Imaging, Male, Photic Stimulation, Reaction Time, Speech Perception, Young Adult (* major topic)
Topic: Action Observation and Synchronization (Social Psychology, Psychology), according to OpenAlex
Funding: European Research Council (771863)
Citations: cited by 1 paper (Europe PMC); 61 references in the paper

Abstract

Contemporary accounts of semantic cognition propose that conceptual knowledge is supported by a heteromodal conceptual store and controlled retrieval processes. However, it remains unclear how the neural basis of semantic control varies across modalities. Recent models of cortical organisation suggest that control networks are distributed along a unimodal‐to‐heteromodal cortical gradient, with the semantic control network (SCN) located in more heteromodal cortex than the domain‐general multiple demand network (MDN). We used fMRI to examine how these networks respond to semantic control demands in visual and auditory tasks. Participants judged the semantic relatedness of spoken and written word pairs. On half of the trials, a task cue specified the semantic feature to guide retrieval; on the remaining trials, no such cue was given. The SCN showed greater activation when task knowledge was available, consistent with a role in the top‐down control of semantic retrieval across modalities. In contrast, the MDN showed greater activation for spoken words, likely reflecting increased demands in speech perception. These findings demonstrate a dissociation between control networks, with SCN involvement modulated by task structure and MDN activity influenced by perceptual difficulty.

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 1 match between paragraphs and lines of code.

OSF swzvr

License: none: the authors keep all their rights
State: the link answers, verified on 28 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: “Data Availability Statement”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (1 file), PsychoPy (1 file)
Availability: 1 check, the latest on 28 September 2026: the link answers (HTTP 200)
  • 28 September 2026: the link answers (HTTP 200)
1 file
At the source: osf.io/swzvr/

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;
  • 1 match between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

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

Data

Datasets cited

Data Availability Statement

The materials and code used to run the study are publicly available on the Open Science Framework (OSF; https://osf.io/swzvr/). Group‐level NIFTI files and network maps are publicly available on NeuroVault in a collection with the title of this article (https://neurovault.org/collections/14750/). The conditions of our ethics approval do not permit public archiving of the raw data supporting this study. Readers seeking access to this data should contact Professor Elizabeth Jefferies, or the local ethics committee at the Department of Psychology and York Neuroimaging Centre, University of York. Access will be granted to named individuals in accordance with ethical procedures governing the reuse of sensitive data. Specifically, the following conditions must be met to obtain access to the data: approval by the Department of Psychology and York Neuroimaging Research Ethics Committees and a suitable legal basis for the release of the data under GDPR.

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

Recorded: type, language, journal, volume, issue, pages, dates, 8 authors, 16 MeSH terms, 1 funder, 51 references.

Cite

This paper

Shao, X., Zhang, M., Wang, X., Gouws, A., Jackson, R. L., Smallwood, J., Krieger‐Redwood, K., & Jefferies, E. (2026). The Neural Processes Underpinning Flexible Semantic Retrieval in Visual and Auditory Modalities. Human brain mapping, 47(6), e70536. https://doi.org/10.1002/hbm.70536

BibTeX

@article{shao2026neural,
author = {Shao, Ximing and Zhang, Meichao and Wang, Xiuyi and Gouws, Andre and Jackson, Rebecca L. and Smallwood, Jonathan and Krieger‐Redwood, Katya and Jefferies, Elizabeth},
title = {{The Neural Processes Underpinning Flexible Semantic Retrieval in Visual and Auditory Modalities}},
journal = {Human brain mapping},
year = {2026},
month = apr,
volume = {47},
number = {6},
pages = {e70536},
publisher = {Wiley},
issn = {1065-9471},
doi = {10.1002/hbm.70536},
url = {https://doi.org/10.1002/hbm.70536},
pmid = {42017780},
pmcid = {PMC13101451}
}

RIS

TY - JOUR
AU - Shao, Ximing
AU - Zhang, Meichao
AU - Wang, Xiuyi
AU - Gouws, Andre
AU - Jackson, Rebecca L.
AU - Smallwood, Jonathan
AU - Krieger‐Redwood, Katya
AU - Jefferies, Elizabeth
TI - The Neural Processes Underpinning Flexible Semantic Retrieval in Visual and Auditory Modalities
T2 - Human brain mapping
J2 - Hum Brain Mapp
PY - 2026
DA - 2026/04/01
VL - 47
IS - 6
SP - e70536
SN - 1065-9471
PB - Wiley
DO - 10.1002/hbm.70536
UR - https://doi.org/10.1002/hbm.70536
LA - en
ER -

CSL-JSON

{
"id": "10.1002/hbm.70536",
"type": "article-journal",
"title": "The Neural Processes Underpinning Flexible Semantic Retrieval in Visual and Auditory Modalities",
"container-title": "Human brain mapping",
"author": [
{
"family": "Shao",
"given": "Ximing"
},
{
"family": "Zhang",
"given": "Meichao"
},
{
"family": "Wang",
"given": "Xiuyi"
},
{
"family": "Gouws",
"given": "Andre"
},
{
"family": "Jackson",
"given": "Rebecca L."
},
{
"family": "Smallwood",
"given": "Jonathan"
},
{
"family": "Krieger‐Redwood",
"given": "Katya"
},
{
"family": "Jefferies",
"given": "Elizabeth"
}
],
"container-title-short": "Hum Brain Mapp",
"volume": "47",
"issue": "6",
"page": "e70536",
"DOI": "10.1002/hbm.70536",
"PMID": "42017780",
"PMCID": "PMC13101451",
"ISSN": "1065-9471",
"publisher": "Wiley",
"URL": "https://doi.org/10.1002/hbm.70536",
"language": "en",
"issued": {
"date-parts": [
[
2026,
4,
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.1038/s41467-026-75841-9 [code]
Model-based semantic distance reveals adaptive coordination of distinct cognitive systems in flexible knowledge retrieval.
Journal: Nature communications
In common: NumPy, cognitive, 15 references
[2] doi:10.1162/imag.a.1281
Syntactic processing engages the semantic control network.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: 15 references
[3] doi:10.1073/pnas.2528851123 [code]
Sender-receiver subdivisions of the default mode network in perceptual and memory-guided cognition.
Journal: Proceedings of the National Academy of Sciences of the United States of America
In common: PsychoPy, NumPy, cognitive, 5 references, author Katya Krieger-Redwood
[4] doi:10.1016/j.neuroimage.2026.122051 [code]
Determining hemispheric language dominance from MEG beta-power modulations: Concordance with fMRI.
Journal: NeuroImage
In common: NumPy, cognitive, 4 references
[5] doi:10.1162/nol.a.244 [code]
A Novel Approach to Map the Causal Impact of Brain Stimulation on Semantic Processing With Language Models.
Journal: Neurobiology of language (Cambridge, Mass.)
In common: NumPy, 4 references
[6] doi:10.1162/imag.a.1201 [code]
All spectral frequencies of neural activity reveal semantic representation in the human anterior ventral temporal cortex.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: NumPy, 4 references
[7] doi:10.1073/pnas.2603114123 [code]
The human hippocampus can pattern separate memories by meaning.
Journal: Proceedings of the National Academy of Sciences of the United States of America
In common: PsychoPy, NumPy, cognitive, 2 references
[8] doi:10.1093/braincomms/fcag151
Brain function in language and associated networks in non- or minimally verbal children.
Journal: Brain communications
In common: 4 references
[9] doi:10.7554/elife.109842 [code]
Dissociable neural substrates of integration and segregation in exogenous attention.
Journal: eLife
In common: cognitive, 3 references
[10] doi:10.7554/elife.107933 [code]
Modality-agnostic decoding of vision and language from fMRI.
Journal: eLife
In common: NumPy, 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.