This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Liftover failure with UCSC from hg38 to hg19

Is there a way to map this region? UCSC fails to map it:

#Split in new
chr1    145686997   148411223

And using rtracklayer gives this, crazy that it shows it in other chromosomes!

  seqnames     start       end     width strand
1     chr1  16830338 207808943 190978606      *
2     chr2 185430339 185430652       314      *
3    chr15  75867352  75867613       262      *
4    chr11  96457352  96457949       598      *
5     chrX 154139324 154139373        50      *
6    chr12  93794626  93794653        28      *
7     chr7  48030087  48030114        28      *
ucsc hg19 hg38 liftover

Is there a way to map this region?

Liftover from hg19 to hg38 or other way? You forgot to add that in the original question.

You can delete the other question you posted earlier since it appears to be a duplicate of this one.

Just in case there is a potential error, you can also post this on UCSC browsers google group help forum: https://groups.google.com/a/soe.ucsc.edu/g/genome

The other question is slightly different since it's about using rtracklayer and how to merge overlapping fragments. Thanks for the other suggestion!

1 answer

Hi _quantum_girl_,

A little crazy, maybe; it's an artifact predicated upon confluence of 3 issues I'll describe a bit below:

  1. The technologies and procedures used to create the assemblies you're working between.
  2. The sequence characteristics at the locus in question; here, 1q21.1 locus and the history of its assembly
  3. The tool chosen and exact settings used for the procedure (here, liftover; UCSC)

Both assemblies are predominantly clone-based — built on Bacterial Artificial Chromosome (BAC) tiling paths sequenced with Sanger capillary chemistry, with some WGS-derived components and modelled centromeric sequence in GRCh38. For perspective, Schneider et al. 2017 report that the RP11 BAC library contributes ~70% of the GRCh38 primary assembly, and the GRC FAQ notes that ~93% of GRCh38 comes from eleven genomic clone libraries collectively. The fundamental issue at the locus in question is that 1q21.1 is highly enriched for segmental duplications — specifically, NBPF genes containing DUF1220 domains (renamed "Olduvai" domains by Sikela & van Roy in 2018; the NBPF gene family name itself was retained) arrayed in tandem.

When clone-based finishing and assembly processed this region using diploid, polymorphic source material, the duplicated blocks may not be unambiguously resolved. Consequently, the pipelines struggled to distinguish allelic heterozygosity (normal variation between maternal and paternal chromosomes) from paralogy (distinct duplicated segments on the same chromosome). As a result, hg19 over-collapsed repetitive content in 1q21 and left 14 gaps across the 7.7 Mb 1q21.1–q21.2 region, with accompanying gene-order changes, copy-number errors, and two inverted loci later identified during re-finishing.

To resolve this at this specific locus for hg38, the GRC incorporated sequence from the CHM1 cell line to re-finish the 1q21 region; CHM1-derived BAC work informed the GRCh38 representation of 1q21 specifically, not the assembly as a whole. CHM1 is derived from a complete hydatidiform mole: karyotypically 46,XX but essentially homozygous / single-haplotype due to paternal uniparental isodisomy, which makes it effectively haploid at the sequence level. As O'Bleness et al. put it: "diploidization results in a 46 XX karyotype in which all allelic variation has been eliminated allowing the unambiguous delineation of duplicated DNA." With allelic variation eliminated, sequence differences among clone-derived alignments are attributable to paralogy rather than heterozygosity. This allowed the GRC to close all 14 gaps, correct gene-order and copy-number representations, and resolve two inverted (or possibly polymorphic) loci in the region (methodology is detailed in O'Bleness et al. 2014. The same single-haplotype CHM rationale — using the distinct CHM13 cell line with PacBio HiFi + Oxford Nanopore ultra-long reads (rather than BAC-based finishing) — later drove the T2T consortium's gapless assembly, Nurk et al. 2022.)

Because hg38 reorganized this sequence, attempting to map your 2.7 Mb bounding box (chr1:145686997-148411223) results in disjointed mapping. Note that this interval actually straddles the 1q21.1/1q21.2 cytoband boundary — 1q21.1 ends at chr1:147,500,000 and 1q21.2 begins at chr1:147,500,001 in hg38 — enclosing ~1.81 Mb of 1q21.1 and ~0.91 Mb of 1q21.2. It encompasses but is substantially broader than the recurrent distal 1q21.1 BP3–BP4 minimum region (chr1:147,105,904–147,917,509, per GeneReviews NBK52787).

The two tools you mentioned handle this structural fragmentation differently:

  • UCSC's liftOver: Applies the -minMatch parameter (compile-time default 0.95; UCSC recommends lowering this for cross-species chain files or poor-quality assemblies). minMatch is the minimum ratio of bases that must remap to the target — not a contiguity constraint and not a sequence-identity threshold. When the hg38 region fragments across many chains in hg19, no candidate mapping satisfies the minMatch threshold for a single returned interval, and liftOver writes the region to its .unmapped output with the reason Split in new (prefixed # as a comment in the unmapped file).
  • rtracklayer: Its public liftOver(x, chain) does not expose UCSC's minMatch knob in the public API; it returns a GRangesList whose elements may be one-to-many — that is, each input range can resolve to multiple mapped sub-ranges in the target. Since 1q21.1 is packed with duplications, small query sub-sequences can be mapped to paralogous loci, sometimes on other chromosomes (if that is what your first result-table row showed, those are the mapped fragments). Two distinct phenomena then inflate downstream summaries if you are not careful:
    1. Within-chromosome inflation from range(). range() in GenomicRanges returns bounds per (seqname, strand) pairing. If your lifted fragments span both arms of chr1 (e.g., a tiny paralog hit on 1p together with the main 1q hit), the per-chromosome range on chr1 covers the full span between them — producing the ~190 Mb interval you observed on chr1.
    2. Cross-chromosome fragments. Paralog hits on other chromosomes (e.g., chr2, chr15) remain as separate elements of the GRangesListrange() does not collapse them into a single synthetic interval across chromosomes, but they will still appear in a flattened result table and can mislead a casual summary() or a naïve min/max over coordinates.

You should not assume that a single continuous hg38 interval at this locus maps cleanly or biologically meaningfully onto hg19. The chain-alignment framework underlying liftOver does tolerate mismatches and gaps, so "collinearity" here means sufficient local syntenic alignability with consistent orientation and spacing — not identity. For a duplication-rich locus like 1q21.1, that assumption fails for several reasons:

  1. Internal expansions/collapses: hg38 unpacked collapsed repeat structures at this locus. A 50 kb repeat array in hg19 might correspond to 150 kb in hg38. Linear bounding-box math scales internal features incorrectly.
  2. Sequence inversions: hg38 corrected two inverted loci here. A linear translation of an outer bounding box ignores those directional flips and misplaces internal features.
  3. Fragmentation: A sequence represented as one continuous hg38 interval may correspond to multiple chain-aligned fragments in hg19 rather than a single syntenic interval (hence #Split in new).

Depending on your downstream application, consider one of the following:

1. Map features, not regions — but use the right tool per feature class

  • ATAC-seq / ChIP-seq peaks, narrow BED intervals, gene bodies: liftOver is generally reasonable. Lift your hg19 features up to hg38 and inspect the mapping.
  • SNPs / small variants: UCSC specifically discourages plain liftOver for SNP coordinate conversion. Use dbSNP's assembly-specific placements for rsIDs, or Ensembl's Assembly Converter (which wraps CrossMap) with post-checks. Note: NCBI Remap was retired in November 2023 and should no longer be used.

2. Extract and map the boundaries (heuristic only) If you need a broad hg19 bounding box solely to pre-filter a VCF or similar file, extract the 1-bp start and end breakpoints, lift them independently, and rebuild the interval. Caveat: at a locus with internal expansions, inversions, and fragmentation, an interval reconstructed this way is a heuristic for subsetting — it is not a biologically faithful mapping of the original region, and it should not be treated as equivalent to the source interval.

library(rtracklayer)
library(GenomicRanges)

# Define your region in hg38
gr_hg38 <- GRanges("chr1", IRanges(145686997, 148411223))

# Extract the start and end as independent 1-bp boundaries
boundaries_hg38 <- c(
  GRanges("chr1", IRanges(start(gr_hg38), start(gr_hg38))),
  GRanges("chr1", IRanges(end(gr_hg38),   end(gr_hg38)))
)

# Load your chain file
chain <- import.chain("hg38ToHg19.over.chain")

# Lift over the 1-bp boundaries independently
mapped_boundaries <- unlist(liftOver(boundaries_hg38, chain))
print(mapped_boundaries)

3. Use build-specific curated locus definitions If you are analyzing the recurrent 1q21.1 structural variant syndromes — the distal microdeletion syndrome (OMIM #612474) and microduplication syndrome (OMIM #612475) — prefer build-specific curated locus definitions from clinical resources such as ClinVar, DECIPHER, ClinGen dosage curations, and GeneReviews (NBK52787). These are the right primary source for defining the clinical locus in a given assembly; practical breakpoint coordinates vary by assay design and interpretation, so "native curated coordinates for your target build" is safer than lifting coordinates across assemblies.

This answer is gold! I hope to one day become as knowledgeable as you are :) Thanks for taking the time to explain it in detail.

yw. thx for taking time to accept etc. helps the forum

Note that UCSC also has a "liftOver" track, which means that you can visually see the mappings and check yourself where they go.

Log in to answer this question.