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