Paper2Agent_decoupleRpy / scripts /generate_hgnc_cache.py
avoigt1121
fix: resolve CollecTRI TF symbols + restore igraph network plot
8e5006c
Raw
History Blame Contribute Delete
1.69 kB
#!/usr/bin/env python3
"""
Regenerate resources/semantic/hgnc_cache.tsv from the CollecTRI network.
The cache is the universe of TF labels that can appear in CollecTRI-based TF
enrichment output. It is consumed by src/semantic/gene_symbols.py to classify
regulator labels as genuine gene symbols (vs unresolved). Complex/family labels
(AP1, NFKB) are intentionally excluded — they are handled earlier in
classify_regulator_label() via resources/semantic/regulator_overrides.yaml.
Run from the repo root: python scripts/generate_hgnc_cache.py
Requires decoupler and a network connection (fetches CollecTRI from OmniPath).
"""
from __future__ import annotations
from pathlib import Path
import decoupler as dc
# Complex/family labels classified via regulator_overrides.yaml, not as genes.
_EXCLUDE = {"AP1", "NFKB"}
_OUT_PATH = Path(__file__).parent.parent / "resources" / "semantic" / "hgnc_cache.tsv"
def main() -> None:
net = dc.op.collectri(organism="human")
symbols = sorted(s for s in net["source"].unique() if s.upper() not in _EXCLUDE)
lines = [
"# CollecTRI source transcription factors (HGNC symbols)",
f'# Generated from decoupler.op.collectri(organism="human"), decoupler {dc.__version__}',
"# Source label universe for TF enrichment; complex/family labels (AP1, NFKB)",
"# are intentionally excluded — they are classified via regulator_overrides.yaml.",
"# Regenerate with scripts/generate_hgnc_cache.py",
"symbol",
*symbols,
]
_OUT_PATH.write_text("\n".join(lines) + "\n", encoding="utf-8")
print(f"Wrote {len(symbols)} symbols to {_OUT_PATH}")
if __name__ == "__main__":
main()