%s
\n",snpLocTypeLabels[snpLocType]);
}
}
void ldUi(struct trackDb *tdb)
/* Put up UI snp data. */
{
char var[512];
char *val;
/* It would be nice to add a 'reset' button to reset the ld variables to their defaults. */
printf("
LD Values:
\n");
safef(var, sizeof(var), "%s_val", tdb->track);
val = cartUsualString(cart, var, ldValDefault);
cgiMakeRadioButton(var, "rsquared", sameString("rsquared", val));
printf(" r2 ");
cgiMakeRadioButton(var, "dprime", sameString("dprime", val));
printf(" D' ");
cgiMakeRadioButton(var, "lod", sameString("lod", val));
printf(" LOD
");
printf("
Track Geometry:
\n");
safef(var, sizeof(var), "%s_trm", tdb->track);
cgiMakeCheckBox(var, cartUsualBoolean(cart, var, ldTrmDefault));
printf(" Trim to triangle
\n");
if (tdbIsComposite(tdb))
{
printf("
");
struct slRef *tdbRefList = trackDbListGetRefsToDescendantLeaves(tdb->subtracks);
slSort(tdbRefList, trackDbRefCmp);
struct slRef *tdbRef;
for (tdbRef = tdbRefList; tdbRef != NULL; tdbRef = tdbRef->next)
{
struct trackDb *subTdb = tdbRef->val;
if (hTableExists(database, subTdb->table))
{
safef(var, sizeof(var), "%s_inv", subTdb->track);
cgiMakeCheckBox(var, cartUsualBoolean(cart, var, ldInvDefault));
printf(" Invert display for %s
\n",
subTdb->longLabel);
}
}
slFreeList(&tdbRefList);
}
else
{
safef(var, sizeof(var), "%s_inv", tdb->track);
printf(" ");
cgiMakeCheckBox(var, cartUsualBoolean(cart, var, ldInvDefault));
printf(" Invert the display
\n");
}
printf("
Colors:\n");
safef(var, sizeof(var), "%s_pos", tdb->track);
val = cartUsualString(cart, var, ldPosDefault);
printf("\n ");
printf("\n LD values | \n - ");
radioButton(var, val, "red");
printf(" | \n ");
radioButton(var, val, "green");
printf(" | \n ");
radioButton(var, val, "blue");
printf(" | \n
\n ");
safef(var, sizeof(var), "%s_out", tdb->track);
val = cartUsualString(cart, var, ldOutDefault);
printf("\n Outlines | \n - ");
radioButton(var, val, "red");
printf(" | \n ");
radioButton(var, val, "green");
printf(" | \n ");
radioButton(var, val, "blue");
printf(" | \n ");
radioButton(var, val, "yellow");
printf(" | \n ");
radioButton(var, val, "black");
printf(" | \n ");
radioButton(var, val, "white");
printf(" | \n ");
radioButton(var, val, "none");
printf(" | \n
\n ");
printf("
\n");
if (tdb->type && sameString(tdb->type, "ld2"))
{
safef(var, sizeof(var), "%s_gap", tdb->track);
printf(" ");
cgiMakeCheckBox(var, cartUsualBoolean(cart, var, ldGapDefault));
printf(" In dense mode, shade gaps between markers by T-int
\n");
}
if (tdbIsComposite(tdb))
printf("
Populations:\n");
}
void oregannoUi (struct trackDb *tdb)
/* print the controls */
{
int i = 0; /* variable to walk through array */
printf("
Type of region to display: ");
printf(" (Click here for detailed information on these element types)
");
for (i = 0; i < oregannoTypeSize; i++)
{
cartMakeCheckBox(cart, oregannoTypeString[i], TRUE);
printf (" %s
", oregannoTypeLabel[i]);
}
}
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->track, sym);
boolean option = cartUsualBoolean(cart, varName, dflt);
cgiMakeCheckBox(varName, option);
printf(" %s ", desc);
}
void gvIdControls (struct trackDb *tdb)
/* print the controls for the label choice */
{
printf("Label: ");
labelMakeCheckBox(tdb, "hgvs", "HGVS name", FALSE);
labelMakeCheckBox(tdb, "common", "Common name", FALSE);
printf("
\n");
}
void gvUi(struct trackDb *tdb)
/* print UI for human mutation filters */
{
int i = 0; /* variable to walk through arrays */
//char *def;
gvIdControls(tdb);
/*
printf("
Exclude data source
");
for (i = 0; i < gvSrcSize; i++)
{
if (differentString(gvSrcDbValue[i], "LSDB"))
{
if (sameString(gvSrcDbValue[i], "UniProt (Swiss-Prot/TrEMBL)"))
{
// exclude Swiss-Prot data by default, can be misleading
cartMakeCheckBox(cart, gvSrcString[i], TRUE);
}
else
{
cartMakeCheckBox(cart, gvSrcString[i], FALSE);
}
printf (" %s
", gvSrcDbValue[i]); // label with db value
}
else
{
cartMakeCheckBox(cart, gvSrcString[i], FALSE);
printf (" Locus Specific Databases
");
}
}
*/
printf("
Exclude
");
for (i = 0; i < gvAccuracySize; i++)
{
cartMakeCheckBox(cart, gvAccuracyString[i], FALSE);
printf (" %s
", gvAccuracyLabel[i]);
}
printf("
Exclude mutation type
");
for (i = 0; i < gvTypeSize; i++)
{
cartMakeCheckBox(cart, gvTypeString[i], FALSE);
printf (" %s
", gvTypeLabel[i]);
}
printf("
Exclude mutation location
");
for (i = 0; i < gvLocationSize; i++)
{
cartMakeCheckBox(cart, gvLocationString[i], FALSE);
printf (" %s
", gvLocationLabel[i]);
}
/*
printf("
Exclude phenotype association
");
for (i = 0; i < gvFilterDASize; i++)
{
cartMakeCheckBox(cart, gvFilterDAString[i], FALSE);
printf (" %s
", gvFilterDALabel[i]);
}
*/
printf("
");
cartMakeRadioButton(cart, "gvPos.filter.colorby", "type", "type");
printf("Color mutations by type
");
for (i = 0; i < gvColorTypeSize; i++)
{
char *defaultVal = cartUsualString(cart, gvColorTypeStrings[i], gvColorTypeDefault[i]);
printf (" %s ", gvColorTypeLabels[i]);
cgiMakeDropList(gvColorTypeStrings[i], gvColorLabels, gvColorLabelSize, defaultVal);
}
printf("
");
/*
cartMakeRadioButton(cart, "gvPos.filter.colorby", "disease", "type");
printf("Color mutations by phenotype association (determination is described below)
");
for (i = 0; i < gvColorDASize; i++)
{
char *defaultVal = cartUsualString(cart, gvColorDAStrings[i], gvColorDADefault[i]);
printf (" %s ", gvColorDALabels[i]);
cgiMakeDropList(gvColorDAStrings[i], gvColorLabels, gvColorLabelSize, defaultVal);
}
printf("
");
*/
/* only on development page for now, but need to check in other changes */
/*
if (startsWith("hgwdev-giardine", cgiServerName()))
{
cartMakeRadioButton(cart, "gvPos.filter.colorby", "count", "type");
printf("Color mutations by count of positions associated with a mutation
");
def = cartUsualString(cart, "gvColorCountSingle", "blue");
printf (" Single position ");
cgiMakeDropList("gvColorCountSingle", gvColorLabels, gvColorLabelSize, def);
def = cartUsualString(cart, "gvColorCountMult", "green");
printf (" Multiple positions ");
cgiMakeDropList("gvColorCountMult", gvColorLabels, gvColorLabelSize, def);
printf("
");
}
*/
}
void retroposonsUi(struct trackDb *tdb)
{
struct sqlConnection *conn = hAllocConn(database);
char query[256];
char **row;
struct sqlResult *sr;
struct slName *sList = NULL, *item;
int menuSize = 0;
char **menu;
int i;
char *tableList[3];
i = 0;
tableList[i++] = "dbRIPAlu";
tableList[i++] = "dbRIPL1";
tableList[i++] = "dbRIPSVA";
safef(query, sizeof(query),
"SELECT genoRegion FROM dbRIPAlu GROUP BY genoRegion ORDER BY genoRegion DESC");
sr = sqlGetResult(conn, query);
while ((row = sqlNextRow(sr)) != NULL)
{
slNameAddHead(&sList, row[0]);
}
sqlFreeResult(&sr);
menuSize = slCount(sList) + 1;
menu = needMem((size_t)(menuSize * sizeof(char *)));
i = 0;
menu[i++] = GENO_REGION_DEFAULT;
for (item = sList; item != NULL; item = item->next)
menu[i++] = item->name;
puts("Add filters:
\n" );
puts("Gene Context: " );
cgiMakeDropList(GENO_REGION, menu, menuSize,
cartCgiUsualString(cart, GENO_REGION, menu[0]));
slFreeList(&sList);
freez(&menu);
menuSize = 3;
menu = needMem((size_t)(menuSize * sizeof(char *)));
i = 0;
menu[i++] = POLY_SOURCE_DEFAULT;
menu[i++] = "yes";
menu[i++] = "no";
puts("
\nInsertion found in reference sequence: ");
cgiMakeDropList(POLY_SOURCE, menu, menuSize,
cartCgiUsualString(cart, POLY_SOURCE, menu[0]));
freez(&menu);
for (i = 0; i < 3; ++i)
{
safef(query, sizeof(query),
"SELECT polySubfamily FROM %s GROUP BY polySubfamily ORDER BY polySubfamily DESC", tableList[i]);
sr = sqlGetResult(conn, query);
while ((row = sqlNextRow(sr)) != NULL)
{
slNameStore(&sList, row[0]);
}
sqlFreeResult(&sr);
}
slNameSortCase(&sList);
menuSize = slCount(sList) + 1;
menu = needMem((size_t)(menuSize * sizeof(char *)));
i = 0;
menu[i++] = POLY_SUBFAMILY_DEFAULT;
for (item = sList; item != NULL; item = item->next)
menu[i++] = item->name;
puts("
\nInsertion identified in sub-family: ");
cgiMakeDropList(POLY_SUBFAMILY, menu, menuSize,
cartCgiUsualString(cart, POLY_SUBFAMILY, menu[0]));
slFreeList(&sList);
freez(&menu);
safef(query, sizeof(query),
"SELECT ethnicGroup FROM polyGenotype GROUP BY ethnicGroup ORDER BY ethnicGroup DESC");
sr = sqlGetResult(conn, query);
while ((row = sqlNextRow(sr)) != NULL)
{
slNameStore(&sList, row[0]);
}
sqlFreeResult(&sr);
menuSize = slCount(sList) + 1;
menu = needMem((size_t)(menuSize * sizeof(char *)));
i = 0;
menu[i++] = ETHNIC_GROUP_DEFAULT;
for (item = sList; item != NULL; item = item->next)
menu[i++] = item->name;
puts("
\nEthnic group: ");
cgiMakeDropList(ETHNIC_GROUP, menu, menuSize,
cartCgiUsualString(cart, ETHNIC_GROUP, menu[0]));
slFreeList(&sList);
freez(&menu);
puts(" ");
radioButton(ETHNIC_GROUP_EXCINC,
cartUsualString(cart, ETHNIC_GROUP_EXCINC, ETHNIC_NOT_DEFAULT),
"include");
radioButton(ETHNIC_GROUP_EXCINC,
cartUsualString(cart, ETHNIC_GROUP_EXCINC, ETHNIC_NOT_DEFAULT),
"exclude");
puts("this ethnic group
\n");
#ifdef HAS_NO_MEANING
menuSize = 10;
menu = needMem((size_t)(menuSize * sizeof(char *)));
i = 0;
menu[i++] = "0.0"; menu[i++] = "0.1"; menu[i++] = "0.2"; menu[i++] = "0.3";
menu[i++] = "0.4"; menu[i++] = "0.5"; menu[i++] = "0.6"; menu[i++] = "0.7";
menu[i++] = "0.8"; menu[i++] = "0.9";
/* safety check on bad user input, they may have set them illegally
* in which case reset them to defaults 0.0 <= f <= 1.0
*/
double freqLow = sqlFloat(cartCgiUsualString(cart, ALLELE_FREQ_LOW, menu[0]));
double freqHi = sqlFloat(cartCgiUsualString(cart, ALLELE_FREQ_HI, menu[9]));
puts("
\nRestrict polymorphism frequency to: ");
if (freqLow < freqHi)
cgiMakeDropList(ALLELE_FREQ_LOW, menu, menuSize,
cartCgiUsualString(cart, ALLELE_FREQ_LOW, menu[0]));
else
cgiMakeDropList(ALLELE_FREQ_LOW, menu, menuSize, menu[0]);
i = 0;
menu[i++] = "0.1"; menu[i++] = "0.2"; menu[i++] = "0.3"; menu[i++] = "0.4";
menu[i++] = "0.5"; menu[i++] = "0.6"; menu[i++] = "0.7"; menu[i++] = "0.8";
menu[i++] = "0.9"; menu[i++] = "1.0";
puts(" <= f <= ");
if (freqLow < freqHi)
cgiMakeDropList(ALLELE_FREQ_HI, menu, menuSize,
cartCgiUsualString(cart, ALLELE_FREQ_HI, menu[9]));
else
cgiMakeDropList(ALLELE_FREQ_HI, menu, menuSize, menu[9]);
freez(&menu);
#endif /* HAS_NO_MEANING */
menuSize = 3;
menu = needMem((size_t)(menuSize * sizeof(char *)));
i = 0;
menu[i++] = DISEASE_DEFAULT;
menu[i++] = "yes";
menu[i++] = "no";
puts("
\nAssociated disease state known: ");
cgiMakeDropList(dbRIP_DISEASE, menu, menuSize,
cartCgiUsualString(cart, dbRIP_DISEASE, menu[0]));
freez(&menu);
puts("\n
\n");
hFreeConn(&conn);
}
void cbrWabaUi(struct trackDb *tdb)
/* Put up UI cbrWaba. */
{
/* This link is disabled in the external browser
char *cbrWabaFilter = cartUsualString(cart, "cbrWaba.filter", "red");
char *cbrWabaMap = cartUsualString(cart, "cbrWaba.type", fcoeEnumToString(0));
int start = cartInt(cart, "cbrWaba.start");
int end = cartInt(cart, "cbrWaba.end");
printf(
" Temporary Intronerator link: %s:%d-%d for testing purposes only \n
", chromosome+3, start, end, chromosome+3, start, end );
*/
}
void fishClonesUi(struct trackDb *tdb)
/* Put up UI fishClones. */
{
char *fishClonesFilter = cartUsualString(cart, "fishClones.filter", "red");
char *fishClonesMap = cartUsualString(cart, "fishClones.type", fcoeEnumToString(0));
filterButtons("fishClones.filter", fishClonesFilter, TRUE);
printf(" ");
fcoeDropDown("fishClones.type", fishClonesMap);
}
void recombRateUi(struct trackDb *tdb)
/* Put up UI recombRate. */
{
char *recombRateMap = cartUsualString(cart, "recombRate.type", rroeEnumToString(0));
printf("Map Distances: ");
rroeDropDown("recombRate.type", recombRateMap);
}
void recombRateRatUi(struct trackDb *tdb)
/* Put up UI recombRateRat. */
{
char *recombRateRatMap = cartUsualString(cart, "recombRateRat.type", rrroeEnumToString(0));
printf("Map Distances: ");
rrroeDropDown("recombRateRat.type", recombRateRatMap);
}
void recombRateMouseUi(struct trackDb *tdb)
/* Put up UI recombRateMouse. */
{
char *recombRateMouseMap = cartUsualString(cart, "recombRateMouse.type", rrmoeEnumToString(0));
printf("Map Distances: ");
rrmoeDropDown("recombRateMouse.type", recombRateMouseMap);
}
void cghNci60Ui(struct trackDb *tdb)
/* Put up UI cghNci60. */
{
char *cghNci60Map = cartUsualString(cart, "cghNci60.type", cghoeEnumToString(0));
char *col = cartUsualString(cart, "cghNci60.color", "gr");
printf(" Cell Lines: ");
cghoeDropDown("cghNci60.type", cghNci60Map);
printf(" ");
printf(" Color Scheme: ");
cgiMakeRadioButton("cghNci60.color", "gr", sameString(col, "gr"));
printf(" green/red ");
cgiMakeRadioButton("cghNci60.color", "rg", sameString(col, "rg"));
printf(" red/green ");
cgiMakeRadioButton("cghNci60.color", "rb", sameString(col, "rb"));
printf(" red/blue ");
}
void affyUi(struct trackDb *tdb)
/* put up UI for the affy track from stanford track */
{
char *affyMap;
char *col;
char varName[128];
safef(varName, sizeof(varName), "%s.%s", tdb->track, "type");
affyMap = cartUsualString(cart, varName, affyEnumToString(affyTissue));
col = cartUsualString(cart, "exprssn.color", "rg");
printf("Experiment Display: ");
affyDropDown(varName, affyMap);
printf(" Color Scheme: ");
cgiMakeRadioButton("exprssn.color", "rg", sameString(col, "rg"));
printf(" red/green ");
cgiMakeRadioButton("exprssn.color", "rb", sameString(col, "rb"));
printf(" red/blue ");
}
void expRatioCombineDropDown(struct trackDb *tdb, struct microarrayGroups *groups)
/* Make a drop-down of all the main combinations. */
{
struct maGrouping *comb;
int size = 0;
int i;
char **menuArray;
char **valArray;
char *dropDownName = expRatioCombineDLName(tdb->track);
char *defaultSelection = NULL;
char *cartSetting = NULL;
if (!groups->allArrays)
errAbort("The \'all\' stanza must be set in the microarrayGroup settings for track %s", tdb->track);
if (groups->defaultCombine)
defaultSelection = groups->defaultCombine->name;
else
defaultSelection = groups->allArrays->name;
size = groups->numCombinations + 1;
AllocArray(menuArray, size);
AllocArray(valArray, size);
menuArray[0] = groups->allArrays->description;
valArray[0] = groups->allArrays->name;
for (i = 1, comb = groups->combineSettings; (i < size) && (comb != NULL); i++, comb = comb->next)
{
menuArray[i] = cloneString(comb->description);
valArray[i] = cloneString(comb->name);
}
cartSetting = cartUsualString(cart, dropDownName, defaultSelection);
printf(" Combine arrays: ");
cgiMakeDropListWithVals(dropDownName, menuArray, valArray,
size, cartSetting);
}
void expRatioDrawExonOption(struct trackDb *tdb)
/* Add option to show exons if possible. */
{
char checkBoxName[512];
char *drawExons = trackDbSetting(tdb, "expDrawExons");
boolean checked = FALSE;
if (!drawExons || differentWord(drawExons, "on"))
return;
safef(checkBoxName, sizeof(checkBoxName), "%s.expDrawExons", tdb->track);
checked = cartCgiUsualBoolean(cart, checkBoxName, FALSE);
puts("Draw intron lines/arrows and exons: ");
cgiMakeCheckBox(checkBoxName, checked);
puts("
\n");
}
void expRatioColorOption(struct trackDb *tdb)
/* Radio button for red/green or blue/yellow */
{
char radioName[256];
char *colorSetting = NULL;
char *tdbSetting = trackDbSettingOrDefault(tdb, "expColor", "redGreen");
safef(radioName, sizeof(radioName), "%s.color", tdb->track);
colorSetting = cartUsualString(cart, radioName, tdbSetting);
puts("
Color:
");
cgiMakeRadioButton(radioName, "redGreen", sameString(colorSetting, "redGreen"));
puts("red/green
");
cgiMakeRadioButton(radioName, "redBlue", sameString(colorSetting, "redBlue"));
puts("red/blue
");
cgiMakeRadioButton(radioName, "yellowBlue", sameString(colorSetting, "yellowBlue"));
puts("yellow/blue
\n");
cgiMakeRadioButton(radioName, "redBlueOnWhite", sameString(colorSetting, "redBlueOnWhite"));
puts("red/blue on white background
");
cgiMakeRadioButton(radioName, "redBlueOnYellow", sameString(colorSetting, "redBlueOnYellow"));
puts("red/blue on yellow background
");
}
void expRatioSubsetDropDown(struct maGrouping *ss, char *varName, char *offset)
/* because setting up the droplist is a bit involved... this is just called */
/* from expRatioSubsetOptions() */
{
char **menu;
char **values;
int i;
AllocArray(menu, ss->numGroups);
AllocArray(values, ss->numGroups);
for (i = 0; i < ss->numGroups; i++)
{
char num[4];
safef(num, sizeof(num), "%d", i);
menu[i] = cloneString(ss->names[i]);
values[i] = cloneString(num);
}
cgiMakeDropListWithVals(varName, menu, values, ss->numGroups, offset);
}
void expRatioSubsetOptions(struct trackDb *tdb, struct microarrayGroups *groups)
/* subsetting options for a microarray track */
{
char *radioVarName = expRatioSubsetRadioName(tdb->track, groups);
char *subSetting = NULL;
struct maGrouping *subsets = groups->subsetSettings;
struct maGrouping *ss;
subSetting = cartUsualString(cart, radioVarName, NULL);
puts("
Subset:
");
cgiMakeRadioButton(radioVarName, "none", (subSetting == NULL) || sameString(subSetting, "none"));
puts("no subset
\n");
for (ss = subsets; ss != NULL; ss = ss->next)
{
char *dropVarName = expRatioSubsetDLName(tdb->track, ss);
char *offS = NULL;
offS = cartUsualString(cart, dropVarName, "-1");
cgiMakeRadioButton(radioVarName, ss->name, (subSetting) && sameString(ss->name, subSetting));
printf("%s \n", ss->description);
expRatioSubsetDropDown(ss, dropVarName, offS);
printf("
\n");
}
}
void expRatioUi(struct trackDb *tdb)
/* UI options for the expRatio tracks. */
{
struct microarrayGroups *groups = maGetTrackGroupings(database, tdb);
if (groups == NULL)
errAbort("Could not get group settings for track.");
expRatioDrawExonOption(tdb);
if (groups->numCombinations > 0)
expRatioCombineDropDown(tdb, groups);
if (groups->numSubsets > 0)
expRatioSubsetOptions(tdb, groups);
expRatioColorOption(tdb);
}
void expRatioCtUi(struct trackDb *tdb)
/* UI options for array custom tracks. */
{
expRatioColorOption(tdb);
}
void affyAllExonUi(struct trackDb *tdb)
/* put up UI for the affy all exon tracks. */
{
char *affyAllExonMap;
char *col;
char varName[128];
safef(varName, sizeof(varName), "%s.%s", tdb->track, "type");
affyAllExonMap = cartUsualString(cart, varName, affyAllExonEnumToString(affyAllExonTissue));
col = cartUsualString(cart, "exprssn.color", "rg");
printf("
Experiment Display: ");
affyAllExonDropDown(varName, affyAllExonMap);
printf(" Color Scheme: ");
cgiMakeRadioButton("exprssn.color", "rg", sameString(col, "rg"));
printf(" red/green ");
cgiMakeRadioButton("exprssn.color", "rb", sameString(col, "rb"));
printf(" red/blue ");
}
void rosettaUi(struct trackDb *tdb)
/* put up UI for the rosetta track */
{
char *rosettaMap = cartUsualString(cart, "rosetta.type", rosettaEnumToString(0));
char *col = cartUsualString(cart, "exprssn.color", "rg");
char *exonTypes = cartUsualString(cart, "rosetta.et", rosettaExonEnumToString(0));
printf("
Reference Sample: ");
rosettaDropDown("rosetta.type", rosettaMap);
printf(" ");
printf("Exons Shown: ");
rosettaExonDropDown("rosetta.et", exonTypes);
printf(" Color Scheme: ");
cgiMakeRadioButton("exprssn.color", "rg", sameString(col, "rg"));
printf(" red/green ");
cgiMakeRadioButton("exprssn.color", "rb", sameString(col, "rb"));
printf(" red/blue ");
}
void switchDbScoreUi(struct trackDb *tdb)
/* Put up UI for filtering switchDb track based on a score */
/* The scores use a drop-box to set scoreFilter at several */
/* thresholds. */
{
char *option = "switchDbTss.scoreFilter";
char *pseudo = "switchDbTss.pseudo";
char *menu[3] = {"All TSSs (no filter)", "Lower stringency (score >= 10)", "Higher stringency (score >= 20)"};
char *values[3] = {"0", "10", "20"};
char *scoreValString = trackDbSetting(tdb, "scoreFilter");
int scoreSetting;
int scoreVal = SWITCHDBTSS_FILTER;
char tempScore[256];
if (scoreValString != NULL)
scoreVal = atoi(scoreValString);
printf("
Filter TSSs by score: ");
scoreSetting = cartUsualInt(cart, option, scoreVal);
safef(tempScore, sizeof(tempScore), "%d",scoreSetting);
cgiMakeDropListWithVals(option, menu, values,
ArraySize(menu), tempScore);
printf("
Include TSSs for predicted pseudogenes ");
cartMakeCheckBox(cart, pseudo, FALSE);
}
void blastSGUi(struct trackDb *tdb)
{
char geneName[64];
char accName[64];
char sprotName[64];
char posName[64];
char cModeStr[64];
boolean useGene, useAcc, useSprot, usePos;
int cMode;
char *cModes[3] = {"0", "1", "2"};
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->track);
cMode = cartUsualInt(cart, cModeStr, 0);
printf("
Color elements: ");
cgiMakeRadioButton(cModeStr, cModes[0], cMode == 0);
printf("by score ");
cgiMakeRadioButton(cModeStr, cModes[1], cMode == 1);
printf("by yeast chromosome ");
cgiMakeRadioButton(cModeStr, cModes[2], cMode == 2);
printf("black");
printf("
Label elements by: ");
cgiMakeCheckBox(geneName, useGene);
printf("Yeast Gene ");
cgiMakeCheckBox(accName, useAcc);
printf("Yeast mRNA ");
cgiMakeCheckBox(sprotName, useSprot);
printf("SwissProt ID ");
cgiMakeCheckBox(posName, usePos);
printf("Yeast Position");
baseColorDrawOptDropDown(cart, tdb);
}
void blastFBUi(struct trackDb *tdb)
{
char geneName[64];
char accName[64];
char sprotName[64];
char posName[64];
char cModeStr[64];
boolean useGene, useAcc, usePos;
int cMode;
char *cModes[3] = {"0", "1", "2"};
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->track);
cMode = cartUsualInt(cart, cModeStr, 0);
printf("
Color elements: ");
cgiMakeRadioButton(cModeStr, cModes[0], cMode == 0);
printf("by score ");
cgiMakeRadioButton(cModeStr, cModes[1], cMode == 1);
printf("by D. mel. chromosome ");
cgiMakeRadioButton(cModeStr, cModes[2], cMode == 2);
printf("black");
printf("
Label elements by: ");
cgiMakeCheckBox(geneName, useGene);
printf("FlyBase Gene ");
cgiMakeCheckBox(accName, useAcc);
printf("D. melanogaster mRNA ");
cgiMakeCheckBox(posName, usePos);
printf("D. melanogaster Position");
baseColorDrawOptDropDown(cart, tdb);
}
void blastUi(struct trackDb *tdb)
{
char geneName[64];
char accName[64];
char sprotName[64];
char posName[64];
char cModeStr[64];
boolean useGene, useAcc, useSprot, usePos;
int cMode;
char *cModes[3] = {"0", "1", "2"};
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->track);
cMode = cartUsualInt(cart, cModeStr, 0);
printf("
Color elements: ");
cgiMakeRadioButton(cModeStr, cModes[0], cMode == 0);
printf("by score ");
cgiMakeRadioButton(cModeStr, cModes[1], cMode == 1);
printf("by human chromosome ");
cgiMakeRadioButton(cModeStr, cModes[2], cMode == 2);
printf("black");
printf("
Label elements by: ");
cgiMakeCheckBox(geneName, useGene);
printf("Human Gene ");
cgiMakeCheckBox(accName, useAcc);
printf("Human mRNA ");
cgiMakeCheckBox(sprotName, useSprot);
printf("UniProt(Swiss-Prot/TrEMBL) ID ");
cgiMakeCheckBox(posName, usePos);
printf("Human Position");
baseColorDrawOptDropDown(cart, tdb);
}
void hg17KgIdConfig(struct trackDb *tdb)
/* Put up gene ID track controls */
{
char varName[64];
char *geneLabel;
safef(varName, sizeof(varName), "%s.label", tdb->track);
geneLabel = cartUsualString(cart, varName, "gene symbol");
printf("Label: ");
radioButton(varName, geneLabel, "gene symbol");
radioButton(varName, geneLabel, "UCSC Known Gene ID");
radioButton(varName, geneLabel, "all");
radioButton(varName, geneLabel, "none");
}
void hg17KgUI(struct trackDb *tdb)
/* Put up refGene-specific controls */
{
hg17KgIdConfig(tdb);
baseColorDrawOptDropDown(cart, tdb);
}
void omimLocationConfig(struct trackDb *tdb)
/* Put up OMIM Location track controls */
{
char varName[64];
char *geneLabel;
safef(varName, sizeof(varName), "%s.label", tdb->track);
geneLabel = cartUsualString(cart, varName, "OMIM ID");
printf("
Include Entries of: ");
printf("
\n");
printf("- ");
labelMakeCheckBox(tdb, "class1", "Phenotype map key 1: the disorder has been placed on the map based on its association with a gene, but the underlying defect is not known.", TRUE);
printf("
- ");
labelMakeCheckBox(tdb, "class2", "Phenotype map key 2: the disorder has been placed on the map by linkage; no mutation has been found.", TRUE);
printf("
- ");
labelMakeCheckBox(tdb, "class3", "Phenotype map key 3: the molecular basis for the disorder is known; a mutation has been found in the gene.", TRUE);
printf("
- ");
labelMakeCheckBox(tdb, "class4", "Phenotype map key 4: a contiguous gene deletion or duplication syndrome; multiple genes are deleted or duplicated causing the phenotype.", TRUE);
// removed the "others" option for the time being
//printf("
- ");
//labelMakeCheckBox(tdb, "others", "Others: no associated OMIM phenotype map key info available.", TRUE);
printf("
");
}
void omimGene2Config(struct trackDb *tdb)
/* Put up OMIM Genes track controls */
{
char varName[64];
char *geneLabel;
safef(varName, sizeof(varName), "%s.label", tdb->track);
geneLabel = cartUsualString(cart, varName, "OMIM ID");
printf("
Include Entries of: ");
printf("\n");
printf("- ");
labelMakeCheckBox(tdb, "class1", "Phenotype map key 1: the disorder has been placed on the map based on its association with a gene, but the underlying defect is not known.", TRUE);
printf("
- ");
labelMakeCheckBox(tdb, "class2", "Phenotype map key 2: the disorder has been placed on the map by linkage; no mutation has been found.", TRUE);
printf("
- ");
labelMakeCheckBox(tdb, "class3", "Phenotype map key 3: the molecular basis for the disorder is known; a mutation has been found in the gene.", TRUE);
printf("
- ");
labelMakeCheckBox(tdb, "class4", "Phenotype map key 4: a contiguous gene deletion or duplication syndrome; multiple genes are deleted or duplicated causing the phenotype.", TRUE);
printf("
- ");
labelMakeCheckBox(tdb, "others", "Others: no associated OMIM phenotype map key info available.", TRUE);
printf("
");
}
void omimGeneIdConfig(struct trackDb *tdb)
/* Put up gene ID track controls */
{
char varName[64];
char *geneLabel;
safef(varName, sizeof(varName), "%s.label", tdb->track);
geneLabel = cartUsualString(cart, varName, "OMIM ID");
printf("
Label: ");
radioButton(varName, geneLabel, "OMIM ID");
radioButton(varName, geneLabel, "OMIM gene or syndrome");
radioButton(varName, geneLabel, "UCSC gene symbol");
}
void knownGeneIdConfig(struct trackDb *tdb)
/* Put up gene ID track controls */
{
struct sqlConnection *conn = hAllocConn(database);
char query[256];
char *omimAvail = NULL;
safef(query, sizeof(query), "select kgXref.kgID from kgXref,refLink where kgXref.refseq = refLink.mrnaAcc and refLink.omimId != 0 limit 1");
omimAvail = sqlQuickString(conn, query);
hFreeConn(&conn);
printf("Label: ");
labelMakeCheckBox(tdb, "gene", "gene symbol", FALSE);
labelMakeCheckBox(tdb, "kgId", "UCSC Known Gene ID", FALSE);
labelMakeCheckBox(tdb, "prot", "UniProt Display ID", FALSE);
if (omimAvail != NULL)
{
char sym[32];
safef(sym, sizeof(sym), "omim%s", cartString(cart, "db"));
labelMakeCheckBox(tdb, sym, "OMIM ID", FALSE);
}
printf("
\n");
}
void knownGeneShowWhatUi(struct trackDb *tdb)
/* Put up line of controls that describe what parts to show. */
{
char varName[64];
printf("Show: ");
safef(varName, sizeof(varName), "%s.show.noncoding", tdb->track);
boolean option = cartUsualBoolean(cart, varName, TRUE);
cgiMakeCheckBox(varName, option);
printf(" %s ", "non-coding genes");
safef(varName, sizeof(varName), "%s.show.spliceVariants", tdb->track);
option = cartUsualBoolean(cart, varName, TRUE);
cgiMakeCheckBox(varName, option);
printf(" %s ", "splice variants");
printf("
\n");
}
void knownGeneUI(struct trackDb *tdb)
/* Put up refGene-specific controls */
{
/* This is incompatible with adding Protein ID to lf->extra */
knownGeneIdConfig(tdb);
knownGeneShowWhatUi(tdb);
baseColorDrawOptDropDown(cart, tdb);
}
void omimLocationUI(struct trackDb *tdb)
/* Put up omimLcation-specific controls */
{
omimLocationConfig(tdb);
}
void omimGene2IdConfig(struct trackDb *tdb)
/* Put up gene ID track controls */
{
printf("Label: ");
labelMakeCheckBox(tdb, "omimId", "OMIM ID", FALSE);
labelMakeCheckBox(tdb, "gene", "gene symbol", FALSE);
printf("
\n");
}
void omimGene2UI(struct trackDb *tdb)
/* Put up omimGene2-specific controls */
{
omimGene2IdConfig(tdb);
omimGene2Config(tdb);
}
void omimGeneUI(struct trackDb *tdb)
/* Put up omimGene-specific controls */
{
omimGeneIdConfig(tdb);
}
void geneIdConfig(struct trackDb *tdb)
/* Put up gene ID track controls */
{
char varName[64];
char *geneLabel;
safef(varName, sizeof(varName), "%s.label", tdb->track);
geneLabel = cartUsualString(cart, varName, "gene");
printf("Label: ");
radioButton(varName, geneLabel, "gene");
radioButton(varName, geneLabel, "accession");
radioButton(varName, geneLabel, "both");
radioButton(varName, geneLabel, "none");
}
static void hideNoncodingOpt(struct trackDb *tdb)
/* Put up hide-noncoding options. */
{
/* Put up option to hide non-coding elements. */
printf("Hide non-coding genes: ");
char varName[64];
safef(varName, sizeof(varName), "%s.%s", tdb->track, HIDE_NONCODING_SUFFIX);
cartMakeCheckBox(cart, varName, HIDE_NONCODING_DEFAULT);
}
void rgdGene2UI(struct trackDb *tdb)
/* Put up rgdGene2 gene ID track controls, with checkboxes */
{
/* Put up label line - boxes for gene and accession. */
printf("Label: ");
labelMakeCheckBox(tdb, "gene", "gene", FALSE);
labelMakeCheckBox(tdb, "acc", "accession", FALSE);
printf("
\n");
baseColorDrawOptDropDown(cart, tdb);
}
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->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");
omimAvail = sqlQuickNum(conn, query);
hFreeConn(&conn);
}
/* Put up label line - boxes for gene, accession or maybe OMIM. */
printf("Label: ");
labelMakeCheckBox(tdb, "gene", "gene", FALSE);
labelMakeCheckBox(tdb, "acc", "accession", FALSE);
if (omimAvail != 0)
{
char sym[32];
safef(sym, sizeof(sym), "omim%s", cartString(cart, "db"));
labelMakeCheckBox(tdb, sym, "OMIM ID", FALSE);
}
printf("
\n");
/* Put up noncoding option and codon coloring stuff. */
hideNoncodingOpt(tdb);
baseColorDrawOptDropDown(cart, tdb);
}
void transMapUI(struct trackDb *tdb)
/* Put up transMap-specific controls */
{
printf("Label: ");
labelMakeCheckBox(tdb, "orgCommon", "common name", FALSE);
labelMakeCheckBox(tdb, "orgAbbrv", "organism abbreviation", FALSE);
labelMakeCheckBox(tdb, "db", "assembly database", FALSE);
labelMakeCheckBox(tdb, "gene", "gene", FALSE);
labelMakeCheckBox(tdb, "acc", "accession", FALSE);
baseColorDrawOptDropDown(cart, tdb);
indelShowOptions(cart, tdb);
}
void retroGeneUI(struct trackDb *tdb)
/* Put up retroGene-specific controls */
{
printf("Label: ");
labelMakeCheckBox(tdb, "gene", "gene", FALSE);
labelMakeCheckBox(tdb, "acc", "accession", FALSE);
baseColorDrawOptDropDown(cart, tdb);
}
void vegaGeneUI(struct trackDb *tdb)
/* Put up Vega Gene track-specific controls */
{
geneIdConfig(tdb);
printf("
\n");
/* Put up codon coloring stuff. */
baseColorDrawOptDropDown(cart, tdb);
}
void ensemblNonCodingTypeConfig(struct trackDb *tdb)
{
int i = 0;
printf("
Non-coding RNA type: ");
printf("
\n");
for (i=0; i < nonCodingTypeLabelsSize; i++)
{
nonCodingTypeIncludeCart[i] = cartUsualBoolean(cart, nonCodingTypeIncludeStrings[i], nonCodingTypeIncludeDefault[i]);
cgiMakeCheckBox(nonCodingTypeIncludeStrings[i], nonCodingTypeIncludeCart[i]);
printf(" %s", nonCodingTypeLabels[i]);
}
}
void ensemblNonCodingUI(struct trackDb *tdb)
/* Put up Ensembl Non-Coding genes-specific controls */
{
ensemblNonCodingTypeConfig(tdb);
}
-void mrnaUi(struct trackDb *tdb, boolean isXeno)
-/* Put up UI for an mRNA (or EST) track. */
-{
-struct mrnaUiData *mud = newMrnaUiData(tdb->track, isXeno);
-struct mrnaFilter *fil;
-struct controlGrid *cg = NULL;
-char *filterTypeVar = mud->filterTypeVar;
-char *filterTypeVal = cartUsualString(cart, filterTypeVar, "red");
-char *logicTypeVar = mud->logicTypeVar;
-char *logicTypeVal = cartUsualString(cart, logicTypeVar, "and");
-
-/* Define type of filter. */
-filterButtons(filterTypeVar, filterTypeVal, FALSE);
-printf(" Combination Logic: ");
-radioButton(logicTypeVar, logicTypeVal, "and");
-radioButton(logicTypeVar, logicTypeVal, "or");
-printf("
\n");
-
-/* List various fields you can filter on. */
-printf("\n", CONTROL_TABLE_WIDTH);
-cg = startControlGrid(4, NULL);
-for (fil = mud->filterList; fil != NULL; fil = fil->next)
- oneMrnaFilterUi(cg, fil->label, fil->key, cart);
-endControlGrid(&cg);
-baseColorDrawOptDropDown(cart, tdb);
-indelShowOptions(cart, tdb);
-}
-
-
void transRegCodeUi(struct trackDb *tdb)
/* Put up UI for transcriptional regulatory code - not
* much more than score UI. */
{
printf("%s",
"The scoring ranges from 0 to 1000 and is based on the number of lines "
"of evidence that support the motif being active. Each of the two "
"sensu stricto species in which the motif was conserved counts "
"as a line of evidence. If the ChIP-chip data showed good (P ≤ 0.001) "
"evidence of binding to the transcription factor associated with the "
"motif, that counts as two lines of evidence. If the ChIP-chip data "
"showed weaker (P ≤ 0.005) evidence of binding, that counts as just one line "
"of evidence. The following table shows the relationship between lines "
"of evidence and score:");
printf("
");
hTableStart();
printf("%s",
"
\n"
"Evidence | Score |
\n"
"4 | 1000 |
\n"
"3 | 500 |
\n"
"2 | 333 |
\n"
"1 | 250 |
\n"
"0 | 200 |
\n"
"
\n"
);
hTableEnd();
}
void zooWiggleUi(struct trackDb *tdb )
/* put up UI for zoo track with one species on each line
* and checkboxes to toggle each of them on/off*/
{
char options[7][256];
int thisHeightPer, thisLineGap;
float thisMinYRange, thisMaxYRange;
char *interpolate, *fill;
char **row;
int rowOffset;
struct sample *sample;
struct sqlResult *sr;
char option[64];
struct sqlConnection *conn = hAllocConn(database);
char newRow = 0;
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");
thisMinYRange = atof(cartUsualString(cart, &options[4][0], "0.0"));
thisMaxYRange = atof(cartUsualString(cart, &options[5][0], "1000.0"));
thisLineGap = atoi(cartUsualString(cart, &options[6][0], "200"));
printf("Interpolation: ");
wiggleDropDown(&options[1][0], interpolate );
printf(" ");
printf("
");
printf(" Fill Blocks: ");
cgiMakeRadioButton(&options[3][0], "1", sameString(fill, "1"));
printf(" on ");
cgiMakeRadioButton(&options[3][0], "0", sameString(fill, "0"));
printf(" off ");
printf("
Track Height: ");
cgiMakeIntVar(&options[0][0], thisHeightPer, 5 );
printf(" pixels");
printf("
Vertical Range: \nmin:");
cgiMakeDoubleVar(&options[4][0], thisMinYRange, 6 );
printf(" max:");
cgiMakeDoubleVar(&options[5][0], thisMaxYRange, 6 );
printf("
Toggle Species on/off
" );
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 );
if( cartUsualBoolean(cart, option, TRUE ) )
cgiMakeCheckBox(option, TRUE );
else
cgiMakeCheckBox(option, FALSE );
printf("%s ", sample->name );
newRow++;
if( newRow % 5 == 0 ) printf("
");
sampleFree(&sample);
}
}
void chainColorUi(struct trackDb *tdb)
/* UI for the chain tracks */
{
boolean normScoreAvailable = chainDbNormScoreAvailable(tdb);
boolean compositeTrack = tdbIsComposite(tdb);
if (compositeTrack)
return; // configuration taken care of by hCompositeUi() later
else if (normScoreAvailable)
chainCfgUi(database, cart, tdb, tdb->track, NULL, FALSE, chromosome);
else
crossSpeciesCfgUi(cart,tdb);
}
void chromGraphUi(struct trackDb *tdb)
/* UI for the wiggle track */
{
char varName[chromGraphVarNameMaxSize];
struct sqlConnection *conn = NULL;
char *track = tdb->track;
if (!isCustomTrack(track))
conn = hAllocConn(database);
double minVal,maxVal;
struct chromGraphSettings *cgs = chromGraphSettingsGet(track,
conn, tdb, cart);
printf("Track height: ");
chromGraphVarName(track, "pixels", varName);
cgiMakeIntVar(varName, cgs->pixels, 3);
printf(" pixels (range: %d to %d)
",
cgs->minPixels, cgs->maxPixels);
printf("Vertical viewing range: \nmin: ");
chromGraphVarName(track, "minVal", varName);
cgiMakeDoubleVar(varName, cgs->minVal, 6);
printf(" max: ");
chromGraphVarName(track, "maxVal", varName);
cgiMakeDoubleVar(varName, cgs->maxVal, 6);
if (conn)
chromGraphDataRange(track, conn, &minVal, &maxVal);
else
{
char *fileName = trackDbRequiredSetting(tdb, "binaryFile");
struct chromGraphBin *cgb = chromGraphBinOpen(fileName);
minVal = cgb->minVal;
maxVal = cgb->maxVal;
chromGraphBinFree(&cgb);
}
printf("\n (range: %g to %g)
",
minVal, maxVal);
hFreeConn(&conn);
}
void wikiTrackUi(struct trackDb *tdb)
/* UI for wiki track user annotations */
{
return; // currently empty
}
void rulerUi(struct trackDb *tdb)
/* UI for base position (ruler) */
{
boolean showScaleBar = cartUsualBoolean(cart, BASE_SCALE_BAR, TRUE);
boolean showRuler = cartUsualBoolean(cart, BASE_SHOWRULER, TRUE);
boolean complementsToo = cartUsualBoolean(cart, MOTIF_COMPLEMENT, FALSE);
boolean showPos = cartUsualBoolean(cart, BASE_SHOWPOS, FALSE);
boolean showAsm = cartUsualBoolean(cart, BASE_SHOWASM, FALSE);
/* title var is assembly-specific */
char titleVar[256];
char *title = NULL;
/* Configure zoom when click occurs */
char *currentZoom = cartCgiUsualString(cart, RULER_BASE_ZOOM_VAR, ZOOM_3X);
char *motifString = cartCgiUsualString(cart, BASE_MOTIFS, "");
safef(titleVar,sizeof(titleVar),"%s_%s",BASE_TITLE,database);
title = cartUsualString(cart, titleVar, "");
puts("
");
cgiMakeCheckBox(BASE_SHOWRULER, showRuler);
puts(" Show ruler
");
puts("");
cgiMakeCheckBox(BASE_SCALE_BAR, showScaleBar);
puts(" Show scale bar");
puts("
Zoom factor: ");
zoomRadioButtons(RULER_BASE_ZOOM_VAR, currentZoom);
puts("
Motifs to highlight: ");
cgiMakeTextVar(BASE_MOTIFS, motifString, 20);
puts(" (Comma separated list, i.e.: GT,AG for splice sites)");
puts("
");
cgiMakeCheckBox(MOTIF_COMPLEMENT, complementsToo);
puts(" Show reverse complements of motifs also");
puts("
Options for slides and presentations:");
puts("
Title: ");
cgiMakeTextVar(titleVar, title, 30);
puts("
Display: ");
cgiMakeCheckBox(BASE_SHOWASM, showAsm);
puts(" assembly ");
cgiMakeCheckBox(BASE_SHOWPOS, showPos);
puts(" position");
}
void oligoMatchUi(struct trackDb *tdb)
/* UI for oligo match track */
{
char *oligo = cartUsualString(cart, oligoMatchVar, oligoMatchDefault);
puts("
Short (2-30 base) sequence:");
cgiMakeTextVar(oligoMatchVar, oligo, 45);
}
void cutterUi(struct trackDb *tdb)
/* UI for restriction enzyme track */
{
char *enz = cartUsualString(cart, cutterVar, cutterDefault);
puts("
Enzymes (separate with commas):
");
cgiMakeTextVar(cutterVar, enz, 100);
}
void genericWiggleUi(struct trackDb *tdb, int optionNum )
/* put up UI for any standard wiggle track (a.k.a. sample track)*/
{
char options[7][256];
int thisHeightPer, thisLineGap;
float thisMinYRange, thisMaxYRange;
char *interpolate, *fill;
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");
thisMinYRange = atof(cartUsualString(cart, &options[4][0], "0.0"));
thisMaxYRange = atof(cartUsualString(cart, &options[5][0], "1000.0"));
thisLineGap = atoi(cartUsualString(cart, &options[6][0], "200"));
printf("
Interpolation: ");
wiggleDropDown(&options[1][0], interpolate );
printf(" ");
printf("
");
printf(" Fill Blocks: ");
cgiMakeRadioButton(&options[3][0], "1", sameString(fill, "1"));
printf(" on ");
cgiMakeRadioButton(&options[3][0], "0", sameString(fill, "0"));
printf(" off ");
printf("
Track Height: ");
cgiMakeIntVar(&options[0][0], thisHeightPer, 5 );
printf(" pixels");
printf("
Vertical Range: \nmin:");
cgiMakeDoubleVar(&options[4][0], thisMinYRange, 6 );
printf(" max:");
cgiMakeDoubleVar(&options[5][0], thisMaxYRange, 6 );
if( optionNum >= 7 )
{
printf("
Maximum Interval to Interpolate Across: ");
cgiMakeIntVar(&options[6][0], thisLineGap, 10 );
printf(" bases");
}
}
void affyTxnPhase2Ui(struct trackDb *tdb)
/* Ui for affymetrix transcriptome phase 2 data. */
{
enum trackVisibility tnfgVis = tvHide;
char *visString = cartUsualString(cart, "hgt.affyPhase2.tnfg", "hide");
tnfgVis = hTvFromString(visString);
printf("Transfrags Display Mode: ");
hTvDropDown("hgt.affyPhase2.tnfg", tnfgVis, TRUE);
wigCfgUi(cart,tdb,tdb->track,"Graph Plotting options:",FALSE);
printf("
View/Hide individual cell lines:");
}
void humMusUi(struct trackDb *tdb, int optionNum )
/* put up UI for human/mouse conservation sample tracks (humMusL and musHumL)*/
{
char options[7][256];
int thisHeightPer, thisLineGap;
float thisMinYRange, thisMaxYRange;
char *interpolate, *fill;
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");
thisMinYRange = atof(cartUsualString(cart, &options[4][0], "0.0"));
thisMaxYRange = atof(cartUsualString(cart, &options[5][0], "8.0"));
thisLineGap = atoi(cartUsualString(cart, &options[6][0], "200"));
printf("
Interpolation: ");
wiggleDropDown(&options[1][0], interpolate );
printf(" ");
printf("
");
printf(" Fill Blocks: ");
cgiMakeRadioButton(&options[3][0], "1", sameString(fill, "1"));
printf(" on ");
cgiMakeRadioButton(&options[3][0], "0", sameString(fill, "0"));
printf(" off ");
printf("
Track Height: ");
cgiMakeIntVar(&options[0][0], thisHeightPer, 5 );
printf(" pixels");
printf("
Vertical Range: \nmin:");
cgiMakeDoubleVar(&options[4][0], thisMinYRange, 6 );
printf(" max:");
cgiMakeDoubleVar(&options[5][0], thisMaxYRange, 6 );
if( optionNum >= 7 )
{
printf("
Maximum Interval to Interpolate Across: ");
cgiMakeIntVar(&options[6][0], thisLineGap, 10 );
printf(" bases");
}
}
void affyTranscriptomeUi(struct trackDb *tdb)
/* put up UI for the GC percent track (a sample track)*/
{
int affyTranscriptomeHeightPer = atoi(cartUsualString(cart, "affyTranscriptome.heightPer", "100"));
char *fill = cartUsualString(cart, "affyTranscriptome.fill", "1");
printf("
");
printf(" Fill Blocks: ");
cgiMakeRadioButton("affyTranscriptome.fill", "1", sameString(fill, "1"));
printf(" on ");
cgiMakeRadioButton("affyTranscriptome.fill", "0", sameString(fill, "0"));
printf(" off ");
printf("
Track Height: ");
cgiMakeIntVar("affyTranscriptome.heightPer", affyTranscriptomeHeightPer, 5 );
printf(" pixels");
}
void ancientRUi(struct trackDb *tdb)
/* put up UI for the ancient repeats track to let user enter an
* integer to filter out those repeats with less aligned bases.*/
{
int ancientRMinLength = atoi(cartUsualString(cart, "ancientR.minLength", "50"));
printf("
Length Filter
Exclude aligned repeats with less than ");
cgiMakeIntVar("ancientR.minLength", ancientRMinLength, 4 );
printf("aligned bases (not necessarily identical). Enter 0 for no filtering.");
}
void affyTransfragUi(struct trackDb *tdb)
/* Options for filtering affymetrix transfrag track based on score. */
{
boolean skipPseudos = cartUsualBoolean(cart, "affyTransfrags.skipPseudos", TRUE);
boolean skipDups = cartUsualBoolean(cart, "affyTransfrags.skipDups", FALSE);
printf("
");
cgiMakeCheckBox("affyTransfrags.skipPseudos", skipPseudos);
printf(" Remove transfrags that overlap pseudogenes from display.
");
cgiMakeCheckBox("affyTransfrags.skipDups", skipDups);
printf(" Remove transfrags that have a BLAT match elsewhere in the genome from display.
");
}
void ucsfdemoUi(struct trackDb *tdb)
{
char **menu;
int menuSize = 0;
int menuPos = 0;
puts("
ER filter: ");
menuSize = 3;
menu = needMem((size_t)(menuSize * sizeof(char *)));
menuPos = 0;
menu[menuPos++] = "no filter";
menu[menuPos++] = "pos";
menu[menuPos++] = "neg";
cgiMakeDropList(UCSF_DEMO_ER, menu, menuSize,
cartCgiUsualString(cart, UCSF_DEMO_ER, UCSF_DEMO_ER_DEFAULT));
freez(&menu);
puts("
PR filter: ");
menuSize = 3;
menu = needMem((size_t)(menuSize * sizeof(char *)));
menuPos = 0;
menu[menuPos++] = "no filter";
menu[menuPos++] = "pos";
menu[menuPos++] = "neg";
cgiMakeDropList(UCSF_DEMO_PR, menu, menuSize,
cartCgiUsualString(cart, UCSF_DEMO_PR, UCSF_DEMO_PR_DEFAULT));
freez(&menu);
}
void hapmapSnpsUi(struct trackDb *tdb)
/* Options for filtering hapmap snps */
/* Default is always to not filter (include all data) */
/* snp track puts the menu options in kent/src/hg/lib/snp125Ui.h */
/* snp track also sets global variables, don't actually need this? */
/* Consider using radio buttons */
{
struct sqlConnection *conn = hAllocConn(database);
boolean isPhaseIII = sameString(trackDbSettingOrDefault(tdb, "hapmapPhase", "II"), "III");
if ((isPhaseIII && !sqlTableExists(conn, "hapmapPhaseIIISummary")) ||
(!isPhaseIII & !sqlTableExists(conn, "hapmapAllelesSummary")))
return;
puts("
");
puts("Display filters (applied to all subtracks):");
puts("
\n");
puts("
Population availability: ");
static char *popAvailMenuPhaseIII[] =
{ "no filter",
"all 11 Phase III populations",
"all 4 Phase II populations" };
static char *popAvailMenuPhaseII[] =
{ "no filter",
"all 4 populations",
"1-3 populations" };
char **menu = isPhaseIII ? popAvailMenuPhaseIII : popAvailMenuPhaseII;
cgiMakeDropList(HAP_POP_COUNT, menu, 3,
cartUsualString(cart, HAP_POP_COUNT, HAP_FILTER_DEFAULT));
puts("
Major allele mixture between populations: ");
static char *mixedMenu[] = { "no filter", "mixed", "not mixed" };
cgiMakeDropList(HAP_POP_MIXED, mixedMenu, 3,
cartUsualString(cart, HAP_POP_MIXED, HAP_FILTER_DEFAULT));
puts("
Monomorphism:
");
static char *noYesNoMenu[] = { "no filter", "yes", "no" };
char **pops = isPhaseIII ? hapmapPhaseIIIPops : hapmapPhaseIIPops;
int popCount = isPhaseIII ? HAP_PHASEIII_POPCOUNT : HAP_PHASEII_POPCOUNT;
puts("
");
int cellCount = 0, i;
char cartVar[128];
for (i = 0; i < popCount; i++)
{
char table[HDB_MAX_TABLE_STRING];
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))
{
if (cellCount == 0)
puts("");
printf("%s: | ", pops[i]);
safef(cartVar, sizeof(cartVar), "%s_%s", HAP_MONO_PREFIX, pops[i]);
cgiMakeDropList(cartVar, noYesNoMenu, 3,
cartUsualString(cart, cartVar, HAP_FILTER_DEFAULT));
printf(" | \n");
cellCount += 2;
if (cellCount == 12)
{
puts("
");
cellCount = 0;
}
}
}
if (cellCount != 0)
{
while (cellCount++ < 12)
puts(" | ");
puts("");
}
puts("
");
puts("
Polymorphism type: ");
static char *typeMenu[] = { "no filter", "bi-allelic", "transition", "transversion", "complex" };
cgiMakeDropList(HAP_TYPE, typeMenu, 5,
cartUsualString(cart, HAP_TYPE, HAP_FILTER_DEFAULT));
puts("
Minor allele frequency in any population: min: ");
float minFreq = atof(cartUsualString(cart, HAP_MIN_FREQ, HAP_MIN_FREQ_DEFAULT));
cgiMakeDoubleVar(HAP_MIN_FREQ, minFreq, 6);
puts("max: ");
float maxFreq = atof(cartUsualString(cart, HAP_MAX_FREQ, HAP_MAX_FREQ_DEFAULT));
cgiMakeDoubleVar(HAP_MAX_FREQ, maxFreq, 6);
puts(" (range: 0.0 to 0.5)\n");
if (isPhaseIII)
puts("
Average of populations' observed heterozygosities: ");
else
puts("
Expected heterozygosity (from total allele frequencies): ");
puts("min: ");
float minHet = atof(cartUsualString(cart, HAP_MIN_HET, HAP_MIN_HET_DEFAULT));
cgiMakeDoubleVar(HAP_MIN_HET, minHet, 6);
puts("max: ");
if (isPhaseIII)
{
float maxHet = atof(cartUsualString(cart, HAP_MAX_OBSERVED_HET, HAP_MAX_OBSERVED_HET_DEFAULT));
cgiMakeDoubleVar(HAP_MAX_OBSERVED_HET, maxHet, 6);
puts(" (range: 0.0 to 1.0)\n");
}
else
{
float maxHet = atof(cartUsualString(cart, HAP_MAX_EXPECTED_HET, HAP_MAX_EXPECTED_HET_DEFAULT));
cgiMakeDoubleVar(HAP_MAX_EXPECTED_HET, maxHet, 6);
puts(" (range: 0.0 to 0.5)\n");
}
static char *orthoMenu[] =
{ "no filter",
"available",
"matches major human allele",
"matches minor human allele",
"matches neither human allele" };
puts("");
for (i = 0; hapmapOrthoSpecies[i] != NULL; i++)
{
printf("%s allele: | \n", hapmapOrthoSpecies[i]);
safef(cartVar, sizeof(cartVar), "%s_%s", HAP_ORTHO_PREFIX, hapmapOrthoSpecies[i]);
cgiMakeDropList(cartVar, orthoMenu, 5,
cartUsualString(cart, cartVar, HAP_FILTER_DEFAULT));
puts(" | ");
safef(cartVar, sizeof(cartVar), "%s_%s", HAP_ORTHO_QUAL_PREFIX, hapmapOrthoSpecies[i]);
int minQual = atoi(cartUsualString(cart, cartVar, HAP_ORTHO_QUAL_DEFAULT));
puts("Minimum quality score: | \n");
cgiMakeIntVar(cartVar, minQual, 4);
puts(" (range: 0 to 100) |
\n");
}
puts("
");
puts("\n");
printf("Select subtracks to display:
\n");
hFreeConn(&conn);
}
void pcrResultUi(struct trackDb *tdb)
/* Result from hgPcr query. */
{
struct targetDb *target;
if (! pcrResultParseCart(database, cart, NULL, NULL, &target))
return;
if (target != NULL)
{
char *chosen = cartUsualString(cart, PCR_RESULT_TARGET_STYLE,
PCR_RESULT_TARGET_STYLE_DEFAULT);
cgiMakeRadioButton(PCR_RESULT_TARGET_STYLE, PCR_RESULT_TARGET_STYLE_TRIM,
sameString(chosen, PCR_RESULT_TARGET_STYLE_TRIM));
printf("Show only the amplified part of %s item \n",
target->description);
cgiMakeRadioButton(PCR_RESULT_TARGET_STYLE, PCR_RESULT_TARGET_STYLE_TALL,
sameString(chosen, PCR_RESULT_TARGET_STYLE_TALL));
printf("Show the whole %s item with amplified part tall",
target->description);
}
baseColorDrawOptDropDown(cart, tdb);
}
void dgvUi(struct trackDb *tdb)
/* Database of Genomic Variants: filter by publication. */
{
struct sqlConnection *conn = hAllocConn(database);
struct sqlResult *sr;
char **row;
char query[256];
safef(query, sizeof(query),
"select reference,pubMedId from %s group by pubMedId order by reference;", tdb->table);
sr = sqlGetResult(conn, query);
printf("
Filter by publication reference:\n");
char cartVarName[256];
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
\n");
safef (cartVarName, sizeof(cartVarName), "hgt_%s_filterPmId", tdb->track);
boolean filterPmIdInCart = cartListVarExists(cart, cartVarName);
struct slName *checked = NULL;
if (filterPmIdInCart)
checked = cartOptionalSlNameList(cart, cartVarName);
#define MAX_DGV_REFS 128
char *labelArr[MAX_DGV_REFS], *valueArr[MAX_DGV_REFS];
int refCount = 0;
while ((row = sqlNextRow(sr)) != NULL)
{
char *ref = row[0];
char *pmId = row[1];
char label[512];
safef(label, sizeof(label),
"%s", pmId, ref);
labelArr[refCount] = cloneString(label);
valueArr[refCount++] = cloneString(pmId);
if (! filterPmIdInCart)
slNameAddHead(&checked, pmId);
if (refCount >= MAX_DGV_REFS)
errAbort("dgvUi: %s has too many references (max %d)", tdb->track, MAX_DGV_REFS);
}
sqlFreeResult(&sr);
jsMakeCheckboxGroupSetClearButton(cartVarName, TRUE);
jsMakeCheckboxGroupSetClearButton(cartVarName, FALSE);
cgiMakeCheckboxGroupWithVals(cartVarName, labelArr, valueArr, refCount, checked, 4);
hFreeConn(&conn);
}
static void factorSourceUi(char *db,struct trackDb *tdb)
{
printf("
Cell Abbreviations:
\n");
char *sourceTable = trackDbRequiredSetting(tdb, "sourceTable");
struct sqlConnection *conn = hAllocConn(db);
hPrintAbbreviationTable(conn, sourceTable, "Cell Type");
hFreeConn(&conn);
}
#ifdef UNUSED
static boolean isInTrackList(struct trackDb *tdbList, struct trackDb *target)
/* Return TRUE if target is in tdbList. */
{
struct trackDb *tdb;
for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
if (tdb == target)
return TRUE;
return FALSE;
}
#endif /* UNUSED */
void superTrackUi(struct trackDb *superTdb, struct trackDb *tdbList)
/* List tracks in this collection, with visibility controls and UI links */
{
printf("");
tdbRefSortPrioritiesFromCart(cart, &superTdb->children);
struct slRef *childRef;
for (childRef = superTdb->children; childRef != NULL; childRef = childRef->next)
{
struct trackDb *tdb = childRef->val;
printf("");
if (tdbIsDownloadsOnly(tdb))
printf("%s ",tdb->shortLabel);
else
printf("%s ",
(tdbIsDownloadsOnly(tdb)? hgFileUiName(): hgTrackUiName()),
cartSessionVarName(), cartSessionId(cart),
chromosome, cgiEncode(tdb->track), tdb->shortLabel);
printf(" | ");
if (tdbIsDownloadsOnly(tdb))
{
printf("Downloads",
hgFileUiName(),cartSessionVarName(), cartSessionId(cart), cgiEncode(tdb->track));
}
else
{
enum trackVisibility tv =
hTvFromString(cartUsualString(cart, tdb->track,
hStringFromTv(tdb->visibility)));
hTvDropDownClassVisOnly(tdb->track, tv, tdb->canPack,
tv == tvHide ? "hiddenText" : "normalText",
trackDbSetting(tdb, "onlyVisibility"));
}
printf(" | %s", tdb->longLabel);
char *dataVersion = trackDbSetting(tdb, "dataVersion");
if (dataVersion)
printf("  %s", dataVersion);
printf(" |
");
}
printf("
");
}
void previewLinks(char *db, struct trackDb *tdb)
/* Informational messages about preview browser (ENCODE tracks only) */
{
if (trackDbSetting(tdb, "wgEncode") != NULL)
{
if (hIsPreviewHost())
{
printf("WARNING: This data is provided for early access via the Preview Browser -- it is unreviewed and subject to change. For high quality reviewed annotations, see the Genome Browser.",
"genome.ucsc.edu", db);
}
else
{
// TODO: use hTrackUiName()
printf("
NOTE: Early access to additional track data may be available on the Preview Browser.",
"genome-preview.ucsc.edu", db, tdb->track);
}
}
}
void specificUi(struct trackDb *tdb, struct trackDb *tdbList, struct customTrack *ct, boolean ajax)
/* Draw track specific parts of UI. */
{
char *track = tdb->track;
// Ideally check cfgTypeFromTdb()/cfgByCfgType() first, but with all these special cases already in
// place, lets be cautious at this time.
// NOTE: Developer, please try to use cfgTypeFromTdb()/cfgByCfgType().
+boolean boxed = trackDbSettingClosestToHomeOn(tdb, "boxedCfg");
// UI precedence:
// 1) supers to get them out of the way: they have no controls
// 2) special cases based upon track name (developer please avoid)
// 3) cfgTypeFromTdb()/cfgByCfgType() <== prefered method
// 4) special cases falling through the cracks but based upon type
if (tdbIsSuperTrack(tdb))
superTrackUi(tdb, tdbList);
else if (sameString(track, "stsMap"))
stsMapUi(tdb);
else if (sameString(track, "affyTxnPhase2"))
affyTxnPhase2Ui(tdb);
else if (sameString(track, "cgapSage"))
cgapSageUi(tdb);
else if (sameString(track, "stsMapMouseNew"))
stsMapMouseUi(tdb);
else if (sameString(track, "stsMapRat"))
stsMapRatUi(tdb);
else if (sameString(track, "snpMap"))
snpMapUi(tdb);
else if (sameString(track, "snp"))
snpUi(tdb);
else if (snpVersion(track) >= 125)
snp125Ui(tdb);
else if (sameString(track, "rertyHumanDiversityLd")
|| startsWith("hapmapLd", track)
|| sameString(tdb->type, "ld2"))
ldUi(tdb);
else if (sameString(track, "cbr_waba"))
cbrWabaUi(tdb);
else if (sameString(track, "fishClones"))
fishClonesUi(tdb);
else if (sameString(track, "recombRate"))
recombRateUi(tdb);
else if (sameString(track, "recombRateRat"))
recombRateRatUi(tdb);
else if (sameString(track, "recombRateMouse"))
recombRateMouseUi(tdb);
else if (sameString(track, "cghNci60"))
cghNci60Ui(tdb);
else if (sameString(track, "xenoRefGene")
|| sameString(track, "refGene"))
refGeneUI(tdb);
else if (startsWith("transMapAln", track))
transMapUI(tdb);
else if (sameString(track, "rgdGene2"))
rgdGene2UI(tdb);
else if (sameString(track, "knownGene"))
knownGeneUI(tdb);
else if (sameString(track, "omimLocation"))
omimLocationUI(tdb);
else if (sameString(track, "omimGene2"))
omimGene2UI(tdb);
else if (sameString(track, "omimGene"))
omimGeneUI(tdb);
else if (sameString(track, "hg17Kg"))
hg17KgUI(tdb);
else if (startsWith("ucscRetro", track)
|| startsWith("retroMrnaInfo", track))
retroGeneUI(tdb);
else if (sameString(track, "ensGeneNonCoding"))
ensemblNonCodingUI(tdb);
else if (sameString(track, "vegaGeneComposite"))
vegaGeneUI(tdb);
-else if (sameString(track, "all_mrna")
- || sameString(track, "mrna")
- || sameString(track, "all_est")
- || sameString(track, "est")
- || sameString(track, "tightMrna")
- || sameString(track, "tightEst")
- || sameString(track, "intronEst"))
- mrnaUi(tdb, FALSE);
-else if (sameString(track, "xenoMrna")
- || sameString(track, "xenoEst"))
- mrnaUi(tdb, TRUE);
else if (sameString(track, "rosetta"))
rosettaUi(tdb);
else if (startsWith("blastDm", track))
blastFBUi(tdb);
else if (sameString(track, "blastSacCer1SG"))
blastSGUi(tdb);
else if (sameString(track, "blastHg17KG")
|| sameString(track, "blastHg16KG")
|| sameString(track, "blastCe3WB")
|| sameString(track, "blastHg18KG")
|| sameString(track, "blatzHg17KG")
|| startsWith("mrnaMap", track)
|| startsWith("mrnaXeno", track))
blastUi(tdb);
else if (sameString(track, "hgPcrResult"))
pcrResultUi(tdb);
else if (sameString(track, "ancientR"))
ancientRUi(tdb);
else if (sameString(track, "zoo")
|| sameString(track, "zooNew" ))
zooWiggleUi(tdb);
else if (sameString(track, "humMusL")
|| sameString(track, "musHumL")
|| sameString(track, "regpotent")
|| sameString(track, "mm3Rn2L" )
|| sameString(track, "mm3Hg15L" )
|| sameString(track, "hg15Mm3L" ))
humMusUi(tdb,7);
else if (startsWith("chain", track)
|| endsWith("chainSelf", track))
chainColorUi(tdb);
else if (sameString(track, "orthoTop4") // still used ??
|| sameString(track, "mouseOrtho")
|| sameString(track, "mouseSyn"))
// NOTE: type psl xeno tracks use crossSpeciesCfgUi, so
// add explicitly here only if track has another type (bed, chain).
// For crossSpeciesCfgUi, the
// default for chrom coloring is "on", unless track setting
// colorChromDefault is set to "off"
crossSpeciesCfgUi(cart,tdb);
else if (sameString(track, "affyTranscriptome"))
affyTranscriptomeUi(tdb);
else if (sameString(track, WIKI_TRACK_TABLE))
wikiTrackUi(tdb);
else if (sameString(track, RULER_TRACK_NAME))
rulerUi(tdb);
else if (sameString(track, OLIGO_MATCH_TRACK_NAME))
oligoMatchUi(tdb);
else if (sameString(track, CUTTERS_TRACK_NAME))
cutterUi(tdb);
else if(sameString(track, "affyTransfrags"))
affyTransfragUi(tdb);
else if (sameString(track, "gvPos"))
gvUi(tdb);
else if (sameString(track, "oreganno"))
oregannoUi(tdb);
else if (startsWith("retroposons", track))
retroposonsUi(tdb);
else if (sameString(track, "tfbsConsSites"))
tfbsConsSitesUi(tdb);
else if (sameString(track, "CGHBreastCancerUCSF"))
ucsfdemoUi(tdb);
else if (startsWith("hapmapSnps", track))
hapmapSnpsUi(tdb);
else if (sameString(track, "switchDbTss"))
switchDbScoreUi(tdb);
else if (sameString(track, "dgv")
|| (startsWith("dgvV", track) && isdigit(track[4])))
dgvUi(tdb);
+else if (sameString(track, "all_mrna")
+ || sameString(track, "mrna")
+ || sameString(track, "all_est")
+ || sameString(track, "est")
+ || sameString(track, "tightMrna")
+ || sameString(track, "tightEst")
+ || sameString(track, "intronEst")
+ || sameString(track, "xenoMrna")
+ || sameString(track, "xenoEst"))
+ mrnaCfgUi(cart, tdb, tdb->track, NULL, boxed);
else if (tdb->type != NULL)
{ // NOTE for developers: please avoid special cases and use cfgTypeFromTdb//cfgByCfgType()
// When you do, then multi-view cfg and subtrack cfg will work.
eCfgType cType = cfgTypeFromTdb(tdb,FALSE);
if (cType != cfgNone)
{
- boolean boxed = trackDbSettingClosestToHomeOn(tdb, "boxedCfg");
cfgByCfgType(cType,database, cart, tdb,tdb->track, NULL, boxed);
}
// NOTE: these cases that fall through the cracks should probably get folded into cfgByCfgType()
else if (startsWithWord("expRatio", tdb->type))
expRatioUi(tdb);
else if (startsWith("chromGraph", tdb->type))
chromGraphUi(tdb);
else if (startsWith("sample", tdb->type))
genericWiggleUi(tdb,7);
else if (startsWithWord("array",tdb->type)) /* not quite the same as an "expRatio" type (custom tracks) */
expRatioCtUi(tdb);
else if (startsWithWord("factorSource",tdb->type))
factorSourceUi(database,tdb);
}
if (!ajax) // ajax asks for a simple cfg dialog for right-click popup or hgTrackUi subtrack cfg
{
// Composites *might* have had their top level controls just printed, but almost certainly have additional controls
if (tdbIsComposite(tdb)) // for the moment generalizing this to include other containers...
hCompositeUi(database, cart, tdb, NULL, NULL, MAIN_FORM, trackHash);
// Additional special case navigation links may be added
previewLinks(database, tdb);
extraUiLinks(database,tdb, trackHash);
}
}
#ifdef UNUSED
static void findSuperChildrenAndSettings(struct trackDb *tdbList, struct trackDb *super)
/* Find the tracks that have super as a parent and stuff references to them on
* super's children list. Also do some visibility and parentName futzing. */
{
struct trackDb *tdb;
for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
{
if (tdb->parent == super)
{
trackDbSuperMemberSettings(tdb); /* This adds tdb to tdb->parent->children. */
}
}
}
#endif /* UNUSED */
void trackUi(struct trackDb *tdb, struct trackDb *tdbList, struct customTrack *ct, boolean ajax)
/* Put up track-specific user interface. */
{
if (!ajax)
{
jsIncludeFile("jquery.js", NULL);
webIncludeResourceFile("jquery-ui.css");
jsIncludeFile("jquery-ui.js", NULL);
jsIncludeFile("utils.js",NULL);
jsonHashAddString(NULL, "track", tdb->track);
jsonHashAddString(NULL, "db", database);
}
#define RESET_TO_DEFAULTS "defaults"
char setting[128];
// NOTE: Currently only composite multi-view tracks because
// reset relies upon all cart vars following naming convention:
// {track}.{varName}... ( One exception supported: {track}_sel ).
if (trackDbLocalSetting(tdb, "container"))
{
/* For the moment, be a composite... */
tdbMarkAsComposite(tdb);
}
if (ajax && cartOptionalString(cart, "descriptionOnly"))
{
//struct trackDb *tdbParent = tdbFillInAncestry(cartString(cart, "db"),tdb);
if (tdb->html != NULL && tdb->html[0] != 0)
puts(tdb->html);
else
{
struct trackDb *tdbParent = tdb->parent;
for (;tdbParent && (tdbParent->html == NULL || tdbParent->html[0] == 0); tdbParent = tdbParent->parent )
; // Get the first parent that has html
if (tdbParent != NULL && tdbParent->html != NULL && tdbParent->html[0])
{
printf("Retrieved from %s Track...
\n",COLOR_DARKGREEN,tdbParent->shortLabel);
puts(tdbParent->html);
}
else
printf("No description found for: %s.
",tdbParent?tdbParent->track:tdb->track);
}
cartRemove(cart,"descriptionOnly"); // This is a once only request and should be deleted
return;
}
if(tdbIsContainer(tdb))
{
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);
else if (!ajax) // Overkill on !ajax, because ajax shouldn't be called for a composite
cartTdbTreeReshapeIfNeeded(cart,tdb);
}
printf("");
if (ajax)
return;
if (ct)
{
/* hidden form for custom tracks CGI */
printf("\n");
if (ct->bbiFile)
{
time_t timep = bbiUpdateTime(ct->bbiFile);
printBbiUpdateTime(&timep);
}
else
printUpdateTime(CUSTOM_TRASH, ct->tdb, ct);
}
if (!ct)
{
/* Print data version trackDB setting, if any */
char *version = trackDbSetting(tdb, "dataVersion");
if (version)
{
cgiDown(0.7);
printf("Data version: %s\n", version);
}
/* Print lift information from trackDb, if any */
trackDbPrintOrigAssembly(tdb, database);
printUpdateTime(database, tdb, NULL);
}
if (tdb->html != NULL && tdb->html[0] != 0)
{
char *browserVersion;
if (btIE == cgiClientBrowser(&browserVersion, NULL, NULL) && *browserVersion < '8')
htmlHorizontalLine();
else // Move line down, since Description (in ->html) is proceded by too much space
printf("
");
printf("
");
puts(""); // include anchor for Description link
// Add pennantIcon
printPennantIconNote(tdb);
puts(tdb->html);
printf(" | ");
cgiDown(0.7); // positions top link below line
makeTopLink(tdb);
printf("  |
");
makeTopLink(tdb);
printf("  |
");
}
} /* void trackUi(struct trackDb *tdb) */
struct trackDb *trackDbForPseudoTrack(char *tableName, char *shortLabel,
char *longLabel, int defaultVis, boolean canPack)
/* Create trackDb for a track without a corresponding table. */
{
struct trackDb *tdb;
AllocVar(tdb);
tdb->track = tableName;
tdb->table = tableName;
tdb->shortLabel = shortLabel;
tdb->longLabel = longLabel;
tdb->visibility = defaultVis;
tdb->priority = 1.0;
tdb->html = hFileContentsOrWarning(hHelpFile(tableName));
tdb->type = "none";
tdb->grp = "map";
tdb->canPack = canPack;
return tdb;
}
struct trackDb *trackDbForWikiTrack()
/* Create a trackDb entry for the wikiTrack.
It is not a real track, so doesn't appear in trackDb */
{
return trackDbForPseudoTrack(WIKI_TRACK_TABLE,
WIKI_TRACK_LABEL, WIKI_TRACK_LONGLABEL, tvFull, FALSE);
}
struct trackDb *trackDbForRuler()
/* Create a trackDb entry for the base position ruler.
It is not (yet?) a real track, so doesn't appear in trackDb */
{
return trackDbForPseudoTrack(RULER_TRACK_NAME,
RULER_TRACK_LABEL, RULER_TRACK_LONGLABEL, tvFull, FALSE);
}
struct trackDb *trackDbForOligoMatch()
/* Create a trackDb entry for the oligo matcher pseudo-track. */
{
return trackDbForPseudoTrack(OLIGO_MATCH_TRACK_NAME,
OLIGO_MATCH_TRACK_LABEL, OLIGO_MATCH_TRACK_LONGLABEL, tvHide, TRUE);
}
void doMiddle(struct cart *theCart)
/* Write body of web page. */
{
struct trackDb *tdbList = NULL;
struct trackDb *tdb = NULL;
char *track;
struct customTrack *ct = NULL, *ctList = NULL;
char *ignored;
cart = theCart;
track = cartString(cart, "g");
getDbAndGenome(cart, &database, &ignored, NULL);
chromosome = cartUsualString(cart, "c", hDefaultChrom(database));
trackHash = trackHashMakeWithComposites(database,chromosome,&tdbList,FALSE);
if (sameWord(track, WIKI_TRACK_TABLE))
tdb = trackDbForWikiTrack();
else if (sameWord(track, RULER_TRACK_NAME))
/* special handling -- it's not a full-fledged track */
tdb = trackDbForRuler();
else if (sameWord(track, OLIGO_MATCH_TRACK_NAME))
tdb = trackDbForOligoMatch();
else if (sameWord(track, CUTTERS_TRACK_NAME))
tdb = trackDbForPseudoTrack(CUTTERS_TRACK_NAME, CUTTERS_TRACK_LABEL, CUTTERS_TRACK_LONGLABEL, tvHide, TRUE);
else if (isCustomTrack(track))
{
ctList = customTracksParseCart(database, cart, NULL, NULL);
for (ct = ctList; ct != NULL; ct = ct->next)
{
if (sameString(track, ct->tdb->track))
{
tdb = ct->tdb;
break;
}
}
}
else if (isHubTrack(track))
{
tdb = hubConnectAddHubForTrackAndFindTdb(database, track, &tdbList, trackHash);
}
else if (sameString(track, "hgPcrResult"))
tdb = pcrResultFakeTdb();
else
{
tdb = tdbForTrack(database, track,&tdbList);
}
if (tdb == NULL)
{
errAbort("Can't find %s in track database %s chromosome %s",
track, database, chromosome);
}
char *super = trackDbGetSupertrackName(tdb);
if (super)
{
/* configured as a supertrack member in trackDb */
if (tdb->parent)
{
/* the supertrack is also configured, so use supertrack defaults */
tdbMarkAsSuperTrack(tdb->parent);
trackDbSuperMemberSettings(tdb);
}
}
char *title = (tdbIsSuper(tdb) ? "Super-track Settings" :
tdbIsDownloadsOnly(tdb) ? DOWNLOADS_ONLY_TITLE : "Track Settings");
if(cartOptionalString(cart, "ajax"))
{
// html is going to be used w/n a dialog in hgTracks.js so serve up stripped down html
trackUi(tdb, tdbList, ct, TRUE);
cartRemove(cart,"ajax");
}
else
{
cartWebStart(cart, database, "%s %s", tdb->shortLabel, title);
trackUi(tdb, tdbList, ct, FALSE);
printf("
\n");
jsonPrintGlobals(TRUE);
webEnd();
}
}
char *excludeVars[] = { "submit", "Submit", "g", NULL, "ajax", NULL,};
int main(int argc, char *argv[])
/* Process command line. */
{
cgiSpoof(&argc, argv);
htmlSetBackground(hBackgroundImage());
setUdcCacheDir();
cartEmptyShell(doMiddle, hUserCookie(), excludeVars, NULL);
return 0;
}