4d0b28bfaa568bde8c3dac19bc132618cd6292e0
kate
  Fri Feb 1 16:29:06 2013 -0800
Fix ordering of list of assayed cells in Clusters tracks like #9954: DNase Clusters V2
diff --git src/hg/hgc/peakClusters.c src/hg/hgc/peakClusters.c
index 9105319..09684d9 100644
--- src/hg/hgc/peakClusters.c
+++ src/hg/hgc/peakClusters.c
@@ -221,99 +221,102 @@
 }
 
 static void printMetadataForTable(char *table)
 /* If table exists, _and_ tdb associated with it exists, print out
  * a metadata link that expands on click.  Otherwise print "unavailable" */
 {
 webPrintLinkCellStart();
 struct trackDb *tdb = hashFindVal(trackHash, table);
 if (tdb == NULL)
     printf("%s info n/a", table);
 else
     compositeMetadataToggle(database, tdb, "metadata", TRUE, FALSE);
 webPrintLinkCellEnd();
 }
 
+static void queryInputTrackTable(struct dyString *query, char *inputTrackTable,
+                                struct slName *fieldList)
+/* Construct query in dyString to return contents of inputTrackTable ordered appropriately */
+{
+struct dyString *fields = dyStringNew(0);
+struct slName *field;
+dyStringPrintf(query, "select tableName ");
+for (field = fieldList; field != NULL; field = field->next)
+    dyStringPrintf(fields, ",%s", field->name);
+dyStringPrintf(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. */
 {
 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);
-struct dyString *fields = dyStringNew(0);
-dyStringPrintf(query, "select tableName ");
-struct slName *field;
-for (field = fieldList; field != NULL; field = field->next)
-    dyStringPrintf(fields, ",%s", field->name);
-dyStringPrintf(query, "%s from %s", fields->string, inputTrackTable);
-if (fieldList != NULL)
-    // skip leading comma
-    dyStringPrintf(query, " order by %s", fields->string+1);
+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);
-dyStringFree(&fields);
 }
 
 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)
     {
     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);
-dyStringPrintf(query, "select tableName");
-struct slName *field;
-for (field = fieldList; field != NULL; field = field->next)
-    dyStringPrintf(query, ",%s", field->name);
-dyStringPrintf(query, " from %s", inputTrackTable);
+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);
     printControlledVocabFields(row+1, fieldCount, fieldList, vocabFile, vocabHash);
     printMetadataForTable(row[0]);
     }
 
 
 sqlFreeResult(&sr);