1bda3889beb9b9247998d9153dee94ca7d13810c braney Sun Nov 10 16:16:48 2019 -0800 allow yet another way to specify bigBed filters. This allows specifications of the form "filter*.fieldName" diff --git src/hg/hgTracks/bigBedTrack.c src/hg/hgTracks/bigBedTrack.c index 00d9104..a45b216 100644 --- src/hg/hgTracks/bigBedTrack.c +++ src/hg/hgTracks/bigBedTrack.c @@ -127,113 +127,100 @@ } } return ret; } struct bigBedFilter *bigBedMakeFilterText(struct cart *cart, struct bbiFile *bbi, struct trackDb *tdb, char *filterName, char *field) /* Add a bigBed filter using a trackDb filterText statement. */ { struct bigBedFilter *filter; char *setting = trackDbSettingClosestToHome(tdb, filterName); char *value = cartUsualStringClosestToHome(cart, tdb, FALSE, filterName, setting); if (isEmpty(value)) return NULL; -char filterType[4096]; -safef(filterType, sizeof filterType, "%s%s", field, FILTER_TYPE_NAME); -char *typeValue = cartOrTdbString(cart, tdb, filterType, FILTERTEXT_WILDCARD); +char *typeValue = getFilterType(cart, tdb, field, FILTERTEXT_WILDCARD); AllocVar(filter); filter->fieldNum = getFieldNum(bbi, field); if (sameString(typeValue, FILTERTEXT_REGEXP) ) { filter->comparisonType = COMPARE_REGEXP; regcomp(&filter->regEx, value, REG_NOSUB); } else { filter->comparisonType = COMPARE_WILDCARD; filter->wildCardString = cloneString(value); } return filter; } struct bigBedFilter *bigBedMakeFilterBy(struct cart *cart, struct bbiFile *bbi, struct trackDb *tdb, char *field, struct slName *choices) /* Add a bigBed filter using a trackDb filterBy statement. */ { struct bigBedFilter *filter; -char filterType[4096]; -safef(filterType, sizeof filterType, "%s%s", field, FILTER_TYPE_NAME); -char *setting = cartOrTdbString(cart, tdb, filterType, NULL); -if (setting == NULL) - { - safef(filterType, sizeof filterType, "%s.%s", field, FILTER_TYPE_NAME); - setting = cartOrTdbString(cart, tdb, filterType, FILTERBY_SINGLE); - } +char *setting = getFilterType(cart, tdb, field, FILTERBY_SINGLE); AllocVar(filter); filter->fieldNum = getFieldNum(bbi, field); if (setting && (sameString(setting, FILTERBY_SINGLE_LIST) || sameString(setting, FILTERBY_MULTIPLE_LIST_OR))) filter->comparisonType = COMPARE_HASH_LIST_OR; else if (setting && sameString(setting, FILTERBY_MULTIPLE_LIST_AND)) filter->comparisonType = COMPARE_HASH_LIST_AND; else filter->comparisonType = COMPARE_HASH; filter->valueHash = newHash(5); filter->numValuesInHash = slCount(choices); for(; choices; choices = choices->next) hashStore(filter->valueHash, choices->name); return filter; } struct bigBedFilter *bigBedBuildFilters(struct cart *cart, struct bbiFile *bbi, struct trackDb *tdb) /* Build all the numeric and filterBy filters for a bigBed */ { struct bigBedFilter *filters = NULL, *filter; -struct slName *filterSettings = trackDbSettingsWildMatch(tdb, FILTER_NUMBER_WILDCARD); +struct trackDbFilter *tdbFilters = tdbGetTrackNumFilters(tdb); -if ((filterSettings == NULL) && !trackDbSettingOn(tdb, "noScoreFilter")) +if ((tdbFilters == NULL) && !trackDbSettingOn(tdb, "noScoreFilter")) { AllocVar(filter); slAddHead(&filters, filter); filter->fieldNum = 4; filter->comparisonType = COMPARE_MORE; char buffer[2048]; safef(buffer, sizeof buffer, "%s.scoreFilter", tdb->track); filter->value1 = cartUsualDouble(cart, buffer, 0.0); } -for(; filterSettings; filterSettings = filterSettings->next) +for(; tdbFilters; tdbFilters = tdbFilters->next) { - char *fieldName = extractFieldName(filterSettings->name, FILTER_NUMBER_NAME); - if (sameString(fieldName, "noScore")) - continue; - if ((filter = bigBedMakeNumberFilter(cart, bbi, tdb, filterSettings->name, NULL, fieldName)) != NULL) + if ((filter = bigBedMakeNumberFilter(cart, bbi, tdb, tdbFilters->name, NULL, tdbFilters->fieldName)) != NULL) slAddHead(&filters, filter); } -filterSettings = trackDbSettingsWildMatch(tdb, FILTER_TEXT_WILDCARD); +tdbFilters = tdbGetTrackTextFilters(tdb); -for(; filterSettings; filterSettings = filterSettings->next) +for(; tdbFilters; tdbFilters = tdbFilters->next) { - char *fieldName = extractFieldName(filterSettings->name, FILTER_TEXT_NAME); - if ((filter = bigBedMakeFilterText(cart, bbi, tdb, filterSettings->name, fieldName)) != NULL) + if ((filter = bigBedMakeFilterText(cart, bbi, tdb, tdbFilters->name, tdbFilters->fieldName)) != NULL) slAddHead(&filters, filter); } filterBy_t *filterBySet = filterBySetGet(tdb, cart,NULL); filterBy_t *filterBy = filterBySet; for (;filterBy != NULL; filterBy = filterBy->next) { if (filterBy->slChoices && differentString(filterBy->slChoices->name, "All")) { if ((filter = bigBedMakeFilterBy(cart, bbi, tdb, filterBy->column, filterBy->slChoices)) != NULL) slAddHead(&filters, filter); } } return filters;