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]; + } +}