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);