static void addPslBlock(struct psl* psl, struct block* blk, int* pslMax) /* add a block to a psl */ { unsigned newIBlk = psl->blockCount; assert((blk->qEnd - blk->qStart) == (blk->tEnd - blk->tStart)); if (newIBlk >= *pslMax) pslGrow(psl, pslMax); psl->qStarts[newIBlk] = blk->qStart; psl->tStarts[newIBlk] = blk->tStart; psl->blockSizes[newIBlk] = blk->qEnd - blk->qStart; /* lie about match counts. */ psl->match += psl->blockSizes[newIBlk]; /* count gaps */ if (newIBlk > 0) { if (psl->qStarts[newIBlk] > pslQEnd(psl, newIBlk-1)) { psl->qNumInsert++; psl->qBaseInsert += psl->qStarts[newIBlk] - pslQEnd(psl, newIBlk-1); } if (psl->tStarts[newIBlk] > pslTEnd(psl, newIBlk-1)) { psl->tNumInsert++; psl->tBaseInsert += psl->tStarts[newIBlk] - pslTEnd(psl, newIBlk-1); } } psl->blockCount++; }
static void addUngappedBlock(struct psl* psl, int* pslSpace, struct block* blk, unsigned flags) /* add the next ungapped block to a psl */ { unsigned newIBlk = psl->blockCount; unsigned blkSize = blk->qEnd - blk->qStart; // uses query size so protein psl is right if (newIBlk >= *pslSpace) pslGrow(psl, pslSpace); psl->qStarts[newIBlk] = blk->qCoordMult * blk->qStart; psl->tStarts[newIBlk] = blk->tCoordMult * blk->tStart; psl->blockSizes[newIBlk] = blk->qCoordMult * blkSize; /* keep bounds current */ psl->qStart = psl->qStarts[0]; psl->qEnd = psl->qStarts[newIBlk] + (blk->qCoordMult * blkSize); if (psl->strand[0] == '-') reverseIntRange(&psl->qStart, &psl->qEnd, psl->qSize); psl->tStart = psl->tStarts[0]; psl->tEnd = psl->tStarts[newIBlk] + (blk->q2tBlkSizeMult * blkSize); if (psl->strand[1] == '-') reverseIntRange(&psl->tStart, &psl->tEnd, psl->tSize); if (flags & bldPslx) { psl->qSequence[newIBlk] = cloneStringZ(blk->qAln + blk->alnStart, blkSize); psl->tSequence[newIBlk] = cloneStringZ(blk->tAln + blk->alnStart, blkSize); } psl->blockCount++; }
static void addPslBlock(struct psl* psl, struct block* blk, int* pslMax) /* add a block to a psl */ { unsigned newIBlk = psl->blockCount; assert((blk->qEnd - blk->qStart) == (blk->tEnd - blk->tStart)); if (newIBlk >= *pslMax) pslGrow(psl, pslMax); psl->qStarts[newIBlk] = blk->qStart; psl->tStarts[newIBlk] = blk->tStart; psl->blockSizes[newIBlk] = blk->qEnd - blk->qStart; /* lie about match counts. */ psl->match += psl->blockSizes[newIBlk]; psl->blockCount++; }