926b05d6ad7b5c81ceda17ad07674329d3adb4b5
hiram
  Tue Feb 9 13:11:46 2016 -0800
adding UI for refSeqComposite refs #13673

diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index d2dc2a2..2690bd8 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -6838,33 +6838,35 @@
 }
 
 void lookupRefNames(struct track *tg)
 /* This converts the refSeq accession to a gene name where possible. */
 {
 struct linkedFeatures *lf;
 struct sqlConnection *conn = hAllocConn(database);
 boolean isNative = !sameString(tg->table, "xenoRefGene");
 boolean labelStarted = FALSE;
 boolean useGeneName = FALSE;
 boolean useAcc =  FALSE;
 boolean useMim =  FALSE;
 char trackLabel[1024];
 char *labelString = tg->table;
 boolean isRefGene = TRUE;
-if (sameString(labelString, "ncbiRefCurated") || sameString(labelString, "ncbiRefPredicted"))
+
+
+if (startsWith("ncbiRefSeq", labelString))
     {
-    labelString="ncbiGene";
+    labelString="refSeqComposite";
     isRefGene = FALSE;
     }
 safef(trackLabel, sizeof trackLabel, "%s.label", labelString);
 
 struct hashEl *refGeneLabels = cartFindPrefix(cart, trackLabel);
 struct hashEl *label;
 char omimLabel[48];
 safef(omimLabel, sizeof(omimLabel), "omim%s", cartString(cart, "db"));
 
 if (refGeneLabels == NULL)
     {
     useGeneName = TRUE; /* default to gene name */
     }
 for (label = refGeneLabels; label != NULL; label = label->next)
     {
@@ -6910,31 +6912,38 @@
             {
             dyStringAppend(name, gene);
             }
         labelStarted = TRUE;
         }
     if (useAcc)
         {
         if (labelStarted) dyStringAppendC(name, '/');
         else labelStarted = TRUE;
         dyStringAppend(name, lf->name);
         }
     if (useMim)
         {
         char *mimId;
         char query[256];
+        if  (isRefGene)
+            {
             sqlSafef(query, sizeof(query), "select cast(omimId as char) from refLink where mrnaAcc = '%s'", lf->name);
+            }
+        else
+            {
+            sqlSafef(query, sizeof(query), "select omimId from ncbiRefSeqLink where id = '%s'", lf->name);
+            }
         mimId = sqlQuickString(conn, query);
         if (labelStarted) dyStringAppendC(name, '/');
         else labelStarted = TRUE;
         if (mimId && differentString(mimId, "0"))
             dyStringAppend(name, mimId);
         }
     lf->extra = dyStringCannibalize(&name);
     }
 hFreeConn(&conn);
 }
 
 void lookupProteinNames(struct track *tg)
 /* This converts the knownGene accession to a gene name where possible. */
 {
 struct linkedFeatures *lf;
@@ -7031,31 +7040,31 @@
 			    strcat(lf->extra, "k");
 			    }
 			}
 		    }
 		sqlFreeResult(&sr);
 		}
 	    hFreeConn(&conn);
 	    }
 	}
     }
 else
     for (lf = tg->items; lf != NULL; lf = lf->next)
 	lf->extra = cloneString(lf->name);
 }
 
-void loadNcbiGene(struct track *tg)
+void loadNcbiRefSeq(struct track *tg)
 /* Load up RefSeq known genes. */
 {
 enum trackVisibility vis = tg->visibility;
 loadGenePredWithName2(tg);
 if (vis != tvDense)
     lookupRefNames(tg);
 vis = limitVisibility(tg);
 }
 
 void loadRefGene(struct track *tg)
 /* Load up RefSeq known genes. */
 {
 enum trackVisibility vis = tg->visibility;
 tg->items = lfFromGenePredInRange(tg, tg->table, chromName, winStart, winEnd);
 if (vis != tvDense)
@@ -7148,30 +7157,36 @@
 
 Color refGeneColorByStatus(struct track *tg, char *name, struct hvGfx *hvg)
 /* Get refseq gene color from refSeqStatus.
  * Reviewed, Validated -> normal, Provisional -> lighter,
  * Predicted, Inferred(other) -> lightest
  * If no refSeqStatus, color it normally.
  */
 {
 int col = tg->ixColor;
 struct rgbColor *normal = &(tg->color);
 struct rgbColor lighter, lightest;
 struct sqlConnection *conn = hAllocConn(database);
 struct sqlResult *sr;
 char **row;
 char query[256];
+
+if (startsWith("ncbiRefSeq", tg->table))
+    {
+    sqlSafef(query, sizeof query, "select status from ncbiRefSeqLink where id = '%s'", name);
+    }
+else
     sqlSafef(query, sizeof query, "select status from refSeqStatus where mrnaAcc = '%s'",
         name);
 sr = sqlGetResult(conn, query);
 if ((row = sqlNextRow(sr)) != NULL)
     {
     if (startsWith("Reviewed", row[0]) || startsWith("Validated", row[0]))
         {
         /* Use the usual color */
         }
     else if (startsWith("Provisional", row[0]))
         {
         lighter.r = (6*normal->r + 4*255) / 10;
         lighter.g = (6*normal->g + 4*255) / 10;
         lighter.b = (6*normal->b + 4*255) / 10;
         col = hvGfxFindRgb(hvg, &lighter);
@@ -7191,40 +7206,40 @@
 
 Color refGeneColor(struct track *tg, void *item, struct hvGfx *hvg)
 /* Return color to draw refseq gene in. */
 {
 struct linkedFeatures *lf = item;
 
 /* allow itemAttr to override coloring */
 if (lf->itemAttr != NULL)
     return hvGfxFindColorIx(hvg, lf->itemAttr->colorR, lf->itemAttr->colorG, lf->itemAttr->colorB);
 
 /* If refSeqStatus is available, use it to determine the color.
  * Reviewed, Validated -> normal, Provisional -> lighter,
  * Predicted, Inferred(other) -> lightest
  * If no refSeqStatus, color it normally.
  */
-if (hTableExists(database,  "refSeqStatus"))
+if (hTableExists(database,  "refSeqStatus") || hTableExists(database,  "ncbiRefSeqLink"))
     return refGeneColorByStatus(tg, lf->name, hvg);
 else
     return(tg->ixColor);
 }
 
-void ncbiGeneMethods(struct track *tg)
+void ncbiRefSeqMethods(struct track *tg)
 /* Make NCBI Genes track */
 {
-tg->loadItems = loadNcbiGene;
+tg->loadItems = loadNcbiRefSeq;
 tg->itemName = refGeneName;
 tg->mapItemName = ncbiRefGeneMapName;
 tg->itemColor = refGeneColor;
 }
 
 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)
@@ -14342,31 +14357,34 @@
 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("ncbiGene", ncbiGeneMethods);
+registerTrackHandler("ncbiRefSeq", ncbiRefSeqMethods);
+registerTrackHandler("ncbiRefSeqCurated", ncbiRefSeqMethods);
+registerTrackHandler("ncbiRefSeqPredicted", ncbiRefSeqMethods);
+registerTrackHandler("ncbiRefSeqOther", ncbiRefSeqMethods);
 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);