83f07ccc670df11816b9c0acffb3bb35b8a89e04 angie Fri Sep 18 16:22:38 2015 -0700 Use annoStreamDb with config to add kgXref.geneSymbol to knownGene columns instead of annoStreamDbKnownGene. diff --git src/hg/hgVai/hgVai.c src/hg/hgVai/hgVai.c index f21c85f..38d9b64 100644 --- src/hg/hgVai/hgVai.c +++ src/hg/hgVai/hgVai.c @@ -2140,30 +2140,55 @@ * (main page will be displayed) */ { struct trackDb *varTdb = tdbForTrack(database, variantTrack, &fullTrackList); if (varTdb == NULL) { if (isHubTrack(variantTrack)) warn("Can't find hub track '%s'", variantTrack); else warn("Can't find tdb for variant track '%s'", variantTrack); } else checkVariantTrack(varTdb); return varTdb; } +static struct jsonElement *configForStreamer(char *db, struct trackDb *tdb) +/* Add VAI-specific config options, if applicable. */ +{ +struct jsonElement *config = NULL; +char *track = tdb->track; +// If track is sql-based knownGene and we have kgXref, then add kgXref.geneSymbol after +// the columns of knownGene. +if (sameString(track, "knownGene") && !isCustomTrack(track) && !isHubTrack(track) && + !trackDbSetting(tdb, "bigDataUrl")) + { + struct sqlConnection *conn = hAllocConn(db); + if (sqlTableExists(conn, "kgXref")) + { + char jsonStr[PATH_LEN]; + safef(jsonStr, sizeof(jsonStr), + "{ \"relatedTables\":" + " [ { \"table\": \"%s.kgXref\", \"fields\": [\"geneSymbol\"] } ] }", + db); + config = jsonParse(jsonStr); + } + hFreeConn(&conn); + } +return config; +} + static void adjustGpVarOverlapRule(struct annoGrator *gpVarGrator, boolean haveRegulatory) /* If we're able to detect regulatory elements, and want to keep those annotations, loosen up * gpVarGrator's overlap rule from the default (must overlap). */ { if (haveRegulatory && cartUsualBoolean(cart, "hgva_include_regulatory", TRUE)) gpVarGrator->setOverlapRule(gpVarGrator, agoNoConstraint); } void doQuery() /* Translate simple form inputs into anno* components and execute query. */ { dyInfo = dyStringNew(0); char *chrom = NULL; uint start = 0, end = 0; if (sameString(regionType, hgvaRegionTypeRange)) @@ -2201,33 +2226,34 @@ primaryLongLabel = hgvaVariantIdsLabel; } else { struct trackDb *varTdb = getVariantTrackDb(variantTrack); if (varTdb == NULL) { doUi(); return; } primary = hAnnoStreamerFromTrackDb(assembly, varTdb->table, varTdb, chrom, maxVarRows, NULL); primaryLongLabel = varTdb->longLabel; } enum annoGratorOverlap geneOverlapRule = agoMustOverlap; +struct jsonElement *gpConfig = configForStreamer(database, geneTdb); struct annoGrator *gpVarGrator = hAnnoGratorFromTrackDb(assembly, geneTdb->table, geneTdb, chrom, ANNO_NO_LIMIT, primary->asObj, - geneOverlapRule, NULL); + geneOverlapRule, gpConfig); setGpVarFuncFilter(gpVarGrator); // 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 (cartUsualBoolean(cart, "hgva_rsId", FALSE)) 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);