a74c645505a135d5c1e923afe477cdeb9c15bded markd Wed Jul 8 22:27:42 2020 -0700 added including multiple container directoies in genome dir path to gfServer diff --git src/hg/hgBlat/hgBlat.c src/hg/hgBlat/hgBlat.c index 87a6b7a..8a8e12a 100644 --- src/hg/hgBlat/hgBlat.c +++ src/hg/hgBlat/hgBlat.c @@ -65,31 +65,31 @@ /* Information about hits on a genome assembly */ { struct genomeHits *next; char *db; /* Database name. */ char *genome; /* Genome name. */ int seqNumber; /* Submission order */ char *faName; /* fasta name */ char *dna; /* query dna */ int dnaSize; /* query dna size */ int sd; /* Connection */ char *type; /* query type = query, protQuery, transQuery */ char *xType; /* query type = dna, prot, rnax, dnax */ boolean queryRC; /* is the query reverse-complemented */ boolean complex; /* is the query complex */ boolean isProt; /* is the protein query */ - char *dynGenome; /* genome for dynamic server */ + char *dynGenomeDir; /* relative genome directory for dynamic server */ int maxGeneHits; /* Highest gene hit-count */ char *maxGeneChrom; /* Target Chrom for gene with max gene hits */ int maxGeneChromSize; /* Target Chrom Size for only prot, rnax, dnax */ int maxGeneTStart; /* Target Start Coordinate for gene with max hits */ int maxGeneTEnd; /* Target End Coordinate for gene with max hits*/ int maxGeneExons; /* Number of Exons in gene with max hits */ char maxGeneStrand[3]; /* + or - or ++ +- -+ -- Strand for gene with max hits */ char maxGeneTStrand;/* + or - TStrand for gene with max hits */ boolean done; /* Did the job get to finish */ boolean error; /* Some error happened */ char *networkErrMsg; /* Network layer error message */ struct dyString *dbg; /* Output debugging info */ struct gfResult *gfList; /* List of gfResult records */ boolean hide; /* To not show both strands, suppress the weaker-scoring one */ @@ -284,31 +284,31 @@ // ================== struct serverTable /* Information on a server. */ { char *db; /* Database name. */ char *genome; /* Genome name. */ boolean isTrans; /* Is tranlated to protein? */ char *host; /* Name of machine hosting server. */ char *port; /* Port that hosts server. */ char *nibDir; /* Directory of sequence files. */ int tileSize; /* gfServer -tileSize */ int stepSize; /* gfServer -stepSize */ int minMatch; /* gfServer -minMatch */ - char* dynGenome; /* genome name for dynamic gfServer */ + char* dynGenomeDir; /* genome name for dynamic gfServer */ }; char *typeList[] = {"BLAT's guess", "DNA", "protein", "translated RNA", "translated DNA"}; char *outputList[] = {"hyperlink", "psl", "psl no header"}; int minMatchShown = 0; static struct serverTable *databaseServerTable(char *db, boolean isTrans) /* Load blat table for a database */ { struct sqlConnection *conn = hConnectCentral(); char query[512]; struct sqlResult *sr; char **row; char dbActualName[32]; @@ -341,62 +341,61 @@ 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])) - st->dynGenome = cloneString(db); + st->dynGenomeDir = cloneString(db); sqlFreeResult(&sr); hDisconnectCentral(&conn); return st; } static struct serverTable *trackHubServerTable(char *db, boolean isTrans) /* Load blat table for a hub */ { char *host, *port; -boolean dynamic; +char *dynGenomeDir; -if (!trackHubGetBlatParams(db, isTrans, &host, &port, &dynamic)) +if (!trackHubGetBlatParams(db, isTrans, &host, &port, &dynGenomeDir)) errAbort("Cannot get blat server parameters for track hub with database %s", db); struct serverTable *st; AllocVar(st); st->db = cloneString(db); st->genome = cloneString(hGenome(db)); st->isTrans = isTrans; st->host = host; 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 (dynamic) - st->dynGenome = cloneString(trackHubAssemblyField(db, "genome")); +st->dynGenomeDir = dynGenomeDir; return st; } 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, @@ -848,49 +847,49 @@ { safef(shortName, sizeof shortName, "blat %s+%d", names->name, count - 1); safef(description, sizeof description, "blat on %d queries (%s, %s)", count, names->name, names->next->name); } else { safef(shortName, sizeof shortName, "blat %s+%d", names->name, count - 1); safef(description, sizeof description, "blat on %d queries (%s, %s, ...)", count, names->name, names->next->name); } *pName = makeNameUnique(shortName, database, cart); *pDescription = cloneString(description); } void queryServerSetup(int conn, char *db, struct dnaSeq *seq, char *type, char *xType, - boolean complex, boolean isProt, boolean queryRC, int seqNumber, char *dynGenome) + boolean complex, boolean isProt, boolean queryRC, int seqNumber, char *dynGenomeDir) /* Setup query to server. * queryRC is true when the query has been reverse-complemented */ { struct genomeHits *gH; AllocVar(gH); gH->db = cloneString(db); gH->genome = cloneString(hGenome(db)); gH->seqNumber = seqNumber; gH->faName = cloneString(seq->name); gH->dna = cloneString(seq->dna); gH->dnaSize = seq->size; gH->type = cloneString(type); gH->xType = cloneString(xType); gH->queryRC = queryRC; gH->complex = complex; gH->isProt = isProt; -gH->dynGenome = dynGenome; +gH->dynGenomeDir = dynGenomeDir; gH->sd = conn; if (gH->sd == -1) { gH->error = TRUE; gH->networkErrMsg = "Connection to gfServer failed."; } gH->dbg = dyStringNew(256); slAddHead(&pfdList, gH); } void findBestGene(struct genomeHits *gH, int queryFrame) /* Find best gene-like object with multiple linked-features. * Remember chrom start end of best gene found and total hits in the gene. * Should sort the gfResults by tStrand, chrom, tStart. * Filters on queryFrame */ @@ -988,34 +987,34 @@ 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; dyStringPrintf(gH->dbg,"query strand %s qsize %d
\n", gH->queryRC ? "-" : "+", gH->dnaSize); /* Put together query command. */ -if (gH->dynGenome == NULL) +if (gH->dynGenomeDir == NULL) safef(buf, sizeof buf, "%s%s %d", gfSignature(), gH->type, gH->dnaSize); else - safef(buf, sizeof buf, "%s%s %d %s", gfSignature(), gH->type, gH->dnaSize, gH->dynGenome); + safef(buf, sizeof buf, "%s%s %d %s", gfSignature(), gH->type, gH->dnaSize, gH->dynGenomeDir); mustWriteFd(gH->sd, buf, strlen(buf)); if (read(gH->sd, buf, 1) < 0) errAbort("queryServerFinish: read failed: %s", strerror(errno)); if (buf[0] != 'Y') errAbort("Expecting 'Y' from server, got %c", buf[0]); mustWriteFd(gH->sd, gH->dna, gH->dnaSize); if (gH->complex) { char *s = netRecieveString(gH->sd, buf); if (!s) errAbort("expected response from gfServer with tileSize"); dyStringPrintf(gH->dbg,"%s
\n", s); // from server: tileSize 4 } @@ -1314,35 +1313,35 @@ } int findGenomeParams(struct serverTable *serve) /* Send status message to server arnd report result. * Get tileSize stepSize and minMatch. */ { char buf[256]; int sd = 0; int ret = 0; /* Put together command. */ sd = gfConnectEx(serve->host, serve->port); -if (serve->dynGenome == NULL) +if (serve->dynGenomeDir == NULL) sprintf(buf, "%sstatus", gfSignature()); else sprintf(buf, "%s%s %s", gfSignature(), (serve->isTrans ? "transInfo" : "untransInfo"), - serve->dynGenome); + serve->dynGenomeDir); mustWriteFd(sd, buf, strlen(buf)); for (;;) { if (netGetString(sd, buf) == NULL) { warn("Error reading status information from %s:%s",serve->host, serve->port); ret = -1; break; } if (sameString(buf, "end")) break; else { if (startsWith("tileSize ", buf)) @@ -1605,72 +1604,72 @@ { warn("Sequence %s would take us over the %d letter limit, stopping here.", seq->name, maxTotalSize); break; } conn = gfConnectEx(serve->host, serve->port); if (isTx) { gvo->reportTargetStrand = TRUE; if (isTxTx) { if (allGenomes) queryServerSetup(conn, db, seq, "transQuery", xType, TRUE, FALSE, FALSE, seqNumber, - serve->dynGenome); + serve->dynGenomeDir); else gfAlignTransTrans(&conn, serve->nibDir, seq, FALSE, 5, tFileCache, gvo, !txTxBoth, - serve->dynGenome); + serve->dynGenomeDir); if (txTxBoth) { reverseComplement(seq->dna, seq->size); conn = gfConnectEx(serve->host, serve->port); if (allGenomes) queryServerSetup(conn, db, seq, "transQuery", xType, TRUE, FALSE, TRUE, seqNumber, - serve->dynGenome); + serve->dynGenomeDir); else gfAlignTransTrans(&conn, serve->nibDir, seq, TRUE, 5, tFileCache, gvo, FALSE, - serve->dynGenome); + serve->dynGenomeDir); } } else { if (allGenomes) queryServerSetup(conn, db, seq, "protQuery", xType, TRUE, TRUE, FALSE, seqNumber, - serve->dynGenome); + serve->dynGenomeDir); else gfAlignTrans(&conn, serve->nibDir, seq, 5, tFileCache, gvo, - serve->dynGenome); + serve->dynGenomeDir); } } else { if (allGenomes) queryServerSetup(conn, db, seq, "query", xType, FALSE, FALSE, FALSE, seqNumber, - serve->dynGenome); + serve->dynGenomeDir); else gfAlignStrand(&conn, serve->nibDir, seq, FALSE, minMatchShown, tFileCache, gvo, - serve->dynGenome); + serve->dynGenomeDir); reverseComplement(seq->dna, seq->size); conn = gfConnectEx(serve->host, serve->port); if (allGenomes) queryServerSetup(conn, db, seq, "query", xType, FALSE, FALSE, TRUE, seqNumber, - serve->dynGenome); + serve->dynGenomeDir); else gfAlignStrand(&conn, serve->nibDir, seq, TRUE, minMatchShown, tFileCache, gvo, - serve->dynGenome); + serve->dynGenomeDir); } gfOutputQuery(gvo, f); ++seqNumber; } carefulClose(&f); if (!allGenomes) { showAliPlaces(pslTn.forCgi, faTn.forCgi, NULL, serve->db, qType, tType, organism, feelingLucky); } if(!feelingLucky && !allGenomes) cartWebEnd();