8cf5d084511a9bbd9d28edf8f5508d9df1ff98eb hiram Mon May 13 14:41:26 2024 -0700 in the absence of a 2bit file assume it is a track hub attach to a GenArk hub diff --git src/hg/makeDb/dbDbToHubTxt/dbDbToHubTxt.c src/hg/makeDb/dbDbToHubTxt/dbDbToHubTxt.c index dc2f6b8..e963c54 100644 --- src/hg/makeDb/dbDbToHubTxt/dbDbToHubTxt.c +++ src/hg/makeDb/dbDbToHubTxt/dbDbToHubTxt.c @@ -1,92 +1,121 @@ /* dbDbToHubTxt - Reformat dbDb line to hub and genome stanzas for assembly hubs. */ #include "common.h" #include "linefile.h" #include "hash.h" #include "options.h" #include "hdb.h" #include "dbDb.h" #include "blatServers.h" void usage() /* Explain usage and exit. */ { errAbort( "dbDbToHubTxt - Reformat dbDb line to hub and genome stanzas for assembly hubs\n" "usage:\n" " dbDbToHubTxt database email groups hubAndGenome.txt\n" "options:\n" " -xxx=XXX\n" ); } /* Command line validation table. */ static struct optionSpec options[] = { {NULL, 0}, }; void dbDbToHubTxt(char *db, char *email, char *groups, char *outFile) /* dbDbToHubTxt - Reformat dbDb line to hub and genome stanzas for assembly hubs. */ { +/* check to see if this is an assembly hub or a track hub */ +char twoBit[PATH_LEN]; +safef(twoBit, sizeof(twoBit), "/gbdb/%s/%s.2bit", db, db); +boolean trackHub = TRUE; /* assume trackHub */ +if (fileExists(twoBit)) + trackHub = FALSE; /* twoBit file exists, not a trackHub */ + struct dbDb *dbDb = hDbDb(db); if (dbDb == NULL) errAbort("No dbDb entry for %s\n", db); +char genArkHub[PATH_LEN]; /* will need GC accession for trackHub */ +/* expecting sourceName to have the GC accession as last word in parens: + sourceName: GRC BN/NHsdMcwi (GCA_036323735.1) + */ +if (trackHub) + { + char *longLabel = cloneString(dbDb->sourceName); + char *words[1024]; + int wordCount = chopByWhite(longLabel, words, sizeof(words)); + stripChar(words[wordCount-1], '('); + stripChar(words[wordCount-1], ')'); + safef(genArkHub, sizeof(genArkHub), "%s", words[wordCount-1]); + } + FILE *f = mustOpen(outFile, "w"); +if (trackHub) + fprintf(f, "hub %s track hub\n", genArkHub); +else fprintf(f, "hub %s genome assembly\n", db); fprintf(f, "shortLabel %s\n", dbDb->description); fprintf(f, "longLabel %s\n", dbDb->sourceName); fprintf(f, "email %s\n", email); fprintf(f, "desriptionUrl %s\n", dbDb->htmlPath); fprintf(f, "useOneFile on\n"); fprintf(f, "\n"); +if (trackHub) + fprintf(f, "genome %s\n", genArkHub); +else + { fprintf(f, "genome %s\n", db); fprintf(f, "taxId %d\n", dbDb->taxId); fprintf(f, "groups %s\n", groups); fprintf(f, "description %s\n", dbDb->description); fprintf(f, "twoBitPath /gbdb/%s/%s.2bit\n", db, db); fprintf(f, "chromAliasBb /gbdb/%s/hubs/chromAlias.bb\n", db); fprintf(f, "chromSizes /gbdb/%s/hubs/chromSizes.txt\n", db); fprintf(f, "organism %s\n", dbDb->organism); fprintf(f, "defaultPos %s\n", dbDb->defaultPos); fprintf(f, "scientificName %s\n", dbDb->scientificName); fprintf(f, "htmlPath %s\n", dbDb->htmlPath); //struct blatServerTable *blat = hFindBlatServer(char *db, boolean isTrans) struct blatServerTable *blat = hFindBlatServer(db, FALSE); if (blat) { if (blat->isDynamic) fprintf(f, "blat %s %s dynamic %s\n", blat->host, blat->port, db); else fprintf(f, "blat %s %s\n", blat->host, blat->port); if (hgPcrOk(db)) fprintf(f, "isPcr %s %s dynamic %s\n", blat->host, blat->port, db); } // now get transblat blat = hFindBlatServer(db, TRUE); if (blat) { if (blat->isDynamic) fprintf(f, "transBlat %s %s dynamic %s\n", blat->host, blat->port, db); else fprintf(f, "transBlat %s %s\n", blat->host, blat->port); } + } fprintf(f, "\n"); } int main(int argc, char *argv[]) /* Process command line. */ { optionInit(&argc, argv, options); if (argc != 5) usage(); dbDbToHubTxt(argv[1], argv[2], argv[3], argv[4]); return 0; }