Data-driven mouse motor thalamus model reveals topography and spatial weight scaling govern spindle dynamics.
The 18 matches
- [1] § Results › Sensitivity analysis ↔ offline-scripts.zip/offline-scripts/sensitivity_analysis/calb1_threshold_analysis.py, lines 96–218 · score 0.74 · error bars, Dice coefficient, VL regions, optimal, Calbindin, parcellations
- [2] § Methods › Neuronal placement ↔ thalamic-scaffold.zip/thalamic-scaffold/placement/segment_rt.py, lines 73–112 · score 0.69 · convex hull, volumetric mask, intersection, segmented, Allen, Atlas
- [3] § Results › Sensitivity analysis ↔ offline-scripts.zip/offline-scripts/sensitivity_analysis/calb1_threshold_analysis.py, lines 96–218 · score 0.62 · parcellation accuracy, Dice coefficient, Calb1, threshold, sensitivity, VL
- [4] § Methods › Network connectivity ↔ offline-scripts.zip/update_rtrt_connections.py, lines 212–262 · score 0.61 · electrical connectivity, gap junctions, chemical connections, ellipsoid, RT
- [5] § Methods › Network connectivity ↔ offline-scripts.zip/offline-scripts/sensitivity_analysis/rtrt_deg_dist_analysis.py, lines 217–261 · score 0.61 · electrical connectivity, gap junctions, chemical connections, ellipsoid, RT
- [6] § Results › Network connectivity ↔ offline-scripts.zip/offline-scripts/sensitivity_analysis/rt_r_analysis.py, lines 89–168 · score 0.59 · dorsal ventral, lateral medial, Pearson, correlations, scaffold, cells
- [7] § Results › Sensitivity analysis ↔ offline-scripts.zip/offline-scripts/sensitivity_analysis/rt_beta_dist.py, lines 95–156 · score 0.57 · degree KS, KS distances, rows, optimization, baseline, beta
- [8] § Results › Sensitivity analysis ↔ offline-scripts.zip/offline-scripts/sensitivity_analysis/rt_r_analysis.py, lines 89–168 · score 0.56 · dorsal ventral, lateral medial, correlations, Sensitivity
- [9] § Results ↔ thalamic-scaffold.zip/thalamic-scaffold/connectome/rt_synthetic_axons.py, lines 593–660 · score 0.55 · synthetic axon, algorithmically, tree, Gaussian, volumetric, geometrical
- [10] § Methods › Neuronal placement ↔ offline-scripts.zip/offline-scripts/sensitivity_analysis/calb1_threshold_analysis.py, lines 26–48 · score 0.54 · VL subdivisions, Calb1, classified, ISH, thresholding, VA
- [11] § Results › Neuronal placement ↔ thalamic-scaffold.zip/thalamic-scaffold/placement/segment_rt.py, lines 73–112 · score 0.53 · volumetric mask, VM voxels, intersected, segmentation, Allen, Atlas
- [12] § Methods › Network simulations ↔ offline-scripts.zip/update_rtrt_connections.py, lines 136–210 · score 0.52 · post synaptic, Chemical synapses, pre, distance, cell, connection
- [13] § Methods › Network simulations ↔ offline-scripts.zip/offline-scripts/sensitivity_analysis/rtrt_deg_dist_analysis.py, lines 142–215 · score 0.52 · post synaptic, Chemical synapses, pre, distance, cell, connection
- [14] § Methods › Network connectivity ↔ thalamic-scaffold.zip/thalamic-scaffold/connectome/tc_rt.py, lines 207–296 · score 0.52 · thalamocortical cell, sphere, uniform, collaterals, cylinder, radius
- [15] § Results ↔ thalamic-scaffold.zip/thalamic-scaffold/connectome/rt_tc.py, lines 365–466 · score 0.51 · RT TC, arbors, grown, algorithm, space, candidates
- [16] § Methods › Network connectivity ↔ thalamic-scaffold.zip/thalamic-scaffold/connectome/tc_rt.py, lines 207–296 · score 0.51 · 1–44, thalamocortical cell, collaterals, beta, connections
- [17] § Methods › Network connectivity ↔ thalamic-scaffold.zip/thalamic-scaffold/connectome/rt_tc.py, lines 365–466 · score 0.51 · contact, iteratively, grown, algorithm, Gaussian, filled
- [18] § Results › Sensitivity analysis ↔ thalamic-scaffold.zip/thalamic-scaffold/connectome/tc_rt.py, lines 18–31 · score 0.50 · cylinder height, thalamo reticular, collateral
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 · 432 lines · 13 KB · CC-BY-4.0 · 3 matches
- import nrrd
- import numpy as np
- import pickle
- import matplotlib.pyplot as plt
- import pandas as pd
- import seaborn as sns
- sns.set_theme(style="white")
- # Allen 25um dimensions
- # [528, 320, 456]
- M = 456
- N = 320
- # VAL volume starts from 240th voxel in x-direction in CCFv3.0
- MIN_X = 240
- with open("data/atlas/val_25_voxels.pickle", "rb") as file:
- VAL_VOXELS = pickle.load(file)
- FLIPPING = True
- VA_color = "#BFE052"
- VL_color = "#489339"
- def classify_voxels(ish_data, voxel_set=VAL_VOXELS, threshold=0.3):
- """
- Fuzzy classification of VAL subnuclei based on genetic information
- """
- # Define Calb1 with highest density voxels as secondary-type voxels
- is_secondary = ish_data > threshold * np.max(ish_data)
- secondary_voxels = np.transpose(np.where(is_secondary))
- # Remove the voxels that have been labelled as secondary
- secondary_voxel_set = set(map(tuple, secondary_voxels))
- # Classify remaining ones as primary
- primary_voxels = np.array(list(voxel_set - secondary_voxel_set))
- if FLIPPING:
- # Use the right hemisphere outcomes for the thalamic-scaffold (modelled as the left hemisphere).
- # The hemispheres appear to have different (asymmetrical) expressions, which is indeed weird.
- # Nonetheless, the right hemisphere is more coherent with the prediction and the expected VA-VL subdivison
- primary_voxels[:, 2] = 228 + (228 - primary_voxels[:, 2])
- secondary_voxels[:, 2] = 228 + (228 - secondary_voxels[:, 2])
- return (
- primary_voxels[primary_voxels[:, 2] < 228],
- secondary_voxels[secondary_voxels[:, 2] < 228],
- )
- def extract_2D_matrices(voxels, ap_indices, resolution=25, validation_map=None):
- """
- Converts a list of indices of a 3D array to a list of 2D boolean matrices
- """
- matrices = []
- index_type = 1
- if resolution == 10:
- index_type = 0
- for ap_id in ap_indices:
- if resolution == 10 and validation_map is not None:
- slice_id = validation_map[ap_id[index_type]]
- slice = voxels[voxels[:, 0] == slice_id][:, [1, 2]]
- slice = (slice * (10 / 25)).astype(int)
- else:
- slice = voxels[voxels[:, 0] == ap_id[index_type]][:, [1, 2]]
- matrix = np.zeros((N, M), dtype=bool)
- if len(slice > 0):
- matrix[tuple(zip(*slice))] = True
- matrices.append(matrix)
- return matrices
- def compute_dice_index(segmented_mask, validation_mask):
- """
- This function computes the Dice coefficient, defined ad 2|A∩B|/(|A|+|B|),
- between the segmented and validation masks.
- """
- # Calculate intersection and individual areas
- intersection = np.logical_and(segmented_mask, validation_mask).sum()
- a = segmented_mask.sum()
- b = validation_mask.sum()
- # Handle edge case where both masks are empty
- if a + b == 0:
- return 0.0 # Empty masks should not contribute positively
- # Calculate Dice coefficient
- dice = (2.0 * intersection) / (a + b)
- return dice
- def plot_threshold_sensitivity_summary(dice_data):
- # Restructure data for seaborn
- plot_data = []
- for threshold, regions in dice_data.items():
- # Add VA-VM data points
- for score in regions["va-vm"]:
- plot_data.append(
- {
- "threshold": threshold,
- "dice_coefficient": score,
- "region": "VA-VM",
- }
- )
- # Add VL data points
- for score in regions["vl"]:
- plot_data.append(
- {
- "threshold": threshold,
- "dice_coefficient": score,
- "region": "VL",
- }
- )
- df = pd.DataFrame(plot_data)
- # Calculate means and stds for error bars
- thresholds = list(dice_data.keys())
- va_vm_means = [np.mean(dice_data[t]["va-vm"]) for t in thresholds]
- va_vm_stds = [np.std(dice_data[t]["va-vm"]) for t in thresholds]
- vl_means = [np.mean(dice_data[t]["vl"]) for t in thresholds]
- vl_stds = [np.std(dice_data[t]["vl"]) for t in thresholds]
- # Create the plot
- fig, ax = plt.subplots(1, 2, figsize=(12, 5))
- # VA-VM region - bands first
- sns.lineplot(
- data=df[df["region"] == "VA-VM"],
- x="threshold",
- y="dice_coefficient",
- color=VA_color,
- err_style="band",
- errorbar="sd",
- alpha=0.7,
- ax=ax[0],
- )
- # Add error bars manually
- ax[0].errorbar(
- thresholds,
- va_vm_means,
- yerr=va_vm_stds,
- marker="o",
- linewidth=1,
- markersize=5,
- capsize=2,
- capthick=1,
- color=VA_color,
- label="VA-VM",
- )
- ax[0].set_xlabel("Calbindin Threshold")
- ax[0].set_ylabel("Dice Coefficient")
- ax[0].set_title("VA-VM Region Parcellation Accuracy")
- ax[0].set_ylim(0, 1)
- # Find and plot optimal threshold for VA-VM
- optimal_idx_va = np.argmax(va_vm_means)
- optimal_threshold_va = thresholds[optimal_idx_va]
- ax[0].axvline(
- optimal_threshold_va,
- color="red",
- linestyle="--",
- alpha=0.7,
- label=f"Optimal: {optimal_threshold_va}",
- )
- # VL region - bands first
- sns.lineplot(
- data=df[df["region"] == "VL"],
- x="threshold",
- y="dice_coefficient",
- color=VL_color,
- err_style="band",
- errorbar="sd",
- alpha=0.7,
- ax=ax[1],
- )
- # Add error bars manually
- ax[1].errorbar(
- thresholds,
- vl_means,
- yerr=vl_stds,
- marker="s",
- linewidth=1,
- markersize=5,
- capsize=2,
- capthick=1,
- color=VL_color,
- label="VL",
- )
- ax[1].set_xlabel("Calbindin Threshold")
- ax[1].set_ylabel("Dice Coefficient")
- ax[1].set_title("VL Region Parcellation Accuracy")
- ax[1].set_ylim(0, 1)
- # Find and plot optimal threshold for VL
- optimal_idx_vl = np.argmax(vl_means)
- optimal_threshold_vl = thresholds[optimal_idx_vl]
- ax[1].axvline(
- optimal_threshold_vl,
- color="red",
- linestyle="--",
- alpha=0.7,
- label=f"Optimal: {optimal_threshold_vl}",
- )
- plt.tight_layout()
- sns.despine(offset=5, trim=False)
- plt.show()
- def plot_threshold_heatmap(dice_data):
- """
- Heatmap showing Dice coefficients across thresholds and slices
- """
- thresholds = list(dice_data.keys())
- n_slices = len(dice_data[thresholds[0]]["va-vm"])
- # Prepare data matrices
- va_vm_matrix = np.array([dice_data[t]["va-vm"] for t in thresholds]).T
- vl_matrix = np.array([dice_data[t]["vl"] for t in thresholds]).T
- # Create subplots
- fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6))
- # VA-VM heatmap
- im1 = ax1.imshow(
- va_vm_matrix, aspect="auto", cmap="viridis", vmin=0, vmax=1
- )
- ax1.set_xlabel("Threshold")
- ax1.set_ylabel("Slice number")
- ax1.set_xticks(range(len(thresholds)))
- ax1.set_xticklabels([f"{t:.2f}" for t in thresholds])
- ax1.tick_params("x", rotation=45)
- ax1.set_title("VA-VM Dice Coefficients")
- plt.colorbar(im1, ax=ax1, fraction=0.046, pad=0.04)
- # VL heatmap
- im2 = ax2.imshow(vl_matrix, aspect="auto", cmap="viridis", vmin=0, vmax=1)
- ax2.set_xlabel("Threshold")
- ax2.set_ylabel("Slice number")
- ax2.set_xticks(range(len(thresholds)))
- ax2.set_xticklabels([f"{t:.2f}" for t in thresholds])
- ax2.tick_params("x", rotation=45)
- ax2.set_title("VL Dice Coefficients")
- plt.colorbar(im2, ax=ax2, fraction=0.046, pad=0.04)
- plt.tight_layout()
- plt.show()
- def sensitivity_analysis(dice_data):
- thresholds = list(dice_data.keys())
- baseline_threshold = 0.3 # Your current threshold
- results = {}
- for region in ["va-vm", "vl"]:
- region_results = {}
- # Calculate statistics for each threshold
- means = []
- stds = []
- for threshold in thresholds:
- scores = dice_data[threshold][region]
- means.append(np.mean(scores))
- stds.append(np.std(scores))
- # Find optimal threshold
- optimal_idx = np.argmax(means)
- optimal_threshold = thresholds[optimal_idx]
- optimal_score = means[optimal_idx]
- # Calculate baseline performance
- baseline_idx = thresholds.index(baseline_threshold)
- baseline_score = means[baseline_idx]
- # Calculate sensitivity metrics
- score_range = max(means) - min(means)
- coefficient_of_variation = np.std(means) / np.mean(means)
- # Improvement over baseline
- improvement = ((optimal_score - baseline_score) / baseline_score) * 100
- region_results = {
- "optimal_threshold": optimal_threshold,
- "optimal_score": optimal_score,
- "baseline_score": baseline_score,
- "improvement_percent": improvement,
- "score_range": score_range,
- "coefficient_of_variation": coefficient_of_variation,
- "all_means": means,
- "all_stds": stds,
- }
- results[region] = region_results
- # Print manuscript-ready summary
- print("=== SENSITIVITY ANALYSIS SUMMARY ===")
- print(f"Baseline threshold: {baseline_threshold}")
- print()
- for region in ["va-vm", "vl"]:
- r = results[region]
- print(f"{region.upper()} Region:")
- print(f" Optimal threshold: {r['optimal_threshold']}")
- print(f" Optimal Dice: {r['optimal_score']:.3f}")
- print(f" Baseline Dice: {r['baseline_score']:.3f}")
- print(f" Improvement: {r['improvement_percent']:+.1f}%")
- print(f" Sensitivity (CV): {r['coefficient_of_variation']:.3f}")
- print(f" Score range: {r['score_range']:.3f}")
- print()
- return results
- # Sanity check with plots
- def save_2d_slice_figures(
- coronal_va_segmentation,
- coronal_va_vm_validation,
- coronal_vm,
- coronal_vl_segmentation,
- coronal_vl_validation,
- threshold,
- ):
- fig, ax = plt.subplots(nrows=2, ncols=9, figsize=(15, 6))
- for i in range(9):
- ax[0, i].matshow(
- np.logical_or(coronal_va_segmentation[i], coronal_vm[i])
- )
- ax[0, i].matshow(coronal_va_vm_validation[i], alpha=0.15, cmap="Blues")
- ax[0, i].xaxis.set_inverted(True)
- ax[0, i].axes.get_xaxis().set_ticks([])
- ax[1, i].matshow(coronal_vl_segmentation[i])
- ax[1, i].matshow(coronal_vl_validation[i], alpha=0.15, cmap="Blues")
- ax[1, i].xaxis.set_inverted(True)
- ax[1, i].axes.get_yaxis().set_ticks([])
- plt.savefig(f"offline-scripts/calb1_slices/{threshold}.png")
- plt.tight_layout()
- # plt.show()
- # Load halved VM voxels (VM is included in Carmen's data)
- vm = nrrd.read("data/atlas/halved_vm.nrrd")[0]
- vm_voxels = np.vstack(np.where(vm > 0)).T
- # Load Carmen's validation data
- dict_file = "data/validation/reg_output.pickle"
- with open(dict_file, "rb") as f:
- d = pickle.load(f)
- # Ensure the slices are in the same hemisphere
- va_vm = d["VA-VM"]
- va_vm[va_vm[:, 2] > 570, 2] = 570 + (570 - va_vm[va_vm[:, 2] > 570, 2])
- vl = d["VL"]
- vl[vl[:, 2] > 570, 2] = 570 + (570 - vl[vl[:, 2] > 570, 2])
- # Extract the anterior-posterior position of the slices
- ap_validation_ids = np.unique(va_vm[:, 0])
- # Get the overlapping indices between Carmen's data and VAL mesh
- overlapping_ids = [
- (slice_num, x_id)
- for slice_num, x_id in enumerate(
- (ap_validation_ids * (10 / 25)).astype(int)
- )
- if x_id > MIN_X
- ]
- # Drop the last ID (it does not contain valid Allen data)
- overlapping_ids = overlapping_ids[:-1]
- # Prepare the data for Dice coefficient computation
- coronal_vm = extract_2D_matrices(vm_voxels, overlapping_ids)
- coronal_va_vm_validation = extract_2D_matrices(
- va_vm, overlapping_ids, 10, ap_validation_ids
- )
- coronal_vl_validation = extract_2D_matrices(
- vl, overlapping_ids, 10, ap_validation_ids
- )
- # Load raw Calb1 data in VAL
- upsampled_calb1_data = np.load("data/ish/upsampled_calb1_val.npy")
- # Use different threshold values iteratively, collect Dice coeffs for each
- threshold_dice = {}
- for threshold in np.linspace(0, 1, 21)[1:]:
- threshold = np.around(threshold, 2)
- print(f"Using threshold: {threshold}")
- # Primary type = VL, secondary type = VA
- pv, sv = classify_voxels(upsampled_calb1_data, threshold=threshold)
- coronal_va_segmentation = extract_2D_matrices(sv, overlapping_ids)
- coronal_vl_segmentation = extract_2D_matrices(pv, overlapping_ids)
- # Collect Dice coefficient across slices
- dice_coeffs = {"va-vm": [], "vl": []}
- for i in range(len(coronal_va_segmentation)):
- # Note that VA and VM need to be merged from Allen
- va_vm_dice = compute_dice_index(
- np.logical_or(coronal_va_segmentation[i], coronal_vm[i]),
- coronal_va_vm_validation[i],
- )
- dice_coeffs["va-vm"].append(va_vm_dice)
- vl_dice = compute_dice_index(
- coronal_vl_segmentation[i], coronal_vl_validation[i]
- )
- dice_coeffs["vl"].append(vl_dice)
- threshold_dice[threshold] = dice_coeffs
- plot_threshold_sensitivity_summary(threshold_dice)
- plot_threshold_heatmap(threshold_dice)
- summary_stats = sensitivity_analysis(threshold_dice)
- # From DOI: 10.1016/S1076-6332(03)00671-8
- # Good overlap is when Dice >0.7
calb1_threshold_analysis.py, under CC-BY-4.0 · at the source
Overview
- Department of Electronics, Information and Bioengineering, Politecnico di Milano, Milan, Italy
- Department of Brain and Behavioral Sciences, University of Pavia, Pavia, Italy
- Department of Anatomy, Histology and Neuroscience, Universidad Autónoma de Madrid, Madrid, Spain
Abstract
The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.
Repositories
Its files are read in the Code ↔ Paper reader above, with 18 matches between paragraphs and lines of code.
Zenodo 15198488
Availability: 1 check, the latest on 29 September 2026: the link answers (HTTP 200)
- 29 September 2026: the link answers (HTTP 200)
35 files
- deprecated-code.zip/
deprecated-code/ , Python, 27 linesbeta_tuning.py - deprecated-code.zip/
deprecated-code/ , Python, 55 linescloning.py - deprecated-code.zip/
deprecated-code/ , Python, 138 linescount_partition_cells.py - deprecated-code.zip/
deprecated-code/ , Python, 116 linescylinder_test.py - deprecated-code.zip/
deprecated-code/ , Python, 13 linesextract_rt_pca.py - deprecated-code.zip/
deprecated-code/ , Python, 116 linesmorphology_placement/ callosum_targeting.py - deprecated-code.zip/
deprecated-code/ , Python, 27 linesmorphology_placement/ neuron_scraper.py - deprecated-code.zip/
deprecated-code/ , Python, 25 linesmorphology_placement/ plot_morphology.py - deprecated-code.zip/
deprecated-code/ , Python, 9 linesmorphology_placement/ to_data_arrays.py - deprecated-code.zip/
deprecated-code/ , Python, 136 linesrt_conn_debug.py - offline-scripts.zip/
fill_connections.py , Python, 85 lines - offline-scripts.zip/
store_scaffold_info.py , Python, 78 lines - offline-scripts.zip/
update_rtrt_connections. , Python, 262 lines, 2 matchespy - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 156 linesconnectome/ neuron_mesh_utils.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 47 linesconnectome/ plot_connectivity.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 45 linesconnectome/ plot_connectivity_remote .py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 80 linesconnectome/ rt_clouds_extraction.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 129 linesconnectome/ rt_morphometrics.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 195 linesconnectome/ rt_rt.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 660 lines, 1 matchconnectome/ rt_synthetic_axons.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 466 lines, 2 matchesconnectome/ rt_tc.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 323 linesconnectome/ scalar_field_extraction. py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 65 linesconnectome/ tc_morphometrics.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 296 lines, 3 matchesconnectome/ tc_rt.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 47 linesplacement/ fixed_placement.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 145 linesplacement/ ish_utils.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 65 linesplacement/ plot_placement.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 46 linesplacement/ plot_validation.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 61 linesplacement/ process_expression_data. py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 135 linesplacement/ process_ish_data.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 113 linesplacement/ process_placement_data.p y - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 112 lines, 2 matchesplacement/ segment_rt.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 44 linesplacement/ store_halved_volumes.py - thalamic-scaffold.zip/
thalamic-scaffold/ , Python, 116 linesplacement/ store_injection_data.py - README.md, Text, 13 lines
Zenodo 15198487
Availability: 1 check, the latest on 29 September 2026: the link answers (HTTP 200)
- 29 September 2026: the link answers (HTTP 200)
31 files
- deprecated-code.zip/
deprecated-code/ , Python, 27 linesbeta_tuning.py - deprecated-code.zip/
deprecated-code/ , Python, 55 linescloning.py - deprecated-code.zip/
deprecated-code/ , Python, 138 linescount_partition_cells.py - deprecated-code.zip/
deprecated-code/ , Python, 116 linescylinder_test.py - deprecated-code.zip/
deprecated-code/ , Python, 13 linesextract_rt_pca.py - deprecated-code.zip/
deprecated-code/ , Python, 393 linesfig_utils.py - deprecated-code.zip/
deprecated-code/ , Python, 116 linesmorphology_placement/ callosum_targeting.py - deprecated-code.zip/
deprecated-code/ , Python, 27 linesmorphology_placement/ neuron_scraper.py - deprecated-code.zip/
deprecated-code/ , Python, 22 linesmorphology_placement/ plot_morphology.py - deprecated-code.zip/
deprecated-code/ , Python, 9 linesmorphology_placement/ to_data_arrays.py - deprecated-code.zip/
deprecated-code/ , Python, 174 linesplot_mesoscale.py - deprecated-code.zip/
deprecated-code/ , Python, 136 linesrt_conn_debug.py - offline-scripts.zip/
offline-scripts/ , Python, 124 linesclosed_loop_analysis.py - offline-scripts.zip/
offline-scripts/ , Python, 85 linesfill_connections.py - offline-scripts.zip/
offline-scripts/ , Python, 432 lines, 3 matchessensitivity_analysis/ calb1_threshold_analysis .py - offline-scripts.zip/
offline-scripts/ , Python, 314 linessensitivity_analysis/ compact_beta_analysis.py - offline-scripts.zip/
offline-scripts/ , Python, 122 linessensitivity_analysis/ degree_distribution_anal ysis.py - offline-scripts.zip/
offline-scripts/ , Python, 49 linessensitivity_analysis/ plot_tcrt_spatial_scatte r.py - offline-scripts.zip/
offline-scripts/ , Python, 258 lines, 1 matchsensitivity_analysis/ rt_beta_dist.py - offline-scripts.zip/
offline-scripts/ , Python, 172 lines, 2 matchessensitivity_analysis/ rt_r_analysis.py - offline-scripts.zip/
offline-scripts/ , Python, 315 lines, 2 matchessensitivity_analysis/ rtrt_deg_dist_analysis.p y - offline-scripts.zip/
offline-scripts/ , Python, 295 linessensitivity_analysis/ rtrt_optimisation.py - offline-scripts.zip/
offline-scripts/ , Python, 464 linessensitivity_analysis/ slicer_utils.py - offline-scripts.zip/
offline-scripts/ , Python, 141 linessensitivity_analysis/ spatial_connectivtiy_ana lysis.py - offline-scripts.zip/
offline-scripts/ , Python, 470 linessensitivity_analysis/ spatial_utils.py - offline-scripts.zip/
offline-scripts/ , Python, 164 linessensitivity_analysis/ store_rt_r_dist.py - offline-scripts.zip/
offline-scripts/ , Python, 147 linessensitivity_analysis/ store_tc_cyl_dist.py - offline-scripts.zip/
offline-scripts/ , Python, 96 linessensitivity_analysis/ tc_cyl_analysis.py - offline-scripts.zip/
offline-scripts/ , Python, 77 linesstore_scaffold_info.py - offline-scripts.zip/
offline-scripts/ , Python, 243 linesupdate_rtrt_connections. py - README.md, Text, 13 lines
Code availability statement
The paper has a code availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:
- it points to the authors' code: Zenodo 15198488
Read it in the paper: doi.org/10.1038/s42003-026-10032-2.
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;
- 64 scripts, each with its path and the digest of its content;
- 18 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 statement
The paper has a data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:
- no repository, dataset or request procedure was recognized in it
Read it in the paper: doi.org/10.1038/s42003-026-10032-2.
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, 29 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 9 authors, 2 keywords, 5 MeSH terms, 61 references.
Cite
This paper
Sheiban, F. J., Antonietti, A., Beyazyüz, M. F., De Schepper, R., Alonso-Martínez, C., Rubio-Teves, M., Clascá, F., D’Angelo, E., & Pedrocchi, A. (2026). Data-driven mouse motor thalamus model reveals topography and spatial weight scaling govern spindle dynamics. Communications biology, 9(1), 836. https://
BibTeX
@article{sheiban2026data
author = {Sheiban, Francesco Jamal and Antonietti, Alberto and Beyazyüz, Muhammed Furkan and De Schepper, Robin and Alonso-Martínez, Carmen and Rubio-Teves, Mario and Clascá, Francisco and D’Angelo, Egidio and Pedrocchi, Alessandra},
title = {{Data-driven mouse motor thalamus model reveals topography and spatial weight scaling govern spindle dynamics}},
journal = {Communications biology},
year = {2026},
month = apr,
volume = {9},
number = {1},
pages = {836},
publisher = {Nature Publishing Group},
issn = {2399-3642},
doi = {10.1038/
url = {https://
pmid = {42000901},
pmcid = {PMC13275909}
}
RIS
TY - JOUR
AU - Sheiban, Francesco Jamal
AU - Antonietti, Alberto
AU - Beyazyüz, Muhammed Furkan
AU - De Schepper, Robin
AU - Alonso-Martínez, Carmen
AU - Rubio-Teves, Mario
AU - Clascá, Francisco
AU - D’Angelo, Egidio
AU - Pedrocchi, Alessandra
TI - Data-driven mouse motor thalamus model reveals topography and spatial weight scaling govern spindle dynamics
T2 - Communications biology
J2 - Commun Biol
PY - 2026
DA - 2026/
VL - 9
IS - 1
SP - 836
SN - 2399-3642
PB - Nature Publishing Group
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Data-driven mouse motor thalamus model reveals topography and spatial weight scaling govern spindle dynamics",
"container-title": "Communications biology",
"author": [
{
"family": "Sheiban",
"given": "Francesco Jamal"
},
{
"family": "Antonietti",
"given": "Alberto"
},
{
"family": "Beyazyüz",
"given": "Muhammed Furkan"
},
{
"family": "De Schepper",
"given": "Robin"
},
{
"family": "Alonso-Martínez",
"given": "Carmen"
},
{
"family": "Rubio-Teves",
"given": "Mario"
},
{
"family": "Clascá",
"given": "Francisco"
},
{
"family": "D’Angelo",
"given": "Egidio"
},
{
"family": "Pedrocchi",
"given": "Alessandra"
}
],
"container-title-short":
"volume": "9",
"issue": "1",
"page": "836",
"DOI": "10.1038/
"PMID": "42000901",
"PMCID": "PMC13275909",
"ISSN": "2399-3642",
"publisher": "Nature Publishing Group",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
4,
18
]
]
}
}
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.1371/journal.pbio.3003693 [code]
- Thalamic reticular neurons provide cell type-specific modulation of sound processing in the auditory thalamus.Journal: PLoS biologyIn common: seaborn, scikit-learn, pandas, 3 other tools, mouse, 9 references
- [2] doi:10.1523/eneuro.0029-26.2026 [code]
- Electrical Coupling within Thalamocortical Networks Cumulatively Reduces Cortical Correlation to Sensory Inputs.Journal: eNeuroIn common: 11 references
- [3] doi:10.3389/fnsys.2026.1753562
- When the gatekeeper falls: developmental vulnerability of the thalamic reticular nucleus in neonatal and pediatric hypoxic-ischemic brain injury.Journal: Frontiers in systems neuroscienceIn common: 7 references
- [4] doi:10.1038/s41593-026-02376-z [code]
- A framework for comparative analysis of human and mouse cortical neuron dendrites in corresponding brain regions.Journal: Nature neuroscienceIn common: OpenCV, seaborn, scikit-learn, 4 other tools, mouse, 3 references
- [5] doi:10.1038/s41593-026-02253-9 [code]
- Genoarchitecture and input-output organization of the mouse basal ganglia and thalamic parafascicular nucleus.Journal: Nature neuroscienceIn common: seaborn, scikit-learn, pandas, 3 other tools, mouse, 4 references
- [6] doi:10.1371/journal.pcbi.1014460 [code]
- Quantitative anatomy and biophysical modeling of ascending neuromodulatory systems in the developing rat neocortex.Journal: PLoS computational biologyIn common: pandas, Matplotlib, NumPy, 1 reference, author Alberto Antonietti
- [7] doi:10.1038/s41592-026-03194-8 [code]
- Beyond benchmarking: an expert-guided consensus approach to spatially aware clustering.Journal: Nature methodsIn common: seaborn, scikit-learn, pandas, 3 other tools, 3 references
- [8] doi:10.1038/s41593-026-02205-3 [code]
- Competitive interactions shape mammalian brain network dynamics and computation.Journal: Nature neuroscienceIn common: seaborn, scikit-learn, pandas, 3 other tools, computational modeling (no new data), mouse, 2 references
- [9] doi:10.7554/elife.111876 [code]
- Distinct sensorimotor encoding in tuft dendrites and somata associated with action, correction, and learning.Journal: eLifeIn common: seaborn, scikit-learn, pandas, 3 other tools, mouse, 2 references
- [10] doi:10.7554/elife.109717 [code]
- Retrosplenial cortex enables context-dependent goal-directed sensorimotor transformation.Journal: eLifeIn common: OpenCV, seaborn, scikit-learn, 4 other tools, mouse, 1 reference
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 2 repositories of the authors' code, each at its verified commit and with its license, 64 scripts, and 18 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:7e935c1d8456db09…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[.
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.
