6dcef0d057b21be3cb1cbe699998764883543c84
kate
  Thu Apr 6 16:46:22 2017 -0700
First cut bigBarChart track type for hubs. Basic function on hgTracks, hgTrackUi, and hgc.  Lacks boxplot on details page, custom track support, extra fields

diff --git src/hg/hgTracks/barChartTrack.c src/hg/hgTracks/barChartTrack.c
index cc046ec..b4099fd 100644
--- src/hg/hgTracks/barChartTrack.c
+++ src/hg/hgTracks/barChartTrack.c
@@ -1,25 +1,26 @@
 /* barGraph tracks - display a colored bargraph across each region in a file */
 
 /* Copyright (C) 2015 The Regents of the University of California 
  * See README in this or parent directory for licensing information. */
 
 #include "common.h"
 #include "hgTracks.h"
 #include "bed.h"
 #include "hvGfx.h"
 #include "spaceSaver.h"
+#include "hubConnect.h"
 #include "barChartBed.h"
 #include "barChartCategory.h"
 #include "barChartUi.h"
 
 // If a category contributes more than this percentage, its color is displayed in squish mode
 // Could be a trackDb setting
 #define SPECIFICITY_THRESHOLD   10
 
 struct barChartTrack
 /* Track info */
     {
     boolean noWhiteout;         /* Suppress whiteout of graph background (allow highlight, blue lines) */
     double maxMedian;           /* Maximum median across all categories */
     boolean doLogTransform;     /* Log10(x+1) */
     char *unit;                /* Units for category values (e.g. RPKM) */
@@ -237,32 +238,31 @@
     tg->itemColor = barChartItemColor;
 
 /* Get track UI info */
 struct barChartTrack *extras;
 AllocVar(extras);
 tg->extraUiData = extras;
 
 extras->doLogTransform = cartUsualBooleanClosestToHome(cart, tg->tdb, FALSE, BAR_CHART_LOG_TRANSFORM, 
                                                 BAR_CHART_LOG_TRANSFORM_DEFAULT);
 extras->maxMedian = barChartUiMaxMedianScore();
 extras->noWhiteout = cartUsualBooleanClosestToHome(cart, tg->tdb, FALSE, BAR_CHART_NO_WHITEOUT,
                                                         BAR_CHART_NO_WHITEOUT_DEFAULT);
 extras->unit = trackDbSettingClosestToHomeOrDefault(tg->tdb, BAR_CHART_UNIT, "");
 
 /* Get bed (names and all-sample category median scores) in range */
-char *filter = getScoreFilterClause(cart, tg->tdb, NULL);
-bedLoadItemWhere(tg, tg->table, filter, (ItemLoader)barChartBedLoad);
+loadSimpleBedWithLoader(tg, (bedItemLoader)barChartBedLoad);
 
 /* Create itemInfo items with BED and geneModels */
 struct barChartItem *itemInfo = NULL, *list = NULL;
 struct barChartBed *bed = (struct barChartBed *)tg->items;
 
 /* Load category colors */
 extras->colors = getCategoryColors(tg);
 
 filterCategories(tg);
 
 while (bed != NULL)
     {
     AllocVar(itemInfo);
     itemInfo->bed = bed;
     slAddHead(&list, itemInfo);
@@ -794,30 +794,32 @@
     tg->nonPropPixelWidth = NULL;
     }
 }
 
 static char *barChartItemName(struct track *tg, void *item)
 /* Return item name */
 {
 struct barChartItem *chartItem = (struct barChartItem *)item;
 struct barChartBed *bed = (struct barChartBed *)chartItem->bed;
 return bed->name;
 }
 
 void barChartMethods(struct track *tg)
 /* Bar Chart track type: draw fixed width chart of colored bars over a BED item */
 {
+// TODO: derive this from AS or trackDb ?
+tg->bedSize = 8;
 bedMethods(tg);
 tg->canPack = TRUE;
 tg->drawItemAt = barChartDrawAt;
 tg->preDrawItems = barChartPreDrawItems;
 tg->loadItems = barChartLoadItems;
 tg->mapItem = barChartMapItem;
 tg->itemName = barChartItemName;
 tg->mapItemName = barChartItemName;
 tg->itemHeight = barChartItemHeight;
 tg->itemStart = barChartItemStart;
 tg->itemEnd = barChartItemEnd;
 tg->totalHeight = barChartTotalHeight;
 tg->nonPropDrawItemAt = barChartNonPropDrawAt;
 tg->nonPropPixelWidth = barChartNonPropPixelWidth;
 }