533112afe2a2005e80cdb1f82904ea65032d4302 braney Sat Oct 2 11:37:34 2021 -0700 split hg/lib into two separate libaries, one only used by the cgis diff --git src/hg/lib/lsSnpPdbChimera.c src/hg/lib/lsSnpPdbChimera.c deleted file mode 100644 index f59ad78..0000000 --- src/hg/lib/lsSnpPdbChimera.c +++ /dev/null @@ -1,185 +0,0 @@ -/* lsSnpPdbChimera - Code for interfacing to LS-SNP and Chimera. Generates - * Chimera scripts to visualize proteins with SNPs annotated. Takes an - * external python script that defines methods used in the rendering. The - * generates a .chimerax file that contains the script as well as the code to - * initialize Chimera for the specific PDB and SNP set. This also includes - * interfacing to LS-SNP/PDB, which is used to label Chimera images. - */ - -/* Copyright (C) 2014 The Regents of the University of California - * See README in this or parent directory for licensing information. */ -#include "common.h" -#include "lsSnpPdbChimera.h" -#include "obscure.h" -#include "jksql.h" -#include "lsSnpPdb.h" -#include "trashDir.h" - -/* Chimerax XML wrapper around python code in .chimerax files */ -static char *chimeraxHead = - "<?xml version=\"1.0\"?>\n" - "<ChimeraPuppet type=\"std_webdata\">\n" - " <commands>\n" - " <py_cmd>\n" - "<![CDATA[\n"; -static char *chimeraxTail = - "]]>\n" - " </py_cmd>\n" - " </commands>\n" - "</ChimeraPuppet>\n"; - -/* location of python code relative to CGI dir */ -static char *chimeraxPythonFile = "lsSnpPdbChimera.py"; - - -static void getOutFile(char *pdbId, char *other, - struct tempName *outName) -/* generate output file names, other can be NULL*/ -{ -char baseName[PATH_LEN]; -if (other != NULL) - safef(baseName, sizeof(baseName), "%s.%s", pdbId, other); -else - safecpy(baseName, sizeof(baseName), pdbId); -trashDirFile(outName, "lssnp", baseName, ".chimerax"); -} - -static void prSnp(FILE *xfh, struct lsSnpPdb *pdbSnp, char *primarySnpId) -/* output one SNP tuple entry in list passed to displayPdb function */ -{ -boolean isPrimary = (primarySnpId != NULL) && sameString(pdbSnp->snpId, primarySnpId); -fprintf(xfh, "(\"%s\", \"%c\", %d,%s), ", pdbSnp->snpId, pdbSnp->chain, - pdbSnp->snpPdbLoc, (isPrimary ? " True" : "")); -} - -static FILE *chimeraxBegin(char *outName) -/* open chimerax file and write XML and python function definitions */ -{ -FILE *xfh = mustOpen(outName, "w"); -fputs(chimeraxHead, xfh); - -FILE *pxf = mustOpen(chimeraxPythonFile, "r"); -copyOpenFile(pxf, xfh); -carefulClose(&pxf); -return xfh; -} - -static void chimeraxEnd(FILE **xfhPtr) -/* finish writing XML and close chimerax function */ -{ -fputs(chimeraxTail, *xfhPtr); -carefulClose(xfhPtr); -} - -static void chimeraxGen(struct sqlConnection *conn, - char *pdbId, char *where, - char *primarySnpId, - char *outName) -/* Generate a chimerax file for the given PDB, optionally coloring - * primarySnpId differently. The where arguments specifies which entries to - * obtain from the lsSnpPdb table. - */ -{ -FILE *xfh = chimeraxBegin(outName); - -fprintf(xfh, "\ndisplayPdb(\"%s\", (", pdbId); - -struct lsSnpPdb *pdbSnp, *pdbSnps = NULL; -if (sqlTableExists(conn, "lsSnpPdb")) - pdbSnps = sqlQueryObjs(conn, (sqlLoadFunc)lsSnpPdbLoad, sqlQueryMulti, - "SELECT * FROM lsSnpPdb WHERE %-s", where); -for (pdbSnp = pdbSnps; pdbSnp != NULL; pdbSnp = pdbSnp->next) - prSnp(xfh, pdbSnp, primarySnpId); -lsSnpPdbFreeList(&pdbSnps); - -fprintf(xfh, "))\n"); - -chimeraxEnd(&xfh); -} - -void lsSnpPdbChimeraSnpAnn(struct sqlConnection *conn, - char *pdbId, char *primarySnpId, - struct tempName *outName) -/* Generate a chimerax file for the given pdb with all non-synonymous SNPs - * that have been mapped to this protein. If primarySnpId is not NULL, it is - * colored differently than the other SNPs. Fills in outName structure. */ -{ -getOutFile(pdbId, primarySnpId, outName); -char where[512]; -sqlSafefFrag(where, sizeof(where), "(pdbId=\"%s\")", pdbId); -chimeraxGen(conn, pdbId, where, primarySnpId, outName->forCgi); -} - -struct slName *lsSnpPdbChimeraGetSnpPdbs(struct sqlConnection *conn, - char *snpId) -/* get list of PDBs to which snpId is mapped. */ -{ -if (!sqlTableExists(conn, "lsSnpPdb")) - return NULL; -char query[256]; -sqlSafef(query, sizeof(query), "SELECT distinct pdbId FROM lsSnpPdb WHERE (snpId = \"%s\")", - snpId); -struct slName *pdbIds = sqlQuickList(conn, query); -slNameSort(&pdbIds); -return pdbIds; -} - -char *lsSnpPdbChimeraGetStructType(struct sqlConnection *conn, char *pdbId) -/* Determine structure type of a PDB (NMR or X-Ray). Constant result, don't - * free. */ -{ - -char query[256], buf[32]; -sqlSafef(query, sizeof(query), "SELECT structType FROM lsSnpPdb WHERE (pdbId = \"%s\")", - pdbId); -char *structType = sqlNeedQuickQuery(conn, query, buf, sizeof(buf)); -if (sameString(structType, "XRay")) - return "X-Ray"; -else if (sameString(structType, "NMR")) - return "NMR"; -else - return NULL; -} - -boolean lsSnpPdbHasPdb(struct sqlConnection *conn, char *pdbId) -/* determine if the specified PDB has any entries in MuPIT (formerly LS-SNP) */ -{ -if (!sqlTableExists(conn, "knownToMupit")) - return FALSE; -char query[256], buf[64]; -sqlSafef(query, sizeof(query), "SELECT value FROM knownToMupit WHERE value = \"%s\" limit 1", pdbId); -return (sqlQuickQuery(conn, query, buf, sizeof(buf)) != NULL); -} - -char *lsSnpPdbGetUrlPdbSnp(char *pdbId, char *snpId) -/* get MuPIT (formerly LS-SNP) URL for a particular PDB and/or SNP. One or the two - * ids maybe null */ -{ -char url[256]; -safecpy(url, sizeof(url), "http://mupit.icm.jhu.edu/MuPIT_Interactive/?structure_id="); -if (pdbId != NULL) - { - safecat(url, sizeof(url), pdbId); - } -return cloneString(url); -} - -void lsSnpPdbChimeraGenericLink(char *pdbSpec, char *script, - char *trashDirName, char *trashBaseName, - struct tempName *chimerax) -/* Generate a chimerax file for the given pdbSpec, which can be a PDB id or a - * URL. Copies in the lsSnpPdbChimera.py file and then adds optional script python code. - * Fills in chimerax structure. - * FIXME: This is an experiment for H1N1 flu browser, this function has - * nothing to do with LS/SNP. If we decide to keep this, this should be - * split into a generic chimera module. - */ -{ -trashDirFile(chimerax, trashDirName, trashBaseName, ".chimerax"); -FILE *xfh = chimeraxBegin(chimerax->forCgi); -fprintf(xfh, "\ndisplayPdb(\"%s\", ())\n", pdbSpec); -if (script != NULL) - fputs(script, xfh); -chimeraxEnd(&xfh); -} -