dbff2df65c339ba878154eda07fd5ce60a2383c3 braney Fri Dec 5 17:07:07 2014 -0800 add the ability to get coverage (wiggle) plots for bed type tracks #952 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 165bc19..d9d7684 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -4586,30 +4586,47 @@ } else if (title) printf("<p><B>%s </b>", title ); else printf("<p>"); return boxed; } void cfgEndBox(boolean boxed) // Handle end of box and title for individual track type settings { if (boxed) puts("</td></tr></table>"); } +void wigOption(struct cart *cart, char *name, char *title, struct trackDb *tdb) +/* let the user choose to see the track in wiggle mode */ +{ +char *canDoCoverage = cfgOptionEnvDefault("HGDB_CAN_DO_COVERAGE", + CanDoCoverageConfVariable, "off"); +if (differentString(canDoCoverage, "on")) + return; + +printf("<BR><B>Display data as a wiggle:</B> "); +char varName[64]; +safef(varName, sizeof(varName), "%s.doWiggle", name); +boolean option = cartUsualBoolean(cart, varName, FALSE); +cgiMakeCheckBox(varName, option); +printf("<BR>\n"); +wigCfgUi(cart,tdb,name,title,TRUE); +} + void wigCfgUi(struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed) /* UI for the wiggle track */ { char *typeLine = NULL; /* to parse the trackDb type line */ char *words[8]; /* to parse the trackDb type line */ int wordCount = 0; /* to parse the trackDb type line */ char option[256]; double minY; /* from trackDb or cart */ double maxY; /* from trackDb or cart */ double tDbMinY; /* data range limits from trackDb type line */ double tDbMaxY; /* data range limits from trackDb type line */ int defaultHeight; /* pixels per item */ char *horizontalGrid = NULL; /* Grid lines, off by default */ char *transformFunc = NULL; /* function to transform data points */ char *alwaysZero = NULL; /* Always include 0 in range */ @@ -4830,30 +4847,31 @@ radioButton(buffer, logicTypeVal, "and"); radioButton(buffer, logicTypeVal, "or"); printf("<BR>\n"); /* List various fields you can filter on. */ printf("<table border=0 cellspacing=1 cellpadding=1 width=%d>\n", CONTROL_TABLE_WIDTH); cg = startControlGrid(4, NULL); for (fil = mud->filterList; fil != NULL; fil = fil->next) { safef(buffer,sizeof buffer,"%s.%s",prefix,fil->suffix); oneMrnaFilterUi(cg, tdb, fil->label, buffer, fil->suffix, cart); } endControlGrid(&cg); baseColorDrawOptDropDown(cart, tdb); indelShowOptions(cart, tdb); +wigOption(cart, prefix, title, tdb); cfgEndBox(boxed); } void scoreGrayLevelCfgUi(struct cart *cart, struct trackDb *tdb, char *prefix, int scoreMax) // If scoreMin has been set, let user select the shade of gray for that score, in case // the default is too light to see or darker than necessary. { boolean parentLevel = isNameAtParentLevel(tdb,prefix); char *scoreMinStr = trackDbSettingClosestToHome(tdb, GRAY_LEVEL_SCORE_MIN); if (scoreMinStr != NULL) { int scoreMin = atoi(scoreMinStr); // maxShade=9 taken from hgTracks/simpleTracks.c. Ignore the 10 in shadesOfGray[10+1] -- // maxShade is used to access the array. @@ -5850,30 +5868,31 @@ filterBy_t *filterBySet = filterBySetGet(tdb,cart,name); if (filterBySet != NULL) { printf("<BR>"); filterBySetCfgUi(cart,tdb,filterBySet,FALSE); filterBySetFree(&filterBySet); } filterBy_t *highlightBySet = highlightBySetGet(tdb,cart,name); if (highlightBySet != NULL) { printf("<BR>"); highlightBySetCfgUi(cart,tdb,highlightBySet,FALSE); filterBySetFree(&highlightBySet); } +wigOption(cart, name, title, tdb); cfgEndBox(boxed); } static boolean isSpeciesOn(struct cart *cart, struct trackDb *tdb, char *species, char *option, int optionSize, boolean defaultState) /* check the cart to see if species is turned off or on (default is defaultState) */ { boolean parentLevel = isNameAtParentLevel(tdb,option); if (*option == '\0') safef(option, optionSize, "%s.%s", tdb->track, species); else { char *suffix = option + strlen(option); int suffixSize = optionSize - strlen(option); safef(suffix,suffixSize,".%s",species); } @@ -6374,30 +6393,33 @@ printf("<BR>\n"); if (trackDbSettingClosestToHome(tdb, "noColorTag") == NULL) { cgiMakeRadioButton(cartVarName, BAM_COLOR_MODE_TAG, sameString(selected, BAM_COLOR_MODE_TAG)); printf("Use R,G,B colors specified in user-defined tag "); safef(cartVarName2, sizeof(cartVarName2), "%s." BAM_COLOR_TAG, name); sel2 = cartOrTdbString(cart, tdb, BAM_COLOR_TAG, BAM_COLOR_TAG_DEFAULT); safef(onChange, sizeof(onChange), UPDATE_RADIO_FORMAT, "onkeypress", cartVarName, BAM_COLOR_MODE_TAG); cgiMakeTextVarWithExtraHtml(cartVarName2, sel2, 30, onChange); printf("<BR>\n"); } cgiMakeRadioButton(cartVarName, BAM_COLOR_MODE_OFF, sameString(selected, BAM_COLOR_MODE_OFF)); printf("No additional coloring"); +// let the user choose to see the track in wiggle mode +wigOption(cart, name, title, tdb); + //TODO: include / exclude flags if (!boxed && fileExists(hHelpFile("hgBamTrackHelp"))) printf("<P><A HREF=\"../goldenPath/help/hgBamTrackHelp.html\" TARGET=_BLANK>BAM " "configuration help</A></P>"); cfgEndBox(boxed); } #endif//def USE_BAM void lrgCfgUi(struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed) /* LRG: Locus Reference Genomic sequences mapped to assembly. */ { boxed = cfgBeginBoxAndTitle(tdb, boxed, title); printf("<TABLE%s><TR><TD>",boxed?" width='100%'":"");