834f46edc09af6e2b82bad2021629615a678221b
braney
  Wed Nov 15 11:45:33 2023 -0800
bigBed items that match hgFind.matches automatically pass filters (this
time pay attention to bbi->definedFieldCount to make sure there is a
name field.

diff --git src/hg/hgTracks/bigBedTrack.c src/hg/hgTracks/bigBedTrack.c
index 8f1b6c4..84b9269 100644
--- src/hg/hgTracks/bigBedTrack.c
+++ src/hg/hgTracks/bigBedTrack.c
@@ -277,33 +277,37 @@
         if ((filter = bigBedMakeFilterBy(cart, bbi, tdb, filterBy->column, filterBy->slChoices)) != NULL)
             slAddHead(&filters, filter);
         }
     }
 
 /* custom gencode filters */
 boolean isGencode3 = trackDbSettingOn(tdb, "isGencode3");
 
 if (isGencode3)
     addGencodeFilters(cart, tdb, &filters);
 
 return filters;
 }
 
 
-boolean bigBedFilterInterval(char **bedRow, struct bigBedFilter *filters)
+boolean bigBedFilterInterval(struct bbiFile *bbi, char **bedRow, struct bigBedFilter *filters)
 /* Go through a row and filter based on filters.  Return TRUE if all filters are passed. */
 {
+if ((bbi->definedFieldCount > 3) && (hgFindMatches != NULL) && 
+    (bedRow[3] != NULL)  && hashLookup(hgFindMatches, bedRow[3]) != NULL)
+    return TRUE;
+
 struct bigBedFilter *filter;
 for(filter = filters; filter; filter = filter->next)
     {
     double val = atof(bedRow[filter->fieldNum]);
 
     switch(filter->comparisonType)
         {
         case COMPARE_WILDCARD:
             if ( !wildMatch(filter->wildCardString, bedRow[filter->fieldNum]))
                 return FALSE;
             break;
         case COMPARE_REGEXP:
             if (regexec(&filter->regEx,bedRow[filter->fieldNum], 0, NULL,0 ) != 0)
                 return FALSE;
             break;
@@ -559,37 +563,37 @@
         lf = lfFromPslx(psl, sizeMul, isXeno, nameGetsPos, track);
         lf->original = psl;
         if ((seq != NULL) && (lf->orientation == -1))
             reverseComplement(seq, strlen(seq));
         lf->extra = seq;
         lf->cds = cds;
         lf->useItemRgb = useItemRgb;
         if ( lf->useItemRgb )
             lf->filterColor = itemRgbColumn(bedRow[8]);
         }
     else if (sameString(tdb->type, "bigDbSnp"))
         {
         // bigDbSnp does not have a score field, but I want to compute the freqSourceIx from
         // trackDb and settings one time instead of for each item, so I'm overloading scoreMin.
         int freqSourceIx = scoreMin;
-        lf = lfFromBigDbSnp(tdb, bb, filters, freqSourceIx);
+        lf = lfFromBigDbSnp(tdb, bb, filters, freqSourceIx, bbi);
         }
     else
 	{
         char startBuf[16], endBuf[16];
         bigBedIntervalToRow(bb, chromName, startBuf, endBuf, bedRow, ArraySize(bedRow));
-        if (bigBedFilterInterval(bedRow, filters))
+        if (bigBedFilterInterval(bbi, bedRow, filters))
             {
             if (instaFile)
                 {
                 if ((bed = instaBed(bbi, chainHash, bb)) != NULL)
                     {
                     bedCopy = cloneBed(bed);
                     lf = bedMungToLinkedFeatures(&bed, tdb, fieldCount,
                         scoreMin, scoreMax, useItemRgb);
                     }
                 }
             else
                 {
                 bed = bedLoadN(bedRow, fieldCount);
                 bedCopy = cloneBed(bed);
                 lf = bedMungToLinkedFeatures(&bed, tdb, fieldCount,