bd96b173fc3f0fd100cb94a73d314b2d8c59e6af
kate
Tue Jan 20 15:08:42 2015 -0800
Merge duplicated code. refs #14353
diff --git src/hg/hgc/peakClusters.c src/hg/hgc/peakClusters.c
index df02db2..48e31e7 100644
--- src/hg/hgc/peakClusters.c
+++ src/hg/hgc/peakClusters.c
@@ -123,100 +123,70 @@
struct slName *fieldList)
/* Construct query in dyString to return contents of inputTrackTable ordered appropriately */
{
struct dyString *fields = dyStringNew(0);
struct slName *field;
sqlDyStringPrintf(query, "select tableName ");
for (field = fieldList; field != NULL; field = field->next)
sqlDyStringPrintfFrag(fields, ",%s", field->name);
sqlDyStringPrintf(query, "%-s from %s", fields->string, inputTrackTable);
if (fieldList != NULL)
// skip leading comma
dyStringPrintf(query, " order by %s", fields->string+1);
dyStringFree(&fields);
}
-static void printPeakClusterTableHits(struct bed *cluster, struct sqlConnection *conn,
- char *inputTrackTable, struct slName *fieldList, char *vocab)
-/* Put out a lines in an html table that shows assayed sources that have hits in this
- * cluster, or if invert is set, that have misses. */
+
+static void printPeakClusterInfo(struct sqlConnection *conn, char *inputTrackTable,
+ struct slName *fieldList, char *vocab, struct bed *cluster)
+/* Print an HTML table showing sources with hits in the cluster, along with signal.
+ If cluster is NULL, show all sources assayed */
{
char *vocabFile = NULL;
struct hash *vocabHash = NULL;
if (vocab)
{
vocabFile = cloneFirstWord(vocab);
vocabHash = getVocabHash(vocabFile);
}
/* Make the SQL query to get the table and all other fields we want to show
* from inputTrackTable. */
struct dyString *query = dyStringNew(0);
queryInputTrackTable(query, inputTrackTable, fieldList);
int displayNo = 0;
int fieldCount = slCount(fieldList);
struct sqlResult *sr = sqlGetResult(conn, query->string);
char **row;
while ((row = sqlNextRow(sr)) != NULL)
{
- char *table = row[0];
- double signal = getSignalAt(table, cluster);
- if (signal != 0)
- {
- printf("
\n");
- webPrintIntCell(++displayNo);
- webPrintDoubleCell(signal);
- printControlledVocabFields(row+1, fieldCount, fieldList, vocabFile, vocabHash);
- printMetadataForTable(table);
- }
- }
-sqlFreeResult(&sr);
-freez(&vocabFile);
-dyStringFree(&query);
-}
-
-static void printPeakClusterInputs(struct sqlConnection *conn,
- char *inputTrackTable, struct slName *fieldList, char *vocab)
-/* Print out all input tables for clustering. */
-{
-char *vocabFile = NULL;
-struct hash *vocabHash = NULL;
-if (vocab)
+ double signal = 0;
+ if (cluster != NULL)
{
- vocabFile = cloneFirstWord(vocab);
- vocabHash = getVocabHash(vocabFile);
+ char *table = row[0];
+ signal = getSignalAt(table, cluster);
+ if (signal == 0)
+ continue;
}
-
-/* Make the SQL query to get the table and all other fields we want to show
- * from inputTrackTable. */
-struct dyString *query = dyStringNew(0);
-queryInputTrackTable(query, inputTrackTable, fieldList);
-
-int displayNo = 0;
-int fieldCount = slCount(fieldList);
-struct sqlResult *sr = sqlGetResult(conn, query->string);
-char **row;
-while ((row = sqlNextRow(sr)) != NULL)
- {
printf("
\n");
webPrintIntCell(++displayNo);
+ if (signal != 0)
+ webPrintDoubleCell(signal);
printControlledVocabFields(row+1, fieldCount, fieldList, vocabFile, vocabHash);
printMetadataForTable(row[0]);
}
-
-
sqlFreeResult(&sr);
freez(&vocabFile);
dyStringFree(&query);
}
static char *factorSourceVocabLink(char *vocabFile, char *fieldName, char *fieldVal)
/* Add link to show controlled vocabulary entry for term.
* Handles 'target' (factor) which is a special case, derived from Antibody entries */
{
char *vocabType = (sameString(fieldName, "target") || sameString(fieldName, "factor")) ?
"target" : "term";
return controlledVocabLink(vocabFile, vocabType, fieldVal, fieldVal, fieldVal, "");
}
static void printFactorSourceTableHits(struct factorSource *cluster, struct sqlConnection *conn,
@@ -294,31 +264,32 @@
void doPeakClusterListItemsAssayed()
/* Put up a page that shows all experiments associated with a cluster track. */
{
struct trackDb *clusterTdb = tdbForTableArg();
cartWebStart(cart, database, "List of items assayed in %s", clusterTdb->shortLabel);
struct sqlConnection *conn = hAllocConn(database);
char *inputTableFieldDisplay = trackDbSetting(clusterTdb, "inputTableFieldDisplay");
webPrintLinkTableStart();
if (inputTableFieldDisplay)
{
struct slName *fieldList = stringToSlNames(inputTableFieldDisplay);
printClusterTableHeader(fieldList, FALSE, FALSE, FALSE);
char *vocab = trackDbSetting(clusterTdb, "controlledVocabulary");
char *inputTrackTable = trackDbRequiredSetting(clusterTdb, "inputTrackTable");
- printPeakClusterInputs(conn, inputTrackTable, fieldList, vocab);
+ printPeakClusterInfo(conn, inputTrackTable, fieldList, vocab, NULL);
+ //http://genome-test.cse.ucsc.edu/cgi-bin/hgTables?db=hg38&hgta_table=uwEnc2DnasePeaksWgEncodeEH000507
}
else
errAbort("Missing required trackDb setting %s for track %s", "inputTableFieldDisplay",
clusterTdb->track);
webPrintLinkTableEnd();
hFreeConn(&conn);
}
void doPeakClusters(struct trackDb *tdb, char *item)
/* Display detailed info about a cluster of DNase peaks from other tracks. */
{
int start = cartInt(cart, "o");
char *table = tdb->table;
int rowOffset = hOffsetPastBin(database, seqName, table);
char query[256];
@@ -345,31 +316,31 @@
{
struct slName *fieldList = stringToSlNames(inputTableFieldDisplay);
char *vocab = trackDbSetting(tdb, "controlledVocabulary");
char *inputTrackTable = trackDbRequiredSetting(tdb, "inputTrackTable");
/* Print out some information about the cluster overall. */
printf("Items in Cluster: %s of %d
\n", cluster->name,
sqlRowCount(conn, sqlCheckIdentifier(inputTrackTable)));
printf("Cluster Score (out of 1000): %d
\n", cluster->score);
printPos(cluster->chrom, cluster->chromStart, cluster->chromEnd, NULL, TRUE, NULL);
/* In a new section put up list of hits. */
webNewSection("List of Items in Cluster");
webPrintLinkTableStart();
printClusterTableHeader(fieldList, FALSE, FALSE, TRUE);
- printPeakClusterTableHits(cluster, conn, inputTrackTable, fieldList, vocab);
+ printPeakClusterInfo(conn, inputTrackTable, fieldList, vocab, cluster);
}
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);
}