9a3d804d4836f8508ed10a5372e3cc50c4c5ff64
kate
Thu Nov 3 20:50:16 2016 -0700
Finish connection to hgTracks; create form and submit button, and get tissues into cart. refs #17369
diff --git src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c
index 359410b..520f9c0 100644
--- src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c
+++ src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c
@@ -1,436 +1,449 @@
/* hgGtexTrackSettings: Configure GTEx track
*
* Copyright (C) 2016 The Regents of the University of California
*/
#include "common.h"
#include "trackDb.h"
#include "cart.h"
#include "portable.h"
#include "gtexUi.h"
/* TODO: prune */
#include "cartJson.h"
#include "cheapcgi.h"
#include "errCatch.h"
#include "googleAnalytics.h"
#include "hCommon.h"
#include "hgConfig.h"
#include "hdb.h"
#include "htmshell.h"
#include "hubConnect.h"
#include "hui.h"
#include "jsHelper.h"
#include "jsonParse.h"
#include "obscure.h" // for readInGulp
#include "web.h"
#include "gtexInfo.h"
#include "gtexTissue.h"
/* Global Variables */
struct cart *cart = NULL; /* CGI and other variables */
struct hash *oldVars = NULL; /* Old contents of cart before it was updated by CGI */
char *db = NULL;
char *version; /* GTEx release */
struct trackDb *tdb = NULL;
static void doCartJson()
/* Perform UI commands to update the cart and/or retrieve cart vars & metadata. */
{
struct cartJson *cj = cartJsonNew(cart);
//e.g. cartJsonRegisterHandler(cj, "setTaxId", setTaxId);
cartJsonExecute(cj);
}
static void doJsIncludes()
/* Include JS libraries. From hgGateway (think about libifying) */
{
//puts("");
//puts("");
//puts("");
puts("");
webIncludeResourceFile("jquery-ui.css");
jsIncludeFile("jquery-ui.js", NULL);
jsIncludeFile("jquery.watermarkinput.js", NULL);
jsIncludeFile("utils.js",NULL);
}
static void printTrackHeader()
/* Print top banner with track labels */
{
char *assembly = stringBetween("(", ")", hFreezeFromDb(db));
puts(
" \n"
"
\n"
"
\n"
);
printf(
"
\n"
" %s Track\n"
" %s \n"
" \n"
" %s \n"
, tdb->shortLabel, assembly, tdb->longLabel);
puts(
"
"
" "
"
"
"
"
"
"
);
}
static void printTissueTable()
/* Output HTML with tissue labels and colors, in 2 columns, to fit next to body map */
{
struct gtexTissue *tis, *tissues = gtexGetTissues(version);
char var[512];
safef(var, sizeof var, "%s.%s", tdb->track, GTEX_TISSUE_SELECT);
struct hash *selectedHash = cartHashList(cart, var);
struct gtexTissue **tisTable = NULL;
int count = slCount(tissues);
AllocArray(tisTable, count);
int i=0, col=0;
int cols = 2;
int last = count/2 + 1;
puts(
" "
""
"
Tissues
"
"
"
" Click label below or in Body Map to set or clear a tissue"
"
"
"
"
"
"
);
puts("");
+char buf[512];
+safef(buf, sizeof(buf), "%s%s.%s", cgiMultListShadowPrefix(), tdb->track, GTEX_TISSUE_SELECT);
+cgiMakeHiddenVar(buf, "0");
}
static void printBodyMap()
{
puts(
" "
" "
" Body Map illustration not found"
" "
);
}
static void printVisSelect()
{
enum trackVisibility vis = tdb->visibility;
vis = hTvFromString(cartUsualString(cart, tdb->track, hStringFromTv(vis)));
boolean canPack = TRUE;
hTvDropDownClassVisOnlyAndExtra(tdb->track, vis, canPack, "gbSelect normalText visDD",
trackDbSetting(tdb, "onlyVisibility"), NULL);
}
static void printConfigPanel()
/* Controls for track configuration (except for tissues) */
{
char cartVar[1024];
char buf[512];
char *track = tdb->track;
puts(
" \n"
/* Blue section header and track vis dropdown */
" \n"
"
Configuration
\n"
"
\n"
);
printVisSelect();
puts(
"
\n"
);
puts(
"
\n"
);
/* First row of config controls */
puts(
" \n"
" \n"
/* Gene labels */
"
\n"
"Label : "
);
char *geneLabel = cartUsualStringClosestToHome(cart, tdb, isNameAtParentLevel(tdb, track),
GTEX_LABEL, GTEX_LABEL_DEFAULT);
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");
puts(
"
\n"
/* Show exons in gene model */
"
\n"
);
puts("Show GTEx gene model \n");
safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_SHOW_EXONS);
boolean showExons = cartCgiUsualBoolean(cart, cartVar, GTEX_SHOW_EXONS_DEFAULT);
cgiMakeCheckBox(cartVar, showExons);
puts(
"
\n"
);
puts(
"
\n"
);
/* Row 2 */
puts(
" \n"
" \n"
);
/* Log transform. When selected, the next control (view limits max) is disabled */
puts(
"
\n"
);
puts("Log10 transform: \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);
puts(
"
\n"
);
/* Viewing limits max. This control is disabled if log transform is selected */
// construct class so JS can toggle
puts(
"
\n"
);
safef(buf, sizeof buf, "%sViewLimitsMaxLabel %s", track, isLogTransform ? "disabled" : "");
printf("View limits maximum: \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(" RPKM (range 0-%d) \n", buf, round(gtexMaxMedianScore(version)));
puts(
"
\n"
);
puts(
"
\n"
);
/* Row 3 */
puts(
" \n"
" \n"
);
/* Filter on coding genes */
puts(
"
\n"
);
puts("Limit to protein coding genes: \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);
puts(
"
\n"
);
/* Filter on score */
puts(
"
\n"
);
puts(" Limit to genes scored at or above: \n");
safef(buf, sizeof(buf), "%s.%s", tdb->track, SCORE_FILTER);
int score = cartUsualInt(cart, buf, 0);
int minScore = 0, maxScore = 1000;
cgiMakeIntVarWithLimits(buf, score, "Minimum score", 0, minScore, maxScore);
printf(
" (range %d-%d)\n",
minScore, maxScore);
puts(
"
\n"
);
puts(
"
\n"
);
puts(
" \n"
);
}
static void printTrackConfig()
/* Print track configuration panels, including Body Map.
The layout is 2-column. Left column is body map SVG.
Right column has a top panel for configuration settings (non-tissue),
and a lower panel with a tissue selection list.
*/
{
puts(
" \n"
);
// TODO: remove bodyMap id here
puts(
"
\n"
);
printBodyMap();
puts(
"
\n"
);
puts(
"
\n"
);
printConfigPanel();
printTissueTable();
puts(
"
\n"
);
puts(
"
\n"
);
}
static void printTrackDescription()
{
puts(" ");
puts("");
puts("
Track Description
");
puts("
");
puts("
");
if (tdb->html != NULL)
{
puts("");
puts("
");
puts(tdb->html);
}
puts("
");
puts("");
}
static void doMainPage()
/* Send HTML with javascript to bootstrap the user interface. */
{
// Start web page with new banner
webStartJWestNoBanner(cart, db, "Genome Browser GTEx Track Settings");
puts(" ");
puts(" ");
char *genome = NULL, *clade = NULL;
// char *chromosome = cartUsualString(cart, "c", hDefaultChrom(database));
//char *track = cartString(cart, "g");
getDbGenomeClade(cart, &db, &genome, &clade, oldVars);
// Check if this is an assembly with GTEx track
struct sqlConnection *conn = sqlConnect(db);
if (conn == NULL)
errAbort("Can't connect to database %s\n", db);
char *table = "gtexGene";
version = gtexVersion(table);
// TODO: use hdb, hTrackDbList to get table names of trackDb,
tdb = trackDbLoadWhere(conn, "trackDb", "tableName = 'gtexGene'");
sqlDisconnect(&conn);
if (!tdb)
errAbort("No GTEx track found in database %s\n", db);
+printf("