b2acdf83569bcb30013ed09d885d3f48b19c1d4e
jcasper
  Wed Sep 11 16:03:26 2019 -0700
Better support for hic composite tracks, and hic trackUi pages now include
metadata from the file, refs #22316

diff --git src/hg/hgTables/hic.c src/hg/hgTables/hic.c
index 6cd092e..2bc9253 100644
--- src/hg/hgTables/hic.c
+++ src/hg/hgTables/hic.c
@@ -171,37 +171,37 @@
         {
 	fprintf(f, "# Filtering on %d columns\n", slCount(filter->columnList));
 	}
     }
 
 /* Loop through outputting each region */
 struct region *region, *regionList = getRegions();
 
 int maxOut = bigFileMaxOutput();
 
 char *fileName = hicFileName(table, conn);
 struct hicMeta *fileInfo;
 char *errMsg = hicLoadHeader(fileName, &fileInfo, database);
 if (errMsg != NULL)
     errAbort("%s", errMsg);
-
-char *norm = hicUiFetchNormalization(cart, table, fileInfo);
+struct trackDb *tdb = hashFindVal(fullTableToTdbHash, table);
+char *norm = hicUiFetchNormalization(cart, tdb, fileInfo);
 
 for (region = regionList; region != NULL && (maxOut > 0); region = region->next)
     {
     struct interact *results = NULL, *result = NULL;
-    int res = hicUiFetchResolutionAsInt(cart, table, fileInfo, region->end-region->start);
+    int res = hicUiFetchResolutionAsInt(cart, tdb, fileInfo, region->end-region->start);
     char *errMsg = hicLoadData(fileInfo, res, norm, region->chrom, region->start, region->end,
             region->chrom, region->start, region->end, &results);
     if (errMsg != NULL)
         warn("%s", errMsg);
     slSort(&results, &hicCompare);
     char *row[INTERACT_NUM_COLS];
     char numBuf[HIC_NUM_BUF_SIZE];
     for (result = results; result != NULL && (maxOut > 0); result = result->next)
         {
 	hicRecordToRow(result, numBuf, row);
 	if (asFilterOnRow(filter, row))
 	    {
 	    int i;
 	    fprintf(f, "%s", row[columnArray[0]]);
 	    for (i=1; i<fieldCount; ++i)
@@ -223,32 +223,33 @@
 
 static void addFilteredBedsOnRegion(char *fileName, struct region *region,
 	char *table, struct asFilter *filter, struct lm *bedLm, struct bed **pBedList,
 	struct hash *idHash, int *pMaxOut)
 /* Add relevant beds in reverse order to pBedList */
 {
 struct hicMeta *fileInfo = NULL;
 char *errMsg = hicLoadHeader(fileName, &fileInfo, database);
 
 if (errMsg != NULL)
     {
     warn("%s", errMsg);
     }
 else
     {
-    int res = hicUiFetchResolutionAsInt(cart, table, fileInfo, region->end-region->start);
-    char *norm = hicUiFetchNormalization(cart, table, fileInfo);
+    struct trackDb *tdb = hashFindVal(fullTableToTdbHash, table);
+    int res = hicUiFetchResolutionAsInt(cart, tdb, fileInfo, region->end-region->start);
+    char *norm = hicUiFetchNormalization(cart, tdb, fileInfo);
 
     struct interact *results = NULL, *result = NULL;
     errMsg = hicLoadData(fileInfo, res, norm, region->chrom, region->start, region->end,
             region->chrom, region->start, region->end, &results);
     if (errMsg != NULL)
         warn("%s", errMsg);
     slSort(&results, &hicCompare);
     char *row[INTERACT_NUM_COLS];
     char numBuf[HIC_NUM_BUF_SIZE];
     for (result=results; result != NULL; result = result->next)
         {
         hicRecordToRow(result, numBuf, row);
         if (asFilterOnRow(filter, row))
             {
             struct bed *bed;