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);
 }