2a20896498b6edf0c19565c8f8a19b29326da08c ceisenhart Thu May 11 11:38:52 2017 -0700 Putting COSMIC code back into hgc.c will remove again later, refs #14461 diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 6e5de89..4d7f9bb 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -9866,30 +9866,219 @@ printPosOnChrom(chrom, atoi(chromStart), atoi(chromEnd), NULL, FALSE, itemName); } sqlFreeResult(&sr); hFreeConn(&conn); } } void doGad(struct trackDb *tdb, char *item, char *itemForUrl) /* Put up GAD track info. */ { genericHeader(tdb, item); printGadDetails(tdb, item, FALSE); printTrackHtml(tdb); } +void printCosmicDetails(struct trackDb *tdb, char *itemName) +/* Print details of a COSMIC entry. */ +{ +struct sqlConnection *conn = hAllocConn(database); +struct sqlConnection *conn2 = hAllocConn(database); +char query[1024]; +char query2[1024]; +struct sqlResult *sr; +struct sqlResult *sr2; +char **row; +char **row2; + +char *chp; +char indent1[40] = {" "}; +char indent2[40] = {""}; + +char *gene_name, *accession_number; +// char $source, *cosmic_mutation_id; unused variable +char *mut_description, *mut_syntax_cds, *mut_syntax_aa; +char *chromosome, *grch37_start, *grch37_stop, *mut_nt; +char *mut_aa, *tumour_site, *mutated_samples, *examined_samples, *mut_freq; +char *url = tdb->url; + +char *chrom, *chromStart, *chromEnd; +chrom = cartOptionalString(cart, "c"); +chromStart = cartOptionalString(cart, "o"); +chromEnd = cartOptionalString(cart, "t"); + +sqlSafef(query, sizeof(query), + "select source,cosmic_mutation_id,gene_name,accession_number,mut_description,mut_syntax_cds,mut_syntax_aa," + "chromosome,grch37_start,grch37_stop,mut_nt,mut_aa,tumour_site,mutated_samples,examined_samples,mut_freq" + " from cosmicRaw where cosmic_mutation_id='%s'", + itemName); + +sr = sqlMustGetResult(conn, query); +row = sqlNextRow(sr); +if (row != NULL) + { + int ii; + boolean multipleTumorSites; + char *indentString; + + ii=0; + + ii++; // source = row[ii];ii++; unused variable + ii++; // cosmic_mutation_id = row[ii];ii++; unused variable + gene_name = row[ii];ii++; + accession_number = row[ii];ii++; + mut_description = row[ii];ii++; + mut_syntax_cds = row[ii];ii++; + mut_syntax_aa = row[ii];ii++; + + chromosome = row[ii];ii++; + grch37_start = row[ii];ii++; + grch37_stop = row[ii];ii++; + mut_nt = row[ii];ii++; + mut_aa = row[ii];ii++; + tumour_site = row[ii];ii++; + mutated_samples = row[ii];ii++; + examined_samples = row[ii];ii++; + mut_freq = row[ii];ii++; + + // chromosome name adjustment + if (sameString(chromosome, "23")) + chromosome = "X"; + if (sameString(chromosome, "24")) + chromosome = "Y"; + if (sameString(chromosome, "25")) + chromosome = "M"; + + chp = strstr(itemName, "COSM")+strlen("COSM"); + printf("<B>COSMIC ID:</B> <A HREF=\"%s%s\" TARGET=_BLANK>%s</A> (details at COSMIC site)", url, chp, chp); + + // Embed URL to COSMIC site per COSMICT request. + // printf("<BR><B>Source:</B> "); + // printf("<A HREF=\"http://cancer.sanger.ac.uk/cancergenome/projects/cosmic/\" TARGET=_BLANK>%s</A>\n", source); + + printf("<BR><B>Gene Name:</B> %s\n", gene_name); + printf("<BR><B>Accession Number:</B> %s\n", accession_number); + printf("<BR><B>Genomic Position:</B> chr%s:%s-%s", chromosome, grch37_start, grch37_stop); + printf("<BR><B>Mutation Description:</B> %s\n", mut_description); + printf("<BR><B>Mutation Syntax CDS:</B> %s\n", mut_syntax_cds); + printf("<BR><B>Mutation Syntax AA:</B> %s\n", mut_syntax_aa); + printf("<BR><B>Mutation NT:</B> %s\n", mut_nt); + printf("<BR><B>Mutation AA:</B> %s\n", mut_aa); + + sqlSafef(query2, sizeof(query2), + "select count(tumour_site) from cosmicRaw where cosmic_mutation_id='%s'", itemName); + + sr2 = sqlMustGetResult(conn2, query2); + row2 = sqlNextRow(sr2); + if ((atoi(row2[0])) > 1) + { + multipleTumorSites = TRUE; + indentString = indent1; + } + else + { + multipleTumorSites = FALSE; + indentString = indent2; + } + sqlFreeResult(&sr2); + + sqlSafef(query2, sizeof(query2), + "select tumour_site,mutated_samples,examined_samples,mut_freq " + " from cosmicRaw where cosmic_mutation_id='%s' order by tumour_site", + itemName); + + sr2 = sqlMustGetResult(conn2, query2); + row2 = sqlNextRow(sr2); + while (row2 != NULL) + { + int ii; + ii=0; + tumour_site = row2[ii];ii++; + mutated_samples = row2[ii];ii++; + examined_samples = row2[ii];ii++; + mut_freq = row2[ii];ii++; + + if (multipleTumorSites) printf("<BR>"); + printf("<BR><B>%sTumor Site:</B> %s\n", indentString, tumour_site); + printf("<BR><B>%sMutated Samples:</B> %s\n", indentString, mutated_samples); + printf("<BR><B>%sExamined Samples:</B> %s\n", indentString, examined_samples); + printf("<BR><B>%sMutation Frequency:</B> %s\n", indentString, mut_freq); + row2 = sqlNextRow(sr2); + } + sqlFreeResult(&sr2); + + sqlSafef(query2, sizeof(query2), + "select sum(mutated_samples) from cosmicRaw where cosmic_mutation_id='%s'", + itemName); + + sr2 = sqlMustGetResult(conn2, query2); + row2 = sqlNextRow(sr2); + if (row2 != NULL) + { + printf("<BR><BR><B>Total Mutated Samples:</B> %s\n", row2[0]); + //printf("<br>%s ", row2[0]); + } + sqlFreeResult(&sr2); + + sqlSafef(query2, sizeof(query2), + "select sum(examined_samples) from cosmicRaw where cosmic_mutation_id='%s'", + itemName); + sr2 = sqlMustGetResult(conn2, query2); + row2 = sqlNextRow(sr2); + if (row2 != NULL) + { + printf("<BR><B>Total Examined Samples:</B> %s\n", row2[0]); + } + sqlFreeResult(&sr2); + sqlSafef(query2, sizeof(query2), + "select sum(mutated_samples)*100/sum(examined_samples) from cosmicRaw where cosmic_mutation_id='%s'", + itemName); + sr2 = sqlMustGetResult(conn2, query2); + row2 = sqlNextRow(sr2); + if (row2 != NULL) + { + char *chp; + chp = strstr(row2[0], "."); + if ((chp != NULL) && (strlen(chp) > 3)) + { + chp++; + chp++; + chp++; + chp++; + *chp = '\0'; + } + printf("<BR><B>Total Mutation Frequency:</B> %s%c\n", row2[0], '%'); + //printf("<br>%s", row2[0]); + } + sqlFreeResult(&sr2); + + } + +sqlFreeResult(&sr); +hFreeConn(&conn); + +printf("<HR>"); +printPosOnChrom(chrom, atoi(chromStart), atoi(chromEnd), NULL, FALSE, itemName); +} + +void doCosmic(struct trackDb *tdb, char *item) +/* Put up COSMIC track info. */ +{ +genericHeader(tdb, item); +printCosmicDetails(tdb, item); +printTrackHtml(tdb); +} void printDecipherDetails(struct trackDb *tdb, char *itemName, boolean encode) /* Print details of a DECIPHER entry. */ { struct sqlConnection *conn = hAllocConn(database); char query[256]; struct sqlResult *sr; char **row; struct sqlConnection *conn2 = hAllocConn(database); char query2[256]; struct sqlResult *sr2; char **row2; char *strand={"+"}; int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); @@ -26316,30 +26505,34 @@ { doParDetails(tdb, item); } else if (startsWith("pubs", table)) { doPubsDetails(tdb, item); } else if (tdb != NULL && startsWith("bedDetail", tdb->type)) { doBedDetail(tdb, NULL, item); } else if (startsWith("numtS", table)) { doNumtS(tdb, item); } +else if (startsWith("cosmic", table)) + { + doCosmic(tdb, item); + } else if (sameString("geneReviews", table)) { doGeneReviews(tdb, item); } else if (startsWith("qPcrPrimers", table)) { doQPCRPrimers(tdb, item); } else if (sameString("lrg", table)) { doLrg(tdb, item); } else if (sameString("lrgTranscriptAli", table)) { doLrgTranscriptPsl(tdb, item);