644e660c5f6db00acf08433f9a7ed09738e13488
braney
Sun Mar 8 18:57:44 2015 -0700
add a menu in hgTracksUi to let folks choose a coalescent ancestor when
resolving duplications (per Joel)
diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index 9e1e993..01d6e4f 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -35,30 +35,34 @@
#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 "vcfUi.h"
#include "bbiFile.h"
#include "ensFace.h"
#include "microarray.h"
#include "trackVersion.h"
+#ifdef USE_HAL
+#include "halBlockViz.h"
+#endif
+
#define MAIN_FORM "mainForm"
#define WIGGLE_HELP_PAGE "../goldenPath/help/hgWiggleTrackHelp.html"
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));
printf("
Z score cutoff (default %s, minimum %s): ",
TFBS_SITES_CUTOFF_DEFAULT, TFBS_SITES_CUTOFF_MINIMUM);
@@ -2763,30 +2767,67 @@
hTvFromString(cartUsualString(cart, tdb->track, hStringFromTv(tdb->visibility)));
hTvDropDownClassVisOnly(tdb->track, tv, tdb->canPack,
tv == tvHide ? "hiddenText" : "normalText",
trackDbSetting(tdb, "onlyVisibility"));
}
#endif///ndef SUPERS_WITH_CHECKBOXES
printf("
%s", tdb->longLabel);
char *dataVersion = trackDbSetting(tdb, "dataVersion");
if (dataVersion)
printf("  %s", dataVersion);
printf(" | ");
}
printf("");
}
+#ifdef USE_HAL
+static void cfgHalSnake(struct trackDb *tdb, char *name)
+{
+boolean parentLevel = isNameAtParentLevel(tdb, name);
+if (parentLevel)
+ return;
+char *fileName = trackDbSetting(tdb, "bigDataUrl");
+char *errString;
+int handle = halOpenLOD(fileName, &errString);
+struct hal_species_t *speciesList, *sp;
+char *otherSpecies = trackDbSetting(tdb, "otherSpecies");
+extern char *database;
+
+speciesList = halGetPossibleCoalescenceLimits(handle, otherSpecies,
+ trackHubSkipHubName(database), &errString);
+
+int count = 0;
+for(sp=speciesList; sp; sp = sp->next)
+ count++;
+
+char codeVarName[1024];
+safef(codeVarName, sizeof codeVarName, "%s.coalescent", tdb->track);
+char **ancestors;
+AllocArray(ancestors, count);
+count = 0;
+for(sp=speciesList; sp; sp = sp->next)
+ {
+ ancestors[count] = sp->name;
+ count++;
+ }
+char *coalescent = cartOptionalString(cart, codeVarName);
+printf("Set Coalescent Ancestor to:");
+cgiMakeDropListFull(codeVarName, ancestors, ancestors,
+ count, coalescent, NULL);
+}
+#endif
+
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))
@@ -2929,30 +2970,34 @@
|| sameString(track, "intronEst")
|| sameString(track, "xenoMrna")
|| sameString(track, "xenoEst"))
mrnaCfgUi(cart, tdb, tdb->track, NULL, boxed);
else if (sameString(track, "lrg"))
lrgCfgUi(cart, tdb, tdb->track, NULL, boxed);
else if (sameString(track, "lrgTranscriptAli"))
lrgTranscriptAliCfgUi(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)
{
cfgByCfgType(cType,database, cart, tdb,tdb->track, NULL, boxed);
+#ifdef USE_HAL
+ if (cType == cfgSnake)
+ cfgHalSnake(tdb, tdb->track);
+#endif
}
// 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 "expRatio" (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