7a5e8f2a38911ebaba50f00081c97b830781b1e5
angie
  Wed Jun 5 12:13:47 2013 -0700
Generating sequence names as <db>_<track>_<itemName> 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. */
 {