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