88485cfa7f13affa28ec5765fe9b2db90cce42b6
markd
Tue Dec 8 21:02:15 2020 -0800
hgPcr working
diff --git src/hg/hgBlat/hgBlat.c src/hg/hgBlat/hgBlat.c
index 013a9ee3..d97ce79 100644
--- src/hg/hgBlat/hgBlat.c
+++ src/hg/hgBlat/hgBlat.c
@@ -317,60 +317,61 @@
char dbActualName[32];
/* If necessary convert database description to name. */
sqlSafef(query, sizeof(query), "select name from dbDb where name = '%s'", db);
if (!sqlExists(conn, query))
{
sqlSafef(query, sizeof(query), "select name from dbDb where description = '%s'", db);
if (sqlQuickQuery(conn, query, dbActualName, sizeof(dbActualName)) != NULL)
db = dbActualName;
}
struct serverTable *st;
AllocVar(st);
/* Do a little join to get data to fit into the serverTable and grab
- * dbDb.nibPath too. check for newer dynamic flag. sqlSafef doesn't lets us
- * format in comma in field spec, so need to do this in two steps. */
-char *blatServersTbl = "blatServers"; // this can be hack to use another db.table for debugging
-char queryTmpl[512];
+ * dbDb.nibPath too. Check for newer dynamic flag and allow with or without
+ * it.
+ * For debugging, one set the variable blatServersTbl to some db.table to
+ * pick up settings from somewhere other than dbDb.blatServers.
+ */
+char *blatServersTbl = cfgOptionDefault("blatServersTbl", "blatServers");
boolean haveDynamic = sqlColumnExists(conn, blatServersTbl, "dynamic");
-safef(queryTmpl, sizeof(queryTmpl), "select dbDb.name, dbDb.description, blatServers.isTrans,"
- "blatServers.host, blatServers.port, dbDb.nibPath %s "
- "from dbDb, %s blatServers where blatServers.isTrans = %%d and "
- "dbDb.name = '%%s' and dbDb.name = blatServers.db",
- (haveDynamic ? ", blatServers.dynamic" : ""), blatServersTbl);
-sqlSafef(query, sizeof(query), queryTmpl, isTrans, db);
+sqlSafef(query, sizeof(query), "select dbDb.name, dbDb.description, blatServers.isTrans,"
+ "blatServers.host, blatServers.port, dbDb.nibPath, %s "
+ "from dbDb, %s blatServers where blatServers.isTrans = %d and "
+ "dbDb.name = '%s' and dbDb.name = blatServers.db",
+ (haveDynamic ? "blatServers.dynamic" : "0"), blatServersTbl, isTrans, db);
sr = sqlGetResult(conn, query);
if ((row = sqlNextRow(sr)) == NULL)
{
errAbort("Can't find a server for %s database %s. Click "
"here "
"to reset to default database.",
(isTrans ? "translated" : "DNA"), db,
cartSidUrlString(cart), hDefaultDb());
}
st->db = cloneString(row[0]);
st->genome = cloneString(row[1]);
st->isTrans = atoi(row[2]);
st->host = cloneString(row[3]);
st->port = cloneString(row[4]);
st->nibDir = hReplaceGbdbSeqDir(row[5], st->db);
-if (haveDynamic && atoi(row[6]))
+if (atoi(row[6]))
{
st->isDynamic = TRUE;
- st->genomeDataDir = cloneString(st->db); // db only allows directories by database
+ st->genomeDataDir = cloneString(st->db); // directories by database name for database genomes
}
sqlFreeResult(&sr);
hDisconnectCentral(&conn);
return st;
}
static struct serverTable *trackHubServerTable(char *db, boolean isTrans)
/* Load blat table for a hub */
{
char *host, *port;
char *genomeDataDir;
if (!trackHubGetBlatParams(db, isTrans, &host, &port, &genomeDataDir))
errAbort("Cannot get blat server parameters for track hub with database %s", db);
@@ -385,37 +386,30 @@
st->port = port;
struct trackHubGenome *genome = trackHubGetGenome(db);
st->nibDir = cloneString(genome->twoBitPath);
char *ptr = strrchr(st->nibDir, '/');
// we only want the directory name
if (ptr != NULL)
*ptr = 0;
if (genomeDataDir != NULL)
{
st->isDynamic = TRUE;
st->genomeDataDir = cloneString(genomeDataDir);
}
return st;
}
-static char *dynServerGenome(char *db)
-/* translate the database to the genome string to send to a dynamic
- * gfServer */
-{
-return trackHubDatabase(db) ? trackHubAssemblyField(db, "genome") : db;
-}
-
struct serverTable *findServer(char *db, boolean isTrans)
/* Return server for given database. Db can either be
* database name or description. */
{
if (trackHubDatabase(db))
return trackHubServerTable(db, isTrans);
else
return databaseServerTable(db, isTrans);
}
void findClosestServer(char **pDb, char **pOrg)
/* If db doesn't have a blat server, look for the closest db (or org) that has one,
* as hgPcr does. */
{
char *db = *pDb, *org = *pOrg;
@@ -998,44 +992,44 @@
for(gfR=gH->gfList; gfR; gfR=gfR->next)
{
gfR->qStart = gfR->qStart * qFactor + gfR->qFrame;
gfR->qEnd = gfR->qEnd * qFactor + gfR->qFrame;
gfR->tStart = gfR->tStart * tFactor + gfR->tFrame;
gfR->tEnd = gfR->tEnd * tFactor + gfR->tFrame;
}
}
void queryServerFinish(struct genomeHits *gH)
/* Report results from gfServer. */
{
char buf[256];
int matchCount = 0;
-struct gfConnection *conn = gfMayConnect(gH->host, gH->port, gH->isDynamic);
+struct gfConnection *conn = gfMayConnect(gH->host, gH->port, trackHubDatabaseToGenome(gH->db), gH->genomeDataDir);
if (conn == NULL)
{
gH->error = TRUE;
gH->networkErrMsg = "Connection to gfServer failed.";
return;
}
dyStringPrintf(gH->dbg,"query strand %s qsize %d
\n", gH->queryRC ? "-" : "+", gH->dnaSize);
/* Put together query command. */
if (gH->isDynamic)
safef(buf, sizeof buf, "%s%s %s %s %d", gfSignature(), gH->type,
- dynServerGenome(gH->db), gH->genomeDataDir, gH->dnaSize);
+ conn->genome, conn->genomeDataDir, gH->dnaSize);
else
safef(buf, sizeof buf, "%s%s %d", gfSignature(), gH->type, gH->dnaSize);
gfBeginRequest(conn);
mustWriteFd(conn->fd, buf, strlen(buf));
if (read(conn->fd, buf, 1) < 0)
errAbort("queryServerFinish: read failed: %s", strerror(errno));
if (buf[0] != 'Y')
errAbort("Expecting 'Y' from server, got %c", buf[0]);
mustWriteFd(conn->fd, gH->dna, gH->dnaSize); // Cannot shifted earlier for speed. must wait for Y confirmation.
if (gH->complex)
{
char *s = netRecieveString(conn->fd, buf);
if (!s)
@@ -1325,31 +1319,31 @@
}
int findGenomeParams(struct gfConnection *conn, struct serverTable *serve)
/* Send status message to server arnd report result.
* Get tileSize stepSize and minMatch.
*/
{
char buf[256];
int ret = 0;
/* Put together command. */
gfBeginRequest(conn);
if (serve->isDynamic)
sprintf(buf, "%s%s %s %s", gfSignature(), (serve->isTrans ? "transInfo" : "untransInfo"),
- dynServerGenome(serve->db), serve->genomeDataDir);
+ conn->genome, conn->genomeDataDir);
else
sprintf(buf, "%sstatus", gfSignature());
mustWriteFd(conn->fd, buf, strlen(buf));
for (;;)
{
if (netGetString(conn->fd, buf) == NULL)
{
warn("Error reading status information from %s:%s",serve->host, serve->port);
ret = -1;
break;
}
if (sameString(buf, "end"))
break;
else
@@ -1560,31 +1554,31 @@
#else
// read genome size
if (trackHubDatabase(database))
{
genomeSize = findGenomeSizeFromHub(database);
}
else
{
genomeSize = findGenomeSize(database);
}
minMatchShown = findMinMatch(genomeSize, qType == gftProt);
#endif
if (allResults)
minMatchShown = 0;
- conn = gfConnect(serve->host, serve->port, serve->isDynamic);
+ conn = gfConnect(serve->host, serve->port, trackHubDatabaseToGenome(serve->db), serve->genomeDataDir);
// read tileSize stepSize minMatch from server status
findGenomeParams(conn, serve);
int minLucky = (serve->minMatch * serve->stepSize + (serve->tileSize - serve->stepSize)) * xlat;
minSuggested = max(minMatchShown,minLucky);
}
int seqNumber = 0;
/* Loop through each sequence. */
for (seq = seqList; seq != NULL; seq = seq->next)
{
printf(" "); fflush(stdout); /* prevent apache cgi timeout by outputting something */
oneSize = realSeqSize(seq, !isTx);
@@ -1620,76 +1614,71 @@
warn("Sequence %s would take us over the %d letter limit, stopping here.",
seq->name, maxTotalSize);
break;
}
if (isTx)
{
gvo->reportTargetStrand = TRUE;
if (isTxTx)
{
if (allGenomes)
queryServer(serve->host, serve->port, db, seq, "transQuery", xType, TRUE, FALSE, FALSE, seqNumber,
serve->genomeDataDir);
else
{
- gfAlignTransTrans(conn, serve->nibDir, seq, FALSE, 5, tFileCache, gvo, !txTxBoth,
- dynServerGenome(serve->db), serve->genomeDataDir);
+ gfAlignTransTrans(conn, serve->nibDir, seq, FALSE, 5, tFileCache, gvo, !txTxBoth);
}
if (txTxBoth)
{
reverseComplement(seq->dna, seq->size);
if (allGenomes)
queryServer(serve->host, serve->port, db, seq, "transQuery", xType, TRUE, FALSE, TRUE, seqNumber,
serve->genomeDataDir);
else
{
- gfAlignTransTrans(conn, serve->nibDir, seq, TRUE, 5, tFileCache, gvo, FALSE,
- dynServerGenome(serve->db), serve->genomeDataDir);
+ gfAlignTransTrans(conn, serve->nibDir, seq, TRUE, 5, tFileCache, gvo, FALSE);
}
}
}
else
{
if (allGenomes)
queryServer(serve->host, serve->port, db, seq, "protQuery", xType, TRUE, TRUE, FALSE, seqNumber,
serve->genomeDataDir);
else
{
- gfAlignTrans(conn, serve->nibDir, seq, 5, tFileCache, gvo,
- dynServerGenome(serve->db), serve->genomeDataDir);
+ gfAlignTrans(conn, serve->nibDir, seq, 5, tFileCache, gvo);
}
}
}
else
{
if (allGenomes)
queryServer(serve->host, serve->port, db, seq, "query", xType, FALSE, FALSE, FALSE, seqNumber,
serve->genomeDataDir);
else
{
- gfAlignStrand(conn, serve->nibDir, seq, FALSE, minMatchShown, tFileCache, gvo,
- dynServerGenome(serve->db), serve->genomeDataDir);
+ gfAlignStrand(conn, serve->nibDir, seq, FALSE, minMatchShown, tFileCache, gvo);
}
reverseComplement(seq->dna, seq->size);
if (allGenomes)
queryServer(serve->host, serve->port, db, seq, "query", xType, FALSE, FALSE, TRUE, seqNumber,
serve->genomeDataDir);
else
{
- gfAlignStrand(conn, serve->nibDir, seq, TRUE, minMatchShown, tFileCache, gvo,
- dynServerGenome(serve->db), serve->genomeDataDir);
+ gfAlignStrand(conn, serve->nibDir, seq, TRUE, minMatchShown, tFileCache, gvo);
}
}
gfOutputQuery(gvo, f);
++seqNumber;
}
carefulClose(&f);
if (!allGenomes)
{
showAliPlaces(pslTn.forCgi, faTn.forCgi, NULL, serve->db, qType, tType,
organism, feelingLucky);
}
if(!feelingLucky && !allGenomes)
cartWebEnd();