c13ed07bb8cf97ee53a45a91da18910edbc525d9 braney Fri May 13 13:46:20 2022 -0700 support chromAuthority with bigBed chromAlias files diff --git src/hg/lib/chromAlias.c src/hg/lib/chromAlias.c index 98f56e0..5cf7c0d 100644 --- src/hg/lib/chromAlias.c +++ src/hg/lib/chromAlias.c @@ -216,31 +216,31 @@ } static void readFieldedTable(struct lineFile *lf) /* Use the fieldedTable library to read in fully populated chromAlias.txt file. */ { struct fieldedTable *aliasTable = fieldedTableAttach(lf, NULL, 0); chromAliasGlobals.fieldCount = aliasTable->fieldCount; chromAliasGlobals.fields = aliasTable->fields; struct fieldedRow *row; for(row = aliasTable->rowList; row; row = row->next) { char *native = row->row[0]; unsigned field; - for(field=1; field< aliasTable->fieldCount; field++) + for(field=0; field < aliasTable->fieldCount; field++) { char *alias = row->row[field]; char *source = aliasTable->fields[field]; struct chromAlias *chromAlias; AllocVar(chromAlias); chromAlias->chrom = native; chromAlias->alias = alias; chromAlias->source = source; hashAdd(chromAliasGlobals.chromToAliasHash, native, chromAlias); hashAdd(chromAliasGlobals.aliasToChromHash, alias, chromAlias); } } } @@ -249,30 +249,38 @@ { // not supported at the moment /* char buffer[4096]; safef(buffer, sizeof buffer, "/gbdb/%s/chromAlias.bb", database); if (fileExists(buffer)) return cloneString(buffer); */ return NULL; } static void chromAliasSetupBb(char *database, char *bbFile) /* Look for a chromAlias bigBed file and open it. */ { chromAliasGlobals.bbi = bigBedFileOpen(bbFile); +struct slName *fieldNames = bbFieldNames(chromAliasGlobals.bbi); +chromAliasGlobals.fieldCount = slCount(fieldNames) - chromAliasGlobals.bbi->definedFieldCount; +AllocArray(chromAliasGlobals.fields, chromAliasGlobals.fieldCount); +int ii; +for(ii=0; ii < chromAliasGlobals.bbi->definedFieldCount; ii++, fieldNames = fieldNames->next) + ; +for(ii=0; ii < chromAliasGlobals.fieldCount; ii++, fieldNames = fieldNames->next) + chromAliasGlobals.fields[ii] = fieldNames->name; chromAliasGlobals.bptList = bbiAliasOpenExtra(chromAliasGlobals.bbi); chromAliasGlobals.lm = lmInit(0); } static void chromAliasSetupHub(char *database) /* Look for a chromAlias text table and load the hashes with its contents. */ { char *aliasBbFile = trackHubAliasBbFile(database); if (aliasBbFile != NULL) { chromAliasSetupBb(database, aliasBbFile); return; } char *aliasFile = trackHubAliasFile(database); if (aliasFile == NULL) @@ -440,42 +448,42 @@ return aliases; } char *chromAliasFindSingleAlias(char *seqName, char *authority) /* Find the aliases for a given seqName from a given authority. */ { if (authority == NULL) return cloneString(seqName); struct slName *aliases = chromAliasFindAliases(seqName); if (aliases == NULL) return cloneString(seqName); -unsigned fieldNum = 1; +unsigned fieldNum = 0; for(; fieldNum < chromAliasGlobals.fieldCount; fieldNum++) { if (sameString(authority, chromAliasGlobals.fields[fieldNum])) break; } if (fieldNum >= chromAliasGlobals.fieldCount) return cloneString(seqName); -unsigned count = 1; +unsigned count = 0; for(; aliases && count < fieldNum; count++,aliases = aliases->next) ; if (!isEmpty(aliases->name)) return cloneString(aliases->name); return cloneString(seqName); } char *chromAliasGetDisplayChrom(char *db, struct cart *cart, char *seqName) /* Return the sequence name to display based on the database and cart. */ { if (trackHubDatabase(db)) { struct trackHubGenome *genome = trackHubGetGenome(db);