e3d6337f9da4e2e0694cdcb31ab049a80d3f98ae
larrym
  Wed Aug 4 14:53:47 2010 -0700
show motif info if TXCLUSTER_MOTIFS_TABLE is defined
diff --git src/hg/hgc/peakClusters.c src/hg/hgc/peakClusters.c
index 5102a73..157a3df 100644
--- src/hg/hgc/peakClusters.c
+++ src/hg/hgc/peakClusters.c
@@ -22,7 +22,8 @@
 #include "hgc.h"
 #include "encode/encodePeak.h"
 #include "expRecord.h"
-
+#include "bed6FloatScore.h"
+#include "txCluster.h"
 
 char *findGroupTagVal(struct trackDb *tdb, char *tag)
 /* Find value of given tag inside of subgroups field. */ 
@@ -273,6 +274,11 @@
 char **row;
 struct sqlResult *sr;
 char query[256];
+char *motifTable = NULL;
+#ifdef TXCLUSTER_MOTIFS_TABLE
+motifTable = TXCLUSTER_MOTIFS_TABLE;
+#endif
+
 safef(query, sizeof(query),
 	"select * from %s where  name = '%s' and chrom = '%s' and chromStart = %d",
 	tdb->table, item, seqName, start);
@@ -283,13 +289,72 @@
     cluster = bedLoadN(row + rowOffset, 15);
 sqlFreeResult(&sr);
 
-
 if (cluster != NULL)
     {
+    struct dnaMotif *motif = NULL;
+    struct dnaSeq **seqs = NULL;
+    struct bed6FloatScore *hits = NULL;
+
+    if(motifTable != NULL && sqlTableExists(conn, motifTable))
+        {
+        struct sqlResult *sr;
+        int rowOffset;
+        char where[256];
+
+        motif = loadDnaMotif(item, "transRegCodeMotif");
+        safef(where, sizeof(where), "name = '%s'", item);
+        sr = hRangeQuery(conn, "wgEncodeRegTfbsClusteredMotifs", cluster->chrom, cluster->chromStart,
+                         cluster->chromEnd, where, &rowOffset);
+        while ((row = sqlNextRow(sr)) != NULL)
+            {
+            struct bed6FloatScore *hit = NULL;
+            AllocVar(hit);
+            hit->chromStart = sqlUnsigned(row[rowOffset + 1]);
+            hit->chromEnd = sqlUnsigned(row[rowOffset + 2]);
+            hit->score = sqlFloat(row[rowOffset + 4]);
+            hit->strand[0] = row[rowOffset + 5][0];
+            slAddHead(&hits, hit);
+            }
+        sqlFreeResult(&sr);
+        }
+    
     printf("<B>Factor:</B> %s<BR>\n", cluster->name);
     printf("<B>Cluster Score (out of 1000):</B> %d<BR>\n", cluster->score);
+    if(motif != NULL && hits != NULL)
+        {
+        struct bed6FloatScore *hit = NULL;
+        int i;
+        seqs = needMem(sizeof(struct dnaSeq *) * slCount(hits));
+        for (hit = hits, i = 0; hit != NULL; hit = hit->next, i++)
+            {
+            char query[256];
+            float maxScore = -1;
+
+            safef(query, sizeof(query), "select max(score) from %s where name = '%s'", "wgEncodeRegTfbsClusteredMotifs", item);
+            sr = sqlGetResult(conn, query);
+            if ((row = sqlNextRow(sr)) != NULL)
+                {
+                if(!isEmpty(row[0]))
+                    {
+                    maxScore = sqlFloat(row[0]);
+                    }
+                }
+            sqlFreeResult(&sr);
+
+            struct dnaSeq *seq = hDnaFromSeq(database, seqName, hit->chromStart, hit->chromEnd, dnaLower);
+            if(hit->strand[0] == '-')
+                reverseComplement(seq->dna, seq->size);
+            seqs[i] = seq;
+            printf("<B>Motif Score #%d:</B>  %.2f (max: %.2f)<BR>\n", i + 1, hit->score, maxScore);
+            }
+        }
     printPos(cluster->chrom, cluster->chromStart, cluster->chromEnd, NULL, TRUE, NULL);
 
+    if(seqs != NULL)
+        {
+        motifMultipleHitsSection(seqs, slCount(hits), motif);
+        }
+
     /* Get list of tracks we'll look through for input. */
     char *inputTrackTable = trackDbRequiredSetting(tdb, "inputTrackTable");
     safef(query, sizeof(query), "select tableName from %s where factor='%s' order by source", inputTrackTable, cluster->name);
@@ -330,7 +395,7 @@
     char *sourceTable = trackDbRequiredSetting(tdb, "sourceTable");
     printf("<B>Table of abbreviations for cells</B><BR>\n");
     safef(query, sizeof(query), "select name,description from %s order by name", sourceTable);
-    struct sqlResult *sr = sqlGetResult(conn, query);
+    sr = sqlGetResult(conn, query);
     webPrintLinkTableStart();
     webPrintLabelCell("Symbol");
     webPrintLabelCell("Cell Type");