d9ed1a589b8ab2d03412919fc2e8461cb18d7765
braney
  Fri Jul 20 12:56:28 2018 -0700
a few more Gencode2 changes

diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index c2a8b2f..ddbd396 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -5737,30 +5737,44 @@
     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 knownGencodePseudoFilter(struct track *tg, void *item)
+/* return TRUE is the user wants to see gencode pseudo genes. */
+{
+struct linkedFeatures *lf = item;
+char buffer[1024];
+
+safef(buffer, sizeof buffer, "kgId=\"%s\" and transcriptClass=\"pseudo\"", lf->name);
+char *class = sqlGetField(database, "knownAttrs", "transcriptClass", buffer);
+
+if (class != NULL)
+    return TRUE;
+return FALSE;
+}
+
 boolean knownGencodeClassFilter(struct track *tg, void *item)
 {
 struct linkedFeatures *lf = item;
 char buffer[1024];
 
 safef(buffer, sizeof buffer, "name=\"%s\" and value=\"basic\"", lf->name);
 char *class = sqlGetField(database, "knownToTag", "value", buffer);
 
 if (class != NULL)
     return TRUE;
 return FALSE;
 }
 
 static void loadFrames(struct sqlConnection *conn, struct linkedFeatures *lf)
 /* Load the CDS part of a genePredExt for codon display */
@@ -5789,39 +5803,44 @@
 	if (sizeOne != gp->exonCount)
 	    errAbort("loadFrames: %s number of exonFrames (%d) != number of exons (%d)",
 		     gp->name, sizeOne, gp->exonCount);
 	}
     sqlFreeResult(&sr);
     }
 }
 
 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.comprehensive", tg->tdb->track);
 boolean showComprehensive = cartUsualBoolean(cart, varName, FALSE);
+safef(varName, sizeof(varName), "%s.show.pseudo", tg->tdb->track);
+boolean showPseudo = cartUsualBoolean(cart, varName, FALSE);
 
 struct sqlConnection *conn = hAllocConn(database);
 tg->items = connectedLfFromGenePredInRangeExtra(tg, conn, tg->table,
                                         chromName, winStart, winEnd, TRUE);
 
 /* filter items on selected criteria if filter is available */
 if (!showComprehensive)
     filterItems(tg, knownGencodeClassFilter, "include");
 
+if (!showPseudo)
+    filterItems(tg, knownGencodePseudoFilter, "exclude");
+
 /* if we're close enough to see the codon frames, we better load them! */
 if (zoomedToCdsColorLevel)
     loadFrames(conn, tg->items);
 
 hFreeConn(&conn);
 }
 
 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);
@@ -6037,40 +6056,42 @@
     }
 else
     return lf->name;
 }
 
 char *knownGeneMapName(struct track *tg, void *item)
 /* Return un-abbreviated gene name. */
 {
 char str2[255];
 struct linkedFeatures *lf = item;
 /* piggy back the protein ID (hgg_prot variable) on hgg_gene variable */
 safef(str2, sizeof(str2), "%s&hgg_prot=%s", lf->name, ((struct knownGenesExtra *)(lf->extra))->hgg_prot);
 return(cloneString(str2));
 }
 
-void lookupKnownGeneNames(struct linkedFeatures *lfList, boolean isBigGenePred)
+void lookupKnownGeneNames(struct track *tg, boolean isBigGenePred)
 /* This converts the known gene ID to a gene symbol */
 {
+struct linkedFeatures *lfList = tg->items;
 struct linkedFeatures *lf;
 struct sqlConnection *conn = hAllocConn(database);
 char *geneSymbol;
 char *protDisplayId;
 char *gencodeId;
 char *mimId;
 char cond_str[256];
+boolean isGencode2 = trackDbSettingOn(tg->tdb, "isGencode2");
 
 boolean useGeneSymbol= FALSE;
 boolean useKgId      = FALSE;
 boolean useProtDisplayId = FALSE;
 boolean useMimId = FALSE;
 boolean useGencodeId = FALSE;
 
 struct hashEl *knownGeneLabels = cartFindPrefix(cart, "knownGene.label");
 struct hashEl *label;
 boolean labelStarted = FALSE;
 
 if (hTableExists(database, "kgXref"))
     {
     char omimLabel[48];
     safef(omimLabel, sizeof(omimLabel), "omim%s", cartString(cart, "db"));
@@ -6123,43 +6144,55 @@
                 sqlSafefFrag(cond_str, sizeof cond_str,"kgID='%s'", lf->name);
                 geneSymbol = sqlGetField(database, "kgXref", "geneSymbol", cond_str);
                 }
             if (geneSymbol != NULL)
                 {
                 dyStringAppend(name, geneSymbol);
                 }
             labelStarted = TRUE;
             }
         if (useGencodeId)
             {
             if (labelStarted) dyStringAppendC(name, '/');
             else labelStarted = TRUE;
             if ( isBigGenePred )
                 {
-                gencodeId = gp->name2;
+                gencodeId = isGencode2 ? gp->name : gp->name2;
                 }
             else
                 {
+                if (isGencode2)
+                    gencodeId = lf->name;
+                else
+                    {
                     sqlSafefFrag(cond_str, sizeof(cond_str), "name='%s'", lf->name);
                     gencodeId = sqlGetField(database, "knownGene", "alignID", cond_str);
                     }
+                }
 	    dyStringAppend(name, gencodeId);
 	    }
         if (useKgId)
             {
             if (labelStarted) dyStringAppendC(name, '/');
             else labelStarted = TRUE;
+            if (isGencode2)
+                {
+                sqlSafefFrag(cond_str, sizeof(cond_str), "name='%s'", lf->name);
+                char *ucId = sqlGetField(database, "knownGene", "alignID", cond_str);
+                dyStringAppend(name, ucId);
+                }
+            else
                 dyStringAppend(name, lf->name);
             }
         if (useProtDisplayId)
             {
             if (labelStarted) dyStringAppendC(name, '/');
             else labelStarted = TRUE;
             if ( isBigGenePred )
                 {
                 dyStringAppend(name, gp->geneName2);
                 }
             else
                 {
                 if (lf->extra != NULL)
                     {
                     dyStringAppend(name, (char *)lf->extra);
@@ -6261,42 +6294,42 @@
     boolean showComprehensive = cartUsualBoolean(cart, varName, FALSE);
     if (!showComprehensive)
         newList = stripLinkedFeaturesWithoutBitInScore(lfList,  BIT_BASIC);
     }
 
 slSort(&newList, linkedFeaturesCmp);
 tg->items = newList;
 tg->itemColor   = bigGenePredColor;
 tg->itemNameColor = bigGenePredColor;
 }
 
 void loadKnownGene(struct track *tg)
 /* Load up known genes. */
 {
 struct trackDb *tdb = tg->tdb;
-char *isGencode = trackDbSetting(tdb, "isGencode");
+boolean isGencode = trackDbSettingOn(tdb, "isGencode") || trackDbSettingOn(tdb, "isGencode2");
 char *bigGenePred = trackDbSetting(tdb, "bigGeneDataUrl");
 struct udcFile *file;
 boolean isBigGenePred = FALSE;
 
 if ((bigGenePred != NULL) && ((file = udcFileMayOpen(bigGenePred, udcDefaultDir())) != NULL))
     {
     isBigGenePred = TRUE;
     udcFileClose(&file);
-    loadKnownBigGenePred(tg, isGencode != NULL);
+    loadKnownBigGenePred(tg, isGencode);
     }
-else if (isGencode == NULL)
+else if (!isGencode)
     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)
     {
     if (isBigGenePred)
         {
@@ -6315,31 +6348,31 @@
                     "select transcript from %s where chrom=\"%s\" and chromStart < %d && chromEnd > %d",
                     canonicalTable, chromName, winEnd, winStart);
             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, isBigGenePred);
+lookupKnownGeneNames(tg, isBigGenePred);
 limitVisibility(tg);
 }
 
 Color knownGeneColorCalc(struct track *tg, void *item, struct hvGfx *hvg)
 /* Return color to draw known gene in. */
 {
 struct linkedFeatures *lf = item;
 int col = tg->ixColor;
 struct rgbColor *normal = &(tg->color);
 struct rgbColor lighter;
 struct rgbColor lightest;
 struct sqlConnection *conn = hAllocConn(database);
 struct sqlResult *sr;
 char **row;
 char query[256];