OSCR

Bipixel rotation method: An algorithm for chirality analysis of biological mesh network.

Code ↔ Paper

4 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 4 matches
  1. [1] § Materials and methods › Bipixel method ↔ scripts/Step4_GUI_CA_DRbias.py, lines 1–48 · score 0.94 · Step4_GUI_CA_DRbias.py, fitted spline, global maximum, spline curve, gui bipixel, asymmetry score
  2. [2] § Results › The bipixel method and rotation algorithm ↔ scripts/Step4_GUI_CA_DRbias.py, lines 109–182 · score 0.56 · log ratio, spline interpolation, Asymmetry score, peak, smoothed, CA
  3. [3] § CRediT authorship contribution statement ↔ scripts/Step4_GUI_CA_DRbias.py, lines 1–48 · score 0.56 · Kanta Kumaki, Koichi Matsuo
  4. [4] § CRediT authorship contribution statement ↔ scripts/Step3_GUI_Bipixel_Counts.py, lines 1–43 · score 0.55 · Kanta Kumaki, Koichi Matsuo

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 · 348 lines · 13 KB · MIT · 3 matches

  1. # Step4_GUI_CA_DRbias.py
  2. # Dated: 2026-05-8 (Updated)
  3. # Author: Kanta Kumaki & Koichi Matsuo [Keio University School of Medicine & CIEM]
  4. """
  5. Chirality Analysis and Asymmetry Scoring Tool
  6. Usage:
  7. 1. CLI Mode:
  8. python Step4_GUI_CA_DRbias.py <excel_file1> [<excel_file2> ...]
  9. 2. GUI Mode:
  10. python GUI_CA_DRbias.py
  11. (Then select Excel files and plot options via dialogs)
  12. Description:
  13. This script performs automated chirality analysis on bipixel count data.
  14. Workflow:
  15. - Reads Excel files (compatible with GUI_Bipixel_Counts.py output).
  16. - For each sheet, fits a robust periodic spline to the 'angle' vs. 'count' data.
  17. - Handles circular periodicity (180-degree wrapping) for seamless boundary analysis.
  18. - Identifies the 'Center Angle' based on the global maximum of the fitted curve.
  19. - Calculates key metrics:
  20. 1. Center Angle (deg)
  21. 2. Log10(S1/S2) Ratio
  22. 3. Asymmetry Score (Mean absolute difference normalized by amplitude)
  23. - Generates publication-quality plots containing:
  24. - Raw samples and fitted spline curve.
  25. - Center angle (dashed vertical line).
  26. - S1 (Left) and S2 (Right) integrated areas filled from y=0.
  27. - Outputs a "Summary_Analysis" sheet as the first sheet in the original Excel file.
  28. Requirements:
  29. - numpy (2.0+ compatible), pandas, matplotlib, scipy, openpyxl
  30. """
  31. import os
  32. import sys
  33. import argparse
  34. import numpy as np
  35. import pandas as pd
  36. import matplotlib.pyplot as plt
  37. import tkinter as tk
  38. from tkinter import filedialog, messagebox
  39. from pathlib import Path
  40. from dataclasses import dataclass
  41. from typing import Dict, List, Optional
  42. from scipy.interpolate import UnivariateSpline
  43. from scipy.integrate import trapezoid # Required for NumPy 2.0+ compatibility
  44. # --- 1. Physics & Mathematical Helpers ---
  45. def wrap180(a: np.ndarray | float) -> np.ndarray:
  46. """Wrap angle(s) to [-90, +90) on a 180° circle."""
  47. return ((np.asarray(a) + 90.0) % 180.0) - 90.0
  48. def build_interpolant_tiled(x_deg: np.ndarray, y: np.ndarray, smoothing: float = None):
  49. """
  50. Fits a UnivariateSpline with ±180° tiling for periodic boundary stability.
  51. Strictly uses s=0 (interpolating through all points) by default to maintain
  52. biological fidelity. If the fit fails or results in non-finite values,
  53. it returns None to indicate the data quality is insufficient for analysis.
  54. """
  55. x = np.asarray(x_deg, float)
  56. y = np.asarray(y, float)
  57. # Pre-process: Remove NaN values
  58. mask = ~np.isnan(y)
  59. x, y = x[mask], y[mask]
  60. # Ensure at least enough points exist for a cubic spline (k=3)
  61. if len(x) < 4:
  62. return None
  63. # Pre-process: Ensure circular periodicity by ±180° tiling
  64. x_ext = np.concatenate([x - 180.0, x, x + 180.0])
  65. y_ext = np.concatenate([y, y, y])
  66. try:
  67. # Use user-defined smoothing if provided; otherwise, force s=0
  68. s_val = smoothing if smoothing is not None else 0
  69. # Fit the spline (Cubic, k=3)
  70. spl = UnivariateSpline(x_ext, y_ext, s=s_val, k=3)
  71. # Validate that the resulting spline is numerically stable at original points
  72. if not np.all(np.isfinite(spl(x))):
  73. return None # Return None if fit is unstable
  74. except Exception:
  75. # Return None for any convergence or mathematical errors
  76. return None
  77. # Return a functional wrapper for the spline interpolant
  78. return lambda ang: spl(np.asarray(ang, float))
  79. @dataclass
  80. class AnalysisResult:
  81. """Container for chirality metrics and visualization data."""
  82. status: str
  83. center_angle: Optional[float] # 失敗時は None
  84. asymmetry_score: Optional[float]
  85. S1: Optional[float]
  86. S2: Optional[float]
  87. log_S1_over_S2: Optional[float]
  88. details: Dict
  89. # --- 2. Core Analysis Engine ---
  90. def run_analysis(x_deg: np.ndarray, y: np.ndarray, smoothing: float = None) -> AnalysisResult:
  91. """
  92. Core Analysis Engine: Computes the center angle and integrates S1/S2 areas.
  93. This function reconciles the experimental data with a spline interpolant.
  94. If the interpolation fails due to poor data quality (returning None),
  95. the function returns a 'Failed' AnalysisResult with null (None) metrics.
  96. """
  97. f = build_interpolant_tiled(x_deg, y, smoothing=smoothing)
  98. # Handle cases where spline fitting is impossible (e.g., s=0 convergence failure)
  99. if f is None:
  100. return AnalysisResult(
  101. status="Failed",
  102. center_angle=None,
  103. asymmetry_score=None,
  104. S1=None, S2=None,
  105. log_S1_over_S2=None,
  106. details={}
  107. )
  108. # Generate a dense grid for numerical integration and peak detection
  109. xd = np.linspace(-90.0, 90.0, 3600)
  110. yd = f(xd)
  111. if np.all(np.isnan(yd)):
  112. raise ValueError("Interpolation resulted in All-NaN slice.")
  113. amp = np.nanmax(yd) or 1.0
  114. # Locate peak-based center (Global Maximum) as the primary Center Angle candidate
  115. gmax_idx = np.nanargmax(yd)
  116. max_ang = float(xd[gmax_idx])
  117. # Internal helper to calculate Asymmetry Score based on a given center angle
  118. def calc_asymmetry(ca: float) -> float:
  119. offs = np.linspace(0.0, 90.0, 900)
  120. y_plus = f(wrap180(ca + offs))
  121. y_minus = f(wrap180(ca - offs))
  122. return float(np.mean(np.abs(y_plus - y_minus)) / amp)
  123. best_ca = max_ang
  124. best_score = calc_asymmetry(best_ca)
  125. # Calculate S1 (Left) and S2 (Right) integrals split by the identified center angle
  126. t_span = np.linspace(-90.0, 90.0, 3600)
  127. y_centered = f(wrap180(best_ca + t_span))
  128. left_mask = t_span <= 0
  129. right_mask = t_span >= 0
  130. # Perform numerical integration using the trapezoidal rule
  131. S1 = float(trapezoid(y_centered[left_mask], t_span[left_mask]))
  132. S2 = float(trapezoid(y_centered[right_mask], t_span[right_mask]))
  133. log_ratio = np.log10(S1 / S2) if S1 > 0 and S2 > 0 else None
  134. # Helper function to extract periodic visualization segments
  135. def get_fill_data(t_start, t_end):
  136. ts = np.linspace(t_start, t_end, 1800)
  137. return wrap180(best_ca + ts), f(wrap180(best_ca + ts))
  138. return AnalysisResult(
  139. status="Success",
  140. center_angle=best_ca,
  141. asymmetry_score=best_score,
  142. S1=S1, S2=S2,
  143. log_S1_over_S2=log_ratio,
  144. details={
  145. "xd": xd, "yd": yd,
  146. "S1_fill": get_fill_data(-90, 0),
  147. "S2_fill": get_fill_data(0, 90)
  148. }
  149. )
  150. # --- 3. Visualization ---
  151. def save_plot(res: AnalysisResult, x_raw, y_raw, sheet_name, out_path, show_legend):
  152. """Generates area plots with specific legend order and periodic fill handling."""
  153. plt.figure(figsize=(8, 5))
  154. # 1. Samples
  155. plt.plot(x_raw, y_raw, 'o', label='Samples', color='black', markersize=5, alpha=0.6, zorder=3)
  156. # 2. Spline curve
  157. plt.plot(res.details["xd"], res.details["yd"], '-', label='Spline curve', color='black', linewidth=1.5, zorder=4)
  158. # 3. Center angle (Dashed line)
  159. plt.axvline(res.center_angle, color='black', linestyle='--', linewidth=1.2,
  160. label='Center angle' if show_legend else "", zorder=5)
  161. # Internal helper to handle plotting wrapped fill areas without horizontal artifacts
  162. def draw_periodic_fill(x, y, color, label_prefix, alpha=0.4):
  163. jumps = np.where(np.abs(np.diff(x)) > 90)[0]
  164. if len(jumps) == 0:
  165. s_idx = np.argsort(x)
  166. plt.fill_between(x[s_idx], y[s_idx], 0, color=color, alpha=alpha,
  167. label=label_prefix if show_legend else "", zorder=2)
  168. else:
  169. idx_splits = jumps + 1
  170. x_segments = np.split(x, idx_splits)
  171. y_segments = np.split(y, idx_splits)
  172. for i, (xs, ys) in enumerate(zip(x_segments, y_segments)):
  173. s_idx = np.argsort(xs)
  174. lbl = label_prefix if (show_legend and i == 0) else ""
  175. plt.fill_between(xs[s_idx], ys[s_idx], 0, color=color, alpha=alpha, label=lbl, zorder=2)
  176. # 4. S1 (Left) and S2 (Right) areas
  177. x_s1, y_s1 = res.details["S1_fill"]
  178. x_s2, y_s2 = res.details["S2_fill"]
  179. draw_periodic_fill(x_s1, y_s1, color='#4C86C6', label_prefix='S1 (Left)')
  180. draw_periodic_fill(x_s2, y_s2, color='#E15759', label_prefix='S2 (Right)')
  181. # Labels and Formatting
  182. plt.title(f"Sheet: {sheet_name}")
  183. plt.xlabel("Rotation angle")
  184. plt.ylabel("Bipixel count")
  185. tick_pos = [-90, -60, -30, 0, 30, 60, 90]
  186. plt.xticks(tick_pos, [f"{v}°" for v in tick_pos])
  187. plt.xlim(-90, 90)
  188. plt.ylim(0, None)
  189. plt.grid(True, linestyle=':', alpha=0.4, zorder=1)
  190. if show_legend:
  191. plt.legend(loc='upper right', frameon=True)
  192. plt.tight_layout()
  193. plt.savefig(out_path, dpi=300)
  194. plt.close()
  195. # --- 4. Main Controller ---
  196. def process_file(file_path: Path, show_legend: bool):
  197. """
  198. Main Controller: Iterates through worksheets and aggregates results into a summary Excel.
  199. Failed analyses are recorded as null entries in the summary table,
  200. effectively excluding 'bad data' while maintaining a record of the attempt.
  201. """
  202. xl = pd.ExcelFile(file_path)
  203. out_dir = file_path.parent / "plots"
  204. out_dir.mkdir(exist_ok=True)
  205. final_summary = []
  206. for sheet in xl.sheet_names:
  207. if "Summary" in sheet: continue # Skip existing summary sheets
  208. try:
  209. df = pd.read_excel(xl, sheet_name=sheet)
  210. df.columns = [str(c).strip() for c in df.columns]
  211. # Identify required columns using flexible keyword matching
  212. a_col = next((c for c in df.columns if 'angle' in c.lower()), None)
  213. v_col = next((c for c in df.columns if any(k in c.lower() for k in ['vertical', 'count', sheet.lower()])), None)
  214. if a_col is None or v_col is None:
  215. print(f"[WARN] Skipping {sheet}: Missing required columns.")
  216. continue
  217. # Extract target columns and remove rows with missing values
  218. df[a_col] = pd.to_numeric(df[a_col], errors='coerce').astype(float)
  219. df[v_col] = pd.to_numeric(df[v_col], errors='coerce').astype(float)
  220. valid_df = df[[a_col, v_col]].dropna().copy()
  221. if valid_df.empty:
  222. continue
  223. # Endpoint Harmonization:
  224. # If both -90° and +90° exist, average their values into -90°
  225. # and drop +90° to ensure seamless circular periodicity.
  226. idx_neg = valid_df[valid_df[a_col] == -90.0].index
  227. idx_pos = valid_df[valid_df[a_col] == 90.0].index
  228. if not idx_neg.empty and not idx_pos.empty:
  229. v_mean = (valid_df.at[idx_neg[0], v_col] + valid_df.at[idx_pos[0], v_col]) / 2.0
  230. valid_df.at[idx_neg[0], v_col] = v_mean
  231. valid_df = valid_df.drop(idx_pos)
  232. # Sort by angle and extract as numpy arrays for analysis
  233. valid_df = valid_df.sort_values(by=a_col)
  234. x, y = valid_df[a_col].values, valid_df[v_col].values
  235. # Execute analysis pipeline
  236. res = run_analysis(x, y)
  237. # Only generate visualization if the analysis was successful
  238. if res.status == "Success":
  239. save_plot(res, x, y, sheet, out_dir / f"{sheet}_plot.png", show_legend)
  240. print(f"[Done] {sheet}: Analysis successful.")
  241. else:
  242. print(f"[Skip] {sheet}: Spline fit failed (insufficient data quality).")
  243. # Append results to summary list (Metrics will be None/null if status is 'Failed')
  244. final_summary.append({
  245. "Sheet": sheet,
  246. "Status": res.status,
  247. "CenterAngle_deg": res.center_angle,
  248. "Log_S1_over_S2": res.log_S1_over_S2,
  249. "AsymmetryScore": res.asymmetry_score,
  250. "S1": res.S1,
  251. "S2": res.S2
  252. })
  253. except Exception as e:
  254. print(f"[ERROR] In sheet '{sheet}': {str(e)}")
  255. # Export aggregated summary to the original Excel file
  256. if final_summary:
  257. summary_df = pd.DataFrame(final_summary)
  258. with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
  259. # None values are automatically converted to empty cells in Excel
  260. summary_df.to_excel(writer, sheet_name="Summary_Analysis", index=False)
  261. # Reorder worksheets to place the Summary at the first position
  262. wb = writer.book
  263. wb._sheets.insert(0, wb._sheets.pop(-1))
  264. def main():
  265. """Application entry point handling arguments or GUI interaction."""
  266. parser = argparse.ArgumentParser(description="Chirality Analysis Pipeline with Hybrid GUI/CLI")
  267. parser.add_argument("--excel", nargs="*", help="List of Excel files to process")
  268. args = parser.parse_args()
  269. files = args.excel
  270. if not files:
  271. root = tk.Tk(); root.withdraw(); root.attributes('-topmost', True)
  272. files = filedialog.askopenfilenames(title="Select Excel Files", filetypes=[("Excel", "*.xlsx")])
  273. if not files: return
  274. show_legend = messagebox.askyesno("Plot Setting", "Show Legend in Plots?")
  275. else:
  276. show_legend = True
  277. for f in files:
  278. print(f"[INFO] Processing: {Path(f).name}")
  279. process_file(Path(f), show_legend)
  280. print("[DONE] Analysis completed.")
  281. if __name__ == "__main__":
  282. main()

Step4_GUI_CA_DRbias.py at commit faa0af4, under MIT · at the source

Overview

Authors: Kanta Kumaki1, Katsuhiro Kawaai1, Shinobu Noji1, Yukiko Kuroda1, Koichi Matsuo1,2
ORCID iDs: Yukiko Kuroda
  1. Laboratory of Cell and Tissue Biology, Keio University School of Medicine, 35 Shinanomachi, Shinjuku-ku, Tokyo 160-8582, Japan
  2. Central Institute for Experimental Medicine and Life Science (CIEM), 3-25-22 Tonomachi, Kawasaki 210-0821, Japan
Institutions: Keio University (Japan)
Journal: Journal of structural biology: X, volume 14, article 100154
Dates: received 11 May 2026; accepted 22 July 2026; published online 23 July 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1016/j.yjsbx.2026.100154 · PMID 42564810 · PMCID PMC13446290 · OpenAlex W7170147798
Open access: gold, a free copy (OpenAlex)
Status: code verified
Methods: Spectral & time-frequency, Statistics, Connectivity, Evoked potentials
Keywords: Chirality, Vasculature, Image analysis, Porcine, Femur, Bone
Topic: Advanced Fluorescence Microscopy Techniques (Biophysics, Biochemistry, Genetics and Molecular Biology), according to OpenAlex
Funding: Keio University
Citations: not cited yet (Europe PMC); 27 references in the paper

Abstract

Vertebrates are bilateral organisms characterized by both symmetrical and asymmetrical structures. While skeletons are grossly symmetrical, microscopic biological networks within the bone—such as cortical canals containing vascular networks—often exhibit deviations from precise mirror-image symmetry. These deviations make it challenging to detect subtle chiral biases amidst random structural variations. We developed the “bipixel rotation method” to quantify the extent of these biases, thereby enabling the characterization of porcine femoral cortical canals. In this approach, binarized 2D images are rotated stepwise and skeletonized, followed by the quantification of vertically adjacent pixel pairs. We defined “center angle” as the rotation angle that yields the peak vertical bipixel count, and calculated “down-right bias” based on the asymmetry of the distribution of vertical bipixels around this center angle. After validating the method using alphabetical fonts and geometric wallpaper patterns, we applied the method to the cortical canal layers in porcine fibrolamellar bone visualized via nano-computed tomography (nano-CT). The method successfully detected potential chirality in the cortical canals, identifying up-right versus down-right biases, demonstrating its capability to capture even subtle structural chirality. These results suggest that the bipixel method is a versatile tool for chirality analysis of diverse biological mesh structures in the body.

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

Koichimts/Bipixel_Method

License: MIT
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: faa0af4ccfd90e694470fe3404c43705b78339dc, 29 July 2026
Languages: Python (2)
Size: 55 files, 2 scripts
Software Heritage: not archived
Found in: “Data availability”
Holds: README, license file, CITATION.cff, environment (requirements.txt)
Not found: tests, continuous integration, documentation
Tools: NumPy (2 files), pandas (2 files), Matplotlib (1 file), Pillow (1 file), SciPy (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
4 files

Zenodo 21439490

License: MIT
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: “Data availability”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (2 files), pandas (2 files), Matplotlib (1 file), Pillow (1 file), SciPy (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
4 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:

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

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

Data

No dataset and no data link were found in the paper.

Data availability

Codes for performing the bipixel method are available at https://github.com/Koichimts/Bipixel_Method and are archived at Zenodo (https://doi.org/10.5281/zenodo.21439490).

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

Recorded: type, language, journal, volume, pages, dates, 5 authors, 6 keywords, 1 funder, 26 references.

Cite

This paper

Kumaki, K., Kawaai, K., Noji, S., Kuroda, Y., & Matsuo, K. (2026). Bipixel rotation method: An algorithm for chirality analysis of biological mesh network. Journal of structural biology: X, 14, 100154. https://doi.org/10.1016/j.yjsbx.2026.100154

BibTeX

@article{kumaki2026bipixel,
author = {Kumaki, Kanta and Kawaai, Katsuhiro and Noji, Shinobu and Kuroda, Yukiko and Matsuo, Koichi},
title = {{Bipixel rotation method: An algorithm for chirality analysis of biological mesh network}},
journal = {Journal of structural biology: X},
year = {2026},
month = jul,
volume = {14},
pages = {100154},
publisher = {Elsevier},
issn = {2590-1524},
doi = {10.1016/j.yjsbx.2026.100154},
url = {https://doi.org/10.1016/j.yjsbx.2026.100154},
pmid = {42564810},
pmcid = {PMC13446290}
}

RIS

TY - JOUR
AU - Kumaki, Kanta
AU - Kawaai, Katsuhiro
AU - Noji, Shinobu
AU - Kuroda, Yukiko
AU - Matsuo, Koichi
TI - Bipixel rotation method: An algorithm for chirality analysis of biological mesh network
T2 - Journal of structural biology: X
J2 - J Struct Biol X
PY - 2026
DA - 2026/07/23
VL - 14
SP - 100154
SN - 2590-1524
PB - Elsevier
DO - 10.1016/j.yjsbx.2026.100154
UR - https://doi.org/10.1016/j.yjsbx.2026.100154
LA - en
ER -

CSL-JSON

{
"id": "10.1016/j.yjsbx.2026.100154",
"type": "article-journal",
"title": "Bipixel rotation method: An algorithm for chirality analysis of biological mesh network",
"container-title": "Journal of structural biology: X",
"author": [
{
"family": "Kumaki",
"given": "Kanta"
},
{
"family": "Kawaai",
"given": "Katsuhiro"
},
{
"family": "Noji",
"given": "Shinobu"
},
{
"family": "Kuroda",
"given": "Yukiko"
},
{
"family": "Matsuo",
"given": "Koichi"
}
],
"container-title-short": "J Struct Biol X",
"volume": "14",
"page": "100154",
"DOI": "10.1016/j.yjsbx.2026.100154",
"PMID": "42564810",
"PMCID": "PMC13446290",
"ISSN": "2590-1524",
"publisher": "Elsevier",
"URL": "https://doi.org/10.1016/j.yjsbx.2026.100154",
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
23
]
]
}
}

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.1364/boe.605322 [code]
Generalized plaque digitization framework for multi-dimensional mesoscopic images.
Journal: Biomedical optics express
In common: Pillow, pandas, SciPy, 2 other tools, 1 reference
[2] doi:10.1038/s41467-026-75662-w [code]
Distinct Roles of Deep and Superficial Cortical Layers in Tone Prediction, Comparison, and Adaptation in Human Auditory Cortices.
Journal: Nature communications
In common: Pillow, pandas, SciPy, 2 other tools, 1 reference
[3] 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: Pillow, pandas, SciPy, 2 other tools, 1 reference
[4] doi:10.1038/s41598-026-51531-w [code]
Multimodal age-dependent diffusion-MRI analysis of the neocortex in a rat model of cortical dysplasia.
Journal: Scientific reports
In common: pandas, SciPy, Matplotlib, 1 other tool, 1 reference
[5] doi:10.1126/sciadv.aec4911 [code]
Dendritic shaft constrictions shape synaptic integration in neurons.
Journal: Science advances
In common: pandas, SciPy, Matplotlib, 1 other tool, 1 reference
[6] doi:10.7554/elife.110588 [code]
Opening the black box toward a modular approach to spike sorting.
Journal: eLife
In common: Pillow, pandas, SciPy, 2 other tools
[7] doi: [code]
Real-time closed-loop feedback system for mouse mesoscale cortical signal and movement control
Journal: eLife
In common: Pillow, pandas, SciPy, 2 other tools
[8] doi:10.1371/journal.pone.0356243 [code]
Functional organization and natural scene responses across mouse visual cortical areas revealed with encoding manifolds.
Journal: PloS one
In common: Pillow, pandas, SciPy, 2 other tools
[9] doi:10.1038/s42003-026-10957-8 [code]
Brain defence by the extracellular matrix protein Cochlin.
Journal: Communications biology
In common: Pillow, pandas, SciPy, 2 other tools
[10] doi:10.1038/s41592-026-03211-w [code]
Spatial isoform sequencing at single-cell resolution reveals cell-type-specific spatial isoform variability in multiple brain cell types.
Journal: Nature methods
In common: Pillow, pandas, SciPy, 2 other tools

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.