12431b42d1616cb02adead491a305b8dc163ca71 kate Mon Mar 28 11:59:03 2016 -0700 Add support for filter on score. Show total median expression (from which score is computed) on details page. refs #15645 diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index e63d0a0..9afd22a 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -7555,58 +7555,70 @@ newScoreMin = cartMinGrayLevel * scoreMax/maxShade; prevTrackName = tdb->track; } if (cartMinGrayLevel != scoreMinGrayLevel) { float realScore = (float)(bed->score - scoreMin) / (scoreMax - scoreMin); bed->score = newScoreMin + (realScore * (scoreMax - newScoreMin)) + 0.5; } else if (scoreMin != 0 && scoreMax == 1000) // Changes gray level even when { // UI does not allow selecting it. float realScore = (float)(bed->score) / 1000; bed->score = scoreMin + (realScore * (scoreMax - scoreMin)) + 0.5; } } -void bedLoadItemByQuery(struct track *tg, char *table, - char *query, ItemLoader loader) -/* Generic tg->item loader. If query is NULL use generic - hRangeQuery(). */ +void bedLoadItemByQueryWhere(struct track *tg, char *table, char *query, + char *extraWhere, ItemLoader loader) +/* Generic itg->item loader, adding extra clause to hgRangeQuery if query is NULL + * and extraWhere is not NULL */ { struct sqlConnection *conn = hAllocConn(database); int rowOffset = 0; struct sqlResult *sr = NULL; char **row = NULL; struct slList *itemList = NULL, *item = NULL; if (query == NULL) sr = hRangeQuery(conn, table, chromName, - winStart, winEnd, NULL, &rowOffset); + winStart, winEnd, extraWhere, &rowOffset); else sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { item = loader(row + rowOffset); slAddHead(&itemList, item); } slSort(&itemList, bedCmp); sqlFreeResult(&sr); tg->items = itemList; hFreeConn(&conn); } +void bedLoadItemWhere(struct track *tg, char *table, char *extraWhere, ItemLoader loader) +/* Generic tg->item loader, adding extra clause to hgRangeQuery */ +{ +bedLoadItemByQueryWhere(tg, table, NULL, extraWhere, loader); +} + +void bedLoadItemByQuery(struct track *tg, char *table, char *query, ItemLoader loader) +/* Generic tg->item loader. If query is NULL use generic hRangeQuery(). */ +{ +bedLoadItemByQueryWhere(tg, table, query, NULL, loader); +} + void bedLoadItem(struct track *tg, char *table, ItemLoader loader) /* Generic tg->item loader. */ { bedLoadItemByQuery(tg, table, NULL, loader); } void atomDrawSimpleAt(struct track *tg, void *item, struct hvGfx *hvg, int xOff, int y, double scale, MgFont *font, Color color, enum trackVisibility vis) /* Draw a single simple bed item at position. */ { struct bed *bed = item; int heightPer = tg->heightPer; int x1 = round((double)((int)bed->chromStart-winStart)*scale) + xOff;