0d5a46d70307e7f00bc09e422f09df600043b77f
kate
Wed Jan 15 15:41:53 2014 -0800
1. Split out motif display code for better modularization. Clean up motif details info (add Name, remove max score for perf reasons)
diff --git src/hg/hgc/peakClusters.c src/hg/hgc/peakClusters.c
index 01adf9f..e6b40f2 100644
--- src/hg/hgc/peakClusters.c
+++ src/hg/hgc/peakClusters.c
@@ -357,177 +357,194 @@
}
else
errAbort("Missing required trackDb setting %s for track %s",
"inputTableFieldDisplay", tdb->track);
webPrintLinkTableEnd();
}
printf("", hgcPathAndSettings(),
tdb->track);
printf("List all items assayed");
printf("
\n");
webNewSection("Track Description");
printTrackHtml(tdb);
hFreeConn(&conn);
}
-void doFactorSource(struct sqlConnection *conn, struct trackDb *tdb, char *item, int start)
-/* Display detailed info about a cluster of TFBS peaks from other tracks. */
+void doClusterMotifDetails(struct sqlConnection *conn, struct trackDb *tdb,
+ struct factorSource *cluster)
+/* Display details about TF binding motif(s) in cluster */
{
-int rowOffset = hOffsetPastBin(database, seqName, tdb->table);
-char **row;
-struct sqlResult *sr;
-char query[256], buf[256];
char *motifTable = trackDbSetting(tdb, "motifTable"); // localizations
char *motifPwmTable = trackDbSetting(tdb, "motifPwmTable"); // PWM used to draw sequence logo
char *motifMapTable = trackDbSetting(tdb, "motifMapTable"); // map target to motif
-
-sqlSafef(query, sizeof(query),
- "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d",
- tdb->table, item, seqName, start);
-sr = sqlGetResult(conn, query);
-row = sqlNextRow(sr);
-struct factorSource *cluster = NULL;
-if (row != NULL)
- cluster = factorSourceLoad(row + rowOffset);
-sqlFreeResult(&sr);
-
-if (cluster == NULL)
- errAbort("Error loading cluster from track %s", tdb->track);
-
-char *sourceTable = trackDbRequiredSetting(tdb, "sourceTable");
+char *motifName = cluster->name; /* default to same as target */
struct dnaMotif *motif = NULL;
struct dnaSeq **seqs = NULL;
struct bed6FloatScore *hits = NULL;
-char *target = item;
+char **row;
+#ifdef SHOW_MAX_SCORE
+struct sqlResult *sr;
+#endif
+char query[256], buf[256];
if (motifTable != NULL && sqlTableExists(conn, motifTable))
{
struct sqlResult *sr;
int rowOffset;
char where[256];
if (motifMapTable != NULL && sqlTableExists(conn, motifMapTable))
{
sqlSafef(query, sizeof(query),
- "select motif from %s where target = '%s'", motifMapTable, item);
+ "select motif from %s where target = '%s'", motifMapTable, cluster->name);
// TODO: perhaps sqlQuickString ?
- target = sqlQuickQuery(conn, query, buf, sizeof(buf));
+ motifName = sqlQuickQuery(conn, query, buf, sizeof(buf));
}
-
#define HIGHEST_SCORING
#ifdef HIGHEST_SCORING
- sqlSafefFrag(where, sizeof(where), "name = '%s' order by score desc", target);
+ sqlSafefFrag(where, sizeof(where), "name = '%s' order by score desc", motifName);
#else
- sqlSafefFrag(where, sizeof(where), "name = '%s'", item);
+ sqlSafefFrag(where, sizeof(where), "name = '%s'", motifName);
#endif
sr = hRangeQuery(conn, motifTable, cluster->chrom, cluster->chromStart,
cluster->chromEnd, where, &rowOffset);
#ifdef HIGHEST_SCORING
if ((row = sqlNextRow(sr)) != NULL)
#else
while ((row = sqlNextRow(sr)) != NULL)
#endif
{
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);
}
-
-char *factorLink = cluster->name;
-char *vocab = trackDbSetting(tdb, "controlledVocabulary");
-if (vocab != NULL)
- {
- char *file = cloneFirstWord(vocab);
- factorLink = controlledVocabLink(file, "term", factorLink, factorLink, factorLink, "");
- }
-printf("Factor: %s
\n", factorLink);
-printf("Cluster Score (out of 1000): %d
\n", cluster->score);
-printPos(cluster->chrom, cluster->chromStart, cluster->chromEnd, NULL, TRUE, NULL);
-
int hitCount = 0;
if (hits != NULL)
{
hitCount = slCount(hits);
if (motifPwmTable != NULL && sqlTableExists(conn, motifPwmTable))
{
- motif = loadDnaMotif(target, motifPwmTable);
+ motif = loadDnaMotif(motifName, motifPwmTable);
}
}
-
if (motif != NULL && hits != NULL)
{
struct bed6FloatScore *hit = NULL;
int i;
seqs = needMem(sizeof(struct dnaSeq *) * slCount(hits));
char posLink[1024];
- char query[256];
- float maxScore = -1;
-
+ #ifdef SHOW_MAX_SCORE
+ float maxScore = -1;
sqlSafef(query, sizeof(query),
- "select max(score) from %s where name = '%s'", motifTable, item);
+ "select max(score) from %s where name = '%s'", motifTable, motifName);
sr = sqlGetResult(conn, query);
if ((row = sqlNextRow(sr)) != NULL)
{
if(!isEmpty(row[0]))
{
maxScore = sqlFloat(row[0]);
}
}
sqlFreeResult(&sr);
+ #endif
puts("