");
}
void selectOutput()
/* Just VEP text for now... should also have VEP HTML with limited # lines too.
* Next: custom track with same subset of info as we would stuff in VEP */
{
puts(" ");
printf("
Configure Output
\n");
printf("output format: ");
-char *selected = cartUsualString(cart, "hgva_outFormat", "");
+char *selected = cartUsualString(cart, "hgva_outFormat", "vepTab");
printf(" \n");
char *compressType = cartUsualString(cart, "hgva_compressType", textOutCompressGzip);
char *fileName = cartUsualString(cart, "hgva_outFile", "");
printf("output file: ");
cgiMakeTextVar("hgva_outFile", fileName, 29);
printf(" (leave blank to keep output in browser) \n");
printf("file type returned: ");
cgiMakeRadioButton("hgva_compressType", textOutCompressNone,
sameWord(textOutCompressNone, compressType));
printf(" plain text  ");
cgiMakeRadioButton("hgva_compressType", textOutCompressGzip,
sameWord(textOutCompressGzip, compressType));
printf(" gzip compressed (ignored if output file is blank)");
puts(" ");
}
@@ -1027,58 +1028,59 @@
char *seqChangeTable = "dbNsfpSeqChange";
if (hashFindVal(gratorsByName, seqChangeTable) == NULL)
{
char *fileName = fileNameFromTable(seqChangeTable);
if (fileName == NULL)
errAbort("'%s' requested, but I can't find fileName for %s",
trackName, seqChangeTable);
struct annoGrator *grator = gratorFromBigDataFileOrUrl(fileName, assembly, NO_MAXROWS,
agoNoConstraint);
updateGratorList(grator, pGratorList);
hashAdd(gratorsByName, seqChangeTable, grator);
}
}
void addOutputTracks(struct annoGrator **pGratorList, struct hash *gratorsByName,
- struct annoFormatter *vepOut, struct annoAssembly *assembly, char *chrom)
+ struct annoFormatter *vepOut, struct annoAssembly *assembly, char *chrom,
+ boolean doHtml)
// Construct grators for tracks selected to appear in EXTRAS column
{
char trackPrefix[128];
safef(trackPrefix, sizeof(trackPrefix), "hgva_track_%s_", database);
int trackPrefixLen = strlen(trackPrefix);
struct slPair *trackVar, *trackVars = cartVarsWithPrefix(cart, trackPrefix);
for (trackVar = trackVars; trackVar != NULL; trackVar = trackVar->next)
{
char *val = trackVar->val;
if (! (sameWord(val, "on") || atoi(val) > 0))
continue;
char *trackName = trackVar->name + trackPrefixLen;
if (sameString(trackName, "dbNsfpPolyPhen2"))
// PolyPhen2 must have a suffix now -- skip obsolete cartVar from existing carts
continue;
struct annoGrator *grator = hashFindVal(gratorsByName, trackName);
if (grator != NULL)
// We already have this as a grator:
continue;
enum PolyPhen2Subset subset = noSubset;
char *description = NULL;
char *column = NULL;
if (startsWith("dbNsfp", trackName))
{
// trackName for PolyPhen2 has a suffix for subset -- strip it if we find it:
subset = stripSubsetFromTrackName(trackName);
- description = dbNsfpDescFromTableName(trackName, subset, FALSE);
+ description = dbNsfpDescFromTableName(trackName, subset, doHtml);
addDbNsfpSeqChange(trackName, assembly, gratorsByName, pGratorList);
char *fileName = fileNameFromTable(trackName);
if (fileName != NULL)
grator = gratorFromBigDataFileOrUrl(fileName, assembly, NO_MAXROWS, agoNoConstraint);
}
else
{
struct trackDb *tdb = tdbForTrack(database, trackName, &fullTrackList);
if (tdb != NULL)
{
grator = gratorFromTrackDb(assembly, tdb->table, tdb, chrom, NO_MAXROWS, NULL,
agoNoConstraint);
if (grator != NULL)
//#*** Need something more sophisticated but this works for our
//#*** limited selection of extra tracks:
@@ -1176,54 +1178,69 @@
// Some grators may be used as both filters and output values. To avoid making
// multiple grators for the same source, hash them by trackName:
struct hash *gratorsByName = hashNew(8);
struct annoGrator *snpGrator = NULL;
char *snpDesc = NULL;
if (cartBoolean(cart, "hgva_rsId"))
snpGrator = gratorForSnpBed4(gratorsByName, "", assembly, chrom, agoNoConstraint, &snpDesc);
// Now construct gratorList in the order in which annoFormatVep wants to see them,
// i.e. first the gpVar, then the snpNNN, then whatever else:
struct annoGrator *gratorList = NULL;
slAddHead(&gratorList, gpVarGrator);
if (snpGrator != NULL)
slAddHead(&gratorList, snpGrator);
-struct annoFormatter *vepOut = annoFormatVepNew("stdout", primary, varTdb->longLabel,
+
+// Text or HTML output?
+char *outFormat = cartUsualString(cart, "hgva_outFormat", "vepTab");
+boolean doHtml = sameString(outFormat, "vepHtml");
+
+// Initialize VEP formatter:
+struct annoFormatter *vepOut = annoFormatVepNew("stdout", doHtml,
+ primary, varTdb->longLabel,
(struct annoStreamer *)gpVarGrator,
geneTdb->longLabel,
(struct annoStreamer *)snpGrator,
snpDesc);
-
-addOutputTracks(&gratorList, gratorsByName, vepOut, assembly, chrom);
+addOutputTracks(&gratorList, gratorsByName, vepOut, assembly, chrom, doHtml);
addFilterTracks(&gratorList, gratorsByName, assembly, chrom);
slReverse(&gratorList);
+if (doHtml)
+ {
+ webStart(cart, database, "Annotated Variants in VEP/HTML format");
+ }
+else
+ {
// Undo the htmlPushEarlyHandlers() because after this point they make ugly text:
popWarnHandler();
popAbortHandler();
textOpen();
webStartText();
-
+ }
struct annoGratorQuery *query = annoGratorQueryNew(assembly, primary, gratorList, vepOut);
if (chrom != NULL)
annoGratorQuerySetRegion(query, chrom, start, end);
annoGratorQueryExecute(query);
+annoGratorQueryFree(&query);
+if (doHtml)
+ webEnd();
+else
textOutClose(&compressPipeline);
-annoGratorQueryFree(&query);
}
int main(int argc, char *argv[])
/* Process command line. */
{
long enteredMainTime = clock1000();
if (hIsPrivateHost())
pushCarefulMemHandler(LIMIT_2or6GB);
htmlPushEarlyHandlers(); /* Make errors legible during initialization. */
cgiSpoof(&argc, argv);
oldVars = hashNew(10);
setUdcCacheDir();
boolean startQuery = (cgiUsualString("startQuery", NULL) != NULL);
if (startQuery)