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. */ {