OSCR

Automating region selection with genetic algorithms for energy landscape analyses of brain dynamics.

Code ↔ Paper

2 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 2 matches
  1. [1] § Methods › Scenario 1: Validation of generalizability of ELA/GAopt using the creativity dataset and HCP-YA dataset ↔ Analysis/08_selected_roi_stability.py, lines 21–63 · score 0.63 · Hamming distance, random ROI, selected ROI, optimized ROI, atlas, metrics
  2. [2] § Methods › Scenario 1: Validation of generalizability of ELA/GAopt using the creativity dataset and HCP-YA dataset ↔ Analysis/07_random_roi_selection.py, lines 23–138 · score 0.63 · Hamming distance, randomly selected ROI, intersection, union, overlaps, ROI selection

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 · 350 lines · 18 KB · Apache-2.0 · 1 match

  1. """
  2. 選択されたROIの安定性分析スクリプト
  3. ----------------------------------------------------
  4. 動作確認済み/Tested with Python 3.13.2
  5. ----------------------------------------------------
  6. Script for analyzing stability of selected ROIs across trials
  7. ----------------------------------------------------
  8. calculates frequency of ROI selections using hamming distance and jaccard index
  9. -----------------------------------------------------
  10. """
  11. import pandas as pd
  12. import numpy as np
  13. import os
  14. import random
  15. #import elagaopt as elaopt
  16. from statannotations.Annotator import Annotator
  17. import matplotlib.pyplot as plt
  18. import seaborn as sns
  19. # --- main関数 / Main function ---
  20. def main():
  21. # --- パス設定/Path settings ---
  22. # Atlas ROI label file
  23. # Using existing atlas label file
  24. atlas_label_path = "Data//atlas_data//power264NodeNames.txt"
  25. # --- GA最適化結果ファイルパターン / GA optimization result file pattern ---
  26. # created by 01_main_ELAGAopt.py
  27. ga_result_path = "ELAGAopt_result//GA_result//best_individual//best_ind_{idx}.csv"
  28. scenario_num = 1 # Scenario number used in GA optimization
  29. # --- ランダムROI選択結果の読み込み / Load random ROI selection results ---
  30. random_roi_path = "ELAGAopt_result//Analysis_result//random_ROI_selection//roi_random_s1_600.csv"
  31. random_roi_df = pd.read_csv(random_roi_path)
  32. n_individuals = 100 # Number of individuals/trials
  33. individual_all_df = pd.DataFrame()
  34. # --- GA最適化されたROI選択結果の読み込み / Load GA-optimized ROI selection results ---
  35. for i in range(n_individuals):
  36. print(f"Processing individual {i+1}/{n_individuals}")
  37. individual_path = ga_result_path.format(idx=i+1) # パスを生成 / Generate path for the individual
  38. individual_df = pd.read_csv(individual_path) # 個体データを読み込む / Load individual data
  39. individual = individual_df.iloc[999].values # 最終世代の個体を抽出 / Extract the individual from the final generation
  40. individual = np.delete(individual, 0) # 最初の列(インデックス)を削除 / Remove the first column (index)
  41. print(f"Individual data shape: {individual.shape}")
  42. print(f"Number of selected ROIs: {np.sum(individual)}")
  43. print(F"individual data preview: {individual[:10]} ...")
  44. print(f"Selected ROIs for individual {i+1}: {np.where(individual == 1)[0]}")
  45. individual_df = pd.DataFrame([individual]) # 個体データをDataFrame化 / Convert individual data to DataFrame
  46. individual_all_df = pd.concat([individual_all_df, individual_df], ignore_index=True) # GA最適化された個体データを結合 / Concatenate GA-optimized individual data
  47. # --- 安定性指標の計算と保存 / Calculate and save stability metrics ---
  48. output_path_prefix = f"ELAGAopt_result//Analysis_result//selected_ROI_stability//stability_metrics_s{scenario_num}"
  49. hamming_select, jaccard_select = caluculate_stability_metrics(individual_all_df, output_path_prefix, scenario_num=scenario_num)
  50. random_path_prefix = f"ELAGAopt_result//Analysis_result//selected_ROI_stability//stability_metrics_random_s{scenario_num}"
  51. hamming_random, jaccard_random = caluculate_stability_metrics(random_roi_df, random_path_prefix, scenario_num=scenario_num)
  52. # --- 安定性指標のボックスプロット作成 / Create boxplots for stability metrics ---
  53. boxplot_comparison(hamming_select, hamming_random,"Hamming Distance", scenario_num=scenario_num)
  54. boxplot_comparison(jaccard_select, jaccard_random,"Jaccard Index", scenario_num=scenario_num)
  55. boxplot_comparison_summary(hamming_select, hamming_random,jaccard_select, jaccard_random, scenario_num=scenario_num)
  56. # --- 安定性指標の計算関数 / Function to calculate stability metrics ---
  57. def caluculate_stability_metrics(individual_all_df, output_path_prefix,scenario_num=1):
  58. """
  59. Calculate and save stability metrics (Hamming distance and Jaccard index) for selected ROIs across individuals.
  60. """
  61. n_individuals = individual_all_df.shape[0] # 個体数を取得 / Get number of individuals
  62. hamming_distances = np.zeros((n_individuals, n_individuals)) # Hamming距離の行列を初期化 / Initialize matrix for Hamming distances
  63. jaccard_indices = np.zeros((n_individuals, n_individuals)) # Jaccard指数の行列を初期化 / Initialize matrix for Jaccard indices
  64. # --- 個体間のHamming距離とJaccard指数を計算 / Calculate Hamming distance and Jaccard index between individuals ---
  65. for i in range(n_individuals):
  66. for j in range(n_individuals):
  67. if i != j:
  68. hamming_distances[i, j] = np.sum(individual_all_df.iloc[i] != individual_all_df.iloc[j]) # Hamming距離の計算 / Calculate Hamming distance
  69. intersection = np.sum((individual_all_df.iloc[i] == 1) & (individual_all_df.iloc[j] == 1)) # Jaccard指数の分子(共通の選択されたROIの数) / Numerator for Jaccard index (number of commonly selected ROIs)
  70. union = np.sum((individual_all_df.iloc[i] == 1) | (individual_all_df.iloc[j] == 1)) # Jaccard指数の分母(少なくとも一方で選択されたROIの数) / Denominator for Jaccard index (number of ROIs selected in at least one individual)
  71. jaccard_indices[i, j] = intersection / union if union != 0 else 0 # Jaccard指数の計算 / Calculate Jaccard index (handle division by zero)
  72. #print(f"Computed metrics for individuals {i+1} and {j+1}")
  73. #print(f"Hamming distance: {hamming_distances[i, j]}, Jaccard index: {jaccard_indices[i, j]}")
  74. #print(f"intersection: {intersection}, union: {union}")
  75. #print(f"Selected ROIs for individual {i}: {np.where(individual_all_df.iloc[i] == 1)[0]}")
  76. #print(f"Selected ROIs for individual {j}: {np.where(individual_all_df.iloc[j] == 1)[0]}")
  77. # --- 結果をDataFrame化して保存 / Convert results to DataFrame and save ---
  78. hamming_df = pd.DataFrame(hamming_distances)
  79. jaccard_df = pd.DataFrame(jaccard_indices)
  80. hamming_df.to_csv(f"{output_path_prefix}_hamming_distances.csv", index=False)
  81. jaccard_df.to_csv(f"{output_path_prefix}_jaccard_indices.csv", index=False)
  82. print("Stability metrics saved.")
  83. print(f"mean Hamming distance: {hamming_df.values.mean()}")
  84. print(f"mean Jaccard index: {jaccard_df.values.mean()}")
  85. return hamming_df, jaccard_df
  86. # --- ボックスプロット作成関数 / Function to create boxplots for stability metrics ---
  87. def boxplot_comparison_summary(select_ham_df, random_ham_df,select_jac_df,random_jac_df, scenario_num=1):
  88. # --- 上三角行列を取得 / Extract upper triangle of the matrices ---
  89. select_upper_ham = select_ham_df.where(np.triu(np.ones(select_ham_df.shape), k=1).astype(bool)).stack().reset_index(drop=True) # 上三角行列を抽出して1次元化 / Extract upper triangle and flatten to 1D
  90. random_upper_ham = random_ham_df.where(np.triu(np.ones(random_ham_df.shape), k=1).astype(bool)).stack().reset_index(drop=True) # 上三角行列を抽出して1次元化 / Extract upper triangle and flatten to 1D
  91. select_upper_jac = select_jac_df.where(np.triu(np.ones(select_jac_df.shape), k=1).astype(bool)).stack().reset_index(drop=True) # 上三角行列を抽出して1次元化 / Extract upper triangle and flatten to 1D
  92. random_upper_jac = random_jac_df.where(np.triu(np.ones(random_jac_df.shape), k=1).astype(bool)).stack().reset_index(drop=True) # 上三角行列を抽出して1次元化 / Extract upper triangle and flatten to 1D
  93. print(f"Selected ROIs Hamming upper triangle data length: {len(select_upper_ham)}")
  94. print(f"Random ROIs Hamming upper triangle data length: {len(random_upper_ham)}")
  95. print(f"Selected ROIs Jaccard upper triangle data length: {len(select_upper_jac)}")
  96. print(f"Random ROIs Jaccard upper triangle data length: {len(random_upper_jac)}")
  97. # --- ボックスプロットの作成 / Create boxplots ---
  98. order = ["Random", "ELA/GAopt"] # グループの順序を指定 / Specify order of groups
  99. data_ham = pd.DataFrame({"Metric": "Hamming Distance",
  100. "Group": np.repeat(order, [len(random_upper_ham), len(select_upper_ham)]),
  101. "Value": pd.concat([random_upper_ham, select_upper_ham], ignore_index=True)
  102. })
  103. data_jac = pd.DataFrame({"Metric": "Jaccard Index",
  104. "Group": np.repeat(order, [len(random_upper_jac), len(select_upper_jac)]),
  105. "Value": pd.concat([random_upper_jac, select_upper_jac], ignore_index=True)
  106. })
  107. fig,ax = plt.subplots(1,2, figsize=(12, 6)) # ボックスプロットの作成 / Create boxplots
  108. # --- Hamming距離のプロット / Hamming distance plot ---
  109. sns.violinplot(
  110. x='Group',
  111. y='Value',
  112. data=data_ham,
  113. ax=ax[0],
  114. palette=['#8cc5e3', '#1a80bb'],
  115. inner=None, # バイオリン内部のデフォルト描画を消す
  116. linewidth=1.5,
  117. order=order
  118. )
  119. sns.boxplot(
  120. x='Group',
  121. y='Value',
  122. data=data_ham,
  123. ax=ax[0],
  124. width=0.15, # 箱の幅を狭くする
  125. color='white',
  126. boxprops=dict(edgecolor="#000000", facecolor='white', linewidth=1.5, zorder=2),
  127. medianprops=dict(color='#000000', linewidth=2, zorder=2), # 中央値の横線
  128. whiskerprops=dict(color='#000000', linewidth=1.5, zorder=2), # ヒゲの縦線
  129. capprops=dict(color='#000000', linewidth=1.5, zorder=2), # 最大最小の横線
  130. flierprops=dict(marker='o', markerfacecolor='#000000', markeredgecolor='none', markersize=5, zorder=2), # 外れ値のドット
  131. showcaps=True, # ヒゲの先端の横線を表示
  132. showfliers=False,
  133. order=order
  134. )
  135. """sns.swarmplot(
  136. x='Group',
  137. y='Value',
  138. data=data_ham,
  139. ax=ax[0],
  140. palette=['#0072B2', '#003366'],
  141. alpha=0.8,
  142. order=order
  143. )"""
  144. ax[0].tick_params(direction='in',length=6) # ティックを内側に向ける / Set ticks to point inward
  145. ax[0].tick_params(axis='x', width=0.5,length=3) # x軸のティックを細く短くする / Make x-axis ticks thinner and shorter
  146. ax[0].set_ylabel("Hamming Distance", fontsize=15) # y軸ラベルを設定 / Set y-axis label
  147. ax[0].set_xlabel("") # x軸ラベルを空にする / Set x-axis label to empty
  148. # ax[0].set_title("Hamming Distance", fontsize=18)
  149. # Jaccard Index plot
  150. # --- Jaccard指数のプロット / Jaccard index plot ---
  151. sns.violinplot(
  152. x='Group',
  153. y='Value',
  154. data=data_jac,
  155. ax=ax[1],
  156. palette=['#8cc5e3', '#1a80bb'],
  157. inner=None,
  158. linewidth=1.5,
  159. order=order
  160. )
  161. sns.boxplot(
  162. x='Group',
  163. y='Value',
  164. data=data_jac,
  165. ax=ax[1],
  166. width=0.15,
  167. color='white',
  168. boxprops=dict(edgecolor='#000000', facecolor='white', linewidth=1.5, zorder=2),
  169. medianprops=dict(color='#000000', linewidth=2, zorder=2), # 中央値の横線
  170. whiskerprops=dict(color='#000000', linewidth=1.5, zorder=2), # ヒゲの縦線
  171. capprops=dict(color='#000000', linewidth=1.5, zorder=2), # 最大最小の横線
  172. flierprops=dict(marker='o', markerfacecolor='#000000', markeredgecolor='none', markersize=5, zorder=2), # 外れ値のドット
  173. showcaps=True, # ヒゲの先端の横線を表示
  174. showfliers=False,
  175. order=order
  176. )
  177. """sns.swarmplot(
  178. x='Group',
  179. y='Value',
  180. data=data_jac,
  181. ax=ax[1],
  182. palette=['#0072B2', '#003366'],
  183. alpha=0.8,
  184. order=order
  185. )"""
  186. ax[1].tick_params(direction='in',length=6) # ティックを内側に向ける / Set ticks to point inward
  187. ax[1].tick_params(axis='x', width=0.5,length=3) # x軸のティックを細く短くする / Make x-axis ticks thinner and shorter
  188. ax[1].set_ylabel("Jaccard Index", fontsize=15) # y軸ラベルを設定 / Set y-axis label
  189. ax[1].set_xlabel("") # x軸ラベルを空にする / Set x-axis label to empty
  190. # ax[1].set_title("Jaccard Index", fontsize=18)
  191. # --- 有意差を示す線と*を追加 / Add significance bars ---
  192. annotator = Annotator(
  193. ax[0],
  194. [("Random", "ELA/GAopt")],
  195. data=data_ham,
  196. x="Group",
  197. y="Value",
  198. verbose=False
  199. )
  200. # --- Mann-Whitney U検定を適用して有意差を表示 / Apply Mann-Whitney U test and display significance ---
  201. annotator.configure(
  202. test="Mann-Whitney",
  203. text_format="star",
  204. loc="inside",
  205. comparisons_correction="fdr_bh",
  206. pvalue_thresholds=[[1e-4, "****"], [1e-3, "***"], [1e-2, "**"], [0.05, "*"], [1, "ns"]]
  207. )
  208. annotator.apply_test() # テストを適用 / Apply the test
  209. ax[0], test_results_ham = annotator.annotate() # 結果をプロットに反映 / Annotate the plot with results
  210. print("Hamming Distance comparison results:")
  211. # --- p値の計算と表示 / Print the results of the comparison ---
  212. for res in test_results_ham:
  213. print(res.data)
  214. # --- Jaccard指数の有意差表示 / Significance display for Jaccard index ---
  215. annotator_jac = Annotator(
  216. ax[1],
  217. [("Random", "ELA/GAopt")],
  218. data=data_jac,
  219. x="Group",
  220. y="Value",
  221. verbose=False
  222. )
  223. # --- Mann-Whitney U検定を適用して有意差を表示 / Apply Mann-Whitney U test and display significance ---
  224. annotator_jac.configure(
  225. test="Mann-Whitney",
  226. text_format="star",
  227. loc="inside",
  228. comparisons_correction="fdr_bh",
  229. pvalue_thresholds=[[1e-4, "****"], [1e-3, "***"], [1e-2, "**"], [0.05, "*"], [1, "ns"]]
  230. )
  231. annotator_jac.apply_test() # テストを適用 / Apply the test
  232. ax[1], test_results_jac = annotator_jac.annotate() # 結果をプロットに反映 / Annotate the plot with results
  233. print("Jaccard Index comparison results:")
  234. # --- p値の計算と表示 / Print the results of the comparison ---
  235. for res in test_results_jac:
  236. print(res.data)
  237. # --- x軸のラベルを大きくして、ELA/GAoptだけ太字にする / Enlarge x-axis labels and make ELA/GAopt bold ---
  238. for a in ax:
  239. labels = a.get_xticklabels() # x軸のティックラベルを取得 / Get x-axis tick labels
  240. for label in labels:
  241. label.set_fontsize(18) # 全てのラベルのフォントサイズを大きくする / Enlarge font size for all labels
  242. if label.get_text() == "ELA/GAopt": # ELA/GAoptのラベルを太字にする / Make ELA/GAopt label bold
  243. label.set_weight('bold') # 太字に設定 / Set to bold
  244. # y軸のティックラベルも大きくしたい場合は以下を追加
  245. a.tick_params(axis='y', labelsize=16)
  246. plt.tight_layout()
  247. plt.savefig(f"ELAGAopt_result//Analysis_result//selected_ROI_stability//boxplot_stability_metrics_summary_s{scenario_num}.png", dpi=300)
  248. plt.savefig(f"ELAGAopt_result//Analysis_result//selected_ROI_stability//boxplot_stability_metrics_summary_s{scenario_num}.svg", dpi=300)
  249. plt.show()
  250. def boxplot_comparison(select_df, random_df,prefix, scenario_num=1):
  251. # 上三角行列を取得
  252. select_upper = select_df.where(np.triu(np.ones(select_df.shape), k=1).astype(bool)).stack().reset_index(drop=True)
  253. random_upper = random_df.where(np.triu(np.ones(random_df.shape), k=1).astype(bool)).stack().reset_index(drop=True)
  254. print(f"Selected ROIs upper triangle data length: {len(select_upper)}")
  255. print(f"Selected ROIs upper triangle data preview: {select_upper[:10]} ...")
  256. print(f"Random ROIs upper triangle data length: {len(random_upper)}")
  257. print(f"Random ROIs upper triangle data preview: {random_upper[:10]} ...")
  258. # ボックスプロットの作成
  259. order = ["Random ROI", "ELA/GAopt-selected ROI"]
  260. data = pd.DataFrame({"Group": np.repeat(order, [len(random_upper), len(select_upper)]),
  261. "Value": pd.concat([random_upper, select_upper], ignore_index=True)
  262. })
  263. print(f"Boxplot data preview:\n{pd.DataFrame(data)}")
  264. fig, ax = plt.subplots(figsize=(8, 6))
  265. sns.boxplot(
  266. x='Group',
  267. y='Value',
  268. data=data,
  269. ax=ax,
  270. palette=['#8cc5e3', '#1a80bb'],
  271. boxprops=dict(edgecolor='none'),
  272. medianprops=dict(color='white', linewidth=2),
  273. showfliers=False,
  274. order=order
  275. )
  276. """sns.swarmplot(
  277. x='Group',
  278. y='Value',
  279. data=data,
  280. ax=ax,
  281. palette=['#0072B2', '#003366'],
  282. alpha=0.8,
  283. order=order
  284. )"""
  285. annotator = Annotator(
  286. ax,
  287. [("Random ROI", "ELA/GAopt-selected ROI")],
  288. data=data,
  289. x="Group",
  290. y="Value",
  291. verbose=False
  292. )
  293. annotator.configure(
  294. test="Mann-Whitney",
  295. text_format="star",
  296. loc="inside",
  297. comparisons_correction="fdr_bh",
  298. pvalue_thresholds=[[1e-4, "****"], [1e-3, "***"], [1e-2, "**"], [0.05, "*"], [1, "ns"]]
  299. )
  300. annotator.apply_test()
  301. ax, test_results = annotator.annotate()
  302. print(prefix + " comparison results:")
  303. # p値の計算と表示
  304. for res in test_results:
  305. print(res.data)
  306. # 効果量の計算(Cohen's d)
  307. mean_select = select_upper.mean()
  308. mean_random = random_upper.mean()
  309. std_select = select_upper.std()
  310. std_random = random_upper.std()
  311. pooled_std = np.sqrt(((len(select_upper) - 1) * std_select ** 2 + (len(random_upper) - 1) * std_random ** 2) / (len(select_upper) + len(random_upper) - 2))
  312. cohens_d = (mean_select - mean_random) / pooled_std if pooled_std > 0 else 0
  313. print(f"Cohen's d for {prefix} comparison: {cohens_d}")
  314. plt.ylabel(f"{prefix}", fontsize=15)
  315. plt.tight_layout()
  316. plt.savefig(f"ELAGAopt_result//Analysis_result//selected_ROI_stability//boxplot_{prefix.replace(' ','_')}_s{scenario_num}.png", dpi=300)
  317. plt.show()
  318. if __name__ == "__main__":
  319. main()

08_selected_roi_stability.py at commit 4438e2b, under Apache-2.0 · at the source

Overview

Authors: Koichiro Mori1, Tomoyuki Hiroyasu2, Satoru Hiwa2
ORCID iDs: Satoru Hiwa
  1. Graduate School of Life and Medical Sciences, Doshisha University, Kyoto 610-0394, Japan
  2. Department of Biomedical Sciences and Informatics, Doshisha University, Kyoto 610-0394, Japan
Institutions: Doshisha University (Japan)
Journal: Patterns (New York, N.Y.), volume 7, issue 7, article 101560
Dates: received 25 August 2025; accepted 10 April 2026; published online 11 May 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1016/j.patter.2026.101560 · PMID 42453693 · PMCID PMC13366526 · OpenAlex W7160841670
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: fMRI (modality), autism (population), methods / tools (subfield)
Methods: Spectral & time-frequency, Statistics, Preprocessing, fMRI & imaging
Keywords: functional MRI, autism spectrum disorder, brain dynamics, energy landscape analysis, genetic algorithm
Topic: Functional Brain Connectivity Studies (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: NIMH NIH HHS (R21 MH107045)
Citations: not cited yet (Europe PMC); 60 references in the paper

Abstract

Understanding brain dynamics is essential in cognitive neuroscience. Energy landscape analysis (ELA), which characterizes brain activity using a pairwise maximum entropy model, is a powerful tool for analyzing these dynamics but has traditionally relied on the subjective, manual selection of small regions of interest (ROIs) to satisfy mathematical constraints. We developed ELA/GAopt, a framework that uses genetic algorithms to automate ROI selection from whole-brain atlases in a data-driven manner. ELA/GAopt’s consistent identification of reproducible ROI subsets was validated across three independent datasets. In multi-site clinical data, the framework identified and replicated autism-specific dynamics characterized by global co-activation within sensory-motor and visual networks. These results demonstrate that ELA/GAopt provides a systematic, objective approach for characterizing condition-specific brain dynamics, thereby establishing a methodological foundation for future externally validated biomarker studies and the systematic exploration of brain state transitions.

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 2 matches between paragraphs and lines of code.

MIS-Lab-Doshisha/ela-gaopt

License: Apache-2.0
State: the link answers, verified on 28 September 2026
Evidence: files inventoried
Commit: 4438e2b9aa688fba3db2fe622a28d87e66fa6175, 10 March 2026
Languages: Python (21)
Size: 714 files, 21 scripts
Software Heritage: not archived
Found in: the text, “Automated ROI selection using a GA”
Holds: README, license file, environment (requirements.txt)
Not found: CITATION.cff, tests, continuous integration, documentation
Tools: pandas (17 files), Matplotlib (11 files), NumPy (11 files), seaborn (6 files), Nilearn (4 files), SciPy (4 files), statsmodels (2 files), NetworkX (1 file), PyTorch (1 file), statannotations (1 file)
Availability: 1 check, the latest on 28 September 2026: the link answers
  • 28 September 2026: the link answers
23 files

Zenodo 19212556

License: Apache-2.0
State: the link answers, verified on 28 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: “Data and code availability”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 28 September 2026: the link answers (HTTP 200)
  • 28 September 2026: the link answers (HTTP 200)

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:

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

This paper analyzes existing, publicly available data, which were provided by the HCP,30,31,32,33,34 ABIDE II,59 and OpenNeuro (dataset ID: ds002330).26,27

All original code has been deposited at Zenodo (https://zenodo.org/records/19212556)60 and is publicly available as of the date of publication.

Any additional information required to reanalyze the data reported in this paper is available from the lead contact upon request.

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, 3 authors, 5 keywords, 1 funder, 56 references.

Cite

This paper

Mori, K., Hiroyasu, T., & Hiwa, S. (2026). Automating region selection with genetic algorithms for energy landscape analyses of brain dynamics. Patterns (New York, N.Y.), 7(7), 101560. https://doi.org/10.1016/j.patter.2026.101560

BibTeX

@article{mori2026automating,
author = {Mori, Koichiro and Hiroyasu, Tomoyuki and Hiwa, Satoru},
title = {{Automating region selection with genetic algorithms for energy landscape analyses of brain dynamics}},
journal = {Patterns (New York, N.Y.)},
year = {2026},
month = may,
volume = {7},
number = {7},
pages = {101560},
publisher = {Elsevier},
issn = {2666-3899},
doi = {10.1016/j.patter.2026.101560},
url = {https://doi.org/10.1016/j.patter.2026.101560},
pmid = {42453693},
pmcid = {PMC13366526}
}

RIS

TY - JOUR
AU - Mori, Koichiro
AU - Hiroyasu, Tomoyuki
AU - Hiwa, Satoru
TI - Automating region selection with genetic algorithms for energy landscape analyses of brain dynamics
T2 - Patterns (New York, N.Y.)
J2 - Patterns (N Y)
PY - 2026
DA - 2026/05/11
VL - 7
IS - 7
SP - 101560
SN - 2666-3899
PB - Elsevier
DO - 10.1016/j.patter.2026.101560
UR - https://doi.org/10.1016/j.patter.2026.101560
LA - en
ER -

CSL-JSON

{
"id": "10.1016/j.patter.2026.101560",
"type": "article-journal",
"title": "Automating region selection with genetic algorithms for energy landscape analyses of brain dynamics",
"container-title": "Patterns (New York, N.Y.)",
"author": [
{
"family": "Mori",
"given": "Koichiro"
},
{
"family": "Hiroyasu",
"given": "Tomoyuki"
},
{
"family": "Hiwa",
"given": "Satoru"
}
],
"container-title-short": "Patterns (N Y)",
"volume": "7",
"issue": "7",
"page": "101560",
"DOI": "10.1016/j.patter.2026.101560",
"PMID": "42453693",
"PMCID": "PMC13366526",
"ISSN": "2666-3899",
"publisher": "Elsevier",
"URL": "https://doi.org/10.1016/j.patter.2026.101560",
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
11
]
]
}
}

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.1002/hbm.70469 [code]
VarCoNet: A Variability-Aware Self-Supervised Framework for Functional Connectome Extraction From Resting-State fMRI.
Journal: Human brain mapping
In common: statannotations, Nilearn, NetworkX, 6 other tools, autism, fMRI, methods / tools, 3 references
[2] doi:10.21203/rs.3.rs-9326213/v1 [code]
Multi-task fMRI outperforms resting-state fMRI for revealing task-invariant organization of the human brain
Journal: Research Square (preprint)
In common: statannotations, Nilearn, PyTorch, 5 other tools, fMRI, 4 references
[3] doi:10.64898/2026.03.09.710558 [code]
Multi-task fMRI outperforms resting-state fMRI for revealing task-invariant organization of the human brain
Journal: bioRxiv (preprint)
In common: statannotations, Nilearn, PyTorch, 5 other tools, fMRI, 4 references
[4] doi:10.64898/2026.08.18.26360725 [code]
Temporal pole blurring in hippocampal sclerosis reflects seizure-disrupted myelination
Journal: medRxiv (preprint)
In common: statannotations, Nilearn, statsmodels, 6 other tools, 2 references
[5] doi:10.1162/imag.a.1256 [code]
Gamer in the scanner: Event-related analysis of fMRI activity during retro videogame play guided by automated annotations of game content.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: statannotations, Nilearn, statsmodels, 6 other tools, fMRI, 1 reference
[6] doi:10.1002/hbm.70483 [code]
Untamed: Unconstrained Tensor Decomposition and Graph Node Embedding for Cortical Parcellation.
Journal: Human brain mapping
In common: Nilearn, statsmodels, PyTorch, 3 other tools, fMRI, methods / tools, 4 references
[7] doi:10.1016/j.isci.2026.116173 [code]
Hierarchical sparse spatiotemporal graph neural network for brain graph classification.
Journal: iScience
In common: Nilearn, NetworkX, PyTorch, 5 other tools, fMRI, 2 references
[8] doi:10.3390/brainsci16050455 [code]
Spec-RWKV: A Spectrum-Guided Multi-Scale Recurrent Modeling Framework for Multi-Center Resting-State fMRI-Assisted Diagnosis.
Journal: Brain sciences
In common: Nilearn, PyTorch, seaborn, 3 other tools, autism, fMRI, 4 references
[9] doi:10.1007/s00234-026-04103-8 [code]
Enhanced detection of subtle cortical abnormalities in focal epilepsy using 7 T MRI surface-based models and graph neural networks.
Journal: Neuroradiology
In common: statannotations, Nilearn, statsmodels, 6 other tools, 1 reference
[10] doi:10.1093/sleep/zsag030 [code]
Divergent disruption of brain networks following total and chronic sleep loss: a longitudinal fMRI study.
Journal: Sleep
In common: NetworkX, statsmodels, seaborn, 4 other tools, fMRI, 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.