Usage Examples
Scenario-driven snippets that build on the basics from Getting Started and Workflows. Each example combines Typer commands from src/sirnaforge/ exactly as they run in production.
Advanced Workflow Presets
Publication-Quality Screen
uv run sirnaforge workflow TP53 \
--output-dir tp53_publication \
--top-n 50 \
--gc-min 35 --gc-max 60 \
--max-poly-runs 2 \
--genome-species "human,mouse,rat" \
--design-mode mirna \
--mirna-db mirgenedb \
--mirna-species "human,mouse" \
--modification-file examples/modification_patterns/standard_2ome.json \
--verbose
Mirrors the stricter defaults enforced inside
sirnaforge/core/design.pyandcore/off_target.py(multi-species alignments, miRNA-aware scoring, chemical modifications).Use the same flags inside Docker by prefixing with
docker run --rm -v $(pwd):/workspace -w /workspace ghcr.io/austin-s-h/sirnaforge:latest sirnaforge ….
Custom FASTA + Transcriptome Override
uv run sirnaforge workflow TP53 \
--input-fasta examples/sample_transcripts.fasta \
--transcriptome-fasta ensembl_mouse_cdna \
--species "human,mouse" \
--output-dir tp53_custom_inputs
--input-fastafeeds the enumerator exactly the sequences you supply while still naming outputs with the positional gene argument.--transcriptome-fastareindexes the transcriptome reference used by off-target analysis (local path, URL, or preset). Presets map to the cache registry defined insirnaforge/data/species_registry.py.Pair with
--offtarget-indices human:/refs/hg38 mouse:/refs/mm39when you maintain your own BWA-MEM2 indices.
Gene Search & Design Automations
Curated Transcript Panel
mkdir -p transcripts
for gene in TP53 BRCA1 EGFR KRAS; do
uv run sirnaforge search "$gene" \
--database ensembl \
--output transcripts/${gene}.fasta \
--verbose
done
uv run sirnaforge design transcripts/*.fasta \
--output curated_panel.csv \
--top-n 25 \
--gc-min 40 --gc-max 55
sirnaforge searchtalks to the live providers implemented insirnaforge/data/gene_search.py; constraining--databaseavoids redundant API calls.sirnaforge designaccepts globbed FASTA inputs, so you can mix curated transcripts before or after manual review.
Batch Processing with QC Summaries
#!/usr/bin/env bash
set -euo pipefail
genes=(TP53 BRCA1 EGFR MYC KRAS)
out_dir="batch_$(date +%Y%m%d)"
mkdir -p "$out_dir"
for gene in "${genes[@]}"; do
uv run sirnaforge workflow "$gene" \
--output-dir "${out_dir}/${gene}" \
--top-n 30 \
--gc-min 35 --gc-max 60 \
--species "human,mouse" \
--verbose
pass_csv="${out_dir}/${gene}/sirnaforge/${gene}_pass.csv"
total_csv="${out_dir}/${gene}/sirnaforge/${gene}_all.csv"
python - <<'PY'
import csv, pathlib, sys
pass_path, total_path = pathlib.Path(sys.argv[1]), pathlib.Path(sys.argv[2])
if not pass_path.exists() or not total_path.exists():
raise SystemExit(f"Missing outputs for {pass_path.parent.parent.name}")
with total_path.open() as fh:
total = sum(1 for _ in csv.DictReader(fh))
with pass_path.open() as fh:
passing = sum(1 for _ in csv.DictReader(fh))
rate = 0 if total == 0 else passing * 100 / total
print(f"{pass_path.parent.parent.name}: {passing}/{total} ({rate:.1f}%)")
PY "$pass_csv" "$total_csv"
done
Uses the exact CSV schema emitted by
workflow.py(sirnaforge/*_pass.csvandsirnaforge/*_all.csv).Swap the inline Python block for pandas or DuckDB once you’re ready to integrate with LIMS.
Design-Only with Chemical Modifications
uv run sirnaforge design custom_transcripts.fasta \
--output custom_sirnas.csv \
--top-n 50 \
--gc-min 35 --gc-max 60 \
--max-poly-runs 2 \
--length 21 \
--modification-file examples/modification_patterns/fda_approved_onpattro.json
Pattern files live in
examples/modification_patterns/and are parsed bysirnaforge/utils/modification_patterns.py.Attach metadata afterwards with:
sirnaforge sequences annotate custom_sirnas.fasta modifications.json -o custom_sirnas_annotated.fasta
miRNA-Biogenesis Mode
uv run sirnaforge workflow MIR21 \
--design-mode mirna \
--gc-min 32 --gc-max 52 \
--top-n 60 \
--mirna-db mirgenedb \
--mirna-species "human" \
--output-dir mirna_mode_demo
Activates the alternative scoring weights and seed-cleanliness heuristics defined in
sirnaforge/models/sirna.py(DesignMode.MIRNA).Expect additional
quality_flagsfor miRNA-specific failures (dirty seed windows, lack of supplementary pairing, etc.).
Nextflow Off-Target Pipeline Hand-Off
uv run sirnaforge workflow TP53 --output-dir tp53_nextflow
uv run sirnaforge offtarget \
--input-candidates-fasta tp53_nextflow/off_target/input_candidates.fasta \
--output-dir tp53_nextflow/off_target_results \
--species "human,mouse"
off_target/input_candidates.fastacontains both high-confidence and dirty-control guides.Override indices with
--offtarget-indices human:/refs/hg38 mouse:/refs/mm39for custom BWA-MEM2 builds.
Docker-Friendly Pattern
Wrap any snippet with:
docker run --rm -v $(pwd):/workspace -w /workspace \
ghcr.io/austin-s-h/sirnaforge:latest \
sirnaforge <command> <args>
The image caches Ensembl transcriptomes and miRNA databases (see Installation → Docker).
Replace
--rmwith--name sirnaforge_batchfor long-lived runs so you can inspect logs mid-execution.
See Also
Getting Started — installation and your first workflow.
Workflows — command-by-command explanations and output diagrams.
Scoring Overview — interpret the metrics in
*_pass.csv.CLI Reference — authoritative
--helpoutput captured during the docs build.