b246fbedeacd278831a0e087e63f23d1b1232f6d
fanhsu
  Fri Nov 5 16:33:12 2010 -0700
Updated for RGD Genes.
diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index a90e3c1..f15671d 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -5418,30 +5418,137 @@
         name = NULL;
     }
 return name;
 }
 
 char *gencodeGeneName(struct track *tg, void *item)
 /* Get name to use for Gencode gene item. */
 {
 struct linkedFeatures *lf = item;
 if (lf->extra != NULL)
     return lf->extra;
 else
     return lf->name;
 }
 
+char *getRgdGene2Symbol(struct sqlConnection *conn, char *acc)
+/* get gene symbol from rgdGene2ToSymbol or NULL if not found.
+ * WARNING: static return */
+{
+static char symbolBuf[256];
+char query[256], *symbol = NULL;
+if (hTableExists(database,  "rgdGene2ToSymbol"))
+    {
+    sprintf(query, "select geneSymbol from rgdGene2ToSymbol where rgdId = '%s'", acc);
+    symbol = sqlQuickQuery(conn, query, symbolBuf, sizeof(symbolBuf));
+    if ((symbol != NULL) && (symbol[0] == '\0'))
+        symbol = NULL;
+    }
+return symbol;
+}
+
+char *rgdGene2Name(struct track *tg, void *item)
+/* Get name to use for rgdGene2 item. */
+{
+struct linkedFeatures *lf = item;
+if (lf->extra != NULL)
+    return lf->extra;
+else
+    return lf->name;
+}
+
+char *rgdGene2MapName(struct track *tg, void *item)
+/* Return un-abbreviated gene name. */
+{
+struct linkedFeatures *lf = item;
+return lf->name;
+}
+
+void lookupRgdGene2Names(struct track *tg)
+/* This converts the RGD Gene ID to a gene name where possible. */
+{
+struct linkedFeatures *lf;
+struct sqlConnection *conn = hAllocConn(database);
+boolean labelStarted = FALSE;
+boolean useGeneName = FALSE;
+boolean useAcc =  FALSE;
+
+struct hashEl *rgdGene2Labels = cartFindPrefix(cart, "rgdGene2.label");
+struct hashEl *label;
+
+if (rgdGene2Labels == NULL)
+    {
+    useGeneName = TRUE; /* default to gene name */
+    /* set cart to match what doing */
+    cartSetBoolean(cart, "rgdGene2.label.gene", TRUE);
+    }
+for (label = rgdGene2Labels; label != NULL; label = label->next)
+    {
+    if (endsWith(label->name, "gene") && differentString(label->val, "0"))
+        useGeneName = TRUE;
+    else if (endsWith(label->name, "acc") && differentString(label->val, "0"))
+        useAcc = TRUE;
+    else if (!endsWith(label->name, "gene") &&
+             !endsWith(label->name, "acc") )
+        {
+        useGeneName = TRUE;
+        cartRemove(cart, label->name);
+        }
+    }
+
+for (lf = tg->items; lf != NULL; lf = lf->next)
+    {
+    struct dyString *name = dyStringNew(SMALLDYBUF);
+    labelStarted = FALSE; /* reset for each item in track */
+    if (useGeneName || useAcc)
+        {
+        char *org = getOrganismShort(conn, lf->name);
+        if (org != NULL)
+            dyStringPrintf(name, "%s ", org);
+        }
+    if (useGeneName)
+        {
+        char *gene = getRgdGene2Symbol(conn, lf->name);
+        if (gene != NULL)
+            {
+            dyStringAppend(name, gene);
+            }
+        labelStarted = TRUE;
+        }
+    if (useAcc)
+        {
+        if (labelStarted) dyStringAppendC(name, '/');
+        else labelStarted = TRUE;
+        dyStringAppend(name, lf->name);
+        }
+    lf->extra = dyStringCannibalize(&name);
+    }
+hFreeConn(&conn);
+}
+
+void loadRgdGene2(struct track *tg)
+/* Load up RGD genes. */
+{
+enum trackVisibility vis = tg->visibility;
+tg->items = lfFromGenePredInRange(tg, tg->table, chromName, winStart, winEnd);
+if (vis != tvDense)
+    {
+    lookupRgdGene2Names(tg);
+    }
+vis = limitVisibility(tg);
+}
+
 char *refGeneName(struct track *tg, void *item)
 /* Get name to use for refGene item. */
 {
 struct linkedFeatures *lf = item;
 if (lf->extra != NULL)
     return lf->extra;
 else
     return lf->name;
 }
 
 char *refGeneMapName(struct track *tg, void *item)
 /* Return un-abbreviated gene name. */
 {
 struct linkedFeatures *lf = item;
 return lf->name;
@@ -5790,30 +5897,38 @@
 if (hTableExists(database,  "refSeqStatus"))
     return refGeneColorByStatus(tg, lf->name, hvg);
 else
     return(tg->ixColor);
 }
 
 void refGeneMethods(struct track *tg)
 /* Make track of known genes from refSeq. */
 {
 tg->loadItems = loadRefGene;
 tg->itemName = refGeneName;
 tg->mapItemName = refGeneMapName;
 tg->itemColor = refGeneColor;
 }
 
+void rgdGene2Methods(struct track *tg)
+/* Make track of RGD genes. */
+{
+tg->loadItems = loadRgdGene2;
+tg->itemName = rgdGene2Name;
+tg->mapItemName = rgdGene2MapName;
+}
+
 boolean filterNonCoding(struct track *tg, void *item)
 /* Returns TRUE if the item passes the filter */
 {
 char condStr[256];
 char *bioType;
 struct linkedFeatures *lf = item;
 int i = 0;
 struct sqlConnection *conn = hAllocConn(database);
 
 /* Find the biotype for this item */
 sprintf(condStr, "name='%s'", lf->name);
 bioType = sqlGetField(database, "ensGeneNonCoding", "biotype", condStr);
 hFreeConn(&conn);
 
 /* check for this type in the array and use its index to find whether this
@@ -11583,30 +11698,31 @@
 registerTrackHandler("gap", gapMethods);
 registerTrackHandler("genomicDups", genomicDupsMethods);
 registerTrackHandler("clonePos", coverageMethods);
 registerTrackHandler("genieKnown", genieKnownMethods);
 registerTrackHandler("knownGene", knownGeneMethods);
 registerTrackHandler("h1n1_0602Seq", h1n1SeqMethods);
 registerTrackHandler("h1n1b_0514Seq", h1n1SeqMethods);
 registerTrackHandler("hg17Kg", hg17KgMethods);
 registerTrackHandler("superfamily", superfamilyMethods);
 registerTrackHandler("gad", gadMethods);
 registerTrackHandler("rdmr", rdmrMethods);
 registerTrackHandler("decipher", decipherMethods);
 registerTrackHandler("rgdQtl", rgdQtlMethods);
 registerTrackHandler("rgdRatQtl", rgdQtlMethods);
 registerTrackHandler("refGene", refGeneMethods);
+registerTrackHandler("rgdGene2", rgdGene2Methods);
 registerTrackHandler("blastMm6", blastMethods);
 registerTrackHandler("blastDm1FB", blastMethods);
 registerTrackHandler("blastDm2FB", blastMethods);
 registerTrackHandler("blastCe3WB", blastMethods);
 registerTrackHandler("blastHg16KG", blastMethods);
 registerTrackHandler("blastHg17KG", blastMethods);
 registerTrackHandler("blastHg18KG", blastMethods);
 registerTrackHandler("blatHg16KG", blastMethods);
 registerTrackHandler("blatzHg17KG", blatzMethods);
 registerTrackHandler("atomHomIni20_1", atomMethods);
 registerTrackHandler("atom97565", atomMethods);
 registerTrackHandler("mrnaMapHg17KG", blatzMethods);
 registerTrackHandler("blastSacCer1SG", blastMethods);
 registerTrackHandler("tblastnHg16KGPep", blastMethods);
 registerTrackHandler("xenoRefGene", xenoRefGeneMethods);