23b9c239a6c92dc82a54294f9c99aa4b47292b79
kent
  Wed Dec 15 08:29:05 2021 -0800
Making merged bars respect individual field selection too on genome browser.

diff --git src/hg/lib/facetedTable.c src/hg/lib/facetedTable.c
index 84978b7..f7c953f 100644
--- src/hg/lib/facetedTable.c
+++ src/hg/lib/facetedTable.c
@@ -584,45 +584,50 @@
 return retList;
 }
 
 static int facetedTableMergedOffsetCmp(const void *va, const void *vb)
 /* Compare to sort based on name start. */
 {
 const struct facetedTableMergedOffset *a = *((struct facetedTableMergedOffset **)va);
 const struct facetedTableMergedOffset *b = *((struct facetedTableMergedOffset **)vb);
 return cmpWordsWithEmbeddedNumbers(a->name, b->name);
 }
 
 struct facetedTableMergedOffset *facetedTableMakeMergedOffsets(struct facetedTable *facTab,
      struct cart *cart)
 /* Return a structure that will let us relatively rapidly merge together one row */
 {
+struct fieldedTable *tableIn = facTab->table;
+fieldedTableResetRowIds(tableIn, 0);	// Use the seldom-used ID column as indexes
+
 /* Figure out user selection of fields to select on and merge as ffSelList */
 char *selList = facetedTableSelList(facTab, cart);
 struct facetField *ffSelList  = deLinearizeFacetValString(selList);
 
+/* Remove columns that have not been selected */
+struct fieldedTable *subtable = facetFieldSelectRows(facTab->table, selList, facTab->ffArray);
+// struct fieldedTable *subtable = facTab->table; // ugly
+
 /* Get output column list and pointers to key columns */
-struct fieldedTable *tableIn = facTab->table;
 struct mergeColHelper *countCol = NULL, *valCol = NULL, *colorCol = NULL;
-struct mergeColHelper *colList = makeColList(facTab, tableIn, ffSelList, 
+struct mergeColHelper *colList = makeColList(facTab, subtable, ffSelList, 
     &countCol, &valCol, &colorCol);
-struct mergeGroup *mergeList = findMergeGroups(tableIn, colList);
+struct mergeGroup *mergeList = findMergeGroups(subtable, colList);
 int newFieldCount;
 struct mergeColHelper **outCol;
 annotateColListAndMakeNewFields(colList, mergeList, &newFieldCount, &outCol);
 
-fieldedTableResetRowIds(tableIn, 0);	// Use the seldom-used ID column as indexes
 struct facetedTableMergedOffset *tmoList = NULL;
 struct mergeGroup *merge;
 
 for (merge = mergeList; merge != NULL; merge = merge->next)
     {
     struct facetedTableMergedOffset *tmo;
     AllocVar(tmo);
     slAddHead(&tmoList, tmo);
     tmo->name = merge->key;
     int r,g,b;
     weightedAveColorAt(countCol, colorCol->ix, merge, &r, &g, &b);
     safef(tmo->color, sizeof(tmo->color), "#%02X%02X%02X", r, g, b);
 
     struct slRef *ref;
     for (ref = merge->rowRefList; ref != NULL; ref = ref->next)