1b4e388a646ec3b5f5662ba6e979f23bc6ebc5e5 fanhsu Tue May 31 14:00:49 2011 -0700 Updated OMIM entry selection logic. diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index b833c4d..93eb3ff 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -10746,49 +10746,52 @@ if (isNotEmpty(ret)) dyStringAppend(dy, ret); safef(query,sizeof(query), "select distinct description from omimPhenotype, omimGene2 where name='%s' and name=cast(omimId as char) order by description", name); char *disorders = collapseRowsFromQuery(query, "; ", 20); if (isNotEmpty(disorders)) { dyStringAppend(dy, "; disorder(s): "); dyStringAppend(dy, disorders); } hFreeConn(&conn); return(dy->string); } -char *getDisorderClass(char *omimId) +boolean hasOmimPhenotypeClass(char *omimId, int targetClass) /* Look up phenotypeClass for omimId, for filtering items. Don't free result! */ { -static char answer[256]; +boolean result; +char answer[255]; struct sqlConnection *conn = hAllocConn(database); char query[256]; safef(query,sizeof(query), - "select phenotypeClass from omimPhenotype where omimId =%s", omimId); + "select phenotypeClass from omimPhenotype where omimId =%s and phenotypeClass=%d", omimId, + targetClass); char *ret = sqlQuickQuery(conn, query, answer, sizeof(answer)); if (ret == NULL) - safecpy(answer, sizeof(answer), "0"); + result = FALSE; +else + result = TRUE; hFreeConn(&conn); -return(answer); +return(result); } boolean doThisOmimEntry(struct track *tg, char *omimId) /* check if the specific class of this OMIM entry is selected by the user */ { -char *disorderClass = NULL; boolean doIt; char labelName[255]; boolean doClass1 = FALSE; boolean doClass2 = FALSE; boolean doClass3 = FALSE; boolean doClass4 = FALSE; boolean doOthers = FALSE; struct hashEl *omimLocationLabels; struct hashEl *label; safef(labelName, sizeof(labelName), "%s.label", tg->table); omimLocationLabels = cartFindPrefix(cart, labelName); /* if user has not made selection(s) from the filter, enable every item */ @@ -10807,38 +10810,37 @@ } if (endsWith(label->name, "class3") && differentString(label->val, "0")) { doClass3 = TRUE; } if (endsWith(label->name, "class4") && differentString(label->val, "0")) { doClass4 = TRUE; } if (endsWith(label->name, "others") && differentString(label->val, "0")) { doOthers = TRUE; } } -disorderClass = getDisorderClass(omimId); - doIt = FALSE; -doIt = doIt || (doClass1 && sameWord(disorderClass, "1")) ; -doIt = doIt || (doClass2 && sameWord(disorderClass, "2")) ; -doIt = doIt || (doClass3 && sameWord(disorderClass, "3")) ; -doIt = doIt || (doClass4 && sameWord(disorderClass, "4")) ; -doIt = doIt || (doOthers && sameWord(disorderClass, "0")) ; + +doIt = doIt || (doClass1 && hasOmimPhenotypeClass(omimId, 1)); +doIt = doIt || (doClass2 && hasOmimPhenotypeClass(omimId, 2)); +doIt = doIt || (doClass3 && hasOmimPhenotypeClass(omimId, 3)); +doIt = doIt || (doClass4 && hasOmimPhenotypeClass(omimId, 4)); +doIt = doIt || (doOthers && hasOmimPhenotypeClass(omimId, 0)); return(doIt); } static void omimFilter(struct track *tg) /* Filter the already-loaded items in the omimGene2 or the omimLocation track */ { struct bed *bed, *nextBed = NULL, *list = NULL; for (bed = tg->items; bed != NULL; bed = nextBed) { nextBed = bed->next; /* check if user has selected the specific class for this OMIM entry */ if (doThisOmimEntry(tg, bed->name)) slAddHead(&list, bed); } @@ -10885,31 +10887,32 @@ lighter.r = (6*normal->r + 4*255) / 10; lighter.g = (6*normal->g + 4*255) / 10; lighter.b = (6*normal->b + 4*255) / 10; lightest.r = (1*normal->r + 2*255) / 3; lightest.g = (1*normal->g + 2*255) / 3; lightest.b = (1*normal->b + 2*255) / 3; struct sqlConnection *conn = hAllocConn(database); class1Clr = hvGfxFindColorIx(hvg, lightest.r, lightest.g, lightest.b); class2Clr = hvGfxFindColorIx(hvg, lighter.r, lighter.g, lighter.b); class3Clr = hvGfxFindColorIx(hvg, normal->r, normal->g, normal->b); -class4Clr = hvGfxFindColorIx(hvg, 153,0, 204); // purple +//class4Clr = hvGfxFindColorIx(hvg, 153,0, 204); // purple +class4Clr = hvGfxFindColorIx(hvg, 56, 11, 97); classOtherClr = hvGfxFindColorIx(hvg, 200, 200, 200); // light gray safef(query, sizeof(query), "select omimId, phenotypeClass from omimPhenotype where omimId=%s", el->name); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); hFreeConn(&conn); if (row == NULL) { // set to gray if this entry does not have any disorder info sqlFreeResult(&sr); return classOtherClr; } @@ -11045,31 +11048,33 @@ Light Gray: for Others */ lighter.r = (6*normal->r + 4*255) / 10; lighter.g = (6*normal->g + 4*255) / 10; lighter.b = (6*normal->b + 4*255) / 10; lightest.r = (1*normal->r + 2*255) / 3; lightest.g = (1*normal->g + 2*255) / 3; lightest.b = (1*normal->b + 2*255) / 3; class1Clr = hvGfxFindColorIx(hvg, lightest.r, lightest.g, lightest.b); class2Clr = hvGfxFindColorIx(hvg, lighter.r, lighter.g, lighter.b); class3Clr = hvGfxFindColorIx(hvg, normal->r, normal->g, normal->b); -class4Clr = hvGfxFindColorIx(hvg, 153,0, 204); // purple +//class4Clr = hvGfxFindColorIx(hvg, 153,0, 204); // purple +class4Clr = hvGfxFindColorIx(hvg, 56, 11, 97); +//class4Clr = hvGfxFindColorIx(hvg, 97, 11, 94); classOtherClr = hvGfxFindColorIx(hvg, 200, 200, 200); // light gray struct sqlConnection *conn = hAllocConn(database); safef(query, sizeof(query), "select omimId, phenotypeClass from omimPhenotype where omimId=%s", el->name); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); hFreeConn(&conn); if (row == NULL) { // set to gray if this entry does not have any disorder info sqlFreeResult(&sr); @@ -11113,31 +11118,31 @@ } } static void omimLocationLoad(struct track *tg) /* Load and filter OMIM Loci items, storing long label from omimLocationDescription. */ { bedPlusLabelLoad(tg, omimLocationDescription); omimFilter(tg); } void omimLocationMethods (struct track *tg) /* Methods for OMIM Loci (Non-Gene Entry Cytogenetic Locations). */ { tg->loadItems = omimLocationLoad; tg->itemColor = omimLocationColor; -tg->itemNameColor = omimGene2Color; +tg->itemNameColor = omimLocationColor; tg->drawItemAt = bedPlusLabelDrawAt; tg->mapItem = bedPlusLabelMapItem; tg->nextPrevExon = simpleBedNextPrevEdge; } char *omimGeneName(struct track *tg, void *item) /* set name for omimGene track */ { struct bed *el = item; char query[256]; struct sqlConnection *conn = hAllocConn(database); char *geneLabel = NULL; char *omimGeneLabel = cartUsualString(cart, "omimGene.label", "OMIM ID");