src/hg/hgTrackUi/hgTrackUi.c 1.474
1.474 2009/03/03 01:02:46 angie
Updated hapmapSnpsUi to handle HapMap phase III (11 populations).
Index: src/hg/hgTrackUi/hgTrackUi.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTrackUi/hgTrackUi.c,v
retrieving revision 1.473
retrieving revision 1.474
diff -b -B -U 4 -r1.473 -r1.474
--- src/hg/hgTrackUi/hgTrackUi.c 23 Feb 2009 22:55:04 -0000 1.473
+++ src/hg/hgTrackUi/hgTrackUi.c 3 Mar 2009 01:02:46 -0000 1.474
@@ -1982,160 +1982,122 @@
/* 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 */
{
-char **menu;
-int menuSize = 0;
-int menuPos = 0;
-float minFreq = 0.0;
-float maxFreq = 0.0;
-float minHet = 0.0;
-float maxHet = 0.0;
-int minChimpQual = 0;
-int minMacaqueQual = 0;
+struct sqlConnection *conn = hAllocConn(database);
+boolean isPhaseIII = (! sqlTableExists(conn, "hapmapAllelesSummary"));
puts("<P>");
puts("<B>Display filters (applied to all subtracks):</B>");
puts("<BR>\n");
puts("<BR><B>Population availability:</B> ");
-menuSize = 3;
-menu = needMem((size_t)(menuSize * sizeof(char *)));
-menuPos = 0;
-menu[menuPos++] = "no filter";
-menu[menuPos++] = "all 4 populations";
-menu[menuPos++] = "1-3 populations";
-cgiMakeDropList(HAP_POP_COUNT, menu, menuSize,
- cartCgiUsualString(cart, HAP_POP_COUNT, HAP_POP_COUNT_DEFAULT));
-freez(&menu);
+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("<BR><B>Major allele mixture between populations:</B> ");
-menuSize = 3;
-menu = needMem((size_t)(menuSize * sizeof(char *)));
-menuPos = 0;
-menu[menuPos++] = "no filter";
-menu[menuPos++] = "mixed";
-menu[menuPos++] = "not mixed";
-cgiMakeDropList(HAP_POP_MIXED, menu, menuSize,
- cartCgiUsualString(cart, HAP_POP_MIXED, HAP_POP_MIXED_DEFAULT));
-freez(&menu);
-
-puts("<BR><B>Monomorphism:</B> ");
-puts("<B>CEU:</B> ");
-menuSize = 3;
-menu = needMem((size_t)(menuSize * sizeof(char *)));
-menuPos = 0;
-menu[menuPos++] = "no filter";
-menu[menuPos++] = "yes";
-menu[menuPos++] = "no";
-cgiMakeDropList(HAP_MONO_CEU, menu, menuSize,
- cartCgiUsualString(cart, HAP_MONO_CEU, HAP_MONO_DEFAULT));
-freez(&menu);
-puts("<B>CHB:</B> ");
-menuSize = 3;
-menu = needMem((size_t)(menuSize * sizeof(char *)));
-menuPos = 0;
-menu[menuPos++] = "no filter";
-menu[menuPos++] = "yes";
-menu[menuPos++] = "no";
-cgiMakeDropList(HAP_MONO_CHB, menu, menuSize,
- cartCgiUsualString(cart, HAP_MONO_CHB, HAP_MONO_DEFAULT));
-freez(&menu);
-puts("<B>JPT:</B> ");
-menuSize = 3;
-menu = needMem((size_t)(menuSize * sizeof(char *)));
-menuPos = 0;
-menu[menuPos++] = "no filter";
-menu[menuPos++] = "yes";
-menu[menuPos++] = "no";
-cgiMakeDropList(HAP_MONO_JPT, menu, menuSize,
- cartCgiUsualString(cart, HAP_MONO_JPT, HAP_MONO_DEFAULT));
-freez(&menu);
-puts("<B>YRI:</B> ");
-menuSize = 3;
-menu = needMem((size_t)(menuSize * sizeof(char *)));
-menuPos = 0;
-menu[menuPos++] = "no filter";
-menu[menuPos++] = "yes";
-menu[menuPos++] = "no";
-cgiMakeDropList(HAP_MONO_YRI, menu, menuSize,
- cartCgiUsualString(cart, HAP_MONO_YRI, HAP_MONO_DEFAULT));
-freez(&menu);
-
-puts("<BR><BR><B>Polymorphism type:</B> ");
-menuSize = 5;
-menu = needMem((size_t)(menuSize * sizeof(char *)));
-menuPos = 0;
-menu[menuPos++] = "no filter";
-menu[menuPos++] = "bi-allelic";
-menu[menuPos++] = "transition";
-menu[menuPos++] = "transversion";
-menu[menuPos++] = "complex";
-cgiMakeDropList(HAP_TYPE, menu, menuSize,
- cartCgiUsualString(cart, HAP_TYPE, HAP_TYPE_DEFAULT));
-freez(&menu);
+static char *mixedMenu[] = { "no filter", "mixed", "not mixed" };
+cgiMakeDropList(HAP_POP_MIXED, mixedMenu, 3,
+ cartUsualString(cart, HAP_POP_MIXED, HAP_FILTER_DEFAULT));
+
+puts("<BR><B>Monomorphism:</B><BR>");
+static char *noYesNoMenu[] = { "no filter", "yes", "no" };
+char **pops = isPhaseIII ? hapmapPhaseIIIPops : hapmapPhaseIIPops;
+int popCount = isPhaseIII ? HAP_PHASEIII_POPCOUNT : HAP_PHASEII_POPCOUNT;
+puts("<TABLE BORDERWITH=0>");
+int cellCount = 0, i;
+char cartVar[128];
+for (i = 0; i < popCount; i++)
+ {
+ char table[HDB_MAX_TABLE_STRING];
+ safef(table, sizeof(table), "hapmapSnps%s", pops[i]);
+ if (sqlTableExists(conn, table))
+ {
+ if (cellCount == 0)
+ puts("<TR>");
+ printf("<TD align=right><B>%s:</B></TD><TD>", pops[i]);
+ safef(cartVar, sizeof(cartVar), "%s_%s", HAP_MONO_PREFIX, pops[i]);
+ cgiMakeDropList(cartVar, noYesNoMenu, 3,
+ cartUsualString(cart, HAP_MONO_PREFIX, HAP_FILTER_DEFAULT));
+ printf("</TD>\n");
+ cellCount += 2;
+ if (cellCount == 12)
+ {
+ puts("</TR>");
+ cellCount = 0;
+ }
+ }
+ }
+if (cellCount != 0)
+ {
+ while (cellCount++ < 12)
+ puts("</TD>");
+ puts("</TR>");
+ }
+puts("</TABLE>");
+
+puts("<BR><B>Polymorphism type:</B> ");
+static char *typeMenu[] = { "no filter", "bi-allelic", "transition", "transversion", "complex" };
+cgiMakeDropList(HAP_TYPE, typeMenu, 5,
+ cartUsualString(cart, HAP_TYPE, HAP_FILTER_DEFAULT));
puts("<BR><BR><B>Minor allele frequency in any population: min:</B> ");
-minFreq = atof(cartUsualString(cart, HAP_MIN_FREQ, HAP_MIN_FREQ_DEFAULT));
+float minFreq = atof(cartUsualString(cart, HAP_MIN_FREQ, HAP_MIN_FREQ_DEFAULT));
cgiMakeDoubleVar(HAP_MIN_FREQ, minFreq, 6);
puts("<B>max:</B> ");
-maxFreq = atof(cartUsualString(cart, HAP_MAX_FREQ, HAP_MAX_FREQ_DEFAULT));
+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");
+puts(" (range: 0.0 to 0.5)\n");
puts("<BR><B>Overall heterozygosity: </B>");
puts("<B>min:</B> ");
-minHet = atof(cartUsualString(cart, HAP_MIN_HET, HAP_MIN_HET_DEFAULT));
+float minHet = atof(cartUsualString(cart, HAP_MIN_HET, HAP_MIN_HET_DEFAULT));
cgiMakeDoubleVar(HAP_MIN_HET, minHet, 6);
puts("<B>max:</B> ");
-maxHet = atof(cartUsualString(cart, HAP_MAX_HET, HAP_MAX_HET_DEFAULT));
+float maxHet = atof(cartUsualString(cart, HAP_MAX_HET, HAP_MAX_HET_DEFAULT));
cgiMakeDoubleVar(HAP_MAX_HET, maxHet, 6);
-puts("(range: 0.0 to 0.5)\n");
-
-puts("<BR><BR><B>Chimp allele:</B> ");
-menuSize = 5;
-menu = needMem((size_t)(menuSize * sizeof(char *)));
-menuPos = 0;
-menu[menuPos++] = "no filter";
-menu[menuPos++] = "available";
-menu[menuPos++] = "matches major human allele";
-menu[menuPos++] = "matches minor human allele";
-menu[menuPos++] = "matches neither human allele";
-cgiMakeDropList(HAP_CHIMP, menu, menuSize,
- cartCgiUsualString(cart, HAP_CHIMP, HAP_CHIMP_DEFAULT));
-freez(&menu);
-
-minChimpQual = atoi(cartUsualString(cart, HAP_CHIMP_QUAL, HAP_CHIMP_QUAL_DEFAULT));
-printf("<B>Minimum quality score:</B> ");
-cgiMakeIntVar(HAP_CHIMP_QUAL, minChimpQual, 4);
-puts("(range: 0 to 100)\n");
-
-puts("<BR><B>Macaque allele:</B> ");
-menuSize = 5;
-menu = needMem((size_t)(menuSize * sizeof(char *)));
-menuPos = 0;
-menu[menuPos++] = "no filter";
-menu[menuPos++] = "available";
-menu[menuPos++] = "matches major human allele";
-menu[menuPos++] = "matches minor human allele";
-menu[menuPos++] = "matches neither human allele";
-cgiMakeDropList(HAP_MACAQUE, menu, menuSize,
- cartCgiUsualString(cart, HAP_MACAQUE, HAP_MACAQUE_DEFAULT));
-freez(&menu);
-
-minMacaqueQual = atoi(cartUsualString(cart, HAP_MACAQUE_QUAL, HAP_MACAQUE_QUAL_DEFAULT));
-printf("<B>Minimum quality score:</B> ");
-cgiMakeIntVar(HAP_MACAQUE_QUAL, minMacaqueQual, 4);
-puts("(range: 0 to 100)\n");
+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("<P><TABLE>");
+for (i = 0; hapmapOrthoSpecies[i] != NULL; i++)
+ {
+ printf("<TR><TD><B>%s allele:</B></TD>\n<TD>", hapmapOrthoSpecies[i]);
+ safef(cartVar, sizeof(cartVar), "%s_%s", HAP_ORTHO_PREFIX, hapmapOrthoSpecies[i]);
+ cgiMakeDropList(cartVar, orthoMenu, 5,
+ cartUsualString(cart, cartVar, HAP_FILTER_DEFAULT));
+ puts("</TD>");
+ safef(cartVar, sizeof(cartVar), "%s_%s", HAP_ORTHO_QUAL_PREFIX, hapmapOrthoSpecies[i]);
+ int minQual = atoi(cartUsualString(cart, cartVar, HAP_ORTHO_QUAL_DEFAULT));
+ puts("<TD><B>Minimum quality score:</B></TD>\n<TD>");
+ cgiMakeIntVar(cartVar, minQual, 4);
+ puts(" (range: 0 to 100)</TD></TR>\n");
+ }
+puts("</TABLE>");
puts("</P>\n");
-
-printf("<P><B>Select subtracks to display:</B></P>\n");
+printf("<B>Select subtracks to display:</B><BR>\n");
+hFreeConn(&conn);
}
void pcrResultUi(struct trackDb *tdb)
+/* Result from hgPcr query. */
{
struct targetDb *target;
if (! pcrResultParseCart(database, cart, NULL, NULL, &target))
return;