ec0a44bb3bba65dc03b8aa7fa3f6645714a627d3 braney Wed Apr 1 22:12:05 2015 -0700 first cut at knownGene based on Gencode diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index c58b312..a8540e8 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -4718,30 +4718,60 @@ if (filterBySet != NULL) { boolean passesThroughFilter = genePredClassFilterBySet(tg, classTable, filterBySet, lf); filterBySetFree(&filterBySet); return passesThroughFilter; } if (sameString(tg->table, "acembly")) { return genePredClassFilterAcembly(tg, classTable, lf); } } return TRUE; } +boolean knownGencodeClassFilter(struct track *tg, void *item) +{ +struct linkedFeatures *lf = item; +char buffer[1024]; + +safef(buffer, sizeof buffer, "kgID=\"%s\"", lf->name); +char *class = sqlGetField(database, "kgXref", "tRnaName", buffer); + +if (sameString(class, "basic")) + return TRUE; +return FALSE; +} + +void loadKnownGencode(struct track *tg) +/* Convert gene pred in window to linked feature. Include alternate name + * in "extra" field (usually gene name) */ +{ +char varName[SMALLBUF]; +safef(varName, sizeof(varName), "%s.show.composite", tg->tdb->track); +boolean showComposite = cartUsualBoolean(cart, varName, FALSE); + +struct sqlConnection *conn = hAllocConn(database); +tg->items = connectedLfFromGenePredInRangeExtra(tg, conn, tg->table, + chromName, winStart, winEnd, TRUE); +hFreeConn(&conn); +/* filter items on selected criteria if filter is available */ +if (!showComposite) + filterItems(tg, knownGencodeClassFilter, "include"); +} + void loadGenePredWithName2(struct track *tg) /* Convert gene pred in window to linked feature. Include alternate name * in "extra" field (usually gene name) */ { struct sqlConnection *conn = hAllocConn(database); tg->items = connectedLfFromGenePredInRangeExtra(tg, conn, tg->table, chromName, winStart, winEnd, TRUE); hFreeConn(&conn); /* filter items on selected criteria if filter is available */ filterItems(tg, genePredClassFilter, "include"); } void lookupKnownNames(struct linkedFeatures *lfList) /* This converts the Genie ID to the HUGO name where possible. */ { @@ -5088,50 +5118,57 @@ struct linkedFeatures *newList = NULL, *el, *next; for (el = list; el != NULL; el = next) { next = el->next; if (hashLookup(hash, el->name)) slAddHead(&newList, el); } slReverse(&newList); return newList; } void loadKnownGene(struct track *tg) /* Load up known genes. */ { struct trackDb *tdb = tg->tdb; +char *isGencode = trackDbSetting(tdb, "isGencode"); + +if (isGencode == NULL) loadGenePredWithName2(tg); +else + loadKnownGencode(tg); + char varName[SMALLBUF]; safef(varName, sizeof(varName), "%s.show.noncoding", tdb->track); boolean showNoncoding = cartUsualBoolean(cart, varName, TRUE); safef(varName, sizeof(varName), "%s.show.spliceVariants", tdb->track); boolean showSpliceVariants = cartUsualBoolean(cart, varName, TRUE); if (!showNoncoding) tg->items = stripShortLinkedFeatures(tg->items); if (!showSpliceVariants) { char *canonicalTable = trackDbSettingOrDefault(tdb, "canonicalTable", "knownCanonical"); if (hTableExists(database, canonicalTable)) { /* Create hash of items in canonical table in region. */ struct sqlConnection *conn = hAllocConn(database); struct hash *hash = hashNew(0); char query[512]; sqlSafef(query, sizeof(query), - "select transcript from %s where chromStart < %d && chromEnd > %d", - canonicalTable, winEnd, winStart); + "select transcript from %s where chrom=\"%s\" and chromStart < %d && chromEnd > %d", + canonicalTable, chromName, winEnd, winStart); + printf("query %s\n", query); struct sqlResult *sr = sqlGetResult(conn, query); char **row; while ((row = sqlNextRow(sr)) != NULL) hashAdd(hash, row[0], NULL); sqlFreeResult(&sr); hFreeConn(&conn); /* Get rid of non-canonical items. */ tg->items = stripLinkedFeaturesNotInHash(tg->items, hash); hashFree(&hash); } } lookupKnownGeneNames(tg->items); limitVisibility(tg); }