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("\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