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