2028f58f234220d59b228639ff4e4ead0d83d2c0 aamp Tue May 17 15:03:28 2011 -0700 Stuff to do with microarray subsetting. It might need a little smoothing over diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c index d29de3f..ad017fe 100644 --- src/hg/hgTrackUi/hgTrackUi.c +++ src/hg/hgTrackUi/hgTrackUi.c @@ -28,30 +28,31 @@ #include "hgConfig.h" #include "customTrack.h" #include "dbRIP.h" #include "tfbsConsSites.h" #include "hapmapSnps.h" #include "nonCodingUi.h" #include "expRecord.h" #include "wikiTrack.h" #include "hubConnect.h" #include "trackHub.h" #include "pcrResult.h" #include "dgv.h" #include "transMapStuff.h" #include "bbiFile.h" #include "ensFace.h" +#include "microarray.h" #define MAIN_FORM "mainForm" #define WIGGLE_HELP_PAGE "../goldenPath/help/hgWiggleTrackHelp.html" static char const rcsid[] = "$Id: hgTrackUi.c,v 1.527 2010/06/04 21:54:56 angie Exp $"; struct cart *cart = NULL; /* Cookie cart with UI settings */ char *database = NULL; /* Current database. */ char *chromosome = NULL; /* Chromosome. */ struct hash *trackHash = NULL; /* Hash of all tracks in database. */ void tfbsConsSitesUi(struct trackDb *tdb) { float tfbsConsSitesCutoff = sqlFloat(cartUsualString(cart,TFBS_SITES_CUTOFF,TFBS_SITES_CUTOFF_DEFAULT)); @@ -1068,60 +1069,58 @@ 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("<p><b>Experiment Display: </b> "); affyDropDown(varName, affyMap); printf(" <b>Color Scheme</b>: "); cgiMakeRadioButton("exprssn.color", "rg", sameString(col, "rg")); printf(" red/green "); cgiMakeRadioButton("exprssn.color", "rb", sameString(col, "rb")); printf(" red/blue "); } -void expRatioCombineDropDown(char *trackName, char *groupSettings, struct hash *allGroupings) +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[512]; -struct hash *groupGroup = hashMustFindVal(allGroupings, groupSettings); -char *combineList = hashFindVal(groupGroup, "combine"); -char *allSetting = hashMustFindVal(groupGroup, "all"); -char *defaultSetting = hashFindVal(groupGroup, "combine.default"); +char *dropDownName = expRatioCombineDLName(tdb->track); +char *defaultSelection = NULL; char *cartSetting = NULL; -struct slName *combineNames = slNameListFromComma(combineList); -struct slName *aName; -safef(dropDownName, sizeof(dropDownName), "%s.combine", trackName); -size = slCount(combineNames) + 1; +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); -slNameAddHead(&combineNames, allSetting); -for (i = 0, aName = combineNames; i < size && aName != NULL; i++, aName = aName->next) +menuArray[0] = groups->allArrays->description; +valArray[0] = groups->allArrays->name; +for (i = 1, comb = groups->combineSettings; (i < size) && (comb != NULL); i++, comb = comb->next) { - struct hash *oneGroupSetting = hashMustFindVal(allGroupings, aName->name); - char *descrip = hashMustFindVal(oneGroupSetting, "description"); - menuArray[i] = descrip; - valArray[i] = aName->name; + menuArray[i] = cloneString(comb->description); + valArray[i] = cloneString(comb->name); } -if (defaultSetting == NULL) - defaultSetting = allSetting; -cartSetting = cartUsualString(cart, dropDownName, defaultSetting); +cartSetting = cartUsualString(cart, dropDownName, defaultSelection); printf(" <b>Combine arrays</b>: "); 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); @@ -1139,42 +1138,83 @@ 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>"); cgiMakeRadioButton(radioName, "redBlue", sameString(colorSetting, "redBlue")); puts("red/blue<BR>"); cgiMakeRadioButton(radioName, "yellowBlue", sameString(colorSetting, "yellowBlue")); puts("yellow/blue<BR>\n"); cgiMakeRadioButton(radioName, "redBlueOnWhite", sameString(colorSetting, "redBlueOnWhite")); puts("red/blue on white background<BR>"); cgiMakeRadioButton(radioName, "redBlueOnYellow", sameString(colorSetting, "redBlueOnYellow")); puts("red/blue on yellow background<BR>"); } +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("<BR><B>Subset:</B><BR>"); +cgiMakeRadioButton(radioVarName, "none", (subSetting == NULL) || sameString(subSetting, "none")); +puts("no subset<BR>\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("<BR>\n"); + } +} + void expRatioUi(struct trackDb *tdb) /* UI options for the expRatio tracks. */ { -char *groupings = trackDbRequiredSetting(tdb, "groupings"); -struct hash *gHashOfHashes = NULL; -struct hash *ret = - hgReadRa(hGenome(database), database, "hgCgiData", - "microarrayGroups.ra", &gHashOfHashes); -if ((ret == NULL) && (gHashOfHashes == NULL)) +struct microarrayGroups *groups = maGetTrackGroupings(database, tdb); +if (groups == NULL) errAbort("Could not get group settings for track."); expRatioDrawExonOption(tdb); -expRatioCombineDropDown(tdb->track, groupings, gHashOfHashes); +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];