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("Factor: %s
\n", cluster->name);
printf("Cluster Score (out of 1000): %d
\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("Motif Score #%d: %.2f (max: %.2f)
\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("Table of abbreviations for cells
\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");