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("</TR><TR>\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("</TR><TR>\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("<B>Items in Cluster:</B> %s of %d<BR>\n", cluster->name, 
 	    sqlRowCount(conn, sqlCheckIdentifier(inputTrackTable)));
 	printf("<B>Cluster Score (out of 1000):</B> %d<BR>\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("<A HREF=\"%s&g=htcListItemsAssayed&table=%s\" TARGET_blank>", hgcPathAndSettings(),
 	tdb->track);
 printf("List all items assayed");
 printf("</A><BR>\n");
 webNewSection("Track Description");
 printTrackHtml(tdb);
 hFreeConn(&conn);
 }