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