feat(data): build a case from a real published patient
`make published-case` reads a GA4GH phenopacket from Monarch's Phenopacket Store and takes two things from it verbatim: the HPO terms the authors reported and the variant they called causal. The default is the TGFBR2 proband from Loeys et al., Nat Genet 2005 (doi:10.1038/ng1511), the paper that first defined Loeys-Dietz syndrome -- 30 reported terms and NM_003242.6:c.1069G>T p.(Gly357Trp). The rest of that patient's genome is not public, so background variants come from GIAB HG002 around the locus. They are drawn from coding exons where possible, via Ensembl's REST API: of ~4,000 HG002 variants in the window only 9 are coding, so a random sample is entirely intronic, the consequence filter discards all of it, and the causal variant is left as the only candidate -- a funnel that proves nothing. The real run ranks TGFBR2 first at 0.897 against an OSBPL10 missense at 0.547. Both are rare missense variants the model scores identically (0.887); only the phenotype separates them, which is the argument for phenotype-driven triage in one table. Documented with three caveats rather than left implicit: the phenotype match is partly circular because HPO's gene annotations are themselves curated from published cases; rarity contributes nothing without the VEP cache (--af_gnomade is rejected with --database, and plain --af returns nothing even for rs429358 at ~15% global frequency); and one healthy genome is not a diagnostic exome.
This commit is contained in:
@@ -33,6 +33,7 @@ make up # postgres + api + web + mlflow via docker-compose
|
||||
make migrate # alembic upgrade head
|
||||
make hpo # HPO gene-to-phenotype annotations: what the ranking matches against
|
||||
make demo-case # a simulated proband: GIAB background + one ClinVar pathogenic variant
|
||||
make published-case # a real published patient: their reported phenotype and causal variant
|
||||
make test # api, ml, loader and web tests (no Docker needed for the DB tests)
|
||||
```
|
||||
|
||||
@@ -41,6 +42,15 @@ give it the phenotype of the planted disease (for the default NF2 case: bilatera
|
||||
schwannoma, sensorineural hearing impairment, tinnitus, meningioma, cataract), and analyse it.
|
||||
The planted variant should come back ranked first.
|
||||
|
||||
`make published-case` is the same idea with nothing invented. It builds a case from a GA4GH
|
||||
phenopacket curated from a peer-reviewed case report — by default the *TGFBR2* proband from
|
||||
Loeys et al., *Nat Genet* 2005, [10.1038/ng1511](https://doi.org/10.1038/ng1511), the paper that
|
||||
first described Loeys-Dietz syndrome. The patient's 30 reported HPO terms and their causal
|
||||
variant come straight from the publication; the background variants come from GIAB HG002, because
|
||||
the rest of that patient's genome is not public. It writes the phenotype list alongside the VCF,
|
||||
so the case can be created exactly as reported. See [docs/data.md](docs/data.md) for the
|
||||
provenance and for what this case does and does not demonstrate.
|
||||
|
||||
The docker-compose API has no Nextflow, so "Run VEP annotation" marks the job failed with the
|
||||
command to run instead. With Nextflow and Docker on the host, a VEP cache in `pipeline/cache/vep`
|
||||
and a VCF under `data/` (see [data/README.md](data/README.md)):
|
||||
|
||||
Reference in New Issue
Block a user