kemal 9115d09bf2
ci / test (3.13) (push) Successful in 4m7s
ci / test (3.12) (push) Successful in 4m9s
CI: fix the Install step (setup-uv already creates .venv) and make sure a C linker exists for the Rust build
2026-09-30 08:29:58 +01:00

SimurgArray

SimurgArray: Thirty birds, one picture.

Personal research toolkit for Illumina Infinium genotyping BeadChip data (IDAT → normalization → genotype calling → BAF/LRR → QC → VCF/PLINK; CN/LOH/mosaicism, PGx, cluster training, methylation control QC).

  • SIMURGARRAY_MASTER_PLAN.md — architecture, algorithms, roadmap
  • SIMURGARRAY_FUNCTIONAL_SPEC.md — 416 itemised requirements (CLI, inputs, outputs, QC, CN, PGx, methylation, edge cases)
  • docs/validation/ — per-phase validation reports · docs/known_unknowns.md — findings log
  • branding/ — logo, icons, templates and the brand guide · blog/ — five posts about the project

Status

v2.0.0 (2026-09-30) — see CHANGELOG.md. v1: IDAT → normalization → GenCall-equivalent genotype calling → GTC v5 → sample/control QC with an HTML report → plus-strand VCF/BCF → PLINK 1/2, bedGraph, final report; plus a differential-testing harness. v2 adds cluster training (ArrayTrain), genome-wide CN/LOH/mosaic calling, pharmacogenomics (targeted CN, star alleles, phenotypes) and methylation control QC. Validation (docs/validation/):

Check Result
2141 vendor GTCs, 1000 Genomes Omni2.5 (--preset autocall-1.6.2) normalization bit-identical; GTCs byte-identical in 2138/2141
GSA demo vs gtc2vcf, GTCtoVCF, plink2 zero unexplained differences
1000 Genomes pedigrees (Omni2.5) 717/717 parent–offspring pairs; Mendel error median 0.031 %
360 GSA arrays (GSE165845) vs NYGC 30x WGS / GIAB HG001 concordance 0.9934 / 0.9985; replicates 0.9966
ArrayTrain EGT, GSE165845 chr22 vs 1000G 30x 99.44 % concordance (vendor EGT 99.46 %), call rate 99.61 %
CN, 360 GSE165845 arrays vs NYGC 30x SV PASS precision DEL 44 % / DUP 57 %
PGx, GSA v4 demo vs GeT-RM 154/168 gene calls
Methylation QC vs sesame β r = 0.99998

Commands: simurg inspect, ingest, normalize, genotype, qc controls|samples|contamination|relatedness|loci|report|suggest-thresholds, gtc-to-vcf, export plink|bedgraph|finalreport|locus-summary, compare, train, cn build-model|call|annotate, pgx db build|coverage|copy-number|star-allele|phenotype, methyl qc|convert-manifest. User guide: docs/user_guide.md; worked example: examples/gsa_demo.sh. Optional Rust kernels (byte-identical outputs, ~80 GSA samples/min per server core, docs/validation/P9.md); wheels, Docker image and conda recipes (docs/validation/P10.md).

Quick start

uv venv && uv pip install -e ".[dev]"
uv run pytest tests/unit                  # no downloads needed
bash scripts/bootstrap_refs.sh            # reference open-source repos → refs/ (oracles)
bash scripts/fetch_data.sh p0             # ~1.4 GB of public test data → data/
bash scripts/make_oracle_gtcs.sh          # builds gtc2vcf, writes oracle GTCs
bash scripts/make_oracle_qc.sh            # locus-summary oracle (BeadArrayFiles, separate venv)
bash scripts/fetch_data.sh p6             # GRCh38 FASTA (~0.9 GB download, 3.1 GB unpacked)
bash scripts/make_oracle_vcf.sh           # gtc2vcf oracle VCF for the P6 tests
uv run pytest tests/oracle                # real-data acceptance tests (add -m "not slow" to skip the long ones)
uv run simurg inspect data/p0/gsa_v4_pgx/idats_Demo_36/idats_Demo_36/207895980019/207895980019_R03C01_Grn.idat
bash examples/gsa_demo.sh results/gsa_demo 6   # end-to-end run on 6 demo samples

Vendor data files are downloaded for personal research use only and are never committed. See THIRD_PARTY_NOTICES.md.

S
Description
SimurgArray — personal research toolkit for Illumina Infinium genotyping arrays (IDAT→GTC→VCF, QC, CN, PGx)
Readme MIT
6.2 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 89.8%
Shell 3.9%
JavaScript 3.5%
Rust 2.1%
CSS 0.3%
Other 0.3%