336446810facfb8bd5fe6665f736d647d7dc20c0 braney Thu Nov 7 10:18:44 2019 -0800 remove brain-dead code that made a distinction between floats and ints in number filtering diff --git src/hg/lib/hui.c src/hg/lib/hui.c index d4ffb3b..3891014 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -5975,180 +5975,144 @@ *max =strtod(deMax,NULL); freeMem(deMin); freeMem(deMax); } if (max) { safef(scoreLimitName, sizeof(scoreLimitName), "%s%s", scoreName, _MAX); deMax = cartOptionalStringClosestToHome(cart, tdb,parentLevel,scoreLimitName); if (deMax != NULL) *max = strtod(deMax,NULL); } if (min) { // name is always {filterName}Min safef(scoreLimitName, sizeof(scoreLimitName), "%s%s", scoreName, _MIN); deMin = cartOptionalStringClosestToHome(cart, tdb,parentLevel,scoreLimitName); + if (deMin == NULL) + deMin = cartOptionalStringClosestToHome(cart, tdb,parentLevel,scoreName); if (deMin != NULL) *min = strtod(deMin,NULL); } // Defaulting min and max within limits. Sorry for the horizontal ifs, // but stacking the group makes them easier to follow if (min && limitMin && (int)(*limitMin) != NO_VALUE && ((int)(*min) == NO_VALUE || *min < *limitMin)) *min = *limitMin; if (min && limitMax && (int)(*limitMax) != NO_VALUE && *min > *limitMax) *min = *limitMax; if (max && limitMax && (int)(*limitMax) != NO_VALUE && ((int)(*max) == NO_VALUE || *max > *limitMax)) *max = *limitMax; if (max && limitMin && (int)(*limitMin) != NO_VALUE && *max < *limitMin) *max = *limitMin; } static boolean showScoreFilter(struct cart *cart, struct trackDb *tdb, boolean *opened, boolean boxed, boolean parentLevel,char *name, char *title, - char *label, char *scoreName, boolean isFloat) + char *label, char *scoreName) // Shows a score filter control with minimum value and optional range { char *setting = trackDbSetting(tdb, scoreName); if (setting) { if (*opened == FALSE) { boxed = cfgBeginBoxAndTitle(tdb, boxed, title); puts("<TABLE>"); *opened = TRUE; } printf("<TR><TD align='right'><B>%s:</B><TD align='left'>",label); char varName[256]; char altLabel[256]; safef(varName, sizeof(varName), "%s%s", scoreName, _BY_RANGE); boolean filterByRange = trackDbSettingClosestToHomeOn(tdb, varName); - // NOTE: could determine isFloat = (strchr(setting,'.') != NULL); - // However, historical trackDb settings of pValueFilter did not always contain '.' - if (isFloat) - { double minLimit=NO_VALUE,maxLimit=NO_VALUE; double minVal=minLimit,maxVal=maxLimit; colonPairToDoubles(setting,&minVal,&maxVal); getScoreFloatRangeFromCart(cart,tdb,parentLevel,scoreName,&minLimit,&maxLimit, &minVal, &maxVal); safef(varName, sizeof(varName), "%s.%s%s", name, scoreName, filterByRange ? _MIN:""); safef(altLabel, sizeof(altLabel), "%s%s", (filterByRange ? "Minimum " : ""), htmlEncode(htmlTextStripTags(label))); cgiMakeDoubleVarWithLimits(varName,minVal, altLabel, 0,minLimit, maxLimit); if (filterByRange) { printf("<TD align='left'>to<TD align='left'>"); safef(varName, sizeof(varName), "%s.%s%s", name, scoreName, _MAX); safef(altLabel, sizeof(altLabel), "%s%s", (filterByRange?"Maximum ":""), label); cgiMakeDoubleVarWithLimits(varName,maxVal, altLabel, 0,minLimit, maxLimit); } safef(altLabel, sizeof(altLabel), "%s", (filterByRange?"": "colspan=3")); if (minLimit != NO_VALUE && maxLimit != NO_VALUE) printf("<TD align='left'%s> (%g to %g)",altLabel,minLimit, maxLimit); else if (minLimit != NO_VALUE) printf("<TD align='left'%s> (minimum %g)",altLabel,minLimit); else if (maxLimit != NO_VALUE) printf("<TD align='left'%s> (maximum %g)",altLabel,maxLimit); else printf("<TD align='left'%s",altLabel); - } - else - { - int minLimit=NO_VALUE,maxLimit=NO_VALUE; - int minVal=minLimit,maxVal=maxLimit; - colonPairToInts(setting,&minVal,&maxVal); - getScoreIntRangeFromCart(cart,tdb,parentLevel,scoreName,&minLimit,&maxLimit, - &minVal, &maxVal); - safef(varName, sizeof(varName), "%s.%s%s", name, scoreName, filterByRange ? _MIN:""); - safef(altLabel, sizeof(altLabel), "%s%s", (filterByRange?"Minimum ":""), label); - cgiMakeIntVarWithLimits(varName,minVal, altLabel, 0,minLimit, maxLimit); - if (filterByRange) - { - printf("<TD align='left'>to<TD align='left'>"); - safef(varName, sizeof(varName), "%s.%s%s", name, scoreName, _MAX); - safef(altLabel, sizeof(altLabel), "%s%s", (filterByRange?"Maximum ":""), label); - cgiMakeIntVarWithLimits(varName,maxVal, altLabel, 0,minLimit, maxLimit); - } - safef(altLabel, sizeof(altLabel), "%s", (filterByRange?"": "colspan=3")); - if (minLimit != NO_VALUE && maxLimit != NO_VALUE) - printf("<TD align='left'%s> (%d to %d)",altLabel,minLimit, maxLimit); - else if (minLimit != NO_VALUE) - printf("<TD align='left'%s> (minimum %d)",altLabel,minLimit); - else if (maxLimit != NO_VALUE) - printf("<TD align='left'%s> (maximum %d)",altLabel,maxLimit); - else - printf("<TD align='left'%s",altLabel); - } puts("</TR>"); return TRUE; } return FALSE; } 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 slName *filterSettings = trackDbSettingsWildMatch(tdb, FILTER_NUMBER_WILDCARD); if (filterSettings) { puts("<BR>"); struct slName *filter = NULL; struct sqlConnection *conn = NULL; if (!isHubTrack(db)) conn = hAllocConnTrack(db, tdb); struct asObject *as = asForTdb(conn, tdb); hFreeConn(&conn); while ((filter = slPopHead(&filterSettings)) != NULL) { if (differentString(filter->name,NO_SCORE_FILTER)) { - // Determine floating point or integer - char *setting = trackDbSetting(tdb, filter->name); - boolean isFloat = (strchr(setting,'.') != NULL); - char *scoreName = cloneString(filter->name); char *field = extractFieldName(filter->name, FILTER_NUMBER_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; - if (!isFloat) - isFloat = asTypesIsFloating(asCol->lowType->type); } else errAbort("Building filter on field %s which is not in AS file.", field); } char varName[256]; char labelBuf[1024]; char *label = labelBuf; safef(varName, sizeof(varName), "%s%s", scoreName, _BY_RANGE); boolean filterByRange = trackDbSettingClosestToHomeOn(tdb, varName); if (trackDbLabel) label = trackDbLabel; else safef(labelBuf, sizeof(labelBuf),"%s%s", filterByRange ? "": "Minimum ", field); - showScoreFilter(cart,tdb,opened,boxed,parentLevel,name,title,label,scoreName,isFloat); + showScoreFilter(cart,tdb,opened,boxed,parentLevel,name,title,label,scoreName); freeMem(scoreName); count++; } slNameFree(&filter); } if (as != NULL) asObjectFree(&as); } if (count > 0) puts("</TABLE>"); return count; } boolean bedScoreHasCfgUi(struct trackDb *tdb) @@ -6756,35 +6720,35 @@ || trackDbSettingClosestToHome(tdb, PVALUE_FILTER) || trackDbSettingClosestToHome(tdb, QVALUE_FILTER) || trackDbSettingClosestToHome(tdb, SCORE_FILTER )); } return FALSE; } void encodePeakCfgUi(struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed) // Put up UI for filtering wgEnocde peaks based on score, Pval and Qval { boolean parentLevel = isNameAtParentLevel(tdb,name); boolean opened = FALSE; showScoreFilter(cart,tdb,&opened,boxed,parentLevel,name,title, - "Minimum Signal value", SIGNAL_FILTER,TRUE); + "Minimum Signal value", SIGNAL_FILTER); showScoreFilter(cart,tdb,&opened,boxed,parentLevel,name,title, - "Minimum P-Value (<code>-log<sub>10</sub></code>)",PVALUE_FILTER,TRUE); + "Minimum P-Value (<code>-log<sub>10</sub></code>)",PVALUE_FILTER); showScoreFilter(cart,tdb,&opened,boxed,parentLevel,name,title, - "Minimum Q-Value (<code>-log<sub>10</sub></code>)",QVALUE_FILTER,TRUE); + "Minimum Q-Value (<code>-log<sub>10</sub></code>)",QVALUE_FILTER); char *setting = trackDbSettingClosestToHomeOrDefault(tdb, SCORE_FILTER,NULL);//"0:1000"); if (setting) { if (!opened) { boxed = cfgBeginBoxAndTitle(tdb, boxed, title); puts("<TABLE>"); opened = TRUE; } char varName[256]; int minLimit=0,maxLimit=1000,minVal=0,maxVal=NO_VALUE; colonPairToInts(setting,&minVal,&maxVal); getScoreIntRangeFromCart(cart,tdb,parentLevel,SCORE_FILTER,&minLimit,&maxLimit, &minVal, &maxVal);