pypi lifton 1.0.12
LiftOn v1.0.12

latest releases: 1.0.14, 1.0.13
16 days ago

Recovers far more genes between distantly related species, runs multi-threaded by default, and fixes a -copies bug that dropped every extra gene copy's transcript.

pip install -U lifton

Fixed

-copies extra gene copies kept only their gene line.

Liftoff suffixes every feature of an extra gene copy with _<n>, so a copy arrives as gene-X_1 / rna-X_1. LiftOn resolved the gene id back to the reference correctly but looked the transcript id up verbatim. rna-X_1 is not in the reference annotation, so the lookup failed and the transcript was skipped — taking every exon and CDS with it, while the already-written gene line remained. The result was a gene with no children, which is useless to every downstream tool.

Measured with -copies across the benchmark corpus: rice 539 of 815 copy genes, human → zebrafish 1,178 of 1,881, maize B73 → Mo17 1,079 of 2,716, human → xenopus 728 of 986, arabidopsis 161 of 223. On MANE v1.5 → CHM13v2.0, 472 of 509.

The reference transcript is now resolved the way the gene already was: the exact id first, and only on a miss the _<n> copy base — accepted only when that base really is a transcript of the reference gene the copy belongs to. Trying the exact id first is what keeps reference ids that genuinely end in _<int> intact; the rice reference, for instance, has trans-spliced part=2 genes such as gene-OrsajCp001_1 whose base gene-OrsajCp001 is the other half of the same gene.

With the aligner input held fixed the change is purely additive: no row lost, every changed row a parent that gained children, and columns 1-8 byte-identical on all of them — so no protein can have moved. Recovered exons and CDS match Liftoff's own coordinates exactly.

A gene emitted with no child features is now counted and reported — at the end of the run, and in run_manifest.json as genes_emitted_without_children. gff3-validate had always flagged these, but only as a warning.

Also in this release

  • Many more genes recovered between distant species. A second miniprot-only rescue sub-pass judges candidates by the fraction of the reference protein the hit aligns, instead of by a genomic-span ratio that scales with intron length. Whole-genome primary-assembly gene recall rises from 0.315 to 0.593 (human → zebrafish), 0.364 to 0.615 (human → chicken) and 0.361 to 0.638 (human → xenopus). --no-coverage-rescue-gate opts out.
  • Rescued genes carry their isoforms, each held to the same identity floor. --no-rescue-isoforms opts out.
  • Miniprot-derived models carry their stop codon. --no-orf-stop-completion opts out.
  • --threads N > 1 now fans out Steps 7 and 8 by itself, byte-identically to the serial path.
  • Flat prokaryotic annotations lift (top-level CDS, no gene) instead of selecting nothing (GH #37), and -dir/--intermediate-dir moves a run's artifact directory (GH #14).
  • Resource safety and diagnostics on very large targets (GH #71): aligners are scheduled to avoid overlapping index-memory peaks, and run_manifest.json records the schedule, exact commands, stage progress, return codes and signal names.

Full detail in CHANGELOG.md.

Don't miss a new lifton release

NewReleases is sending notifications on new releases.