How to Read Your Genetic Test Results
By the end of this guide you will have taken a genetic test result from a PDF summary to a set of files you can query. You will also know three things about it that the report does not tell you. The first is which variants in the file have real evidence behind them. The second is which regions of your genome the test could not read at all. The third is which findings need a clinical geneticist rather than a terminal. You need the raw data from your test, which means a VCF file at minimum and ideally a CRAM or BAM alignment as well. You need a Linux or macOS machine with 16 GB of RAM and roughly 100 GB of free disk. You also need the following tools.
bcftools(1.19 or newer)samtoolsmosdepth- Ensembl VEP or SnpEff
bedtools
Everything below assumes you are working with a human genome aligned to GRCh38. If you only have a PDF and a list of variant names, skip to step 5, which works on a single variant.
1. Establish what test you had
The single most common interpretation error is treating a narrow test as a broad one. A targeted panel reports on a fixed gene list, typically 20 to 500 genes, and says nothing about the rest of the genome. Exome sequencing covers roughly 1 to 2 percent of the genome, the protein-coding portion, and misses deep intronic and most regulatory variation. Genome sequencing covers nearly everything at a lower per-base depth, usually 30x, and detects structural and non-coding variants the other two cannot 1. A consumer genotyping array is different in kind: it interrogates a fixed set of roughly 600,000 to 1,000,000 pre-selected positions and does not sequence anything, so an absence of a variant from an array result is not evidence that the variant is absent from you.
Write down the assay, the gene list if there is one, the reference build, and the reported mean depth before you look at a single variant. A “negative” result means only that nothing reportable was found within the assay’s reach 2.
2. Verify the file before you trust it
Open the VCF header and confirm the reference build, the caller, and the sample name.
bcftools view -h sample.vcf.gz | grep -E '^##(reference|source|contig=<ID=chr1,)'
bcftools query -l sample.vcf.gz
If the contig lines read ID=1,length=249250621 you are on GRCh37. If they read ID=chr1,length=248956422 you are on GRCh38. Coordinates differ by millions of bases between builds, so annotating a GRCh37 VCF against a GRCh38 ClinVar file produces silent nonsense. Lift over with CrossMap or, better, ask the lab to reissue on the build their annotation used.
Next, sanity-check the variant counts. A 30x germline genome from one person should yield roughly 4.5 to 5.5 million SNVs and 800,000 to 1,000,000 short indels against GRCh38, with a transition/transversion ratio near 2.0 genome-wide 3. Counts far outside that range usually indicate contamination, an unusual filtering step, or a joint-genotyped multi-sample file.
bcftools stats sample.vcf.gz | grep -E '^SN|^TSTV'
Finally, confirm the file is yours. If you have two datasets from different vendors, or an array result alongside a sequencing result, check genotype concordance at shared sites with somalier extract followed by somalier relate. Two files from the same person should show relatedness near 1.0 and matching inferred sex. Sample swaps in clinical laboratories are rare but not hypothetical, and this check costs two minutes.
3. Annotate with consequence, population frequency, and ClinVar
Raw VCF rows are coordinates and alleles. Interpretation needs three annotations layered on top: what the variant does to a transcript, how common it is in large population cohorts, and what curators have already concluded about it.
Run VEP with the MANE Select transcript set so that each gene has one canonical answer rather than forty transcript-specific ones:
vep -i sample.vcf.gz -o annotated.vcf.gz --vcf --compress_output bgzip \
--assembly GRCh38 --cache --offline --mane_select --pick_allele_gene \
--symbol --canonical --hgvs --numbers \
--af_gnomadg --af_gnomade --max_af \
--plugin CADD,whole_genome_SNVs.tsv.gz \
--custom clinvar_20250xxx.vcf.gz,ClinVar,vcf,exact,0,CLNSIG,CLNREVSTAT,CLNDN \
--fork 4 --buffer_size 20000
Then pull out everything ClinVar calls pathogenic or likely pathogenic:
bcftools +split-vep annotated.vcf.gz -f '%CHROM\t%POS\t%REF\t%ALT\t%SYMBOL\t%HGVSc\t%HGVSp\t%ClinVar_CLNSIG\t%ClinVar_CLNREVSTAT\t%MAX_AF\t[%GT\t%DP]\n' \
-i 'ClinVar_CLNSIG ~ "athogenic"' -d | \
awk -F'\t' '$8 !~ /Conflicting/ && ($10 == "" || $10 < 0.01)'
Expect this list to be longer than you want, in the range of 20 to 80 rows for a genome. Most of those rows will not survive the next two steps.
4. Filter to genes where a finding would change something
A pathogenic-looking variant in a gene with no established disease association, or in a recessive gene where you carry only one copy, is a different object from a truly actionable finding. We recommend starting with the American College of Medical Genetics secondary findings list (ACMG SF v3.2, 81 genes), because that gene set was assembled specifically on the criterion that a finding is medically actionable in an otherwise healthy person. Intersect your annotated calls with a BED file of those genes:
bedtools intersect -a annotated.vcf.gz -b acmg_sf_v3.2.grch38.bed -u -header \
| bgzip > acmg_region.vcf.gz
Then work outward: cancer predisposition genes, cardiomyopathy and arrhythmia genes, and the carrier-status genes relevant to reproductive planning. Keep the zygosity column in view. For an autosomal recessive condition, a single heterozygous pathogenic allele makes you a carrier, which matters for family planning and not for your own risk. Nine in ten people carry at least one recessive pathogenic allele of some kind.
The prior probability of a genuinely actionable finding is low. Studies sequencing healthy adults consistently find that only a small minority, on the order of a few percent, carry a pathogenic variant in a medically actionable gene. They also find that the interpretive burden of everything else is substantial 4. Knowing this in advance keeps you from over-reading a long candidate list.
5. Read the evidence behind a single variant
For each surviving candidate, go to the source. Open the variant in ClinVar (https://www.ncbi.nlm.nih.gov/clinvar/?term= plus the HGVS notation or rsID) and look first at the review status. Do not start with the classification. ClinVar assigns star ratings. Zero stars means an assertion with no assessment criteria provided, and one star means a single submitter with criteria. Two stars means multiple submitters agreeing, three stars means an expert panel such as ClinGen’s variant curation groups, and four stars means a practice guideline. A two-star or better pathogenic classification is worth acting on by taking it to a clinician. A one-star classification from a single submitter in 2014, with no supporting literature, frequently does not survive re-review.
Cross-check the population frequency. gnomAD v4 includes over 800,000 exomes and 76,000 genomes. A variant claimed to cause a severe dominant childhood-onset condition should be essentially absent from that dataset. If you see an allele frequency of 0.5 percent in any ancestry group, the pathogenic claim is almost certainly a historical artifact of small early studies. This filter alone has retired a large number of once-reported disease variants.
Then read the ACMG/AMP criteria the classification rests on: is it a nonsense variant in a gene where loss of function is the established mechanism (PVS1), or a missense variant supported only by computational prediction (PP3)? Computational scores such as CADD, REVEL, and AlphaMissense are useful for ranking candidates and weak as standalone evidence 2. Variants of uncertain significance are the normal output of this process, not a failure of it, and the reading of a VUS is that it does not change what you know 5.
If a variant matters to you, it should be confirmed on an orthogonal platform before any clinical decision rests on it. Sanger sequencing of the specific position remains the standard confirmation for short variants, and a clinical laboratory must perform it. A research-grade or direct-to-consumer sequencing result should never be used as the basis for a medical decision without confirmation in a clinically accredited laboratory and review by a genetic counselor or medical geneticist.
6. Find out what the test could not see
This is the step that separates a careful reading from a credulous one, and almost no report covers it. Every test has blind spots, and a negative result is only as meaningful as the coverage behind it.
Compute per-base depth across your genes of interest:
mosdepth --by acmg_sf_v3.2.grch38.bed --thresholds 1,10,20,30 \
--fast-mode sample sample.cram
zcat sample.thresholds.bed.gz | awk 'NR>1 && $6/($3-$2) < 0.95'
Any exon where fewer than 95 percent of bases reach 20x has not been adequately interrogated. Recurrent offenders include GC-rich first exons, and genes with high-identity pseudogenes such as PMS2, SMN1, and CYP21A2, where short reads cannot be placed unambiguously.
Three classes of variation are routinely missed by standard short-read pipelines and standard filtering. Copy number variants and exon-level deletions require a dedicated caller. For genomes, run manta or GATK gCNV, and note that panel and exome tests often use read-depth CNV calling with poor sensitivity for single-exon events. Short tandem repeat expansions are the mechanism behind conditions such as Huntington disease and fragile X. They need ExpansionHunter with a known-locus catalog, and long expansions beyond the read length are sized only approximately. Deep intronic and regulatory variants are captured by genome sequencing but are usually filtered out before reporting because nobody can interpret them at scale. Genome sequencing recovers a meaningful fraction of these missed cases. In hypertrophic cardiomyopathy cohorts, whole-genome sequencing identified pathogenic variants that prior panel testing had not, including structural and non-coding ones 6.
7. Extract pharmacogenomic haplotypes
Pharmacogenes are called by star alleles, which are haplotypes rather than single positions, so a raw VCF lookup of one rsID gives the wrong answer. Run PharmCAT, which takes a preprocessed VCF and emits diplotypes and CPIC-based phenotype assignments:
pharmcat_pipeline sample.vcf.gz -o pharmcat_out/
CYP2D6 is the hard case: it has common gene deletions, duplications, and a hybrid with the CYP2D7 pseudogene, and short-read data alone often cannot resolve the copy number. PharmCAT can take CYP2D6 calls from Cyrius, which is purpose-built for this locus. Treat the output as information about metabolizer status to give to a prescribing clinician. Do not change anything you are taking on the basis of a star allele call. Any change is a conversation with the person who wrote the prescription.
8. Put polygenic scores in their place
Polygenic scores sum thousands of small-effect common variants into a single number, and they are computed from the same VCF with plink2 --score against a published weight file from the PGS Catalog:
plink2 --vcf sample.vcf.gz --score PGS000123.txt 1 4 6 header cols=+scoresums \
--out pgs_t2d
The number is meaningless without a reference distribution, and the reference distribution is ancestry-specific: scores trained in European-ancestry cohorts lose a substantial fraction of their predictive accuracy in other populations. A percentile from a single-sample computation is not interpretable unless you project your genotypes into the same principal-component space as the training cohort. We treat polygenic scores as a research-grade signal that can prioritize which measurements to repeat over time. We do not treat them as a result on par with a monogenic finding 7.
Common problems
The build mismatch is the most frequent failure, and it is silent: annotations attach cleanly to the wrong coordinates and you get a plausible-looking list of variants that belong to someone else’s genome. Always check the contig lengths in the header first.
Multi-allelic sites and unnormalized indels break ClinVar matching. Run bcftools norm -m -any -f GRCh38.fa -c s before annotation, or you will miss real hits because your representation of an indel differs from the database’s by one left-aligned base.
Filtering too hard is as damaging as not filtering at all. Dropping everything below 1 percent allele frequency removes common pharmacogenomic alleles and some founder variants that are genuinely common in specific populations. Use gene-set-specific thresholds rather than one global cutoff.
Conflicting ClinVar entries are common and are not noise to be ignored. When one submitter says pathogenic and three say benign, the resolution usually lies in the submission dates and the evidence codes, and expert panel assertions outrank individual laboratories.
Turnaround expectations are the last thing people get wrong. A targeted diagnostic panel typically returns in two to three weeks, exome and genome sequencing in four to twelve depending on whether family members are sequenced alongside. Reanalysis matters as much as the first pass: variant classifications change as databases grow, and a VUS today may be reclassified in either direction within a few years, so a result should be treated as a dated snapshot rather than a permanent answer 8. If a finding touches family members, they have their own claim on whether and how it reaches them, and the norms around returning results to relatives are still being worked out 9.
Footnotes
-
Gregory Costain, Ronald D. Cohn, Stephen W. Scherer, et al. Genome sequencing as a diagnostic test. Canadian Medical Association Journal, 2021. https://doi.org/10.1503/cmaj.210549 ↩
-
David B. Goldstein, Andrew Allen, Jonathan Keebler, et al. Sequencing studies in human genetics: design and interpretation. Nature Reviews Genetics, 2013. https://doi.org/10.1038/nrg3455 ↩ ↩2
-
Rachel L Goldfeder, Dennis P Wall, Muin J Khoury, et al. Human Genome Sequencing at the Population Scale: A Primer on High-Throughput DNA Sequencing and Analysis. American Journal of Epidemiology, 2017. https://doi.org/10.1093/aje/kww224 ↩
-
Noralane M. Lindor, Stephen N. Thibodeau, Wylie Burke. Whole-Genome Sequencing in Healthy People. Mayo Clinic Proceedings, 2017. https://doi.org/10.1016/j.mayocp.2016.10.019 ↩
-
Hubert E Blum, Konrad Oexle. Clinical Interpretation and Implications of Whole Genome Sequencing. Journal of Next Generation Sequencing & Applications, 2014. https://doi.org/10.4172/2469-9853.1000105 ↩
-
Richard D. Bagnall, Jodie Ingles, Marcel E. Dinger, et al. Whole Genome Sequencing Improves Outcomes of Genetic Testing in Patients With Hypertrophic Cardiomyopathy. Journal of the American College of Cardiology, 2018. https://doi.org/10.1016/j.jacc.2018.04.078 ↩
-
Brenda Wilson, Stuart G Nicholls. The Human Genome Project, and recent advances in personalized genomics. Risk Management and Healthcare Policy, 2015. https://doi.org/10.2147/rmhp.s58728 ↩
-
Sara Huston Katsanis, Nicholas Katsanis. Molecular genetic testing and the future of clinical genomics. Nature Reviews Genetics, 2013. https://doi.org/10.1038/nrg3493 ↩
-
Bartha Maria Knoppers, Ma’n H. Zawati, Karine Sénécal. Return of genetic testing results in the era of whole-genome sequencing. Nature Reviews Genetics, 2015. https://doi.org/10.1038/nrg3960 ↩
Woolf Software builds longitudinal molecular profiles of individuals: whole-genome sequencing, blood RNA sequencing, and plasma proteomics, delivered as a detailed report plus every data file. Build your profile.