0b57a1f33657ef6d6448b2d2995c89d5a996d43f
kate
  Wed Jan 23 13:58:11 2013 -0800
Sorting items in cluster by metadata made more general
diff --git src/hg/hgc/peakClusters.c src/hg/hgc/peakClusters.c
index b04094a..9105319 100644
--- src/hg/hgc/peakClusters.c
+++ src/hg/hgc/peakClusters.c
@@ -237,56 +237,61 @@
 	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(query, ",%s", field->name);
-dyStringPrintf(query, " from %s order by cellType, treatment, lab", inputTrackTable);
+    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);
 
 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