hg19 and GRCh37: what they are, how they differ, and when to still use them
hg19 is the UCSC Genome Browser’s packaging of GRCh37, the human reference assembly released by the Genome Reference Consortium in February 2009. The underlying chromosome sequences are identical, so “hg19 coordinates” and “GRCh37 coordinates” mean the same position on chr1 through chrX. They differ in naming (chr1 versus 1), in the mitochondrial sequence, and in which unplaced contigs and alternate haplotypes are included. GRCh38 is a different assembly with different coordinates: chr1 is 249,250,621 bp in hg19 and 248,956,422 bp in GRCh38, and essentially no position past the first few megabases of any chromosome lines up. If you are starting new work today, align to GRCh38 and keep hg19 only as a lookup key for legacy annotation.
hg19, GRCh37, b37 and hs37d5: what differs
Four FASTA files circulate under the GRCh37 umbrella, and mixing them is the single most common way to waste a weekend.
- hg19 (UCSC): 93 sequences. Chromosomes are named
chr1…chr22,chrX,chrYandchrM. Added to these arechr*_random,chrUn_gl000*, and nine alternate haplotype scaffolds (chr6_ssto_hap7and friends). Sort order ischr1, chr2, chr3, …, chr10. The mitochondrion is NC_001807, 16,571 bp, an older sequence that is not the revised Cambridge Reference Sequence. - b37 /
human_g1k_v37.fasta(1000 Genomes, Broad): same nuclear sequence. Chromosomes are named1…22,X,YandMT. TheMTsequence is rCRS (NC_012920), 16,569 bp. Karyotypic sort order. - hs37d5: b37 plus a decoy contig built from sequences absent in the reference. Reads that would otherwise pile up on paralogous regions land on the decoy instead, which lowers false positive calls in segmental duplications.
- Homo_sapiens_assembly19.fasta (GATK legacy bundle): b37 naming with the rCRS mitochondrion.
Practical consequence: mtDNA variant positions from an hg19 BAM are offset from rCRS positions after roughly position 3,107, where hg19’s chrM carries a placeholder N and two extra bases relative to rCRS. Any mitochondrial haplogroup or heteroplasmy call made against hg19’s chrM has to be re-derived. Renaming the contig does not fix it. If your pipeline touches mtDNA at all, use a b37- or GRCh38-style reference where chrM is rCRS.
How to tell which build a file uses
Check the sequence dictionary. The filename is not proof of the build.
samtools view -H sample.bam | grep '^@SQ' | head -3
# SN:chr1 LN:249250621 -> hg19 / GRCh37
# SN:chr1 LN:248956422 -> GRCh38
# SN:chr1 LN:248387328 -> T2T-CHM13v2.0
For a VCF, read the header (##reference=, ##contig=<ID=1,length=249250621>). If the header is empty, which is common for VCFs that have been through five tools, spot-check a few known positions: rs334 (HbS) is chr11:5,248,232 in GRCh37 and chr11:5,227,002 in GRCh38. For a plain FASTA, samtools faidx ref.fa && head -3 ref.fa.fai gives you names and lengths in one shot.
Consumer array exports are almost all GRCh37. 23andMe v5 chips report build 37 positions, as do most AncestryDNA files, and dbSNP’s b37 coordinate mapping is what those files were annotated against. The gnomAD v2.1.1 release (125,748 exomes, 15,708 genomes) is GRCh37. Releases v3 and v4 of gnomAD are GRCh38 only. ClinVar publishes parallel GRCh37 and GRCh38 VCFs, which makes it one of the few resources where you can stay on hg19 without losing currency.
What GRCh38 fixed, and what it introduced
GRCh38 closed hundreds of gaps and added centromere models built from alpha satellite consensus. It also corrected a large number of sequence errors and expanded alternate loci to represent population diversity at the MHC, KIR, and other structurally variable regions. For anything involving segmental duplications, copy number, or genes near old assembly gaps, GRCh38 alignment is measurably cleaner.
It also introduced false duplications. Several regions were erroneously duplicated in GRCh38, including sequence overlapping U2AF1 on chr21, and CBS, CRYAA, and KCNE1. Reads map to both copies, MAPQ drops to 0, and variant callers emit nothing. The fix is to use an analysis set FASTA (GCA_000001405.15_GRCh38_no_alt_analysis_set.fna) where those duplicates and the chrY pseudoautosomal regions are hard-masked, rather than the plain primary assembly. Do not align to a GRCh38 FASTA that includes ALT contigs unless your aligner is ALT-aware (bwa-mem2 with bwa-postalt.js, or bwa mem plus the .alt index file). Alignment to ALT contigs without post-processing splits read support and silences variants across the MHC.
Build choice is not neutral for expression work either. A systematic comparison of GRCh37 and GRCh38 RNA-seq processing found meaningful differences in gene quantification and in which expression outliers are called, with downstream effects on rare disease interpretation.1 If you are joining RNA-seq to a genome, process both on the same build rather than lifting one side over.
Moving between builds
Rank the options in this order.
- Realign from FASTQ. If you hold the raw reads, this is the correct answer and it is not expensive. Roughly 6-10 CPU-hours for a 30x genome with
bwa-mem2 mem -t 16 -K 100000000 -Y, plussamtools sortandgatk MarkDuplicatesSpark. Nothing is approximated. - CrossMap for coordinates you must convert.
CrossMap vcf hg19ToHg38.over.chain.gz in.vcf GRCh38.fa out.vcfchecks the reference allele at the new position and flags REF/ALT swaps, which UCSCliftOveron a BED file will not do. PicardLiftoverVcfwithRECOVER_SWAPPED_REF_ALT=truedoes the same job and writes explicit rejects. - Never lift a BAM. Chain files are per-interval mappings. Applying them to alignments produces reads with CIGARs that no longer describe the reference they claim.
Expect 0.1-1% of positions to fail liftover, concentrated in the regions you care about most: segmental duplications, the MHC, and sequence that changed between builds. Always keep the reject file and look at it. Liftover failure is information. The rejected records are not noise.
The same caution applies to array annotation. Illumina 450k methylation probes were designed and mapped against earlier builds, and a substantial fraction map to multiple genomic locations, so probe-to-coordinate tables carry ambiguity independent of any build conversion you perform.2
When hg19 is still the right choice
Three cases. First, when you are joining against a resource that only exists on GRCh37, gnomAD v2 constraint metrics being the canonical example. Second, when you are reproducing a published analysis and want bit-level comparability. Third, when your entire input is a consumer array export on build 37 and you only need a handful of well-characterized SNP positions, where re-mapping buys you nothing.
Outside those cases, GRCh38 with a no-alt analysis set is the default. For hard regions, a second alignment against T2T-CHM13v2.0 is worth the extra compute. Those regions are centromeres, acrocentric short arms, the SMN1/SMN2 locus and KIR. The methods behind fully phased, gapless diploid assemblies are now mature enough that a personal reference is a realistic near-term object rather than a research demo.3
Interpretation of any specific variant, on any build, belongs with a clinical geneticist or genetic counselor. Coordinate arithmetic is a data problem. What a variant means for a person is not.
Questions people also ask
Is GRCh38 the same as hg19? No. hg19 is GRCh37 and hg38 is GRCh38. They are different assemblies with different coordinates. A position given without a build is ambiguous and, in genes near old gaps, can differ by hundreds of kilobases.
Are GRCh37 and hg19 the same?
The nuclear chromosome sequences are the same. The packaging differs: chr1 versus 1, a different mitochondrial sequence (16,571 bp NC_001807 in hg19 versus 16,569 bp rCRS in GRCh37/b37), and different sets of unplaced contigs and alternate haplotypes. Rename chromosomes with bcftools annotate --rename-chrs, but re-derive mitochondrial coordinates properly.
What is the reference genome hg19? A haploid mosaic consensus assembled largely from a small number of anonymous donors, released as GRCh37 in 2009 and published by UCSC as hg19. It is a coordinate system and a mapping target. The sequence is not any individual’s genome.
What is chromosome 19 responsible for? Chromosome 19 is roughly 58.6 Mb and has the highest gene density of any human chromosome, including the APOE region, the KIR cluster, and many zinc-finger gene families. It is unrelated to the name “hg19”, which means human genome build 19.
Does sample type affect which build I should use? No, but it affects data quality upstream of the build decision. Saliva-derived DNA carries non-human (largely bacterial) reads that blood-derived DNA does not, which changes on-target rates and duplicate metrics in whole-genome sequencing.4
Footnotes
-
Rachel A. Ungar, Pagé C. Goddard, Tanner Jensen, et al. Impact of genome build on RNA-seq interpretation and diagnostics. The American Journal of Human Genetics, 2024. https://doi.org/10.1016/j.ajhg.2024.05.005 ↩
-
Xu Zhang, Wenbo Mu, Wei Zhang. On the Analysis of the Illumina 450k Array Data: Probes Ambiguously Mapped to the Human Genome. Frontiers in Genetics, 2012. https://doi.org/10.3389/fgene.2012.00073 ↩
-
Erich D. Jarvis, Giulio Formenti, Arang Rhie, et al. Semi-automated assembly of high-quality diploid human reference genomes. Nature, 2022. https://doi.org/10.1038/s41586-022-05325-5 ↩
-
Roderick Yao, Oyediran Akinrinade, Marie Chaix, et al. Quality of whole genome sequencing from blood versus saliva derived DNA in cardiac patients. BMC Medical Genomics, 2020. https://doi.org/10.1186/s12920-020-0664-7 ↩
Oak 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.