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] == '-') {