bfbafa57045176f4eef503fba02ffce6f608aa66 angie Fri Jun 14 16:20:05 2013 -0700 Adding HTML version of VEP output format. refs #6152 diff --git src/hg/hgVai/hgVai.c src/hg/hgVai/hgVai.c index 92672e4..7504d90 100644 --- src/hg/hgVai/hgVai.c +++ src/hg/hgVai/hgVai.c @@ -728,33 +728,34 @@ printf("
Define Filters
\n"); puts(""); selectFiltersFunc(); selectFiltersKnownVar(); selectFiltersCons(); puts("
"); } 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)