sc-grn
Load when inferring TF → target gene regulatory networks on a normalised scRNA AnnData via pySCENIC (GRNBoost2 + cisTarget + AUCell) or correlation-based GRN fallback (when arboreto is unavailable, in
Files7
View on GitHubSKILL.mdskills/sc-grn/SKILL.md
GitHubsc-grn
When to use
The user has a normalised scRNA AnnData (cluster labels in
obs[--cluster-key], default leiden) and wants gene regulatory
network inference: TFs → target genes plus per-cell regulon activity
scores. Two paths:
- Full SCENIC pipeline (when
--tf-list+--db+--motifare all provided): GRNBoost2 co-expression → cisTarget motif enrichment- pruning → AUCell scoring per cell. Produces motif-validated
regulons; AUCell activity is exposed as per-TF
obs["regulon_<TF>"]columns (one float column per regulon) plustables/grn_auc_matrix.csv.
- pruning → AUCell scoring per cell. Produces motif-validated
regulons; AUCell activity is exposed as per-TF
- Correlation fallback (when external resources are missing AND
--allow-simplified-grnis set, or in--demo): adjacency-only output, no motif validation, no AUCell. Useful for sanity checks but NOT a substitute for the full pipeline.
For ligand-receptor / cell-cell communication use
sc-cell-communication. For in-silico KO predictions use
sc-in-silico-perturbation (which builds a simpler GRN internally).
Inputs & Outputs
<!-- AUTO-GENERATED from skill.yaml (interface) — do not edit by hand. Regenerate: python scripts/generate_skill_md.py <skill_dir> -->Inputs
- Modalities: scrna
- File types:
.h5ad,.txt - Requires a preprocessed AnnData (
Xnormalised, PCA/neighbours present)
Outputs
tables/auc_matrix.csvtables/cell_metadata.csvtables/gene_expression.csvtables/regulon_summary.csvtables/top_adjacencies.csvfigures/r_regulon_cor.pngfigures/r_regulon_violin.pnganalysis_summary.txtprocessed.h5adreport.mdresult.json- Processed AnnData (
saves_h5ad) — addsobs:regulon_<TF>
Flow
- Load AnnData (
--input) or build a synthetic demo (GRNBoost2-only). - Preflight: when running the full pipeline, verify
--tf-list/--db/--motifexist; demo /--allow-simplified-grnskip the resource check. - Try GRNBoost2 (arboreto) for co-expression adjacencies; if
arboretois not installed OR returns empty, silently fall back to correlation-based adjacencies and recordresult.json["used_fallback"]=True+fallback_reason. - With full resources: run cisTarget motif enrichment + pruning → AUCell scoring per cell.
- Detect degenerate output (zero regulons / TFs) → write troubleshooting block; do NOT raise.
- Save tables, figures,
processed.h5ad,report.md,result.json.
Gotchas
- Silent fallback to correlation GRN when
arboretois missing or fails.sc_grn.py:631catchesImportErrorfor arboreto, setsused_fallback=True,fallback_reason="arboreto package not installed";:639-647catches general exceptions / empty results withfallback_reasonset accordingly. The fallback adjacency-only mode skips motif validation AND AUCell —tables/grn_auc_matrix.csvwon't be written. The persistedresult.json["used_fallback"]is set in the top-level summary atsc_grn.py:859(line 696 is inside therun_grn_demoreturn dict that feeds it). --inputisparser.error(exit code 2), notValueError.sc_grn.py:735callsparser.error("--input required when not using --demo"). Once--inputis given,:738raisesFileNotFoundError(f"Input file not found: {input_path}\nProvide a valid preprocessed .h5ad file, or use --demo for a quick test.")for a missing path.- Full SCENIC needs ALL THREE external resources.
--tf-list+--db+--motifmust be provided together; the preflight atsc_grn.py:749-758enforces this unless--demoor--allow-simplified-grnbypasses. Resources must be downloaded separately (cisTarget DBs fromhttps://resources.aertslab.org/cistarget/). - Two distinct degenerate-output modes. Total failure (
result is None):sc_grn.py:805/:826writes the degenerate-diag block and callssys.exit(1)at:833(caller wrappers expecting a 0 exit will see a hard fail). Partial degeneracy (_check_degenerate_outputreturns a non-None diagnostic with regulons-but-uninformative): the script proceeds to a soft-warn finish and exits 0. Always checkresult.json["n_regulons"](line 857) AND the process exit code before chaining downstream. processed.h5adper-regulonobs["regulon_<TF>"]columns only exist when AUCell ran. In the correlation-fallback or no-motif path,processed.h5adis essentially the input AnnData with contract metadata only — noregulon_*obscolumns and notables/grn_auc_matrix.csv. Downstream skills consuming regulon activity must check for the columns' presence first.--cluster-keydefaults toleiden.sc_grn.py:716defaults toleiden. If the AnnData has labels under a different key (e.g.,cell_type), pass--cluster-key cell_typeso the per-cluster regulon-activity heatmap is meaningful.
Key CLI
# Demo (correlation-based, no external resources)
python omicsclaw.py run sc-grn --demo --output /tmp/sc_grn_demo
# Full SCENIC pipeline with all 3 external resources
python omicsclaw.py run sc-grn \
--input clustered.h5ad --output results/ \
--tf-list /refs/cistarget/hsapiens_TFs.txt \
--db '/refs/cistarget/hg38_*.feather' \
--motif /refs/cistarget/motifs-v9-nr.hgnc-m0.001-o0.0.tbl \
--n-jobs 8
# Correlation-only (when SCENIC resources unavailable, explicit opt-in)
python omicsclaw.py run sc-grn \
--input clustered.h5ad --output results/ \
--allow-simplified-grn
# Custom cluster key + tighter target budget
python omicsclaw.py run sc-grn \
--input annotated.h5ad --output results/ \
--tf-list tf.txt --db '/refs/*.feather' --motif motifs.tbl \
--cluster-key cell_type --n-top-targets 25
See also
references/parameters.md— every CLI flag, resource-format conventionsreferences/methodology.md— GRNBoost2 → cisTarget → AUCell flow; correlation-fallback semanticsreferences/output_contract.md— per-regulonobs["regulon_<TF>"]columns; adjacency / regulon CSV columns- Adjacent skills:
sc-clustering(upstream — producesobs["leiden"]),sc-batch-integration(upstream — integrated embedding for cleaner co-expression),sc-cell-communication(parallel — L-R signalling, NOT TF→target),sc-in-silico-perturbation(parallel — predicts KO effects with a smaller internal GRN),sc-pathway-scoring(parallel — per-cell pathway scores; complementary to AUCell regulon scores)