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("\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("\n"); webPrintIntCell(++displayNo); printControlledVocabFields(row+1, fieldCount, fieldList, vocabFile, vocabHash); printMetadataForTable(row[0]); } sqlFreeResult(&sr);