88485cfa7f13affa28ec5765fe9b2db90cce42b6 markd Tue Dec 8 21:02:15 2020 -0800 hgPcr working diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c index e06488c..9661ca0 100644 --- src/hg/lib/trackHub.c +++ src/hg/lib/trackHub.c @@ -116,30 +116,37 @@ if (hel == NULL) return NULL; return (struct trackHubGenome *)hel->val; } boolean trackHubDatabase(char *database) /* Is this an assembly from an Assembly Data hub? */ { if (hubAssemblyHash == NULL) return FALSE; return trackHubGetGenome(database) != NULL; } +char *trackHubDatabaseToGenome(char *db) +/* get a database name that is either a genome database or a trackHub + * database, return the genome assembly */ +{ +return trackHubDatabase(db) ? trackHubAssemblyField(db, "genome") : db; +} + char *trackHubAssemblyField(char *database, char *field) /* Get data field from a assembly data hub. */ { struct trackHubGenome *genome = trackHubGetGenome(database); if (genome == NULL) return NULL; char *ret = hashFindVal(genome->settingsHash, field); return cloneString(ret); } static struct dbDb *makeDbDbFromAssemblyGenome(struct trackHubGenome *hubGenome) /* Make a dbdb struture from a single assembly hub database. */ @@ -1299,84 +1306,69 @@ void trackHubFindPos(struct cart *cart, char *db, char *term, struct hgPositions *hgp) /* Look for term in track hubs. Update hgp if found */ { struct trackDb *tdbList = NULL; if (trackHubDatabase(db)) { struct trackHubGenome *genome = trackHubGetGenome(db); tdbList = trackHubTracksForGenome(genome->trackHub, genome); } else tdbList = hubCollectTracks(db, NULL); findBigBedPosInTdbList(cart, db, tdbList, term, hgp, NULL); } -boolean trackHubGetPcrParams(char *database, char **pHost, char **pPort) -/* Get the isPcr params from a trackHub genome. */ -{ -char *hostPort; - -hostPort = trackHubAssemblyField(database, "isPcr"); - -if (hostPort == NULL) - return FALSE; - -hostPort = cloneString(hostPort); - -*pHost = nextWord(&hostPort); -if (hostPort == NULL) - return FALSE; -*pPort = hostPort; - -return TRUE; -} - -boolean trackHubGetBlatParams(char *database, boolean isTrans, char **pHost, char **pPort, char **pGenomeDataDir) -{ -char *setting; - -if (isTrans) +static void parseBlatPcrParams(char *database, char *type, char *setting, + char **pHost, char **pPort, char **pGenomeDataDir) +/* parser parameters for either blat or pcr */ { - setting = trackHubAssemblyField(database, "transBlat"); - } -else - { - setting = trackHubAssemblyField(database, "blat"); - } - -if (setting == NULL) - return FALSE; - char *conf = trimSpaces(cloneString(setting)); int numWords = chopByWhite(conf, NULL, 5); if ((numWords < 2) || (numWords > 4)) - errAbort("invalid configuration for hub BLAT server, expect 2 or 4 arguments: %s", setting); + errAbort("invalid configuration for hub %s server, expect 2 or 4 arguments: %s", type, setting); char *words[4]; chopByWhite(conf, words, numWords); *pHost = words[0]; *pPort = words[1]; if (numWords > 2) { if (!sameString(words[2], "dynamic")) - errAbort("invalid configuration for hub BLAT server, third argument should be 'dynamic' or omitted, got: %s", words[2]); + errAbort("invalid configuration for hub %s server, third argument should be 'dynamic' or omitted, got: %s", type, words[2]); *pGenomeDataDir = words[3]; } else *pGenomeDataDir = NULL; +} +boolean trackHubGetPcrParams(char *database, char **pHost, char **pPort, char **pGenomeDataDir) +/* Get the isPcr params from a trackHub genome. */ +{ +char *type = "isPcr"; +char *setting = trackHubAssemblyField(database, type); +parseBlatPcrParams(database, type, setting, pHost, pPort, pGenomeDataDir); +return TRUE; +} + +boolean trackHubGetBlatParams(char *database, boolean isTrans, char **pHost, char **pPort, char **pGenomeDataDir) +{ +char *type = isTrans ? "transBlat" : "blat"; +char *setting = trackHubAssemblyField(database, type); +if (setting == NULL) + return FALSE; +parseBlatPcrParams(database, type, setting, pHost, pPort, pGenomeDataDir); return TRUE; } void hubCheckBigDataUrl(struct trackHub *hub, struct trackHubGenome *genome, struct trackDb *tdb) /* Check remote file exists and is of correct type. Wrap this in error catcher */ { char *relativeUrl = trackDbSetting(tdb, "bigDataUrl"); if (relativeUrl != NULL) { char *type = trackDbRequiredSetting(tdb, "type"); char *bigDataUrl = trackHubRelativeUrl(genome->trackDbFile, relativeUrl); char *bigDataIndex = NULL; char *relIdxUrl = trackDbSetting(tdb, "bigDataIndex"); if (relIdxUrl != NULL)