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]);
 	}