dfd733e82c713d46ceb8c9d14c6421be76c5709b kate Thu May 2 16:56:12 2013 -0700 Remove obsolete code (support for 'inputTracksSubgroupDisplay' tsetting/feature, which poked through a tracks and trackDb in a related composite track for info -- to provide more features ??. The code was all bracketed with TO_BE_REMOVED. Alternate approach uses inputTableFieldDisplay setting diff --git src/hg/hgc/peakClusters.c src/hg/hgc/peakClusters.c index 09684d9..8ebdf04 100644 --- src/hg/hgc/peakClusters.c +++ src/hg/hgc/peakClusters.c @@ -1,179 +1,61 @@ /* Stuff to display details on tracks that are clusters of peaks (items) in other tracks. * In particular peaks in either ENCODE narrowPeak or broadPeak settings, and residing in * composite tracks. * * These come in two main forms currently: * DNAse hypersensitive clusters - peaks clustered across cell lines stored in bed 5 * with no special type * Transcription Factor Binding Sites (TFBS) - peaks from transcription factor ChIP-seq * across a number of transcription factors and cell lines. Stored in bed 15 * plus sourceTable with type factorSource */ -#define TO_BE_REMOVED /* Some code that is brittle we are phasing out */ - /* In particular this code demanded all tracks cluster was built on - * still exist, which isn't realistic given ENCODE data thrash */ - #include "common.h" #include "hash.h" #include "jksql.h" #include "obscure.h" #include "hCommon.h" #include "hdb.h" #include "web.h" #include "cart.h" #include "trackDb.h" #include "hui.h" #include "hgc.h" #include "encode/encodePeak.h" #include "expRecord.h" #include "bed6FloatScore.h" #include "ra.h" #include "txCluster.h" -#ifdef TO_BE_REMOVED -char *findGroupTagVal(struct trackDb *tdb, char *tag) -/* Find value of given tag inside of subgroups field. */ -{ -char *subGroups = trackDbSetting(tdb, "subGroups"); -struct slPair *el, *list = slPairFromString(subGroups); -char *val = NULL; -for (el = list; el != NULL; el = el->next) - { - if (sameString(el->name, tag)) - { - val = el->val; - break; - } - } -return val; -} -#endif /* TO_BE_REMOVED */ - -#ifdef TO_BE_REMOVED -char *mustFindGroupTagVal(struct trackDb *tdb, char *tag) -/* Find value of given tag inside of subgroups field or abort with error message. */ -{ -char *val = findGroupTagVal(tdb, tag); -if (val == NULL) - errAbort("Couldn't find %s in subGroups tag of %s", tag, tdb->track); -return val; -} -#endif /* TO_BE_REMOVED */ - -#ifdef TO_BE_REMOVED -char *findGroupLabel(struct trackDb *tdb, char *group) -/* Given name of group, ruffle through all subGroupN tags, looking for one that - * matches group */ -{ -char *groupId = mustFindGroupTagVal(tdb, group); -return compositeGroupLabel(tdb, group, groupId); -} -#endif /* TO_BE_REMOVED */ static void printClusterTableHeader(struct slName *otherCols, boolean withAbbreviation, boolean withDescription, boolean withSignal) /* Print out header fields table of tracks in cluster */ { webPrintLabelCell("#"); if (withSignal) webPrintLabelCell("signal"); if (withAbbreviation) webPrintLabelCell("abr"); struct slName *col; for (col = otherCols; col != NULL; col = col->next) webPrintLabelCell(col->name); if (withDescription) webPrintLabelCell("description"); webPrintLabelCell("more info"); } -#ifdef TO_BE_REMOVED -static void printTableInfo(struct trackDb *tdb, struct trackDb *clusterTdb, - struct slName *displayGroupList) -/* Print out info on table. */ -{ -struct slName *displayGroup; -for (displayGroup = displayGroupList; displayGroup != NULL; displayGroup = displayGroup->next) - { - char *label = findGroupLabel(tdb, displayGroup->name); - char *linkedLabel = compositeLabelWithVocabLink(database, tdb, tdb, displayGroup->name, label); - webPrintLinkCell(linkedLabel); - } -webPrintLinkCell(tdb->longLabel); -webPrintLinkCellStart(); -compositeMetadataToggle(database, tdb, "metadata", TRUE, FALSE); -webPrintLinkCellEnd(); -} -#endif /* TO_BE_REMOVED */ - -#ifdef TO_BE_REMOVED -static void showOnePeakOrMiss(struct trackDb *tdb, struct trackDb *clusterTdb, - struct encodePeak *peakList, struct slName *displayGroupList, int *pIx) -/* Show info on track and peak. Peak may be NULL in which case fewer columns will be printed. */ -{ -struct encodePeak *peak; -*pIx += 1; -printf("\n"); -webPrintIntCell(*pIx); -if (peakList) - { - webPrintLinkCellRightStart(); - printf("%g", peakList->signalValue); - for (peak = peakList->next; peak != NULL; peak = peak->next) - printf(",%g", peak->signalValue); - webPrintLinkCellEnd(); - } -printTableInfo(tdb, clusterTdb, displayGroupList); -} -#endif /* TO_BE_REMOVED */ - -#ifdef TO_BE_REMOVED -static void showMatchingTrack(char *track, struct bed *cluster, struct sqlConnection *conn, - struct trackDb *clusterTdb, struct slName *displayGroupList, boolean invert, int *pRowIx) -/* put out a line in an html table that describes the given track. */ -{ -struct trackDb *tdb = hashFindVal(trackHash, track); -if (tdb != NULL) - { - char **row; - int rowOffset = 0; - struct sqlResult *sr = hRangeQuery(conn, tdb->table, - cluster->chrom, cluster->chromStart, cluster->chromEnd, NULL, &rowOffset); - struct encodePeak *peakList = NULL; - struct slDouble *slDoubleNew(double x); - while ((row = sqlNextRow(sr)) != NULL) - { - enum encodePeakType pt = encodePeakInferTypeFromTable(database, tdb->table, tdb->type); - struct encodePeak *peak = encodePeakGeneralLoad(row + rowOffset, pt); - slAddTail(&peakList, peak); - } - if (invert) - { - if (!peakList) - showOnePeakOrMiss(tdb, clusterTdb, NULL, displayGroupList, pRowIx); - } - else - { - if (peakList) - showOnePeakOrMiss(tdb, clusterTdb, peakList, displayGroupList, pRowIx); - } - sqlFreeResult(&sr); - } -} -#endif /* TO_BE_REMOVED */ - static double getSignalAt(char *table, struct bed *cluster) /* Get (average) signal from table entries that overlap cluster */ { struct sqlConnection *conn = hAllocConn(database); int count = 0; double sum = 0; if (sqlTableExists(conn, table)) // Table might be withdrawn from data thrash { int rowOffset; struct sqlResult *sr = hRangeQuery(conn, table, cluster->chrom, cluster->chromStart, cluster->chromEnd, NULL, &rowOffset); int signalCol = sqlFieldColumn(sr, "signalValue"); if (signalCol < 0) internalErr(); char **row; @@ -372,161 +254,102 @@ char *link = controlledVocabLink(vocabFile, "term", fieldVal, fieldVal, fieldVal, ""); webPrintLinkCell(link); } else webPrintLinkCell(fieldVal); } printMetadataForTable(row[2]); } } sqlFreeResult(&sr); freez(&vocabFile); dyStringFree(&query); } - -static struct slName *findMatchingSubtracks(struct trackDb *tdb) -/* Find subtracks that match inputTracks tags. */ -{ -/* Just list look up tableName in inputTrackTable and return the list. */ -char *inputTrackTable = trackDbRequiredSetting(tdb, "inputTrackTable"); -struct sqlConnection *conn = hAllocConn(database); -char query[256]; -safef(query, sizeof(query), "select tableName from %s order by source", inputTrackTable); -struct slName *matchTrackList = sqlQuickList(conn, query); -hFreeConn(&conn); -return matchTrackList; -} - - 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 *inputTracksSubgroupDisplay = trackDbSetting(clusterTdb, "inputTracksSubgroupDisplay"); 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); } -#ifdef TO_BE_REMOVED -else if (inputTracksSubgroupDisplay) - { - struct slName *matchTrackList = findMatchingSubtracks(clusterTdb); - struct slName *matchTrack; - - struct slName *displayGroupList = stringToSlNames(inputTracksSubgroupDisplay); - printClusterTableHeader(displayGroupList, FALSE, TRUE, FALSE); - int rowIx = 0; - for (matchTrack = matchTrackList; matchTrack != NULL; matchTrack = matchTrack->next) - { - struct trackDb *tdb = hashFindVal(trackHash, matchTrack->name); - showOnePeakOrMiss(tdb, clusterTdb, NULL, displayGroupList, &rowIx); - } - } -#endif /* TO_BE_REMOVED */ else - errAbort("Missing required trackDb setting %s or %s for track %s", - "inputTracksSubgroupDisplay", "inputTableFieldDisplay", clusterTdb->track); + errAbort("Missing required trackDb setting %s for track %s", "inputTableFieldDisplay", + clusterTdb->track); webPrintLinkTableEnd(); hFreeConn(&conn); cartWebEnd(); } void doPeakClusters(struct trackDb *tdb, char *item) /* Display detailed info about a cluster of peaks from other tracks. */ { int start = cartInt(cart, "o"); char *table = tdb->table; int rowOffset = hOffsetPastBin(database, seqName, table); char query[256]; struct sqlResult *sr; char **row; struct bed *cluster = NULL; struct sqlConnection *conn = hAllocConn(database); cartWebStart(cart, database, "%s item details", tdb->shortLabel); safef(query, sizeof(query), "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d", table, item, seqName, start); sr = sqlGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) cluster = bedLoadN(row + rowOffset, 5); sqlFreeResult(&sr); if (cluster != NULL) { /* Get list of subgroups to display */ - char *inputTracksSubgroupDisplay = trackDbSetting(tdb, "inputTracksSubgroupDisplay"); char *inputTableFieldDisplay = trackDbSetting(tdb, "inputTableFieldDisplay"); if (inputTableFieldDisplay != NULL) { 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, 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); } -#ifdef TO_BE_REMOVED - else if (inputTracksSubgroupDisplay != NULL) - { - struct slName *displayGroupList = stringToSlNames(inputTracksSubgroupDisplay); - - /* Get list of tracks that match criteria. */ - struct slName *matchTrackList = findMatchingSubtracks(tdb); - struct slName *matchTrack; - - /* Print out some information about the cluster overall. */ - printf("Items in Cluster: %s of %d
\n", cluster->name, slCount(matchTrackList)); - 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(displayGroupList, FALSE, TRUE, TRUE); - int rowIx = 0; - for (matchTrack = matchTrackList; matchTrack != NULL; matchTrack = matchTrack->next) - { - showMatchingTrack(matchTrack->name, cluster, conn, tdb, displayGroupList, - FALSE, &rowIx); - } - } -#endif /* TO_BE_REMOVED */ else - errAbort("Missing required trackDb setting %s or %s for track %s", - "inputTracksSubgroupDisplay", "inputTableFieldDisplay", tdb->track); + 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); cartWebEnd(); hFreeConn(&conn); } void doFactorSource(struct sqlConnection *conn, struct trackDb *tdb, char *item, int start) /* Display detailed info about a cluster of peaks from other tracks. */ { @@ -619,90 +442,53 @@ printf("Motif Score #%d: %.2f (max: %.2f)
\n", i + 1, hit->score, maxScore); } } printPos(cluster->chrom, cluster->chromStart, cluster->chromEnd, NULL, TRUE, NULL); if(seqs != NULL) { motifMultipleHitsSection(seqs, slCount(hits), motif); } /* Get list of tracks we'll look through for input. */ char *inputTrackTable = trackDbRequiredSetting(tdb, "inputTrackTable"); safef(query, sizeof(query), "select tableName from %s where factor='%s' order by source", inputTrackTable, cluster->name); - struct slName *matchTrackList = sqlQuickList(conn, query); - struct slName *matchTrack; /* Next do the lists of hits and misses. We have the hits from the non-zero signals in * cluster->expScores. We need to figure out the sources actually assayed though - * some other way. We'll do this by one of two techniques. - * If the inputTracksSubgroupDisplay is set, we'll try and figure out what was - * assayed by looking at the subgroup stuff in trackDb, which works if everythings - * part of a composite. If not, we'll use the inputTrackTable. */ - /* Get list of subgroups to display */ - char *inputTracksSubgroupDisplay = trackDbSetting(tdb, "inputTracksSubgroupDisplay"); + * some other way. We'll do this by one of two techniques. */ char *inputTableFieldDisplay = trackDbSetting(tdb, "inputTableFieldDisplay"); if (inputTableFieldDisplay != NULL) { struct slName *fieldList = stringToSlNames(inputTableFieldDisplay); char *vocab = trackDbSetting(tdb, "controlledVocabulary"); /* In a new section put up list of hits. */ webNewSection("List of %s Items in Cluster", cluster->name); webPrintLinkTableStart(); printClusterTableHeader(fieldList, TRUE, FALSE, TRUE); printFactorSourceTableHits(cluster, conn, sourceTable, inputTrackTable, fieldList, FALSE, vocab); webPrintLinkTableEnd(); webNewSection("List of cells assayed with %s but without hits in cluster", cluster->name); webPrintLinkTableStart(); printClusterTableHeader(fieldList, TRUE, FALSE, FALSE); printFactorSourceTableHits(cluster, conn, sourceTable, inputTrackTable, fieldList, TRUE, vocab); webPrintLinkTableEnd(); } -#ifdef TO_BE_REMOVED - else if (inputTracksSubgroupDisplay != NULL) - { - struct slName *displayGroupList = stringToSlNames(inputTracksSubgroupDisplay); - - /* In a new section put up list of hits. */ - webNewSection("List of %s Items in Cluster", cluster->name); - webPrintLinkTableStart(); - printClusterTableHeader(displayGroupList, FALSE, TRUE, TRUE); - int rowIx = 0; - for (matchTrack = matchTrackList; matchTrack != NULL; matchTrack = matchTrack->next) - { - showMatchingTrack(matchTrack->name, cluster, conn, tdb, displayGroupList, - FALSE, &rowIx); - } - webPrintLinkTableEnd(); - - - webNewSection("List of cells assayed with %s but without hits in cluster", cluster->name); - webPrintLinkTableStart(); - printClusterTableHeader(displayGroupList, FALSE, TRUE, FALSE); - rowIx = 0; - for (matchTrack = matchTrackList; matchTrack != NULL; matchTrack = matchTrack->next) - { - showMatchingTrack(matchTrack->name, cluster, conn, tdb, displayGroupList, - TRUE, &rowIx); - } - webPrintLinkTableEnd(); - } -#endif /* TO_BE_REMOVED */ else { - errAbort("Missing required trackDb setting %s or %s for track %s", - "inputTracksSubgroupDisplay", "inputTableFieldDisplay", tdb->track); + errAbort("Missing required trackDb setting %s for track %s", + "inputTableFieldDisplay", tdb->track); } webNewSection("Table of abbreviations for cells"); hPrintAbbreviationTable(conn, sourceTable, "Cell Type"); webNewSection("Track Description"); } }