d93f47cd567bb70aba94de233054e8b4fae00f7d
braney
  Fri May 29 15:33:58 2020 -0700
remove frameshifts from psls in hgVai

diff --git src/lib/psl.c src/lib/psl.c
index 3346ffd..f6b65c4 100644
--- src/lib/psl.c
+++ src/lib/psl.c
@@ -2117,15 +2117,36 @@
     slSort(pslList, pslCmpScore);
     }
 else if (sameString(sort, "chrom,start"))
     {
     slSort(pslList, pslCmpTargetStart);
     }
 else if (sameString(sort, "chrom,score"))
     {
     slSort(pslList, pslCmpTargetScore);
     }
 else
     {
     slSort(pslList, pslCmpQueryScore);
     }
 }
+
+void pslRemoveFrameShifts(struct psl *psl)
+/* Remove any frameshits if present. Changes in place, doesn't update statistics in first nine fields. */
+{
+unsigned prevEnd = psl->tStarts[0];
+int ii;
+
+for(ii = 0; ii < psl->blockCount; ii++)
+    {
+    int diff = prevEnd - psl->tStarts[ii];
+    if (diff > 0)
+        {
+        if (diff > psl->blockSizes[ii])
+            errAbort("frame shift (%d) larger than block size (%d)", diff, psl->blockSizes[ii]);
+        psl->blockSizes[ii] -= diff;
+        psl->tStarts[ii] += diff;
+        psl->qStarts[ii] += diff;
+        }
+    prevEnd = psl->tStarts[ii] + psl->blockSizes[ii];
+    }
+}