0490db6e85ca2bdf98e3bf71df2b04d7582a08de
kate
Mon May 1 14:21:50 2017 -0700
Add links to matrix and sample files on details page. refs #18738
diff --git src/hg/hgc/barChartClick.c src/hg/hgc/barChartClick.c
index cba6d0dd..158f9c9 100644
--- src/hg/hgc/barChartClick.c
+++ src/hg/hgc/barChartClick.c
@@ -108,51 +108,49 @@
}
static struct barChartBed *getBarChart(struct trackDb *tdb, char *item, char *chrom, int start, int end)
/* Retrieve barChart BED item from track */
{
struct barChartBed *barChart = NULL;
char *file = trackDbSetting(tdb, "bigDataUrl");
if (file != NULL)
barChart = getBarChartFromFile(tdb, file, item, chrom, start, end);
else
barChart = getBarChartFromTable(tdb, tdb->table, item, chrom, start, end);
return barChart;
}
static struct barChartItemData *getSampleValsFromFile(struct trackDb *tdb,
- struct hash *categoryHash,
- struct barChartBed *bed)
+ struct hash *categoryHash, struct barChartBed *bed,
+ char *dataFile, char *sampleFile)
/* Get all data values in a file for this item (locus) */
{
// Get sample categories from sample file
// Format: id, category, extras
-char *url = trackDbSetting(tdb, "barChartSampleUrl");
-struct lineFile *lf = udcWrapShortLineFile(url, NULL, 0);
+struct lineFile *lf = udcWrapShortLineFile(sampleFile, NULL, 0);
struct hash *sampleHash = hashNew(0);
char *words[2];
int sampleCt = 0;
while (lineFileChopNext(lf, words, sizeof words))
{
hashAdd(sampleHash, words[0], words[1]);
sampleCt++;
}
lineFileClose(&lf);
// Open matrix file
-url = trackDbSetting(tdb, "barChartDataUrl");
-struct udcFile *f = udcFileOpen(url, NULL);
+struct udcFile *f = udcFileOpen(dataFile, NULL);
// Get header line with sample ids
char *header = udcReadLine(f);
int wordCt = sampleCt+1; // initial field is label or empty
char **samples;
AllocArray(samples, wordCt);
chopByWhite(header, samples, wordCt);
// Get data values
// Format: id, category, extras
bits64 offset = (bits64)bed->_dataOffset;
bits64 size = (bits64)bed->_dataLen;
udcSeek(f, offset);
bits64 seek = udcTell(f);
if (udcTell(f) != offset)
@@ -240,38 +238,48 @@
struct barChartSample *sample = hashFindVal(sampleHash, val->sample);
if (sample == NULL)
warn("barChart track %s: unknown category for sample %s", tdb->track, val->sample);
else if (hashLookup(categoryHash, sample->category))
{
AllocVar(data);
data->sample = cloneString(val->sample);
data->category = cloneString(sample->category);
data->value = val->value;
slAddHead(&sampleVals, data);
}
}
return sampleVals;
}
-static struct barChartItemData *getSampleVals(struct trackDb *tdb, struct barChartBed *chartItem)
+static struct barChartItemData *getSampleVals(struct trackDb *tdb, struct barChartBed *chartItem,
+ char **retMatrixUrl, char **retSampleUrl)
/* Get data values for this item (locus) from all samples */
{
struct barChartItemData *vals = NULL;
-char *file = trackDbSetting(tdb, "barChartDataUrl");
+char *dataFile = trackDbSetting(tdb, "barChartDataUrl");
struct hash *categoryHash = getTrackCategories(tdb);
-if (file != NULL)
- vals = getSampleValsFromFile(tdb, categoryHash, chartItem);
+if (dataFile != NULL)
+ {
+ char *sampleFile = trackDbSetting(tdb, "barChartSampleUrl");
+ if (sampleFile == NULL)
+ return NULL;
+ if (retMatrixUrl != NULL)
+ *retMatrixUrl = dataFile;
+ if (retSampleUrl != NULL)
+ *retSampleUrl = sampleFile;
+ vals = getSampleValsFromFile(tdb, categoryHash, chartItem, dataFile, sampleFile);
+ }
else
vals = getSampleValsFromTable(tdb, categoryHash, chartItem);
return vals;
}
static char *makeDataFrame(char *track, struct barChartItemData *vals)
/* Create R data frame from sample data. This is a tab-sep file, one row per sample.
Return filename. */
{
// Create data frame with columns for sample, category, value */
struct tempName dfTn;
trashDirFile(&dfTn, "hgc", "barChart", ".df.txt");
FILE *f = fopen(dfTn.forCgi, "w");
if (f == NULL)
@@ -339,28 +347,32 @@
chartItem->name);
int categId;
float highLevel = barChartMaxValue(chartItem, &categId);
char *units = trackDbSettingClosestToHomeOrDefault(tdb, BAR_CHART_UNIT, "units");
char *metric = trackDbSettingClosestToHomeOrDefault(tdb, BAR_CHART_METRIC, "");
printf("Total all %s values: %0.2f %s
\n", metric, barChartTotalValue(chartItem), units);
printf("Maximum %s value: %0.2f %s in %s
\n",
metric, highLevel, units, barChartUiGetCategoryLabelById(categId, database, tdb));
printf("Score: %d
\n", chartItem->score);
printf("Genomic position: "
"%s %s:%d-%d
\n",
database, hgTracksPathAndSettings(), database,
chartItem->chrom, chartItem->chromStart+1, chartItem->chromEnd,
chartItem->chrom, chartItem->chromStart+1, chartItem->chromEnd);
printf("Strand: %s\n", chartItem->strand);
-struct barChartItemData *vals = getSampleVals(tdb, chartItem);
+char *matrixUrl = NULL, *sampleUrl = NULL;
+struct barChartItemData *vals = getSampleVals(tdb, chartItem, &matrixUrl, &sampleUrl);
if (vals != NULL)
{
// Print boxplot
puts("
");
char *df = makeDataFrame(tdb->table, vals);
char *colorFile = makeColorFile(tdb);
printBoxplot(df, item, units, colorFile);
+ if (matrixUrl != NULL)
+ printf("
View data matrix and sample file\n",
+ matrixUrl, sampleUrl);
}
puts("
");
printTrackHtml(tdb);
}