7a5e8f2a38911ebaba50f00081c97b830781b1e5 angie Wed Jun 5 12:13:47 2013 -0700 Generating sequence names as __ works great exceptfor bed3 tracks that have NULL names. Use an incrementing count to generate distinct names instead. fixes #10995 diff --git src/hg/lib/hgSeq.c src/hg/lib/hgSeq.c index f2a18e7..4f865f9 100644 --- src/hg/lib/hgSeq.c +++ src/hg/lib/hgSeq.c @@ -510,31 +510,30 @@ /* catch a special case: introns selected, but no exons -> include all introns * instead of qualifying intron with exon flags. */ if (intron && !(utrExon5 || cdsExon || utrExon3)) { utrIntron5 = cdsIntron = utrIntron3 = TRUE; } canDoUTR = hti->hasCDS; canDoIntrons = hti->hasBlocks; rowCount = totalCount = 0; for (bedItem = bedList; bedItem != NULL; bedItem = bedItem->next) { if (bedItem->blockCount == 0) /* An intersection may have made hti unreliable. */ canDoIntrons = FALSE; - rowCount++; int chromSize = hgSeqChromSize(db, bedItem->chrom); // bed: translate relative starts to absolute starts for (i=0; i < bedItem->blockCount; i++) { bedItem->chromStarts[i] += bedItem->chromStart; } isRc = (bedItem->strand[0] == '-'); // here's the max # of feature regions: if (canDoIntrons) count = 4 + (2 * bedItem->blockCount); else count = 5; maxStartsOffset = count-1; starts = needMem(sizeof(unsigned) * count); sizes = needMem(sizeof(unsigned) * count); @@ -746,34 +745,38 @@ addFeature(&count, starts, sizes, exonFlags, cdsFlags, bedItem->chromStart, (bedItem->chromEnd - bedItem->chromStart), TRUE, FALSE, chromSize); } if (!isRc && downstream && (downstreamSize > 0)) { addFeature(&count, starts, sizes, exonFlags, cdsFlags, bedItem->chromEnd, downstreamSize, FALSE, FALSE, chromSize); } else if (isRc && promoter && (promoterSize > 0)) { addFeature(&count, starts, sizes, exonFlags, cdsFlags, bedItem->chromEnd, promoterSize, FALSE, FALSE, chromSize); } + if (bedItem->name != NULL) safef(itemName, sizeof(itemName), "%s_%s", hti->rootName, bedItem->name); + else + safef(itemName, sizeof(itemName), "%s_%d", hti->rootName, rowCount); hgSeqRegionsAdjDb(db, bedItem->chrom, chromSize, bedItem->strand[0], itemName, concatRegions, concatAdjacent, count, starts, sizes, exonFlags, cdsFlags); + rowCount++; totalCount += count; freeMem(starts); freeMem(sizes); freeMem(exonFlags); freeMem(cdsFlags); } return totalCount; } int hgSeqItemsInRange(char *db, char *table, char *chrom, int chromStart, int chromEnd, char *sqlConstraints) /* Print out dna sequence of all items (that match sqlConstraints, if nonNULL) in the given range in table. Return number of items. */ {