Transfer gene annotations between genome assemblies by matching the method to the divergence: coordinate liftover (UCSC liftOver, CrossMap) for same-species version updates and intervals, Liftoff for same/close-species gene models, miniprot for protein-level cross-species transfer, and TOGA/GeMoMa/CAT for distant clades. The orienting principle: a lift is geometry, not biology - a successful coordinate placement says nothing about whether the gene is intact, transfer can only reproduce what the reference annotated (reference bias), and the unmapped file is the most information-rich output. Validate every transfer against the target before trusting it.
# Feature/sequence projection
pip install liftoff lifton
conda install -c bioconda miniprot
# Coordinate liftover (same-species intervals / build updates)
conda install -c bioconda ucsc-liftover crossmap
# Python utilities
pip install gffutils biopython pandas
Tell your AI agent what you want to do: - "Transfer the reference annotation to my new same-species assembly and check ORF integrity" - "Lift over my GRCh38 variant coordinates to T2T-CHM13" - "Map proteins from a related species to my genome (cross-species)" - "Did the transfer silently lose any gene families - read the unmapped file"
"Use Liftoff to transfer the GENCODE annotation to my new human assembly, then run the ORF-integrity check and classify the unmapped file."
"Lift over my GRCh37 ClinVar coordinates to GRCh38 with the correct chain - watch the inverted regions and indels."
"Align proteins from a related species to my genome with miniprot and flag any frameshift/stop tags as pseudogenized."
"These species are tens of millions of years apart - should I use TOGA instead of coordinate liftover?"
"Compare the transferred annotation to the reference - transfer rate, identity distribution, and BUSCO on the lifted set."
"How many transferred gene models have intact open reading frames vs internal stops?"
-polish + ORF check, identity distribution, BUSCO on the lifted set-a/-s to rescue features - a 35%-coverage hit is usually a paralog/pseudogene; default-threshold failure is often real signal.