[med-svn] [Git][med-team/last-align][master] 3 commits: New upstream version 1250

Nilesh Patra (@nilesh) gitlab at salsa.debian.org
Sat Jul 10 21:45:45 BST 2021



Nilesh Patra pushed to branch master at Debian Med / last-align


Commits:
6c273eac by Nilesh Patra at 2021-07-11T02:05:35+05:30
New upstream version 1250
- - - - -
9e046023 by Nilesh Patra at 2021-07-11T02:05:35+05:30
Refresh patch

- - - - -
bf1432f5 by Nilesh Patra at 2021-07-11T02:05:35+05:30
Interim changelog entry

- - - - -


18 changed files:

- bin/maf-convert
- bin/maf-swap
- debian/changelog
- debian/patches/2to3.patch
- doc/lastal.rst
- doc/maf-convert.rst
- src/AlignmentWrite.cc
- src/LastalArguments.cc
- src/lastal.cc
- src/makefile
- + test/frameshift-new.maf
- + test/frameshift-old.maf
- test/last-test.out
- test/last-test.sh
- test/maf-convert-test.out
- test/maf-convert-test.sh
- test/maf-swap-test.out
- test/maf-swap-test.sh


Changes:

=====================================
bin/maf-convert
=====================================
@@ -25,6 +25,36 @@ try:
 except ImportError:
     pass
 
+aminoAcidCodes = {"ALA": "A",
+                  "CYS": "C",
+                  "ASP": "D",
+                  "GLU": "E",
+                  "PHE": "F",
+                  "GLY": "G",
+                  "HIS": "H",
+                  "ILE": "I",
+                  "LYS": "K",
+                  "LEU": "L",
+                  "MET": "M",
+                  "ASN": "N",
+                  "PRO": "P",
+                  "GLN": "Q",
+                  "ARG": "R",
+                  "SER": "S",
+                  "THR": "T",
+                  "VAL": "V",
+                  "TRP": "W",
+                  "TYR": "Y",
+                  "***": "*",
+                  "XAA": "X"}
+
+def standardGeneticCode():
+    aa = "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG"
+    b1 = "TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG"
+    b2 = "TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG"
+    b3 = "TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG"
+    return {x + y + z: a for a, x, y, z in zip(aa, b1, b2, b3)}
+
 def myOpen(fileName):
     if fileName == "-":
         return sys.stdin
@@ -67,24 +97,33 @@ def insertSize(row, letterSize):
 def matchAndInsertSizes(alignmentColumns, letterSizes):
     """Get sizes of gapless blocks, and of the inserts between them."""
     letterSizeA, letterSizeB = letterSizes
+    delInc = max(letterSizeA, 1)
+    delDiv = 1 if letterSizeA else 3
+    insInc = max(letterSizeB, 1)
+    insDiv = 1 if letterSizeB else 3
+    sizeDiv = max(delDiv, insDiv)
     delSize = insSize = subSize = 0
     for x, y in alignmentColumns:
         if x == "-":
             if subSize:
-                if delSize or insSize: yield str(delSize) + ":" + str(insSize)
-                yield str(subSize)
+                if delSize or insSize:
+                    yield str(delSize // delDiv) + ":" + str(insSize // insDiv)
+                yield str(subSize // sizeDiv)
                 delSize = insSize = subSize = 0
-            insSize += symbolSize(y, letterSizeB)
+            insSize += symbolSize(y, insInc)
         elif y == "-":
             if subSize:
-                if delSize or insSize: yield str(delSize) + ":" + str(insSize)
-                yield str(subSize)
+                if delSize or insSize:
+                    yield str(delSize // delDiv) + ":" + str(insSize // insDiv)
+                yield str(subSize // sizeDiv)
                 delSize = insSize = subSize = 0
-            delSize += symbolSize(x, letterSizeA)
+            delSize += symbolSize(x, delInc)
         else:
             subSize += 1
-    if delSize or insSize: yield str(delSize) + ":" + str(insSize)
-    if subSize: yield str(subSize)
+    if delSize or insSize:
+        yield str(delSize // delDiv) + ":" + str(insSize // insDiv)
+    if subSize:
+        yield str(subSize // sizeDiv)
 
 ##### Routines for reading MAF format: #####
 
@@ -120,8 +159,11 @@ def mafInput(opts, lines):
             beg = int(beg)
             span = int(span)
             seqLen = int(seqLen)
-            if "\\" in row or "/" in row or len(row) - row.count("-") < span:
+            rowLetters = len(row) - row.count("-")
+            if "\\" in row or "/" in row or rowLetters < span:
                 letterSize = 3
+            elif rowLetters > span:
+                letterSize = 0  # xxx means 3-letter codes like AlaCysAsp
             else:
                 letterSize = 1
             fields = seqName, seqLen, strand, letterSize, beg, beg + span, row
@@ -306,48 +348,83 @@ def mafConvertToChain(opts, lines):
 
 ##### Routines for converting to PSL format: #####
 
-def pslBlocks(opts, mafs, outCounts):
+def pslBlocks(opts, geneticCode, mafs, outCounts):
     """Get sizes and start coordinates of gapless blocks in an alignment."""
     # repMatches is always zero
     # for proteins, nCount is always zero, because that's what BLATv34 does
     normalBases = "ACGTU"
-    matches = mismatches = repMatches = nCount = 0
+    mismatches = repMatches = nCount = 0
 
     for maf in mafs:
         sLines = maf[1]
         fieldsA, fieldsB = pairOrDie(sLines, "PSL")
         letterSizeA, begA, endA, rowA = fieldsA[3:7]
         letterSizeB, begB, endB, rowB = fieldsB[3:7]
-
-        size = 0
-        for x, y in zip(rowA.upper(), rowB.upper()):
-            if x == "-":
-                if size:
-                    yield size, begA, begB
-                    begA += size * letterSizeA
-                    begB += size * letterSizeB
-                    size = 0
-                begB += symbolSize(y, letterSizeB)
-            elif y == "-":
-                if size:
-                    yield size, begA, begB
-                    begA += size * letterSizeA
-                    begB += size * letterSizeB
-                    size = 0
-                begA += symbolSize(x, letterSizeA)
-            else:
-                size += 1
-                if x in normalBases and y in normalBases or opts.protein:
-                    if x == y:
-                        matches += 1
-                    else:
+        rowA = rowA.upper()
+        rowB = rowB.upper()
+
+        if letterSizeA * letterSizeB < 1:
+            letterSpanA = 3 - letterSizeA * 2
+            letterSpanB = 3 - letterSizeB * 2
+            codeA = geneticCode if letterSizeA else aminoAcidCodes
+            codeB = geneticCode if letterSizeB else aminoAcidCodes
+            loopEnd = len(rowA)
+            i = j = 0
+            while j < loopEnd:
+                if rowA[j] == "-":
+                    if j > i:
+                        size = j - i
+                        yield size // 3, begA, begB
+                        begA += size // letterSpanA
+                        begB += size // letterSpanB
+                    begB += 1
+                    j += letterSpanB
+                    i = j
+                elif rowB[j] == "-":
+                    if j > i:
+                        size = j - i
+                        yield size // 3, begA, begB
+                        begA += size // letterSpanA
+                        begB += size // letterSpanB
+                    begA += 1
+                    j += letterSpanA
+                    i = j
+                else:
+                    k = j + 3
+                    if codeA.get(rowA[j:k], "X") != codeB.get(rowB[j:k], "X"):
                         mismatches += 1
+                    j = k
+            if j > i:
+                yield (j - i) // 3, begA, begB
+        else:
+            isProtein = opts.protein or letterSizeA * letterSizeB > 1
+            size = 0
+            for x, y in zip(rowA, rowB):
+                if x == "-":
+                    if size:
+                        yield size, begA, begB
+                        begA += size * letterSizeA
+                        begB += size * letterSizeB
+                        size = 0
+                    begB += symbolSize(y, letterSizeB)
+                elif y == "-":
+                    if size:
+                        yield size, begA, begB
+                        begA += size * letterSizeA
+                        begB += size * letterSizeB
+                        size = 0
+                    begA += symbolSize(x, letterSizeA)
                 else:
-                    nCount += 1
-        if size:
-            yield size, begA, begB
+                    size += 1
+                    if x in normalBases and y in normalBases or isProtein:
+                        if x != y:
+                            mismatches += 1
+                    else:
+                        nCount += 1
+            if size:
+                yield size, begA, begB
 
-    outCounts[0:4] = matches, mismatches, repMatches, nCount
+    outCounts[0:3] = mismatches, repMatches, nCount
 
 def pslNumInserts(blocks, letterSizeA, letterSizeB):
     numInsertA = numInsertB = 0
@@ -371,31 +448,43 @@ def pslEnds(seqLen, strand, beg, end):
         return seqLen - end, seqLen - beg
     return beg, end
 
-def writePsl(opts, mafs):
-    matchCounts = [0] * 4
-    blocks = list(pslBlocks(opts, mafs, matchCounts))
-    matches, mismatches, repMatches, nCount = matchCounts
-    numGaplessColumns = sum(matchCounts)
+def writePsl(opts, geneticCode, mafs):
+    matchCounts = [0] * 3
+    blocks = list(pslBlocks(opts, geneticCode, mafs, matchCounts))
+    mismatches, repMatches, nCount = matchCounts
+    numGaplessColumns = sum(i[0] for i in blocks)
+    matches = numGaplessColumns - sum(matchCounts)
 
     if not blocks:
         return
 
     fieldsA, fieldsB = mafs[0][1]
+
+    if fieldsA[3] < fieldsB[3]:  # protein-to-DNA alignment
+        fieldsA, fieldsB = fieldsB, fieldsA
+        blocks = [(s, b, a) for s, a, b in blocks]
+
+    seqNameA, seqLenA, strandA, letterSizeA = fieldsA[0:4]
+    seqNameB, seqLenB, strandB, letterSizeB = fieldsB[0:4]
+
+    sizeMulA = 3 if letterSizeA > letterSizeB else 1
+    sizeMulB = 3 if letterSizeB > letterSizeA else 1
+
     headSize, headBegA, headBegB = blocks[0]
     tailSize, tailBegA, tailBegB = blocks[-1]
 
-    seqNameA, seqLenA, strandA, letterSizeA = fieldsA[0:4]
-    begA, endA = pslEnds(seqLenA, strandA, headBegA, tailBegA + tailSize)
-    baseInsertA = endA - begA - numGaplessColumns * letterSizeA
+    tailEndA = tailBegA + tailSize * sizeMulA
+    begA, endA = pslEnds(seqLenA, strandA, headBegA, tailEndA)
+    baseInsertA = endA - begA - numGaplessColumns * sizeMulA
 
-    seqNameB, seqLenB, strandB, letterSizeB = fieldsB[0:4]
-    begB, endB = pslEnds(seqLenB, strandB, headBegB, tailBegB + tailSize)
-    baseInsertB = endB - begB - numGaplessColumns * letterSizeB
+    tailEndB = tailBegB + tailSize * sizeMulB
+    begB, endB = pslEnds(seqLenB, strandB, headBegB, tailEndB)
+    baseInsertB = endB - begB - numGaplessColumns * sizeMulB
 
-    numInsertA, numInsertB = pslNumInserts(blocks, letterSizeA, letterSizeB)
+    numInsertA, numInsertB = pslNumInserts(blocks, sizeMulA, sizeMulB)
 
     strand = strandB
-    if letterSizeA > 1 or letterSizeB > 1:
+    if sizeMulA > 1 or sizeMulB > 1:
         strand += strandA
     elif strandA != "+":
         raise Exception("for non-translated PSL, the 1st strand in each alignment must be +")
@@ -409,15 +498,16 @@ def writePsl(opts, mafs):
           blockCount, blockSizes, blockStartsB, blockStartsA, sep="\t")
 
 def mafConvertToPsl(opts, lines):
+    geneticCode = standardGeneticCode()
     if opts.Join:
         for i in colinearMafInput(opts, lines):
-            writePsl(opts, i)
+            writePsl(opts, geneticCode, i)
     elif opts.join:
         for i in mafGroupInput(opts, lines):
-            writePsl(opts, i)
+            writePsl(opts, geneticCode, i)
     else:
         for i in mafInput(opts, lines):
-            writePsl(opts, [i])
+            writePsl(opts, geneticCode, [i])
 
 ##### Routines for converting to SAM format: #####
 
@@ -714,20 +804,61 @@ def blastDataFromMafFields(fields):
     else:
         beg = seqLen - beg
         end = seqLen - end + 1
-    return seqName, str(beg), str(end), row.upper()
+    return seqName, letterSize, str(beg), str(end), row.upper()
+
+def codonMatchCounts(geneticCode, letterSizeA, letterSizeB, rowA, rowB):
+    letterSpanA = 3 - letterSizeA * 2
+    letterSpanB = 3 - letterSizeB * 2
+    codeA = geneticCode if letterSizeA else aminoAcidCodes
+    codeB = geneticCode if letterSizeB else aminoAcidCodes
+    loopEnd = len(rowA)
+    matches = mismatches = gaps = dangles = 0
+    i = 0
+    while i < loopEnd:
+        if rowA[i] == "-":
+            gaps += 1
+            if rowA[i+1] == "-" and rowA[i+2] == "-":
+                i += 3
+            else:
+                if rowB[i-1] == "-":
+                    dangles += 1
+                i += 1
+        elif rowB[i] == "-":
+            gaps += 1
+            if rowB[i+1] == "-" and rowB[i+2] == "-":
+                i += 3
+            else:
+                if rowA[i-1] == "-":
+                    dangles += 1
+                i += 1
+        else:
+            j = i + 3
+            if codeA.get(rowA[i:j], "X") == codeB.get(rowB[i:j], "X"):
+                matches += 1
+            else:
+                mismatches += 1
+            i = j
+    return matches, mismatches, gaps, dangles
 
-def writeBlastTab(opts, maf):
+def writeBlastTab(opts, geneticCode, maf):
     aLine, sLines, qLines, pLines = maf
     fieldsA, fieldsB = pairOrDie(sLines, "BlastTab")
-    seqNameA, begA, endA, rowA = blastDataFromMafFields(fieldsA)
-    seqNameB, begB, endB, rowB = blastDataFromMafFields(fieldsB)
+    seqNameA, letterSizeA, begA, endA, rowA = blastDataFromMafFields(fieldsA)
+    seqNameB, letterSizeB, begB, endB, rowB = blastDataFromMafFields(fieldsB)
+    gapOpens = gapRunCount(rowA) + gapRunCount(rowB)
+
+    if letterSizeA * letterSizeB < 1:
+        c = codonMatchCounts(geneticCode, letterSizeA, letterSizeB, rowA, rowB)
+        matches, mismatches, gaps, dangles = c
+        alnSize = matches + mismatches + gaps
+        gapOpens -= dangles
+    else:
+        alignmentColumns = list(zip(rowA, rowB))
+        alnSize = len(alignmentColumns)
+        matches = sum(x == y for x, y in alignmentColumns)
+        mismatches = alnSize - matches - rowA.count("-") - rowB.count("-")
 
-    alignmentColumns = list(zip(rowA, rowB))
-    alnSize = len(alignmentColumns)
-    matches = sum(x == y for x, y in alignmentColumns)
     matchPercent = "%.2f" % (100.0 * matches / alnSize)
-    mismatches = alnSize - matches - rowA.count("-") - rowB.count("-")
-    gapOpens = gapRunCount(rowA) + gapRunCount(rowB)
 
     out = [seqNameB, seqNameA, matchPercent, alnSize, mismatches,
            gapOpens, begB, endB, begA, endA]
@@ -742,8 +873,9 @@ def writeBlastTab(opts, maf):
     print(*out, sep="\t")
 
 def mafConvertToBlastTab(opts, lines):
+    geneticCode = standardGeneticCode()
     for maf in mafInput(opts, lines):
-        writeBlastTab(opts, maf)
+        writeBlastTab(opts, geneticCode, maf)
 
 ##### Routines for converting to GFF format: #####
 
@@ -753,6 +885,10 @@ def writeGffHeader():
 def gffFromMaf(maf):
     aLine, sLines, qLines, pLines = maf
     fieldsA, fieldsB = pairOrDie(sLines, "GFF")
+
+    if fieldsA[3] < fieldsB[3]:  # protein-to-DNA alignment
+        fieldsA, fieldsB = fieldsB, fieldsA
+
     seqNameA, seqLenA, strandA, letterSizeA, begA, endA, rowA = fieldsA
     seqNameB, seqLenB, strandB, letterSizeB, begB, endB, rowB = fieldsB
 


=====================================
bin/maf-swap
=====================================
@@ -1,4 +1,6 @@
 #! /usr/bin/env python
+# Author: Martin C. Frith
+# SPDX-License-Identifier: GPL-3.0-or-later
 
 # Read MAF-format alignments, and write them, after moving the Nth
 # sequence to the top in each alignment.
@@ -94,8 +96,9 @@ def flippedMaf(mafLines):
     fieldWidths = list(sLineFieldWidths(flippedLines))
     return (joinedMafLine(i, fieldWidths) for i in flippedLines)
 
-def isCanonicalStrand(mafLine):
-    words = mafLine.split()
+def isCanonicalStrand(mafLines):
+    sLine1 = mafLines[1]
+    words = sLine1.split()
     strand = words[4]
     if strand == "+": return True
     alnString = words[6]
@@ -103,12 +106,18 @@ def isCanonicalStrand(mafLine):
     alnSize = int(words[3])
     gapCount = alnString.count("-")
     if len(alnString) - gapCount < alnSize: return True  # translated DNA
+    sLine2 = mafLines[indexOfNthSequence(mafLines, 2)]
+    words2 = sLine2.split()
+    alnSize2 = int(words2[3])
+    alnString2 = words2[6]
+    if len(alnString2) - alnString2.count("-") > alnSize2:
+        return True  # 3-letter amino acids
     return False
 
 def swapOneMaf(opts, mafLines):
     start, stop = rangeOfNthSequence(mafLines, opts.n)
     mafLines[1:stop] = mafLines[start:stop] + mafLines[1:start]
-    if not isCanonicalStrand(mafLines[1]):
+    if not isCanonicalStrand(mafLines):
         mafLines = flippedMaf(mafLines)
     for i in mafLines:
         print(i, end="")


=====================================
debian/changelog
=====================================
@@ -1,8 +1,7 @@
-last-align (1243-1) UNRELEASED; urgency=medium
+last-align (1250-1) UNRELEASED; urgency=medium
 
-  * [skip ci] Update email
   * d/watch: Fix fetch URL - last-align has moved to gitlab
-  * New upstream version 1243
+  * New upstream version 1250
   * d/p/2to3.patch: scripts has moved to bin, change
   * d/p/helpMakefiles.patch: Refresh helpmakefile.patch
   * d/p/simde: Attempt adapting simde to new upstream
@@ -11,7 +10,7 @@ last-align (1243-1) UNRELEASED; urgency=medium
   * d/debian/last-align.doc-base.last-align-manual:
     The manual page has moved to last-cookbook.rst
 
- -- Nilesh Patra <nilesh at debian.org>  Mon, 19 Apr 2021 21:03:45 +0530
+ -- Nilesh Patra <nilesh at debian.org>  Sun, 11 Jul 2021 02:05:04 +0530
 
 last-align (1179-1) unstable; urgency=medium
 


=====================================
debian/patches/2to3.patch
=====================================
@@ -158,10 +158,10 @@ Last-Update: Fri, 22 Nov 2019 11:23:44 +0100
 @@ -1,4 +1,4 @@
 -#! /usr/bin/env python
 +#!/usr/bin/python3
+ # Author: Martin C. Frith
+ # SPDX-License-Identifier: GPL-3.0-or-later
  
- # Read MAF-format alignments, and write them, after moving the Nth
- # sequence to the top in each alignment.
-@@ -69,12 +69,12 @@
+@@ -71,12 +71,12 @@
  
  def sLineFieldWidths(mafLines):
      sLines = (i for i in mafLines if i[0] == "s")


=====================================
doc/lastal.rst
=====================================
@@ -291,10 +291,13 @@ Miscellaneous options
     complemented matrix is used for query sequence reverse strands.
 
 -K LIMIT
-    Omit any alignment whose query range lies in LIMIT or more other
-    alignments with higher score (and on the same strand).  This is
-    a useful way to get just the top few hits to each part of each
-    query (P Berman et al. 2000, J Comput Biol 7:293-302).
+    Omit any alignment whose query range is contained in LIMIT or more
+    other alignments with higher score (and on the same strand).  This
+    is a useful way to get just the top few hits to each part of each
+    query (P Berman et al. 2000, J Comput Biol 7:293-302).  As a
+    special case, a LIMIT of 0 means: omit any alignment whose query
+    range overlaps an alignment with higher score (and on the same
+    strand).
 
 -C LIMIT
     Before extending gapped alignments, discard any gapless


=====================================
doc/maf-convert.rst
=====================================
@@ -13,9 +13,11 @@ It's often convenient to pipe in the input, like this::
 
 This script takes the first (topmost) maf sequence as the "reference"
 / "subject" / "target", and the second sequence as the "query".
+(Exception: when converting DNA-to-protein alignments to gff or psl,
+the protein becomes the "query" and the DNA becomes the "reference".)
 
 For html: if the input includes probability lines starting with 'p',
-then the output will be coloured by column probability.  (To get lines
+then the output will be colored by column probability.  (To get lines
 starting with 'p', run lastal with option -j set to 4 or higher.)
 
 .. _maf: http://genome.ucsc.edu/FAQ/FAQformat.html#format5
@@ -32,7 +34,7 @@ Options
 -p, --protein
        Specify that the alignments are of proteins, rather than
        nucleotides.  This affects psl format only (the first 4
-       columns).
+       columns), and has no effect for DNA-to-protein alignments.
 
 -j N, --join=N
        Join alignments that are co-linear (align different parts of


=====================================
src/AlignmentWrite.cc
=====================================
@@ -474,7 +474,7 @@ AlignmentText Alignment::writeBlastTab(const MultiSequence& seq1,
   const uchar *map2 = (translationType == 2) ? codonToAmino : map1;
   size_t matches = matchCount(blocks, seq1.seqReader(), seqData2, map1, map2);
   size_t mismatches = alignedColumnCount(blocks) - matches;
-  size_t gapOpens = blocks.size() - 1;
+  size_t gapOpens = blocks.size() - 1;  // xxx ???
   double matchPercent = 100.0 * matches / alnSize;
 
   size_t blastAlnBeg1 = alnBeg1 + 1;  // 1-based coordinate


=====================================
src/LastalArguments.cc
=====================================
@@ -106,7 +106,7 @@ LastalArguments::LastalArguments() :
   maxGaplessAlignmentsPerQueryPosition(0),  // depends on oneHitMultiplicity
   maxAlignmentsPerQueryStrand(-1),
   cullingLimitForGaplessAlignments(0),
-  cullingLimitForFinalAlignments(0),
+  cullingLimitForFinalAlignments(-1),
   queryStep(1),
   minimizerWindow(0),  // depends on the reference's minimizer window
   batchSize(0),  // depends on the outputType, and voluming
@@ -649,7 +649,7 @@ void LastalArguments::writeCommented( std::ostream& stream ) const{
     stream << " N=" << maxAlignmentsPerQueryStrand;
   if( cullingLimitForGaplessAlignments )
     stream << " C=" << cullingLimitForGaplessAlignments;
-  if( cullingLimitForFinalAlignments )
+  if( cullingLimitForFinalAlignments + 1 > 0 )
     stream << " K=" << cullingLimitForFinalAlignments;
   stream << " k=" << queryStep;
   if( minimizerWindow > 1 )


=====================================
src/lastal.cc
=====================================
@@ -543,7 +543,7 @@ struct Dispatcher{
 
 static bool isCollatedAlignments() {
   return args.outputFormat == 'b' || args.outputFormat == 'B' ||
-    args.cullingLimitForFinalAlignments;
+    args.cullingLimitForFinalAlignments + 1;
 }
 
 static void printAndDelete(char *text) {
@@ -846,12 +846,41 @@ static bool lessForCulling(const AlignmentText &x, const AlignmentText &y) {
   else                            return x.score     > y.score;
 }
 
+// Remove any alignment whose query range overlaps an alignment with
+// higher score (and on the same strand):
+static void cullOverlappingAlignments(std::vector<AlignmentText> &textAlns,
+				      size_t start) {
+  size_t end = textAlns.size();
+  size_t i = start;
+  for (size_t j = start; j < end; ++j) {
+    AlignmentText &x = textAlns[j];
+    for (size_t k = j + 1; k < end; ++k) {
+      AlignmentText &y = textAlns[k];
+      if (y.strandNum > x.strandNum || y.queryBeg >= x.queryEnd) break;
+      if (x.score > y.score) {
+	delete[] y.text;
+	y.text = 0;
+      }
+      if (y.score > x.score) {
+	delete[] x.text;
+	x.text = 0;
+      }
+    }
+    if (x.text) {
+      textAlns[i] = x;
+      ++i;
+    }
+  }
+  textAlns.resize(i);
+}
+
 // Remove any alignment whose query range lies in LIMIT or more other
 // alignments with higher score (and on the same strand):
 static void cullFinalAlignments(std::vector<AlignmentText> &textAlns,
-				size_t start) {
-  if (!args.cullingLimitForFinalAlignments) return;
+				size_t start, size_t limit) {
+  if (limit + 1 == 0) return;
   sort(textAlns.begin() + start, textAlns.end(), lessForCulling);
+  if (limit == 0) return cullOverlappingAlignments(textAlns, start);
   std::vector<size_t> stash;  // alignments that might dominate subsequent ones
   size_t i = start;  // number of kept alignments so far
   for (size_t j = start; j < textAlns.size(); ++j) {
@@ -867,7 +896,7 @@ static void cullFinalAlignments(std::vector<AlignmentText> &textAlns,
       if (y.queryEnd >= x.queryEnd && y.score > x.score) ++numOfDominators;
     }
     stash.resize(a);
-    if (numOfDominators >= args.cullingLimitForFinalAlignments) {
+    if (numOfDominators >= limit) {
       delete[] x.text;
     } else {
       stash.push_back(i);
@@ -1037,7 +1066,7 @@ static void tantanMaskTranslatedQuery(size_t queryNum, uchar *querySeq) {
 
 // Scan one query sequence strand against one database volume,
 // after optionally translating and/or masking the query
-void translateAndScan(LastAligner& aligner,
+void translateAndScan(LastAligner &aligner, size_t finalCullingLimit,
 		      size_t queryNum, const SubstitutionMatrices &matrices) {
   uchar *querySeqs = query.seqWriter();
   uchar *querySeq = querySeqs + query.padBeg(queryNum);
@@ -1069,7 +1098,7 @@ void translateAndScan(LastAligner& aligner,
 
   size_t oldNumOfAlns = aligner.textAlns.size();
   scan( aligner, queryNum, matrices, querySeq );
-  cullFinalAlignments( aligner.textAlns, oldNumOfAlns );
+  cullFinalAlignments(aligner.textAlns, oldNumOfAlns, finalCullingLimit);
 
   if (args.tantanSetting && !args.isKeepLowercase) {
     for (size_t i = query.seqBeg(queryNum); i < query.seqEnd(queryNum); ++i) {
@@ -1078,19 +1107,19 @@ void translateAndScan(LastAligner& aligner,
   }
 }
 
-static void alignOneQuery(LastAligner &aligner,
+static void alignOneQuery(LastAligner &aligner, size_t finalCullingLimit,
 			  size_t queryNum, bool isFirstVolume) {
   if (args.strand == 2 && !isFirstVolume)
     query.reverseComplementOneSequence(queryNum, queryAlph.complement);
 
   if (args.strand != 0)
-    translateAndScan(aligner, queryNum, fwdMatrices);
+    translateAndScan(aligner, finalCullingLimit, queryNum, fwdMatrices);
 
   if (args.strand == 2 || (args.strand == 0 && isFirstVolume))
     query.reverseComplementOneSequence(queryNum, queryAlph.complement);
 
   if (args.strand != 1)
-    translateAndScan(aligner, queryNum,
+    translateAndScan(aligner, finalCullingLimit, queryNum,
 		     args.isQueryStrandMatrix ? revMatrices : fwdMatrices);
 }
 
@@ -1108,14 +1137,16 @@ static void alignSomeQueries(size_t chunkNum,
   bool isSort = isCollatedAlignments();
   bool isSortPerQuery = (isSort && !isMultiVolume);
   bool isPrintPerQuery = (isFirstThread && !(isSort && isMultiVolume));
+  size_t finalCullingLimit = args.cullingLimitForFinalAlignments ?
+    args.cullingLimitForFinalAlignments : isMultiVolume;
   for (size_t i = beg; i < end; ++i) {
     size_t oldNumOfAlns = textAlns.size();
-    alignOneQuery(aligner, i, isFirstVolume);
+    alignOneQuery(aligner, finalCullingLimit, i, isFirstVolume);
     if (isSortPerQuery) sort(textAlns.begin() + oldNumOfAlns, textAlns.end());
     if (isPrintPerQuery) printAndClear(textAlns);
   }
   if (isFinalVolume && isMultiVolume) {
-    cullFinalAlignments(textAlns, 0);
+    cullFinalAlignments(textAlns, 0, args.cullingLimitForFinalAlignments);
     if (isSort) sort(textAlns.begin(), textAlns.end());
     if (isFirstThread) printAndClear(textAlns);
   }


=====================================
src/makefile
=====================================
@@ -143,7 +143,7 @@ ScoreMatrixData.hh: ../data/*.mat
 	../build/mat-inc.sh ../data/*.mat > $@
 
 VERSION1 = git describe --dirty
-VERSION2 = echo ' (HEAD -> main, tag: 1243, refs/keep-around/3243658001e5a2afe5329f23aab272c355465293) ' | sed -e 's/.*tag: *//' -e 's/[,) ].*//'
+VERSION2 = echo ' (HEAD -> main, tag: 1250) ' | sed -e 's/.*tag: *//' -e 's/[,) ].*//'
 
 VERSION = \"`test -e ../.git && $(VERSION1) || $(VERSION2)`\"
 


=====================================
test/frameshift-new.maf
=====================================
@@ -0,0 +1,58 @@
+# LAST version 1243
+#
+# a=21 b=1 A=27 B=1 F=-2,0,-3,0 e=165.797 d=70 x=165 y=42 z=165 D=1e+09 E=18.1715
+# R=01 u=2 s=2 S=0 M=0 T=0 m=500 l=1 n=500 K=1 k=1 w=1000 t=4.24284 j=3 Q=0
+# ../aant/hg38/last/rmsk-hg38
+# Reference sequences=38335 normal letters=27515653
+# lambda=0.235691 K=1.69939
+#
+#   AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT
+# A  -7  -5  -7  -6   3   3   1   3  -6  -3  -6  -2  -2  -3  -2  -4  -7  -6  -5  -6  -1  -1  -3  -1  -5  -4  -7  -5  -5  -6  -4  -5  -2  -2  -3  -3   9   9   7  10  -1   0  -2   1   4   4   4   4  -5  -9  -6  -8   2   1   0   1  -8  -7 -11  -6  -4  -6  -2  -5
+# C -11  -4 -11  -5  -7  -4 -11  -5  -8   2  -7   2  -9  -6 -11  -8  -7   1  -6   2 -12  -7  -9  -7  -1   8  -2   8 -10  -6  -6  -4 -12  -6 -10  -6  -6  -6 -29  -5  -8   3  -6   1 -10  -6  -7  -6  -2   5   0   6  -6  -1  -4   0   3  13   1  13  -7   0  -6   1
+# D  -4   4  -3   4  -9  -3  -7  -4  -7   0  -7   1 -12  -7  -9  -8  -4   1  -5   0 -10  -7 -10  -6 -27  -1  -6  -3 -15  -9 -14 -10   2  11   3  10  -7  -1  -3  -1  -2   5  -2   5  -6   0  -6  -1  -2   1  -3   0  -9  -5 -16  -6  -8  -3 -12  -4 -13  -8 -10 -10
+# E   2  -2   1  -1  -5  -8  -8  -6  -3  -4  -4  -5  -7 -12  -7 -12   0  -5   0  -5  -8  -9 -11 -11  -2 -11  -5  -9 -10 -13 -10 -11   9   3   8   4  -1  -6  -1  -6   2  -2   2  -1  -2  -6  -3  -7   3  -6   0  -5  -9  -9  -9  -8  -4  -9 -10  -8  -9 -14  -8 -12
+# F -17  -9 -16  -8 -11  -6  -7  -6 -16  -8 -13  -8  -8  -2  -6  -2 -10  -3 -10  -1 -12  -5  -8  -6 -11  -5  -4  -1  -4   3  -2   2 -18 -11 -18 -11  -9 -10 -11  -7 -13 -10 -12  -9  -6   1  -7  -1  -6   2  -4   3  -6   1  -2   1  -7   1  -8   2   2  11   2  11
+# G  -4  -3  -3  -3  -6  -6  -5  -6   4   3   3   3  -8 -10  -8  -9  -4  -5  -4  -3 -10  -7  -3  -7   0   2   2   0 -13 -13 -14 -13   3   1   3   2  -1   0   1  -1  11  10  10  10  -1  -1  -2  -2  -2  -7  -4  -6 -10  -7  -8  -6   1  -2  -3  -1 -10 -13 -11 -10
+# H  -6   0  -5   0  -8  -4 -25  -4  -9  -3  -6  -1 -13  -9 -11  -9   3  11   3  11  -5   1  -1   0  -1   7   2   9  -6  -1  -8  -1  -7  -2  -4  -1 -10  -6  -4  -6  -7  -3  -6  -2 -11  -5 -10  -5  -1   6   0   6  -7  -1  -3  -2  -3   2  -6   4  -8  -3  -9  -3
+# I  -5  -5  -8  -4   1   1   1   2  -4  -2  -6  -2   7   7   3   7  -9 -10 -10  -9  -7  -8  -8  -9  -6  -6 -21  -7   1  -1  -2  -1 -11 -11 -10  -9  -4  -5  -2  -4  -8  -8  -9  -7   4   3   1   3  -6  -8  -8  -9  -6  -8  -7  -7  -7  -7 -15  -9   0  -3  -2  -2
+# K   7   1   7   1  -1  -5   0  -5   3  -2   2  -1  -3 -10  -3  -8   0  -5  -1  -5  -7 -10  -4 -10  -2  -8  -5  -5  -8 -13 -10 -13  -1  -7   0  -6  -6  -9  -5  -8  -3  -8  -4  -6  -6 -10  -7  -9   2  -9  -1  -8  -7 -10 -12 -10  -3  -9  -8 -10  -6 -14  -9 -10
+# L -10 -10 -10 -11  -5  -7  -2  -4  -9  -8  -8  -8   0   0   1   0  -4  -2  -2  -2  -1  -1   3  -1   0   0  -3  -1   7   7   7   7 -12 -12 -10 -13  -8  -6  -1  -6 -11 -11  -8 -10   0  -1   0  -1  -3  -4  -4  -5  -2  -4   1  -4  -2  -4  -5  -3   7   3   6   3
+# M  -6  -7  -2  -6   1  -3   7  -3  -4  -6   1  -6   4   1  11   2  -7  -8  -5  -9  -6  -8  -1  -9  -4 -10  -8  -3   0  -2   4  -2  -8 -12  -4 -10  -3  -5   2  -5 -10  -8  -4 -10   1  -3   6  -2  -5  -9  -3 -10  -4  -8   2  -8  -6 -12  -6  -8   1  -5   5  -3
+# N   0   9   1   9  -5   1  -3   0  -3   5  -2   5  -7  -3  -7  -3  -3   1  -5   1  -9  -6 -11  -6  -6  -2  -5  -3 -14  -9 -13  -9  -4   2  -3   2  -8  -4  -9  -6  -6  -1  -6  -1  -9  -5  -9  -7  -2  -1  -5   0  -9  -5 -29  -6  -6  -4 -11  -4 -10  -9 -13  -7
+# P  -9  -9 -11  -9  -2  -2  -3  -1 -10  -9  -7  -7  -7  -8  -8  -8  -1  -1  -4  -2  10  10   9  10   1   2   0   2   4   2   2   2 -11  -8 -12  -9  -1   0   1  -1 -10  -7  -8  -8  -5  -6  -5  -6  -3  -5  -8  -5   5   5   4   5  -1  -3  -8  -4  -2  -3  -3  -3
+# Q  -1  -4   0  -4  -6  -5  -6  -7  -4  -5  -3  -6 -10 -12  -7 -11  10   2  10   3   0  -4   2  -5   6   0   4   1  -2  -8  -2  -7   0  -3   1  -5  -7  -9  -7  -6  -4  -6  -3  -8  -7  -8  -6  -9   6  -2   5  -2  -3  -4  -1  -5   2  -4  -2  -5  -3  -9  -4  -8
+# R   2  -4   3  -3  -1  -6  -1  -6   9   1   8   2  -3  -9  -3  -8   2   1   2   0  -7  -5  -6  -5   6   4   5   3  -8  -7  -8  -8  -4  -8  -4  -8  -7  -8  -3  -7   1  -4   2  -3  -7 -10  -6  -8   0  -5  -1  -4  -6  -7  -6  -6   5   1  -1   0  -6  -9  -7  -8
+# S  -6   0  -5  -1   0   2  -1   2  -3   6  -3   5  -5  -3  -5  -4  -5  -3  -4  -3   0   2  -1   1  -5   0  -4  -1  -5  -5  -4  -4  -6  -5  -6  -4   0   1  -1   1  -5   0  -4  -1  -5  -4  -4  -4  -1  -2  -4  -3   8   8   7   8  -1   0  -7  -1   1   0   1   0
+# T  -3  -2  -3  -2   7   7   6   7  -2   1  -3   0   2   1   1   1  -5  -5  -5  -6  -2  -2  -2  -1  -5  -7  -4  -4  -4  -6  -3  -6  -6  -6  -6  -6   3   1   2   2  -5  -5  -6  -6   0  -1   0  -1  -4  -8  -6  -6   2   0   1   1  -5  -5 -12  -7  -3  -6  -3  -5
+# V  -7  -6  -8  -7  -1   0  -1   1  -5  -5  -5  -4   3   4   2   4  -9  -6  -6  -7  -7  -5  -5  -5  -4  -7  -6  -5  -1  -2  -1  -1  -4  -5  -3  -4   1   2   4   2  -3  -3   0  -2   8   9   9   9  -5 -11  -6  -8  -5  -7  -3  -6  -7  -7 -11  -7   0  -3  -1  -1
+# W -14 -18  -7 -13 -16 -15  -7 -14  -6  -9   1  -9 -13 -23 -10 -13  -5  -7   3  -5 -11 -14  -2 -26   4  -4  10  -1  -9 -10  -4 -11 -12 -14  -4 -19 -14 -12  -5 -19  -5  -9   4  -8 -12 -18  -7 -14   2  -3  11  -2  -3 -11   5  -8  10   4  14   4  -3  -9   4  -5
+# Y -11  -2 -11  -2 -14  -7  -9  -8 -15  -5 -11  -4 -13  -9 -10  -8  -5   5  -3   6 -10  -6  -7  -5 -11   2  -4   3  -9  -4  -9  -5 -12  -4 -11  -2 -11  -9 -28  -8 -15  -7 -10  -5 -13  -5 -10  -8   3  11   4  11  -8   0  -6   0  -3   5  -5   6  -6   3  -5   2
+# * -27 -29 -25 -27 -29 -28 -30 -28 -20 -19 -17   1 -28 -29 -28 -29   0 -20   5 -29 -29 -29 -29 -27   9 -29   4 -29 -25 -29 -26 -29 -24 -29 -28 -29 -29 -28 -29 -29   4 -29 -25 -25 -28 -30 -28 -30  14  -5  10 -12 -26 -29   6 -29  14 -27  -3  -8 -10 -29 -29 -29
+# X   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+#
+# Coordinates are 0-based.  For - strand matches, coordinates
+# in the reverse complement of the 2nd sequence are used.
+#
+# name start alnSize strand seqSize alignment
+#
+# batch 0
+a score=3177.2 EG2=0 E=0
+s UN-L1MA6_pol#LINE/L1   657  616 +  1275 GlnGlyCysProLeuSerProLeuLeuPheAsnIleValLeuGluValLeuAlaArgAlaIleArgGlnGluLysGluIleLysGlyIleGlnIleGlyLysGluGluValLysLeuSerLeuPheAlaAspAspMetIleLeuTyrIleGluAsnProLysAspSerThrLysLysLeu-LeuGluLeuIleAsnGluPheSerLysValAlaGlyTyrLysIleAsnIleGlnLysSerValAlaPheLeuTyrAlaAsnSerGluLeu-SerGluLysGluIleLyslysthrilepropheThrIleAlaThrLysLysIleLys--TyrLeuGlyIleAsnLeuThrLysGluValLysAspLeuTyrXaaGluAsnTyrLysThrLeuMetLysGluIleGluGluAspThrAsnLysTrpLysAspIleProCysSerTrpIleGlyArgIleAsnIleValLysMetSerIleLeuProLysAlaIleTyrArgPheAsnAlaIleProIleLysIleProMetThrPhePheThrGluIleGluLysThrIleLeuLysPheValTrpAsnHisLysArgProArgIleAlaLysAlaIleLeuSerLysLysAsnLysAlaGlyGlyIleThrLeuProAspPheLysIleTyrTyrLysAlaIleValThrLysThrAlaTrpTyrTrpHisLysAsnArgHisIleAspGlnTrpAsnArgIleGluSerProGluIleAsnProArgIle--TyrSerGlnLeuIlePheAspLysGlyAlaLysAsnThrGln--TrpGlyLysAspSerLeuPheAsnLysTrpCysTrpGluAsnTrpIleSerThrCysArgArgMetLysLeuAspProTyrLeuSerProTyrThrLysIleAsnSerLysTrpIleLys-AspLeuAsnValArgProGluThrMetLysLeuLeuGluGluAsnIle-GlyGluMetLeuHisAspIleGlyLeuGlyLysAspPheLeuAspLysThrSerLysAlaGlnAlaThrLysAlaLysIleAspLysTrpAspTyrIleLysLeuLysSerPheCysThrAlaLysGluThr-IleAsnArgValLysArgGlnProThrGluTrpGluLysIlePheAlaAsnTyrAlaSerAspLysGlyLeuIleSerArgIleTyrLysGluLeuLysGlnLeuAsnSerLysLysThrAsnAsnProIleXaaLysTrpAlaLysAspLeuAsnArgHisPheSerLysGluAspIleGlnMetAlaAsnArgTyrMetLys-LysCysSerThrSerLeuIleIleArgGluMetGlnIleLysThrThrMetArgTyrHisLeuThrProValArgMetAlaIleIleLysLysThrLysAspAsnLysCysTrpArgGlyCysGlyGluLysGlyThrLeuThrHisCys--TrpTrpGluCysLysLeuValGlnProLeuTrpLysThrValTrpArgPheLeuLysLysLeu--LysIleGluLeuProTyrAspProAlaIleProLeuLeuGlyIleTyrProLysGluMetLysSerValCysArgArgAspIleCysThrProMetPheIleAlaAlaLeuPheThrIleAlaLysIleTrpAsnGlnProLysCysProSerThrAspGluTrpIleLysLysMetTrpTyrIleTyrThrMetGluTyrTyrSerAlaIleLysLysAsnGluIle-LeuSerPheAlaThrThrTrpMetAsnLeuGluAspIleMetLeuSerGluIleSerGlnAlaGlnLysAspLysTyrArgMetIleSerLeuIleCysGly
+s chrUn_KI270748v1     13904 1811 + 93321 CAAGGGTGCCCACTCTCAGAACTTCTATTCAACATAGTACTGGATGTCCTAGCCAGAGCAATTAGGCAAAAGAAAGaaaTAAAAGGCATGAAAATTGGAAAGGAAGAAGTTAAATTGTTTCTGTTTGCAGTTGACATGATCTTATATATAGAAAACACCAATAACTCTGCCAAAAAA---TTTAGAATTCATAAATGAATTTAGTAAAGTTGCAGGATACAATGTGAACATACAAAATTCAGTAGCATTTCTACACATCAACAACAAACTATACAAAAAAagaaatcaagaaaacaATCCTATTTATAATAGCAACAAAA---------AATACTTAGATGTAAATTTAAACAAAGAGGTGAATGATCTTTACACTGAAAACTACAAAACATTGATGAAAACAATTGAAGAAGCCACAAATAAATGGAAAGATATCTCATGTTCATGGATTGGAAAAAGTAATATGTTTGAAATGTCCATACTATCCAAAGTGATGTACATATTGAATGCAATCTCTATCAAAATTCCTATGACATTTTCCCACAGAAATAGAAAAACAACTCTCAAATCTGTATGGAATCACAAAAAACTCTGAAAAGCCAAAATAATCTTGATCGAAAAAAGCAAGGCAGGAGATATCACATTACCTGACTTCAAATTATACTACATAGCTATAGCAATCGAAACACCATGGTACTGGCATAAACGCAGACACATAGACCAATTACACAGAATAAAGAGCCCATAAATAAATCTACAT---ATTATAGTCAATTGACTTTCAACAAAGGTGCCAGGAACACA---CATGGGGAAAGAACAGTCTCTTCAAAAAATGGTGTTGAGAAAACTGAATGTCCACA------AGATTGATCTTAGGCCCTTATTTCATACCATATAAAAATATAAATTCAAAATAAGTT---AGACTTAAATGTAAGACCTAGCACTATAGAACTCCTAGAAGAAAAC---AGGGGAATAACTCCAAGACATTGGTCTGGGCAATAATATTTTATGATATGACTCTAAAGCACAGGCAAGAAAAGCAACAAAACACAAATGGAATAGCATCAACCTAAAAAGCTTCTGCGCAGCAAAAGAA---AGTCAACAGAGTGAAGTGATAACCTACAAAATGGGAGGAATTATCTGCAAACTATACATTTGATAAGAGGCTAATGTCCAAAATATCTTAGGAACTCAAACAACACAataataagaaAACAAGGAACCCTAATGAAAAATTGACAAAGGATCTAAATAGACATTTCTCAAAAGAAGACATACAAATGGCCAACAGATATATA---AAAATGCTAATTATCACTGATCATCAGAGAAATGCATATTAAAACTACAATAAAATGCCATTTCACATCCGTTAGAATGGCTGTTACAGAAAAGGCAGAAGATACCAAGTGTTGGAGAGGATGTGGAGAAAAGGAAAACCTTGTA------ATTGTTGAGAATGTAAACTATTTCAGCCATTGTAAAAGACAGTATAAGTGATTCTG---------TAAAAATAGAATTACCATATGATTCAGTAATGCTATTTCTGGGCATATATTAAAAAGATATCAAATCAGTGTGTCAATGAGTTATCTGTACTCCCATATTTATTGTAGCATTATTCACAACAGCCAAGATGTGGAATTAACTTAAGTATCCATCGACACATGAGTGGATGAAGAAAATGTGGTACACATACACAATAGAATAGTATACAACCTTAaaaaataaaaaa---aGTATCATTTGTGACAACATGAATGAACCGGGAGGACATTATACTGAGTAAAATAATCCAGGCACAGAAAGCCAGATACTGCATAATCTCACTTGTATGTGGA
+
+a score=1775.7 EG2=2.9e-164 E=1.5e-169
+s UN-L1PA2_pol#LINE/L1 1048 227 +  1276 LeuIleSerArgIleTyrAsnGluLeuLysGlnIleTyrLysLysLysThrAsnAsnProIleLysLysTrpAlaLysAspMetAsnArgHisPheSerLysGluAspIleTyrAlaAlaLysLysHisMetLysLysCysSerSerSerLeuAlaIleArgGluMetGlnIleLysThrThrMetArgTyrHisLeuThrProValArgMetAlaIleIleLysLysSerGlyAsnAsnArgCysTrpArgGlyCysGlyGluIleGlyThrLeuLeuHiscystrptrpaspcyslysLeuValGlnProLeuTrpLysSerValTrpArgPheLeuArgAspLeuGluLeuGluIleProPheAspProAlaIleProLeuLeuGlyIleTyrProLysAspTyrLysSerCysCysTyrLysAspThrCysThrArgMetPheIleAlaAlaLeuPheThrIleAlaLysThrTrpAsnGlnProLysCysProThrMetIleAspTrpIleLysLysMetTrpHisIleTyrThrMetGluTyrTyrAlaAlaIleLysAsnAspGluPheMetSerPheValGlyThrTrpMetLysLeuGluIleIleIleLeuSerLysLeuSerGlnGluGlnLysThrLysHisArgIlePheSerLeuIleGlyGlyAsn
+s chrUn_KI270748v1     3859 681 + 93321 CTAATATCCGGAATCTACAATGAACCCAAACAAATTTACAAGAAaaaaacaaacaaCCCCATCAAAAAGTGGGCAAAGGATATGAACAGACACTTCTCAAAAGAAGACATTTATGCAGCCAAAAAACACATGAAAAAATGCTCACTATCACTGGCCATCAGAGAAATGCAAATCAAAACCACAATGAGATACCATCTTACACCAGTTAGAATGGCCATCATTAAAAAGTCAGGAAACAACAGGTGCTGGAGAGGATGTGGAGAAATAGGAACATTTTTACACTGTTGGTGGGACTGTAAACTAGTTCAACCATTGTGGAAGACAGTGTGGTGATTCCGCAGGGATCTAGAACTAGAAATACCATTTGACCCAGCCATCCCATTACTGGGTATATACCCAAAGGACTATAAATCATGCTGCTATAAAGACACATGCACACGTATGTTTACTGTGGCACTATTCACAATAGCAAAGACTTGGAACCAATCCAAATGTCCAACAATGATAGACTGGATTAAGAAAACGTGGCACATATACACCATGGAATACTATGCAGCCATAAAAAATGATGAGTTCATGTCCTTTGTAGGGACATGGATGAAGCTGGAAACCATCATTCTCAGCAAACAATCACAAGGACAAAAAACCAAACACCGCATGTTCTCACTCATAGGTGGGAAT
+
+a score=1607.4 EG2=5e-147 E=2.5e-152
+s UN-L1MA6_pol#LINE/L1   517  362 +  1275 LysProAspLysAspThrThrLysLysGluAsn--TyrArgProIleSerLeuMetAsnIleAspAlaLysIleLeuAsnLys--IleLeuAlaAsnArgIleGlnGlnHisIleLysLysIle--IleHisHisAspGlnVal--GlyPheIleProGlyMetGln-GlyTrpPheAsnIleArgLysSerIleAsnValIleHisHisIleAsnArgMetLysAspLysAsnHisMetIleIleSerIleAspAlaGluLysAlaPheAspLysIleGlnHisProPheMetIleLysThrLeuAsnLysLeuGlyIleGluGlyThrTyrLeuAsnThrIleLysAlaIleTyrAspLysProThrAlaAsnIleIleLeuAsnGlyGluLysLeuLysAlaPheProLeuArgSerGlyThrArgGlnGlyCysProLeuSerProLeuLeuPheAsnIleValLeuGluValLeuAlaArgAlaIleArgGlnGluLysGluIleLysGly-IleGlnIleGlyLysGluGluValLysLeuSerLeuPheAlaAspAspMetIleLeuTyrIleGluAsnProLysAspSerThrLysLysLeuLeuGluLeuIleAsnGluPheSerLysValAlaGlyTyrLysIleAsnIleGlnLysSerValAla-PheLeuTyrAlaAsnSerGluLeuSerGluLysGlu-IleLyslysthrilepropheThrIleAlaThrLysLysIle------------------------------LysTyrLeuGlyIleAsnLeuThrLysGluValLysAspLeuTyrXaaGluAsnTyrLysThrLeuMetLysGlu-IleGluGluAspThrAsnLysTrpLysAspIleProCysSerTrpIleGlyArgIleAsnIleValLysMetSerIleLeuProLysAlaIleTyrArgPheAsnAlaIleProIleLysIleProMetThrPhePheThrGluIleGluLysThrIleLeuLysPheValTrpAsnHisLysArgProArgIleAlaLysAlaIleLeuSerLysLysAsnLysAlaGlyGlyIleThrLeu-ProAspPheLysIleTyrTyrLys
+s chrUn_KI270748v1     89660 1085 - 93321 aaggcaaacaAGGACACTATAAGAAAAGTA---TGGGCCAACCAATATCCCTGATGAACACAGATACAAAAGTCCTCAAAAAAAAGTACTAGCAAACAGAATTTAACAACATATTAGGAGA---ACATTTACCATGATAAA---GTGGATTTATCCTC---------CAGATGTTTCAGCAAACACAAATCA---AATGTGATAAACCACATTAACAGAATGAAGGATAAAAAA---ATAGCTATCTCTATATATGCAGAAAAAGCATTTGACTAAATTCAAAATCCTCTCATGACTAAACCTCTCAACAAATTGGGCATAGAAGGCATGTACCTTAACACAAAACAGGACATATATAACAAGCTCACAGCTCACATCATACCCAACAATGAAAAAGTGAAATCTTTTCTGCTAAGATCAAAAACAAGACAAGGATATTTATTCTCACTACTTCTATTCAACTTATTTCTGGAAGTCCTAGCCAGAGCAATTAAGCCAAATAAAGAAATAAAA---TATTCAAATTGAAAAGGaagaagtaaaaTTGTCTCTGTTTGATGAC------ATATTATATATAGGAAACCCTAAAAACTCCACCAAAAAGCTATTAGAAATGATAAATGAATTCAATAAAATTTCAGAATTCAAAATCAATGTACAAAACTCAGTA---GTTTCTTTACACTCACAACAAACTATATGACAAA---AATAAAGAAATCAATCTCATTCACAGTAGCATCAAaaaaaacgtattttttttGTTTAGGAGCACATTTAGGATAGTACttaggagtacatttaACCAAGGAGGTGAAAGATCTGTATTCTGAACACTATAAAACATTGATGAAA---AATTGTAGATGACACAAATACATGGAAAGATATTTTATGTTCATGGGTAGGAAGAATTAATATTCTTAAAATGTCCTTACTGCCCAAAGCGATTTATAGGTTTAATGCAATATTTATCAAAATTTCAATGTCATTCTTCACAGAAATAGAAAAAACAATTTGAAAATTTATATGGAACCACAAAGGATCCTGAATAACTAAAGGACTCTTGAGCAATAAGAACAAAGCTGAAGGCCTCACA---ATCTGACTTCAAAACATATTACAGG
+
+a score=1559.7 EG2=3.8e-142 E=2e-147
+s UN-L1MA6_pol#LINE/L1  883 281 +  1275 LysThrAlaTrpTyrTrpHisLys--AsnArgHisIleAspGlnTrpAsnArgIleGluSerProGluIleAsnProArgIleTyrSerGlnLeuIlePheAspLysGlyAlaLysAsnThrGlnTrp-GlyLysAspSerLeuPheAsnLysTrpCysTrpGluAsnTrpIleSerThrCysArgArgMetLysLeuAspProTyrLeuSerProTyrThrLysIleAsnSerLysTrpIleLysAspLeu-AsnValArgProGluThrMetLysLeuLeuGluGluAsnIleGlyGluMetLeuHisAspIleGlyLeuGlyLysAspPheLeuAspLysThrSerLysAlaGlnAlaThrLysAlaLysIleAspLysTrpAspTyrIleLysLeuLysSerPheCysThrAlaLysGluThrIleAsnArgValLysArgGlnProThrGluTrpGluLysIlePheAlaAsnTyrAlaSerAspLysGlyLeuIleSerArgIleTyrLys--GluLeuLysGlnLeuAsnSerLysLysThrAsnAsnProIleXaaLysTrpAlaLysAspLeuAsnArgHisPheSerLysGluAspIleGlnMetAlaAsnArgTyrMetLysLysCysSerThrSerLeuIleIleArgGluMetGlnIle-LysThrThrMetArgTyrHisLeuThrProValArgMetAlaIleIleLysLysThrLysAspAsnLysCysTrpArgGlyCysGlyGluLysGlyThrLeuThrHisCysTrp--TrpGluCysLysLeuValGlnProLeuTrpLysThrVal--TrpArgPheLeuLysLysLeuLys
+s chrUn_KI270748v1     3232 818 - 93321 TaatcagcctggtaatcaCGT---AAAACAGACACATAGACCAGTGGAACAGAATAGAGAACCCAGATATAAATCCACACATTTACAGCCAGCTCATCTTCAGCAAAGGCACCAACAACATACGA---GCGAAAGGACGGTCTCTTCCATAAGTGGTGCAGGGGAAACTAGATAAAGATATGCAGAAGAATGAAACTAGACCCGTCTCTCTTACCATACACAGAAATCAAATCAGAATGGATTAAAGGT---AAAACTGAGACCTGAAAGTATAAAACTACTGGAAGAAAACATTAGGGAAGTGCTCCAGGACATTGTTCTCAGCAAAGACTTTTTCAGTAGGGCCCCAAAAGCACAGGCAACCAAAGCAAAAACAGACAAGTGAAATCACACCAAGCTAAGAACCCTCTGCAGACCAAAGGAAAAAGTCAACAAACTGAAGAGACAACCCACAGAATGGGAGAAAATACTTGCAAGCTACCCACCTGACAAGGGATTCATAACC------------AGGAGCTCAAACAA---------TAGCAAACAATTAATCGAATTTTAAAATGGGCAAGAGACCTGAGTAGACATTTCTCAAAAGAAGATGTACAAATGGCCAGCAGGTACATGAAAAAATGCTCAACATCACTAATCATCAGAGAAACGCAAATAAAAAACTGCAATGAGGTCTTCTCTCACCTCAGTTAAAATGGCTTTCGTCAAAAACGCAGGGAATAAGGGATGCTGGCGAGGATGTGGAGAAAGGGGGACCCTCACACACTGT---TGTGGGAACGTTGATTAGTACAACCACTATGGAAAACA---GATGGAGGCTCCTCAaaaaaccaaaa
+
+a score=1508.0 EG2=7.4e-137 E=3.8e-142
+s UN-L1PA16_pol#LINE/L1   526  338 +  1276 LysGluAsnTyrArgProIleSerLeuMetAsnIleAspAlaLysIleLeuAsnLysIleLeuAlaAsnArgIleGlnGlnHisIleLysLysLeuIleHisHisAspGlnValGlyPheIleProGlyMetGlnGlyTrpPheAsnIleArgLysSerIleAsnValIleHisHisIleAsnArgIleLysAsnLysAsnHisMetIleIleSerIleAspAlaGluLysAlaPheAspLysIleGlnHisProPheMetIleLysThrLeuXaaLysLeuGlyIleGluGlyThrTyrLeuLysIleIleArgAlaIleTyrAspLysProThrAlaAsnIleIleLeuAsnGlyGlnLysLeuGluAlaPheProLeuArgThrGlyThrArgGlnGlyCysProLeuSerProLeuLeuPheAsnIleValLeuGluValLeuAlaArgAlaIleArgGlnGluLysGluIleLysGlyIleGlnIleGlyLysGluGluValLysLeuSerLeuPheAlaAspAspMetIleLeuTyrLeuGluAsnProLysAspSerAlaLysArgLeuLeuGluLeuIleAsnAspPheSerLysValSerGlyTyrLysIleAsnVal--GlnLysSerValAlaPheLeuTyrThrAsnAsnValGlnAla-----------------------------GluSerGlnIleLysAsnAlaIleProPheThrIleAlaThrLysLysIle--LysTyrLeuGlyIleHisLeu-ThrLysGluValLysAspLeuTyrLysGluAsnTyrLysThrLeuLeuLysGluIleIleAspAspThrAsnLysTrpLysAsnIleProCysSerTrpIleGlyArgIleAsnIle-ValLysMetAlaIleLeuProLys--AlaIleTyrArgPheAsnAlaIleProIleLysLeuProMetSerPhePheThrGluLeuGluLysThr-IleLeuLysPheIleTrpAsnGln-LysArgAlaGlnIleAlaLysAlaIleLeuSerLysLys
+s chrUn_KI270748v1      17571 1017 + 93321 AAAGAAAACTACAAATCCTTATCCCTGATCAACACAGATGTAAAAATACTCAACAAAATTCTAGCAAACTGAAGCTAACAACACATCAAAAAGATAATTCATCATGATCAAGTGGGCTTTATTCCAGGGGTGCTTGAATGGTTCAAAATAGACAAATCAATAAACATGATTCACCACATAAATGGAACTGAGAACAAAAACCCTATGATCATCTCATTAGATGCAGAATaagcatttgataaaatccaacatctgtttatgataaaaaccctcaACAATATAGGTATAGATGGAGTATACCTCAAA---AAATGAGTCATCTATGACAAAGCCACAGCCAACATCATCCTGGATGGGCAAAAGTTAGAAGTGTTGCTTCTAGAAACTGGAAAAAAGCAAGGATGTTCACCTTCATCATTCCTATTCAATACAGTACTGGAAGTGCTAGCCAGAACTATCAGAAAGGAGAAAGAAATAAAAGGTATACAAATTAGAAAA---GAAGTCAAATGATCTCTGCTCACTGATGACATGACTGTAGGCCTAGAAAACCCTAAAGTCTTC---AGAAGACTCCTAGACTTGATACACGACTTCAGTAAAGTCTTGGGATAAACAAGC------CACAAAAATCAGTTGTATTTCTATACACCAAATACATTCAAGCTGTTTGAATGTTTGTTGAGATTAATTtgttgAGAACCAAATTAAGAACTCAACTGAATTTACAATAGCCATG---------AAAAATACCTAGGAATGCAT---AACTATATAAATGAAAGATCTCTACAAGGAGAACTACAAAATACTAATGAAAGAAATTATAGATGACATAAACAAATGGAAAAACATCCCATGCTCATGGATTAGAAAAATCAAT---AGCTAAAGTGACCATATCACCC---ATACAATCTATAGAGTTAATGCAATTCCCATCAAATTACCAACGTTATTTCTCACAaaattaaaaaaa---aaTCCTAAAGTTCACATGGAGCCAAAAAAAGATCCCTAATAGCCAAAGCACTTCTAAGCAAAAAa
+


=====================================
test/frameshift-old.maf
=====================================
@@ -0,0 +1,115 @@
+# LAST version 1243
+#
+# a=11 b=2 A=11 B=2 F=12 e=40 d=29 x=39 y=31 z=39 D=1e+06 E=8.45245e+08
+# R=01 u=0 s=2 S=0 M=0 T=0 m=10 l=1 n=10 k=1 w=1000 t=3.08611 j=3 Q=0
+# /home/mcfrith/tmp/x
+# Reference sequences=1 normal letters=491
+# lambda=0.327048 K=0.105437
+#
+#    A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V  B  J  Z  X  *
+# A  4 -1 -2 -2  0 -1 -1  0 -2 -1 -1 -1 -1 -2 -1  1  0 -3 -2  0 -2 -1 -1 -1 -4
+# R -1  5  0 -2 -3  1  0 -2  0 -3 -2  2 -1 -3 -2 -1 -1 -3 -2 -3 -1 -2  0 -1 -4
+# N -2  0  6  1 -3  0  0  0  1 -3 -3  0 -2 -3 -2  1  0 -4 -2 -3  4 -3  0 -1 -4
+# D -2 -2  1  6 -3  0  2 -1 -1 -3 -4 -1 -3 -3 -1  0 -1 -4 -3 -3  4 -3  1 -1 -4
+# C  0 -3 -3 -3  9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -1 -3 -1 -4
+# Q -1  1  0  0 -3  5  2 -2  0 -3 -2  1  0 -3 -1  0 -1 -2 -1 -2  0 -2  4 -1 -4
+# E -1  0  0  2 -4  2  5 -2  0 -3 -3  1 -2 -3 -1  0 -1 -3 -2 -2  1 -3  4 -1 -4
+# G  0 -2  0 -1 -3 -2 -2  6 -2 -4 -4 -2 -3 -3 -2  0 -2 -2 -3 -3 -1 -4 -2 -1 -4
+# H -2  0  1 -1 -3  0  0 -2  8 -3 -3 -1 -2 -1 -2 -1 -2 -2  2 -3  0 -3  0 -1 -4
+# I -1 -3 -3 -3 -1 -3 -3 -4 -3  4  2 -3  1  0 -3 -2 -1 -3 -1  3 -3  3 -3 -1 -4
+# L -1 -2 -3 -4 -1 -2 -3 -4 -3  2  4 -2  2  0 -3 -2 -1 -2 -1  1 -4  3 -3 -1 -4
+# K -1  2  0 -1 -3  1  1 -2 -1 -3 -2  5 -1 -3 -1  0 -1 -3 -2 -2  0 -3  1 -1 -4
+# M -1 -1 -2 -3 -1  0 -2 -3 -2  1  2 -1  5  0 -2 -1 -1 -1 -1  1 -3  2 -1 -1 -4
+# F -2 -3 -3 -3 -2 -3 -3 -3 -1  0  0 -3  0  6 -4 -2 -2  1  3 -1 -3  0 -3 -1 -4
+# P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4  7 -1 -1 -4 -3 -2 -2 -3 -1 -1 -4
+# S  1 -1  1  0 -1  0  0  0 -1 -2 -2  0 -1 -2 -1  4  1 -3 -2 -2  0 -2  0 -1 -4
+# T  0 -1  0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1  1  5 -2 -2  0 -1 -1 -1 -1 -4
+# W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1  1 -4 -3 -2 11  2 -3 -4 -2 -2 -1 -4
+# Y -2 -2 -2 -3 -2 -1 -2 -3  2 -1 -1 -2 -1  3 -3 -2 -2  2  7 -1 -3 -1 -2 -1 -4
+# V  0 -3 -3 -3 -1 -2 -2 -3 -3  3  1 -2  1 -1 -2 -2  0 -3 -1  4 -3  2 -2 -1 -4
+# B -2 -1  4  4 -3  0  1 -1  0 -3 -4  0 -3 -3 -2  0 -1 -4 -3 -3  4 -3  0 -1 -4
+# J -1 -2 -3 -3 -1 -2 -3 -4 -3  3  3 -3  2  0 -3 -2 -1 -2 -1  2 -3  3 -3 -1 -4
+# Z -1  0  0  1 -3  4  4 -2  0 -3 -3  1 -1 -3 -1  0 -1 -2 -2 -2  0 -3  4 -1 -4
+# X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -4
+# * -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4  1
+#
+# Coordinates are 0-based.  For - strand matches, coordinates
+# in the reverse complement of the 2nd sequence are used.
+#
+# name start alnSize strand seqSize alignment
+#
+# batch 0
+a score=118 EG2=1.8 E=2.4e-11
+s Q2LCP8  110 232 +   491 LILIYSSIIGMLISMEAHNLITLFLSLEISSICFYILALNKNSRKGIEGGLKYYIIGGIATTILLLGIVSIYKSTGSLMYTDLLVIVMENTDDYRIQMGIALIVLGLILKLGIAPFHGWLIDVYEGAGMLMTFYLTITQKlvtlmvlinlyqnliiytnaimftngliILILVTLVVGTIGSLRQQKLIRFIAYSAIVNSALLILMLAGSMSEELMVNSVYYLINYIIGLTV
+s chrM   5258 639 + 16775 LICTVSLIMGTSITISSNH*ILA*TGLEINTLAIIPLISKSHHPRAIEATIKYFLTQSTASALILFSSITNA*STGQ*DITQL------NHPTSCLILTIAIAI-----KLGLVPFHF*FPEVLQGSSLITALLLSTLIKLPPITLLLLTSQSL----Nttllt---llaISSTLIGG*MG-LNQTQTRKILAFSSISHLG*IIIIISYNPQLTILTFILYTIMTSTVFLSL
+
+a score=72 EG2=6.3e+06 E=9e-05
+s Q2LCP8  379  52 +   491 ILVLMYLAGLPPMTNFISKILILLPYMVLGRVYLTMLAFFLSVGVMIYYMNL
+s chrM   5972 156 + 16775 ILTLLSLAGLPPLTGFMPK*LIIQELTKQEITPiatiitilsllslfFYLRL
+
+a score=55 EG2=1.6e+09 E=0.024
+s Q2LCP8   101  87 +   491 KKTKITDEGLILIYSSIIGMLISMEAHNLITLFLSLEISSICFYILALN-KNSRKGIEGGLKYYIIGGIATTILLLGIVSIYKSTGSL
+s chrM   11752 255 + 16775 KRKRIFISTLIIIQPFII---LAFSATELILFYISFEATLIPTLILITR*GNQPERLSAGIYLLFYTLISSLPLLVSILYLHTNTGTL
+
+a score=51 EG2=6e+09 E=0.09
+s Q2LCP8   170  49 +   491 TTILLLGIVS-IYKSTGSLMYTDLLVIVMENTDDYRIQMGIALIVLGLIL
+s chrM   13892 141 + 16775 TTCLCLGALSTLFAATCALTQNDIKKIIAFSTSS---QLGLIIVTIGLDL
+
+a score=48 EG2=1.6e+10 E=0.24
+s Q2LCP8   394 27 +   491 FISKILILLPYMVLGRVYLTMLAFFLS
+s chrM   11767 81 + 16775 FISTLIIIQPFIILAFSATELILFYIS
+
+a score=46 EG2=3.1e+10 E=0.47
+s Q2LCP8    16  38 +   491 YILPLII-LIVLSISIKKDVQRVHIIIQSLKLtlivimi
+s chrM   14080 115 + 16775 yiipmlr\LIIHSLNGEQDIRKIGCLQKTLPITTSCLTI
+
+a score=44 EG2=5.9e+10 E=0.91
+s Q2LCP8    27  57 +   491 SISIK-KDVQRVHIIIQSLKLtlivimiviGIEESIYVKLNGHLIKTELIKLFEYLLL
+s chrM   13941 170 + 16775 ALSLK/NDIKKIIAFSTSSQLGLIIVTIGLDLPQLAFLHISTHAFFKAILFLCSGLII
+
+a score=42 EG2=1.1e+11 E=1.8
+s Q2LCP8 166 24 +   491 GGIATTILLLGIVSIYKSTGSLMY
+s chrM    54 72 + 16775 GGILCIIVHTFIYHIYYGTGNIYY
+
+a score=42 EG2=1.1e+11 E=1.8
+s Q2LCP8   292 22 +   491 LRQQKLIRFIAYSAIVNSALLI
+s chrM   12313 66 + 16775 LRQTDLKSLIAYSSVSHMGLVI
+
+a score=42 EG2=1.1e+11 E=1.8
+s Q2LCP8   388 15 +   491 LPPMTNFISKILILL
+s chrM   12589 45 + 16775 LPPTTNLIAELTIIV
+
+a score=41 EG2=1.6e+11 E=2.4
+s Q2LCP8    10  66 +   491 MIKYSIYILPLIILIVLSISIKKDVQRVHIIIQSLKLtlivimiviGIEESI--YVKLNGHLIKTELI
+s chrM   11677 204 + 16775 LLVLSCWFLPLIIIASQGHLQHEPHKRKRIFISTLIIIQPFIILAFSATELILFYISFEATLIPTLIL
+
+a score=41 EG2=1.6e+11 E=2.4
+s Q2LCP8   15  44 +   491 IYILPLIILIVLSISIKKDVQRVHIIIQSLKLtlivimiviGIE
+s chrM   8444 129 + 16775 LYLLTLILIEKLS-SNTVDAQEVELI*TILPAIVlvllalpslq
+
+a score=41 EG2=1.6e+11 E=2.4
+s Q2LCP8   117 200 +   491 IIGMLISMEAHNLITLFLSLE-ISSICFYILALNKNSRKGIEGGLKYYIIGGIATTILLLGIVSIYKSTGSLMYTDLLVIVMENTDDYRIQMGIALIVLGLILKLGIAPFHGWLIDVYEGAGMLMTFYLTITQKlvtlmvlinlyqnliiytnaimftngliILILVTLVVGTIGSLRQQKLIRFIAYSAIVNSALLILML
+s chrM   13445 576 + 16775 liailTLTIANNIFLLFVG*EGVGIMSFLLIG**QGRAEANTAALQAIIYNRIGDIGLILSIA*L---ASSLNT*EIQQITHPNQTPTLPLLGLILAATGKSAQFGL---HP*LPAAIEGPTPVSALLHSSTIVVAGIFLLIRTHP--FLSSNKTALTTCLCLGALSTLFAATC-ALTQNDIKKIIAFSTSSQLGLIIVTI
+
+a score=41 EG2=1.6e+11 E=2.4
+s Q2LCP8  375  42 +   491 AIVYILVLMYLAGLPPMTNFISKILILLPYMVLGRVYLTMLA
+s chrM   5606 108 + 16775 SLITALLLSTLIKLPPIT------LLLLTSQSLNttlltlla
+
+a score=40 EG2=2.2e+11 E=3.4
+s Q2LCP8  374 30 +   491 GAIVYILVLMYLAGLPPM---TNFISKILILLP
+s chrM   7064 99 + 16775 gasvdlaifhylagVSSILGAINFITTIINIKP
+
+a score=43 EG2=8.2e+10 E=1.3
+s Q2LCP8  202 20 +   491 DYRIQMGIALIVLGLILKLG
+s chrM   9413 57 - 16775 DRRIrigvg-iglglllqlG
+
+a score=41 EG2=1.6e+11 E=2.4
+s Q2LCP8   0  34 +   491 MVCLFENLMNMIKYSIYILPLIILIVLSISIKKD
+s chrM   196 102 - 16775 LVSLGVSFVSLALFLVYLGGMLVVFVYSVSLAAD
+
+a score=40 EG2=2.2e+11 E=3.4
+s Q2LCP8  406 20 +   491 VLGRVYLTMLAFFLSVGVMI
+s chrM   2209 60 - 16775 IIPrvvtmmaavfvmvgivi
+
+# batch 1
+# Query sequences=2


=====================================
test/last-test.out
=====================================
@@ -3939,6 +3939,92 @@ TEST lastal -D1000 -fTAB -K2 /tmp/last-test galGal3-M-32.fa
 15	chrM	6590	19	+	16571	chr32	2	19	+	1028	19	EG2=2.4e+10	E=0.8
 # Query sequences=2
 
+TEST lastal -D1000 -fTAB -K0 /tmp/last-test galGal3-M-32.fa
+#
+# a=7 b=1 A=7 B=1 e=15 d=13 x=14 y=9 z=14 D=1000 E=2.43016e+10
+# R=01 u=0 s=2 S=0 M=0 T=0 m=10 l=1 n=10 K=0 k=1 w=1000 t=0.910239 j=3 Q=0
+# /tmp/last-test
+# Reference sequences=1 normal letters=16571
+# lambda=1.09602 K=0.335388
+#
+#     A   C   G   T   M   S   K   W   R   Y   B   D   H   V
+# A   1  -1  -1  -1   0  -1  -1   0   0  -1  -1   0   0   0
+# C  -1   1  -1  -1   0   0  -1  -1  -1   0   0  -1   0   0
+# G  -1  -1   1  -1  -1   0   0  -1   0  -1   0   0  -1   0
+# T  -1  -1  -1   1  -1  -1   0   0  -1   0   0   0   0  -1
+# M   0   0  -1  -1   0   0  -1   0   0   0   0   0   0   0
+# S  -1   0   0  -1   0   0   0  -1   0   0   0   0   0   0
+# K  -1  -1   0   0  -1   0   0   0   0   0   0   0   0   0
+# W   0  -1  -1   0   0  -1   0   0   0   0   0   0   0   0
+# R   0  -1   0  -1   0   0   0   0   0  -1   0   0   0   0
+# Y  -1   0  -1   0   0   0   0   0  -1   0   0   0   0   0
+# B  -1   0   0   0   0   0   0   0   0   0   0   0   0   0
+# D   0  -1   0   0   0   0   0   0   0   0   0   0   0   0
+# H   0   0  -1   0   0   0   0   0   0   0   0   0   0   0
+# V   0   0   0  -1   0   0   0   0   0   0   0   0   0   0
+#
+# Coordinates are 0-based.  For - strand matches, coordinates
+# in the reverse complement of the 2nd sequence are used.
+#
+# score	name1	start1	alnSize1	strand1	seqSize1	name2	start2	alnSize2	strand2	seqSize2	blocks
+# batch 0
+847	chrM	5902	1595	+	16571	chrM	6645	1589	+	16775	450,3:0,1085,3:0,54	EG2=0	E=0
+524	chrM	14756	1124	+	16571	chrM	14904	1124	+	16775	1124	EG2=1.3e-232	E=6.2e-242
+426	chrM	10944	1266	+	16571	chrM	11669	1266	+	16775	1266	EG2=5.6e-186	E=2.8e-195
+404	chrM	9109	918	+	16571	chrM	9824	918	+	16775	918	EG2=1.7e-175	E=8.4e-185
+366	chrM	3334	920	+	16571	chrM	4097	920	+	16775	920	EG2=2e-157	E=1e-166
+259	chrM	7524	722	+	16571	chrM	8266	721	+	16775	45,0:1,17,0:1,154,3:0,503	EG2=1.8e-106	E=9.1e-116
+249	chrM	13168	681	+	16571	chrM	13901	681	+	16775	681	EG2=1e-101	E=5.3e-111
+242	chrM	12461	671	+	16571	chrM	13197	668	+	16775	505,3:0,163	EG2=2.2e-98	E=1.1e-107
+193	chrM	4321	800	+	16571	chrM	5093	798	+	16775	66,3:0,69,0:1,662	EG2=4.6e-75	E=2.4e-84
+160	chrM	2908	255	+	16571	chrM	3629	255	+	16775	146,0:1,53,1:0,55	EG2=2.3e-59	E=1.2e-68
+149	chrM	1042	401	+	16571	chrM	1702	407	+	16775	114,0:2,92,0:4,33,0:1,27,0:1,45,1:0,32,1:0,56	EG2=4e-54	E=2.1e-63
+122	chrM	2409	334	+	16571	chrM	3112	338	+	16775	41,2:0,38,0:1,32,0:2,37,0:3,184	EG2=2.8e-41	E=1.5e-50
+114	chrM	5208	523	+	16571	chrM	5978	529	+	16775	233,3:0,84,0:5,39,0:3,14,1:0,69,0:2,80	EG2=1.8e-37	E=9.9e-47
+108	chrM	595	352	+	16571	chrM	1243	356	+	16775	56,1:0,82,0:3,63,0:1,19,0:1,55,1:0,57,0:1,18	EG2=1.3e-34	E=7.1e-44
+95	chrM	1742	281	+	16571	chrM	2432	295	+	16775	26,0:1,12,0:4,25,0:4,11,0:2,57,1:0,42,0:1,24,0:3,83	EG2=2e-28	E=1.1e-37
+92	chrM	10106	346	+	16571	chrM	10825	349	+	16775	299,0:3,47	EG2=5.4e-27	E=2.9e-36
+90	chrM	10518	272	+	16571	chrM	11243	272	+	16775	272	EG2=4.9e-26	E=2.6e-35
+72	chrM	8638	216	+	16571	chrM	9353	216	+	16775	216	EG2=1.8e-17	E=9.8e-27
+67	chrM	8897	151	+	16571	chrM	9612	151	+	16775	151	EG2=4.3e-15	E=2.4e-24
+60	chrM	12211	128	+	16571	chrM	12944	128	+	16775	128	EG2=9.2e-12	E=5.1e-21
+48	chrM	14425	318	+	16571	chrM	16456	319	+	16775	247,0:2,54,1:0,16	EG2=4.8e-06	E=2.6e-15
+40	chrM	1546	60	+	16571	chrM	2216	60	+	16775	60	EG2=0.031	E=1.7e-11
+36	chrM	5764	129	+	16571	chrM	6510	134	+	16775	78,0:2,33,0:3,18	EG2=2.5	E=1.4e-09
+33	chrM	1450	53	+	16571	chrM	2122	53	+	16775	53	EG2=66	E=3.6e-08
+26	chrM	198	48	+	16571	chrM	856	48	+	16775	48	EG2=1.4e+05	E=7.8e-05
+25	chrM	3237	70	+	16571	chrM	3973	69	+	16775	38,1:0,31	EG2=4.2e+05	E=0.00023
+24	chrM	2807	38	+	16571	chrM	3520	38	+	16775	38	EG2=1.3e+06	E=0.0007
+24	chrM	3279	28	+	16571	chrM	10177	28	-	16775	28	EG2=1.3e+06	E=0.0007
+23	chrM	15975	49	+	16571	chrM	16128	49	+	16775	49	EG2=3.8e+06	E=0.0021
+22	chrM	14065	78	+	16571	chrM	14801	78	+	16775	78	EG2=1.1e+07	E=0.0063
+19	chrM	14757	47	+	16571	chrM	14646	47	+	16775	47	EG2=3e+08	E=0.17
+18	chrM	10947	40	+	16571	chrM	13143	40	+	16775	40	EG2=9.1e+08	E=0.5
+17	chrM	2171	23	+	16571	chrM	2890	23	+	16775	23	EG2=2.7e+09	E=1.5
+17	chrM	2287	35	+	16571	chrM	2996	35	+	16775	35	EG2=2.7e+09	E=1.5
+17	chrM	4152	43	+	16571	chrM	2363	43	+	16775	43	EG2=2.7e+09	E=1.5
+17	chrM	5842	33	+	16571	chrM	3861	33	-	16775	33	EG2=2.7e+09	E=1.5
+17	chrM	8549	35	+	16571	chrM	473	35	+	16775	35	EG2=2.7e+09	E=1.5
+16	chrM	13128	26	+	16571	chrM	1473	26	-	16775	26	EG2=8.1e+09	E=4.5
+16	chrM	13647	60	+	16571	chrM	9068	60	+	16775	60	EG2=8.1e+09	E=4.5
+16	chrM	14155	42	+	16571	chrM	16201	42	+	16775	42	EG2=8.1e+09	E=4.5
+16	chrM	15450	32	+	16571	chrM	13086	32	+	16775	32	EG2=8.1e+09	E=4.5
+16	chrM	1668	36	+	16571	chrM	1653	36	+	16775	36	EG2=8.1e+09	E=4.5
+16	chrM	5427	26	+	16571	chrM	16421	26	+	16775	26	EG2=8.1e+09	E=4.5
+16	chrM	8312	24	+	16571	chrM	9034	24	+	16775	24	EG2=8.1e+09	E=4.5
+16	chrM	8362	42	+	16571	chrM	9080	42	+	16775	42	EG2=8.1e+09	E=4.5
+16	chrM	9094	38	+	16571	chrM	13088	38	+	16775	38	EG2=8.1e+09	E=4.5
+15	chrM	473	27	+	16571	chrM	5926	27	+	16775	27	EG2=2.4e+10	E=13
+15	chrM	4761	23	+	16571	chrM	9904	23	-	16775	23	EG2=2.4e+10	E=13
+15	chrM	6447	43	+	16571	chrM	9290	43	+	16775	43	EG2=2.4e+10	E=13
+15	chrM	6518	37	+	16571	chrM	3056	37	+	16775	37	EG2=2.4e+10	E=13
+# batch 1
+18	chrM	15816	34	+	16571	chr32	172	34	+	1028	34	EG2=9.1e+08	E=0.03
+15	chrM	13147	33	+	16571	chr32	78	33	+	1028	33	EG2=2.4e+10	E=0.8
+15	chrM	1676	23	+	16571	chr32	71	23	+	1028	23	EG2=2.4e+10	E=0.8
+15	chrM	6590	19	+	16571	chr32	2	19	+	1028	19	EG2=2.4e+10	E=0.8
+# Query sequences=2
+
 TEST lastal -W19 -fTAB /tmp/last-test hg19-M.fa
 #
 # a=7 b=1 A=7 B=1 e=22 d=13 x=21 y=9 z=21 D=1e+06 E=1.13155e+07


=====================================
test/last-test.sh
=====================================
@@ -189,6 +189,7 @@ trap 'rm -f $db*' EXIT
 
     # culling
     try lastal -D1000 -fTAB -K2 $db galGal3-M-32.fa
+    try lastal -D1000 -fTAB -K0 $db galGal3-M-32.fa
 
     # minimizers
     lastdb -W3 -R10 $db galGal3-M-32.fa


=====================================
test/maf-convert-test.out
=====================================
@@ -8304,6 +8304,11 @@ Sbjct: 9000 TACGCCTAACCGCTAACATTACTGCAG 9026
 97	chrM	59.30	86	35	0	1	86	570	655
 98	chrM	67.86	84	27	0	84	1	6926	7009
 99	chrM	79.31	87	18	0	87	1	8940	9026
+chrUn_KI270748v1	UN-L1MA6_pol#LINE/L1	63.82	633	194	13	13905	15715	658	1273	0	1.08e+03
+chrUn_KI270748v1	UN-L1PA2_pol#LINE/L1	93.39	227	15	0	3860	4540	1049	1275	1.5e-169	603
+chrUn_KI270748v1	UN-L1MA6_pol#LINE/L1	62.18	386	107	14	3661	2577	518	879	2.5e-152	546
+chrUn_KI270748v1	UN-L1MA6_pol#LINE/L1	61.64	292	89	8	90089	89272	884	1164	2e-147	530
+chrUn_KI270748v1	UN-L1PA16_pol#LINE/L1	64.07	359	96	11	17572	18588	527	864	3.8e-142	512
 chain 450 chr1 249250621 + 231468663 231468738 SRR359290.9002 75 + 0 75 1
 75
 chain 450 chr11 135006516 + 35273430 35273505 SRR359290.9010 75 + 0 75 2
@@ -8933,6 +8938,12 @@ chr19	maf-convert	match	1395388	1395484	.	-	.	ID=102.72;Name=102:4-102
 chr19	maf-convert	match_part	1395388	1395484	291	-	.	Target=102 4 102;Name=102:4-102;Parent=102.72
 chr22	maf-convert	match	20726589	20726617	.	-	.	ID=102.73;Name=102:69-95
 chr22	maf-convert	match_part	20726589	20726617	115	-	.	Target=102 69 95;Name=102:69-95;Parent=102.73
+##gff-version 3
+chrUn_KI270748v1	maf-convert	match	13905	15715	3177.2	+	.	Target=UN-L1MA6_pol#LINE/L1 658 1273;Name=UN-L1MA6_pol#LINE/L1:658-1273
+chrUn_KI270748v1	maf-convert	match	3860	4540	1775.7	+	.	Target=UN-L1PA2_pol#LINE/L1 1049 1275;Name=UN-L1PA2_pol#LINE/L1:1049-1275
+chrUn_KI270748v1	maf-convert	match	2577	3661	1607.4	-	.	Target=UN-L1MA6_pol#LINE/L1 518 879;Name=UN-L1MA6_pol#LINE/L1:518-879
+chrUn_KI270748v1	maf-convert	match	89272	90089	1559.7	-	.	Target=UN-L1MA6_pol#LINE/L1 884 1164;Name=UN-L1MA6_pol#LINE/L1:884-1164
+chrUn_KI270748v1	maf-convert	match	17572	18588	1508.0	+	.	Target=UN-L1PA16_pol#LINE/L1 527 864;Name=UN-L1PA16_pol#LINE/L1:527-864
 
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
@@ -12112,6 +12123,29 @@ SRR359290.9033        1 CAAAGTGCTGGGATTGCAGGCATAAGCCACTGTGCGTGGCCA       42
 606	8	0	0	4	8	17	34	+	90089	2478	48	670	chrX	156040895	23075589	23076237	22	9,31,26,2,35,9,4,43,7,56,10,9,13,90,10,40,50,5,68,65,2,30,	48,58,89,115,122,158,167,171,214,221,277,287,296,309,399,410,450,500,505,573,638,640,	23075589,23075598,23075630,23075663,23075665,23075700,23075710,23075716,23075760,23075770,23075827,23075838,23075848,23075864,23075956,23075966,23076007,23076058,23076064,23076135,23076203,23076207,
 100	1	0	0	0	0	5	6	-	90089	2478	675	776	chr7	159345973	121351142	121351249	6	9,10,41,2,20,19,	1702,1711,1721,1762,1764,1784,	121351142,121351152,121351164,121351206,121351209,121351230,
 1645	8	0	0	2	2	31	44	-	90089	2478	776	2431	chr7	159345973	121348853	121350550	34	45,14,4,43,11,65,37,114,184,15,47,75,120,53,3,25,117,94,52,69,19,94,51,8,84,40,4,46,1,8,13,26,22,50,	47,92,106,110,153,164,230,267,381,565,580,627,702,822,875,878,903,1020,1114,1166,1235,1254,1348,1399,1407,1491,1531,1535,1581,1582,1590,1604,1630,1652,	121348853,121348899,121348915,121348920,121348964,121348976,121349041,121349079,121349195,121349381,121349397,121349445,121349523,121349646,121349701,121349705,121349732,121349850,121349945,121349999,121350069,121350089,121350184,121350236,121350246,121350331,121350372,121350377,121350424,121350426,121350435,121350448,121350475,121350500,
+54	159	0	0	5	19	0	0	++	Q2LCP8	491	110	342	chrM	16775	5258	5897	6	83,15,45,6,14,50,	110,199,219,268,277,292,	5258,5507,5552,5687,5705,5747,
+18	34	0	0	0	0	0	0	++	Q2LCP8	491	379	431	chrM	16775	5972	6128	1	52,	379,	5972,
+24	60	0	0	1	3	1	3	++	Q2LCP8	491	101	188	chrM	16775	11752	12007	3	18,28,38,	101,122,150,	11752,11806,11893,
+16	30	0	0	1	3	1	3	++	Q2LCP8	491	170	219	chrM	16775	13892	14033	3	10,23,13,	170,180,206,	13892,13925,13994,
+8	19	0	0	0	0	0	0	++	Q2LCP8	491	394	421	chrM	16775	11767	11848	1	27,	394,	11767,
+10	28	0	0	0	0	1	1	++	Q2LCP8	491	16	54	chrM	16775	14080	14195	2	7,31,	16,23,	14080,14102,
+11	46	0	0	0	0	0	-1	++	Q2LCP8	491	27	84	chrM	16775	13941	14111	2	5,52,	27,32,	13941,13955,
+10	14	0	0	0	0	0	0	++	Q2LCP8	491	166	190	chrM	16775	54	126	1	24,	166,	54,
+10	12	0	0	0	0	0	0	++	Q2LCP8	491	292	314	chrM	16775	12313	12379	1	22,	292,	12313,
+7	8	0	0	0	0	0	0	++	Q2LCP8	491	388	403	chrM	16775	12589	12634	1	15,	388,	12589,
+17	49	0	0	0	0	1	6	++	Q2LCP8	491	10	76	chrM	16775	11677	11881	2	52,14,	10,62,	11677,11839,
+13	30	0	0	1	1	0	0	++	Q2LCP8	491	15	59	chrM	16775	8444	8573	2	13,30,	15,29,	8444,8483,
+43	148	0	0	4	9	1	3	++	Q2LCP8	491	117	317	chrM	16775	13445	14021	6	21,43,39,36,26,26,	117,138,184,226,264,291,	13445,13511,13640,13757,13865,13943,
+15	21	0	0	1	6	0	0	++	Q2LCP8	491	375	417	chrM	16775	5606	5714	2	18,18,	375,399,	5606,5660,
+12	18	0	0	0	0	1	9	++	Q2LCP8	491	374	404	chrM	16775	7064	7163	2	18,12,	374,392,	7064,7127,
+11	8	0	0	1	1	0	0	+-	Q2LCP8	491	202	222	chrM	16775	7305	7362	2	9,10,	202,212,	9413,9440,
+7	27	0	0	0	0	0	0	+-	Q2LCP8	491	0	34	chrM	16775	16477	16579	1	34,	0,	196,
+8	12	0	0	0	0	0	0	+-	Q2LCP8	491	406	426	chrM	16775	14506	14566	1	20,	406,	2209,
+404	194	0	0	12	18	12	17	++	UN-L1MA6_pol#LINE/L1	1275	657	1273	chrUn_KI270748v1	93321	13904	15715	14	59,30,16,143,13,18,19,15,43,67,48,18,75,34,	657,717,747,766,910,924,944,964,980,1024,1092,1142,1163,1239,	13904,14082,14173,14223,14654,14695,14749,14807,14853,14983,15185,15331,15387,15613,
+212	15	0	0	0	0	0	0	++	UN-L1PA2_pol#LINE/L1	1276	1048	1275	chrUn_KI270748v1	93321	3859	4540	1	227,	1048,	3859,
+240	107	0	0	12	15	11	44	+-	UN-L1MA6_pol#LINE/L1	1275	517	879	chrUn_KI270748v1	93321	2576	3661	15	10,16,12,5,4,8,13,92,15,35,11,14,24,80,8,	517,528,544,557,563,570,579,593,686,703,739,751,765,790,871,	89660,89692,89742,89780,89797,89810,89834,89873,90150,90195,90301,90335,90407,90480,90721,
+180	89	0	0	7	12	7	11	+-	UN-L1MA6_pol#LINE/L1	1275	883	1164	chrUn_KI270748v1	93321	89271	90089	9	7,33,40,84,4,44,37,12,8,	883,891,925,966,1054,1061,1105,1143,1156,	3232,3255,3355,3476,3730,3742,3875,3988,4026,
+230	96	0	0	9	12	8	39	++	UN-L1PA16_pol#LINE/L1	1276	526	864	chrUn_KI270748v1	93321	17571	18588	12	102,63,21,18,14,14,6,38,7,22,8,13,	526,629,693,715,735,749,766,773,812,820,843,851,	17571,17877,18066,18129,18185,18256,18300,18319,18434,18457,18524,18549,
 0	16	chrM	13914	71	3=1X11=1X28=2X21=1X15=1X3=	*	0	0	TCGAATTCTACCCTAACATCACACACCGCACAATCCCCTATCTAAACCTTCTTACGAGCCAAAACCTACCCCTACTCCTCCTAAACC	C at A=<3CC@@CBCCC8CBAC?BBBC?BB at BCCBBBCCCCBBBCBCABCBBBCCCCBCBBAC@CCBBCCACCACCCCCCBCCACCA?B	NM:i:6	AS:i:429
 1	0	chrM	1544	71	14=1X9=1X12=1X9=1X1=1X5=1X4=1X9=1X4=1X1=1X6=3X	*	0	0	TTATATAGAGGAGATAAGTCGTAATATGGTAAGTGTATTGGAAAGTGTATTTGGATGAACTAGAGTGTAGTTTAATATAAAGCATTT	BB at 1;?@B at BBBC@BBBCACBBA>B??=?A at B?B?B=7 at 4BB;B>@@@A?>=B at A@>@7>BA>BA6BA?@@B@@?B?AABBAB=<>B	NM:i:13	AS:i:420
 10	0	chrM	3291	69	2=2X1=1X2=1X4=2X1=1X3=3X4=2X2=2X1=2X2=1X1=2X1=1X6=3X7=27H	*	0	0	TTTTTTTTTTTAATCATATATTTATGGTTAATTTTTTATTTTTTATTGTATTTATTCTAA	@6)>B+A9<)?>>A(?A=-(48/<5?=1>4>:B@@<-:@@5;/9==ABA47*5':B<###	NM:i:23	AS:i:207
@@ -23615,3 +23649,8 @@ SRR359290.9984	16	chrX	86355890	255	2H14=1X9=49H	*	0	0	GAAAGGGGAAGGAAAAGAAGGAAG
 156	chr16	29595844	46	+	90354753	SRR359290.9033	0	46	+	75	46
 156	chr16	30335586	46	+	90354753	SRR359290.9033	0	46	+	75	46
 156	chr3	37456613	42	+	198022430	SRR359290.9033	0	42	+	75	42
+3177.2	UN-L1MA6_pol#LINE/L1	657	616	+	1275	chrUn_KI270748v1	13904	1811	+	93321	59,1:1,30,0:1,16,3:2,143,1:2,13,1:2,18,2:0,19,1:1,15,1:1,43,1:1,67,1:1,48,2:2,18,3:2,75,1:1,34	EG2=0	E=0
+1775.7	UN-L1PA2_pol#LINE/L1	1048	227	+	1276	chrUn_KI270748v1	3859	681	+	93321	227	EG2=2.9e-164	E=1.5e-169
+1607.4	UN-L1MA6_pol#LINE/L1	517	362	+	1275	chrUn_KI270748v1	89660	1085	-	93321	10,1:2,16,0:2,12,1:2,5,1:2,4,3:1,8,1:0,13,1:0,92,1:1,15,2:0,35,1:1,11,1:1,14,0:30,24,1:1,80,1:1,8	EG2=5e-147	E=2.5e-152
+1559.7	UN-L1MA6_pol#LINE/L1	883	281	+	1275	chrUn_KI270748v1	3232	818	-	93321	7,1:2,33,1:1,40,1:1,84,4:2,4,3:0,44,0:1,37,1:2,12,1:2,8	EG2=3.8e-142	E=2e-147
+1508.0	UN-L1PA16_pol#LINE/L1	526	338	+	1276	chrUn_KI270748v1	17571	1017	+	93321	102,1:0,63,1:0,21,1:0,18,2:2,14,0:29,14,3:2,6,1:1,38,1:1,7,1:2,22,1:1,8,0:1,13	EG2=7.4e-137	E=3.8e-142


=====================================
test/maf-convert-test.sh
=====================================
@@ -18,9 +18,11 @@ maf2=bs100.maf
     head -n999 $maf1 | $r -l100 blast
     $r blast $maf2
     $r blasttab $maf2
+    $r blasttab frameshift-new.maf
     head -n999 $maf1 | $r chain
     $r gff 102.maf
     $r -J1e9 gff 102.maf
+    $r gff frameshift-new.maf
     $r html -l100 $maf2
     head -n999 $maf1 | $r -n html
     head -n999 $maf1 | $r psl
@@ -29,9 +31,12 @@ maf2=bs100.maf
     $r -j1e9 psl 102.maf
     $r -J1e9 psl 102.maf
     $r psl 90089.maf
+    $r psl frameshift-old.maf
+    $r psl frameshift-new.maf
     $r -n sam $maf2
     head -n999 $maf1 | $r -r 'ID:1 PL:ILLUMINA SM:x' sam
     $r -d sam $maf1
     head -n999 $maf1 | $r -n tab
     head -n999 $maf1 | $r tab
+    $r -n tab frameshift-new.maf
 } | diff -u maf-convert-test.out -


=====================================
test/maf-swap-test.out
=====================================
@@ -769,3 +769,63 @@ p                                T\`hkkecba]\\`bbbceieae`]\[Z[ZZ[Z\^_^b^YY\[__cd
 p                                z~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}|yyyy}~~~~~}|yyyz~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||{{zz{~~~~~~~~~~~~~~~~~~~~~~|yywutsponnmmlllllmrw{~~~~~~~~~~~~~~~}}}}}~~~~~~~~~~|yxxxxx{|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zywwvssrqqqruwx}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{vrmlllkkkkkkllmnnooooppqrrrtuz~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|{{{yyyyy{{~~~~~~~~~~~~~~~~~~~~~~~~~~~}|{{|~~~~~~}xxwwurrpnjea````````______________``bccdddefglqvz~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~}||}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~yuttssstvxxz{|{|{||{{zyxxyz{{{||}}||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{wsnmmmmmmmllllllmnpqrrrrrrsvwx{}~~~~~~~~~~~~~~~~~~~|wsrpmid`[ZXXWWWWWWWWVTPLKJIHFEDA>98888888888888888888888763/+&%$
 
 
+TEST maf-swap frameshift-new.maf
+# LAST version 1243
+#
+# a=21 b=1 A=27 B=1 F=-2,0,-3,0 e=165.797 d=70 x=165 y=42 z=165 D=1e+09 E=18.1715
+# R=01 u=2 s=2 S=0 M=0 T=0 m=500 l=1 n=500 K=1 k=1 w=1000 t=4.24284 j=3 Q=0
+# ../aant/hg38/last/rmsk-hg38
+# Reference sequences=38335 normal letters=27515653
+# lambda=0.235691 K=1.69939
+#
+#   AAA AAC AAG AAT ACA ACC ACG ACT AGA AGC AGG AGT ATA ATC ATG ATT CAA CAC CAG CAT CCA CCC CCG CCT CGA CGC CGG CGT CTA CTC CTG CTT GAA GAC GAG GAT GCA GCC GCG GCT GGA GGC GGG GGT GTA GTC GTG GTT TAA TAC TAG TAT TCA TCC TCG TCT TGA TGC TGG TGT TTA TTC TTG TTT
+# A  -7  -5  -7  -6   3   3   1   3  -6  -3  -6  -2  -2  -3  -2  -4  -7  -6  -5  -6  -1  -1  -3  -1  -5  -4  -7  -5  -5  -6  -4  -5  -2  -2  -3  -3   9   9   7  10  -1   0  -2   1   4   4   4   4  -5  -9  -6  -8   2   1   0   1  -8  -7 -11  -6  -4  -6  -2  -5
+# C -11  -4 -11  -5  -7  -4 -11  -5  -8   2  -7   2  -9  -6 -11  -8  -7   1  -6   2 -12  -7  -9  -7  -1   8  -2   8 -10  -6  -6  -4 -12  -6 -10  -6  -6  -6 -29  -5  -8   3  -6   1 -10  -6  -7  -6  -2   5   0   6  -6  -1  -4   0   3  13   1  13  -7   0  -6   1
+# D  -4   4  -3   4  -9  -3  -7  -4  -7   0  -7   1 -12  -7  -9  -8  -4   1  -5   0 -10  -7 -10  -6 -27  -1  -6  -3 -15  -9 -14 -10   2  11   3  10  -7  -1  -3  -1  -2   5  -2   5  -6   0  -6  -1  -2   1  -3   0  -9  -5 -16  -6  -8  -3 -12  -4 -13  -8 -10 -10
+# E   2  -2   1  -1  -5  -8  -8  -6  -3  -4  -4  -5  -7 -12  -7 -12   0  -5   0  -5  -8  -9 -11 -11  -2 -11  -5  -9 -10 -13 -10 -11   9   3   8   4  -1  -6  -1  -6   2  -2   2  -1  -2  -6  -3  -7   3  -6   0  -5  -9  -9  -9  -8  -4  -9 -10  -8  -9 -14  -8 -12
+# F -17  -9 -16  -8 -11  -6  -7  -6 -16  -8 -13  -8  -8  -2  -6  -2 -10  -3 -10  -1 -12  -5  -8  -6 -11  -5  -4  -1  -4   3  -2   2 -18 -11 -18 -11  -9 -10 -11  -7 -13 -10 -12  -9  -6   1  -7  -1  -6   2  -4   3  -6   1  -2   1  -7   1  -8   2   2  11   2  11
+# G  -4  -3  -3  -3  -6  -6  -5  -6   4   3   3   3  -8 -10  -8  -9  -4  -5  -4  -3 -10  -7  -3  -7   0   2   2   0 -13 -13 -14 -13   3   1   3   2  -1   0   1  -1  11  10  10  10  -1  -1  -2  -2  -2  -7  -4  -6 -10  -7  -8  -6   1  -2  -3  -1 -10 -13 -11 -10
+# H  -6   0  -5   0  -8  -4 -25  -4  -9  -3  -6  -1 -13  -9 -11  -9   3  11   3  11  -5   1  -1   0  -1   7   2   9  -6  -1  -8  -1  -7  -2  -4  -1 -10  -6  -4  -6  -7  -3  -6  -2 -11  -5 -10  -5  -1   6   0   6  -7  -1  -3  -2  -3   2  -6   4  -8  -3  -9  -3
+# I  -5  -5  -8  -4   1   1   1   2  -4  -2  -6  -2   7   7   3   7  -9 -10 -10  -9  -7  -8  -8  -9  -6  -6 -21  -7   1  -1  -2  -1 -11 -11 -10  -9  -4  -5  -2  -4  -8  -8  -9  -7   4   3   1   3  -6  -8  -8  -9  -6  -8  -7  -7  -7  -7 -15  -9   0  -3  -2  -2
+# K   7   1   7   1  -1  -5   0  -5   3  -2   2  -1  -3 -10  -3  -8   0  -5  -1  -5  -7 -10  -4 -10  -2  -8  -5  -5  -8 -13 -10 -13  -1  -7   0  -6  -6  -9  -5  -8  -3  -8  -4  -6  -6 -10  -7  -9   2  -9  -1  -8  -7 -10 -12 -10  -3  -9  -8 -10  -6 -14  -9 -10
+# L -10 -10 -10 -11  -5  -7  -2  -4  -9  -8  -8  -8   0   0   1   0  -4  -2  -2  -2  -1  -1   3  -1   0   0  -3  -1   7   7   7   7 -12 -12 -10 -13  -8  -6  -1  -6 -11 -11  -8 -10   0  -1   0  -1  -3  -4  -4  -5  -2  -4   1  -4  -2  -4  -5  -3   7   3   6   3
+# M  -6  -7  -2  -6   1  -3   7  -3  -4  -6   1  -6   4   1  11   2  -7  -8  -5  -9  -6  -8  -1  -9  -4 -10  -8  -3   0  -2   4  -2  -8 -12  -4 -10  -3  -5   2  -5 -10  -8  -4 -10   1  -3   6  -2  -5  -9  -3 -10  -4  -8   2  -8  -6 -12  -6  -8   1  -5   5  -3
+# N   0   9   1   9  -5   1  -3   0  -3   5  -2   5  -7  -3  -7  -3  -3   1  -5   1  -9  -6 -11  -6  -6  -2  -5  -3 -14  -9 -13  -9  -4   2  -3   2  -8  -4  -9  -6  -6  -1  -6  -1  -9  -5  -9  -7  -2  -1  -5   0  -9  -5 -29  -6  -6  -4 -11  -4 -10  -9 -13  -7
+# P  -9  -9 -11  -9  -2  -2  -3  -1 -10  -9  -7  -7  -7  -8  -8  -8  -1  -1  -4  -2  10  10   9  10   1   2   0   2   4   2   2   2 -11  -8 -12  -9  -1   0   1  -1 -10  -7  -8  -8  -5  -6  -5  -6  -3  -5  -8  -5   5   5   4   5  -1  -3  -8  -4  -2  -3  -3  -3
+# Q  -1  -4   0  -4  -6  -5  -6  -7  -4  -5  -3  -6 -10 -12  -7 -11  10   2  10   3   0  -4   2  -5   6   0   4   1  -2  -8  -2  -7   0  -3   1  -5  -7  -9  -7  -6  -4  -6  -3  -8  -7  -8  -6  -9   6  -2   5  -2  -3  -4  -1  -5   2  -4  -2  -5  -3  -9  -4  -8
+# R   2  -4   3  -3  -1  -6  -1  -6   9   1   8   2  -3  -9  -3  -8   2   1   2   0  -7  -5  -6  -5   6   4   5   3  -8  -7  -8  -8  -4  -8  -4  -8  -7  -8  -3  -7   1  -4   2  -3  -7 -10  -6  -8   0  -5  -1  -4  -6  -7  -6  -6   5   1  -1   0  -6  -9  -7  -8
+# S  -6   0  -5  -1   0   2  -1   2  -3   6  -3   5  -5  -3  -5  -4  -5  -3  -4  -3   0   2  -1   1  -5   0  -4  -1  -5  -5  -4  -4  -6  -5  -6  -4   0   1  -1   1  -5   0  -4  -1  -5  -4  -4  -4  -1  -2  -4  -3   8   8   7   8  -1   0  -7  -1   1   0   1   0
+# T  -3  -2  -3  -2   7   7   6   7  -2   1  -3   0   2   1   1   1  -5  -5  -5  -6  -2  -2  -2  -1  -5  -7  -4  -4  -4  -6  -3  -6  -6  -6  -6  -6   3   1   2   2  -5  -5  -6  -6   0  -1   0  -1  -4  -8  -6  -6   2   0   1   1  -5  -5 -12  -7  -3  -6  -3  -5
+# V  -7  -6  -8  -7  -1   0  -1   1  -5  -5  -5  -4   3   4   2   4  -9  -6  -6  -7  -7  -5  -5  -5  -4  -7  -6  -5  -1  -2  -1  -1  -4  -5  -3  -4   1   2   4   2  -3  -3   0  -2   8   9   9   9  -5 -11  -6  -8  -5  -7  -3  -6  -7  -7 -11  -7   0  -3  -1  -1
+# W -14 -18  -7 -13 -16 -15  -7 -14  -6  -9   1  -9 -13 -23 -10 -13  -5  -7   3  -5 -11 -14  -2 -26   4  -4  10  -1  -9 -10  -4 -11 -12 -14  -4 -19 -14 -12  -5 -19  -5  -9   4  -8 -12 -18  -7 -14   2  -3  11  -2  -3 -11   5  -8  10   4  14   4  -3  -9   4  -5
+# Y -11  -2 -11  -2 -14  -7  -9  -8 -15  -5 -11  -4 -13  -9 -10  -8  -5   5  -3   6 -10  -6  -7  -5 -11   2  -4   3  -9  -4  -9  -5 -12  -4 -11  -2 -11  -9 -28  -8 -15  -7 -10  -5 -13  -5 -10  -8   3  11   4  11  -8   0  -6   0  -3   5  -5   6  -6   3  -5   2
+# * -27 -29 -25 -27 -29 -28 -30 -28 -20 -19 -17   1 -28 -29 -28 -29   0 -20   5 -29 -29 -29 -29 -27   9 -29   4 -29 -25 -29 -26 -29 -24 -29 -28 -29 -29 -28 -29 -29   4 -29 -25 -25 -28 -30 -28 -30  14  -5  10 -12 -26 -29   6 -29  14 -27  -3  -8 -10 -29 -29 -29
+# X   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
+#
+# Coordinates are 0-based.  For - strand matches, coordinates
+# in the reverse complement of the 2nd sequence are used.
+#
+# name start alnSize strand seqSize alignment
+#
+# batch 0
+a score=3177.2 EG2=0 E=0
+s chrUn_KI270748v1     13904 1811 + 93321 CAAGGGTGCCCACTCTCAGAACTTCTATTCAACATAGTACTGGATGTCCTAGCCAGAGCAATTAGGCAAAAGAAAGaaaTAAAAGGCATGAAAATTGGAAAGGAAGAAGTTAAATTGTTTCTGTTTGCAGTTGACATGATCTTATATATAGAAAACACCAATAACTCTGCCAAAAAA---TTTAGAATTCATAAATGAATTTAGTAAAGTTGCAGGATACAATGTGAACATACAAAATTCAGTAGCATTTCTACACATCAACAACAAACTATACAAAAAAagaaatcaagaaaacaATCCTATTTATAATAGCAACAAAA---------AATACTTAGATGTAAATTTAAACAAAGAGGTGAATGATCTTTACACTGAAAACTACAAAACATTGATGAAAACAATTGAAGAAGCCACAAATAAATGGAAAGATATCTCATGTTCATGGATTGGAAAAAGTAATATGTTTGAAATGTCCATACTATCCAAAGTGATGTACATATTGAATGCAATCTCTATCAAAATTCCTATGACATTTTCCCACAGAAATAGAAAAACAACTCTCAAATCTGTATGGAATCACAAAAAACTCTGAAAAGCCAAAATAATCTTGATCGAAAAAAGCAAGGCAGGAGATATCACATTACCTGACTTCAAATTATACTACATAGCTATAGCAATCGAAACACCATGGTACTGGCATAAACGCAGACACATAGACCAATTACACAGAATAAAGAGCCCATAAATAAATCTACAT---ATTATAGTCAATTGACTTTCAACAAAGGTGCCAGGAACACA---CATGGGGAAAGAACAGTCTCTTCAAAAAATGGTGTTGAGAAAACTGAATGTCCACA------AGATTGATCTTAGGCCCTTATTTCATACCATATAAAAATATAAATTCAAAATAAGTT---AGACTTAAATGTAAGACCTAGCACTATAGAACTCCTAGAAGAAAAC---AGGGGAATAACTCCAAGACATTGGTCTGGGCAATAATATTTTATGATATGACTCTAAAGCACAGGCAAGAAAAGCAACAAAACACAAATGGAATAGCATCAACCTAAAAAGCTTCTGCGCAGCAAAAGAA---AGTCAACAGAGTGAAGTGATAACCTACAAAATGGGAGGAATTATCTGCAAACTATACATTTGATAAGAGGCTAATGTCCAAAATATCTTAGGAACTCAAACAACACAataataagaaAACAAGGAACCCTAATGAAAAATTGACAAAGGATCTAAATAGACATTTCTCAAAAGAAGACATACAAATGGCCAACAGATATATA---AAAATGCTAATTATCACTGATCATCAGAGAAATGCATATTAAAACTACAATAAAATGCCATTTCACATCCGTTAGAATGGCTGTTACAGAAAAGGCAGAAGATACCAAGTGTTGGAGAGGATGTGGAGAAAAGGAAAACCTTGTA------ATTGTTGAGAATGTAAACTATTTCAGCCATTGTAAAAGACAGTATAAGTGATTCTG---------TAAAAATAGAATTACCATATGATTCAGTAATGCTATTTCTGGGCATATATTAAAAAGATATCAAATCAGTGTGTCAATGAGTTATCTGTACTCCCATATTTATTGTAGCATTATTCACAACAGCCAAGATGTGGAATTAACTTAAGTATCCATCGACACATGAGTGGATGAAGAAAATGTGGTACACATACACAATAGAATAGTATACAACCTTAaaaaataaaaaa---aGTATCATTTGTGACAACATGAATGAACCGGGAGGACATTATACTGAGTAAAATAATCCAGGCACAGAAAGCCAGATACTGCATAATCTCACTTGTATGTGGA
+s UN-L1MA6_pol#LINE/L1   657  616 +  1275 GlnGlyCysProLeuSerProLeuLeuPheAsnIleValLeuGluValLeuAlaArgAlaIleArgGlnGluLysGluIleLysGlyIleGlnIleGlyLysGluGluValLysLeuSerLeuPheAlaAspAspMetIleLeuTyrIleGluAsnProLysAspSerThrLysLysLeu-LeuGluLeuIleAsnGluPheSerLysValAlaGlyTyrLysIleAsnIleGlnLysSerValAlaPheLeuTyrAlaAsnSerGluLeu-SerGluLysGluIleLyslysthrilepropheThrIleAlaThrLysLysIleLys--TyrLeuGlyIleAsnLeuThrLysGluValLysAspLeuTyrXaaGluAsnTyrLysThrLeuMetLysGluIleGluGluAspThrAsnLysTrpLysAspIleProCysSerTrpIleGlyArgIleAsnIleValLysMetSerIleLeuProLysAlaIleTyrArgPheAsnAlaIleProIleLysIleProMetThrPhePheThrGluIleGluLysThrIleLeuLysPheValTrpAsnHisLysArgProArgIleAlaLysAlaIleLeuSerLysLysAsnLysAlaGlyGlyIleThrLeuProAspPheLysIleTyrTyrLysAlaIleValThrLysThrAlaTrpTyrTrpHisLysAsnArgHisIleAspGlnTrpAsnArgIleGluSerProGluIleAsnProArgIle--TyrSerGlnLeuIlePheAspLysGlyAlaLysAsnThrGln--TrpGlyLysAspSerLeuPheAsnLysTrpCysTrpGluAsnTrpIleSerThrCysArgArgMetLysLeuAspProTyrLeuSerProTyrThrLysIleAsnSerLysTrpIleLys-AspLeuAsnValArgProGluThrMetLysLeuLeuGluGluAsnIle-GlyGluMetLeuHisAspIleGlyLeuGlyLysAspPheLeuAspLysThrSerLysAlaGlnAlaThrLysAlaLysIleAspLysTrpAspTyrIleLysLeuLysSerPheCysThrAlaLysGluThr-IleAsnArgValLysArgGlnProThrGluTrpGluLysIlePheAlaAsnTyrAlaSerAspLysGlyLeuIleSerArgIleTyrLysGluLeuLysGlnLeuAsnSerLysLysThrAsnAsnProIleXaaLysTrpAlaLysAspLeuAsnArgHisPheSerLysGluAspIleGlnMetAlaAsnArgTyrMetLys-LysCysSerThrSerLeuIleIleArgGluMetGlnIleLysThrThrMetArgTyrHisLeuThrProValArgMetAlaIleIleLysLysThrLysAspAsnLysCysTrpArgGlyCysGlyGluLysGlyThrLeuThrHisCys--TrpTrpGluCysLysLeuValGlnProLeuTrpLysThrValTrpArgPheLeuLysLysLeu--LysIleGluLeuProTyrAspProAlaIleProLeuLeuGlyIleTyrProLysGluMetLysSerValCysArgArgAspIleCysThrProMetPheIleAlaAlaLeuPheThrIleAlaLysIleTrpAsnGlnProLysCysProSerThrAspGluTrpIleLysLysMetTrpTyrIleTyrThrMetGluTyrTyrSerAlaIleLysLysAsnGluIle-LeuSerPheAlaThrThrTrpMetAsnLeuGluAspIleMetLeuSerGluIleSerGlnAlaGlnLysAspLysTyrArgMetIleSerLeuIleCysGly
+
+a score=1775.7 EG2=2.9e-164 E=1.5e-169
+s chrUn_KI270748v1     3859 681 + 93321 CTAATATCCGGAATCTACAATGAACCCAAACAAATTTACAAGAAaaaaacaaacaaCCCCATCAAAAAGTGGGCAAAGGATATGAACAGACACTTCTCAAAAGAAGACATTTATGCAGCCAAAAAACACATGAAAAAATGCTCACTATCACTGGCCATCAGAGAAATGCAAATCAAAACCACAATGAGATACCATCTTACACCAGTTAGAATGGCCATCATTAAAAAGTCAGGAAACAACAGGTGCTGGAGAGGATGTGGAGAAATAGGAACATTTTTACACTGTTGGTGGGACTGTAAACTAGTTCAACCATTGTGGAAGACAGTGTGGTGATTCCGCAGGGATCTAGAACTAGAAATACCATTTGACCCAGCCATCCCATTACTGGGTATATACCCAAAGGACTATAAATCATGCTGCTATAAAGACACATGCACACGTATGTTTACTGTGGCACTATTCACAATAGCAAAGACTTGGAACCAATCCAAATGTCCAACAATGATAGACTGGATTAAGAAAACGTGGCACATATACACCATGGAATACTATGCAGCCATAAAAAATGATGAGTTCATGTCCTTTGTAGGGACATGGATGAAGCTGGAAACCATCATTCTCAGCAAACAATCACAAGGACAAAAAACCAAACACCGCATGTTCTCACTCATAGGTGGGAAT
+s UN-L1PA2_pol#LINE/L1 1048 227 +  1276 LeuIleSerArgIleTyrAsnGluLeuLysGlnIleTyrLysLysLysThrAsnAsnProIleLysLysTrpAlaLysAspMetAsnArgHisPheSerLysGluAspIleTyrAlaAlaLysLysHisMetLysLysCysSerSerSerLeuAlaIleArgGluMetGlnIleLysThrThrMetArgTyrHisLeuThrProValArgMetAlaIleIleLysLysSerGlyAsnAsnArgCysTrpArgGlyCysGlyGluIleGlyThrLeuLeuHiscystrptrpaspcyslysLeuValGlnProLeuTrpLysSerValTrpArgPheLeuArgAspLeuGluLeuGluIleProPheAspProAlaIleProLeuLeuGlyIleTyrProLysAspTyrLysSerCysCysTyrLysAspThrCysThrArgMetPheIleAlaAlaLeuPheThrIleAlaLysThrTrpAsnGlnProLysCysProThrMetIleAspTrpIleLysLysMetTrpHisIleTyrThrMetGluTyrTyrAlaAlaIleLysAsnAspGluPheMetSerPheValGlyThrTrpMetLysLeuGluIleIleIleLeuSerLysLeuSerGlnGluGlnLysThrLysHisArgIlePheSerLeuIleGlyGlyAsn
+
+a score=1607.4 EG2=5e-147 E=2.5e-152
+s chrUn_KI270748v1     89660 1085 - 93321 aaggcaaacaAGGACACTATAAGAAAAGTA---TGGGCCAACCAATATCCCTGATGAACACAGATACAAAAGTCCTCAAAAAAAAGTACTAGCAAACAGAATTTAACAACATATTAGGAGA---ACATTTACCATGATAAA---GTGGATTTATCCTC---------CAGATGTTTCAGCAAACACAAATCA---AATGTGATAAACCACATTAACAGAATGAAGGATAAAAAA---ATAGCTATCTCTATATATGCAGAAAAAGCATTTGACTAAATTCAAAATCCTCTCATGACTAAACCTCTCAACAAATTGGGCATAGAAGGCATGTACCTTAACACAAAACAGGACATATATAACAAGCTCACAGCTCACATCATACCCAACAATGAAAAAGTGAAATCTTTTCTGCTAAGATCAAAAACAAGACAAGGATATTTATTCTCACTACTTCTATTCAACTTATTTCTGGAAGTCCTAGCCAGAGCAATTAAGCCAAATAAAGAAATAAAA---TATTCAAATTGAAAAGGaagaagtaaaaTTGTCTCTGTTTGATGAC------ATATTATATATAGGAAACCCTAAAAACTCCACCAAAAAGCTATTAGAAATGATAAATGAATTCAATAAAATTTCAGAATTCAAAATCAATGTACAAAACTCAGTA---GTTTCTTTACACTCACAACAAACTATATGACAAA---AATAAAGAAATCAATCTCATTCACAGTAGCATCAAaaaaaacgtattttttttGTTTAGGAGCACATTTAGGATAGTACttaggagtacatttaACCAAGGAGGTGAAAGATCTGTATTCTGAACACTATAAAACATTGATGAAA---AATTGTAGATGACACAAATACATGGAAAGATATTTTATGTTCATGGGTAGGAAGAATTAATATTCTTAAAATGTCCTTACTGCCCAAAGCGATTTATAGGTTTAATGCAATATTTATCAAAATTTCAATGTCATTCTTCACAGAAATAGAAAAAACAATTTGAAAATTTATATGGAACCACAAAGGATCCTGAATAACTAAAGGACTCTTGAGCAATAAGAACAAAGCTGAAGGCCTCACA---ATCTGACTTCAAAACATATTACAGG
+s UN-L1MA6_pol#LINE/L1   517  362 +  1275 LysProAspLysAspThrThrLysLysGluAsn--TyrArgProIleSerLeuMetAsnIleAspAlaLysIleLeuAsnLys--IleLeuAlaAsnArgIleGlnGlnHisIleLysLysIle--IleHisHisAspGlnVal--GlyPheIleProGlyMetGln-GlyTrpPheAsnIleArgLysSerIleAsnValIleHisHisIleAsnArgMetLysAspLysAsnHisMetIleIleSerIleAspAlaGluLysAlaPheAspLysIleGlnHisProPheMetIleLysThrLeuAsnLysLeuGlyIleGluGlyThrTyrLeuAsnThrIleLysAlaIleTyrAspLysProThrAlaAsnIleIleLeuAsnGlyGluLysLeuLysAlaPheProLeuArgSerGlyThrArgGlnGlyCysProLeuSerProLeuLeuPheAsnIleValLeuGluValLeuAlaArgAlaIleArgGlnGluLysGluIleLysGly-IleGlnIleGlyLysGluGluValLysLeuSerLeuPheAlaAspAspMetIleLeuTyrIleGluAsnProLysAspSerThrLysLysLeuLeuGluLeuIleAsnGluPheSerLysValAlaGlyTyrLysIleAsnIleGlnLysSerValAla-PheLeuTyrAlaAsnSerGluLeuSerGluLysGlu-IleLyslysthrilepropheThrIleAlaThrLysLysIle------------------------------LysTyrLeuGlyIleAsnLeuThrLysGluValLysAspLeuTyrXaaGluAsnTyrLysThrLeuMetLysGlu-IleGluGluAspThrAsnLysTrpLysAspIleProCysSerTrpIleGlyArgIleAsnIleValLysMetSerIleLeuProLysAlaIleTyrArgPheAsnAlaIleProIleLysIleProMetThrPhePheThrGluIleGluLysThrIleLeuLysPheValTrpAsnHisLysArgProArgIleAlaLysAlaIleLeuSerLysLysAsnLysAlaGlyGlyIleThrLeu-ProAspPheLysIleTyrTyrLys
+
+a score=1559.7 EG2=3.8e-142 E=2e-147
+s chrUn_KI270748v1     3232 818 - 93321 TaatcagcctggtaatcaCGT---AAAACAGACACATAGACCAGTGGAACAGAATAGAGAACCCAGATATAAATCCACACATTTACAGCCAGCTCATCTTCAGCAAAGGCACCAACAACATACGA---GCGAAAGGACGGTCTCTTCCATAAGTGGTGCAGGGGAAACTAGATAAAGATATGCAGAAGAATGAAACTAGACCCGTCTCTCTTACCATACACAGAAATCAAATCAGAATGGATTAAAGGT---AAAACTGAGACCTGAAAGTATAAAACTACTGGAAGAAAACATTAGGGAAGTGCTCCAGGACATTGTTCTCAGCAAAGACTTTTTCAGTAGGGCCCCAAAAGCACAGGCAACCAAAGCAAAAACAGACAAGTGAAATCACACCAAGCTAAGAACCCTCTGCAGACCAAAGGAAAAAGTCAACAAACTGAAGAGACAACCCACAGAATGGGAGAAAATACTTGCAAGCTACCCACCTGACAAGGGATTCATAACC------------AGGAGCTCAAACAA---------TAGCAAACAATTAATCGAATTTTAAAATGGGCAAGAGACCTGAGTAGACATTTCTCAAAAGAAGATGTACAAATGGCCAGCAGGTACATGAAAAAATGCTCAACATCACTAATCATCAGAGAAACGCAAATAAAAAACTGCAATGAGGTCTTCTCTCACCTCAGTTAAAATGGCTTTCGTCAAAAACGCAGGGAATAAGGGATGCTGGCGAGGATGTGGAGAAAGGGGGACCCTCACACACTGT---TGTGGGAACGTTGATTAGTACAACCACTATGGAAAACA---GATGGAGGCTCCTCAaaaaaccaaaa
+s UN-L1MA6_pol#LINE/L1  883 281 +  1275 LysThrAlaTrpTyrTrpHisLys--AsnArgHisIleAspGlnTrpAsnArgIleGluSerProGluIleAsnProArgIleTyrSerGlnLeuIlePheAspLysGlyAlaLysAsnThrGlnTrp-GlyLysAspSerLeuPheAsnLysTrpCysTrpGluAsnTrpIleSerThrCysArgArgMetLysLeuAspProTyrLeuSerProTyrThrLysIleAsnSerLysTrpIleLysAspLeu-AsnValArgProGluThrMetLysLeuLeuGluGluAsnIleGlyGluMetLeuHisAspIleGlyLeuGlyLysAspPheLeuAspLysThrSerLysAlaGlnAlaThrLysAlaLysIleAspLysTrpAspTyrIleLysLeuLysSerPheCysThrAlaLysGluThrIleAsnArgValLysArgGlnProThrGluTrpGluLysIlePheAlaAsnTyrAlaSerAspLysGlyLeuIleSerArgIleTyrLys--GluLeuLysGlnLeuAsnSerLysLysThrAsnAsnProIleXaaLysTrpAlaLysAspLeuAsnArgHisPheSerLysGluAspIleGlnMetAlaAsnArgTyrMetLysLysCysSerThrSerLeuIleIleArgGluMetGlnIle-LysThrThrMetArgTyrHisLeuThrProValArgMetAlaIleIleLysLysThrLysAspAsnLysCysTrpArgGlyCysGlyGluLysGlyThrLeuThrHisCysTrp--TrpGluCysLysLeuValGlnProLeuTrpLysThrVal--TrpArgPheLeuLysLysLeuLys
+
+a score=1508.0 EG2=7.4e-137 E=3.8e-142
+s chrUn_KI270748v1      17571 1017 + 93321 AAAGAAAACTACAAATCCTTATCCCTGATCAACACAGATGTAAAAATACTCAACAAAATTCTAGCAAACTGAAGCTAACAACACATCAAAAAGATAATTCATCATGATCAAGTGGGCTTTATTCCAGGGGTGCTTGAATGGTTCAAAATAGACAAATCAATAAACATGATTCACCACATAAATGGAACTGAGAACAAAAACCCTATGATCATCTCATTAGATGCAGAATaagcatttgataaaatccaacatctgtttatgataaaaaccctcaACAATATAGGTATAGATGGAGTATACCTCAAA---AAATGAGTCATCTATGACAAAGCCACAGCCAACATCATCCTGGATGGGCAAAAGTTAGAAGTGTTGCTTCTAGAAACTGGAAAAAAGCAAGGATGTTCACCTTCATCATTCCTATTCAATACAGTACTGGAAGTGCTAGCCAGAACTATCAGAAAGGAGAAAGAAATAAAAGGTATACAAATTAGAAAA---GAAGTCAAATGATCTCTGCTCACTGATGACATGACTGTAGGCCTAGAAAACCCTAAAGTCTTC---AGAAGACTCCTAGACTTGATACACGACTTCAGTAAAGTCTTGGGATAAACAAGC------CACAAAAATCAGTTGTATTTCTATACACCAAATACATTCAAGCTGTTTGAATGTTTGTTGAGATTAATTtgttgAGAACCAAATTAAGAACTCAACTGAATTTACAATAGCCATG---------AAAAATACCTAGGAATGCAT---AACTATATAAATGAAAGATCTCTACAAGGAGAACTACAAAATACTAATGAAAGAAATTATAGATGACATAAACAAATGGAAAAACATCCCATGCTCATGGATTAGAAAAATCAAT---AGCTAAAGTGACCATATCACCC---ATACAATCTATAGAGTTAATGCAATTCCCATCAAATTACCAACGTTATTTCTCACAaaattaaaaaaa---aaTCCTAAAGTTCACATGGAGCCAAAAAAAGATCCCTAATAGCCAAAGCACTTCTAAGCAAAAAa
+s UN-L1PA16_pol#LINE/L1   526  338 +  1276 LysGluAsnTyrArgProIleSerLeuMetAsnIleAspAlaLysIleLeuAsnLysIleLeuAlaAsnArgIleGlnGlnHisIleLysLysLeuIleHisHisAspGlnValGlyPheIleProGlyMetGlnGlyTrpPheAsnIleArgLysSerIleAsnValIleHisHisIleAsnArgIleLysAsnLysAsnHisMetIleIleSerIleAspAlaGluLysAlaPheAspLysIleGlnHisProPheMetIleLysThrLeuXaaLysLeuGlyIleGluGlyThrTyrLeuLysIleIleArgAlaIleTyrAspLysProThrAlaAsnIleIleLeuAsnGlyGlnLysLeuGluAlaPheProLeuArgThrGlyThrArgGlnGlyCysProLeuSerProLeuLeuPheAsnIleValLeuGluValLeuAlaArgAlaIleArgGlnGluLysGluIleLysGlyIleGlnIleGlyLysGluGluValLysLeuSerLeuPheAlaAspAspMetIleLeuTyrLeuGluAsnProLysAspSerAlaLysArgLeuLeuGluLeuIleAsnAspPheSerLysValSerGlyTyrLysIleAsnVal--GlnLysSerValAlaPheLeuTyrThrAsnAsnValGlnAla-----------------------------GluSerGlnIleLysAsnAlaIleProPheThrIleAlaThrLysLysIle--LysTyrLeuGlyIleHisLeu-ThrLysGluValLysAspLeuTyrLysGluAsnTyrLysThrLeuLeuLysGluIleIleAspAspThrAsnLysTrpLysAsnIleProCysSerTrpIleGlyArgIleAsnIle-ValLysMetAlaIleLeuProLys--AlaIleTyrArgPheAsnAlaIleProIleLysLeuProMetSerPhePheThrGluLeuGluLysThr-IleLeuLysPheIleTrpAsnGln-LysArgAlaGlnIleAlaLysAlaIleLeuSerLysLys
+
+


=====================================
test/maf-swap-test.sh
=====================================
@@ -15,4 +15,5 @@ PATH=../bin:$PATH
     try maf-swap bs100.maf
     try maf-swap -n1 90089.maf
     try maf-swap -n3 ../examples/multiMito.maf
+    try maf-swap frameshift-new.maf
 } 2>&1 | diff -u $(basename $0 .sh).out -



View it on GitLab: https://salsa.debian.org/med-team/last-align/-/compare/52919d393333dac9cca9b189947ac2b14d26b13a...bf1432f5464effc0f937939646b03c87be267edf

-- 
View it on GitLab: https://salsa.debian.org/med-team/last-align/-/compare/52919d393333dac9cca9b189947ac2b14d26b13a...bf1432f5464effc0f937939646b03c87be267edf
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20210710/a650e6f0/attachment-0001.htm>


More information about the debian-med-commit mailing list