725fb44d51252c1708b7f7b5294bd810d102dd44 markd Sun Aug 16 21:55:23 2015 -0400 added function to clone a psl diff --git src/lib/psl.c src/lib/psl.c index e7ac689..377bd47 100644 --- src/lib/psl.c +++ src/lib/psl.c @@ -1961,15 +1961,33 @@ { float aligned = psl->match + psl->misMatch + psl->repMatch; if (aligned == 0.0) return 0.0; else return ((float)(psl->match + psl->repMatch))/aligned; } float pslQueryAligned(struct psl *psl) /* compute fraction of query that was aligned */ { float aligned = psl->match + psl->misMatch + psl->repMatch; return aligned/(float)psl->qSize; } +struct psl* pslClone(struct psl *psl) +/* clone a psl */ +{ +struct psl* pslCp = pslNew(psl->qName, psl->qSize, psl->qStart, psl->qEnd, + psl->tName, psl->tSize, psl->tStart, psl->tEnd, + psl->strand, psl->blockCount, + ((psl->tSequence != NULL) ? PSL_XA_FORMAT : 0)); +int iBlk; +for (iBlk = 0; iBlk < psl->blockCount; iBlk++) + { + pslCp->blockSizes[iBlk] = psl->blockSizes[iBlk]; + pslCp->qStarts[iBlk] = psl->qStarts[iBlk]; + pslCp->tStarts[iBlk] = psl->tStarts[iBlk]; + pslCp->qSequence[iBlk] = cloneString(psl->qSequence[iBlk]); + pslCp->tSequence[iBlk] = cloneString(psl->tSequence[iBlk]); + } +return pslCp; +}