00d6b45fd33ab330efcf6d6b88b0d6e9a7880281
kent
Thu Oct 28 14:54:35 2010 -0700
Redoing dataHub using new trackHub library routines. Still pretty embryonic, but once again is displaying a couple of tracks for me, this time ones that are genuinely remote. Code is activated by having a 'tracksHub' variable in the cart, which currently is only possible by hacking with cartDump.
diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index 6b68dc9..23d5ac7 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -27,30 +27,31 @@
#include "hgFind.h"
#include "hgTracks.h"
#include "trashDir.h"
#include "grp.h"
#include "versionInfo.h"
#include "web.h"
#include "cds.h"
#include "cutterTrack.h"
#include "wikiTrack.h"
#include "ctgPos.h"
#include "bed.h"
#include "bigBed.h"
#include "bigWig.h"
#include "bedCart.h"
#include "customTrack.h"
+#include "trackHub.h"
#include "cytoBand.h"
#include "ensFace.h"
#include "liftOver.h"
#include "pcrResult.h"
#include "wikiLink.h"
#include "jsHelper.h"
#include "mafTrack.h"
#include "hgConfig.h"
#include "encode.h"
#include "agpFrag.h"
#include "imageV2.h"
#include "suggest.h"
#include "searchTracks.h"
static char const rcsid[] = "$Id: doMiddle.c,v 1.1651 2010/06/11 17:53:06 larrym Exp $";
@@ -3311,71 +3312,83 @@
{
if (wordCount != 3)
errAbort("Expecting 3 words in pix line");
trackLayoutSetPicWidth(&tl, words[2]);
}
}
}
for (ct = ctList; ct != NULL; ct = ct->next)
{
hasCustomTracks = TRUE;
tg = newCustomTrack(ct);
slAddHead(pTrackList, tg);
}
}
-void addTracksFromDataHub(char *hubUrl, struct track **pTrackList)
+void addTracksFromTrackHub(char *hubName, char *hubUrl, struct track **pTrackList)
/* Load up stuff from data hub and append to list. The hubUrl points to
* a trackDb.ra format file. */
{
/* Squirrel away hub directory for later. */
char hubDir[PATH_LEN];
splitPath(hubUrl, hubDir, NULL, NULL);
/* Load trackDb.ra file and make it into proper trackDb tree */
-struct trackDb *tdb, *tdbList = trackDbFromRa(hubUrl);
-uglyf("Got %d tracks from %s
\n", slCount(tdbList), hubUrl);
+struct trackHub *hub = trackHubOpen(hubUrl);
+struct trackHubGenome *hubGenome = trackHubFindGenome(hub, database);
+if (hubGenome != NULL)
+ {
+ struct trackDb *tdb, *tdbList = trackHubTracksForGenome(hub, hubGenome);
+ uglyf("Got %d tracks from %s@%s
\n", slCount(tdbList), hubName, hubUrl);
+
+ trackDbAddTableField(tdbList);
+ trackHubAddNamePrefix(hubName, tdbList);
+ uglyf("added hub_%s_ prefix to track list
\n", hubName);
+
for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
{
trackDbFieldsFromSettings(tdb);
trackDbPolish(tdb);
}
-trackDbAddTableField(tdbList);
+ uglyf("polished tracks
\n");
+
trackDbLinkUpGenerations(tdbList);
uglyf("About to addTdbListToTrackList
\n");
uglyOne = TRUE;
addTdbListToTrackList(tdbList, NULL, pTrackList);
uglyf("Used to crash by here
\n");
+#ifdef SOON
+#endif /* SOON */
}
-void loadDataHubs(struct track **pTrackList)
+}
+
+void loadTrackHubs(struct track **pTrackList)
/* Load up stuff from data hubs and append to list. */
{
-char *dataHubs = cloneString(cartUsualString(cart, "dataHubs", NULL));
-uglyf("
dataHubs=%s\n
\n", dataHubs);
-if (dataHubs == NULL)
+char *trackHubs = cloneString(cartUsualString(cart, "trackHubs", NULL));
+uglyf("trackHubs=%s\n
\n", trackHubs);
+if (trackHubs == NULL)
return;
-int hubCount = chopByWhite(dataHubs, NULL, 10);
-char *hubArrays[hubCount];
-chopByWhite(dataHubs, hubArrays, hubCount);
-uglyf("hubCount=%d, hubArrays[0]=%s\n
\n", hubCount, hubArrays[0]);
-int i;
-for (i = 0; i\n", slCount(hubList));
+struct slPair *hub;
+for (hub = hubList; hub != NULL; hub = hub->next)
{
- addTracksFromDataHub(hubArrays[i], pTrackList);
+ addTracksFromTrackHub(hub->name, hub->val, pTrackList);
}
-uglyf("addTracksFromDataHub loop done
\n");
+slPairFreeValsAndList(&hubList);
}
boolean restrictionEnzymesOk()
/* Check to see if it's OK to do restriction enzymes. */
{
return (hTableExists("hgFixed", "cutters") &&
hTableExists("hgFixed", "rebaseRefs") &&
hTableExists("hgFixed", "rebaseCompanies"));
}
void fr2ScaffoldEnsemblLink(char *archive)
/* print out Ensembl link to appropriate scaffold there */
{
struct sqlConnection *conn = hAllocConn(database);
struct sqlResult *sr = NULL;
@@ -4031,31 +4044,31 @@
struct track *track, *trackList = NULL;
registerTrackHandlers();
/* Load regular tracks, blatted tracks, and custom tracks.
* Best to load custom last. */
loadFromTrackDb(&trackList);
if (pcrResultParseCart(database, cart, NULL, NULL, NULL))
slSafeAddHead(&trackList, pcrResultTg());
if (userSeqString != NULL) slSafeAddHead(&trackList, userPslTg());
slSafeAddHead(&trackList, oligoMatchTg());
if (restrictionEnzymesOk())
{
slSafeAddHead(&trackList, cuttersTg());
}
if (wikiTrackEnabled(database, NULL))
addWikiTrack(&trackList);
-loadDataHubs(&trackList);
+loadTrackHubs(&trackList);
#ifdef SOON
#endif /* SOON */
loadCustomTracks(&trackList);
groupTracks(&trackList, pGroupList, vis);
setSearchedTrackToPackOrFull(trackList);
if (cgiOptionalString( "hideTracks"))
changeTrackVis(groupList, NULL, tvHide);
/* Get visibility values if any from ui. */
for (track = trackList; track != NULL; track = track->next)
{
char *s = cartOptionalString(cart, track->track);
if (cgiOptionalString("hideTracks"))
{
s = cgiOptionalString(track->track);