c41061d1a7eed8c0882224a8b1ea898fd356fa20
braney
  Fri Aug 13 11:26:22 2021 -0700
fix bigMaf frames code to pay attention to the species... d'oho

diff --git src/hg/hgTracks/wigMafTrack.c src/hg/hgTracks/wigMafTrack.c
index 6b1fa56..b76564c 100644
--- src/hg/hgTracks/wigMafTrack.c
+++ src/hg/hgTracks/wigMafTrack.c
@@ -1929,45 +1929,48 @@
 struct sqlConnection *conn = hAllocConn(database);
 sr = hRangeQuery(conn, framesTable, chromName, seqStart, seqEnd, extra, &rowOffset);
 while ((row = sqlNextRow(sr)) != NULL)
     {
     if (newTableType)
         mf = mafFramesLoad(row + rowOffset);
     else
         mf = mafFramesLoadOld(row + rowOffset);
     slAddHead(&mfList, mf);
     }
 sqlFreeResult(&sr);
 hFreeConn(&conn);
 return mfList;
 }
 
-static struct mafFrames *getFramesFromBb(  char *framesTable, char *chromName, int seqStart, int seqEnd)
+static struct mafFrames *getFramesFromBb(  char *framesTable, char *chromName, int seqStart, int seqEnd, char *component)
 {
 struct lm *lm = lmInit(0);
 struct bbiFile *bbi =  bigBedFileOpen(framesTable);
 struct bigBedInterval *bb, *bbList =  bigBedIntervalQuery(bbi, chromName, seqStart, seqEnd, 0, lm);
 char *bedRow[11];
 char startBuf[16], endBuf[16];
 struct mafFrames *mfList = NULL, *mf;
 
 for (bb = bbList; bb != NULL; bb = bb->next)
     {
     bigBedIntervalToRow(bb, chromName, startBuf, endBuf, bedRow, ArraySize(bedRow));
+    if (sameString(bedRow[3], component))
+        {
         mf = mafFramesLoad( bedRow );
         slAddHead(&mfList, mf);
         }
+    }
 
 bbiFileClose(&bbi);
 slReverse(&mfList);
 return mfList;
 }
 
 static int wigMafDrawBases(struct track *track, int seqStart, int seqEnd,
         struct hvGfx *hvg, int xOff, int yOff, int width,
         MgFont *font, Color color, enum trackVisibility vis,
 	struct wigMafItem *miList)
 /* Draw base-by-base view, return new Y offset. */
 {
 struct wigMafItem *mi;
 struct mafAli *mafList, *maf, *sub;
 struct mafComp *mc, *mcMaster;
@@ -2425,38 +2428,43 @@
 	else if (sameString("codonFrameDef", codonTransMode))
 	    {
 	    safef(extra, sizeof(extra), "src='%s'",mi->db);
 
 	    found = FALSE;
 	    }
 	else if (sameString("codonFrameNone", codonTransMode))
 	    {
 	    safef(extra, sizeof(extra), "src='%s'",mi->db);
 
 	    found = TRUE;
 	    }
 	else
 	    errAbort("unknown codon translation mode %s",codonTransMode);
 tryagain:
-        if (track->isBigBed)
-            mfList = getFramesFromBb(  framesTable, chromName, seqStart, seqEnd);
-        else
         if (differentStringNullOk(extraPrevious, extra))
             {
+            if (track->isBigBed)
+                {
+                char *species = mi->db;
+                if (sameString("codonDefault", codonTransMode))
+                    species = defaultCodonSpecies;
+                mfList = getFramesFromBb(  framesTable, chromName, seqStart, seqEnd, species);
+                }
+            else
                 mfList = getFramesFromSql(  framesTable, chromName, seqStart, seqEnd, extra, newTableType);
-		extraPrevious = cloneString(extra);
             }
+        extraPrevious = cloneString(extra);
 
         if (mfList != NULL)
             found = TRUE;
 
         for(mf = mfList; mf; mf = mf->next)
             {
             int start, end, w;
             int frame;
             if (mf->chromStart < seqStart)
                 start = 0;
             else
                 start = mf->chromStart-seqStart;
             frame = mf->frame;
             if (mf->strand[0] == '-')
                 {