d09b392333a2f5d2f943f2f36dad4be0a477381e kate Thu Sep 14 13:55:37 2017 -0700 Add pvalue and TSS distance for each eQTL. Input from Casey Brown, U Penn. refs #15646 diff --git src/hg/lib/gtexUi.c src/hg/lib/gtexUi.c index 5e7e6fb..76cfa0d 100644 --- src/hg/lib/gtexUi.c +++ src/hg/lib/gtexUi.c @@ -1,610 +1,610 @@ /* GTEx (Genotype Tissue Expression) track controls */ /* Copyright (C) 2015 The Regents of the University of California * See README in this or parent directory for licensing information. */ #include "cheapcgi.h" #include "cart.h" #include "hui.h" #include "trackDb.h" #include "jsHelper.h" #include "hCommon.h" #include "gtexTissue.h" #include "gtexInfo.h" #include "gtexUi.h" #define SYSTEM_BRAIN "Brain" #define SYSTEM_REPRODUCTIVE "Reproductive" #define SYSTEM_GASTRO "Digestive" #define SYSTEM_ENDOCRINE "Endocrine" #define SYSTEM_CARDIO "Cardiovascular" #define SYSTEM_OTHER "Other" /* Restrict features on right-click (popup) version */ static boolean isPopup = FALSE; /* Path to Body Map-based track configuration */ static char *_hgGtexTrackSettingsName = "../cgi-bin/hgGtexTrackSettings"; boolean gtexIsGeneTrack(char *trackName) /* Identify GTEx gene track so custom trackUi CGI can be launched */ { return startsWith(GTEX_GENE_TRACK_BASENAME, trackName); } boolean gtexIsEqtlTrack(char *trackName) /* Identify GTEx eQTL track so custom trackUi CGI can be launched */ { return startsWith(GTEX_EQTL_TRACK_BASENAME, trackName); } char *gtexTrackUiName() /* Refer to Body Map CGI if suitable */ { // Display body map configuration page if user is on a browser we've tested enum browserType bt = cgiBrowser(); if (bt == btChrome || bt == btFF || bt == btSafari) return(_hgGtexTrackSettingsName); return hgTrackUiName(); } /* Convenience functions for tissue filter controls */ static char *makeTissueColorPatch(struct gtexTissue *tis) /* Display a box colored by defined tissue color */ { char buf[256]; safef(buf, sizeof(buf), "
\n", orderVar, sortOrder); puts(" | "); printf(" | Tissue | ", sortableClass, onClick); printf("Samples | ", sortableClass, onClick); printf("Organ | ", sortableClass, onClick); printf("System | ", sortableClass, onClick); puts("\n
---|---|---|---|---|---|
", name, tis->name, isChecked ? "checked" : "", isPopup ? "disabled" : ""); // color patch printf("\n%s", makeTissueColorPatch(tis)); // tissue name printf("\n | %s | ", tis->description); // sample count int samples = hashIntValDefault(tscHash, tis->name, 0); printf("\n%d | ", samples, samples); // organ printf("\n%s | ", tis->organ); // system printf("\n%s | ", getSystem(tis)); puts("\n
",
isPopup ? 75 : 100, boxed ?" width='100%'":"");
char cartVar[1024];
/* Gene labels */
puts(" ");
gtexGeneUiGeneLabel(cart, track, tdb);
puts(" \n");
/* Filter on coding genes */
puts("");
gtexGeneUiCodingFilter(cart, track, tdb);
/* Show exons in gene model */
puts(" ");
gtexGeneUiGeneModel(cart, track, tdb);
puts(" ");
/* Data transform. When selected, the next control (view limits max) is disabled */
puts("");
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(" ");
#ifdef COMPARISON
/* Sample selection */
printf("Samples: ");
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, "gtexSamplesChanged(\"%s\");", track);
char *command = buf;
cgiMakeOnEventRadioButtonWithClass(cartVar, GTEX_SAMPLES_ALL, isAllSamples, NULL, "change", command);
printf("All\n");
cgiMakeOnEventRadioButtonWithClass(cartVar, GTEX_SAMPLES_COMPARE_SEX, !isAllSamples, NULL, "change", command);
printf("Compare by gender\n");
printf(" ");
/* Comparison type. Disabled if All samples selected. */
safef(buf, sizeof buf, "%sComparisonLabel %s", track, isAllSamples ? "disabled" : "");
printf("Comparison display:", buf);
safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_COMPARISON_DISPLAY);
selected = cartCgiUsualString(cart, cartVar, GTEX_COMPARISON_DEFAULT);
boolean isMirror = sameString(selected, GTEX_COMPARISON_MIRROR);
cgiMakeRadioButton(cartVar, GTEX_COMPARISON_DIFF, !isMirror);
printf("Difference graph", buf);
cgiMakeRadioButton(cartVar, GTEX_COMPARISON_MIRROR, isMirror);
printf("Two graphs\n", buf);
printf(" ");
#endif
/* Color scheme */
// We don't need the rainbow color scheme, but may want another (e.g. different
// colors for brain tissues), so leaving code in for now.
#ifdef COLOR_SCHEME
printf("Tissue colors:\n"); safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_COLORS); selected = cartCgiUsualString(cart, cartVar, GTEX_COLORS_DEFAULT); boolean isGtexColors = sameString(selected, GTEX_COLORS_GTEX); cgiMakeRadioButton(cartVar, GTEX_COLORS_GTEX, isGtexColors); printf("GTEx\n"); cgiMakeRadioButton(cartVar, GTEX_COLORS_RAINBOW, !isGtexColors); printf("Rainbow\n"); printf(" "); #endif /* Tissue filter */ printf(""); printf(" Tissues:\n");
safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_TISSUE_SELECT);
if (isPopup)
{
printf("",
hTrackUiForTrack(track), track);
}
else
{
jsMakeCheckboxGroupSetClearButton(cartVar, TRUE);
puts(" ");
jsMakeCheckboxGroupSetClearButton(cartVar, FALSE);
}
printf(" ");
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 |
",
isPopup ? 75 : 100, boxed ?" width='100%'":"");
char cartVar[1024];
/* Gene filter */
puts(" ");
gtexEqtlUiGene(cart, track, tdb);
puts(" \n");
/* Absolute value of effect size */
puts("");
gtexEqtlUiEffectSize(cart, track, tdb);
puts(" \n");
/* Probability eQTL is in CAVIAR 95% causal set */
puts("");
puts(" ");
gtexEqtlUiProbability(cart, track, tdb);
puts(" ");
/* Display or hide tissue color patch for single-tissue eQTL's */
gtexEqtlUiTissueColor(cart, track, tdb);
puts(" \n");
/* Tissue filter */
printf(""); printf(" Tissues:\n");
safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_TISSUE_SELECT);
if (isPopup)
{
printf("",
hTrackUiForTrack(track), track);
}
else
{
jsMakeCheckboxGroupSetClearButton(cartVar, TRUE);
puts(" ");
jsMakeCheckboxGroupSetClearButton(cartVar, FALSE);
}
printf(" ");
if (!isPopup)
{
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 |