142948ffb4e89b89443006817bb49990dd1a7924 hiram Tue Nov 15 10:32:50 2016 -0800 allow a halSnake track to declare database alias names refs #13553 diff --git src/hg/hgTracks/snakeTrack.c src/hg/hgTracks/snakeTrack.c index 70405da..3d8c00a 100644 --- src/hg/hgTracks/snakeTrack.c +++ src/hg/hgTracks/snakeTrack.c @@ -1195,62 +1195,74 @@ struct trixSearchResult *tsList = trixSearch(trix, trixWordCount, trixWords, tsmExact); if (tsList) name = tsList->itemId; // FOUND return name; } void halSnakeLoadItems(struct track *tg) // load up a snake from a HAL file. This code is called in threads // so *no* use of globals please. All but full snakes are read into a single // linked feature. { unsigned showSnpWidth = cartOrTdbInt(cart, tg->tdb, SNAKE_SHOW_SNP_WIDTH, SNAKE_DEFAULT_SHOW_SNP_WIDTH); -char * chromAlias = NULL; +struct hash *dbAliasHash = NULL; // create later when needed +char * dbAliasList = trackDbSetting(tg->tdb, "dbAliasList"); +if (dbAliasList) + dbAliasHash = hashFromString(dbAliasList); + +char * chromAlias = NULL; // create later when needed char * chromAliasFile = trackDbSetting(tg->tdb, "searchTrix"); if (chromAliasFile) chromAlias = doChromIxSearch(chromAliasFile, chromName); char *aliasName = chromName; if (chromAlias) { if (differentWord(chromAlias, aliasName)) aliasName = chromAlias; } // if we have a network error we want to put out a message about it struct errCatch *errCatch = errCatchNew(); if (errCatchStart(errCatch)) { char *fileName = trackDbSetting(tg->tdb, "bigDataUrl"); char *otherSpecies = trackDbSetting(tg->tdb, "otherSpecies"); char *errString; int handle = halOpenLOD(fileName, &errString); if (handle < 0) warn("HAL open error: %s\n", errString); boolean isPackOrFull = (tg->visibility == tvFull) || (tg->visibility == tvPack); hal_dup_type_t dupMode = (isPackOrFull) ? HAL_QUERY_AND_TARGET_DUPS : HAL_QUERY_DUPS; hal_seqmode_type_t needSeq = isPackOrFull && (winBaseCount < showSnpWidth) ? HAL_LOD0_SEQUENCE : HAL_NO_SEQUENCE; int mapBackAdjacencies = (tg->visibility == tvFull); char codeVarName[1024]; safef(codeVarName, sizeof codeVarName, "%s.coalescent", tg->tdb->track); char *coalescent = cartOptionalString(cart, codeVarName); - struct hal_block_results_t *head = halGetBlocksInTargetRange(handle, otherSpecies, trackHubSkipHubName(database), aliasName, winStart, winEnd, 0, needSeq, dupMode,mapBackAdjacencies, coalescent, &errString); + char *otherDbName = trackHubSkipHubName(database); + if (dbAliasHash) + { + struct hashEl* alias = hashLookup(dbAliasHash, otherDbName); + if (alias) + otherDbName = cloneString((char *)alias->val); + } + struct hal_block_results_t *head = halGetBlocksInTargetRange(handle, otherSpecies, otherDbName, aliasName, winStart, winEnd, 0, needSeq, dupMode,mapBackAdjacencies, coalescent, &errString); // did we get any blocks from HAL if (head == NULL) { warn("HAL get blocks error: %s\n", errString); errCatchEnd(errCatch); return; } struct hal_block_t* cur = head->mappedBlocks; struct linkedFeatures *lf = NULL; struct hash *qChromHash = newHash(5); struct linkedFeatures *lfList = NULL; char buffer[4096]; #ifdef NOTNOW