src/hg/hgTrackUi/hgTrackUi.c 1.524

1.524 2010/05/11 01:43:26 kent
Refactoring to split the trackDb.tableName field into separate track and table fields. Similarly track.mapName field goes to the same track and table fields.
Index: src/hg/hgTrackUi/hgTrackUi.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTrackUi/hgTrackUi.c,v
retrieving revision 1.523
retrieving revision 1.524
diff -b -B -U 4 -r1.523 -r1.524
--- src/hg/hgTrackUi/hgTrackUi.c	9 May 2010 17:26:29 -0000	1.523
+++ src/hg/hgTrackUi/hgTrackUi.c	11 May 2010 01:43:26 -0000	1.524
@@ -162,9 +162,9 @@
 	}
     slSort(&geneTdbList, trackDbCmp);
     printf("<BR><B>On details page, show function and coding differences relative to: </B> ");
     char cartVar[256];
-    safef(cartVar, sizeof(cartVar), "%s_geneTrack", tdb->tableName);
+    safef(cartVar, sizeof(cartVar), "%s_geneTrack", tdb->track);
     jsMakeCheckboxGroupSetClearButton(cartVar, TRUE);
     jsMakeCheckboxGroupSetClearButton(cartVar, FALSE);
     struct slName *selectedGeneTracks = cartOptionalSlNameList(cart, cartVar);
     if (selectedGeneTracks == NULL)
@@ -178,9 +178,9 @@
     char **values = needMem(menuSize*sizeof(char *));
     char **labels = needMem(menuSize*sizeof(char *));
     for (i = 0, gTdb = geneTdbList;  i < menuSize && gTdb != NULL;  i++, gTdb = gTdb->next)
 	{
-	values[i] = gTdb->tableName;
+	values[i] = gTdb->track;
 	labels[i] = gTdb->shortLabel;
 	}
     cgiMakeCheckboxGroupWithVals(cartVar, labels, values, menuSize, selectedGeneTracks, numCols);
     cgiMakeHiddenVar(cartVar, "persistentShadow");
@@ -287,9 +287,9 @@
 /* UI for dbSNP version 125 and later. */
 {
 char autoSubmit[2048];
 char *orthoTable = snp125OrthoTable(tdb, NULL);
-int version = snpVersion(tdb->tableName);
+int version = snpVersion(tdb->track);
 
 if (version < 130)
     snp125ValidLabelsSize--; // no by-1000genomes
 
@@ -510,9 +510,9 @@
 /* It would be nice to add a 'reset' button to reset the ld variables to their defaults. */
 
 printf("<BR><B>LD Values:</B><BR>&nbsp;&nbsp;\n");
 
-safef(var, sizeof(var), "%s_val", tdb->tableName);
+safef(var, sizeof(var), "%s_val", tdb->track);
 val = cartUsualString(cart,  var, ldValDefault);
 cgiMakeRadioButton(var, "rsquared", sameString("rsquared", val));
 printf("&nbsp;r<sup>2</sup>&nbsp;&nbsp;");
 cgiMakeRadioButton(var, "dprime",   sameString("dprime",   val));
@@ -521,9 +521,9 @@
 printf("&nbsp;LOD<BR>");
 
 printf("<BR><B>Track Geometry:</B><BR>&nbsp;&nbsp;\n");
 
-safef(var, sizeof(var), "%s_trm", tdb->tableName);
+safef(var, sizeof(var), "%s_trm", tdb->track);
 cgiMakeCheckBox(var, cartUsualBoolean(cart, var, ldTrmDefault));
 printf("&nbsp;Trim to triangle<BR>\n");
 
 if (tdbIsComposite(tdb))
@@ -534,11 +534,11 @@
     struct slRef *tdbRef;
     for (tdbRef = tdbRefList; tdbRef != NULL; tdbRef = tdbRef->next)
 	{
 	struct trackDb *subTdb = tdbRef->val;
-	if (hTableExists(database, subTdb->tableName))
+	if (hTableExists(database, subTdb->table))
 	    {
-	    safef(var, sizeof(var), "%s_inv", subTdb->tableName);
+	    safef(var, sizeof(var), "%s_inv", subTdb->track);
 	    cgiMakeCheckBox(var, cartUsualBoolean(cart, var, ldInvDefault));
 	    printf("&nbsp;Invert display for %s<BR>&nbsp;&nbsp;\n",
 		   subTdb->longLabel);
 	    }
@@ -546,16 +546,16 @@
     slFreeList(&tdbRefList);
     }
 else
     {
-    safef(var, sizeof(var), "%s_inv", tdb->tableName);
+    safef(var, sizeof(var), "%s_inv", tdb->track);
     printf("&nbsp;&nbsp;&nbsp;");
     cgiMakeCheckBox(var, cartUsualBoolean(cart, var, ldInvDefault));
     printf("&nbsp;Invert the display<BR>&nbsp;&nbsp;\n");
     }
 printf("<BR><B>Colors:</B>\n");
 
-safef(var, sizeof(var), "%s_pos", tdb->tableName);
+safef(var, sizeof(var), "%s_pos", tdb->track);
 val = cartUsualString(cart, var, ldPosDefault);
 printf("<TABLE>\n ");
 printf("<TR>\n  <TD>&nbsp;&nbsp;LD values&nbsp;&nbsp;</TD>\n  <TD>- ");
 radioButton(var, val, "red");
@@ -564,9 +564,9 @@
 printf("</TD>\n  <TD>");
 radioButton(var, val, "blue");
 printf("</TD>\n </TR>\n ");
 
-safef(var, sizeof(var), "%s_out", tdb->tableName);
+safef(var, sizeof(var), "%s_out", tdb->track);
 val = cartUsualString(cart, var, ldOutDefault);
 printf("<TR>\n  <TD>&nbsp;&nbsp;Outlines&nbsp;&nbsp;</TD>\n  <TD>- ");
 radioButton(var, val, "red");
 printf("</TD>\n  <TD>");
@@ -585,9 +585,9 @@
 printf("</TABLE>\n");
 
 if (tdb->type && sameString(tdb->type, "ld2"))
     {
-    safef(var, sizeof(var), "%s_gap", tdb->tableName);
+    safef(var, sizeof(var), "%s_gap", tdb->track);
     printf("&nbsp;&nbsp;");
     cgiMakeCheckBox(var, cartUsualBoolean(cart, var, ldGapDefault));
     printf("&nbsp;In dense mode, shade gaps between markers by T-int<BR>\n");
     }
@@ -613,9 +613,9 @@
 void labelMakeCheckBox(struct trackDb *tdb, char *sym, char *desc, boolean dflt)
 /* add a checkbox use to choose labels to enable. */
 {
 char varName[64];
-safef(varName, sizeof(varName), "%s.label.%s", tdb->tableName, sym);
+safef(varName, sizeof(varName), "%s.label.%s", tdb->track, sym);
 boolean option = cartUsualBoolean(cart, varName, dflt);
 cgiMakeCheckBox(varName, option);
 printf(" %s&nbsp;&nbsp;&nbsp;", desc);
 }
@@ -965,9 +965,9 @@
 char *affyMap;
 char *col;
 char varName[128];
 
-safef(varName, sizeof(varName), "%s.%s", tdb->tableName, "type");
+safef(varName, sizeof(varName), "%s.%s", tdb->track, "type");
 affyMap = cartUsualString(cart, varName, affyEnumToString(affyTissue));
 col = cartUsualString(cart, "exprssn.color", "rg");
 printf("<p><b>Experiment Display: </b> ");
 affyDropDown(varName, affyMap);
@@ -1020,9 +1020,9 @@
 char *drawExons = trackDbSetting(tdb, "expDrawExons");
 boolean checked = FALSE;
 if (!drawExons || differentWord(drawExons, "on"))
     return;
-safef(checkBoxName, sizeof(checkBoxName), "%s.expDrawExons", tdb->tableName);
+safef(checkBoxName, sizeof(checkBoxName), "%s.expDrawExons", tdb->track);
 checked = cartCgiUsualBoolean(cart, checkBoxName, FALSE);
 puts("<B>Draw intron lines/arrows and exons: </B> ");
 cgiMakeCheckBox(checkBoxName, checked);
 puts("<BR>\n");
@@ -1033,9 +1033,9 @@
 {
 char radioName[256];
 char *colorSetting = NULL;
 char *tdbSetting = trackDbSettingOrDefault(tdb, "expColor", "redGreen");
-safef(radioName, sizeof(radioName), "%s.color", tdb->tableName);
+safef(radioName, sizeof(radioName), "%s.color", tdb->track);
 colorSetting = cartUsualString(cart, radioName, tdbSetting);
 puts("<BR><B>Color: </B><BR> ");
 cgiMakeRadioButton(radioName, "redGreen", sameString(colorSetting, "redGreen"));
 puts("red/green<BR>");
@@ -1059,9 +1059,9 @@
 	     "microarrayGroups.ra", &gHashOfHashes);
 if ((ret == NULL) && (gHashOfHashes == NULL))
     errAbort("Could not get group settings for track.");
 expRatioDrawExonOption(tdb);
-expRatioCombineDropDown(tdb->tableName, groupings, gHashOfHashes);
+expRatioCombineDropDown(tdb->track, groupings, gHashOfHashes);
 expRatioColorOption(tdb);
 }
 
 void expRatioCtUi(struct trackDb *tdb)
@@ -1076,9 +1076,9 @@
 char *affyAllExonMap;
 char *col;
 char varName[128];
 
-safef(varName, sizeof(varName), "%s.%s", tdb->tableName, "type");
+safef(varName, sizeof(varName), "%s.%s", tdb->track, "type");
 affyAllExonMap = cartUsualString(cart, varName, affyAllExonEnumToString(affyAllExonTissue));
 col = cartUsualString(cart, "exprssn.color", "rg");
 printf("<p><b>Experiment Display: </b> ");
 affyAllExonDropDown(varName, affyAllExonMap);
@@ -1142,18 +1142,18 @@
 boolean useGene, useAcc, useSprot, usePos;
 int cMode;
 char *cModes[3] = {"0", "1", "2"};
 
-safef(geneName, sizeof(geneName), "%s.geneLabel", tdb->tableName);
-safef(accName, sizeof(accName), "%s.accLabel", tdb->tableName);
-safef(sprotName, sizeof(sprotName), "%s.sprotLabel", tdb->tableName);
-safef(posName, sizeof(posName), "%s.posLabel", tdb->tableName);
+safef(geneName, sizeof(geneName), "%s.geneLabel", tdb->track);
+safef(accName, sizeof(accName), "%s.accLabel", tdb->track);
+safef(sprotName, sizeof(sprotName), "%s.sprotLabel", tdb->track);
+safef(posName, sizeof(posName), "%s.posLabel", tdb->track);
 useGene= cartUsualBoolean(cart, geneName, TRUE);
 useAcc= cartUsualBoolean(cart, accName, FALSE);
 useSprot= cartUsualBoolean(cart, sprotName, FALSE);
 usePos= cartUsualBoolean(cart, posName, FALSE);
 
-safef(cModeStr, sizeof(cModeStr), "%s.cmode", tdb->tableName);
+safef(cModeStr, sizeof(cModeStr), "%s.cmode", tdb->track);
 cMode = cartUsualInt(cart, cModeStr, 0);
 
 printf("<P><B>Color elements: </B> ");
 cgiMakeRadioButton(cModeStr, cModes[0], cMode == 0);
@@ -1186,17 +1186,17 @@
 boolean useGene, useAcc, usePos;
 int cMode;
 char *cModes[3] = {"0", "1", "2"};
 
-safef(geneName, sizeof(geneName), "%s.geneLabel", tdb->tableName);
-safef(accName, sizeof(accName), "%s.accLabel", tdb->tableName);
-safef(sprotName, sizeof(sprotName), "%s.sprotLabel", tdb->tableName);
-safef(posName, sizeof(posName), "%s.posLabel", tdb->tableName);
+safef(geneName, sizeof(geneName), "%s.geneLabel", tdb->track);
+safef(accName, sizeof(accName), "%s.accLabel", tdb->track);
+safef(sprotName, sizeof(sprotName), "%s.sprotLabel", tdb->track);
+safef(posName, sizeof(posName), "%s.posLabel", tdb->track);
 useGene= cartUsualBoolean(cart, geneName, TRUE);
 useAcc= cartUsualBoolean(cart, accName, FALSE);
 usePos= cartUsualBoolean(cart, posName, FALSE);
 
-safef(cModeStr, sizeof(cModeStr), "%s.cmode", tdb->tableName);
+safef(cModeStr, sizeof(cModeStr), "%s.cmode", tdb->track);
 cMode = cartUsualInt(cart, cModeStr, 0);
 
 printf("<P><B>Color elements: </B> ");
 cgiMakeRadioButton(cModeStr, cModes[0], cMode == 0);
@@ -1226,18 +1226,18 @@
 boolean useGene, useAcc, useSprot, usePos;
 int cMode;
 char *cModes[3] = {"0", "1", "2"};
 
-safef(geneName, sizeof(geneName), "%s.geneLabel", tdb->tableName);
-safef(accName, sizeof(accName), "%s.accLabel", tdb->tableName);
-safef(sprotName, sizeof(sprotName), "%s.sprotLabel", tdb->tableName);
-safef(posName, sizeof(posName), "%s.posLabel", tdb->tableName);
+safef(geneName, sizeof(geneName), "%s.geneLabel", tdb->track);
+safef(accName, sizeof(accName), "%s.accLabel", tdb->track);
+safef(sprotName, sizeof(sprotName), "%s.sprotLabel", tdb->track);
+safef(posName, sizeof(posName), "%s.posLabel", tdb->track);
 useGene= cartUsualBoolean(cart, geneName, TRUE);
 useAcc= cartUsualBoolean(cart, accName, FALSE);
 useSprot= cartUsualBoolean(cart, sprotName, FALSE);
 usePos= cartUsualBoolean(cart, posName, FALSE);
 
-safef(cModeStr, sizeof(cModeStr), "%s.cmode", tdb->tableName);
+safef(cModeStr, sizeof(cModeStr), "%s.cmode", tdb->track);
 cMode = cartUsualInt(cart, cModeStr, 0);
 
 printf("<P><B>Color elements: </B> ");
 cgiMakeRadioButton(cModeStr, cModes[0], cMode == 0);
@@ -1264,9 +1264,9 @@
 /* Put up gene ID track controls */
 {
 char varName[64];
 char *geneLabel;
-safef(varName, sizeof(varName), "%s.label", tdb->tableName);
+safef(varName, sizeof(varName), "%s.label", tdb->track);
 geneLabel = cartUsualString(cart, varName, "gene symbol");
 printf("<B>Label:</B> ");
 radioButton(varName, geneLabel, "gene symbol");
 radioButton(varName, geneLabel, "UCSC Known Gene ID");
@@ -1285,9 +1285,9 @@
 /* Put up gene ID track controls */
 {
 char varName[64];
 char *geneLabel;
-safef(varName, sizeof(varName), "%s.label", tdb->tableName);
+safef(varName, sizeof(varName), "%s.label", tdb->track);
 geneLabel = cartUsualString(cart, varName, "OMIM ID");
 printf("<BR><B>Label:</B> ");
 radioButton(varName, geneLabel, "OMIM ID");
 radioButton(varName, geneLabel, "OMIM gene or syndrome");
@@ -1322,13 +1322,13 @@
 /* Put up line of controls that describe what parts to show. */
 {
 char varName[64];
 printf("<B>Show:</B> ");
-safef(varName, sizeof(varName), "%s.show.noncoding", tdb->tableName);
+safef(varName, sizeof(varName), "%s.show.noncoding", tdb->track);
 boolean option = cartUsualBoolean(cart, varName, TRUE);
 cgiMakeCheckBox(varName, option);
 printf(" %s&nbsp;&nbsp;&nbsp;", "non-coding genes");
-safef(varName, sizeof(varName), "%s.show.spliceVariants", tdb->tableName);
+safef(varName, sizeof(varName), "%s.show.spliceVariants", tdb->track);
 option = cartUsualBoolean(cart, varName, TRUE);
 cgiMakeCheckBox(varName, option);
 printf(" %s&nbsp;&nbsp;&nbsp;", "splice variants");
 printf("<BR>\n");
@@ -1353,9 +1353,9 @@
 /* Put up gene ID track controls */
 {
 char varName[64];
 char *geneLabel;
-safef(varName, sizeof(varName), "%s.label", tdb->tableName);
+safef(varName, sizeof(varName), "%s.label", tdb->track);
 geneLabel = cartUsualString(cart, varName, "gene");
 printf("<B>Label:</B> ");
 radioButton(varName, geneLabel, "gene");
 radioButton(varName, geneLabel, "accession");
@@ -1368,18 +1368,18 @@
 {
 /* Put up option to hide non-coding elements. */
 printf("<B>Hide non-coding genes:</B> ");
 char varName[64];
-safef(varName, sizeof(varName), "%s.%s", tdb->tableName, HIDE_NONCODING_SUFFIX);
+safef(varName, sizeof(varName), "%s.%s", tdb->track, HIDE_NONCODING_SUFFIX);
 cartMakeCheckBox(cart, varName, HIDE_NONCODING_DEFAULT);
 }
 
 void refGeneUI(struct trackDb *tdb)
 /* Put up refGene or xenoRefGene gene ID track controls, with checkboxes */
 {
 /* Figure out if OMIM database is available. */
 int omimAvail = 0;
-if (sameString(tdb->tableName, "refGene"))
+if (sameString(tdb->track, "refGene"))
     {
     struct sqlConnection *conn = hAllocConn(database);
     char query[128];
     safef(query, sizeof(query), "select refLink.omimId from refLink, refGene where refLink.mrnaAcc = refGene.name and refLink.omimId != 0 limit 1");
@@ -1458,9 +1458,9 @@
 
 void mrnaUi(struct trackDb *tdb, boolean isXeno)
 /* Put up UI for an mRNA (or EST) track. */
 {
-struct mrnaUiData *mud = newMrnaUiData(tdb->tableName, isXeno);
+struct mrnaUiData *mud = newMrnaUiData(tdb->track, isXeno);
 struct mrnaFilter *fil;
 struct controlGrid *cg = NULL;
 char *filterTypeVar = mud->filterTypeVar;
 char *filterTypeVal = cartUsualString(cart, filterTypeVar, "red");
@@ -1492,9 +1492,9 @@
 char filterVar[256];
 char *filterVal = "";
 
 printf("<p><b>Filter by chromosome (e.g. chr10):</b> ");
-snprintf(filterVar, sizeof(filterVar), "%s.chromFilter", tdb->tableName);
+snprintf(filterVar, sizeof(filterVar), "%s.chromFilter", tdb->track);
 filterSetting = cartUsualString(cart, filterVar, filterVal);
 cgiMakeTextVar(filterVar, cartUsualString(cart, filterVar, ""), 15);
 }
 
@@ -1507,9 +1507,9 @@
  * overridden by the colorChromDefault setting in the track */
 char *colorDefault = trackDbSettingOrDefault(tdb, "colorChromDefault", "on");
 
 printf("<p><b>Color track based on chromosome:</b> ");
-snprintf(colorVar, sizeof(colorVar), "%s.color", tdb->tableName);
+snprintf(colorVar, sizeof(colorVar), "%s.color", tdb->track);
 colorSetting = cartUsualString(cart, colorVar, colorDefault);
 cgiMakeRadioButton(colorVar, "on", sameString(colorSetting, "on"));
 printf(" on ");
 cgiMakeRadioButton(colorVar, "off", sameString(colorSetting, "off"));
@@ -1566,14 +1566,14 @@
 struct sqlConnection *conn = hAllocConn(database);
 
 char newRow = 0;
 
-snprintf( &options[0][0], 256, "%s.heightPer", tdb->tableName );
-snprintf( &options[1][0], 256, "%s.linear.interp", tdb->tableName );
-snprintf( &options[3][0], 256, "%s.fill", tdb->tableName );
-snprintf( &options[4][0], 256, "%s.min.cutoff", tdb->tableName );
-snprintf( &options[5][0], 256, "%s.max.cutoff", tdb->tableName );
-snprintf( &options[6][0], 256, "%s.interp.gap", tdb->tableName );
+snprintf( &options[0][0], 256, "%s.heightPer", tdb->track );
+snprintf( &options[1][0], 256, "%s.linear.interp", tdb->track );
+snprintf( &options[3][0], 256, "%s.fill", tdb->track );
+snprintf( &options[4][0], 256, "%s.min.cutoff", tdb->track );
+snprintf( &options[5][0], 256, "%s.max.cutoff", tdb->track );
+snprintf( &options[6][0], 256, "%s.interp.gap", tdb->track );
 
 thisHeightPer = atoi(cartUsualString(cart, &options[0][0], "50"));
 interpolate = cartUsualString(cart, &options[1][0], "Linear Interpolation");
 fill = cartUsualString(cart, &options[3][0], "1");
@@ -1602,9 +1602,9 @@
 printf("&nbsp;&nbsp;&nbsp;&nbsp;max:");
 cgiMakeDoubleVar(&options[5][0], thisMaxYRange, 6 );
 
 printf("<p><b>Toggle Species on/off</b><br>" );
-sr = hRangeQuery(conn, tdb->tableName, chromosome, 0, 1877426, NULL, &rowOffset);
+sr = hRangeQuery(conn, tdb->table, chromosome, 0, 1877426, NULL, &rowOffset);
 while ((row = sqlNextRow(sr)) != NULL)
     {
     sample = sampleLoad(row + rowOffset);
     snprintf( option, sizeof(option), "zooSpecies.%s", sample->name );
@@ -1630,9 +1630,9 @@
 
 if (compositeTrack)
     return;	// configuration taken care of by hCompositeUi() later
 else if (normScoreAvailable)
-    chainCfgUi(database, cart, tdb, tdb->tableName, NULL, FALSE, chromosome);
+    chainCfgUi(database, cart, tdb, tdb->track, NULL, FALSE, chromosome);
 else
     crossSpeciesUi(tdb);
 }
 
@@ -1640,9 +1640,9 @@
 /* UI for the wiggle track */
 {
 char varName[chromGraphVarNameMaxSize];
 struct sqlConnection *conn = NULL;
-char *track = tdb->tableName;
+char *track = tdb->track;
 if (!isCustomTrack(track))
     conn = hAllocConn(database);
 double minVal,maxVal;
 struct chromGraphSettings *cgs = chromGraphSettingsGet(track,
@@ -1747,14 +1747,14 @@
 int thisHeightPer, thisLineGap;
 float thisMinYRange, thisMaxYRange;
 char *interpolate, *fill;
 
-snprintf( &options[0][0], 256, "%s.heightPer", tdb->tableName );
-snprintf( &options[1][0], 256, "%s.linear.interp", tdb->tableName );
-snprintf( &options[3][0], 256, "%s.fill", tdb->tableName );
-snprintf( &options[4][0], 256, "%s.min.cutoff", tdb->tableName );
-snprintf( &options[5][0], 256, "%s.max.cutoff", tdb->tableName );
-snprintf( &options[6][0], 256, "%s.interp.gap", tdb->tableName );
+snprintf( &options[0][0], 256, "%s.heightPer", tdb->track );
+snprintf( &options[1][0], 256, "%s.linear.interp", tdb->track );
+snprintf( &options[3][0], 256, "%s.fill", tdb->track );
+snprintf( &options[4][0], 256, "%s.min.cutoff", tdb->track );
+snprintf( &options[5][0], 256, "%s.max.cutoff", tdb->track );
+snprintf( &options[6][0], 256, "%s.interp.gap", tdb->track );
 
 thisHeightPer = atoi(cartUsualString(cart, &options[0][0], "50"));
 interpolate = cartUsualString(cart, &options[1][0], "Linear Interpolation");
 fill = cartUsualString(cart, &options[3][0], "1");
@@ -1799,9 +1799,9 @@
 tnfgVis = hTvFromString(visString);
 printf("<b>Transfrags Display Mode: </b>");
 hTvDropDown("hgt.affyPhase2.tnfg", tnfgVis, TRUE);
 
-wigCfgUi(cart,tdb,tdb->tableName,"<u>Graph Plotting options:</u>",FALSE);
+wigCfgUi(cart,tdb,tdb->track,"<u>Graph Plotting options:</u>",FALSE);
 printf("<p><b><u>View/Hide individual cell lines:</u></b>");
 }
 
 void humMusUi(struct trackDb *tdb, int optionNum )
@@ -1812,14 +1812,14 @@
 int thisHeightPer, thisLineGap;
 float thisMinYRange, thisMaxYRange;
 char *interpolate, *fill;
 
-snprintf( &options[0][0], 256, "%s.heightPer", tdb->tableName );
-snprintf( &options[1][0], 256, "%s.linear.interp", tdb->tableName );
-snprintf( &options[3][0], 256, "%s.fill", tdb->tableName );
-snprintf( &options[4][0], 256, "%s.min.cutoff", tdb->tableName );
-snprintf( &options[5][0], 256, "%s.max.cutoff", tdb->tableName );
-snprintf( &options[6][0], 256, "%s.interp.gap", tdb->tableName );
+snprintf( &options[0][0], 256, "%s.heightPer", tdb->track );
+snprintf( &options[1][0], 256, "%s.linear.interp", tdb->track );
+snprintf( &options[3][0], 256, "%s.fill", tdb->track );
+snprintf( &options[4][0], 256, "%s.min.cutoff", tdb->track );
+snprintf( &options[5][0], 256, "%s.max.cutoff", tdb->track );
+snprintf( &options[6][0], 256, "%s.interp.gap", tdb->track );
 
 thisHeightPer = atoi(cartUsualString(cart, &options[0][0], "50"));
 interpolate = cartUsualString(cart, &options[1][0], "Linear Interpolation");
 fill = cartUsualString(cart, &options[3][0], "1");
@@ -1978,9 +1978,9 @@
 char cartVar[128];
 for (i = 0;  i < popCount;  i++)
     {
     char table[HDB_MAX_TABLE_STRING];
-    if (endsWith(tdb->tableName, "PhaseII"))
+    if (endsWith(tdb->track, "PhaseII"))
 	safef(table, sizeof(table), "hapmapSnps%sPhaseII", pops[i]);
     else
 	safef(table, sizeof(table), "hapmapSnps%s", pops[i]);
     if (sqlTableExists(conn, table))
@@ -2100,19 +2100,19 @@
 struct sqlResult *sr;
 char **row;
 char query[256];
 safef(query, sizeof(query),
-      "select reference,pubMedId from %s group by pubMedId order by reference;", tdb->tableName);
+      "select reference,pubMedId from %s group by pubMedId order by reference;", tdb->table);
 sr = sqlGetResult(conn, query);
 printf("<BR><B>Filter by publication reference:</B>\n");
 char cartVarName[256];
-safef (cartVarName, sizeof(cartVarName), "hgt_%s_filterType", tdb->tableName);
+safef (cartVarName, sizeof(cartVarName), "hgt_%s_filterType", tdb->track);
 boolean isInclude = sameString("include", cartUsualString(cart, cartVarName, "include"));
 cgiMakeRadioButton(cartVarName, "include", isInclude);
 printf("include\n");
 cgiMakeRadioButton(cartVarName, "exclude", !isInclude);
 printf("exclude<BR>\n");
-safef (cartVarName, sizeof(cartVarName), "hgt_%s_filterPmId", tdb->tableName);
+safef (cartVarName, sizeof(cartVarName), "hgt_%s_filterPmId", tdb->track);
 struct slName *checked = cartOptionalSlNameList(cart, cartVarName);
 boolean setAll = (checked == NULL && isInclude);
 #define MAX_DGV_REFS 128
 char *labelArr[MAX_DGV_REFS], *valueArr[MAX_DGV_REFS];
@@ -2127,9 +2127,9 @@
 	  "&list_uids=%s&dopt=Abstract&tool=genome.ucsc.edu\" TARGET=_BLANK>%s</A>", pmId, ref);
     labelArr[refCount] = cloneString(label);
     valueArr[refCount++] = cloneString(pmId);
     if (refCount >= MAX_DGV_REFS)
-	errAbort("dgvUi: %s has too many references (max %d)", tdb->tableName, MAX_DGV_REFS);
+	errAbort("dgvUi: %s has too many references (max %d)", tdb->track, MAX_DGV_REFS);
     if (setAll)
 	slAddHead(&checked, slNameNew(pmId));
     }
 sqlFreeResult(&sr);
@@ -2145,21 +2145,21 @@
 struct trackDb *tdb;
 printf("<P><TABLE CELLPADDING=2>");
 for (tdb = superTdb->subtracks; tdb != NULL; tdb = tdb->next)
     {
-    if (!hTableOrSplitExists(database, tdb->tableName) && tdb->subtracks != NULL &&
+    if (!hTableOrSplitExists(database, tdb->table) && tdb->subtracks != NULL &&
     	trackDbLocalSetting(tdb, "compositeTrack") == NULL) 
 	// NOTE: tdb if composite, is not yet populated with it's own subtracks!
         continue;
     printf("<TR>");
     printf("<TD NOWRAP><A HREF=\"%s?%s=%u&c=%s&g=%s\">%s</A>&nbsp;</TD>",
                 hgTrackUiName(), cartSessionVarName(), cartSessionId(cart),
-                chromosome, cgiEncode(tdb->tableName), tdb->shortLabel);
+                chromosome, cgiEncode(tdb->track), tdb->shortLabel);
     printf("<TD>");
     enum trackVisibility tv =
-                    hTvFromString(cartUsualString(cart, tdb->tableName,
+                    hTvFromString(cartUsualString(cart, tdb->track,
                                             hStringFromTv(tdb->visibility)));
-    hTvDropDownClassVisOnly(tdb->tableName, tv, tdb->canPack,
+    hTvDropDownClassVisOnly(tdb->track, tv, tdb->canPack,
                             tv == tvHide ?  "hiddenText" : "normalText",
                             trackDbSetting(tdb, "onlyVisibility"));
     printf("<TD>%s", tdb->longLabel);
     char *dataVersion = trackDbSetting(tdb, "dataVersion");
@@ -2172,9 +2172,10 @@
 
 void specificUi(struct trackDb *tdb, struct customTrack *ct)
 	/* Draw track specific parts of UI. */
 {
-char *track = tdb->tableName;
+char *track = tdb->track;
+
 
 if (sameString(track, "stsMap"))
         stsMapUi(tdb);
 else if (sameString(track, "affyTxnPhase2"))
@@ -2260,15 +2261,15 @@
         blastUi(tdb);
 else if (sameString(track, "hgPcrResult"))
     pcrResultUi(tdb);
 else if (startsWith("bedGraph", tdb->type) || startsWith("bigWig", tdb->type))
-    wigCfgUi(cart,tdb,tdb->tableName,NULL, FALSE);
+    wigCfgUi(cart,tdb,tdb->track,NULL, FALSE);
 else if (startsWith("wig", tdb->type))
         {
         if (startsWith("wigMaf", tdb->type))
-            wigMafCfgUi(cart, tdb, tdb->tableName, NULL, FALSE, database);
+            wigMafCfgUi(cart, tdb, tdb->track, NULL, FALSE, database);
         else
-            wigCfgUi(cart,tdb,tdb->tableName, NULL, FALSE);
+            wigCfgUi(cart,tdb,tdb->track, NULL, FALSE);
         }
 else if (startsWith("chromGraph", tdb->type))
         chromGraphUi(tdb);
 /* else if (sameString(track, "affyHumanExon")) */
@@ -2289,9 +2290,9 @@
  * For crossSpeciesUi, the
  * default for chrom coloring is "on", unless track setting
  * colorChromDefault is set to "off" */
 else if (startsWith("net", track))
-    netAlignCfgUi(database, cart, tdb, tdb->tableName, NULL, FALSE);
+    netAlignCfgUi(database, cart, tdb, tdb->track, NULL, FALSE);
 else if (startsWith("chain", track) || endsWith("chainSelf", track))
     chainColorUi(tdb);
 else if (sameString(track, "orthoTop4"))
     /* still used ?? */
@@ -2345,9 +2346,9 @@
     if (wordCount > 0)
         {
 	    if (sameWord(words[0], "genePred"))
             {
-            genePredCfgUi(cart,tdb,tdb->tableName,NULL,FALSE);
+            genePredCfgUi(cart,tdb,tdb->track,NULL,FALSE);
             }
         else if(sameWord(words[0], "encodePeak") || sameWord(words[0], "narrowPeak")
              || sameWord(words[0], "broadPeak")  || sameWord(words[0], "gappedPeak"))
 	       {
@@ -2376,16 +2377,16 @@
             &&  !sameString(track, "jaxQTL3") && !sameString(track, "wgRna")
             &&  !startsWith("encodeGencodeIntron", track))
                 {
                 if (trackDbSetting(tdb, "scoreFilterMax"))
-                    scoreCfgUi(database, cart,tdb,tdb->tableName,NULL,
+                    scoreCfgUi(database, cart,tdb,tdb->track,NULL,
                         sqlUnsigned(trackDbSetting(tdb, "scoreFilterMax")),FALSE);
                 else
-                    scoreCfgUi(database, cart,tdb,tdb->tableName,NULL,1000,FALSE);
+                    scoreCfgUi(database, cart,tdb,tdb->track,NULL,1000,FALSE);
                 }
             }
         else if (sameWord(words[0], "bed5FloatScore") || sameWord(words[0], "bed5FloatScoreWithFdr"))
-            scoreCfgUi(database, cart,tdb,tdb->tableName,NULL,1000,FALSE);
+            scoreCfgUi(database, cart,tdb,tdb->track,NULL,1000,FALSE);
         else if (sameWord(words[0], "psl"))
             {
             if (wordCount == 3)
             if (sameWord(words[1], "xeno"))
@@ -2396,10 +2397,12 @@
         }
         freeMem(typeLine);
     }
 if (tdbIsSuperTrack(tdb))
+    {
     superTrackUi(tdb);
-else if (tdb->subtracks);
+    }
+else if (tdb->subtracks)
 // else if (tdbIsComposite(tdb))  for the moment generalizing this to include other containers...
     {
     hCompositeUi(database, cart, tdb, NULL, NULL, MAIN_FORM);
     }
@@ -2416,12 +2419,12 @@
 char setting[128];
 
 // NOTE: Currently only composite multi-view tracks because
 // reset relies upon all cart vars following naming convention:
-//   {tableName}.{varName}...  ( One exception supported: {tableName}_sel ).
+//   {track}.{varName}...  ( One exception supported: {track}_sel ).
 if(tdbIsComposite(tdb))
     {
-    safef(setting,sizeof(setting),"%s.%s",tdb->tableName,RESET_TO_DEFAULTS);
+    safef(setting,sizeof(setting),"%s.%s",tdb->track,RESET_TO_DEFAULTS);
     // NOTE: if you want track vis to not be reset, move to after vis dropdown
     if(1 == cartUsualInt(cart, setting, 0))
         cartRemoveAllForTdbAndChildren(cart,tdb);
     }
@@ -2434,9 +2437,9 @@
 /* Print link for parent track */
 struct trackDb *parentTdb = tdb->parent;
 if (parentTdb)
     {
-    char *encodedMapName = cgiEncode(parentTdb->tableName);
+    char *encodedMapName = cgiEncode(parentTdb->track);
     printf("<H3>Parent track: <A HREF=\"%s?%s=%u&c=%s&g=%s\">%s</A></H3>",
 		hgTrackUiName(), cartSessionVarName(), cartSessionId(cart),
 		chromosome, encodedMapName, parentTdb->shortLabel);
     freeMem(encodedMapName);
@@ -2459,10 +2462,10 @@
 else
     {
     /* normal visibility control dropdown */
     char *vis = hStringFromTv(tdb->visibility);
-    hTvDropDownClassVisOnly(tdb->tableName,
-        hTvFromString(cartUsualString(cart,tdb->tableName, vis)),
+    hTvDropDownClassVisOnly(tdb->track,
+        hTvFromString(cartUsualString(cart,tdb->track, vis)),
         tdb->canPack, "normalText", trackDbSetting(tdb, "onlyVisibility"));
     }
 printf("&nbsp;");
 cgiMakeButton("Submit", "Submit");
@@ -2473,9 +2476,9 @@
 if (ct)
     {
     puts("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
     cgiMakeButton(CT_DO_REMOVE_VAR, "Remove custom track");
-    cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, tdb->tableName);
+    cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, tdb->track);
     puts("&nbsp;");
     if (differentString(tdb->type, "chromGraph"))
         cgiMakeOnClickButton("document.customTrackForm.submit();return false;",
                                 "Update custom track");
@@ -2489,9 +2492,9 @@
     {
     /* hidden form for custom tracks CGI */
     printf("<FORM ACTION='%s' NAME='customTrackForm'>", hgCustomName());
     cartSaveSession(cart);
-    cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, tdb->tableName);
+    cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, tdb->track);
     puts("</FORM>\n");
     }
 else
     {
@@ -2502,12 +2505,12 @@
 
    /* Print lift information from trackDb, if any */
    trackDbPrintOrigAssembly(tdb, database);
 
-   if (hTableOrSplitExists(database, tdb->tableName))
+   if (hTableOrSplitExists(database, tdb->table))
         {
         /* Print update time of the table (or one of the components if split) */
-        char *tableName = hTableForTrack(database, tdb->tableName);
+        char *tableName = hTableForTrack(database, tdb->table);
 	struct sqlConnection *conn = hAllocConnProfile(getTrackProfileName(tdb), database);
 
 	char *date = firstWordInLine(sqlTableUpdate(conn, tableName));
 	if (date != NULL && !startsWith("wigMaf", tdb->type))
@@ -2528,9 +2531,10 @@
 {
 struct trackDb *tdb;
 
 AllocVar(tdb);
-tdb->tableName = tableName;
+tdb->track = tableName;
+tdb->table = tableName;
 tdb->shortLabel = shortLabel;
 tdb->longLabel = longLabel;
 tdb->visibility = defaultVis;
 tdb->priority = 1.0;
@@ -2589,9 +2593,9 @@
     {
     ctList = customTracksParseCart(database, cart, NULL, NULL);
     for (ct = ctList; ct != NULL; ct = ct->next)
         {
-        if (sameString(track, ct->tdb->tableName))
+        if (sameString(track, ct->tdb->track))
             {
             tdb = ct->tdb;
             break;
             }