3d8312d50d53884f52bfff6cefde460541376566 braney Wed Nov 27 15:24:15 2019 -0800 get slightly better at recognizing what people mean by specifying bigBed fields that aren't in the AS file. refs #24562 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index f96422b..e37514a 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -6159,60 +6159,77 @@ return tdbGetTrackFilters( tdb, FILTER_NUMBER_WILDCARD_LOW, FILTER_NUMBER_NAME_LOW, FILTER_NUMBER_WILDCARD_CAP, FILTER_NUMBER_NAME_CAP); } struct trackDbFilter *tdbGetTrackTextFilters( struct trackDb *tdb) // get the text filters out of trackDb { return tdbGetTrackFilters( tdb, FILTER_TEXT_WILDCARD_LOW, FILTER_TEXT_NAME_LOW, FILTER_TEXT_WILDCARD_CAP, FILTER_TEXT_NAME_CAP); } struct trackDbFilter *tdbGetTrackFilterByFilters( struct trackDb *tdb) // get the values filters out of trackDb { return tdbGetTrackFilters( tdb, FILTER_VALUES_WILDCARD_LOW, FILTER_VALUES_NAME_LOW, FILTER_VALUES_WILDCARD_CAP, FILTER_VALUES_NAME_CAP); } +int defaultFieldLocation(char *field) +/* Sometimes we get bigBed filters with field names that are not in the AS file. + * Try to guess what the user means. */ +{ +if (sameString("score", field)) + return 4; +if (sameString("signal", field)) + return 6; +if (sameString("signalValue", field)) + return 6; +if (sameString("pValue", field)) + return 7; +if (sameString("qValue", field)) + return 8; +return -1; +} + static int numericFiltersShowAll(char *db, struct cart *cart, struct trackDb *tdb, boolean *opened, boolean boxed, boolean parentLevel,char *name, char *title) // Shows all *Filter style filters. Note that these are in random order and have no graceful title { int count = 0; struct trackDbFilter *trackDbFilters = tdbGetTrackNumFilters(tdb); if (trackDbFilters) { puts("<BR>"); struct trackDbFilter *filter = NULL; struct sqlConnection *conn = NULL; if (!isHubTrack(db)) conn = hAllocConnTrack(db, tdb); struct asObject *as = asForTdb(conn, tdb); hFreeConn(&conn); while ((filter = slPopHead(&trackDbFilters)) != NULL) { char *field = filter->fieldName; char *scoreName = cloneString(filter->name); char *trackDbLabel = getLabelSetting(cart, tdb, field); if (as != NULL) { struct asColumn *asCol = asColumnFind(as, field); if (asCol != NULL) { // Found label so replace field field = asCol->comment; } - else + else if (defaultFieldLocation(field) < 0) errAbort("Building filter on field %s which is not in AS file.", field); } char labelBuf[1024]; char *label = labelBuf; char *filterName = getScoreNameAdd(tdb, scoreName, _BY_RANGE); boolean filterByRange = trackDbSettingClosestToHomeOn(tdb, filterName); if (trackDbLabel) label = trackDbLabel; else safef(labelBuf, sizeof(labelBuf),"%s%s", filterByRange ? "": "Minimum ", field); showScoreFilter(cart,tdb,opened,boxed,parentLevel,name,title,label,scoreName); count++; }