static boolean localizationExists(struct section *section, struct sqlConnection *conn, char *geneId) /* Return TRUE if localization and existance tables exist and have something * on this one. */ { char query[256]; /* mitopred - prediction of nuclear-encoded mitochondrial proteins */ if (swissProtAcc != NULL && sqlTableExists(conn, "mitopred")) { sqlSafef(query, sizeof(query), "select count(*) from mitopred where name = '%s' or name = '%s'", swissProtAcc, spAnyAccToId(spConn, swissProtAcc)); if (sqlQuickNum(conn, query) > 0) return TRUE; } /* SGD (Sacchromyces Genome Database) localization & abundance data */ if (sqlTablesExist(conn, "sgdLocalization sgdAbundance")) { sqlSafef(query, sizeof(query), "select count(*) from sgdLocalization where name = '%s'", geneId); if (sqlQuickNum(conn, query) > 0) return TRUE; sqlSafef(query, sizeof(query), "select count(*) from sgdAbundance where name = '%s'", geneId); if (sqlQuickNum(conn, query) > 0) return TRUE; } return FALSE; }
static boolean pathwayExists(struct pathwayLink *pl, struct sqlConnection *conn, char *geneId) /* Return TRUE if pathway exists and has data. */ { if (!sqlTablesExist(conn, pl->tables)) return FALSE; return pl->count(pl, conn, geneId) > 0; }
void addVersion(boolean strict, char *database, char *dirName, char *raName, struct hash *uniqHash, struct hash *htmlHash, struct hgFindSpec **pSpecList) /* Read in specs from raName and add them to list/database if new. */ { struct hgFindSpec *hfsList = NULL, *hfs = NULL; struct hgFindSpec *hfsNext = NULL; hfsList = hgFindSpecFromRa(database, raName, NULL); /* prune records of the incorrect release */ hfsList = pruneRelease(hfsList); if (strict) { for (hfs = hfsList; hfs != NULL; hfs = hfsNext) { hfsNext = hfs->next; if (! hTableOrSplitExists(database, hfs->searchTable)) { if (verboseLevel() > 1) printf("%s missing\n", hfs->searchTable); slRemoveEl(&hfsList, hfs); } else if (hfs->xrefTable[0] != 0) { // Use sqlTableExists because xrefTable might be $db.$table, // not supported by hTableExists / hTableOrSplitExists // NOTE hfs->xrefTable can sometimes contain a comma-separated table list, // rather than just a single table. struct sqlConnection *conn = hAllocConn(database); char *tables = replaceChars(hfs->xrefTable, ",", " "); boolean exists = sqlTablesExist(conn, tables); hFreeConn(&conn); freeMem(tables); if (! exists) { if (verboseLevel() > 1) printf("%s (xref) missing\n", hfs->xrefTable); slRemoveEl(&hfsList, hfs); } } } } for (hfs = hfsList; hfs != NULL; hfs = hfsNext) { hfsNext = hfs->next; if (! hashLookup(uniqHash, hfs->searchName)) { hashAdd(uniqHash, hfs->searchName, hfs); slAddHead(pSpecList, hfs); } } }
static char *getRefSeqAcc(char *id, char *table, char *idCol, struct sqlConnection *conn) /* Finds RefSeq accession from a cross-reference table. */ { char query[256]; struct sqlResult *sr = NULL; char **row; char *refSeqAcc = NULL; if (sqlTablesExist(conn, table)) { safef(query, sizeof(query), "select refSeq from %s where %s = '%s'", table, idCol, id); sr = sqlGetResult(conn, query); if (sr != NULL) { row = sqlNextRow(sr); refSeqAcc = cloneString(row[0]); } } sqlFreeResult(&sr); return refSeqAcc; }
char *descriptionString(char *id, struct sqlConnection *conn) /* return description as it would be printed in html, can free after use */ { char *descrBySql = NULL; char *summaryTables = genomeOptionalSetting("summaryTables"); struct dyString *description = dyStringNew(0); descrBySql = genoQuery(id, "descriptionSql", conn); dyStringPrintf(description, "<B>Description:</B> "); if (descrBySql != NULL) dyStringPrintf(description, "%s<BR>\n", descrBySql); else dyStringPrintf(description, "%s<BR>\n", "No description available"); freez(&descrBySql); if (summaryTables != NULL) { if (sqlTablesExist(conn, summaryTables)) { char *summary = genoQuery(id, "summarySql", conn); if (summary != NULL && summary[0] != 0) { summary = abbreviateSummary(summary); dyStringPrintf(description, "<B>%s", genomeSetting("summarySource")); if (genomeOptionalSetting("summaryIdSql")) { char *summaryId = genoQuery(id, "summaryIdSql", conn); if (summaryId != NULL) dyStringPrintf(description, " (%s)", summaryId); } dyStringPrintf(description, ":</B> %s", summary); freez(&summary); dyStringPrintf(description, "<BR>\n"); } } } return dyStringCannibalize(&description); }
static struct link *getLinkList(struct sqlConnection *conn, char *raFile) /* Get list of links - starting with everything in .ra file, * and making sure any associated tables and databases exist. */ { struct hash *ra, *raList = readRa(raFile, NULL); struct link *linkList = NULL, *link; for (ra = raList; ra != NULL; ra = ra->next) { if (linkOptionalField(ra, "hide") == NULL) { if (checkDatabases(linkOptionalField(ra, "databases")) && sqlTablesExist(conn, linkOptionalField(ra, "tables"))) { /* only include the wikiTrack if it is enabled */ if (sameWord(linkRequiredField(ra, "name"), "wikiTrack") && ! wikiTrackEnabled(database, NULL)) continue; AllocVar(link); link->priority = atof(linkRequiredField(ra, "priority")); link->name = linkRequiredField(ra, "name"); link->shortLabel = linkRequiredField(ra, "shortLabel"); link->idSql = linkRequiredField(ra, "idSql"); link->nameSql = linkOptionalField(ra, "nameSql"); link->nameFormat = linkOptionalField(ra, "nameFormat"); link->url = linkRequiredField(ra, "url"); link->useHgsid = (linkOptionalField(ra, "hgsid") != NULL); link->useDb = (linkOptionalField(ra, "dbInUrl") != NULL); link->preCutAt = linkOptionalField(ra, "preCutAt"); link->postCutAt = linkOptionalField(ra, "postCutAt"); slAddHead(&linkList, link); } } } slSort(&linkList, linkCmpPriority); return linkList; }
static struct otherOrg *getOtherOrgList(struct sqlConnection *conn, char *raFile) /* Get list of otherOrgs - starting with everything in .ra file, * and making sure any associated tables and databases exist. */ { struct hash *ra, *raList = readRa(raFile, NULL); struct otherOrg *otherOrgList = NULL, *otherOrg; for (ra = raList; ra != NULL; ra = ra->next) { if (otherOrgOptionalField(ra, "hide") == NULL) { if (checkDatabases(otherOrgOptionalField(ra, "databases")) && sqlTablesExist(conn, otherOrgOptionalField(ra, "tables"))) { AllocVar(otherOrg); otherOrg->priority = atof(otherOrgRequiredField(ra, "priority")); otherOrg->name = otherOrgRequiredField(ra, "name"); otherOrg->shortLabel = otherOrgRequiredField(ra, "shortLabel"); otherOrg->idSql = otherOrgRequiredField(ra, "idSql"); otherOrg->idToProtIdSql = otherOrgOptionalField(ra, "idToProtIdSql"); otherOrg->otherIdSql = otherOrgOptionalField(ra, "otherIdSql"); otherOrg->otherIdSql2 = otherOrgOptionalField(ra, "otherIdSql2"); otherOrg->genomeUrl = otherOrgOptionalField(ra, "genomeUrl"); otherOrg->sorterUrl = otherOrgOptionalField(ra, "sorterUrl"); otherOrg->geneUrl = otherOrgOptionalField(ra, "geneUrl"); otherOrg->otherUrl = otherOrgOptionalField(ra, "otherUrl"); otherOrg->otherName = otherOrgOptionalField(ra, "otherName"); otherOrg->db = otherOrgRequiredField(ra, "db"); otherOrg->pepTable = otherOrgOptionalField(ra, "pepTable"); otherOrg->geneTable = otherOrgOptionalField(ra, "geneTable"); slAddHead(&otherOrgList, otherOrg); } } } slSort(&otherOrgList, otherOrgCmpPriority); return otherOrgList; }
static void printCcds(char *kgId, struct sqlConnection *conn) /* Print out CCDS ids most closely matching the kg. */ { struct ccdsGeneMap *ccdsKgs = NULL; if (sqlTablesExist(conn, "ccdsKgMap")) ccdsKgs = ccdsGeneMapSelectByGene(conn, "ccdsKgMap", kgId, 0.0); if (ccdsKgs != NULL) { struct ccdsGeneMap *ccdsKg; hPrintf("<B>CCDS:</B> "); /* since kg is not by location (even though we have a * curGeneStart/curGeneEnd), we need to use the location in the * ccdsGeneMap */ for (ccdsKg = ccdsKgs; ccdsKg != NULL; ccdsKg = ccdsKg->next) { if (ccdsKg != ccdsKgs) hPrintf(", "); hPrintf("<A href=\"../cgi-bin/hgc?%s&g=ccdsGene&i=%s&c=%s&o=%d&l=%d&r=%d&db=%s\">%s</A>", cartSidUrlString(cart), ccdsKg->ccdsId, ccdsKg->chrom, ccdsKg->chromStart, ccdsKg->chromStart, ccdsKg->chromEnd, database, ccdsKg->ccdsId); } hPrintf("<BR>\n"); } }
static void printGeneSymbol (char *geneId, char *table, char *idCol, struct sqlConnection *conn) /* Print out official Entrez gene symbol from a cross-reference table.*/ { char query[256]; struct sqlResult *sr = NULL; char **row; char *geneSymbol; if (sqlTablesExist(conn, table)) { hPrintf("<B>Entrez Gene Official Symbol:</B> "); safef(query, sizeof(query), "select geneSymbol from %s where %s = '%s'", table, idCol, geneId); sr = sqlGetResult(conn, query); if (sr != NULL) { row = sqlNextRow(sr); geneSymbol = cloneString(row[0]); if (!sameString(geneSymbol, "")) hPrintf("%s<BR>", geneSymbol); } } sqlFreeResult(&sr); }
static void synonymPrint(struct section *section, struct sqlConnection *conn, char *id) /* Print out SwissProt comments - looking up typeId/commentVal. */ { char *protAcc = getSwissProtAcc(conn, spConn, id); char *spDisplayId; char *refSeqAcc = ""; char *mrnaAcc = ""; char *oldDisplayId; char condStr[255]; char *kgProteinID; char *parAcc; /* parent accession of a variant splice protein */ char *chp; if (isRgdGene(conn)) { rgdGene2SynonymPrint(section,conn, id); return; } if (sqlTablesExist(conn, "kgAlias")) printAlias(id, conn); if (sameWord(genome, "Zebrafish")) { char *xrefTable = "ensXRefZfish"; char *geneIdCol = "ensGeneId"; /* get Gene Symbol and RefSeq accession from Zebrafish-specific */ /* cross-reference table */ printGeneSymbol(id, xrefTable, geneIdCol, conn); refSeqAcc = getRefSeqAcc(id, xrefTable, geneIdCol, conn); hPrintf("<B>ENSEMBL ID:</B> %s", id); } else { char query[256]; char *toRefTable = genomeOptionalSetting("knownToRef"); if (toRefTable != NULL && sqlTableExists(conn, toRefTable)) { safef(query, sizeof(query), "select value from %s where name='%s'", toRefTable, id); refSeqAcc = emptyForNull(sqlQuickString(conn, query)); } if (sqlTableExists(conn, "kgXref")) { safef(query, sizeof(query), "select mRNA from kgXref where kgID='%s'", id); mrnaAcc = emptyForNull(sqlQuickString(conn, query)); } if (sameWord(genome, "C. elegans")) hPrintf("<B>WormBase ID:</B> %s<BR>", id); else hPrintf("<B>UCSC ID:</B> %s<BR>", id); } if (refSeqAcc[0] != 0) { hPrintf("<B>RefSeq Accession: </B> <A HREF=\""); printOurRefseqUrl(stdout, refSeqAcc); hPrintf("\">%s</A><BR>\n", refSeqAcc); } else if (mrnaAcc[0] != 0) { safef(condStr, sizeof(condStr), "acc = '%s'", mrnaAcc); if (sqlGetField(database, "gbCdnaInfo", "acc", condStr) != NULL) { hPrintf("<B>Representative RNA: </B> <A HREF=\""); printOurMrnaUrl(stdout, mrnaAcc); hPrintf("\">%s</A><BR>\n", mrnaAcc); } else /* do not show URL link if it is not found in gbCdnaInfo */ { hPrintf("<B>Representative RNA: %s </B>", mrnaAcc); } } if (protAcc != NULL) { kgProteinID = cloneString(""); if (hTableExists(sqlGetDatabase(conn), "knownGene") && (isNotEmpty(cartOptionalString(cart, hggChrom)) && differentWord(cartOptionalString(cart, hggChrom),"none"))) { safef(condStr, sizeof(condStr), "name = '%s' and chrom = '%s' and txStart=%s and txEnd=%s", id, cartOptionalString(cart, hggChrom), cartOptionalString(cart, hggStart), cartOptionalString(cart, hggEnd)); kgProteinID = sqlGetField(database, "knownGene", "proteinID", condStr); } hPrintf("<B>Protein: "); if (strstr(kgProteinID, "-") != NULL) { parAcc = cloneString(kgProteinID); chp = strstr(parAcc, "-"); *chp = '\0'; /* show variant splice protein and the UniProt link here */ hPrintf("<A HREF=\"http://www.uniprot.org/uniprot%s\" " "TARGET=_blank>%s</A></B>, splice isoform of ", kgProteinID, kgProteinID); hPrintf("<A HREF=\"http://www.uniprot.org/uniprot/%s\" " "TARGET=_blank>%s</A></B>\n", parAcc, parAcc); } else { hPrintf("<A HREF=\"http://www.uniprot.org/uniprot/%s\" " "TARGET=_blank>%s</A></B>\n", protAcc, protAcc); } /* show SWISS-PROT display ID if it is different than the accession ID */ /* but, if display name is like: Q03399 | Q03399_HUMAN, then don't show display name */ spDisplayId = spAnyAccToId(spConn, protAcc); if (spDisplayId == NULL) { errAbort("<br>%s seems to no longer be a valid protein ID in our latest UniProtKB DB.", protAcc); } if (strstr(spDisplayId, protAcc) == NULL) { hPrintf(" (aka %s", spDisplayId); /* show once if the new and old displayId are the same */ oldDisplayId = oldSpDisplayId(spDisplayId); if (oldDisplayId != NULL) { if (!sameWord(spDisplayId, oldDisplayId) && !sameWord(protAcc, oldDisplayId)) { hPrintf(" or %s", oldDisplayId); } } hPrintf(")<BR>\n"); } } printCcds(id, conn); }
static boolean associationOrderExists(struct order *ord, struct sqlConnection *conn) /* This returns true if needed tables exist. */ { return sqlTablesExist(conn, ord->tables); }
static void localizationPrint(struct section *section, struct sqlConnection *conn, char *geneId) /* Print out localization and abundance links. */ { char query[256], **row, *s = NULL; struct sqlResult *sr; boolean firstTime = TRUE; /* mitopred - prediction of nuclear-encoded mitochondrial proteins */ if (swissProtAcc != NULL && sqlTableExists(conn, "mitopred")) { sqlSafef(query, sizeof(query), "select confidence from mitopred where name = '%s' or name = '%s'", swissProtAcc, spAnyAccToId(spConn, swissProtAcc)); sr = sqlGetResult(conn, query); firstTime = TRUE; while ((row = sqlNextRow(sr)) != NULL) { if (firstTime) { hPrintf("<B>Mitopred:</B> mitochondrion, confidence level: "); firstTime = FALSE; } else { hPrintf(", "); } hPrintf("%s", row[0]); } sqlFreeResult(&sr); if (!firstTime) { hPrintf("<BR>"); hPrintf("Prediction of nuclear-encoded mitochondrial proteins from " "Guda et al., Bioinformatics. 2004 Jul 22;20(11):1785-94.<BR>" "For more information see " "<A HREF=\"http://mitopred.sdsc.edu/\" TARGET=_blank>" "http://mitopred.sdsc.edu/</A>.<P>"); } } /* SGD (Sacchromyces Genome Database) localization & abundance data */ if (sqlTablesExist(conn, "sgdLocalization sgdAbundance")) { sqlSafef(query, sizeof(query), "select value from sgdLocalization where name = '%s'", geneId); sr = sqlGetResult(conn, query); firstTime = TRUE; while ((row = sqlNextRow(sr)) != NULL) { if (firstTime) { hPrintf("<B>SGD Localization:</B> "); firstTime = FALSE; } else { hPrintf(", "); } hPrintf("%s", row[0]); } sqlFreeResult(&sr); if (!firstTime) { hPrintf("<BR>"); } sqlSafef(query, sizeof(query), "select abundance from sgdAbundance where name = '%s'", geneId); s = sqlQuickString(conn, query); if (s != NULL) { hPrintf("<B>SGD Abundance:</B> %s (range from 41 to 1590000)<BR>\n", s); freez(&s); } hPrintf("Protein localization data from " "Huh et al. (2003), Nature 425:686-691<BR>" "Protein abundance data from " "Ghaemmaghami et al. (2003) Nature 425:737-741<BR>" "For more information see " "<A HREF=\"http://yeastgfp.yeastgenome.org\" TARGET=_blank>" "http://yeastgfp.yeastgenome.org</A>."); } }