Pharmacogenomic Star-Allele Calling: Why Clinical PGx Results Can't Be Read Off a VCF
Zetobit · Bioinformatics Insight Series
Pharmacogenomic Star-Allele Calling: Why Clinical PGx Results Can't Be Read Off a VCF
A pharmacogenomic report answers a different question than a variant caller does. It doesn't ask which bases changed — it asks which two versions of the gene a patient inherited, and how many copies. A VCF cannot say.
A clinician orders a pharmacogenomic panel before starting a patient on codeine. The question is simple and clinical: will this patient metabolize the drug normally, too slowly to get relief, or so fast that a standard dose becomes dangerous? The answer the lab must return is not a list of variants. It is a diplotype — the pair of gene versions inherited from each parent, such as CYP2D6 *1/*4 — which maps to an activity score, which maps to a metabolizer phenotype, which maps to a dosing recommendation.
A standard variant pipeline produces none of that. It produces a VCF: a per-position list of where this sample differs from the reference. Getting from that list to a diplotype is not a formatting step. It is a separate inferential problem that the VCF, by its structure, is missing the information to solve. This piece is about that gap — why it exists, where it bites hardest, and what a real PGx pipeline has to do instead.
The unit of the answer is the haplotype, not the position
A star allele (*2, *4, *17) is defined by a specific combination of variants occurring together on the same physical chromosome. That last clause is the whole problem. A VCF reports genotypes position by position — this site is heterozygous, that site is heterozygous — but it does not, on its own, say which alleles sit together on the same strand. That is phase, and short-read callers discard it by default because reads are too short to link distant variant sites.
Consider a sample heterozygous at two positions, one defining part of *2 and one defining part of *17. Did the patient inherit *2 on one chromosome and *17 on the other, or a single chromosome carrying both variants (a different allele entirely) opposite a reference copy? The unphased VCF is identical in both cases. The diplotypes are different, the activity scores are different, and the dosing guidance can be different. Without phase, the caller has the right variants and still cannot name the alleles.
Copy number is a variable a VCF has no field for
Phase is only half the gap. The other half is dosage. CYP2D6 is subject to whole-gene deletions and duplications, and the phenotype depends on how many functional copies are present.1 Two functional copies on one chromosome (a duplication of a normal-function allele) can push a patient into ultrarapid-metabolizer territory; a gene deletion removes a copy entirely. CPIC's activity-score system is explicitly built to add per-allele activity values across the diplotype, and an activity score above 2.25 defines the ultrarapid class that carries a hard recommendation against codeine and tramadol.2
A standard SNV/indel VCF simply has no field for "this gene is present in three copies." Copy number has to be inferred separately — typically from read depth normalized against a control region — and then folded back into the star-allele call before an activity score means anything. Studies interrogating structural variation directly have shown it measurably improves the correlation between genotype and actual enzyme activity: incorporating structural variants raised the share of metabolic variability explained by activity score, versus diplotypes that ignored it.3 A pipeline blind to copy number is not merely incomplete; it is systematically miscalling the highest-risk patients.
The pseudogene next door makes even the SNVs unreliable
Underneath phase and copy number sits the problem the segmental-duplication piece in this series described: CYP2D6 is flanked by the pseudogenes CYP2D7 and CYP2D8, sharing roughly 94% identity, and it forms hybrid genes — CYP2D6::CYP2D7 and CYP2D7::CYP2D6 arrangements — with its neighbor.4 Short reads from these regions map ambiguously, so even the per-position genotypes feeding the star-allele call can be wrong, and hybrid structures can be missed entirely. CYP2D6 is only 4.4 kb long and among the most polymorphic genes in the genome, with well over 100 star alleles spanning SNVs, indels, and structural rearrangements — and no current short-read tool reliably resolves the small and structural variants together in one pass.4
The layers compound. Ambiguous alignment corrupts the SNVs; missing phase prevents assembling correct SNVs into the right allele; missing copy number prevents converting alleles into an activity score. Each layer can be individually plausible and collectively wrong — and the failure surfaces not as an error, but as a confident phenotype call that sends the wrong dose to the pharmacy.
Why the same sample yields different calls
The practical consequence is that star-allele calls are only as trustworthy as the data type and tool behind them. Benchmarking against the CDC's GeT-RM consensus diplotypes has shown drastic variation in CYP2D6 calls for the same samples run as high-coverage WGS, low-coverage WGS, and exome — because coverage and uniformity determine whether copy number and hybrid structure can be recovered at all.5 Dedicated callers exist precisely because a general pipeline cannot do this: tools like Stargazer, StellarPGx, Aldy, and PharmCAT each combine SNV genotypes, read-depth-based copy-number inference, and star-allele definition tables to produce a diplotype, and even among these, concordance is imperfect and often reconciled with an ensemble approach.6
Independently, a lab reference-material survey found little consistency in which CYP2D6 alleles were even included across clinical tests from different laboratories, and many assays were never designed to detect CNVs or structural variants in the first place.7 "We ran a PGx panel" is not a specification. Which alleles, which structural events, and which data type were in scope determines what the result can and cannot mean.
What a real PGx pipeline has to do
Producing a defensible star-allele result is a multi-stage inference, not a lookup on a VCF:
- Resolve alignment in the paralog region — handle CYP2D6/CYP2D7/CYP2D8 ambiguity so the per-position genotypes are trustworthy before anything is built on them.
- Establish phase — determine which variants lie on the same chromosome, by read-backed phasing, statistical phasing, or long reads that span the defining sites on a single molecule.4
- Call copy number and structural/hybrid alleles — from normalized read depth against a control, so duplications, deletions, and hybrids enter the diplotype rather than being silently dropped.3
- Match to allele-definition tables — map the phased, copy-aware haplotypes to PharmVar/CPIC star-allele definitions, using a maintained, versioned definition set.6
- Translate to phenotype explicitly — sum activity values to an activity score and to a metabolizer class, and report which alleles and structural events were interrogated and which were out of scope.2
Long-read sequencing is increasingly the clean way to collapse the first three steps, since a read spanning the whole locus can phase variants and reveal structure on a single molecule.4 But whatever the platform, the discipline is the same: the pipeline must know it is producing a diplotype, not a variant list, and must declare the boundary of what it examined. A phenotype call with no statement of scope is not a safer result than "indeterminate — reflex to targeted PGx assay." It is a more dangerous one.
The takeaway
Pharmacogenomics is the clearest case in clinical genomics where the deliverable is not the variant. The clinician needs a diplotype, an activity score, and a phenotype — and none of those can be read directly off a standard VCF, because the VCF lacks phase, lacks copy number, and often rests on genotypes corrupted by a pseudogene next door. Treating PGx as a post-processing step on a general pipeline is how the highest-risk patients — the ultrarapid metabolizer handed a normal dose of codeine — get missed. The star allele is the unit of the answer, and it has to be built deliberately, from data that can actually support it.
References
- Clinical Pharmacogenetics Implementation Consortium (CPIC) Guideline for CYP2D6 and Atomoxetine Therapy — supplement (activity score, copy number). cpicpgx.org
- CPIC Guideline for CYP2D6, OPRM1, and COMT and opioid therapy (activity score >2.25 = ultrarapid; codeine/tramadol avoidance). cpicpgx.org
- Interrogation of CYP2D6 structural variant alleles improves the correlation between CYP2D6 genotype and CYP2D6-mediated metabolic activity. Clin Transl Sci / Pharmacol. PMID 31536170
- Rubben K, et al. Cas9 targeted nanopore sequencing with enhanced variant calling improves CYP2D6-CYP2D7 hybrid allele genotyping. PLOS Genet. 2022. PMC9534437
- Calling CYP2D6 — sequencing-type comparison against GeT-RM. PharmCAT documentation. pharmcat.clinpgx.org
- A systematic comparison of pharmacogene star-allele calling bioinformatics algorithms: a focus on CYP2D6 genotyping. npj Genom Med. 2020. nature.com
- Recommendations for Clinical CYP2D6 Genotyping Allele Selection (AMP/CAP/DPWG/ESPT consensus). J Mol Diagn. 2021. jmdjournal.org

