90e23a5e6fa454182c6abc69985c613a964d30b5 braney Tue Apr 12 15:58:48 2022 -0700 add chromAlias support to HAL snakes diff --git src/hg/hgTracks/snakeTrack.c src/hg/hgTracks/snakeTrack.c index 16c0089..980a4d8 100644 --- src/hg/hgTracks/snakeTrack.c +++ src/hg/hgTracks/snakeTrack.c @@ -12,30 +12,31 @@ #include "hdb.h" #include "hgTracks.h" #include "chainBlock.h" #include "chainLink.h" #include "chainDb.h" #include "chainCart.h" #include "errCatch.h" #include "twoBit.h" #include "bigWarn.h" #include <pthread.h> #include "trackHub.h" #include "limits.h" #include "snakeUi.h" #include "bits.h" #include "trix.h" +#include "chromAlias.h" #include "halBlockViz.h" #include "bigPsl.h" // this is the number of pixels used by the target self-align bar #define DUP_LINE_HEIGHT 4 // this is the number of pixels used when displaying the insertion lengths #define INSERT_TEXT_HEIGHT 10 struct snakeFeature { struct snakeFeature *next; int start, end; /* Start/end in browser coordinates. */ int qStart, qEnd; /* query start/end */ int level; /* level in snake */ @@ -1370,31 +1371,39 @@ 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); char *otherDbName = trackHubSkipHubName(database); struct hal_block_results_t *head = NULL; if (isPsl) { head = pslSnakeBlocks(fileName, tg, chromName, winStart, winEnd, 10000000); } else { - head = halGetBlocksInTargetRange(handle, otherSpecies, otherDbName, aliasName, winStart, winEnd, 0, needSeq, dupMode,mapBackAdjacencies, coalescent, &errString); + struct slName *aliasList = chromAliasFindAliases(chromName); + struct slName *nativeName = newSlName(aliasName); + slAddHead(&aliasList, nativeName); + for (; aliasList; aliasList = aliasList->next) + { + head = halGetBlocksInTargetRange(handle, otherSpecies, otherDbName, aliasList->name, winStart, winEnd, 0, needSeq, dupMode,mapBackAdjacencies, coalescent, &errString); + if (head != NULL) + break; + } } // did we get any blocks from HAL if (head == NULL) { errAbort("HAL get blocks error: %s\n", errString); goto out; } 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