06d7be056190c14b85e71bc12523f18ea6815b5e markd Mon Dec 7 00:50:29 2020 -0800 BLAT mmap index support merge with master diff --git src/hg/hgPcr/hgPcr.c src/hg/hgPcr/hgPcr.c index d772ff3..cf9eaf9 100644 --- src/hg/hgPcr/hgPcr.c +++ src/hg/hgPcr/hgPcr.c @@ -15,30 +15,32 @@ #include "psl.h" #include "gfPcrLib.h" #include "cheapcgi.h" #include "htmshell.h" #include "hdb.h" #include "hui.h" #include "cart.h" #include "dbDb.h" #include "blatServers.h" #include "targetDb.h" #include "pcrResult.h" #include "trashDir.h" #include "web.h" #include "botDelay.h" #include "oligoTm.h" +#include "trackHub.h" +#include "hubConnect.h" struct cart *cart; /* The user's ui state. */ struct hash *oldVars = NULL; void usage() /* Explain usage and exit. */ { errAbort( "hgPcr - In-silico PCR CGI for UCSC\n" "usage:\n" " hgPcr XXX\n" "options:\n" " -xxx=XXX\n" ); @@ -54,38 +56,66 @@ char *host; /* Name of machine hosting server. */ char *port; /* Port that hosts server. */ char *seqDir; /* Directory of sequence files. */ }; struct targetPcrServer /* Information on a server running on non-genomic sequence, e.g. mRNA, * that has been aligned to a particular genomic assembly. */ { struct targetPcrServer *next; /* Next in list. */ char *host; /* Name of machine hosting server. */ char *port; /* Port that hosts server. */ struct targetDb *targetDb; /* All of the info about the target. */ }; +struct pcrServer *getTrackHubServers() +/* Get the list of track hubs that have PCR services. */ +{ +struct pcrServer *serverList = NULL, *server; + +struct dbDb *dbDbList = trackHubGetPcrServers(); + +for(; dbDbList; dbDbList = dbDbList->next) + { + AllocVar(server); + server->db = dbDbList->name; + server->genome = dbDbList->organism; + server->description = dbDbList->description; + trackHubGetPcrParams(server->db, &server->host, &server->port); + struct trackHubGenome *genome = trackHubGetGenome(server->db); + server->seqDir = cloneString(genome->twoBitPath); + char *ptr = strrchr(server->seqDir, '/'); + // we only want the directory name + if (ptr != NULL) + *ptr = 0; + slAddHead(&serverList, server); + } + +return serverList; +} + struct pcrServer *getServerList() /* Get list of available servers. */ { struct pcrServer *serverList = NULL, *server; struct sqlConnection *conn = hConnectCentral(); struct sqlResult *sr; char **row; +serverList = getTrackHubServers(); + /* Do a little join to get data to fit into the pcrServer. */ sr = sqlGetResult(conn, NOSQLINJ "select dbDb.name,dbDb.genome,dbDb.description,blatServers.host," "blatServers.port,dbDb.nibPath " "from dbDb,blatServers where " "dbDb.name = blatServers.db " "and blatServers.canPcr = 1 order by dbDb.orderKey" ); while ((row = sqlNextRow(sr)) != NULL) { AllocVar(server); server->db = cloneString(row[0]); server->genome = cloneString(row[1]); server->description = cloneString(row[2]); server->host = cloneString(row[3]); server->port = cloneString(row[4]); @@ -106,30 +136,32 @@ { struct pcrServer *server; for (server = serverList; server != NULL; server = server->next) { if (sameString(db, server->db)) return server; } errAbort("Can't find a server for PCR database %s\n", db); return NULL; } struct targetPcrServer *getTargetServerList(char *db, char *name) /* Get list of available non-genomic-assembly target pcr servers associated * with db (and name, if not NULL). There may be none -- that's fine. */ { +if (trackHubDatabase(db)) + return NULL; struct targetPcrServer *serverList = NULL, *server; struct sqlConnection *conn = hConnectCentral(); struct sqlConnection *conn2 = hAllocConn(db); struct sqlResult *sr; char **row; struct dyString *dy = dyStringNew(0); sqlDyStringPrintf(dy, "select b.host, b.port, t.* from targetDb as t, blatServers as b " "where b.db = t.name and t.db = '%s' and b.canPcr = 1 ", db); if (isNotEmpty(name)) sqlDyStringPrintf(dy, "and t.name = '%s' ", name); dyStringAppend(dy, "order by t.priority"); sr = sqlGetResult(conn, dy->string); @@ -225,31 +257,31 @@ ORGFORM_KEEP_ORG ORGFORM_RESET_DB ORGFORM_RESET_TARGET ORGFORM_SUBMIT ; printf("\n"); hashFree(&uniqHash); } void showAssemblies(char *genome, char *db, struct pcrServer *serverList, boolean submitOnClick) /* Put up drop-down list with assemblies on it. */ { struct pcrServer *server; char *onChangeText = ORGFORM_KEEP_PARAMS ORGFORM_KEEP_ORG ORGFORM_KEEP_DB