89acda6500bbd2dd1fb0b8c2ccde759cc302ba61
braney
  Wed May 15 22:02:05 2013 -0700
use Glenn's new API... still needs some work to display the target duplications
diff --git src/hg/hgTracks/snakeTrack.c src/hg/hgTracks/snakeTrack.c
index cb0eeb4..05cffbd 100644
--- src/hg/hgTracks/snakeTrack.c
+++ src/hg/hgTracks/snakeTrack.c
@@ -913,77 +913,83 @@
 	}
     }
 hFreeConn(&conn);
 }
 
 #ifdef USE_HAL
 void halSnakeLoadItems(struct track *tg)
 {
 struct errCatch *errCatch = errCatchNew();
 if (errCatchStart(errCatch))
     {
     char *fileName = trackDbSetting(tg->tdb, "bigDataUrl");
     char *otherSpecies = trackDbSetting(tg->tdb, "otherSpecies");
     int handle = halOpenLOD(fileName);
     int needSeq = (winBaseCount < 50000) ? 1 : 0;
-    struct hal_block_t* head = halGetBlocksInTargetRange(handle, otherSpecies, trackHubSkipHubName(database), chromName, winStart, winEnd, needSeq, 1);
-    struct hal_block_t* cur = head;
+    struct hal_block_results_t *head = halGetBlocksInTargetRange(handle, otherSpecies, trackHubSkipHubName(database), chromName, winStart, winEnd, needSeq, 1);
+    struct hal_block_t* cur = head->mappedBlocks;
     struct linkedFeatures *lf;
     struct hash *qChromHash = newHash(5);
     struct linkedFeatures *lfList = NULL;
     char buffer[4096];
 
+#ifdef NOTNOW
+    struct hal_target_dupe_list_t* targetDupeBlocks = head->targetDupeBlocks;
+
+    for(;targetDupeBlocks; targetDupeBlocks = targetDupeBlocks->next)
+	{
+	printf("<br>id: %d qChrom %s\n", targetDupeBlocks->id, targetDupeBlocks->qChrom);
+	struct hal_target_range_t *range = targetDupeBlocks->tRange;
+	for(; range; range = range->next)
+	    {
+	    printf("<br>   %ld : %ld\n", range->tStart, range->size);
+	    }
+	}
+#endif
+
     while (cur)
     {
 	struct hashEl* hel;
 
 	//safef(buffer, sizeof buffer, "%s.%c", cur->qChrom,cur->strand);
 	safef(buffer, sizeof buffer, "%s", cur->qChrom);
 	if ((hel = hashLookup(qChromHash, buffer)) == NULL)
 	    {
 	    AllocVar(lf);
 	    lf->original = (void *)1;
 	    slAddHead(&lfList, lf);
 	    lf->start = 0;
 	    lf->end = 1000000000;
 	    lf->grayIx = maxShade;
 	    lf->name = cloneString(buffer);
 	    lf->extra = cloneString(buffer);
 	    lf->orientation = (cur->strand == '+') ? 1 : -1;
 	    hashAdd(qChromHash, lf->name, lf);
 	    }
 	else
 	    {
 	    lf = hel->val;
 	    }
 
 	struct snakeFeature  *sf;
 	AllocVar(sf);
 	slAddHead(&lf->components, sf);
 	
 	sf->start = cur->tStart;
 	sf->end = cur->tStart + cur->size;
-	if (cur->strand == '-')
-	    {
 	    sf->qStart = cur->qStart;
 	    sf->qEnd = cur->qStart + cur->size;
-	    }
-	else
-	    {
-	    sf->qStart = cur->qStart;
-	    sf->qEnd = cur->qStart + cur->size;
-	    }
 	sf->orientation = (cur->strand == '+') ? 1 : -1;
 	sf->sequence = cloneString(cur->sequence);
 
     //  printBlock(stdout, cur);
       cur = cur->next;
     }
     for(lf=lfList; lf ; lf = lf->next)
 	{
 	slSort(&lf->components, snakeFeatureCmpQStart);
 	}
     //halFreeBlocks(head);
     //halClose(handle, myThread);
 
     tg->items = lfList;
     }