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