7ac6e996e887b7380e963c079a5e9a2546e9bbac braney Fri Nov 6 12:42:08 2015 -0800 implement score and chromosome filter in bigChain load function #16314 diff --git src/hg/hgTracks/chainTrack.c src/hg/hgTracks/chainTrack.c index b11f1ed..ad96941 100644 --- src/hg/hgTracks/chainTrack.c +++ src/hg/hgTracks/chainTrack.c @@ -316,43 +316,53 @@ hFreeConn(&conn); } void bigChainLoadItems(struct track *tg) /* Load up all of the chains from correct table into tg->items * item list. At this stage to conserve memory for other tracks * we don't load the links into the components list until draw time. */ { struct linkedFeatures *list = NULL, *lf; int qs; char *optionChrStr; struct cartOptions *chainCart; chainCart = (struct cartOptions *) tg->extraUiData; -optionChrStr = cartUsualStringClosestToHome(cart, tg->tdb, FALSE, - "chromFilter", "All"); +optionChrStr = cartStringClosestToHome(cart, tg->tdb, FALSE, + "chromFilter"); struct bbiFile *bbi = fetchBbiForTrack(tg); struct lm *lm = lmInit(0); struct bigBedInterval *bb, *bbList = bigBedIntervalQuery(bbi, chromName, winStart, winEnd, 0, lm); int fieldCount = 11; char *bedRow[fieldCount]; char startBuf[16], endBuf[16]; for (bb = bbList; bb != NULL; bb = bb->next) { bigBedIntervalToRow(bb, chromName, startBuf, endBuf, bedRow, ArraySize(bedRow)); + if ((optionChrStr != NULL) && !startsWith(optionChrStr, bedRow[7])) + continue; + + if (chainCart->scoreFilter >0) + { + unsigned score = sqlUnsigned(bedRow[4]); + if (score < chainCart->scoreFilter) + continue; + } + struct bed *bed = bedLoadN(bedRow, 6); lf = bedMungToLinkedFeatures(&bed, tg->tdb, fieldCount, 0, 1000, FALSE); if (*bedRow[5] == '-') { lf->orientation = -1; qs = sqlUnsigned(bedRow[8]) - sqlUnsigned(bedRow[10]); } else { lf->orientation = 1; qs = sqlUnsigned(bedRow[9]); }