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