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<BR>\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<BR>\n", slCount(tdbList), hubName, hubUrl); + + trackDbAddTableField(tdbList); + trackHubAddNamePrefix(hubName, tdbList); + uglyf("added hub_%s_ prefix to track list<BR>\n", hubName); + for (tdb = tdbList; tdb != NULL; tdb = tdb->next) { trackDbFieldsFromSettings(tdb); trackDbPolish(tdb); } -trackDbAddTableField(tdbList); + uglyf("polished tracks<BR>\n"); + trackDbLinkUpGenerations(tdbList); uglyf("About to addTdbListToTrackList<BR>\n"); uglyOne = TRUE; addTdbListToTrackList(tdbList, NULL, pTrackList); uglyf("Used to crash by here<BR>\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("<BR>dataHubs=%s\n<BR>\n", dataHubs); -if (dataHubs == NULL) +char *trackHubs = cloneString(cartUsualString(cart, "trackHubs", NULL)); +uglyf("trackHubs=%s\n<BR>\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<BR>\n", hubCount, hubArrays[0]); -int i; -for (i = 0; i<hubCount; ++i) +struct slPair *hubList = slPairFromString(trackHubs); +uglyf("Got %d hubs<BR>\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<BR>\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);