d947dcc75b04fd0dc921c0eb02ed988d7b4819f0 braney Mon Jun 30 16:00:56 2025 -0700 let genark hubs appear in hgConvert if we can figure out their UCSC org diff --git src/hg/lib/genark.c src/hg/lib/genark.c index 9d31bd1d39b..df599a2ae91 100644 --- src/hg/lib/genark.c +++ src/hg/lib/genark.c @@ -1,27 +1,28 @@ /* genark.c was originally generated by the autoSql program, which also * generated genark.h and genark.sql. This module links the database and * the RAM representation of objects. */ #include #include "common.h" #include "linefile.h" #include "dystring.h" #include "jksql.h" #include "genark.h" #include "hgConfig.h" #include "hdb.h" +#include "dbDb.h" char *genarkCommaSepFieldNames = "gcAccession,hubUrl,asmName,scientificName,commonName,taxId,priority,clade"; void genarkStaticLoad(char **row, struct genark *ret) /* Load a row from genark table into ret. The contents of ret will * be replaced at the next call to this function. */ { int colCount = genArkColumnCount(); ret->gcAccession = row[0]; ret->hubUrl = row[1]; ret->asmName = row[2]; ret->scientificName = row[3]; ret->commonName = row[4]; ret->taxId = sqlSigned(row[5]); @@ -371,15 +372,96 @@ return colCount; } boolean isGenArk(char *genome) /* given a genome name, see if it is in the genark table to determine * yes/no this is a genark genome assembly */ { if (isEmpty(genome)) return FALSE; char *url = genarkUrl(genome); if (isEmpty(url)) return FALSE; return TRUE; } + +struct dbDb * genarkMakeDbDb(char **row) +/* Fake a dbDb structure for a Genark hub. */ +{ +struct dbDb *dbDb; +struct hash *orgHash = genarkGetOrgHash(); + +AllocVar(dbDb); + +dbDb->name = cloneString(row[0]); +dbDb->nibPath = cloneString("genark"); +dbDb->description = cloneString(row[4]); // commonName +dbDb->scientificName = cloneString(row[3]); +dbDb->taxId = atoi(row[5]); +dbDb->genome = hashFindVal(orgHash, row[0]); +dbDb->orderKey = 99999; +dbDb->defaultPos = "default"; +if (dbDb->genome == NULL) + dbDb->genome = "Other"; + +return dbDb; +} + +struct dbDb *genarkLiftOverDbs(char *listOfAccs) +/* return list of dbDb structures for the genark genomes that match listOfAccs */ +{ +if (!cfgOption("genarkLiftOver")) + return NULL; +struct dbDb *list = NULL; +char query[64 * 1024]; + +safef(query, sizeof query, "NOSQLINJ select * from %s where gcAccession in (%s)", genarkTableName(), listOfAccs); +struct sqlConnection *conn = hConnectCentral(); +struct sqlResult *sr; +char **row; + +sr = sqlGetResult(conn, query); +while ((row = sqlNextRow(sr)) != NULL) + { + struct dbDb *dbDb = genarkMakeDbDb(row); + slAddHead(&list, dbDb); + } +slReverse(&list); +sqlFreeResult(&sr); +hDisconnectCentral(&conn); +return list; +} + +struct dbDb *genarkLiftOverDb(char *acc) +/* return dbDb structure for GC* acc */ +{ +char query[4096]; +safef(query, sizeof query, "'%s'", acc); + +return genarkLiftOverDbs(query); +} + +struct hash *genarkGetOrgHash() +/* read table that maps gcAccession to UCSC org. */ +{ +static struct hash *orgHash = NULL; + +if (orgHash != NULL) + return orgHash; +char query[64 * 1024]; + +sqlSafef(query, sizeof query, "select * from %s", "genarkOrg"); +struct sqlConnection *conn = hConnectCentral(); +struct sqlResult *sr; +char **row; +orgHash = newHash(0); + +sr = sqlGetResult(conn, query); +while ((row = sqlNextRow(sr)) != NULL) + { + hashAdd(orgHash, cloneString(row[0]), cloneString(row[1])); + } +sqlFreeResult(&sr); +hDisconnectCentral(&conn); +return orgHash; +}