How does Alectinib, a kinase inhibitor, achieve high-affinity binding to complement protein C1q?¶
Notebook ID: nb-SDA-2026-04-16-gap-pubmed-20260410-095709-4e97c09e · Analysis: SDA-2026-04-16-gap-pubmed-20260410-095709-4e97c09e · Generated: 2026-04-21T18:45:32
Research question¶
The abstract reports that Alectinib binds C1q with high affinity, but this is mechanistically unexpected since Alectinib is designed as a kinase inhibitor while C1q is a complement protein. Understanding this binding mechanism could reveal new drug-target interaction principles and inform rational design of complement modulators.
Gap type: unexplained_observation Source paper: Complement C1q-Targeted Microglial Membrane Camouflaged Nanolipid Carriers for Synaptic Protection in Alzheimer's Disease: A Bioinspired Alectinib Delivery Strategy. (2026, Nano letters, PMID:41114949)
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.94 · Rounds: 4
1. Target gene annotations (MyGene)¶
import pandas as pd
ann_rows = [{'gene': 'ALK', 'name': 'ALK receptor tyrosine kinase', 'summary': 'This gene encodes a receptor tyrosine kinase, which belongs to the insulin receptor superfamily. This protein comprises '}, {'gene': 'C1QA', 'name': 'complement C1q A chain', 'summary': 'This gene encodes the A-chain polypeptide of serum complement subcomponent C1q, which associates with C1r and C1s to yie'}, {'gene': 'C1QB', 'name': 'complement C1q B chain', 'summary': 'This gene encodes the B-chain polypeptide of serum complement subcomponent C1q, which associates with C1r and C1s to yie'}, {'gene': 'C1QC', 'name': 'complement C1q C chain', 'summary': 'This gene encodes the C-chain polypeptide of serum complement subcomponent C1q, which associates with C1r and C1s to yie'}, {'gene': 'CD47', 'name': 'CD47 molecule', 'summary': 'This gene encodes a membrane protein, which is involved in the increase in intracellular calcium concentration that occu'}, {'gene': 'CRP', 'name': 'C-reactive protein', 'summary': 'The protein encoded by this gene belongs to the pentraxin family which also includes serum amyloid P component protein a'}, {'gene': 'FCGR1A', 'name': 'Fc gamma receptor Ia', 'summary': 'This gene encodes a protein that plays an important role in the immune response. This protein is a high-affinity Fc-gamm'}, {'gene': 'IL1B', 'name': 'interleukin 1 beta', 'summary': 'The protein encoded by this gene is a member of the interleukin 1 cytokine family. This cytokine is produced by activate'}, {'gene': 'NAMPT', 'name': 'nicotinamide phosphoribosyltransferase', 'summary': 'This gene encodes a protein that catalyzes the condensation of nicotinamide with 5-phosphoribosyl-1-pyrophosphate to yie'}, {'gene': 'PTPN11', 'name': 'protein tyrosine phosphatase non-receptor type 11', 'summary': 'The protein encoded by this gene is a member of the protein tyrosine phosphatase (PTP) family. PTPs are known to be sign'}, {'gene': 'PTPN6', 'name': 'protein tyrosine phosphatase non-receptor type 6', 'summary': 'The protein encoded by this gene is a member of the protein tyrosine phosphatase (PTP) family. PTPs are known to be sign'}, {'gene': 'SIRPA', 'name': 'signal regulatory protein alpha', 'summary': 'The protein encoded by this gene is a member of the signal-regulatory-protein (SIRP) family, and also belongs to the imm'}, {'gene': 'SIRT1', 'name': 'sirtuin 1', 'summary': 'This gene encodes a member of the sirtuin family of proteins, homologs to the yeast Sir2 protein. Members of the sirtuin'}, {'gene': 'SYK', 'name': 'spleen associated tyrosine kinase', 'summary': 'This gene encodes a member of the family of non-receptor type Tyr protein kinases. This protein is widely expressed in h'}, {'gene': 'TREM2', 'name': 'triggering receptor expressed on myeloid cells 2', 'summary': 'This gene encodes a membrane protein that forms a receptor signaling complex with the TYRO protein tyrosine kinase bindi'}]
pd.DataFrame(ann_rows)
| gene | name | summary | |
|---|---|---|---|
| 0 | ALK | ALK receptor tyrosine kinase | This gene encodes a receptor tyrosine kinase, ... |
| 1 | C1QA | complement C1q A chain | This gene encodes the A-chain polypeptide of s... |
| 2 | C1QB | complement C1q B chain | This gene encodes the B-chain polypeptide of s... |
| 3 | C1QC | complement C1q C chain | This gene encodes the C-chain polypeptide of s... |
| 4 | CD47 | CD47 molecule | This gene encodes a membrane protein, which is... |
| 5 | CRP | C-reactive protein | The protein encoded by this gene belongs to th... |
| 6 | FCGR1A | Fc gamma receptor Ia | This gene encodes a protein that plays an impo... |
| 7 | IL1B | interleukin 1 beta | The protein encoded by this gene is a member o... |
| 8 | NAMPT | nicotinamide phosphoribosyltransferase | This gene encodes a protein that catalyzes the... |
| 9 | PTPN11 | protein tyrosine phosphatase non-receptor type 11 | The protein encoded by this gene is a member o... |
| 10 | PTPN6 | protein tyrosine phosphatase non-receptor type 6 | The protein encoded by this gene is a member o... |
| 11 | SIRPA | signal regulatory protein alpha | The protein encoded by this gene is a member o... |
| 12 | SIRT1 | sirtuin 1 | This gene encodes a member of the sirtuin fami... |
| 13 | SYK | spleen associated tyrosine kinase | This gene encodes a member of the family of no... |
| 14 | TREM2 | triggering receptor expressed on myeloid cells 2 | This gene encodes a membrane protein that form... |
2. GO Biological Process enrichment (Enrichr)¶
go_bp = [{'rank': 1, 'term': 'Regulation Of Interleukin-6 Production (GO:0032675)', 'p_value': 1.0048399935913338e-12, 'odds_ratio': 162.55373831775702, 'genes': ['SYK', 'IL1B', 'SIRPA', 'PTPN11', 'TREM2', 'PTPN6', 'CD47']}, {'rank': 2, 'term': 'Regulation Of Phagocytosis (GO:0050764)', 'p_value': 5.048610594157601e-10, 'odds_ratio': 188.03773584905662, 'genes': ['SYK', 'IL1B', 'SIRPA', 'TREM2', 'CD47']}, {'rank': 3, 'term': 'Regulation Of ERK1 And ERK2 Cascade (GO:0070372)', 'p_value': 1.415343656859335e-08, 'odds_ratio': 55.31372549019608, 'genes': ['SYK', 'IL1B', 'SIRPA', 'PTPN11', 'TREM2', 'PTPN6']}, {'rank': 4, 'term': 'Synapse Pruning (GO:0098883)', 'p_value': 1.9067019051840425e-08, 'odds_ratio': 999.0, 'genes': ['C1QB', 'TREM2', 'C1QC']}, {'rank': 5, 'term': 'Regulation Of Tumor Necrosis Factor Production (GO:0032680)', 'p_value': 2.7217119623639505e-08, 'odds_ratio': 81.40573770491804, 'genes': ['SYK', 'SIRPA', 'PTPN11', 'PTPN6', 'CD47']}, {'rank': 6, 'term': 'Cellular Response To Cytokine Stimulus (GO:0071345)', 'p_value': 5.6575802607493816e-08, 'odds_ratio': 43.450331125827816, 'genes': ['IL1B', 'SIRPA', 'PTPN11', 'PTPN6', 'CD47', 'SIRT1']}, {'rank': 7, 'term': 'Positive Regulation Of Phagocytosis (GO:0050766)', 'p_value': 9.742769899857603e-08, 'odds_ratio': 129.4090909090909, 'genes': ['IL1B', 'SIRPA', 'TREM2', 'CD47']}, {'rank': 8, 'term': 'Positive Regulation Of Endocytosis (GO:0045807)', 'p_value': 2.9769516535686854e-07, 'odds_ratio': 96.53333333333333, 'genes': ['IL1B', 'SIRPA', 'TREM2', 'CD47']}, {'rank': 9, 'term': 'Cytokine-Mediated Signaling Pathway (GO:0019221)', 'p_value': 9.108569513553911e-07, 'odds_ratio': 39.15277777777778, 'genes': ['SYK', 'IL1B', 'PTPN11', 'PTPN6', 'SIRT1']}, {'rank': 10, 'term': 'Negative Regulation Of Inflammatory Response (GO:0050728)', 'p_value': 1.1700096460875274e-06, 'odds_ratio': 67.55480033984706, 'genes': ['SYK', 'SIRPA', 'TREM2', 'PTPN6']}]
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 | Regulation Of Interleukin-6 Production (GO:003... | 7 | 1.00e-12 | 162.6 | SYK, IL1B, SIRPA, PTPN11, TREM2, PTPN6, CD47 |
| 1 | Regulation Of Phagocytosis (GO:0050764) | 5 | 5.05e-10 | 188.0 | SYK, IL1B, SIRPA, TREM2, CD47 |
| 2 | Regulation Of ERK1 And ERK2 Cascade (GO:0070372) | 6 | 1.42e-08 | 55.3 | SYK, IL1B, SIRPA, PTPN11, TREM2, PTPN6 |
| 3 | Synapse Pruning (GO:0098883) | 3 | 1.91e-08 | 999.0 | C1QB, TREM2, C1QC |
| 4 | Regulation Of Tumor Necrosis Factor Production... | 5 | 2.72e-08 | 81.4 | SYK, SIRPA, PTPN11, PTPN6, CD47 |
| 5 | Cellular Response To Cytokine Stimulus (GO:007... | 6 | 5.66e-08 | 43.5 | IL1B, SIRPA, PTPN11, PTPN6, CD47, SIRT1 |
| 6 | Positive Regulation Of Phagocytosis (GO:0050766) | 4 | 9.74e-08 | 129.4 | IL1B, SIRPA, TREM2, CD47 |
| 7 | Positive Regulation Of Endocytosis (GO:0045807) | 4 | 2.98e-07 | 96.5 | IL1B, SIRPA, TREM2, CD47 |
| 8 | Cytokine-Mediated Signaling Pathway (GO:0019221) | 5 | 9.11e-07 | 39.2 | SYK, IL1B, PTPN11, PTPN6, SIRT1 |
| 9 | Negative Regulation Of Inflammatory Response (... | 4 | 1.17e-06 | 67.6 | SYK, SIRPA, TREM2, PTPN6 |
import matplotlib.pyplot as plt
import numpy as np
go_bp = [{'rank': 1, 'term': 'Regulation Of Interleukin-6 Production (GO:0032675)', 'p_value': 1.0048399935913338e-12, 'odds_ratio': 162.55373831775702, 'genes': ['SYK', 'IL1B', 'SIRPA', 'PTPN11', 'TREM2', 'PTPN6', 'CD47']}, {'rank': 2, 'term': 'Regulation Of Phagocytosis (GO:0050764)', 'p_value': 5.048610594157601e-10, 'odds_ratio': 188.03773584905662, 'genes': ['SYK', 'IL1B', 'SIRPA', 'TREM2', 'CD47']}, {'rank': 3, 'term': 'Regulation Of ERK1 And ERK2 Cascade (GO:0070372)', 'p_value': 1.415343656859335e-08, 'odds_ratio': 55.31372549019608, 'genes': ['SYK', 'IL1B', 'SIRPA', 'PTPN11', 'TREM2', 'PTPN6']}, {'rank': 4, 'term': 'Synapse Pruning (GO:0098883)', 'p_value': 1.9067019051840425e-08, 'odds_ratio': 999.0, 'genes': ['C1QB', 'TREM2', 'C1QC']}, {'rank': 5, 'term': 'Regulation Of Tumor Necrosis Factor Production (GO:0032680)', 'p_value': 2.7217119623639505e-08, 'odds_ratio': 81.40573770491804, 'genes': ['SYK', 'SIRPA', 'PTPN11', 'PTPN6', 'CD47']}, {'rank': 6, 'term': 'Cellular Response To Cytokine Stimulus (GO:0071345)', 'p_value': 5.6575802607493816e-08, 'odds_ratio': 43.450331125827816, 'genes': ['IL1B', 'SIRPA', 'PTPN11', 'PTPN6', 'CD47', 'SIRT1']}, {'rank': 7, 'term': 'Positive Regulation Of Phagocytosis (GO:0050766)', 'p_value': 9.742769899857603e-08, 'odds_ratio': 129.4090909090909, 'genes': ['IL1B', 'SIRPA', 'TREM2', 'CD47']}, {'rank': 8, 'term': 'Positive Regulation Of Endocytosis (GO:0045807)', 'p_value': 2.9769516535686854e-07, 'odds_ratio': 96.53333333333333, 'genes': ['IL1B', 'SIRPA', 'TREM2', 'CD47']}]
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-yikt2lnb 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¶
ppi = [{'protein1': 'CRP', 'protein2': 'FCGR1A', 'score': 0.434, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0, 'tscore': 0.434}, {'protein1': 'CRP', 'protein2': 'C1QC', 'score': 0.499, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.5, 'tscore': 0}, {'protein1': 'CRP', 'protein2': 'C1QA', 'score': 0.63, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.292, 'dscore': 0.5, 'tscore': 0}, {'protein1': 'CRP', 'protein2': 'C1QB', 'score': 0.689, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.405, 'dscore': 0.5, 'tscore': 0}, {'protein1': 'C1QB', 'protein2': 'C1QA', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.967, 'dscore': 0.9, 'tscore': 0.981}, {'protein1': 'C1QB', 'protein2': 'C1QC', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.92, 'dscore': 0.9, 'tscore': 0.982}, {'protein1': 'CD47', 'protein2': 'PTPN6', 'score': 0.499, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.5, 'tscore': 0}, {'protein1': 'CD47', 'protein2': 'TREM2', 'score': 0.539, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0, 'tscore': 0.539}, {'protein1': 'CD47', 'protein2': 'PTPN11', 'score': 0.674, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.5, 'tscore': 0.375}, {'protein1': 'CD47', 'protein2': 'SIRPA', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.939, 'dscore': 0.9, 'tscore': 0.986}, {'protein1': 'FCGR1A', 'protein2': 'SYK', 'score': 0.964, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.4, 'dscore': 0.9, 'tscore': 0.457}, {'protein1': 'TREM2', 'protein2': 'SIRPA', 'score': 0.91, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0.141}, {'protein1': 'TREM2', 'protein2': 'SYK', 'score': 0.929, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0.323}, {'protein1': 'C1QC', 'protein2': 'C1QA', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.96, 'dscore': 0.9, 'tscore': 0.981}, {'protein1': 'SYK', 'protein2': 'PTPN6', 'score': 0.825, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.457, 'dscore': 0.36, 'tscore': 0.538}, {'protein1': 'SYK', 'protein2': 'SIRPA', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0}, {'protein1': 'SYK', 'protein2': 'PTPN11', 'score': 0.945, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0.479}, {'protein1': 'PTPN6', 'protein2': 'SIRPA', 'score': 0.845, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.618, 'dscore': 0.5, 'tscore': 0.254}, {'protein1': 'PTPN6', 'protein2': 'PTPN11', 'score': 0.947, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.079, 'dscore': 0.9, 'tscore': 0.474}, {'protein1': 'SIRPA', 'protein2': 'PTPN11', 'score': 0.996, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.677, 'dscore': 0.5, 'tscore': 0.982}]
ppi_df = pd.DataFrame(ppi).sort_values('score', ascending=False)
display_cols = [c for c in ['protein1','protein2','score','escore','tscore'] if c in ppi_df.columns]
print(f'{len(ppi_df)} STRING edges')
ppi_df[display_cols].head(20)
20 STRING edges
| protein1 | protein2 | score | escore | tscore | |
|---|---|---|---|---|---|
| 13 | C1QC | C1QA | 0.999 | 0.960 | 0.981 |
| 9 | CD47 | SIRPA | 0.999 | 0.939 | 0.986 |
| 5 | C1QB | C1QC | 0.999 | 0.920 | 0.982 |
| 4 | C1QB | C1QA | 0.999 | 0.967 | 0.981 |
| 19 | SIRPA | PTPN11 | 0.996 | 0.677 | 0.982 |
| 10 | FCGR1A | SYK | 0.964 | 0.400 | 0.457 |
| 18 | PTPN6 | PTPN11 | 0.947 | 0.079 | 0.474 |
| 16 | SYK | PTPN11 | 0.945 | 0.000 | 0.479 |
| 12 | TREM2 | SYK | 0.929 | 0.000 | 0.323 |
| 11 | TREM2 | SIRPA | 0.910 | 0.000 | 0.141 |
| 15 | SYK | SIRPA | 0.900 | 0.000 | 0.000 |
| 17 | PTPN6 | SIRPA | 0.845 | 0.618 | 0.254 |
| 14 | SYK | PTPN6 | 0.825 | 0.457 | 0.538 |
| 3 | CRP | C1QB | 0.689 | 0.405 | 0.000 |
| 8 | CD47 | PTPN11 | 0.674 | 0.000 | 0.375 |
| 2 | CRP | C1QA | 0.630 | 0.292 | 0.000 |
| 7 | CD47 | TREM2 | 0.539 | 0.000 | 0.539 |
| 1 | CRP | C1QC | 0.499 | 0.000 | 0.000 |
| 6 | CD47 | PTPN6 | 0.499 | 0.000 | 0.000 |
| 0 | CRP | FCGR1A | 0.434 | 0.000 | 0.434 |
import math
ppi = [{'protein1': 'CRP', 'protein2': 'FCGR1A', 'score': 0.434, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0, 'tscore': 0.434}, {'protein1': 'CRP', 'protein2': 'C1QC', 'score': 0.499, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.5, 'tscore': 0}, {'protein1': 'CRP', 'protein2': 'C1QA', 'score': 0.63, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.292, 'dscore': 0.5, 'tscore': 0}, {'protein1': 'CRP', 'protein2': 'C1QB', 'score': 0.689, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.405, 'dscore': 0.5, 'tscore': 0}, {'protein1': 'C1QB', 'protein2': 'C1QA', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.967, 'dscore': 0.9, 'tscore': 0.981}, {'protein1': 'C1QB', 'protein2': 'C1QC', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.92, 'dscore': 0.9, 'tscore': 0.982}, {'protein1': 'CD47', 'protein2': 'PTPN6', 'score': 0.499, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.5, 'tscore': 0}, {'protein1': 'CD47', 'protein2': 'TREM2', 'score': 0.539, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0, 'tscore': 0.539}, {'protein1': 'CD47', 'protein2': 'PTPN11', 'score': 0.674, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.5, 'tscore': 0.375}, {'protein1': 'CD47', 'protein2': 'SIRPA', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.939, 'dscore': 0.9, 'tscore': 0.986}, {'protein1': 'FCGR1A', 'protein2': 'SYK', 'score': 0.964, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.4, 'dscore': 0.9, 'tscore': 0.457}, {'protein1': 'TREM2', 'protein2': 'SIRPA', 'score': 0.91, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0.141}, {'protein1': 'TREM2', 'protein2': 'SYK', 'score': 0.929, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0.323}, {'protein1': 'C1QC', 'protein2': 'C1QA', 'score': 0.999, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.96, 'dscore': 0.9, 'tscore': 0.981}, {'protein1': 'SYK', 'protein2': 'PTPN6', 'score': 0.825, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.457, 'dscore': 0.36, 'tscore': 0.538}, {'protein1': 'SYK', 'protein2': 'SIRPA', 'score': 0.9, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0}, {'protein1': 'SYK', 'protein2': 'PTPN11', 'score': 0.945, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0, 'dscore': 0.9, 'tscore': 0.479}, {'protein1': 'PTPN6', 'protein2': 'SIRPA', 'score': 0.845, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.618, 'dscore': 0.5, 'tscore': 0.254}, {'protein1': 'PTPN6', 'protein2': 'PTPN11', 'score': 0.947, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.079, 'dscore': 0.9, 'tscore': 0.474}, {'protein1': 'SIRPA', 'protein2': 'PTPN11', 'score': 0.996, 'nscore': 0, 'fscore': 0, 'pscore': 0, 'ascore': 0, 'escore': 0.677, 'dscore': 0.5, 'tscore': 0.982}]
if ppi:
nodes = sorted({p for e in ppi for p in (e['protein1'], e['protein2'])})
n = len(nodes)
pos = {n_: (math.cos(2*math.pi*i/n), math.sin(2*math.pi*i/n)) for i, n_ in enumerate(nodes)}
fig, ax = plt.subplots(figsize=(7, 7))
for e in ppi:
x1,y1 = pos[e['protein1']]; x2,y2 = pos[e['protein2']]
ax.plot([x1,x2],[y1,y2], color='#888', alpha=0.3+0.5*e.get('score',0))
for name,(x,y) in pos.items():
ax.scatter([x],[y], s=450, color='#ffd54f', edgecolors='#333', zorder=3)
ax.annotate(name, (x,y), ha='center', va='center', fontsize=8, fontweight='bold', zorder=4)
ax.set_aspect('equal'); ax.axis('off')
ax.set_title(f'STRING PPI network ({len(ppi)} edges)')
plt.tight_layout(); plt.show()
4. Reactome pathway footprint¶
pw_rows = [{'gene': 'ALK', 'n_pathways': 8, 'top_pathway': 'Signaling by ALK'}, {'gene': 'C1QA', 'n_pathways': 3, 'top_pathway': 'Initial triggering of complement'}, {'gene': 'C1QB', 'n_pathways': 3, 'top_pathway': 'Initial triggering of complement'}, {'gene': 'C1QC', 'n_pathways': 3, 'top_pathway': 'Initial triggering of complement'}, {'gene': 'CD47', 'n_pathways': 4, 'top_pathway': 'Cell surface interactions at the vascular wall'}, {'gene': 'CRP', 'n_pathways': 1, 'top_pathway': 'Classical antibody-mediated complement activation'}, {'gene': 'FCGR1A', 'n_pathways': 7, 'top_pathway': 'Cross-presentation of soluble exogenous antigens (endosomes)'}, {'gene': 'IL1B', 'n_pathways': 7, 'top_pathway': 'Interleukin-1 processing'}, {'gene': 'NAMPT', 'n_pathways': 3, 'top_pathway': 'BMAL1:CLOCK,NPAS2 activates circadian expression'}, {'gene': 'PTPN11', 'n_pathways': 8, 'top_pathway': 'Interleukin-6 signaling'}, {'gene': 'PTPN6', 'n_pathways': 8, 'top_pathway': 'GPVI-mediated activation cascade'}, {'gene': 'SIRPA', 'n_pathways': 3, 'top_pathway': 'Cell surface interactions at the vascular wall'}, {'gene': 'SIRT1', 'n_pathways': 8, 'top_pathway': 'Regulation of HSF1-mediated heat shock response'}, {'gene': 'SYK', 'n_pathways': 8, 'top_pathway': 'GPVI-mediated activation cascade'}, {'gene': 'TREM2', 'n_pathways': 4, 'top_pathway': 'Immunoregulatory interactions between a Lymphoid and a non-Lymphoid ce'}]
pd.DataFrame(pw_rows).sort_values('n_pathways', ascending=False)
| gene | n_pathways | top_pathway | |
|---|---|---|---|
| 0 | ALK | 8 | Signaling by ALK |
| 9 | PTPN11 | 8 | Interleukin-6 signaling |
| 10 | PTPN6 | 8 | GPVI-mediated activation cascade |
| 12 | SIRT1 | 8 | Regulation of HSF1-mediated heat shock response |
| 13 | SYK | 8 | GPVI-mediated activation cascade |
| 6 | FCGR1A | 7 | Cross-presentation of soluble exogenous antige... |
| 7 | IL1B | 7 | Interleukin-1 processing |
| 4 | CD47 | 4 | Cell surface interactions at the vascular wall |
| 14 | TREM2 | 4 | Immunoregulatory interactions between a Lympho... |
| 1 | C1QA | 3 | Initial triggering of complement |
| 2 | C1QB | 3 | Initial triggering of complement |
| 8 | NAMPT | 3 | BMAL1:CLOCK,NPAS2 activates circadian expression |
| 3 | C1QC | 3 | Initial triggering of complement |
| 11 | SIRPA | 3 | Cell surface interactions at the vascular wall |
| 5 | CRP | 1 | Classical antibody-mediated complement activation |
5. Hypothesis ranking (5 hypotheses)¶
hyp_data = [('Selective C1q-CRP vs. C1q-IgG Axis Inhibition', 0.599), ('Combined NAMPT-Alectinib Targeting of SASP-Complement C', 0.549), ("Alectinib-C1q Complex Hijacks TREM2's Synaptic Protecti", 0.5), ('Kinase Inhibitor-C1q Structural Convergence for Bifunct', 0.458), ('Microglial Membrane Camouflage Exploits CD47-SIRPα Chec', 0.444)]
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('How does Alectinib, a kinase inhibitor, achieve high-affinity binding to complement protein C1q?')
ax.grid(axis='x', alpha=0.3)
plt.tight_layout(); plt.show()
labels = ['Selective C1q-CRP vs. C1q-IgG Axis Inhib', 'Combined NAMPT-Alectinib Targeting of SA', "Alectinib-C1q Complex Hijacks TREM2's Sy", 'Kinase Inhibitor-C1q Structural Converge', 'Microglial Membrane Camouflage Exploits ']
matrix = np.array([[0.65, 0.5, 0.75, 0.6, 0.0, 0.5, 0.6, 0.55, 0.7], [0.6, 0.5, 0.7, 0.55, 0.0, 0.45, 0.55, 0.5, 0.65], [0.7, 0.4, 0.55, 0.35, 0.0, 0.45, 0.5, 0.4, 0.7], [0.85, 0.3, 0.55, 0.25, 0.0, 0.35, 0.45, 0.25, 0.7], [0.65, 0.45, 0.5, 0.3, 0.0, 0.4, 0.5, 0.45, 0.65]])
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: Selective C1q-CRP vs. C1q-IgG Axis Inhibition¶
Target genes: C1QA/C1QB/C1QC, CRP, FCGR1A · Composite score: 0.599
C1q Isoform-Selective Modulation by Alectinib: Differential Inhibition of CRP-Triggered vs. IgG-Mediated Complement Activation in AD. The C1q globular head recognizes multiple ligands through distinct but overlapping interfaces. Alectinib preferentially blocks the C1q-CRP binding epitope while prese
print('No PubMed results for hypothesis h-c8d2ea20')
No PubMed results for hypothesis h-c8d2ea20
Hypothesis 2: Combined NAMPT-Alectinib Targeting of SASP-Complement Cascade¶
Target genes: NAMPT, SIRT1, C1QA/C1QB/C1QC, IL1B · Composite score: 0.549
Senescence-Associated Secretory Phenotype Complements: NAMPT/NAD+ Axis Inhibition Synergizes with C1q Blockade to Interrupt Synaptic Degeneration Cascades. Alectinib blocks downstream effector arm (C1q-mediated synaptic phagocytosis) while NAMPT inhibitors interrupt upstream driver, creating synergi
print('No PubMed results for hypothesis h-292a1ec3')
No PubMed results for hypothesis h-292a1ec3
Hypothesis 3: Alectinib-C1q Complex Hijacks TREM2's Synaptic Protective Binding Inte¶
Target genes: C1QA/C1QB/C1QC, TREM2 · Composite score: 0.5
Alectinib Occupies the TREM2-C1q Binding Interface to Preserve Synaptic Connectivity in AD. TREM2 normally protects against complement-mediated synaptic loss by directly binding complement C1q. Alectinib's high-affinity binding to C1q may be mediated through occupation of the TREM2-C1q interaction s
print('No PubMed results for hypothesis h-d9c5a529')
No PubMed results for hypothesis h-d9c5a529
Hypothesis 4: Kinase Inhibitor-C1q Structural Convergence for Bifunctional Drug Desi¶
Target genes: C1QA/C1QB/C1QC, ALK, SYK · Composite score: 0.458
Structural Convergence Between Kinase Inhibitor Pharmacophores and Complement C1q Recognition Surfaces Reveals a Druggable Nexus for Neuroinflammatory Disease. Alectinib binds both ALK and C1q suggesting structural convergence between kinase hinge-binding regions and C1q complement recognition surfa
print('No PubMed results for hypothesis h-5d753df0')
No PubMed results for hypothesis h-5d753df0
Hypothesis 5: Microglial Membrane Camouflage Exploits CD47-SIRPα Checkpoint Disinhib¶
Target genes: CD47, SIRPA, PTPN6, PTPN11 · Composite score: 0.444
Microglial Membrane Coating of Nanolipid Carriers Enables Synaptic Self Recognition Bypass via CD47-SIRPα Axis Modulation. Microglial membrane proteins displayed on ALE@MM-NLCs may engage neuronal SIRPα, suppressing microglial phagocytic signaling through ITIM recruitment.
print('No PubMed results for hypothesis h-f5518156')
No PubMed results for hypothesis h-f5518156
7. Knowledge graph edges (1 total)¶
edge_data = [{'source': 'C1QA/C1QB/C1QC, CRP, FCGR1A', 'relation': 'promoted: Selective C1q-C', 'target': 'neuroinflammation', 'strength': 0.56}]
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