ab1496587c1d1f6319181eac3d7739f18bd88010 kate Wed Nov 25 11:46:27 2015 -0800 If not tissues are selected, select all. refs #15645 diff --git src/hg/lib/gtexUi.c src/hg/lib/gtexUi.c index a050fa0..588f91c 100644 --- src/hg/lib/gtexUi.c +++ src/hg/lib/gtexUi.c @@ -1,212 +1,218 @@ /* 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 "gtexTissue.h" #include "gtexUi.h" static char *makeTissueLabel(struct gtexTissue *tis) { char buf[256]; safef(buf, sizeof(buf), "" " %s", tis->color, tis->description); return(cloneString(buf)); } struct tissueSelect { struct tissueSelect *next; char *name; char *label; boolean checked; }; static void makeGroupCheckboxes(char *name, char *title, struct tissueSelect *tisSelects) { if (title != NULL) printf("%s\n", title); int count = slCount(tisSelects); struct tissueSelect **tisArray; AllocArray(tisArray, count); int i=0; struct tissueSelect *tsel; for (i=0, tsel = tisSelects; tsel != NULL; tsel = tsel->next, i++) tisArray[i] = tsel; int col=0; int row=0; int tableColumns=3; for (i=0; i=count) { printf(""); row++; col = 0; } j = row + col*(count/tableColumns+1); printf("" "%s\n", name, tisArray[j]->name, tisArray[j]->checked ? "CHECKED" : "", tisArray[j]->label); col++; } if ((i % tableColumns) != 0) while ((i++ % tableColumns) != 0) printf(""); printf("\n"); } static void makeAllTissueCheckboxes(char *name, struct gtexTissue *tissues, struct slName *checked) { struct hash *checkHash = hashNew(0); struct slName *sel; for (sel = checked; sel != NULL; sel = sel->next) hashAdd(checkHash, sel->name, sel->name); puts(""); struct tissueSelect *tsel; struct gtexTissue *tis; struct tissueSelect *allTissues = NULL; for (tis = tissues; tis != NULL; tis = tis->next) { AllocVar(tsel); tsel->name = tis->name; tsel->label = makeTissueLabel(tis); + if (hashNumEntries(checkHash) == 0) + tsel->checked = TRUE; + else tsel->checked = (hashLookup(checkHash, tis->name) != NULL); slAddHead(&allTissues, tsel); } slReverse(&allTissues); makeGroupCheckboxes(name, NULL, allTissues); puts("
"); char buf[512]; safef(buf, sizeof(buf), "%s%s", cgiMultListShadowPrefix(), name); cgiMakeHiddenVar(buf, "0"); } static void makeGroupedTissueCheckboxes(char *name, struct gtexTissue *tissues, struct slName *checked) { struct hash *checkHash = hashNew(0); struct slName *sel; for (sel = checked; sel != NULL; sel = sel->next) hashAdd(checkHash, sel->name, sel->name); puts(""); struct tissueSelect *brainTissues = NULL; struct tissueSelect *digestiveTissues = NULL; struct tissueSelect *reproductiveTissues = NULL; struct tissueSelect *otherTissues = NULL; struct tissueSelect *tsel; struct gtexTissue *tis; for (tis = tissues; tis != NULL; tis = tis->next) { AllocVar(tsel); tsel->name = tis->name; tsel->label = makeTissueLabel(tis); + if (hashNumEntries(checkHash) == 0) + tsel->checked = TRUE; + else tsel->checked = (hashLookup(checkHash, tis->name) != NULL); if (startsWith("brain", tis->name)) slAddHead(&brainTissues, tsel); else if (sameString(tis->name, "uterus") || sameString(tis->name, "testis") || sameString(tis->name, "vagina") || sameString(tis->name, "prostate") || sameString(tis->name, "ovary") || sameString(tis->name, "breastMamTissue") || sameString(tis->name, "ectocervix") || sameString(tis->name, "endocervix") || sameString(tis->name, "fallopianTube")) slAddHead(&reproductiveTissues, tsel); else if (startsWith("esophagus", tis->name) || startsWith("colon", tis->name) || sameString(tis->name, "stomach") || sameString("smallIntestine", tis->name)) slAddHead(&digestiveTissues, tsel); else slAddHead(&otherTissues, tsel); } slReverse(&brainTissues); slReverse(&digestiveTissues); slReverse(&reproductiveTissues); slReverse(&otherTissues); makeGroupCheckboxes(name, "Brain", brainTissues); makeGroupCheckboxes(name, "Gastrointestinal", digestiveTissues); makeGroupCheckboxes(name, "Reproductive", reproductiveTissues); makeGroupCheckboxes(name, "Other", otherTissues); puts("
"); char buf[512]; safef(buf, sizeof(buf), "%s%s", cgiMultListShadowPrefix(), name); cgiMakeHiddenVar(buf, "0"); } void gtexGeneUi(struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed) /* GTEx (Genotype Tissue Expression) per gene data */ { boxed = cfgBeginBoxAndTitle(tdb, boxed, title); printf("",boxed?" width='100%'":""); char cartVar[1024]; char *selected = NULL; /* Sample selection */ printf("Samples: "); safef(cartVar, sizeof(cartVar), "%s.%s", name, GTEX_SAMPLES); selected = cartCgiUsualString(cart, cartVar, GTEX_SAMPLES_DEFAULT); boolean isAllSamples = sameString(selected, GTEX_SAMPLES_ALL); cgiMakeRadioButton(cartVar, GTEX_SAMPLES_ALL, isAllSamples); printf("All\n"); cgiMakeRadioButton(cartVar, GTEX_SAMPLES_COMPARE_SEX, !isAllSamples); printf("Compare by gender\n"); printf("

"); /* Comparison type */ printf("

Comparison display:\n"); safef(cartVar, sizeof(cartVar), "%s.%s", name, 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\n"); cgiMakeRadioButton(cartVar, GTEX_COMPARISON_MIRROR, isMirror); printf("Two graphs\n"); printf("

"); /* Data transform */ printf("

Log10 transform:\n"); safef(cartVar, sizeof(cartVar), "%s.%s", name, GTEX_LOG_TRANSFORM); boolean isLogTransform = cartCgiUsualBoolean(cart, cartVar, GTEX_LOG_TRANSFORM_DEFAULT); cgiMakeCheckBox(cartVar, isLogTransform); /* Viewing limits max */ printf("  View limits maximum:\n"); safef(cartVar, sizeof(cartVar), "%s.%s", name, GTEX_MAX_LIMIT); // TODO: set max and initial limits from gtexInfo table int viewMax = cartCgiUsualInt(cart, cartVar, GTEX_MAX_LIMIT_DEFAULT); cgiMakeIntVar(cartVar, viewMax, 4); printf(" RPKM (range 10-180000)
\n"); printf("

"); /* Color scheme */ // Not sure if we still want this option printf("

Tissue colors:\n"); safef(cartVar, sizeof(cartVar), "%s.%s", name, 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("

"); /* Tissue filter */ printf("

Tissue selection:\n"); safef(cartVar, sizeof(cartVar), "%s.%s", name, GTEX_TISSUE_SELECT); jsMakeCheckboxGroupSetClearButton(cartVar, TRUE); puts(" "); jsMakeCheckboxGroupSetClearButton(cartVar, FALSE); struct gtexTissue *tissues = gtexGetTissues(); struct slName *selectedValues = NULL; if (cartListVarExistsAnyLevel(cart, tdb, FALSE, GTEX_TISSUE_SELECT)) selectedValues = cartOptionalSlNameListClosestToHome(cart, tdb, FALSE, GTEX_TISSUE_SELECT); if (sameString(cgiUsualString("tis", "group"), "group")) makeGroupedTissueCheckboxes(cartVar, tissues, selectedValues); else makeAllTissueCheckboxes(cartVar, tissues, selectedValues); cfgEndBox(boxed); }