4dcb41c179c6fae38abffb52dd2b764b74301c7c angie Mon Jul 30 16:39:17 2012 -0700 Feature #8551 (Sequence Ontology terms for predicted functional effects on SNP details pages):at Ensembl's request, instead of displaying dbSNP's predicted function terms, instead show terms from the Sequence Ontology (SO). Where possible, terms from Ensembl's list at http://staging.ensembl.org/info/docs/variation/predicted_data.html are used. diff --git src/hg/hgTracks/variation.c src/hg/hgTracks/variation.c index 4fa7427..bd28704 100644 --- src/hg/hgTracks/variation.c +++ src/hg/hgTracks/variation.c @@ -277,31 +277,31 @@ static boolean snp125FuncFilterItem(void *item) /* Return TRUE if item passes filter, i.e. has an included property. */ { struct snp125 *el = (struct snp125 *)item; if (!snp125FuncFilterOn) return TRUE; char *words[128]; int wordCount, i; char funcString[4096]; safecpy(funcString, sizeof(funcString), el->func); wordCount = chopCommas(funcString, words); for (i = 0; i < wordCount; i++) { char *simpleFunc = (char *)hashMustFindVal(snp125FuncCartNameHash, words[i]); - if (slNameInList(snp125FuncFilter, simpleFunc)) + if (slNameInList(snp125FuncFilter, simpleFunc) || slNameInList(snp125FuncFilter, words[i])) return TRUE; } return FALSE; } boolean snpLocTypeFilterItem(struct track *tg, void *item) /* Return TRUE if item passes filter, i.e. has no excluded property. */ { struct snp *el = item; int snpLocType = 0; for (snpLocType=0; snpLocType<snpLocTypeCartSize; snpLocType++) if (containsStringNoCase(el->locType,snpLocTypeDataName[snpLocType])) if ( sameString(snpLocTypeCart[snpLocType], "exclude") ) return FALSE; @@ -634,31 +634,31 @@ int i; for (i=0; i < varCount; i++) { char cartVar[512]; safef(cartVar, sizeof(cartVar), "%s.%s%s", track, attribute, (varsAreOld ? snp125OldColorVarToNew(vars[i], attribute) : vars[i])); char *defaultCol = defaults[i]; if (varsAreOld) defaultCol = cartUsualString(cart, vars[i], defaultCol); char *col = cartUsualString(cart, cartVar, defaultCol); cartColors[i] = stringArrayIx(col, snp125ColorLabel, snp125ColorArraySize); } return cartColors; } -static void snp125SetupFiltersAndColorsFromCart(struct trackDb *tdb) +static void snp125SetupFiltersAndColorsFromCart(struct trackDb *tdb, int version) /* Load the controls set by hgTrackUi into global vars. */ { char *track = tdb->track; char cartVar[512]; safef(cartVar, sizeof(cartVar), "%s.minAvHet", track); snp125AvHetCutoff = cartUsualDouble(cart, cartVar, // Check old cart var name: cartUsualDouble(cart, "snp125AvHetCutoff", SNP125_DEFAULT_MIN_AVHET)); safef(cartVar, sizeof(cartVar), "%s.maxWeight", track); int defaultMaxWeight = SNP125_DEFAULT_MAX_WEIGHT; char *setting = trackDbSetting(tdb, "defaultMaxWeight"); if (isNotEmpty(setting)) defaultMaxWeight = atoi(setting); snp125WeightCutoff = cartUsualInt(cart, cartVar, // Check old cart var name and tdb default: @@ -703,30 +703,37 @@ track, snp125OldColorVarToNew(snp125FuncOldColorVars[i], "func")); char *cartVal = cartUsualString(cart, cartVar, cartUsualString(cart, snp125FuncOldColorVars[i], snp125FuncDefault[i])); /* There are many function types, some of which are mapped onto * simpler types in snp125Ui.c. First store the indexes of * selected colors of simpler types that we present as coloring * choices; then (below) map the more detailed function types' * indexes onto the simpler types' indexes. */ hashAddInt(snp125FuncCartColorHash, snp125FuncDataName[i], stringArrayIx(cartVal, snp125ColorLabel, snp125ColorArraySize)); /* Similarly, map names. Self-mapping here, synonyms below. */ hashAdd(snp125FuncCartNameHash, snp125FuncDataName[i], snp125FuncDataName[i]); } +if (version >= 137) + { + hashAddInt(snp125FuncCartColorHash, "ncRNA", + stringArrayIx("blue", snp125ColorLabel, snp125ColorArraySize)); + hashAdd(snp125FuncCartNameHash, "ncRNA", "ncRNA"); + } +// Map finer-grained func codes in table to simplified filtering/coloring choices. int j, k; for (j = 0; snp125FuncDataSynonyms[j] != NULL; j++) { char *canonical = snp125FuncDataSynonyms[j][0]; for (k = 1; snp125FuncDataSynonyms[j][k] != NULL; k++) { hashAddInt(snp125FuncCartColorHash, snp125FuncDataSynonyms[j][k], hashIntVal(snp125FuncCartColorHash, canonical)); hashAdd(snp125FuncCartNameHash, snp125FuncDataSynonyms[j][k], canonical); } } } Color snp125ColorToMg(enum snpColorEnum thisSnpColor) /* Translate full range of snpColorEnum into memgfx MG_<COLOR>. */ @@ -908,31 +915,31 @@ { return snp132AlFreqCmp(vb, va); } void loadSnp125(struct track *tg) /* load snps from table, ortho alleles from snpXXXOrthoXXX table, filter and color. */ { int version = snpVersion(tg->table); if (version >= 132) loadSnp125Basic(tg, version, (void *)(snp132ExtLoad)); else if (version >= 125) loadSnp125Basic(tg, version, (void *)(snp125Load)); else errAbort("How was loadSnp125 called on version < 125? (%d)", version); -snp125SetupFiltersAndColorsFromCart(tg->tdb); +snp125SetupFiltersAndColorsFromCart(tg->tdb, version); filterSnp125Items(tg, version); snp125ColorItems(tg, version); // If in dense or squish mode, sort items by color or allele frequency: boolean sortByAF = (snp125ColorSource == snp125ColorSourceAlleleFreq); if (tg->visibility == tvDense) slSort(&tg->items, sortByAF ? snp132AlFreqCmp : snp125ColorCmp); else if (tg->visibility == tvSquish) slSort(&tg->items, sortByAF ? snp132AlFreqCmpDesc : snp125ColorCmpDesc); else { slSort(&tg->items, snpOrthoCmp); setSnp125ExtendedNameExtra(tg); enum trackVisibility newVis = limitVisibility(tg); if (newVis == tvDense)