Do CXCL10-recruited CD8+ T cells provide neuroprotection or cause damage in aging white matter?¶
Notebook ID: nb-SDA-2026-04-15-gap-debate-20260410-112400-454036f1 · Analysis: SDA-2026-04-15-gap-debate-20260410-112400-454036f1 · Generated: 2026-04-21T18:43:15
Research question¶
The debate revealed contradictory evidence about CD8+ T cell roles in neurodegeneration, with some studies showing protection and others showing harm. This fundamental mechanistic uncertainty prevents rational immune-targeting therapies.
Source: Debate session sess_SDA-2026-04-03-gap-aging-mouse-brain-v2-20260402 (Analysis: SDA-2026-04-03-gap-aging-mouse-brain-v2-20260402)
Approach¶
This notebook is generated programmatically from real Forge tool calls and SciDEX debate data. Forge tools used: PubMed Search, MyGene, STRING PPI, Reactome pathways, Enrichr.
Debate Summary¶
Quality score: 0.76 · Rounds: 4
1. Target gene annotations (MyGene)¶
import pandas as pd
ann_rows = [{'gene': 'GZMB', 'name': 'granzyme B', 'summary': 'This gene encodes a member of the granzyme subfamily of proteins, part of the peptidase S1 family of serine proteases. T'}]
pd.DataFrame(ann_rows)
| gene | name | summary | |
|---|---|---|---|
| 0 | GZMB | granzyme B | This gene encodes a member of the granzyme sub... |
2. GO Biological Process enrichment (Enrichr)¶
go_bp = [{'rank': 1, 'term': 'Leukocyte Apoptotic Process (GO:0071887)', 'p_value': 0.0004999362185987752, 'odds_ratio': 4998.5, 'genes': ['HCAR2']}, {'rank': 2, 'term': 'Regulation Of Adiponectin Secretion (GO:0070163)', 'p_value': 0.000599909243874975, 'odds_ratio': 3998.6, 'genes': ['HCAR2']}, {'rank': 3, 'term': 'Positive Regulation Of Myeloid Cell Apoptotic Process (GO:0033034)', 'p_value': 0.0006998773712248138, 'odds_ratio': 3332.0, 'genes': ['HCAR2']}, {'rank': 4, 'term': 'Glucosamine-Containing Compound Catabolic Process (GO:1901072)', 'p_value': 0.0007998405838081707, 'odds_ratio': 2855.8571428571427, 'genes': ['CHI3L1']}, {'rank': 5, 'term': 'Positive Regulation Of Leukocyte Apoptotic Process (GO:2000108)', 'p_value': 0.0008997988691311835, 'odds_ratio': 2498.75, 'genes': ['HCAR2']}, {'rank': 6, 'term': 'Activation Of NF-kappaB-inducing Kinase Activity (GO:0007250)', 'p_value': 0.0014994446955652384, 'odds_ratio': 1427.4285714285713, 'genes': ['CHI3L1']}, {'rank': 7, 'term': 'Negative Regulation Of Lipid Catabolic Process (GO:0050995)', 'p_value': 0.0017992006270532422, 'odds_ratio': 1175.3529411764705, 'genes': ['HCAR2']}, {'rank': 8, 'term': 'Positive Regulation Of Hormone Secretion (GO:0046887)', 'p_value': 0.001899109329170248, 'odds_ratio': 1110.0, 'genes': ['HCAR2']}, {'rank': 9, 'term': 'Regulation Of Lipid Catabolic Process (GO:0050994)', 'p_value': 0.0022986943824153676, 'odds_ratio': 908.0, 'genes': ['HCAR2']}, {'rank': 10, 'term': 'Positive Regulation Of Peptidyl-Threonine Phosphorylation (GO:0010800)', 'p_value': 0.00239857819994348, 'odds_ratio': 868.4782608695652, 'genes': ['CHI3L1']}]
go_df = pd.DataFrame(go_bp)[['term','p_value','odds_ratio','genes']]
go_df['p_value'] = go_df['p_value'].apply(lambda p: f'{p:.2e}')
go_df['odds_ratio'] = go_df['odds_ratio'].round(1)
go_df['term'] = go_df['term'].str[:60]
go_df['n_hits'] = go_df['genes'].apply(len)
go_df['genes'] = go_df['genes'].apply(lambda g: ', '.join(g))
go_df[['term','n_hits','p_value','odds_ratio','genes']]
| term | n_hits | p_value | odds_ratio | genes | |
|---|---|---|---|---|---|
| 0 | Leukocyte Apoptotic Process (GO:0071887) | 1 | 5.00e-04 | 4998.5 | HCAR2 |
| 1 | Regulation Of Adiponectin Secretion (GO:0070163) | 1 | 6.00e-04 | 3998.6 | HCAR2 |
| 2 | Positive Regulation Of Myeloid Cell Apoptotic ... | 1 | 7.00e-04 | 3332.0 | HCAR2 |
| 3 | Glucosamine-Containing Compound Catabolic Proc... | 1 | 8.00e-04 | 2855.9 | CHI3L1 |
| 4 | Positive Regulation Of Leukocyte Apoptotic Pro... | 1 | 9.00e-04 | 2498.8 | HCAR2 |
| 5 | Activation Of NF-kappaB-inducing Kinase Activi... | 1 | 1.50e-03 | 1427.4 | CHI3L1 |
| 6 | Negative Regulation Of Lipid Catabolic Process... | 1 | 1.80e-03 | 1175.4 | HCAR2 |
| 7 | Positive Regulation Of Hormone Secretion (GO:0... | 1 | 1.90e-03 | 1110.0 | HCAR2 |
| 8 | Regulation Of Lipid Catabolic Process (GO:0050... | 1 | 2.30e-03 | 908.0 | HCAR2 |
| 9 | Positive Regulation Of Peptidyl-Threonine Phos... | 1 | 2.40e-03 | 868.5 | CHI3L1 |
import matplotlib.pyplot as plt
import numpy as np
go_bp = [{'rank': 1, 'term': 'Leukocyte Apoptotic Process (GO:0071887)', 'p_value': 0.0004999362185987752, 'odds_ratio': 4998.5, 'genes': ['HCAR2']}, {'rank': 2, 'term': 'Regulation Of Adiponectin Secretion (GO:0070163)', 'p_value': 0.000599909243874975, 'odds_ratio': 3998.6, 'genes': ['HCAR2']}, {'rank': 3, 'term': 'Positive Regulation Of Myeloid Cell Apoptotic Process (GO:0033034)', 'p_value': 0.0006998773712248138, 'odds_ratio': 3332.0, 'genes': ['HCAR2']}, {'rank': 4, 'term': 'Glucosamine-Containing Compound Catabolic Process (GO:1901072)', 'p_value': 0.0007998405838081707, 'odds_ratio': 2855.8571428571427, 'genes': ['CHI3L1']}, {'rank': 5, 'term': 'Positive Regulation Of Leukocyte Apoptotic Process (GO:2000108)', 'p_value': 0.0008997988691311835, 'odds_ratio': 2498.75, 'genes': ['HCAR2']}, {'rank': 6, 'term': 'Activation Of NF-kappaB-inducing Kinase Activity (GO:0007250)', 'p_value': 0.0014994446955652384, 'odds_ratio': 1427.4285714285713, 'genes': ['CHI3L1']}, {'rank': 7, 'term': 'Negative Regulation Of Lipid Catabolic Process (GO:0050995)', 'p_value': 0.0017992006270532422, 'odds_ratio': 1175.3529411764705, 'genes': ['HCAR2']}, {'rank': 8, 'term': 'Positive Regulation Of Hormone Secretion (GO:0046887)', 'p_value': 0.001899109329170248, 'odds_ratio': 1110.0, 'genes': ['HCAR2']}]
terms = [t['term'][:45] for t in go_bp][::-1]
neglogp = [-np.log10(max(t['p_value'], 1e-300)) for t in go_bp][::-1]
fig, ax = plt.subplots(figsize=(9, 4.5))
ax.barh(terms, neglogp, color='#4fc3f7')
ax.set_xlabel('-log10(p-value)')
ax.set_title('Top GO:BP enrichment (Enrichr)')
ax.grid(axis='x', alpha=0.3)
plt.tight_layout(); plt.show()
/home/ubuntu/.config/matplotlib is not a writable directory
Matplotlib created a temporary cache directory at /tmp/matplotlib-59d2v4pw because there was an issue with the default path (/home/ubuntu/.config/matplotlib); it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing.
3. STRING protein interaction network¶
print('No STRING PPI data available')
No STRING PPI data available
4. Reactome pathway footprint¶
pw_rows = [{'gene': 'GZMB', 'n_pathways': 4, 'top_pathway': 'NOTCH2 intracellular domain regulates transcription'}]
pd.DataFrame(pw_rows).sort_values('n_pathways', ascending=False)
| gene | n_pathways | top_pathway | |
|---|---|---|---|
| 0 | GZMB | 4 | NOTCH2 intracellular domain regulates transcri... |
5. Hypothesis ranking (1 hypotheses)¶
hyp_data = [('Granzyme B Inhibition with Serpina3n to Preserve Axonal', 0.698)]
titles = [h[0] for h in hyp_data][::-1]
scores = [h[1] for h in hyp_data][::-1]
fig, ax = plt.subplots(figsize=(10, max(8, len(titles)*0.4)))
colors = ['#ef5350' if s >= 0.6 else '#ffa726' if s >= 0.5 else '#66bb6a' for s in scores]
ax.barh(range(len(titles)), scores, color=colors)
ax.set_yticks(range(len(titles))); ax.set_yticklabels(titles, fontsize=7)
ax.set_xlabel('Composite Score'); ax.set_title('Do CXCL10-recruited CD8+ T cells provide neuroprotection or cause damage in aging white matter?')
ax.grid(axis='x', alpha=0.3)
plt.tight_layout(); plt.show()
labels = ['Granzyme B Inhibition with Serpina3n to ']
matrix = np.array([[0.65, 0.38, 0.68, 0.72, 0.0, 0.52, 0.58, 0.42, 0.48]])
dims = ['novelty_score', 'feasibility_score', 'impact_score', 'mechanistic_plausibility_score', 'clinical_relevance_score', 'data_availability_score', 'reproducibility_score', 'druggability_score', 'safety_profile_score']
if matrix.size:
fig, ax = plt.subplots(figsize=(10, 5))
im = ax.imshow(matrix, cmap='RdYlGn', aspect='auto', vmin=0, vmax=1)
ax.set_xticks(range(len(dims)))
ax.set_xticklabels([d.replace('_score','').replace('_',' ').title() for d in dims],
rotation=45, ha='right', fontsize=8)
ax.set_yticks(range(len(labels))); ax.set_yticklabels(labels, fontsize=7)
ax.set_title('Score dimensions — hypotheses')
plt.colorbar(im, ax=ax, shrink=0.8)
plt.tight_layout(); plt.show()
else:
print('No score data available')
6. PubMed literature per hypothesis¶
Hypothesis 1: Granzyme B Inhibition with Serpina3n to Preserve Axonal Integrity Agai¶
Target genes: GZMB · Composite score: 0.698
Granzyme B Inhibition with Serpina3n to Preserve Axonal Integrity Against Cytotoxic Attack¶
Hypothesis Expansion¶
The progressive degeneration of myelinated axons within aging white matter represents a critical yet underappreciated driver of neurological decline, contributing to cognitive impai
lit_data = [{'year': '2023', 'journal': 'Immunity', 'title': 'Single-cell atlas of healthy human blood unveils age-related loss of NKG2C(+)GZM', 'pmid': '37963457'}, {'year': '2022', 'journal': 'Sci Rep', 'title': 'C1QA, C1QB, and GZMB are novel prognostic biomarkers of skin cutaneous melanoma ', 'pmid': '36443341'}, {'year': '2025', 'journal': 'J Immunother Cancer', 'title': 'Targeting PD-1 and CD85j can restore intratumoral CD4(+) GzmB(+) T-cell function', 'pmid': '40169283'}, {'year': '2021', 'journal': 'Nat Commun', 'title': 'Cytotoxic CD8(+) T cells promote granzyme B-dependent adverse post-ischemic card', 'pmid': '33674611'}, {'year': '2023', 'journal': 'Ann Surg Oncol', 'title': 'Granzyme B (GZMB)-Positive Tumor-Infiltrating Lymphocytes in Lung Adenocarcinoma', 'pmid': '37587364'}]
if lit_data:
df = pd.DataFrame(lit_data)
print(f'{len(lit_data)} PubMed results')
display(df)
else:
print('No PubMed results')
5 PubMed results
| year | journal | title | pmid | |
|---|---|---|---|---|
| 0 | 2023 | Immunity | Single-cell atlas of healthy human blood unvei... | 37963457 |
| 1 | 2022 | Sci Rep | C1QA, C1QB, and GZMB are novel prognostic biom... | 36443341 |
| 2 | 2025 | J Immunother Cancer | Targeting PD-1 and CD85j can restore intratumo... | 40169283 |
| 3 | 2021 | Nat Commun | Cytotoxic CD8(+) T cells promote granzyme B-de... | 33674611 |
| 4 | 2023 | Ann Surg Oncol | Granzyme B (GZMB)-Positive Tumor-Infiltrating ... | 37587364 |
7. Knowledge graph edges (3 total)¶
edge_data = [{'source': 'h-900f7a86', 'relation': 'targets', 'target': 'GZMB', 'strength': 0.5}, {'source': 'GZMB', 'relation': 'associated_with', 'target': 'neuroimmunology', 'strength': 0.4}, {'source': 'GZMB', 'relation': 'involved_in', 'target': 'granzyme_b___cytotoxic_immune_', 'strength': 0.4}]
if edge_data:
pd.DataFrame(edge_data).head(25)
else:
print('No KG edge data available')
Caveats¶
This notebook uses real Forge tool calls from live APIs:
- Enrichment is against curated gene-set libraries (Enrichr)
- STRING/Reactome/HPA/MyGene reflect curated knowledge
- PubMed literature is search-relevance ranked, not systematic review