b1ead099066eb7b52e3de47cbcb27c75418dd138
kent
Wed Apr 27 22:55:06 2011 -0700
More work on DNAse and TFBS cluster tracks' details page. Making newer system, where a minimal amount of metadata is in an associated table that goes with the track, include full metadata if the input track is still available. Making older system just omit a row in the table rather than crashing if the input track has gone missing.
diff --git src/hg/hgc/peakClusters.c src/hg/hgc/peakClusters.c
index 18da418..bf6ec4a 100644
--- src/hg/hgc/peakClusters.c
+++ src/hg/hgc/peakClusters.c
@@ -1,182 +1,202 @@
/* 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();
-printf("%s ", tdb->longLabel);
-compositeMetadataToggle(database, tdb, "...", TRUE, FALSE, trackHash);
+compositeMetadataToggle(database, tdb, "metadata", TRUE, FALSE, trackHash);
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 */
-static boolean showMatchingTrack(char *track, struct bed *cluster, struct sqlConnection *conn,
+#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 = hashMustFindVal(trackHash, track);
-boolean result = FALSE;
+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);
-return result;
}
+}
+#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;
-int sqlFieldColumn(struct sqlResult *sr, char *colName);
struct sqlResult *sr = hRangeQuery(conn, table, cluster->chrom, cluster->chromStart,
cluster->chromEnd, NULL, &rowOffset);
int signalCol = sqlFieldColumn(sr, "signalValue");
if (signalCol < 0)
internalErr();
-int count = 0;
-double sum = 0;
char **row;
while ((row = sqlNextRow(sr)) != NULL)
{
count += 1;
sum += sqlDouble(row[signalCol]);
}
sqlFreeResult(&sr);
hFreeConn(&conn);
+ }
if (count > 0)
return sum/count;
else
return 0;
}
static void printControlledVocabFields(char **row, int fieldCount,
struct slName *fieldList, char *vocabFile, struct hash *vocabHash)
/* Print out fields from row, linking them to controlled vocab if need be. */
{
int i;
struct slName *field;
for (i=0, field = fieldList; inext)
{
@@ -188,65 +208,80 @@
webPrintLinkCell(link);
}
else
webPrintLinkCell(fieldVal);
}
}
struct hash *getVocabHash(char *fileName)
/* Get vocabulary term hash */
{
struct hash *hash = raTagVals(fileName, "type");
hashAdd(hash, "cellType", NULL); /* Will the kludge never end, no, never! */
return hash;
}
+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, trackHash);
+webPrintLinkCellEnd();
+}
+
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);
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);
int displayNo = 0;
int fieldCount = slCount(fieldList);
struct sqlResult *sr = sqlGetResult(conn, query->string);
char **row;
while ((row = sqlNextRow(sr)) != NULL)
{
- double signal = getSignalAt(row[0], cluster);
+ 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)
{
@@ -260,91 +295,94 @@
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);
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);
freez(&vocabFile);
dyStringFree(&query);
}
static void printFactorSourceTableHits(struct bed *cluster, struct sqlConnection *conn,
char *sourceTable, char *inputTrackTable,
struct slName *fieldList, boolean invert, 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 monster SQL query to get all assays*/
struct dyString *query = dyStringNew(0);
-dyStringPrintf(query, "select %s.id,%s.name", sourceTable, sourceTable);
+dyStringPrintf(query, "select %s.id,%s.name,%s.tableName", sourceTable, sourceTable,
+ inputTrackTable);
struct slName *field;
for (field = fieldList; field != NULL; field = field->next)
dyStringPrintf(query, ",%s.%s", inputTrackTable, field->name);
dyStringPrintf(query, " from %s,%s ", inputTrackTable, sourceTable);
dyStringPrintf(query, " where %s.source = %s.description", inputTrackTable, sourceTable);
dyStringPrintf(query, " and factor='%s' order by %s.source", cluster->name, inputTrackTable);
int displayNo = 0;
int fieldCount = slCount(fieldList);
struct sqlResult *sr = sqlGetResult(conn, query->string);
char **row;
while ((row = sqlNextRow(sr)) != NULL)
{
int sourceId = sqlUnsigned(row[0]);
double signal = cluster->expScores[sourceId];
boolean hit = (signal > 0);
if (hit ^ invert)
{
printf("
\n");
webPrintIntCell(++displayNo);
if (!invert)
webPrintDoubleCell(signal);
webPrintLinkCell(row[1]);
int i;
for (i=0; ishortLabel);
struct sqlConnection *conn = hAllocConn(database);
char *inputTracksSubgroupDisplay = trackDbSetting(clusterTdb, "inputTracksSubgroupDisplay");
char *inputTableFieldDisplay = trackDbSetting(clusterTdb, "inputTableFieldDisplay");
webPrintLinkTableStart();
-if (inputTracksSubgroupDisplay)
+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);
}
}
-else 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);
- }
+#endif /* TO_BE_REMOVED */
else
errAbort("Missing required trackDb setting %s or %s for track %s",
"inputTracksSubgroupDisplay", "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];
@@ -410,102 +450,89 @@
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 (inputTracksSubgroupDisplay != NULL)
+ 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);
}
}
- else 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);
- }
+#endif /* TO_BE_REMOVED */
else
errAbort("Missing required trackDb setting %s or %s for track %s",
"inputTracksSubgroupDisplay", "inputTableFieldDisplay", tdb->track);
webPrintLinkTableEnd();
}
printf("", hgcPathAndSettings(),
tdb->track);
printf("List all items assayed");
printf("
\n");
webNewSection("Track Description");
printTrackHtml(tdb);
cartWebEnd();
hFreeConn(&conn);
}
-char *findFactorId(struct slName *trackList, char *label)
-/* Given factor label, find factor id. */
-{
-struct slName *track;
-for (track = trackList; track != NULL; track = track->next)
- {
- struct trackDb *tdb = hashMustFindVal(trackHash, track->name);
- char *factorId = compositeGroupId(tdb, "factor", label);
- if (factorId != NULL)
- return factorId;
- }
-errAbort("Couldn't find factor labeled %s", label);
-return NULL;
-}
-
void doFactorSource(struct sqlConnection *conn, struct trackDb *tdb, char *item, int start)
/* Display detailed info about a cluster of peaks from other tracks. */
{
int rowOffset = hOffsetPastBin(database, seqName, tdb->table);
char **row;
struct sqlResult *sr;
char query[256];
char *motifTable = NULL;
#ifdef TXCLUSTER_MOTIFS_TABLE
motifTable = TXCLUSTER_MOTIFS_TABLE;
#endif
safef(query, sizeof(query),
"select * from %s where name = '%s' and chrom = '%s' and chromStart = %d",
tdb->table, item, seqName, start);
@@ -553,117 +580,123 @@
char *file = cloneFirstWord(vocab);
factorLink = controlledVocabLink(file, "term", factorLink, factorLink, factorLink, "");
}
printf("Factor: %s
\n", factorLink);
printf("Cluster Score (out of 1000): %d
\n", cluster->score);
if(motif != NULL && hits != NULL)
{
struct bed6FloatScore *hit = NULL;
int i;
seqs = needMem(sizeof(struct dnaSeq *) * slCount(hits));
for (hit = hits, i = 0; hit != NULL; hit = hit->next, i++)
{
char query[256];
float maxScore = -1;
- safef(query, sizeof(query), "select max(score) from %s where name = '%s'", "wgEncodeRegTfbsClusteredMotifs", item);
+ safef(query, sizeof(query),
+ "select max(score) from %s where name = '%s'",
+ "wgEncodeRegTfbsClusteredMotifs", item);
sr = sqlGetResult(conn, query);
if ((row = sqlNextRow(sr)) != NULL)
{
if(!isEmpty(row[0]))
{
maxScore = sqlFloat(row[0]);
}
}
sqlFreeResult(&sr);
- struct dnaSeq *seq = hDnaFromSeq(database, seqName, hit->chromStart, hit->chromEnd, dnaLower);
+ struct dnaSeq *seq = hDnaFromSeq(database,
+ seqName, hit->chromStart, hit->chromEnd, dnaLower);
if(hit->strand[0] == '-')
reverseComplement(seq->dna, seq->size);
seqs[i] = seq;
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);
+ 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");
char *inputTableFieldDisplay = trackDbSetting(tdb, "inputTableFieldDisplay");
- if (inputTracksSubgroupDisplay != NULL)
+ 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();
}
- else 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();
- }
+#endif /* TO_BE_REMOVED */
else
{
errAbort("Missing required trackDb setting %s or %s for track %s",
"inputTracksSubgroupDisplay", "inputTableFieldDisplay", tdb->track);
-
}
webNewSection("Table of abbreviations for cells");
hPrintAbbreviationTable(conn, sourceTable, "Cell Type");
webNewSection("Track Description");
}
}