a3c34fc62526e195b493ec41e72f6b4a3ebe799f
kate
  Wed Apr 3 15:30:07 2019 -0700
Very preliminary

diff --git src/hg/hgTracks/factorSource.c src/hg/hgTracks/factorSource.c
index 0ab548d..0e955dc 100644
--- src/hg/hgTracks/factorSource.c
+++ src/hg/hgTracks/factorSource.c
@@ -13,60 +13,63 @@
 #include "hgTracks.h"
 #include "expRecord.h"
 #include "dystring.h"
 #include "factorSource.h"
 #include "bed6FloatScore.h"
 
 static struct factorSource *loadOne(char **row)
 /* Load up factorSource from array of strings. */
 {
 return factorSourceLoad(row);
 }
 
 /* Save info about factors and their motifs */
 struct factorSourceInfo {
     boolean showCellAbbrevs;
+    boolean showCellCounts;
     struct hash *factorChoices;
     struct hash *motifTargets;
     struct bed6FloatScore *motifs;
 };
 
 boolean factorFilter(struct track *track, void *item)
 /* Returns true if an item should be passed by the filter. NOTE: single filter supported here*/
 {
 struct hash *factorHash = ((struct factorSourceInfo *)track->extraUiData)->factorChoices;
 if (track->extraUiData != NULL && factorHash != NULL)
     if (hashLookup(factorHash, ((struct factorSource *)item)->name) != NULL)
         return TRUE;
 return FALSE;
 }
 
 static void factorSourceLoadItems(struct track *track)
 /* Load all items (and motifs if table is present) in window */
 {
 bedLoadItem(track, track->table, (ItemLoader)loadOne);
 if (track->items == NULL)
     return;
 
 struct factorSourceInfo *fsInfo = NULL;
 AllocVar(fsInfo);
 track->extraUiData = fsInfo;
 
-// Check UI setting to show cell abbreviations
+// Check UI setting to show cell abbreviations or counts
 char varName[64];
 safef(varName, sizeof(varName), "%s.showCellAbbrevs", track->track);
 fsInfo->showCellAbbrevs = cartUsualBoolean(cart, varName, TRUE);
+safef(varName, sizeof(varName), "%s.showCellCounts", track->track);
+fsInfo->showCellCounts = cartUsualBoolean(cart, varName, TRUE);
 
 // Filter factors based on multi-select
 filterBy_t *filter = filterBySetGet(track->tdb, cart, NULL);
 if (filter != NULL && filter->slChoices != NULL && differentString(filter->slChoices->name, "All"))
     {
     struct slName *choice;
     struct hash *factorHash = newHash(0);
     for (choice = filter->slChoices; choice != NULL; choice = choice->next)
         {
         hashAdd(factorHash, choice->name, NULL);
         }
     fsInfo->factorChoices = factorHash;
     filterItems(track, factorFilter, "include");
 }