1888f6dd81f220f2ccd0e49c9b8a9a817ae0618c kate Thu Nov 10 15:59:18 2016 -0800 Cleanup C code. refs #17369 diff --git src/hg/lib/gtexUi.c src/hg/lib/gtexUi.c index fba09a2..8833fa3 100644 --- src/hg/lib/gtexUi.c +++ src/hg/lib/gtexUi.c @@ -272,88 +272,132 @@ slReverse(&allTissues); makeGroupCheckboxes(name, NULL, allTissues); puts("</tr></table>"); char buf[512]; safef(buf, sizeof(buf), "%s%s", cgiMultListShadowPrefix(), name); cgiMakeHiddenVar(buf, "0"); } void gtexPortalLink(char *geneId) /* print URL to GTEX portal gene expression page using Ensembl Gene Id*/ { printf("<a target='_blank' href='http://www.gtexportal.org/home/gene/%s'>" "View at GTEx portal</a>\n", geneId); } -void gtexGeneUi(struct cart *cart, struct trackDb *tdb, char *track, char *title, boolean boxed) -/* GTEx (Genotype Tissue Expression) per gene data */ -{ -if (cartVarExists(cart, "ajax")) - isPopup = TRUE; - -boxed = cfgBeginBoxAndTitle(tdb, boxed, title); -printf("\n<table id=gtexGeneControls style='font-size:%d%%' %s>\n<tr><td>", - isPopup ? 75 : 100, boxed ?" width='100%'":""); +/* Convenience functions shared by hgTrackUi and hgGtexTrackSettings. hgTrackUi is for now still + * available from right-click */ +void gtexGeneUiGeneLabel(struct cart *cart, char *track, struct trackDb *tdb) +/* Radio buttons to select format of gene label */ +{ char cartVar[1024]; -char buf[512]; - -/* Gene labels */ -printf("<div>"); char *geneLabel = cartUsualStringClosestToHome(cart, tdb, isNameAtParentLevel(tdb, track), GTEX_LABEL, GTEX_LABEL_DEFAULT); printf("<b>Label:</b> "); safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_LABEL); cgiMakeRadioButton(cartVar, GTEX_LABEL_SYMBOL , sameString(GTEX_LABEL_SYMBOL, geneLabel)); printf("%s ", "gene symbol"); cgiMakeRadioButton(cartVar, GTEX_LABEL_ACCESSION, sameString(GTEX_LABEL_ACCESSION, geneLabel)); printf("%s ", "accession"); cgiMakeRadioButton(cartVar, GTEX_LABEL_BOTH, sameString(GTEX_LABEL_BOTH, geneLabel)); printf("%s ", "both"); -printf("</div>\n"); +} -/* Filter on coding genes */ -printf("<div>"); -printf("<b>Limit to protein coding genes:</b>\n"); +void gtexGeneUiCodingFilter(struct cart *cart, char *track, struct trackDb *tdb) +/* Checkbox to restrict display to protein coding genes */ +{ +char cartVar[1024]; +puts("<b>Limit to protein coding genes:</b>\n"); safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_CODING_GENE_FILTER); boolean isCodingOnly = cartCgiUsualBoolean(cart, cartVar, GTEX_CODING_GENE_FILTER_DEFAULT); cgiMakeCheckBox(cartVar, isCodingOnly); +} -/* Show exons in gene model */ -printf(" <b>Show GTEx gene model</b>\n"); +void gtexGeneUiGeneModel(struct cart *cart, char *track, struct trackDb *tdb) +/* Checkbox to enable display of GTEx gene model */ +{ +char cartVar[1024]; +puts(" <b>Show GTEx gene model</b>\n"); safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_SHOW_EXONS); boolean showExons = cartCgiUsualBoolean(cart, cartVar, GTEX_SHOW_EXONS_DEFAULT); cgiMakeCheckBox(cartVar, showExons); -printf("</div>"); +} -/* Data transform. When selected, the next control (view limits max) is disabled */ -printf("<div><b>Log10 transform:</b>\n"); +void gtexGeneUiLogTransform(struct cart *cart, char *track, struct trackDb *tdb) +/* Checkbox to select log-transformed RPKM values */ +{ +char cartVar[1024]; +char buf[512]; +puts("<b>Log10 transform:</b>\n"); safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_LOG_TRANSFORM); boolean isLogTransform = cartCgiUsualBoolean(cart, cartVar, GTEX_LOG_TRANSFORM_DEFAULT); safef(buf, sizeof buf, "onchange='gtexTransformChanged(\"%s\")'", track); cgiMakeCheckBoxJS(cartVar, isLogTransform, buf); +} -/* Viewing limits max. This control is disabled if log transform is selected */ -// construct class so JS can toggle +void gtexGeneUiViewLimits(struct cart *cart, char *track, struct trackDb *tdb) +/* Set viewing limits if log transform not checked */ +{ +char cartVar[1024]; +char buf[512]; +boolean isLogTransform = cartCgiUsualBoolean(cart, cartVar, GTEX_LOG_TRANSFORM_DEFAULT); safef(buf, sizeof buf, "%sViewLimitsMaxLabel %s", track, isLogTransform ? "disabled" : ""); -printf(" <span class='%s'><b>View limits maximum:</b></span>\n", buf); +printf("<span class='%s'><b>View limits maximum:</b></span>\n", buf); safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_MAX_LIMIT); int viewMax = cartCgiUsualInt(cart, cartVar, GTEX_MAX_LIMIT_DEFAULT); cgiMakeIntVarWithExtra(cartVar, viewMax, 4, isLogTransform ? "disabled" : ""); char *version = gtexVersion(tdb->table); printf("<span class='%s'> RPKM (range 0-%d)</span>\n", buf, round(gtexMaxMedianScore(version))); -printf("</div>"); +} + +void gtexGeneUi(struct cart *cart, struct trackDb *tdb, char *track, char *title, boolean boxed) +/* GTEx (Genotype Tissue Expression) per gene data */ +{ +if (cartVarExists(cart, "ajax")) + isPopup = TRUE; + +boxed = cfgBeginBoxAndTitle(tdb, boxed, title); +printf("\n<table id=gtexGeneControls style='font-size:%d%%' %s>\n<tr><td>", + isPopup ? 75 : 100, boxed ?" width='100%'":""); + +char cartVar[1024]; + +/* Gene labels */ +puts("<div>"); +gtexGeneUiGeneLabel(cart, track, tdb); +puts("</div>\n"); + +/* Filter on coding genes */ +puts("<div>"); +gtexGeneUiCodingFilter(cart, track, tdb); + +/* Show exons in gene model */ +puts(" "); +gtexGeneUiGeneModel(cart, track, tdb); +puts("</div>"); + +/* Data transform. When selected, the next control (view limits max) is disabled */ + +puts("<div>"); +gtexGeneUiLogTransform(cart, track, tdb); + +/* Viewing limits max. This control is disabled if log transform is selected */ +// construct class so JS can toggle +puts(" "); +gtexGeneUiViewLimits(cart, track, tdb); +puts("</div>"); #ifdef COMPARISON /* Sample selection */ printf("<div><b>Samples:</b> "); safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_SAMPLES); char *selected = cartCgiUsualString(cart, cartVar, GTEX_SAMPLES_DEFAULT); boolean isAllSamples = sameString(selected, GTEX_SAMPLES_ALL); safef(buf, sizeof buf, "onchange='gtexSamplesChanged(\"%s\")'", track); char *command = buf; cgiMakeOnClickRadioButton(cartVar, GTEX_SAMPLES_ALL, isAllSamples, command); printf("All\n"); cgiMakeOnClickRadioButton(cartVar, GTEX_SAMPLES_COMPARE_SEX, !isAllSamples, command); printf("Compare by gender\n"); printf("</div>"); @@ -389,30 +433,31 @@ /* Tissue filter */ printf("<br>"); printf("<div><b>Tissues:</b>\n"); safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_TISSUE_SELECT); if (isPopup) { printf("<a href='../cgi-bin/hgTrackUi?g=%s'><button type='button'>Change</button><a>", track); } else { jsMakeCheckboxGroupSetClearButton(cartVar, TRUE); puts(" "); jsMakeCheckboxGroupSetClearButton(cartVar, FALSE); } printf("</div>"); +char *version = gtexVersion(tdb->table); struct gtexTissue *tissues = gtexGetTissues(version); struct slName *selectedValues = NULL; if (cartListVarExistsAnyLevel(cart, tdb, FALSE, GTEX_TISSUE_SELECT)) selectedValues = cartOptionalSlNameListClosestToHome(cart, tdb, FALSE, GTEX_TISSUE_SELECT); char *selectType = cgiUsualString("tis", "table"); if (sameString(selectType, "group")) makeGroupedTissueCheckboxes(cartVar, tissues, selectedValues); else if (sameString(selectType, "table")) makeTableTissueCheckboxes(cartVar, tissues, selectedValues, cart, track, version); else makeAllTissueCheckboxes(cartVar, tissues, selectedValues); puts("\n</table>\n"); cfgEndBox(boxed); }