dbff2df65c339ba878154eda07fd5ce60a2383c3
braney
  Fri Dec 5 17:07:07 2014 -0800
add the ability to get coverage (wiggle) plots for bed type tracks #952
diff --git src/hg/hgTracks/multiWig.c src/hg/hgTracks/multiWig.c
index e3bba02..825ff78 100644
--- src/hg/hgTracks/multiWig.c
+++ src/hg/hgTracks/multiWig.c
@@ -277,31 +277,31 @@
     {
     if (isSubtrackVisible(subtrack) )
 	{
 	numTracks++;
 	if (subtrack->networkErrMsg)
 	    errMsgFound = TRUE;
 	}
     }
 
 if (errMsgFound)
     {
     Color yellow = hvGfxFindRgb(hvg, &undefinedYellowColor);
     hvGfxBox(hvg, xOff, yOff, width, tg->height, yellow);
     }
 
-struct wigCartOptions *wigCart = tg->extraUiData;
+struct wigCartOptions *wigCart = tg->wigCartData;
 struct wigGraphOutput *wgo = setUpWgo(xOff, yOff, width, tg->height, numTracks, wigCart, hvg);
 
 /* Cope with autoScale and stacked bars - we do it here rather than in the child tracks, so that
  * all children can be on same scale. */
 double minVal, maxVal;
 
 /* Force load of all predraw arrays so can do calcs. Build up list, and then
  * figure out max/min.  No worries about multiple loading, the loaders protect
  * themselves. */
 struct slRef *refList = NULL;
 for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
     {
     if (isSubtrackVisible(subtrack))
 	{
 	struct preDrawContainer *pre = subtrack->loadPreDraw(subtrack, seqStart, seqEnd, width);
@@ -321,31 +321,31 @@
 slFreeList(&refList);
 
 if (!wigCart->autoScale)
     {
     minVal = wigCart->minY;
     maxVal = wigCart->maxY;
     }
 
 /* Loop through again setting up the wigCarts of the children to have minY/maxY for
  * our limits and autoScale off. */
 for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
     {
     if (!isSubtrackVisible(subtrack))
 	continue;
 
-    struct wigCartOptions *wigCart = subtrack->extraUiData;
+    struct wigCartOptions *wigCart = subtrack->wigCartData;
     wigCart->minY = minVal;
     wigCart->maxY = maxVal;
     wigCart->autoScale = wiggleScaleManual;
     struct preDrawContainer *pre = subtrack->preDrawContainer;
 
     if (pre != NULL)  // pre maybe null if the load fails
 	{
 	pre->graphUpperLimit = maxVal;
 	pre->graphLowerLimit = minVal;
 	}
     }
 
 int numTrack = 0;
 for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
     {
@@ -374,31 +374,31 @@
 
 if (wigCart->aggregateFunction == wiggleAggregateTransparent)
    {
    floatPicIntoHvg(wgo->image, xOff, yOff, hvg);
    floatPicFree((struct floatPic **)&wgo->image);
    }
 
 char *url = trackUrl(tg->track, chromName);
 mapBoxHgcOrHgGene(hvg, seqStart, seqEnd, xOff, yOff, width, tg->height, tg->track, tg->track, NULL,
 	      url, TRUE, NULL);
 }
 
 static int multiWigTotalHeight(struct track *tg, enum trackVisibility vis)
 /* Return total height of multiWigcontainer. */
 {
-struct wigCartOptions *wigCart = tg->extraUiData;
+struct wigCartOptions *wigCart = tg->wigCartData;
 int totalHeight =  0;
 if (wigCart->aggregateFunction !=  wiggleAggregateNone)
     totalHeight =  wigTotalHeight(tg, vis);                                                        
 struct track *subtrack;
 for (subtrack = tg->subtracks; subtrack != NULL; subtrack = subtrack->next)
     {
     if (isSubtrackVisible(subtrack))
 	{
 	// Logic is slightly complicated by fact we want to call the totalHeight
 	// method for each subtrack even if in overlay mode.
 	int oneHeight = subtrack->totalHeight(subtrack, vis);
 	if (wigCart->aggregateFunction ==  wiggleAggregateNone)
 	    {
 	    if (totalHeight != 0)
 	       totalHeight += 1;
@@ -423,31 +423,31 @@
 	    *retFirstTrack = firstTrack = track;
 	else if (track->graphUpperLimit != firstTrack->graphUpperLimit 
 	    || track->graphLowerLimit != firstTrack->graphLowerLimit)
 	    return FALSE;
 	}
     }
 return firstTrack != NULL;
 }
 
 static void multiWigLeftLabels(struct track *tg, int seqStart, int seqEnd,
 	struct hvGfx *hvg, int xOff, int yOff, int width, int height,
 	boolean withCenterLabels, MgFont *font, Color color,
 	enum trackVisibility vis)
 /* Draw left labels - by deferring to first subtrack. */
 {
-struct wigCartOptions *wigCart = tg->extraUiData;
+struct wigCartOptions *wigCart = tg->wigCartData;
 if (wigCart->aggregateFunction != wiggleAggregateNone)
     {
     struct track *firstVisibleSubtrack = NULL;
     boolean showNumbers = graphLimitsAllSame(tg->subtracks, &firstVisibleSubtrack);
     struct track *subtrack = (showNumbers ? firstVisibleSubtrack : tg->subtracks);
     wigLeftAxisLabels(tg, seqStart, seqEnd, hvg, xOff, yOff, width, height, withCenterLabels,
 	    font, color, vis, tg->shortLabel, subtrack->graphUpperLimit, 
 	    subtrack->graphLowerLimit, showNumbers);
     }
 else
     {
     struct track *subtrack;
     int y = yOff;
     if (withCenterLabels)
        y += tl.fontHeight+1;