637185cb51ee2ce0651a4defe22862d735dfb3ff
kate
Thu Nov 17 15:01:34 2016 -0800
Remove globals in response to code review. refs #17369
diff --git src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c
index 9170249..5cd306d 100644
--- src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c
+++ src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c
@@ -1,373 +1,370 @@
/* hgGtexTrackSettings: Configure GTEx track, with tissues selected from Body Map or list
*
* Copyright (C) 2016 The Regents of the University of California
*/
#include "common.h"
#include "trackDb.h"
#include "cart.h"
#include "portable.h"
#include "cheapcgi.h"
#include "web.h"
#include "hCommon.h"
#include "hui.h"
#include "gtexUi.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 *trackDb = NULL;
-static void printTrackHeader()
+static void printTrackHeader(char *db, struct trackDb *tdb)
/* Print top banner with track labels */
// TODO: Try to simplify layout
{
char *assembly = stringBetween("(", ")", hFreezeFromDb(db));
puts(
" \n"
"
\n"
"
\n"
);
printf(
"
\n"
" %s Track\n"
" %s \n"
" "
"
%s \n"
-, trackDb->shortLabel, assembly, trackDb->longLabel);
+, tdb->shortLabel, assembly, tdb->longLabel);
puts(
"\n"
"
\n"
" \n"
" \n"
" \n"
" \n"
"
\n"
"
\n"
"
\n");
}
static void printBodyMap()
{
puts(
" \n"
" \n"
" GTEx Body Map illustration not found\n"
" \n");
}
-static void printVisSelect()
+static void printVisSelect(struct trackDb *tdb)
/* Track visibility dropdown */
{
-enum trackVisibility vis = trackDb->visibility;
-vis = hTvFromString(cartUsualString(cart, trackDb->track, hStringFromTv(vis)));
+enum trackVisibility vis = tdb->visibility;
+vis = hTvFromString(cartUsualString(cart, tdb->track, hStringFromTv(vis)));
boolean canPack = TRUE;
-hTvDropDownClassVisOnlyAndExtra(trackDb->track, vis, canPack, "gbSelect normalText visDD",
- trackDbSetting(trackDb, "onlyVisibility"), NULL);
+hTvDropDownClassVisOnlyAndExtra(tdb->track, vis, canPack, "gbSelect normalText visDD",
+ trackDbSetting(tdb, "onlyVisibility"), NULL);
}
-static void printScoreFilter(struct cart *cart, char *track)
+static void printScoreFilter(struct cart *cart, char *track, struct trackDb *tdb)
/* Filter on overall gene expression score */
{
char buf[512];
puts("Limit to genes scored at or above: \n");
-safef(buf, sizeof(buf), "%s.%s", trackDb->track, SCORE_FILTER);
+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);
}
-static void printConfigPanel()
+static void printConfigPanel(struct trackDb *tdb)
/* Controls for track configuration (except for tissues) */
{
-char *track = trackDb->track;
+char *track = tdb->track;
puts(
" \n"
" \n"
"
Configuration
\n"
"
\n");
/* Track vis dropdown */
-printVisSelect();
+printVisSelect(tdb);
puts(
"
\n"
"
\n");
/* GTEx-specific track controls, layout in 3 rows */
puts(
" \n"
" \n"
"
\n");
-gtexGeneUiGeneLabel(cart, track, trackDb);
+gtexGeneUiGeneLabel(cart, track, tdb);
puts(
"
\n"
"
\n");
-gtexGeneUiGeneModel(cart, track, trackDb);
+gtexGeneUiGeneModel(cart, track, tdb);
puts(
"
\n"
"
\n");
puts(
" \n"
" \n"
"
\n");
-gtexGeneUiLogTransform(cart, track, trackDb);
+gtexGeneUiLogTransform(cart, track, tdb);
puts(
"
\n");
puts(
"
\n");
-gtexGeneUiViewLimits(cart, track, trackDb);
+gtexGeneUiViewLimits(cart, track, tdb);
puts(
"
\n"
"
\n");
puts(
" \n"
" \n");
puts(
"
\n");
-gtexGeneUiCodingFilter(cart, track, trackDb);
+gtexGeneUiCodingFilter(cart, track, tdb);
puts(
"
\n");
/* Filter on score */
puts(
"
\n");
-printScoreFilter(cart, track);
+printScoreFilter(cart, track, tdb);
puts(
"
\n"
"
\n");
puts(
" \n");
}
-static void printTissueTable()
+static void printTissueTable(struct trackDb *tdb)
/* Output HTML with tissue labels and colors, in 2 columns, to fit next to body map */
{
+char *version = gtexVersion(tdb->track);
struct gtexTissue *tis, *tissues = gtexGetTissues(version);
char var[512];
-safef(var, sizeof var, "%s.%s", trackDb->track, GTEX_TISSUE_SELECT);
+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(
" \n"
"\n"
"
Tissues
\n"
"
\n"
" Click label below or in Body Map to set or clear a tissue\n"
"
\n"
"
\n"
"
\n"
);
puts(
"");
char buf[512];
-safef(buf, sizeof(buf), "%s%s.%s", cgiMultListShadowPrefix(), trackDb->track, GTEX_TISSUE_SELECT);
+safef(buf, sizeof(buf), "%s%s.%s", cgiMultListShadowPrefix(), tdb->track, GTEX_TISSUE_SELECT);
cgiMakeHiddenVar(buf, "0");
}
-static void printTrackConfig()
+static void printTrackConfig(struct trackDb *tdb)
/* 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"
" \n"
"
\n");
printBodyMap();
puts(
"
\n"
"
\n");
-printConfigPanel();
-printTissueTable();
+printConfigPanel(tdb);
+printTissueTable(tdb);
puts(
"
\n"
"
\n");
}
-static void printDataInfo()
+static void printDataInfo(char *db, struct trackDb *tdb)
{
puts(
" \n"
" \n"
"
Data Information
\n"
"
\n"
// TODO: move click handler to JS
" \n"
"
\n"
"
\n"
);
puts(
" \n"
"
\n");
puts("
");
-printUpdateTime(db, trackDb, NULL);
+printUpdateTime(db, tdb, NULL);
puts("
");
puts("
");
-makeSchemaLink(db, trackDb, "View table schema");
+makeSchemaLink(db, tdb, "View table schema");
puts("
");
puts(
"
\n"
"
\n");
}
-static void printTrackDescription()
+static void printTrackDescription(struct trackDb *tdb)
{
puts(
" \n"
" \n"
"
Track Description
\n"
"
\n"
" \n"
"
\n"
"
\n"
" \n"
"
\n");
-puts(trackDb->html);
+puts(tdb->html);
puts(
"
\n"
"
\n");
}
-static struct trackDb *getTrackDb(char *database, char *track)
+static struct trackDb *getTrackDb(char *db, char *track)
/* Check if this is an assembly with GTEx track and get trackDb */
{
struct sqlConnection *conn = sqlConnect(db);
if (conn == NULL)
errAbort("Can't connect to database %s\n", db);
char where[256];
safef(where, sizeof(where), "tableName='%s'", track);
// TODO: use hdb, hTrackDbList to get table names of trackDb,
struct trackDb *tdb = trackDbLoadWhere(conn, "trackDb", where);
trackDbAddTableField(tdb);
sqlDisconnect(&conn);
return tdb;
}
static void doMiddle(struct cart *theCart)
/* Send HTML with javascript to display the user interface. */
{
cart = theCart;
+char *db = NULL, *genome = NULL, *clade = NULL;
+getDbGenomeClade(cart, &db, &genome, &clade, oldVars);
// Start web page with new-style header
webStartGbNoBanner(cart, db, "Genome Browser GTEx Track Settings");
puts(" ");
-char *genome = NULL, *clade = NULL;
-getDbGenomeClade(cart, &db, &genome, &clade, oldVars);
char *track = cartString(cart, "g");
-trackDb = getTrackDb(db, track);
-if (!trackDb)
+struct trackDb *tdb = getTrackDb(db, track);
+if (!tdb)
errAbort("No GTEx track %s found in database %s\n", track, db);
-version = gtexVersion(track);
// Container for bootstrap grid layout
puts(
"\n");
// Print form with configuration HTML, and track description
printf(
"");
-printDataInfo();
-if (trackDb->html)
- printTrackDescription();
+printDataInfo(db, tdb);
+if (tdb->html)
+ printTrackDescription(tdb);
puts(
"
");
// Initialize illustration display and handle mouseover and clicks
puts("");
webIncludeFile("inc/gbFooter.html");
webEndJWest();
}
int main(int argc, char *argv[])
/* Process CGI / command line. */
{
/* Null terminated list of CGI Variables we don't want to save to cart */
/* TODO: check these */
char *excludeVars[] = {"submit", "Submit", "g", NULL};
long enteredMainTime = clock1000();
cgiSpoof(&argc, argv);
oldVars = hashNew(10);
cartEmptyShellNoContent(doMiddle, hUserCookie(), excludeVars, oldVars);
cgiExitTime("hgGtexTrackSettings", enteredMainTime);
return 0;
}