b622d147b7dbac52dbf3ba26928cd18e02d42bd8
braney
  Sat Feb 26 12:34:37 2022 -0800
add support for using a bigBed as the chromAlias file

diff --git src/hg/lib/hic.c src/hg/lib/hic.c
index 6609be8..8021786 100644
--- src/hg/lib/hic.c
+++ src/hg/lib/hic.c
@@ -51,67 +51,63 @@
 newMeta->resolutions = bpResolutions;
 newMeta->nChroms = nChroms;
 newMeta->chromNames = chromosomes;
 newMeta->chromSizes = chromSizes;
 newMeta->ucscToAlias = NULL;
 newMeta->ucscAssembly = cloneString(ucscAssembly);
 newMeta->filename = cloneString(filename);
 newMeta->attributes = attributes;
 newMeta->nAttributes = nAttributes;
 
 *header = newMeta;
 
 struct slName *ucscNameList = NULL, *ucscName = NULL;
 if (newMeta->ucscAssembly != NULL)
     ucscNameList = hAllChromNames(newMeta->ucscAssembly);
-struct hash *ucscToChromAlias = NULL;
-if ((newMeta->ucscAssembly != NULL) && !trackHubDatabase(ucscAssembly))
-    ucscToChromAlias = chromAliasMakeReverseLookupTable(newMeta->ucscAssembly);
 
 struct slName *hicChromNames = slNameListFromStringArray(chromosomes, nChroms);
 struct hash *hicChromHash = hashSetFromSlNameList(hicChromNames);
 struct hash *ucscToHicName = newHash(0);
 
 // For each UCSC chrom name, try to find a .hic file chromosome to fetch annotation from.
 for (ucscName = ucscNameList; ucscName != NULL; ucscName = ucscName->next)
     {
+    struct slName *aliases;
     char mangledName[2048];
     mangleName(ucscName->name, mangledName, sizeof(mangledName));
     if (hashLookup(hicChromHash, ucscName->name))
         hashAdd(ucscToHicName, ucscName->name, cloneString(ucscName->name));
     else if (hashLookup(hicChromHash, mangledName))
         hashAdd(ucscToHicName, ucscName->name, cloneString(mangledName));
-    else if (ucscToChromAlias != NULL)
+    else if ((aliases = chromAliasFindAliases(ucscName->name)) != NULL)
         {
         // No hits on the primary chromosome name; time to start going through aliases.
-        struct hashEl *thisEl = hashLookup(ucscToChromAlias, ucscName->name);
-        while (thisEl != NULL)
+        for(; aliases; aliases = aliases->next)
             {
-            struct chromAlias *cA = (struct chromAlias*) thisEl->val;
-            if (hashLookup(hicChromHash, cA->alias))
+            if (hashLookup(hicChromHash, aliases->name))
                 {
-                hashAdd(ucscToHicName, ucscName->name, cloneString(cA->alias));
+                hashAdd(ucscToHicName, ucscName->name, cloneString(aliases->name));
                 break;
                 }
-            mangleName(cA->alias, mangledName, sizeof(mangledName));
+            mangleName(aliases->name, mangledName, sizeof(mangledName));
             if (hashLookup(hicChromHash, mangledName))
                 {
                 hashAdd(ucscToHicName, ucscName->name, cloneString(mangledName));
                 break;
                 }
-            thisEl = hashLookupNext(thisEl);
             }
+
         }
     }
 newMeta->ucscToAlias = ucscToHicName;
 
 hashFree(&hicChromHash);
 slNameFreeList(&hicChromNames);
 slNameFreeList(&ucscNameList);
 
 return NULL;
 }
 
 
 struct interact *interactFromHic(char *chrom1, int start1, char *chrom2, int start2, int size, double value)
 /* Given some data values from an interaction in a hic file, build a corresponding interact structure. */
 {