896eb991fff50f44f18811a05171e36fa111163d braney Thu Sep 24 17:13:20 2026 -0700 quickLift: leave empty blocks out of a protein alignment before lifting it, refs #38249 The UniProt bigPsl files store block sizes in bases, and pslFromBigPsl divides them by three, so a block shorter than a codon loads with size 0. pslTransMap rejects such an alignment and aborts, which replaced the whole lifted SwissProt track with a BUG message. About one alignment in eight has a block like this. quickLiftPsl now lifts a copy with the empty blocks removed. quickLiftTester has a new case in the shape of Q96ME1-2. diff --git src/hg/lib/tests/expected/quickLiftTest src/hg/lib/tests/expected/quickLiftTest index 317c5d94a18..8506042b09a 100644 --- src/hg/lib/tests/expected/quickLiftTest +++ src/hg/lib/tests/expected/quickLiftTest @@ -28,22 +28,31 @@ == mRNA, chain on the same strand chain: t=chrSrc:100-400 q=chrRef:100-400 qStrand=+ blocks 100-400/100-400 before 300 0 0 0 0 0 0 0 + mrna 300 0 300 chrSrc 1000 100 400 1 300, 0, 100, strand='+' isProtein=0 qSize=300 blockSizes[0]=300 pslCheck errors=0 lifted 300 0 0 0 0 0 0 0 + mrna 300 0 300 chrRef 1000 100 400 1 300, 0, 100, strand='+' isProtein=0 qSize=300 blockSizes[0]=300 pslCheck errors=0 == mRNA, chain on the opposite strand chain: t=chrSrc:600-900 q=chrRef:600-900 qStrand=- blocks 600-900/600-900 before 300 0 0 0 0 0 0 0 + mrna 300 0 300 chrSrc 1000 600 900 1 300, 0, 600, strand='+' isProtein=0 qSize=300 blockSizes[0]=300 pslCheck errors=0 lifted 300 0 0 0 0 0 0 0 - mrna 300 0 300 chrRef 1000 100 400 1 300, 0, 100, strand='-' isProtein=0 qSize=300 blockSizes[0]=300 pslCheck errors=0 +== protein, a block shorter than a codon +chain: t=chrSrc:100-700 q=chrRef:100-700 qStrand=+ blocks 100-700/100-700 +before 90 0 0 0 0 0 0 0 -+ prot 100 0 100 chrSrc 1000 100 400 2 0,90, 0,10, 100,130, +Error: invalid PSL: prot:0-100 chrSrc:100-400 -+ before + prot query block 0 start 100 >= qEnd 100 + strand='-+' isProtein=1 qSize=100 blockSizes[0]=0 pslCheck errors=1 +lifted 90 0 0 0 0 0 0 0 +- prot 100 0 90 chrRef 1000 130 400 1 90, 0, 600, + strand='+-' isProtein=1 qSize=100 blockSizes[0]=90 pslCheck errors=0 + == no chain over the alignment chain: t=chrSrc:100-400 q=chrRef:100-400 qStrand=+ blocks 100-400/100-400 before 100 0 0 0 0 0 0 0 ++ prot 100 0 100 chrSrc 1000 700 1000 1 100, 0, 700, strand='++' isProtein=1 qSize=100 blockSizes[0]=100 pslCheck errors=0 lifted did not lift passed